Vous êtes sur la page 1sur 41

Introduction au paradigme orient-objet

(suite)

Rappel :
Un langage orient-objet est un langage de
programmation qui offre lencapsulation,
lhritage et le polymorphisme dynamique.

Encapsulation : rendre lutilisation dune


classe indpendante de son implmentation.
Introduction au paradigme orient-objet
(suite)

Hritage
Classes drives
Classe Object
Interfaces
Implmentation multiples dinterfaces
Classes abstraites
Modificateurs daccs et sous classes
public, protected, private
Constructeur des classes de base (parent)
Super()
Hritage (est un) vs composition (a un)
Gnralisation ou aggrgation/spcialisation
Principe dhritage
Principe dhritage

Une classe dcrit une catgorie de


donnes, ses limites et ses diffrents
comportements. Cest un type de
donnes.
Pour une classe gnrale, il peut exister
plusieurs sous-classes plus spcifiques.
Exemple : Animaux

AnimauxMarins AnimauxFermes AnimauxDomestiques


Principe dhritage

Pour une sous-classe gnrale il peut


exister dautres sous-classes plus
spcifiques.
Exemple : AnimauxDomestiques

Canin Flin Poisson

Bref : UNE SOUS-CLASSE EST UNE CLASSE.


Principe dhritage

Quest-ce que les sous-classes ont en


commun ?
Les caractristiques de la classe suprieure
(de base ou parent).

Quest-ce que les sous-classes ont de


diffrent ?
Leurs caractristiques propres qui les
distinguent.
Principe dhritage
Exemple :

Caractristiques des Animaux :


Nom (ex: lion, chat, chien,...)
Poids
Taille
Date de naissance

Caractristiques des AnimauxMarins :


Nom
Poids
Taille
Date de naissance
Nombre de branchies

Caractristiques des Pieuvre :


Nom
Poids
Taille
Date de naissance
Nombre de branchies
Nombre de tentacules
Principe dhritage

Programmation
On dit quune sous-classe hrite (elle les a
de faon inne) des attributs de sa classe
de base (parent) et de ses mthodes.

Java, deux sortes dhritage


partir dune classe
partir dune interface
Hritage partir de classe
Hritage partir dune classe

On peut hriter dune seule classe laide du


mot rserv 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 sils
sont dclars private.
Hritage partir dune classe

Toutes les mthodes non prives de la classe


parent existent pour la sous-classe.

On peut ajouter autant dattributs et de


mthodes que lon veut dans une sous-classe.
Ils ne sont pas accessibles par le parent.
Hritage partir dune classe

On peut redfinir tous les membres de la classe parent


lexception des constructeurs (bien entendu).

Si on fait rfrence un membre qui ne fait pas partie


dune sous-classe, Java ira voir dans les classes parents
pour le trouver.

En Java toutes les classes hritent par dfaut de


la classe Object.

Cette classe dfinit entre autres les mthodes


clone(), toString(), equals() et finalize() (voir api).
Modificateurs daccs et
sous classes
Modificateurs daccs et sous classes

Il existe trois modificateurs daccs pour


les membres dune classe
Public
Private
Protected
Public
Toutes les sous-classes et les objets peuvent
accder directement aux membres public
Modificateurs daccs et sous classes

Private
Seuls les membres de la classe peuvent
accder aux membres private, pas mme les
membres des sous-classes.
Protected
Seuls les membres de la classe et des sous-
classes peuvent accder aux membres
protected (pas les objets).
Modificateurs daccs et sous classes

Exemple 1:
public class Classe1{
public int x;
private int y;
protected int z;
}
Objet
Classe1 objet = new Classe1();
lgal
objet.x = 0;
objet.y = 0; illgal

objet.z = 0; illgal
Modificateurs daccs et sous classes

Exemple 2:
public class Classe1{
public int x;
private int y;
protected int z;
}
Sous classes
public class Classe2 extends Class1{
lgal
private int a = x;
illgal
private int b = y;
private int c = z; lgal
}
Constructeur des classes de base
Constructeur des classes de base

Les constructeurs de la classe de base ne


peuvent pas tre surchargs dans une
sous-classe.
On peut accder aux membres des
classes de bases grce une rfrence
qui sappelle super (mme principe que
this).
Constructeur des classes de base

Le constructeur par dfaut dune classe


de base est super() et doit toujours tre
utilis comme premire instruction dans
une mthode.
dfaut dutiliser explicitement un
constructeur de la classe de base, cest
celui par dfaut 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 nexiste pas de constructeur par dfaut dans
Classe1. Java vous oblige en avoir un lors de lhritage.
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++;
}
}

Lutilisation dun constructeur de Classe2 forcera lappel super() qui est le constructeur du parent.
Constructeur des classes de base
La bonne utilisation du constructeur par copie dattribut est dappeler 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++;
}
}
Hritage vs composition
Hritage vs composition

Pour la conception dun logiciel, il y a deux


approches pour la construction des
classes.
Hritage (est un)
Une sous-classe qui hrite est un lment de la
classe parent.
Composition*** (a un)
Une sous classe a un attribut de la classe parent.
*** noter que la composition existe indpendamment de lhritage.
Hritage vs composition

Exemple est un:


public class Classe1{
...
int methode1(){}
}

public class Classe2 extends Classe1{


...
int methode2(){}
}
Classe2 objet = new Classe2();
Objet.methode1(); //lgal

Un objet de la Classe2 peut accder la mthode1 car


Classe2 est aussi un lment de la Classe1.
Hritage vs composition

Exemple a un:
public class Classe1{
...
int methode1(){}
}

public class Classe2 {


private Classe1 objet1;
int methode2(){}
}
Classe2 objet = new Classe2();
Objet.methode1(); //illgal

Un objet de la Classe2 ne peut pas accder la mthode1 car


Classe2 nest pas un lment de la Classe1.
Hritage 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(); //lgal

Un objet de la Classe2 peut maintenant accder la mthode1 car


Classe2 lui a donn laccs avec un observateur.
Hritage vs composition

Il est prfrable dutiliser la composition


lhritage si les caractristiques et le
comportement sont appels changer dans
lvolution du logiciel.
Cela occasionne de la rptition de code mais permet un meilleur contrle sur la
conception de la sous-classe (voir java.util.Stack qui hrite de java.util.Vector).

On utilisera lhritage lorsque la hirarchie


est fixe et que les changements sont
improbables.
Gain sur lcriture de code mais dpendance de la sous-classe sur les
modifications la classe parent.
Hritage partir dinterface
Hritage partir dinterface

2) partir dune interface


Une interface est une classe pour laquelle il ny
a que les attributs et les en-ttes de mthodes.
Les attributs doivent absolument tre initialiss
et tre public
Le contenu des mthodes est dfinir par les
classes qui hritent de linterface (Pas { }).
On dfinit une interface laide du mot rserv
interface plutt que class
Hritage partir dinterface

Exemple :
public interface Animaux {
public String nom = null;
public double poids = 0;
public double taille = 0;
...

public String getNom();

}
Hritage partir dinterface

Une classe peut hriter de plusieurs interfaces


laide du mot rserv implements. On parle alors
dhritage multiple dinterfaces.
Exemple : public class Classe1 implements Int1, Int2, ...

Une classe qui hrite dune interface et qui nimplmente pas


toutes les mthodes devient une classe abstraites.
Hritage partir dinterface

Une classe abstraite doit commencer avec le mot rserv abstract


Exemple : public abstract classe1 implements Int1

On ne peut pas instancier un objet dune classe abstraite.

On dira quune classe est concrte si toutes ses mthodes sont


dfinies.

Un objet est toujours instanci partir dune classe concrte.


Hritage partir dinterface

Exemple :
public interface Int1{
public int x = 0; Obligatoire puisque methode1()
nest pas dfinie
public int methode1();
}
public abstract class Classe1 implements Int1{
int y; methode1() nest pas implmente

}
Classe1 objet = new Classe1(); //erreur classe abstraite
Gnralisation vs spcialisation
Gnralisation vs spcialisation

Une sous-classe est une dfinition plus


spcifique que celle de sa classe de base.
Une classe de base est une dfinition plus
gnrale que celle de ses sous-classes.
Lorsquon cre des sous-classes on fait de la
spcialisation.
Lorsquon trouve une forme gnrale pour des
sous-classes, on dit quon fait de la
gnralisation ou de laggrgation
Gnralisation vs spcialisation

Spcialisation : On connat les attributs


commun et on dfinit des attributs
spcifiques pour les sous-classes

StatJoueurs (attribut commun :nombre parties joues)


StatJoueurBaseball (nombre de buts vol)
StatJoueurHockey(nombre de passes)
StatJoueurBasket(nombre de paniers)
...
Gnralisation vs spcialisation

Gnralisation : On connat les attributs


des sous-classes et on regroupe les
attributs communs dans une classe de
base
Gnralisation vs spcialisation

Spcialisation

Animaux

AnimauxDomestiques AnimauxDeFerme ...

Cochons Poules

Couveuses

Pondeuses
Gnralisation
FIN DU COURS