Introduction au paradigme orientobjet suite Rappel Un langage
Introduction au paradigme orienté-objet (suite) Rappel : –Un langage orienté-objet est un langage de programmation qui offre l’encapsulation, l’héritage et le polymorphisme dynamique. –Encapsulation : rendre l’utilisation d’une classe indépendante de son implémentation.
Introduction au paradigme orienté-objet (suite) • Héritage –Classes dérivées • Classe Object –Interfaces • Implémentation multiples d’interfaces • Classes abstraites • Modificateurs d’accès et sous classes –public, protected, private • Constructeur des classes de base (parent) –Super() • Héritage (est un) vs composition (a un) –Généralisation ou aggrégation/spécialisation
Principe d’’héritage
Principe d’héritage • Une classe décrit une catégorie de données, ses limites et ses différents comportements. C’est un type de données. • Pour une classe générale, il peut exister plusieurs sous-classes plus spécifiques. • Exemple : Animaux. Marins Animaux. Fermes Animaux. Domestiques …
Principe d’héritage • Pour une sous-classe générale il peut exister d’autres sous-classes plus spécifiques. • Exemple : Animaux. Domestiques Canin Félin Poisson … Bref : UNE SOUS-CLASSE EST UNE CLASSE.
Principe d’héritage • Qu’est-ce que les sous-classes ont en commun ? – Les caractéristiques de la classe supérieure (de base ou parent). • Qu’est-ce que les sous-classes ont de différent ? – Leurs caractéristiques propres qui les distinguent.
Principe d’héritage • Exemple : Caractéristiques des Animaux : – – Nom (ex: lion, chat, chien, . . . ) Poids Taille Date de naissance Caractéristiques des Animaux. Marins : – – – Nom Poids Taille Date de naissance Nombre de branchies Caractéristiques des Pieuvre : – – – Nom Poids Taille Date de naissance Nombre de branchies Nombre de tentacules
Principe d’héritage Programmation • On dit qu’une sous-classe hérite (elle les a de façon innée) des attributs de sa classe de base (parent) et de ses méthodes. Java, deux sortes d’héritage – À partir d’une classe – À partir d’une interface
Héritage à partir de classe
Héritage à partir d’une classe – On peut hériter d’une seule classe à l’aide du mot réservé extends Exemple : public class Animaux. Marin extends Animaux{ – Tous les attributs de la classe parent existent pour la sous-classe mais ils ne sont pas accessibles directement s’ils sont déclarés private.
Héritage à partir d’une classe • Toutes les méthodes non privées de la classe parent existent pour la sous-classe. • On peut ajouter autant d’attributs et de méthodes que l’on veut dans une sous-classe. Ils ne sont pas accessibles par le parent.
Héritage à partir d’une classe • On peut redéfinir tous les membres de la classe parent à l’exception des constructeurs (bien entendu). • Si on fait référence à un membre qui ne fait pas partie d’une sous-classe, Java ira voir dans les classes parents pour le trouver. – En Java toutes les classes héritent par défaut de la classe Object. – Cette classe définit entre autres les méthodes clone(), to. String(), equals() et finalize() (voir api).
Modificateurs d’accès et sous classes
Modificateurs d’accès et sous classes • Il existe trois modificateurs d’accès pour les membres d’une classe – Public – Private – Protected • Public – Toutes les sous-classes et les objets peuvent accéder directement aux membres public
Modificateurs d’accès et sous classes • Private – Seuls les membres de la classe peuvent accéder aux membres private, pas même les membres des sous-classes. • Protected – Seuls les membres de la classe et des sousclasses peuvent accéder aux membres protected (pas les objets).
Modificateurs d’accès et sous classes Exemple 1: public class Classe 1{ public int x; private int y; protected int z; } Objet Classe 1 objet = new Classe 1(); légal objet. x = 0; illégal objet. y = 0; objet. z = 0; illégal
Modificateurs d’accès et sous classes Exemple 2: public class Classe 1{ public int x; private int y; protected int z; } Sous classes public class Classe 2 extends Class 1{ private int a = x; private int b = y; private int c = z; } légal illégal
Constructeur des classes de base
Constructeur des classes de base • Les constructeurs de la classe de base ne peuvent pas être surchargés dans une sous-classe. • On peut accéder aux membres des classes de bases grâce à une référence qui s’appelle super (même principe que this).
Constructeur des classes de base • Le constructeur par défaut d’une classe de base est super() et doit toujours être utilisé comme première instruction dans une méthode. • À défaut d’utiliser explicitement un constructeur de la classe de base, c’est celui par défaut qui est toujours appelé.
Constructeur des classes de base Exemple : Public class Classe 1{ private int x; public Classe 1(int x){ this. x = x; } } public class Classe 2 extends Classe 1{ private static int y; public Classe 2(){ y++; } } Classe 2 ne compile par car il n’existe pas de constructeur par défaut dans Classe 1. Java vous oblige à en avoir un lors de l’héritage.
Constructeur des classes de base Exemple : Public class Classe 1{ private static int n; private int x; public Classe 1(){n++; } public Classe 1(int x){ this. x = x; n++; } } public class Classe 2 extends Classe 1{ private static int y; public Classe 2(){y++; } public Classe 2(int x, int y){ this. y = y; y++; } } L’utilisation d’un constructeur de Classe 2 forcera l’appel à super() qui est le constructeur du parent.
Constructeur des classes de base La bonne utilisation du constructeur par copie d’attribut est d’appeler le constructeur de la classe de base explicitement. Public class Classe 1{ private static int n; private int x; public Classe 1(){n++; } public Classe 1(int x){ this. x = x; n++; } } public class Classe 2 extends Classe 1{ private static int y; public Classe 2(){y++; } public Classe 2(int x, int y){ super(x); this. y = y; y++; } }
Héritage vs composition
Héritage vs composition • Pour la conception d’un logiciel, il y a deux approches pour la construction des classes. • Héritage (est un) – Une sous-classe qui hérite est un élément de la classe parent. • Composition*** (a un) – Une sous classe a un attribut de la classe parent. ***À noter que la composition existe indépendamment de l’héritage.
Héritage vs composition Exemple est un: public class Classe 1{. . . int methode 1(){} } public class Classe 2 extends Classe 1{. . . int methode 2(){} } Classe 2 objet = new Classe 2(); Objet. methode 1(); //légal Un objet de la Classe 2 peut accéder à la méthode 1 car Classe 2 est aussi un élément de la Classe 1.
Héritage vs composition Exemple a un: public class Classe 1{. . . int methode 1(){} } public class Classe 2 { private Classe 1 objet 1; int methode 2(){} } Classe 2 objet = new Classe 2(); Objet. methode 1(); //illégal Un objet de la Classe 2 ne peut pas accéder à la méthode 1 car Classe 2 n’est pas un élément de la Classe 1.
Héritage vs composition Solution : public class Classe 1{. . . int methode 1(){} } public class Classe 2 { private Classe 1 objet 1; . . . int methode 1(){ return objet 1. methode 1(); } int methode 2(){} } Classe 2 objet = new Classe 2(); Objet. methode 1(); //légal Un objet de la Classe 2 peut maintenant accéder à la méthode 1 car Classe 2 lui a donné l’accès avec un observateur.
Héritage vs composition • Il est préférable d’utiliser la composition à l’héritage si les caractéristiques et le comportement sont appelés à changer dans l’évolution du logiciel. – Cela occasionne de la répétition de code mais permet un meilleur contrôle sur la conception de la sous-classe (voir java. util. Stack qui hérite de java. util. Vector). • On utilisera l’héritage lorsque la hiérarchie est fixe et que les changements sont improbables. – Gain sur l’écriture de code mais dépendance de la sous-classe sur les modifications à la classe parent.
Héritage à partir d’interface
Héritage à partir d’interface 2) À partir d’une interface • Une interface est une classe pour laquelle il n’y a que les attributs et les en-têtes de méthodes. • Les attributs doivent absolument être initialisés et être public • Le contenu des méthodes est à définir par les classes qui héritent de l’interface (Pas { }). • On définit une interface à l’aide du mot réservé interface plutôt que class
Héritage à partir d’interface Exemple : public interface Animaux { public String nom = null; public double poids = 0; public double taille = 0; . . . public String get. Nom(); }
Héritage à partir d’interface – Une classe peut hériter de plusieurs interfaces à l’aide du mot réservé implements. On parle alors d’héritage multiple d’interfaces. Exemple : public class Classe 1 implements Int 1, Int 2, . . . – Une classe qui hérite d’une interface et qui n’implémente pas toutes les méthodes devient une classe abstraites.
Héritage à partir d’interface – Une classe abstraite doit commencer avec le mot réservé abstract Exemple : public abstract classe 1 implements Int 1 – On ne peut pas instancier un objet d’une classe abstraite. – On dira qu’une classe est concrète si toutes ses méthodes sont définies. – Un objet est toujours instancié à partir d’une classe concrète.
Héritage à partir d’interface Exemple : public interface Int 1{ public int x = 0; Obligatoire puisque methode 1() n’est pas définie public int methode 1(); } public abstract class Classe 1 implements Int 1{ int y; methode 1() n’est pas implémentée } Classe 1 objet = new Classe 1(); //erreur classe abstraite
Généralisation vs spécialisation
Généralisation vs spécialisation • Une sous-classe est une définition plus spécifique celle de sa classe de base. • Une classe de base est une définition plus générale que celle de ses sous-classes. • Lorsqu’on crée des sous-classes on fait de la spécialisation. • Lorsqu’on trouve une forme générale pour des sous-classes, on dit qu’on fait de la généralisation ou de l’aggrégation
Généralisation vs spécialisation • Spécialisation : On connaît les attributs commun et on définit des attributs spécifiques pour les sous-classes – Stat. Joueurs (attribut commun : nombre parties jouées) • Stat. Joueur. Baseball (nombre de buts volé) • Stat. Joueur. Hockey(nombre de passes) • Stat. Joueur. Basket(nombre de paniers) • . . .
Généralisation vs spécialisation • Généralisation : On connaît les attributs des sous-classes et on regroupe les attributs communs dans une classe de base
Généralisation vs spécialisation Spécialisation Animaux. Domestiques Cochons Animaux. De. Ferme . . . Poules Couveuses Pondeuses Généralisation
FIN DU COURS
- Slides: 41