Cours Java n° 26 du 12/05/06 : Les interfaces
Exercice 1 :
A partir de l’exemple fourni dans le support de cours précédent, créer une classe
Etudiant avec 2 attributs (nom, note), puis créer une application qui saisit
des noms et notes d’étudiants, les mémorise dans un tableau puis les affiche
dans l’ordre décroissant des notes.
Exercice 2 : Un zoo
Pour illustrer les
concepts objets, nous représenterons un zoo et les animaux qui l'habitent. On
souhaite pouvoir interroger le nom d'un animal et de lui demander de dormir.
Figure 14. Diagramme
de classes : un zoo est composé d'animaux
a) Ecrire le code de
l’interface
b) Ecrire une classe Lion
qui implémente cette interface (La méthode dormir de la classe Lion affiche à
l’écran le texte suivant : « Moi, je dors sur le ventre. »).
c) Déclarons le zoo : Il
est constitué d'une collection d'objets (ce sera des objets de type Animal), son seul attribut,
d'un constructeur qui crée des animaux (une façon de ne pas construire un zoo
vide), d’une méthode ajouteAnimal et d'une méthode demandant à chacun des animaux
du zoo de s'endormir.
d) Créer une application
qui crée un zoo avec quelques animaux, et endort ses animaux :
La classe Zoo ne dépend pas de
classes d'implémentation d' Animal , elle dépend d'une
abstraction (seulement de l'interface Animal
).
De nouvelles espèces
d'animaux pourront être conçues à posteriori , tout en profitant de
traitements génériques développés bien avant elles !
Les relations entre
classes
Nous avons déjà vu des
relations de :
-
Dépendance,
-
D’association,
-
D’héritage (Généralisation, Spécialisation),
-
D’interface
Voici deux nouveaux types de relations : l’
Agrégation et composition
Une association relie deux - ou plus - classes, sans induire de rôle particulier pour une classe; l'association se lie indistinctement dans les deux sens.
L'agrégation et la composition vont modéliser une situation où l'une des classe joue un rôle particulier, l'association n'est plus symétrique.
L'agrégation.
C'est une relation particulière qui attribut à l'une des classes le rôle d'agrégat et à l'autre classe le rôle d'agrégé. L'agrégation peut être assimilée à une appartenance - faible -.
Soit une configuration constituée d'un certain nombre d'éléments:

Commentaires:
- L'agrégation se modélise par un losange côté agrégat.
- Une configuration comporte un clavier - ou aucun -, un écran - ou aucun - , et éventuellement plusieurs disques
L'agrégation traduit une relation d'appartenance de l'agrégé dans l'agrégat; elle n'induit aucune valeur de multiplicité particulière:

Commentaires:
- Une page peut contenir des images mais celles-ci peuvent appartenir à d'autres pages.
- la destruction d'une page n'entraîne pas celle de l'image mais seulement la suppression du lien.
Bien sûr nous aurons très souvent une cardinalité 1..1 ou 0..1 côté agrégat.
L'appartenance est dite faible car l'agrégé pourra participer à d'autres agrégats et son cycle de vie n'est pas subordonné à celui de son agrégat. Plus haut la disparition d'une configuration n'entraîne pas la disparition des périphériques.
La composition.
Il s'agit d'une appartenance forte. La vie de l'objet composant est liée a celle de son composé. La notion de composant est proche de celle d'attribut, si ce n'est que "l'attribut" est "rehaussé" au rang de classe. On parlera de de réification, on reviendra sur cette notion plus loin.

Commentaires:
- La composition se modélise par un losange noir côté composé.
- Une application contient de 0 à n fenêtres qui contiennent de 0 à n boutons.
- La fermeture de l'application entraîne la destruction des fenêtres qui entraîne la destruction des boutons.
- la non-présence des valeurs de multiplicités est synonyme de 1..1
Règles :
Un composant ne peut appartenir à un moment donné qu'à un seul composé.
La cardinalité ne peut être que de 1 maximum coté composant.
La suppression du composé entraîne celle du composant.

Exemple récapitulatif.

Commentaires
- Le châssis est un élément indissociable d'une voiture, d'où la composition.
- Le moteur et les roues peuvent être utilisés dans d'autres voitures.
- Notez les valeurs 4..4 qui caractérisent plus précisément les valeurs de multiplicité
- Les absences de cardinalité sont assimilable à 1..1
- L'association entre Voiture et Personne n'est pas nommée, cela est conseillé lorsque son nom est trivial: "appartient", "concerne" etc ...afin de na pas alourdir le modèle, sans rien apporter à la sémantique.
Méthode
pour énumérer les éléments d’une collection
L’interface
Iterator du package java.util permet d’énumérer les éléments
d’une collection. Une référence de ce type est renvoyée par la méthode iterator
des classes java.util.ArrayList,
LinkedList, HashSet et TreeSet.
Elle compte les 3 méthodes indiquées ci-après.
Interface
Iterator
|
|
Method
Summary |
|
|
|
|
|
|
|
On
utilise de façon typique les méthodes hasNext et next dans une boucle while ou
for de la forme :
java .util.Iterator it = collection.iterator() ;
while (it.hasNext())
{
Object obj
= it.next() ;
//
Traitement avec l’objet obj
}
Exercice
3 : Ajouter dans la classe Zoo une méthode toString
qui retourne les noms des animaux du zoo (Utilisez l’interface Iterator)
Exercice
4 : En reprenant le support de cours précédent,
écrire l’interface Payant, puis les classes Boisson et Service qui implémentent
l’interface et une classe Ticket de Caisse avec 2 méthodes (addLigne et
getPrixTotal)