Programmation PDF Gratuit

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 virtuelle java) 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 classes et mé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 classe encapsule état et comportement ; une méthode implé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 !");
    }
}