Cours de Java les classes abstraites, les interfaces, le polymorphisme, tutoriel & guide de travaux pratiques JAVA en pdf.
Concepts de base de la programmation orientée objet
Introduction
Le principe fondamental d’un langage orienté objet est que le langage doit permettre d’exprimer la solution d’un problème à l’aide des éléments de ce problèmes. Par exemple, un programme traitant des images doit manipuler des structures de données représentant des images, et non leur traduction sous formes d’une suite de bits. De cette façon, on procède à une abstraction.
Java est l’aboutissement (pour le moment, du moins) de ce concept. Pour Java, l’univers du problème à traiter est constitué d’objets. Cette approche est la plus naturelle car elle correspond à notre façon d’appréhender l’univers, ce qui facilite la modélisation des problèmes.
Rappelons ici le deuxième et troisième précepte de Descartes extraits du discours de la méthode (1637) et qui vont dans ce sens :
« Le deuxième, de diviser chacune des difficultés que j’examinerais , en autant de parcelles qu’il se pourrait, et qu’il serait requis pour les résoudre. »
« Le troisième, de conduire par ordre mes pensées, en commençant par les objets les plus simples et les plus aisés à connaître, pour monter peu, comme par degrés, jusques à la connaissance des plus composés ; et supposant même l’ordre entre ceux qui ne se précèdent point naturellement les uns les autres. »
Tout est donc objet. Il faut entendre par objet, élément de l’univers relatif au problème à traiter. Les objets appartiennent à des catégories appelées classes, qui divisent cet univers.
Illustration des concepts de classe et d’objet
Si notre problème concerne les animaux, nous pouvons créer une classe que nous appellerons Animal. Si nous devons considérer les chiens et les chats, nous créerons les trois classes dérivée de la classe Animal : les classes Chien et Animal. Peu importe que cette division ne soit pas pertinent dans l’univers réel, il suffit qu’elle le soit dans celui du problème à traiter.
Il est évident que le rapport entre milou et Chien n’est pas de la même nature que le rapport entre Chien et Animal. Chien est une sous-classe de Animal. Dans la terminologie de Java, on dit que Chien étend la classe Animal. En revanche milou n’est pas une classe. C’est un représentant de la classe Chien. Selon la terminologie Java, on dit que milou est une instance de la classe Chien.
Les classes
Définition
La classe regroupe la définition des membres de classe, c’est-à-dire :
– des méthodes, les opérations que l’on peut effectuer ;
– des champs, les variables que l’on peut traiter ;
– des constructeurs, qui permettent de créer des objets ;
– et encore d’autres choses plus particulières.
Plus précisément, une classe peut contenir des variables (primitives ou objets), des classes internes, des méthodes, des constructeurs, et des finaliseurs.
La déclaration d’une classe se fait de la façon suivante :
[Modificateurs] class NomClasse
{
corps de la classe
}
Le nom de la classe doit débuter par une majuscule.
Considérons l’exemple suivant :
Class Animal {
// champs
boolean vivant ;
int âge ;
// constructeurs
Animal() {
}
// méthodes
void viellit() {
++âge ;
}
void crie() {
}
}
Les classes final
Une classe peut être déclarée final, dans un but de sécurité ou d’optimisation. Une classe final ne peut être étendue pour créer des sous-classes. Par conséquent, ses méthodes ne peuvent pas être redéfinies et leur accès peut donc se faire sans recherche dynamique.
Une classe final ne peut pas être clonée.
Les classes internes
Une classe Java peut contenir, outre des primitives, des objets (du moins leurs références) et des définitions de méthodes, des définitions de classe. Nous allons maintenant nous intéresser de plus près à cette possibilité.
• Plusieurs classes dans un même fichier
Il arrive fréquemment que certaines classes ne soient utilisées que par une seule autre classe. Considérons l’exemple suivant :
Class Animal {
// champs
boolean vivant ;
int âge ;
Coordonnées position ;
// constructeurs
Animal() {
position = new Coordonnées() ;
}
…
}
Class Coordonnées {
// champs
int x = 0;
int y = 0;
…
}
Toutes ces classes sont définies dans le même fichier, ce qui convient dans le cadre de la démonstration mais certainement pas pour la pratique courante de la programmation efficace. Chacune de ces classes pourrait être définie séparément dans un fichier et affectée à un package.
Lors de la compilation du précédent fichier Animal.java, le compilateur produit deux fichiers : Animal.class et Coordonnées.class.
• Les classes imbriquées ou static
Il peut être avantageux dans certains cas placer la définition d’une classe à l’intérieur d’une autre, lorsque celle-ci concerne uniquement « la classe principale ». Voyons pour notre exemple :
Class Animal {
// champs
boolean vivant ;
int âge ;
Coordonnées position ;
// classes imbriquées
static Class Coordonnées {
// champs
int x = 0;
int y = 0;
…
}
// constructeurs
Animal() {
position = new Coordonnées() ;
}
…
}
La définition de la classe Coordonnées est maintenant imbriquée dans la classe Animal. Par ailleurs, la référence à la classe Coordonnées devient Animal.Coordonnées. De manière générale, les références à une classe imbriquée en Java se font en utilisant le point comme séparateur.
Lors de la compilation du fichier ci-dessus, Animal.java, le compilateur produit deux fichiers : Animal.class et Animal$Coordonnées.class pour la classe imbriquée.
Chapitre 1 – Les bases du langage Java
Les données
Les primitives
Les constantes
Les handles
Les chaînes de caractères
Les tableaux
Les vecteurs
Les collections
Les itérareurs
Les comparateurs
Les opérateurs
Description des principaux opérateurs
new
instanceof
Chapitre 2 – Concepts de base de la programmation orientée objet
Introduction
« Tout est objet ! »
Illustration des concepts de classe et d’objet
Les classes
Définition
Les classes final
Les champs
Définition
Variables d’instances & Variables static
Les variables final
Les méthodes
Les retours
Les constructeurs : création d’objets
Initialisation des objets
Les finaliseurs
Redéfinition des champs et des méthodes
La surchage
Accessibilité
Les classes abstraites, les interfaces, le polymorphisme
Le mot clé abstract
Chapitre 3 – Spécificités du langage
Les entrées / sorties
Package
Les packages
Le clonage
Les threads
Programme principal : la méthode main
Les exceptions (exception) et les erreurs (error)
Annexes
La machine virtuelle Java (JVM)
Compilation
Diagramme de classe – UML
Représentation d’une classe
Relations de dépendances
Diagramme de séquence – UML