Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.

Slides:



Advertisements
Présentations similaires
Bratec Martin ..
Advertisements

NOTIFICATION ÉLECTRONIQUE
Fragilité : une notion fragile ?
SEMINAIRE DU 10 AVRIL 2010 programmation du futur Hôtel de Ville
Phono-sémantique différentielle des monosyllabes italiens
MAGGIO 1967 BOLOGNA - CERVIA ANOMALIES DU SOMMEIL CHEZ L'HOMME
droit + pub = ? vincent gautrais professeur agrégé – avocat
Transcription de la présentation:

Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques

Ingénierie des réseaux - Chapitre 1 Généralités 2 Master 1 SIGLIS Objectif du chapitre comprendre le concept de l'héritage; comprendre la notion d'héritage appliquée aux classes Java ; comprendre la notion d'interface Java; comprendre la notion d'héritage appliquée aux interfaces; savoir utiliser les principales structures de données génériques en Java.

Ingénierie des réseaux - Chapitre 1 Généralités 3 Master 1 SIGLIS Exemple : l'application de Dessin Un dessin contient un ensemble de figures; Une figure contient un ensemble de points; Un point modèle la notion de position et contient deux coordonnées; La classe Dessin contient une méthode : le service dessiner ; La classe Figure contient 3 méthodes: périmètre calcul du périmètre, surface calcul de la surface, dessiner dessiner la figure à l'écran.

Ingénierie des réseaux - Chapitre 1 Généralités 4 Master 1 SIGLIS Héritage la méthode dessiner est complexe : elle travaille sur la liste des points de la figure Dans le cas d'une cercle, utiliser cet algorithme n'est pas une bonne idée : on peut calculer le périmétre avec la formule On va créer une classe Cercle qui hérite de la classe Figure La classe Cercle possédera : un attribut r : le rayon une attribut centre : la position du cercle des méthodes dessiner, perimetre et surface optimisées pour le cas particulier du cercle périmtre = π.r 2 public class Cercle extends Figure { private Point centre ; private int r ; public double perimetre () { return Math.PI * 2 * r ; } public double surface () { return Math.Pi * (r ** 2) ; } public void dessiner () {... }

Ingénierie des réseaux - Chapitre 1 Généralités 5 Master 1 SIGLIS Classe Dessin Un dessin contient un ensemble de figures la relation est implémentée par le tableau figures Comme un Cercle est une Figure à cause de la relation d'héritage : le tableau peut contenir des figures et des cercles. on pourra appeler la méthode ajouterFigure en lui passant une instance de la classe cercle public class Dessin { // 100 figures maxi private Figure[] figures = new Figure[100]; private int dernier = 0 ; public void dessiner() {.... } public boolean ajouterFigure(Figure nouvelleFigure) { if (dernier >= 100) { // si il n'y a plus de place on renvoie false. return false ; } // on rajoute la figure dans le tableau figures[dernier] = nouvelleFigure ; // on avance la derniere position dernier = dernier + 1 // on renvoie vrai return true ; }

Ingénierie des réseaux - Chapitre 1 Généralités 6 Master 1 SIGLIS Classe Dessin (2) public class Dessin { // 100 figures maxi private Figure[] figures = new Figure[100]; private int dernier = 0 ; public void dessiner() { // récupérer le nombre de figures int nb = figures.length ; for (int i = 0 ; i < nb ; i++ ) { figures[i].dessiner() ; } public boolean ajouterFigure(Figure nouvelleFigure) {... } Lors de l'appel de la méthode dessiner sur la classe Figure, Java sait : déterminer à l'exécution le type effectif de l'objet. appeler la méthode correcte sur la bonne classe: Figure.dessiner ou Cercle.dessiner. Si on rajoute de nouvelles catégories de figures dans l'application (Rectangle, Carré,...) : on n'a pas besoin de modifier la classe Dessin il suffira de redéfinir les méthodes surface, périmétre et dessiner sur les nouvelles classes

Ingénierie des réseaux - Chapitre 1 Généralités 7 Master 1 SIGLIS Héritage La relation d'héritage entre A et B est une relation "est-un" B hérite de A, si dans tout contexte qui utilise un objet de la classe A, je peux remplacer l'objet de A par un objet la classe B. Principe de subsidiarité

Ingénierie des réseaux - Chapitre 1 Généralités 8 Master 1 SIGLIS Interface Une interface déclare : « Voici ce à quoi ressemblera toutes les classes qui implémenteront cette interface ». Une interface est utilisée pour établir un « contrat » entre les classes. Une interface est une classe Java particulière qui: contient des signatures de méthodes; ne contient pas de code. Pour créer une interface, il faut utiliser le mot clé interface Pour hériter d'une interface, il faut utiliser le mot clé implements.

Ingénierie des réseaux - Chapitre 1 Généralités 9 Master 1 SIGLIS Listes Génériques : L'interface List SignatureDescription boolean add(E e)addE Ajoute l'élément spécifié à la fin de la liste void add(int index, E element)addE Insère l'élément spécifié à la position spécifiée dans la liste. void clear()clear Vide La liste. boolean contains(Object o)containsObject Renvoie vrai si la liste contient l'élément spécifié.. EE get(int index)get Renvoie l'élément à la position spécifiée. int indexOf(Object o)indexOfObject Renvoie l'index de la première occurrence de l'élément spécifié dans la liste ou -1 si la liste ne contient pas cet élément. boolean isEmpty()isEmpty Renvoie vrai si la liste est vide. int lastIndexOf(Object o)lastIndexOfObject Renvoie l'index de la dernière occurrence de l'élément spécifié dans la liste ou -1 si la liste ne contient pas cet élément. EE remove(int index)remove Supprime l'élément spécifié à la position spécifiée dans la liste. boolean remove(Object o)removeObject Supprime la première occurrence de l'élément spécifié dans la liste. EE set(int index, E element)setE Remplace l'élément à la position spécifié avec l'élément spécifié. int size()size Renvoie le nombre d'éléments dans la liste. ListList subList(int fromIndex, int toIndex)EsubList Renvoie une vue de la portion de la liste entre la position fromIndex (inclusive) et la position toIndex (exclusive). ObjectObject[]toArray()toArray Renvoie un tableau contenant tous les éléments de la liste du premier au dernier élément. Le List est un type paramétré: le Type E désigne le type des éléments de la liste

Ingénierie des réseaux - Chapitre 1 Généralités 10 Master 1 SIGLIS LinkedList et ArrayList LinkedList et ArrayList hérite de l'interface List et propose des implémentations adaptées à des circonstances particulières. LinkedList correspond à une liste chaînée et doit être employée dans le cas où l'on ne connait pas le nombre d'éléments que l'on va rajouter dans la liste et où les ajouts se font majoritairement en fin de liste; ArrayList correspond à un tableau. Elle doit être préférée à LinkedList dans le cas où on connait à priori le nombre d'éléments que l'on va mettre dans la liste. LinkedList listeChaineeEntiers = new LinkedList () ; ArrayList listeTableauEntier = new ArrayList (100) ; LinkedList listeChaineeEntiers = new LinkedList () ; ArrayList listeTableauEntier = new ArrayList (100) ; Déclaration

Ingénierie des réseaux - Chapitre 1 Généralités 11 Master 1 SIGLIS Boucle for sur les listes génériques Il existe une variable de la boucle for pour les listes génériques for ( : ) bloc d'instructions for ( : ) bloc d'instructions On crée une variable de nom NOMDEVARIABLE et de type NOM DE CLASSE; (1) On évalue la condition de fin de boucle : Si on a parcouru tous les éléments de la liste, l'exécution de la boucle est terminée : il va en 2; S'il reste des éléments à parcourir, on continue; On affecte à la variable NOMDEVARIABLE le premier élément non traité On exécute le bloc d'instructions, On recommence en (1); (2) fin de la boucle.

Ingénierie des réseaux - Chapitre 1 Généralités 12 Master 1 SIGLIS Utilisation des listes génériques La classe Dessin revisitée public class Dessin { // on n'est plus limité par la taille du tableau // autant d'éléments que de mémoire disponible private LinkedList figures = new LinkedList (); public void dessiner() { for (Figure fig : figures) { fig.dessiner() ; } public boolean ajouterFigure(Figure nouvelleFigure) { figures.add(nouvelleFigure) ; // on renvoie vrai return true ; }

Ingénierie des réseaux - Chapitre 1 Généralités 13 Master 1 SIGLIS Un texte ici