Programmation Orientée Objet avec Java

02 : Éléments de Base - Modes de déploiement et différences avec C/C++

 

Modes de déploiement [2]

 

Applet

  • Application Java exécutée dans un navigateur web
  • Intégrée dans des pages HTML via la balise <applet>
  • S'exécute dans un environnement sécurisé (sandbox)
  • Accès limité aux ressources locales pour des raisons de sécurité
  • Technologie historiquement importante mais aujourd'hui obsolète
Java pandacodeur applet

Machine cible → Navigateur → Page HTML → Applet → JVM

Java Web Start

  • Application déployée et mise à jour par le Web
  • Mise en mémoire cache locale (lancement plus rapide)
  • L'application peut être lancée depuis une page HTML ou comme une application locale
  • Technologie destinée à remplacer les Applets (mais assez peu utilisée)
  • Permet un accès plus complet aux ressources système que les Applets
Attention : Les Applets et Java Web Start sont des technologies dépréciées. Les applications web modernes utilisent plutôt JavaScript, HTML5 et des frameworks comme React ou Angular.

Différences par rapport à C/C++

Syntaxe simplifiée

  • Élimination des redondances C/C++
  • Tailles définies pour les types primitifs (indépendantes de la plateforme)
  • Garbage Collector (ramasse-miettes) intégré

Éléments supprimés dans Java :

Élément C/C++ Statut dans Java Alternative/Remarque
Préprocesseur / #define / #include ❌ Supprimé Utiliser import pour les packages
Fichiers header (.h) ❌ Supprimé Les interfaces et classes remplacent cette fonctionnalité
Structures / Unions ❌ Supprimé Utiliser des classes
Fonctions et variables globales ❌ Supprimé Tout doit être dans une classe (méthodes static pour simuler)
Héritage multiple ❌ Supprimé Héritage simple + interfaces
Pointeurs ❌ Supprimé Références d'objets (plus sûres)
Surcharge des opérateurs ❌ Supprimé Non supportée (sauf pour + sur String)
Instruction goto ❌ Supprimé Utiliser break et continue avec labels
Transtypages automatiques dangereux ❌ Supprimé Typage plus strict et sécurisé
Avantage : Ces suppressions rendent Java plus simple, plus sûr et moins sujet aux erreurs que C/C++.

Premier programme Java

Un premier programme (très poli) enregistré dans le fichier "Bonjour.java" :

//-------------------------------------------
// Un premier programme Java
//-------------------------------------------
public class Bonjour {
    public static void main(String[] args) {
        System.out.println("Bonjour à tous !");
    }
}
Java pandacodeur code hello word
Point important : Le nom de la classe doit correspondre au nom du fichier source (sans l'extension .java)

Compilation et Interprétation

Compilation interpretation pandacodeur java

Source → Compilateur → Bytecode → Interpréteur → Java VM

Processus détaillé :

  1. Édition : Création du fichier source P1.java avec un éditeur
  2. Compilation : javac P1.java → génère P1.class (bytecode)
  3. Interprétation : java P1 → la JVM exécute le bytecode
# Compilation
javac Bonjour.java

# Exécution
java Bonjour

# Sortie : Bonjour à tous !
Environnement de développement : Dans un IDE (Eclipse, IntelliJ, NetBeans), ces commandes sont disponibles via des menus et barres d'outils.

Questions de Cours

Question 1: Applet Java

Quelles sont les principales limitations de sécurité imposées aux Applets Java par défaut?

Réponse :

Les Applets Java fonctionnent dans un "sandbox" (bac à sable) qui limite :

  • L'accès au système de fichiers local
  • Les connexions réseau (seulement vers le serveur d'origine)
  • L'exécution de programmes natifs
  • L'accès aux propriétés système sensibles
  • La création de fenêtres sans notification

Question 2: Java Web Start

Quels avantages Java Web Start offre-t-il par rapport aux Applets traditionnelles?

Réponse :

  • Mise en cache local pour un lancement plus rapide
  • Possibilité de fonctionner hors ligne après téléchargement initial
  • Mises à jour automatiques via le web
  • Meilleur accès aux ressources locales que les Applets
  • Lancement possible depuis le bureau comme une application native

Question 3: Différences C++/Java

Pourquoi Java a-t-il supprimé l'héritage multiple présent en C++ et quelle alternative propose-t-il?

Réponse :

Java a supprimé l'héritage multiple car il peut créer :

  • Des ambiguïtés (problème du diamant)
  • Une complexité accrue
  • Des problèmes de maintenance

Alternative : Java propose l'héritage simple + les interfaces. Une classe peut implémenter plusieurs interfaces mais étendre une seule classe.

Question 4: Gestion mémoire

Quelle est la différence fondamentale entre la gestion de la mémoire en C++ et en Java?

Réponse :

C++ : Gestion manuelle de la mémoire avec new/delete. Risque de fuites mémoire et de pointeurs invalides.

Java : Garbage Collector automatique. La JVM libère automatiquement la mémoire des objets non référencés. Plus sûr mais moins contrôlable.

Question 5: Compilation Java

Expliquez la différence entre la compilation en C++ et la compilation en Java.

Réponse :

C++ : Compilation native → code machine spécifique à la plateforme

Java : Compilation en bytecode → code intermédiaire exécuté par la JVM

Le bytecode Java est portable et peut s'exécuter sur n'importe quelle plateforme ayant une JVM.

Question 6: Structure programme

Pourquoi en Java le nom de la classe publique doit-il correspondre au nom du fichier source?

Réponse :

Cette contrainte permet :

  • Une organisation claire du code source
  • Une localisation facile des classes
  • Une simplification pour le compilateur et la JVM
  • Une cohérence dans les projets

Exemple : La classe public class Bonjour doit être dans Bonjour.java

Question 7: Pointers vs Références

Quelle est la différence entre les pointeurs en C++ et les références en Java?

Réponse :

Pointeurs C++ :

  • Arithmétique de pointeurs possible
  • Peuvent pointer vers n'importe quel emplacement mémoire
  • Risques de sécurité et stabilité

Références Java :

  • Pas d'arithmétique de références
  • Ne peuvent pointer que vers des objets valides
  • Plus sûres, gérées par le Garbage Collector
  • Syntaxe simplifiée (pas de * ou &)

Question 8: Bytecode et JVM

Quels sont les avantages du modèle de compilation en bytecode avec JVM par rapport à la compilation native?

Réponse :

  • Portabilité : "Write Once, Run Anywhere"
  • Sécurité : Vérification du bytecode par la JVM
  • Optimisations : JIT compilation adaptative
  • Gestion mémoire : Garbage Collector intégré
  • Isolation : La JVM isole l'application du système d'exploitation

Résumé

  • Java propose différents modes de déploiement : Applications, Applets (obsolètes), Java Web Start
  • Java a simplifié et sécurisé la syntaxe par rapport à C/C++
  • Suppression des éléments complexes/dangereux : pointeurs, héritage multiple, etc.
  • Le Garbage Collector automatise la gestion mémoire
  • Compilation en bytecode portable exécuté par la JVM
  • Structure stricte : nom de fichier = nom de classe publique
 
Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam