top of page
Photo du rédacteurJC Duval

Java bien

“N'importe quel idiot peut écrire du code qu'un ordinateur peut comprendre. Un bon programmeur écrit du code qu'un humain peut comprendre.”

Martin Fowler - Écrivain, programmeur, informaticien.

 

Ce billet - un peu geek, je le conçois - a pour objectif de présenter les principes de la programmation orientée objet au travers d'une série de petites capsules fabriquées par l'école polytechnique de Lausanne.

 

Programmation orientée objet

'Ce que l'on conçoit bien s’énonce clairement' Nicolas Boileau

La première étape de programmation n’implique absolument aucun code.

C’est avant tout une manière de penser et d’agencer les concepts qui vont permettre de faire ce qu’on appelle de l’architecture logicielle, et c’est de loin la tâche la plus délicate. Écrire le code ne reste qu'une simple transcription … Alors à quand les I.A capables d'écrire du code informatique juste à partir de l'analyse fonctionnelle, voire du besoin, exprimés par un humain ?


Pour venir droit au chapitre qui nous intéresse, la programmation orientée objet [POO] introduit la notion centrale d'objet. C'est le concept prépondérant qui la distingue de la programmation procédurale. Un objet est une entité qui contient à la fois ses propres données et ses propres méthodes. Les méthodes d'un objet sont utilisées, soit pour connaitre, soit pour changer son état, c'est à dire les valeurs de ses données.

Le programme ne se conçoit plus comme un ensemble de procédures mais comme un ensemble d'objets qui interagissent ensemble. Le programme ne s'exécute plus suivant une suite de procédures mais il devient la succession de changements d'états des objets qui le composent.

La POO facilite la modélisation du programme, car le principe d'objet, même s'il reste abstrait, permet de mieux manipuler les concepts réels qu'il représente.


 

Langage objet



Il existe deux grandes catégories de langages manipulant des objets :

• les langages à classes, qu'ils soient sous forme fonctionnelle [Common Lisp OS], impérative [C++, Java] ou les deux [Python, OCaml]

• les langages à prototypes* [JavaScript, Lua]


Dans ce post nous allons nous limiter au langage Java, langage à classes de forme impérative**, une forme qui se prête bien à l'architecture actuelle des processeurs équipant nos ordinateurs.


* Un des grands intérêts des langages à prototypes est l'héritage dynamique, tout objet peut changer de parent à l'exécution, n'importe quand.

** La programmation impérative (du latin imperare = ordonner) est le paradigme de programmation le plus ancien. Ce paradigme définit un programme comme une séquence d'instructions informatiques permettant de modifier l'état du programme.

Ce type de programmation se différencie de la programmation déclarative - dont la programmation fonctionnelle - qui elle s'appuie sur des composants indépendants du contexte, composants qui ne comportent aucun état interne.

Voici un exemple d’application dans le domaine du montage de meubles : alors que la programmation impérative s’apparente à une notice de montage, la programmation déclarative donne pour modèle une image du meuble fini.


🔹 niveau débutant

🔸 niveau avancé

 

1/ Introduction au langage Java


🔹Les bases pour bien programmer en Java.


🔹Comment concrètement déclarer les classes, les objets, les attributs et les méthodes dans Java.

Que dit le code Java au code C ? Tu n'as pas de classe.

🔹Interfaces et implémentation - Bien séparer et bien cloisonner les parties publique et privée.


🔹Encapsulation et abstraction

Un exemple.


🔸Encapsulation et abstraction - Etude de cas. Le jeu du morpion.

 

2/ Constructeurs


🔹Voyons à présent comment faire pour construire et initialiser un objet.


🔹Constructeurs par défaut.


🔹Constructeur de copie.


🔹Fin de vie, affectation, affichage et comparaison d'objets.

 

3/ Héritage


🔹Les classes peuvent former un arbre hiérarchique. Une classe hérite alors des attributs et méthodes des classes des niveaux supérieurs.


🔸Droit d'accès protégé.


🔸Le masquage d'une variable et la redéfinition d'une méthode. Une bonne manière de spécialiser une classe.


🔸Constructeurs et héritage.

 

4/ Polymorphisme


🔹Il permet aux objets d'une sous-classe de conserver leurs propriétés propres.

♨︎ travaille systématiquement avec une résolution dynamique des liens.


🔸Classes et méthodes abstraites

 

5/ Interfaces - Modificateur static

🔹Attributs statiques. Une variable statique permet de représenter une valeur commune à l'ensemble des objets de la classe.


🔹Méthodes statiques. Méthodes qui ne sont pas liées à un objet.


🔹Interfaces. Moyen d'attribuer des composants communs à des objets non liés par une relation d'héritage. Eh oui, ♨︎n'autorise pas l'héritage multiple contrairement à C++.

 

6/ Gestion des exceptions


🔹Une exception permet de signaler toute erreur grave ou toute situation inhabituelle demandant un pointage ad hoc, tout en précisant son origine.


🔸Syntaxe des exceptions


🔸Compléments sur les exceptions

“Si Java disposait d’un véritable garbage collector, la plupart des programmes s’effaceraient d’eux-mêmes dès leur exécution.”
 

7/ Etude de cas


🔸Présentation et modélisation

Les montres


🔸Polymorphisme pour l'affichage des produits d'une montre (utilisation d'une classe abstraite)


🔸Première version du code Java


🔸Modélisation des mécanismes d'une montre


🔸Copie profonde d'une montre à l'instar d'une copie de surface …


Comments


bottom of page