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

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Langages objet Définitions Traduction des méthodes en C++
Introduction à Java - les paquetages -
C.
Scénario 4 " Création et modification de classes " [ Entrée « Directeur » ] reproduction interdite - © copyright CATEL-diffusion.
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Les objets et les classes1 Sun Services Java Programming Language Copyright 2005 K.ALLEM All Rights Reserved.
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Programmation par Objets et Java
Chapitre III Héritage (début)
Principes de programmation (suite)
Programmation orientée objet
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Langage Oriente Objet Cours 4.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 5: Modelling with Classes.
Principes de programmation (suite)
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
POO : Objets et classes (Rappels)
Langage Oriente Objet Cours 2.
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction au paradigme orienté-objet (suite)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Cours 4 Héritage (suite).
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
INF1101 Algorithmes et structures de données
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Héritage et composition
Travaux Pratiques Représentation des connaissances
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Créer des packages.
12/04/ Le polymorphisme Cours 8 Cours 8.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Tutorat en bio-informatique
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Le polymorphisme.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Chapitre 7: Héritage Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus Java Software.
LES CLASSES ET LES OBJETS
Introduction à l'orienté objet. Définition Le terme orienté objet siginifie que l'on organise le logiciel comme une collection d'objets organisée en graphe.
Transcription de la présentation:

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

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

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

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

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

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

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)

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

La réutilisation des classes9 Exemple en UML

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; }

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

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

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

La réutilisation des classes14

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

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

La réutilisation des classes17 exemple

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);

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

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

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

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

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)

La réutilisation des classes24

La réutilisation des classes25

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

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

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

La réutilisation des classes29

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

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 !

La réutilisation des classes32 Exercice

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

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

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

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!!

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

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

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 ;

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

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

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

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.

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

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

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 !

La réutilisation des classes47

La réutilisation des classes48

La réutilisation des classes49

La réutilisation des classes50

La réutilisation des classes51

La réutilisation des classes52

La réutilisation des classes53

La réutilisation des classes54

La réutilisation des classes55

La réutilisation des classes56

La réutilisation des classes57

La réutilisation des classes58

La réutilisation des classes59

La réutilisation des classes60

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; }

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; }

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); }

La réutilisation des classes64