La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

La réutilisation des classes1 Sun Services Java Programming Language Copyright 2005 K.ALLEM All Rights Reserved.

Présentations similaires


Présentation au sujet: "La réutilisation des classes1 Sun Services Java Programming Language Copyright 2005 K.ALLEM All Rights Reserved."— Transcription de la présentation:

1 La réutilisation des classes1 Sun Services Java Programming Language Copyright 2005 K.ALLEM All Rights Reserved

2 La réutilisation des classes2 Sommaire Introduction La composition Lhéritage Le polymorphisme

3 La réutilisation des classes3 Sommaire Introduction La composition Lhéritage Le polymorphisme

4 La réutilisation des classes4 Introduction Réutiliser [reytilize] v.tr. de re et utiliser. Utiliser à nouveau ce qui a déjà servi. n.f réutilisation je réutiliserai ma classe existante Réutiliser des classes existantes, est indispensable pour pouvoir développer de manière productive La réutilisation sexprime de plusieurs manières: la composition, lhéritage et le polymorphisme

5 La réutilisation des classes5 Sommaire Introduction La composition Lhéritage Le polymorphisme

6 La réutilisation des classes6 La composition Réutiliser en composant: une classe peut en référencer une autre classe La composition associe un objet à un autre objet, définissant une relation « a un » entre ces deux objets

7 La réutilisation des classes7 En UML… Agrégation et composition Une agrégation est un cas particulier dassociation non symétrique exprimant une relation de contenance Une composition est une agrégation plus forte impliquant que: un élément ne peut appartenir qua un seul agrégat composite La destruction de lagrégat composite entraîne la destruction de tous ses éléments (le composite est responsable du cycle de vie de parties)

8 La réutilisation des classes8 La composition Java En Java, la réutilisation en composant sexprime de cette façon: private ClasseReutilisée champ; UML Composite Élément AgrégatÉlément 1..* 0..* 1

9 La réutilisation des classes9 Exemple en UML

10 La réutilisation des classes10 Exemple en Java public class Adresse { private String rue; private int codePostal; private String ville; … } public class Personne { private String nom; private String prenom; private Adresse adresse; }

11 La réutilisation des classes11 Sommaire Introduction La composition Lhéritage Le polymorphisme

12 La réutilisation des classes12 Réutiliser en héritant: une classe peut reprendre les caractéristiques dune autre classe Lhéritage définit une relation « est un » entre deux classes, une sous classe héritant de sa super classe

13 La réutilisation des classes13 Généralisation, super classe, sous classe Une super classe est une classe plus générale reliée à une plusieurs ou plusieurs autres classes plus spécialisées (sous classes) par une relation de généralisation Les sous classes « héritent » des propriétés de leur super classe et peuvent comporte des propriété spécifiques supplémentaires

14 La réutilisation des classes14

15 La réutilisation des classes15 Lhéritage Java En Java, la réutilisation en héritant sexprime de cette façon: class SuperClasse { //champs et méthodes } class SousClasse extends SuperClasse { //champs et méthodes supplémentaires } UML

16 La réutilisation des classes16 On ne crée un lien dhéritage entre deux classes que si une instance de la sous classe peut être considéré aussi comme instance de sa super classe par la relation est un la super classe ne se trouve pas nécessairement dans le même paquetage que la sous classe

17 La réutilisation des classes17 exemple

18 La réutilisation des classes18 Lors de la création dun objet, la partie qui dépend de sa super classe est initialisée en premier, avant celle qui dépend de sa propre classe. Si linitialisation de la super classe requiert lappel dun constructeur avec paramètres, le passage des valeurs à ce constructeur seffectue dans le constructeur de la classe dérivée avec comme première instruction super(params);

19 La réutilisation des classes19 exemple Les membres private dune super classe restent inaccessibles depuis ses sous classes Les membres freindly dune super classe sont accessibles depuis les sous classes qui appartiennent au même paquetage de la super classe Les membres protected dune super classe sont accessibles depuis nimporte quelle sous classe, quel que soit le paquetage de ces classes Les membres public dune super classe sont bien sûr accessibles depuis ses classes

20 La réutilisation des classes20 Remarques Lhéritage multiple nexiste pas en Java Lhéritage multiple du C ++ peut être remplacé par la possibilité dimplémenter plusieurs interfaces dans une classe Une classe nhérite pas des constructeurs de sa super classe On doit donc ajouter un constructeur à une classe si sa super classe na pas de constructeur sans paramètre

21 La réutilisation des classes21 Le test « est un » Le test Est un une règle simple pour savoir si 2 classes doivent être liées par une relation dhéritage : si A peut être liée à B, la phrase A est un B devrait avoir du sens. Par exemple : un oiseau est un animal un chat est un mammifère une tarte aux pommes est une tarte une fenêtre de texte est une fenêtre une sphère est un objet graphique un tableau dentiers est un tableau

22 La réutilisation des classes22 Par contre, les phrase suivantes sont inappropriées et donc lhéritage nest pas approprié : un oiseau est un mammifère une tarte au pomme est une pomme un moteur est une voiture un tableau dentiers est un entier

23 La réutilisation des classes23 La relation dhéritage est transitive : les méthodes et les variables sont héritées à travers tous les niveaux (sans limitation du nombre de niveaux)

24 La réutilisation des classes24

25 La réutilisation des classes25

26 La réutilisation des classes26 redéfinition de méthodes Une méthode non private est redéfinie (overridden) quand elle est définie dans une sous classe avec le même identificateur, le même nombre de paramètre, et le même type pour chacun des paramètres

27 La réutilisation des classes27 redéfinition de méthodes Une sous-classe peut ajouter des variables et/ou des méthodes à celles quelle hérite de sa super-classe. Une sous-classe peut redéfinir (override) les méthodes dont elle hérite et fournir ainsi des implémentations spécialisées pour celles-ci

28 La réutilisation des classes28 Redéfinition dune méthode Lorsque la classe définit une méthode dont le nom, le type des paramètres et le type de retour sont strictement identiques à ceux dune méthode dont elle hérite nom + types paramètres + type retour = signature Lorsquune méthode redéfinie par une classe est invoquée par un objet de cette classe, cest la nouvelle définition et non pas celle de la superclasse qui est exécutée

29 La réutilisation des classes29

30 La réutilisation des classes30 Ne pas confondre redéfinition (overridding) avec surcharge (overloading)

31 La réutilisation des classes31 Il faut faire attention à la signature des méthodes : deux signatures différentes définissent deux méthodes différentes, même si elles ont le même nom !

32 La réutilisation des classes32 Exercice

33 La réutilisation des classes33 Sommaire Introduction La composition Lhéritage Le polymorphisme

34 La réutilisation des classes34 Réutiliser avec le polymorphisme: modifier limplémentation des méthodes dune autre classe Le polymorphisme est rendu possible grâce à lhéritage (est un) et à la redéfinition des méthodes

35 La réutilisation des classes35 Le polymorphisme est la faculté dune classe à prendre plusieurs formes Si une classe et ses sous classes implémentent différemment un même message, les objets des sous classes prennent des formes différentes pour ce message du point de vue de leur super classe

36 La réutilisation des classes36 La possibilité de designer un objet dune sous classe par une référence relevant de sa super classe est la traduction Java de la relation est un boisson = whisky; boisson =(Boisson)whisky; cest tellement logique que Java noblige pas à noter la classe de conversion!!

37 La réutilisation des classes37 Relation « est un » et conversion de références Les conversions opérant sur une références utilisent la syntaxe: reference1=(Classe)reference2; Les conversions changent la classe dune référence sans transformer ni la valeur de cette référence ni lobjet quelle désigne Les conversions sont autorisées à la compilation si la classe de conversion et la classe de référence ont un lien dhéritage entre elles

38 La réutilisation des classes38 Lors de lexécution, la JVM vérifie que la classe de conversion est effectivement celle de lobjet référencé ou une super classe de cet objet

39 La réutilisation des classes39 exemple class ConversionsReferencesBoisson { public static void main (java.lang.String [] args) { // Création d'objets Boisson eau = new Boisson ("Eau min\u00e9rale", 1f); BoissonAlcoolisee whisky = new BoissonAlcoolisee ("Whisky", 7.4f, 45); // Declaration d'autres références pour les tests Boisson boisson; BoissonAlcoolisee boissonForte; Boisson boissonInconnue = null; Service service ;

40 La réutilisation des classes40 boisson = (Boisson)whisky; // Compilation OK et exécution OK : // Conversion d'une référence d'une classe vers sa super classe acceptée. Le whisky est une boisson

41 La réutilisation des classes41 javax.swing.JOptionPane.showMessageDialog (null, boisson.getNom ()); // Avec la référence boisson, on peut appeler toutes les méthodes de la classe // Boisson mais pas les méthodes supplémentaires de // BoissonAlcoolisee, classe effective de l'objet designé //affiche whisky

42 La réutilisation des classes42 boissonForte = (BoissonAlcoolisee)boisson; // Compilation OK et exécution OK : // Conversion d'une référence d'une classe vers sa sous classe acceptée // a la compilation et a l'exécution, si l'objet référence est effectivement // une instance de la sous classe. A l'exécution, l'objet désigné par boisson // est bien un objet de classe BoissonAlcoolisee

43 La réutilisation des classes43 boissonForte = (BoissonAlcoolisee)boissonInconnue; // Compilation OK et exécution OK : // Conversion d'une référence d'une classe vers sa sous classe acceptée // a la compilation et a l'exécution, si l'objet référencé est inconnu.

44 La réutilisation des classes44 boissonForte = (BoissonAlcoolisee)eau; // Compilation OK mais exception java.lang.ClassCastException a l'execution : // Conversion d'une référence d'une classe vers sa sous classe acceptee // a la compilation mais refusee a l'execution, si l'objet referencé n'est pas // effectivement une instance de la sous classe. A l'execution l'objet // designé par eau n'est pas un objet de classe BoissonAlcoolisee, la JVM déclenche un exception qui interrompt le cours du programme

45 La réutilisation des classes45 Intérêt Le polymorphisme offre : Une plus grande simplicité du code Plus besoin de distinguer différents cas en fonction de la classe de lobjet

46 La réutilisation des classes46 Et surtout une plus grande facilité dévolution du code Les programmes sont plus facilement extensibles car il est possible de définir de nouvelles fonctionnalités en héritant de nouveaux types de données à partir dune classe de base commune sans avoir besoin de modifier le code qui manipule linterface de la classe de base En dautres termes, vous pouvez écrire des programmes capables de travailler avec du code (classes) qui nexistent pas encore !

47 La réutilisation des classes47

48 La réutilisation des classes48

49 La réutilisation des classes49

50 La réutilisation des classes50

51 La réutilisation des classes51

52 La réutilisation des classes52

53 La réutilisation des classes53

54 La réutilisation des classes54

55 La réutilisation des classes55

56 La réutilisation des classes56

57 La réutilisation des classes57

58 La réutilisation des classes58

59 La réutilisation des classes59

60 La réutilisation des classes60

61 La réutilisation des classes61 public class Adresse { private String rue; // Champ memorisant la rue et son numero private int codePostal; // Champ memorisant le code postal private String ville; // Champ memorisant la ville d'une adresse public Adresse (String rue, int codePostal, String ville) { this.rue = rue; this.codePostal = codePostal; this.ville = ville; } public java.lang.String getRue() { return this.rue; } public int getCodePostal() { return this.codePostal; } public java.lang.String getVille() { return this.ville; }

62 La réutilisation des classes62 public class Personne { private String nom; // Champ memorisant le nom d'une personne private String prenom; // Champ memorisant le prenom d'une personne private Adresse adresse; // Champ memorisant l'adresse d'une personne public Personne (String nom, String prenom) { this.nom = nom; this.prenom = prenom; } public String getNom() { return this.nom; } public String getPrenom() { return this.prenom; } /** * Modifie l'adresse de cette personne. */ public void setAdresse (Adresse adresse) { this.adresse = adresse; } /** * Renvoie l'adresse de cette personne. */ public Adresse getAdresse() { return this.adresse; }

63 La réutilisation des classes63 class DeuxPersonnesUneAdresse { public static void main (String[] args) { Personne personne1; // Creation d'une instance de Personne pour Thomas Durand personne1 = new Personne ("Durand", "Thomas"); Adresse adresse1; // Creation d'une instance de Adresse adresse1 = new Adresse("5, rue de Rennes", 7000, "MONS"); // Affectation de son adresse a Thomas personne1.setAdresse (adresse1); // Creation d'une autre instance de Personne pour Sophie Martin Personne personne2 = new Personne("Martin", "Sophie"); // Affectation directe de l'autre adresse avec une nouvelle instance personne2.setAdresse(new Adresse("3, pl. de la Gare", 6000, "CHARLEROI")); // Plus tard... Sophie demenage chez Thomas et partage donc son adresse personne2.setAdresse (personne1.getAdresse ()); // Plus tard... Ils s'agrandissent et demenagent tous les deux Adresse adresseCommune = new Adresse("8, rue de Rennes", 7000, "MONS"); personne1.setAdresse (adresseCommune); personne2.setAdresse (adresseCommune); // Et vous annonce la nouvelle. Les references renvoyees par // personne1.getAdresse() et personne2.getAdresse() sont egales et designent le meme objet String adresse = personne1.getAdresse().getRue() + " \u00e0 " + personne2.getAdresse().getVille(); String nouvelle = personne1.getPrenom() + " et " + personne2.getPrenom() + " habitent maintenant au " + adresse; // Affiche Thomas et Sophie habitent maintenant au 8, rue de Rennes a Mons javax.swing.JOptionPane.showMessageDialog (null, nouvelle); }

64 La réutilisation des classes64


Télécharger ppt "La réutilisation des classes1 Sun Services Java Programming Language Copyright 2005 K.ALLEM All Rights Reserved."

Présentations similaires


Annonces Google