Introduction au paradigme orienté-objet (suite)

Slides:



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

Spécialisation/généralisation Héritage Polymorphisme.
Langages objet Définitions Traduction des méthodes en C++
Introduction à Java - les paquetages -
Programmer en JAVA par Tama
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Chapitre III Héritage (début)
Principes de programmation (suite)
Programmation orientée objet
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Langage Oriente Objet Cours 4.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Mémoire de fin d’études présenté par Amine Brikci-Nigassa
Principes de programmation (suite)
IFT1025, Programmation 2 Jian-Yun Nie
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,
C++ : classes Introduction aux Langages Orientés Objets
Java Héritage, interfaces.
Classes abstraites et Interfaces
POO : Objets et classes (Rappels)
Langage Oriente Objet Cours 2.
Rappels sur la Programmation java
Structures de données IFT-2000
Structures de données IFT-10541
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.
Gestion et levée dexception. Une exception est un message envoyé par une méthode à une autre méthode. La méthode qui la reçoit a le choix de soccuper.
Design Pattern: Decorator
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Langages orientés objets
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).
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.
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Classes et objets Types de données abstraits, programmation orientée objet, classes, objets,
Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département.
Plan cours La notion de pointeur et d’adresse mémoire.
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.
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
© 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
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
PHP objet Jérôme CUTRONA 10:13:27 Programmation Web
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.
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)
Les classes Introduction aux Langages Orientés Objets
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Classes abstraites, interface Classe interne Classes enveloppes
Introduction à la Programmation Orientée Objet
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
Retour sur les interfaces Les méthodes définies dans une interface sont des méthodes qui doivent absolument être implémentées par une ou des sous-classes.
JAVA et l'orientation objet Jean-Jacques LE COZ. Encapsulation L'encapsulation est le concept de masquer l'implémentation de la classe De ne permettre.
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:

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 AnimauxMarins AnimauxFermes AnimauxDomestiques …

Principe d’héritage Pour une sous-classe générale il peut exister d’autres sous-classes plus spécifiques. Exemple : AnimauxDomestiques Canin Félin Poisson … Bref : UNE SOUS-CLASSE EST UNE CLASSE.

Qu’est-ce que les sous-classes ont en commun ? 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 AnimauxMarins : Nom Nombre de branchies Caractéristiques des Pieuvre : Nombre de tentacules

Java, deux sortes d’héritage 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 AnimauxMarin 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(), toString(), 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 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 sous-classes peuvent accéder aux membres protected (pas les objets).

Modificateurs d’accès et sous classes Exemple 1: public class Classe1{ public int x; private int y; protected int z; } Objet Classe1 objet = new Classe1(); objet.x = 0; objet.y = 0; objet.z = 0; légal illégal illégal

Modificateurs d’accès et sous classes Exemple 2: public class Classe1{ public int x; private int y; protected int z; } Sous classes public class Classe2 extends Class1{ private int a = x; private int b = y; private int c = z; légal illégal lé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 Classe1{ private int x; public Classe1(int x){ this.x = x; } public class Classe2 extends Classe1{ private static int y; public Classe2(){ y++; Classe2 ne compile par car il n’existe pas de constructeur par défaut dans Classe1. Java vous oblige à en avoir un lors de l’héritage.

Constructeur des classes de base Exemple : Public class Classe1{ private static int n; private int x; public Classe1(){n++;} public Classe1(int x){ this.x = x; n++; } public class Classe2 extends Classe1{ private static int y; public Classe2(){y++;} public Classe2(int x, int y){ this.y = y; y++; L’utilisation d’un constructeur de Classe2 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 Classe1{ private static int n; private int x; public Classe1(){n++; } public Classe1(int x){ this.x = x; n++; } public class Classe2 extends Classe1{ private static int y; public Classe2(){y++;} public Classe2(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 Classe1{ ... int methode1(){} } public class Classe2 extends Classe1{ int methode2(){} Classe2 objet = new Classe2(); Objet.methode1(); //légal Un objet de la Classe2 peut accéder à la méthode1 car Classe2 est aussi un élément de la Classe1.

Héritage vs composition Exemple a un: public class Classe1{ ... int methode1(){} } public class Classe2 { private Classe1 objet1; int methode2(){} Classe2 objet = new Classe2(); Objet.methode1(); //illégal Un objet de la Classe2 ne peut pas accéder à la méthode1 car Classe2 n’est pas un élément de la Classe1.

Héritage vs composition Solution : public class Classe1{ ... int methode1(){} } public class Classe2 { private Classe1 objet1; int methode1(){ return objet1.methode1(); int methode2(){} Classe2 objet = new Classe2(); Objet.methode1(); //légal Un objet de la Classe2 peut maintenant accéder à la méthode1 car Classe2 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 getNom(); }

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 Classe1 implements Int1, Int2, ... 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 classe1 implements Int1 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 Int1{ public int x = 0; public int methode1(); } public abstract class Classe1 implements Int1{ int y; Classe1 objet = new Classe1(); //erreur classe abstraite Obligatoire puisque methode1() n’est pas définie methode1() n’est pas implémentée

Généralisation vs spécialisation

Généralisation vs spécialisation Une sous-classe est une définition plus spécifique que 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 StatJoueurs (attribut commun :nombre parties jouées) StatJoueurBaseball (nombre de buts volé) StatJoueurHockey(nombre de passes) StatJoueurBasket(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

FIN DU COURS