Premiers principes
de la programmation objet
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
14 septembre 2015
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
1/34
Programmation objet
Objet :
(cid:73) propri t s (attributs), valeurs ( tat)
(cid:73) op rations (m thodes)
(cid:73) identit (adresse)
Classe :
(cid:73) d nit un type dobjets
(cid:73) ensemble dobjets (en intension)
(cid:73) propri t s communes (attributs)
(cid:73) op rations communes (m thodes)
Un objet est une instance de sa classe
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
2/34
Pourquoi programmer en objet ?
(cid:73) Perennit des objets (6= fonctionnalit s)
(cid:73) Modularit
(cid:73) R utilisabilit
(cid:73) Structuration des donn es manipul es
(cid:73) Encapsulation
(cid:73) Abstraction, traitements g n riques
(cid:73) Facilit des tests
(cid:73) etc.
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
3/34
Exemples de classes
H ritage
Classes abstraites et interfaces
Autres notions
Notation UML
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
4/34
Classe centr e sur les attributs
(cid:73) getName, getPrice : accesseurs
(cid:73) setPrice(oat) : mutateur
(cid:73) available est encapsul
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
5/34
Classe centr e sur les op rations
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
6/34
Classe g n rale
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
7/34
Exemples de classes
H ritage
Classes abstraites et interfaces
Autres notions
Advertisement
Notation UML
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
8/34
H ritage
La classe F h rite de la classe M :
(cid:73) F a tous les attributs de M
(cid:73) F peut avoir des attributs suppl mentaires
(cid:73) F a toutes les m thodes de M
(cid:73) certaines m thodes peuvent tre d nies 6= dans F (red nition)
(cid:73) F peut avoir des m thodes suppl mentaires
(cid:73) les instances de F peuvent tre manipul es comme des instances de M
(polymorphisme)
(cid:73) Java : class F extends M
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
9/34
Exemples de classes
H ritage
Classes abstraites et interfaces
Autres notions
Notation UML
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
10/34
Classes abstraites
D nitions :
(cid:73) m thode abstraite : d clar e mais non d nie ce niveau de la
hirarchie de classes
(cid:73) classe abstraite : sans instances directes
(cid:73) m thodes abstraites classe abstraite
(cid:73) classe abstraite sans m thode abstraite possible (on ne veut pas
dinstance ce niveau)
(cid:73) classe abstraite avec m thodes d nies possible (tout nest pas
abstrait)
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
11/34
Monstres
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
12/34
Monstres
class Fight {
. . .
public void hit (Monster m1, Monster m2) {
m2.decreaseLifePoints(m1.hitForce()) ;
}
}
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
13/34
Biologie
(cid:73) S quence dADN : ATTGCATATCCGATTACA. . .
(cid:73) Prot ine : CYWCCGRKRAQ. . .
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
14/34
Biologie
(cid:73) Sequence abstraite sans m thode abstraite
Advertisement
(cid:73) Sequence factorise la gestion de liste
(cid:73) Pas dinstance de Sequence
(cid:73) Pas ou peu de traitements g n riques sur Sequence
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
15/34
Interfaces
D nitions :
(cid:73) ensemble de d clarations de m thodes
(cid:73) impl menter d nir ces m thodes
(cid:73) pas dattribut (sauf nal static)
(cid:73) Java : class C implements I1, I2, I3. . .
Utilisations principales :
(cid:73) d nir un type tels traitements applicables
(cid:73) d nir un type telles op rations disponibles
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
16/34
Tri
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
17/34
Tri
class Quicksort {
. . .
public List<Ordered> getOrderedList () {
. . .
if (element1.isGreaterThan(element2)) {
. . .
}
. . .
}
}
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
18/34
M diath que
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
19/34
Une architecture classique
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
20/34
Exemples de classes
H ritage
Classes abstraites et interfaces
Autres notions
Notation UML
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
21/34
D l gation
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
22/34
Instances versus classes : "Static"
M thodes dinstance :
(cid:73) m thodes standards
(cid:73) d pendent de l tat courant de linstance (et darguments)
Advertisement
(cid:73) appel es sur un objet (instance)
(cid:73) exemples : accesseurs, mutateurs
(cid:73) exemples : p.evaluate(0.1), this.evaluate(5.33)
M thodes de classe :
(cid:73) Java : static
(cid:73) ne d pendent que de la classe (et darguments)
(cid:73) appel es sur une classe
(cid:73) exemples : main
(cid:73) exemple : Integer.parseInt("0347"), Polynomial.add(p1,p2)
Attributs : de classe ou dinstance galement
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
23/34
Polymorphisme
List<Appartment> appartments=new List<Appartment> () ;
appartments.add(new Appartment(400)) ;
appartments.add(new AgencyAppartment(350,75)) ;
Appartment a=appartments.get(1) ;
System.out.println(""+a.getRent()) ; / 425 /
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
24/34
M thodes virtuelles, liage dynamique (1/2)
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
25/34
+d marrer():void+avancer():void+tourner():void-roues : Roue[ ]#moteur : MoteurV hicule+tourner():void+tournerLeVolant():void+mettreLeClignotant():void-volant : VolantVoiture{mettreLeClignotant();tournerLeVolant();}+tourner():void+tournerLeGuidon():void+sePencherVersLInt rieur():void-guidon : GuidonV lo{sePencherVersLInt rieur();tournerLeGuidon();}M thodes virtuelles, liage dynamique (2/2)
(cid:73) Par polymorphisme, une r f rence de type V hicule peut r f rencer :
un V hicule (si non abstract) OU une Voiture OU un v lo
(cid:73) Quelle est la di rence entre v lo.tourne() et v hicule.tourner() si :
V lo v lo=new V lo() ; V hicule v hicule = v lo ;
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
26/34
Code de test : V hicule[ ] parcAuto=new V hicule[2];parcAuto[0]=new Voiture();parcAuto[1]=new V lo();for (int i=0;i<parcAuto.length;i++) { parcAuto .d marrer(); parcAuto .avancer(); parcAuto .tourner(); }R f rences versus Instances
(cid:73) Une instance na pas de nom, et il existe entre 1 et n r f rences sur
elle un instant donn (sinon > garbage collector)
(cid:73) Une r f rence est capable de r f rencer tous les objets de son type,
mais aussi, par POLYMORPHISME de son (ses) sous-type(s), etc.
Elle peut Jtre de type abstrait.
(cid:73) Une instance nest, par construction, JAMAIS ABSTRAITE. Toutes
ses m thodes existent, m me si elle est r f renc e par une r f rence
abstraite, la classe ayant servi linstancier tant par d nition non
abstraite.
(cid:73) Le code ex cuter pour une invocation donn e de m thode nest pas
toujours connu la compilation. Cest le liage dynamique. Le code
r ellement ex cut est toujours celui qui correspond la (re)d nition
de m thode situ e LE PLUS BAS dans la hi rarchie de classes
vis- -vis du TYPE REEL de lobjet.
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
27/34
H ritage ou Association (1/3)
(cid:73) Attention, en d couvrant la conception objet, on voit de lh ritage
partout
(cid:73) Ne pas oublier lassociation, compl ment indispensable de lh ritage
(cid:73) Lh ritage se justie si le polyorphisme qui en d coule fait sens
(cid:73) Test s mantique : une instance dune classe lle EST UN l ment de
la classe m re
(cid:73) Exemple : un cabriolet EST UNE voiture qui EST UN v hicule
Advertisement
(cid:73) Contre exemple : un cercle NEST PAS un point. Son centre est un
point (association)
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
28/34
H ritage versus Association (2/3)
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
29/34
+ translate(dx:double, dy:double)- x : double- y : doublePoint- rayon : doubleCercle{x+=dx;y+=dy;}{// d l gation :centre.translate(dx,dy);}+ translate(dx:double, dy:double)- rayon : double- centre : PointCercle1H ritage ou Association (3/3)
(cid:73) Tout ne se d crit pas de facon hi rarchique (h ritage)
(cid:73) Essayons avec toutes les vari t s de pizzas
(cid:73) On cr e la classe de base Pizza
(cid:73) On cr e une sous-classe PizzaAuJambon, ajoutant les fonctionnalit s
propres lingr dient jambon
(cid:73) Puis une sous-classe PizzaAuFromage
(cid:73) Mais quid de la classe PizzaAuFormageEtAuJambon ?
(cid:73) Avec 10 ingr dients, tout cela explose... et le code devient forc ment
redondant
(cid:73) > voir les design-patterns correspondants
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
30/34
Visibilit
Attributs et m thodes :
(cid:73) public : accessible partout
(cid:73) private : accessible dans la classe seulement
(cid:73) private accessible aussi dans autres instances de la classe
(cid:73) protected : accessible dans classe et sous-classes
(cid:73) package : accessible dans le package (Java)
Surcharge :
(cid:73) surcharge de m thode en augmentant visibilit possible
(cid:73) restriction de visibilit impossible
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
31/34
Exemples de classes
H ritage
Classes abstraites et interfaces
Autres notions
Notation UML
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
32/34
Diagrammes complets
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
33/34
Utilisation parcimonieuse
(cid:73) Simplier : moyen de communication
(cid:73) Diagramme complet redondant avec le code et donc inutile
(cid:73) Ne montrer que ce qui est pertinent dans le contexte
(cid:73) Prendre 6= points de vue
(cid:73) Distinguer pr sentation de limpl mentation vs de lutilisation
(cid:73) Attributs/m thodes priv s : cacher sauf impl mentation
(cid:73) Cf. exemples de ce diaporama
Gr gory Bonnet, Yann Mathet, Bruno Zanuttini
G nie logiciel
34/34