Cours Initiation à Java et POO (PDF)
Initiation à Java et à la programmation orientée objet. Présentation synthétique de l'environnement, du cycle de compilation et d'exécution, et des concepts essentiels de la POO pour débuter la création d'une application simple. Exemples basés sur Java 8 (LTS) ; concepts applicables aux versions ultérieures.
Auteur : Raphaël Bolze — ENS Lyon (École normale supérieure de Lyon) — raphael.bolze@ens-lyon.fr
🎯 Ce que vous allez apprendre
- Histoire et positionnement : contexte de création et distinctions entre plates‑formes (
J2SE,J2EE,J2ME). - Environnement : rôle de la JVM et du SDK (compilateur
javac, machine virtuellejava) et cycle compilation/exécution. - Outils de développement : aperçu du compilateur, de l'archivage, de la documentation et des IDE/outils de build pour structurer un projet.
- Premier programme : écrire, compiler et exécuter un programme simple pour maîtriser les étapes pratiques.
- Principes de la POO : Encapsulation, Héritage, Polymorphisme, Interfaces, ainsi que notions de
classesetméthodes. - Cycle d'une application : du code source au bytecode, avec vérification et chargement par la machine virtuelle.
📑 Sommaire du document
- Cours Initiation à Java et POO (PDF)
👤 À qui s'adresse ce cours ?
- Public cible : débutants en programmation ou étudiants découvrant la programmation orientée objet.
- Prérequis : connaissances informatiques de base et capacité à utiliser un éditeur de texte et un système d'exploitation pour installer des outils.
Le PDF propose des exemples de code et des exercices de mise en pratique ; certains exercices incluent des corrections ou des indications de résolution pour guider le travail en autonomie ou en TP.
❓ Foire aux questions (FAQ)
Ce support convient‑il aux débutants ? Oui. Le document guide pas à pas l'installation des outils, la création d'un premier fichier source, la compilation puis l'exécution.
Comment compiler et exécuter un programme ? Compiler le fichier source avec javac MonProgramme.java pour obtenir un bytecode, puis lancer la classe via la machine virtuelle avec java MonProgramme.
javac MonProgramme.java
java MonProgramme
Différences entre JDK, JRE et JVM
La terminologie JDK/JRE/JVM est souvent source de confusion pour les débutants. Le tableau ci‑dessous compare rapidement leurs fonctions principales et l'usage côté développement ou exécution. Ces éléments restent pertinents pour les distributions compatibles avec les versions LTS récentes (Java 11, Java 17, Java 21).
| Élément | Fonction principale | Contenu / exemples | Usage |
|---|---|---|---|
| JDK | Kit de développement | Compilateur javac, outils de packaging, bibliothèques standard |
Développement et compilation d'applications |
| JRE | Environnement d'exécution | JVM + bibliothèques nécessaires à l'exécution | Exécution d'applications sans outils de compilation |
| JVM | Machine virtuelle | Chargement des classes, vérification du bytecode, exécution et GC | Exécution portable du bytecode sur diverses plateformes |
Installation du kit de développement Java (JDK)
Télécharger et installer le JDK adapté à votre système permet d'obtenir le compilateur et les outils de build. Après installation, vérifier les variables d'environnement (JAVA_HOME et PATH) pour utiliser javac et java depuis le terminal. Le JDK inclut les outils de compilation tandis que le JRE fournit uniquement l'exécution. Préférez une distribution compatible avec les versions LTS (Java 11, Java 17, Java 21) pour garantir la pérennité des concepts et des bibliothèques enseignées.
Les piliers de la programmation orientée objet
Les principes listés ci‑dessous décrivent les mécanismes de base et leur usage pratique en Java.
- Encapsulation
- Contrôle de l'accès aux données via des modificateurs (
private,protected,public) et usage d'accesseurs (getters/setters) pour garantir l'intégrité des objets. - Héritage
- Réutilisation et spécialisation de comportements entre classes parentes et classes dérivées, via
extends, avec attention aux relations « est‑un » et à la gestion du constructeur. - Polymorphisme
- Une référence peut représenter plusieurs types (sous‑types), facilitant le code générique et l'extensibilité ; s'appuie sur les types statiques et le dispatch dynamique.
- Interfaces
- Contrats définissant des méthodes que les classes implémentent, favorisant le découplage, la substituabilité et la testabilité.
- Classes et méthodes
- Une
classeencapsule état et comportement ; uneméthodeimplémente une action. En Java, la déclaration des types et des signatures favorise la lisibilité et la sécurité au moment de la compilation.
Pourquoi apprendre la POO avec Java ?
Java combine un typage statique strict et une portabilité réelle grâce au principe « Write Once, Run Anywhere ». Le typage statique permet de détecter de nombreuses erreurs à la compilation, d'améliorer l'outillage (refactorings, complétion) et la maintenance du code. La JVM fournit une couche d'indépendance vis‑à‑vis du système hôte, facilitant le déploiement multi‑plateforme. Ces avantages rendent Java particulièrement adapté à l'enseignement des bonnes pratiques de conception logicielle et à la construction d'architectures modulaires.
Cycle d'une application Java
Le code source (.java) est transformé en bytecode (.class) par le compilateur javac. Ce bytecode, indépendant de la plate‑forme, est interprété ou compilé juste‑à‑temps (JIT) par la JVM qui effectue le chargement des classes, la vérification de sécurité, l'optimisation et l'exécution.
Le bytecode est un format intermédiaire optimisé pour la machine virtuelle, vérifié avant exécution et sujet à des optimisations JIT au moment de l'exécution. La JVM gère également la mémoire d'exécution et lance le Garbage Collector pour libérer automatiquement les objets non référencés, réduisant la charge de gestion mémoire pour le développeur tout en imposant des pratiques de conception (éviter les fuites de références, favoriser les structures adaptées).
Gestion de la mémoire et Garbage Collector
La gestion mémoire en Java repose sur un ramasse‑miettes (Garbage Collector) intégré à la JVM. Le GC détecte et libère les objets inaccessibles afin d'éviter les fuites mémoire. Différents algorithmes et collecteurs existent selon la JVM et la version (par exemple G1, ZGC, Shenandoah sur certaines distributions modernes). Comprendre le GC permet d'écrire des programmes plus performants : choix des structures, durée de vie des objets et profilage mémoire sont des éléments à maîtriser pour les applications réelles.
Modélisation et conception avec UML
Le cours aborde les bases de la modélisation objet via UML (Unified Modeling Language), en insistant sur la norme UML 2 pour la description des diagrammes techniques. Les diagrammes de classes permettent de définir les entités, attributs et opérations qui se traduiront ensuite en classes et méthodes dans le code. Les diagrammes de séquence et d'activités clarifient le comportement attendu et les interactions entre objets avant l'implémentation, ce qui facilite la revue et la validation en équipe.
Comparaison de Java avec C++ et Python
Les concepts POO présentés ici se transposent à d'autres langages, mais avec des différences notables. Par rapport à C++, Java gère la mémoire automatiquement via le GC et impose un typage statique plus strict, là où C++ offre un contrôle mémoire fin et plusieurs paradigmes. Python propose une POO plus flexible et un typage dynamique, ce qui facilite des prototypes rapides mais diminue la détection d'erreurs à la compilation. Comprendre ces écarts aide à choisir les bonnes pratiques et à adapter les modèles de conception selon le langage cible.
Exercices pratiques et exemples de code Java
Le support inclut des exercices guidés et des exemples de code pour mettre en pratique les notions présentées : écrire une classe simple, encapsuler des données, implémenter une interface et tester l'héritage. Les exercices progressifs facilitent la révision et l'assimilation des principes fondamentaux.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Bonjour, monde !");
}
}