Analyse, Conception et Programmation Orientes Objets
Model Driven Development
Applications en UML 2.0 et JavaBruno Mermet
2011
Plan Gnral
Les concepts Objet Analyse et Conception Orientes Objets en UML
Les concepts Objet
Plan Gnral
Du typage la notion de classe Les relations dhritage et de gnralisation Les liens entre les classes La gnricit
Donne de base Description
un type : entier, chane de caractres, rel, etc. une valeur (12, mon texte, 7.28)
Inconvnients ensemble de types limit typage statique pas de notion de sous-typage aspect statique seul abord
Type dune donneEnsemble des valeurs possibles pour cette
donne=
Les enregistrements Principe :
dfinir des donnes comme produits cartsiens dautres donnes (exemple : entier entier chane)
un enregistrement = un n-uplet exemples :
(10, 20, rose) caractrise un point de lcran ((Durand, Paul), (Durand, Anne)) dsigne un
couple
Rutilisation : utilisation dun constructeur de type enregistrement
un nom pour le type ensemble de champs nomms et typs
Enregistrements : exemple Introduction dun type livre :
livre {titre : chane de caractres,auteur : chane de caractres,diteur : chane de caractres,anne de parution : date,nombre de page : entier,prix : rel}
Utilisationsi RfProlog donne de type livre, alors RfProlog.titre dsigne
son titre (et vaut The Art of Prolog)
Enregistrements : bilan
Ensemble des types : extensible volont
Typage : toujours statique toujours pas de notion de sous-type
Passage au concept de classe et dobjet
Notions de classe et dobjet
Comparaison Type Classe Donne Objet (instance dune classe) Champ Champ(*)
Exemple : RfProlog serait un objet de classe Livre
(*) ou attribut, ou variable dinstance
Classes et types :premires diffrences
Type : point de vue statique les champs
Classe : point de vue statique : tat
les champs (avec valeur par dfaut ventuelle) les proprits (ou contraintes)
point de vue dynamique : changements dtat les mthodes (dfinies au niveau de la classe, mais
sappliquent sur les objets de cette classe), avec dventuelles pr-conditions et post-conditions.
Classes : premier exemple
N.B. : si Toto objet de classe Personne, Modifier la situation de Toto se fait par Toto.ModifierSituation(Mari)
PersonneNom : Chane de caractresPrnom : Chane de caractresDate de naissance : DateSituation de famille : Chane de caractres = ClibataireSexe : Chane de caractres
Crer (nom, prnom, date, sexe)
Crer (nom, prnom, date, sexe, situation)ModifierSituation (NouvelleSituation)
Sexe = m ou Sexe = fNom
Surcharge
Vie et mort dun objet Un objet :
nait vit meurt
Par classe, 3 types de mthodes : constructeurs destructeurs les autres !
Rien nest possible sur un objet non cr Rien nest possible sur un objet dtruit
Persistance dun objet Mort dun objet classique :
appel de son destructeur ; arrt du systme qui la cr.
Inconvnient : pannes ; maintenance ; volution.
Notion dobjet persistant Un objet persistant est un objet dont la vie continue
aprs larrt du systme layant cr
Variables et mthodes de classe
Cas gnral : champ : propre un objet impossibilit des objets dune mme classe de
partager des donnes Variable de classe :
mme donne pour tout les objets de la classe Mthodes de classe :
ne sappliquent pas particulirement un objet voir comme des fonctions de bibliothques
Vers la rutilisabilit
Comment factoriser les parties communes ?
Elvenomprnomanne dtudecrer(nom, prnom)changerAnne()
Personnelnomprnomfonctioncrer(nom,prnom)changerFonction(fonc)
Parties communesParties diffrentes
Hritage : introduction
Vocabulaire :Elve hrite/est une sous-classe/est une spcialisation de PersonnePersonne est une gnralisation/super-classe dElveOn emploi aussi les termes de classe mre/classe fille
Personnenomprnomcrer(nom, prnom)
Elve : Personneanne dtudechangerAnne()
Personnel : PersonnefonctionchangerFonction(fonc)
Une reprsentation possible
Hritage et sous-typage Autre lecture de la relation dhritage :
un objet dune classe fille est-un objet de la classe mre
Tout objet dun type dune classe fille peut tre utilis la place dun objet du type dune classe mre
Sur lexemple : crer peut sappliquer pour un lve ou pour le personnel
! La rciproque nest pas vraie !
Redfinition et liaison dynamique Principe de la liaison dynamique :
la mthode primtre de la classe Quadrilatre est redfinie dans LosangeP de type Paralllogramme, L de type Losange, Q de type Quadrilatre :
Q := P, Q.primtre() calcule l1+l2+l3+l4Q := L, Q.primtre() calcule 4 l1
Quadrilatrel1, l2, l3, l4 : relsPrimtre() {l1+l2+l3+l4}crer(p1, p2, p3, p4)
Paralllogramme : Quadrilatre Losange : QuadrilatrePrimtre() {4 x l1}
Classes et mthodes abstraites Une classe abstraite C est une classe dont les
seuls objets qui peuvent en tre membres sont membres dune sous-classe de C.
Corollaire : il nest pas possible de crer un objet de classe C si C est une classe abstraite.
Une mthode abstraite est une mthode dont la dfinition nest pas donne dans la classe courante, mais devra ltre dans des classes filles.
Toute classe contenant au moins une mthode abstraite est une classe abstraite.
Hritage :disjonction ou recouvrement
Si un mme objet ne peut pas tre membre de plusieurs sous-classes dune mme classe, on parle dhritage disjoint :
Sinon, on parle dhritage avec recouvrement :
uvre dart
Tableau Morceau de musique
Btiment
Professionnel Habitation
Exemple de notation (OMT) pour lhritage disjoint
Exemple de notation (OMT) pour lhritage avec recouvrement
Hritage multiple Il y a hritage multiple si une classe peut hriter
de plusieurs autres classes :Livre
auteurtexte
Morceau de musiquecompositeurpartition
Opra
Hritages : proprits Transitivit :
Si A hrite de B et si B hrite de C, alors A hrite de C.Donc si tout objet de A est-un objet de B et tout objet de B est-un objet de C, alors tout
objet de A est-un objet de C (transitivit)
RflexivitUne classe C ne peut pas hriter delle-mme ; par contre un objet instance de C est-un
objet de C.
Non Symtrique/AntisymtrieSi A hrite de B, B nhrite pas (et ne peut tre dclare comme hritant) de A.Par contre, si tout objet de A est-un objet de B et inversement, alors A = B (antisymtrie)
CorollaireUn cycle dans la relation dhritage nest pas possible les relations dhritage dun systme forment un ensemble de graphes acycliques
directs (DAG) La relation est-un est une relation dordre
Classes et mthodes terminales
Une classe terminale est une classe dont aucune classe ne peut hriter
Une mthode terminale est une mthode qui ne peut pas tre redfinie
Usage rserver des cas bien particuliers
Liens entre classe (1)
Comment : Par les champs
en dclarant un champ de classe A dans une classe B Dans les mthodes
en dclarant une variable locale de classe A dans une mthode de la classe B
Par la dfinition explicite dune relationexemple :
Enseignantnomprnom
Matirenomvolume horaire
Agir sur un objet dune classe lie
Actions possibles Lire la valeur dun champ :
destination := nom_objet.nom_champ Modifier un champ :
nom_objet.nom_champ := nouvelle_valeur Excuter une mthode :
[rsultat :=] nom_objet.nom_mthode ([param dentre]) Remarques :
symbole daffection (:=) dpend de la notation le texte entre crochets est optionnel
Actions sur objets : constat Rle des mthodes :
factoriser du code commun ; Avoir un typage plus fort (ne sapplique que sur les
objets de la classe C dans laquelle elle est dfinie ou dune classe hritant de C);
nautoriser que certains changements dtat sur un objet.
Mais possibilit dintervenir directement depuis
l extrieur sur un champ dune mthode annule le dernier point
Gestion des droits daccs Consquence du constat prcdent :
Pour chaque champ et chaque mthode, possibilit de dfinir des droits daccs pour les autres classes :
droit dans C dans le dans les dans lespackage classes filles autres classes
public oui oui oui ouiprotg oui oui oui nonpaquetage oui oui/non non nonpriv oui non non non
Assouplir et mieux contrler les droits (C++) Assouplir : cration de la notion dami :
Si A est amie de C, alors A a la mme visibilit que C sur les champs et mthodes
Augmenter le contrle : diffrents types dhritage : public, priv, protg :
Rmq : En Java, paquetages classes amies
public protg priv
public public protgprotg protg protgpriv priv priv
Type de dpartType dhritage
Nouveaux types dans la classe fille selon le type dhritage
Encapsulation (1) Dfinition :
Modifier les champs dun objet nest possible que par lintermdiaire des mthodes dfinies directement ou par hritage dans la classe de cette objet
Principe : Les champs sont tous privs Les mthodes mises la disposition des autres
classes sont dclares publiques N.B. : si classe vocation tre utilise comme classe
mre, certains champs et mthodes pourront tre protgs
Encapsulation (2) Avantages :
respect du troisime rle des mthodes (nautoriser que certains changements dtat pour un objet)
possibilit de modifier la reprsentation interne dune classe (les champs) sans devoir refaire tous les projet lutilisant
Consquence pour diffuser au public une classeprciser
nom et rle de la classe ; profils et rles des diffrentes mthodes publiques si ncessaire, rle des champs et mthodes protgs
= partie publique (par opposition la partie prive)
Rutilisation desstructures de donnes
Problme liste dentiers
ajouter un lment (entier) ; enlever le premier lment ; donner la longueur de la liste ; trier les entiers de la liste.
liste de chanes de caractres : ajouter un lment (chanes) ; enlever le premier lment ; donner la longueur de la liste ; trier les chanes de la liste.
Parties communesParties diffrentes
Hritage inutilisable
Interface Dfinition
Une interface est un ensemble nomm de profils de mthodes
Implantation Une classe implante une interface si elle :
le dclare implante toutes les mthodes spcifies dans linterface
Utilisation Si une classe est relie un type dinterface donn,
elle peut tre relie toute classe implantant cette interface.
Gnricit Principe : paramtrer une classe par une autre
Liste EntierAjouter un lmentEnlever le premier lmentCalculer la longueur de la liste
Dfinition dun objet : A : Liste Gnricit contrainte :
But : permettre lutilisation dune fonction de la classe paramtre
Gnricit contrainte : exemple
A : Liste : impossible B : Liste : possible ; B.ordonner() trie numriquement C : Liste : possible ; C.ordonner() trie alphabtiquement
Liste ajouter un lmentsupprimer le dernier lmentcalculer la longueur de la listeordonner la liste =
faire un tri bulle enutilisant la mthodecomparer dfiniesur les lments
Boolenx : boolen
Entierx : Entierbool comparer(y : entier)
Chanex : Chanebool comparer(y : chane)
Diapo 1Diapo 2Diapo 3Diapo 4Diapo 5Diapo 6Diapo 7Diapo 8Diapo 9Diapo 10Diapo 11Diapo 12Diapo 13Diapo 14Diapo 15Diapo 16Diapo 17Diapo 18Diapo 19Diapo 20Diapo 21Diapo 22Diapo 23Diapo 24Diapo 25Diapo 26Diapo 27Diapo 28Diapo 29Diapo 30Diapo 31Diapo 32Diapo 33Diapo 34