héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du...
TRANSCRIPT
![Page 1: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/1.jpg)
Héritage et composition
diagramme de classes…
approche orienté objet…
traduction au niveau du codage ?
mécanismes de programmation de ces concepts
concepts non algorithmiques mais objets !
![Page 2: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/2.jpg)
Héritage et composition
les relations entre objets :
une voiture moteur
une voiture véhicule
une voiture conducteurs
a un
est un
a des
(pas dans le sens 'possède')
composition
héritage
association
![Page 3: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/3.jpg)
Héritage et composition
à chaque relation son implémentation
composition : la classe A comporte un objet de classe B
si objet de classe B partagé par plusieurs objets de classe A :
pointeur vers objet de classe B
membre static
![Page 4: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/4.jpg)
Compositionclass moteur{// ici on trouve du code bien écrit};
class voiture{ private : char *marque;
moteur m;};
tout comme une struct peut contenir une struct
ou moteur *m;ou static moteur m;
![Page 5: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/5.jpg)
Liste d'initialisation
pour le constructeur de la classe contenante :class voiture{ private : char *marque;
moteur m; public : voiture(moteur mm, char*ma)
{m=mm;// intialisation de la marque
}};
ce code d'initialisation n'est pas du code 'efficace'
voiture(moteur mm, char *ma):m(mm){
// code autre que des affectations systématiques}
![Page 6: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/6.jpg)
Liste d'initialisation
valable pour les types de base (int et consorts)class foo{// que du bon code};
class bar{ private :
foo f;int i;char c;
public :bar(foo pff, int pii, char pcc):f(pff),i(pii),c(pcc) {}~bar() {}// autres fonctions membres
};
![Page 7: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/7.jpg)
Héritage
syntaxe
class classe : dérivation classe[, dérivation classe,…]{
// code de la classe};
la classe ainsi définie hérite des classes listées
![Page 8: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/8.jpg)
Héritage
dérivation : indique l'accessibilité entre classes
principe : une classe B héritant de A contient tous les membres de A
un objet de classe B contient un sous-objet de classe A
exemple avec Dev
![Page 9: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/9.jpg)
Héritage privé
dérivation : public, private, protected
héritage private (par défaut) :
public
protected
private
privateinacessibles
dans la classe de base dans la classe dérivée
![Page 10: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/10.jpg)
Héritage privé
rôle de l'héritage privé
class A : private B{
// code de A};
A est une sorte de B, mais les utilisateurs n'ont pas à le savoir. A offre une interface qui lui est propre.
exemple avec Dev
![Page 11: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/11.jpg)
Héritage protégé
héritage protected :
public
protected
private
protectedinacessibles
dans la classe de base dans la classe dérivée
membres protected accessibles aux classes dérivées
![Page 12: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/12.jpg)
Héritage public
héritage public :
public
protected
private
dans la classe de base dans la classe dérivée
type de dérivation très utilisé
public
protected
private
![Page 13: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/13.jpg)
Redéfinition de fonctionclass D : public B{};
D est-un B "en mieux"
les fonctions de B : D doit les proposer
c'est le cas !D d;
d.f(); // ok si f() est définie dans B !
![Page 14: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/14.jpg)
Redéfinition de fonction
D peut implémenter f();
mais D::f() masque B::f()
pas appel aux deux !
appel explicite possible
exemple avec Dev
![Page 15: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/15.jpg)
Troncature d'objet
si D est un B alors…D d;B b;
b=d; //?
B *ptr;
ptr=&d; // ???
ptr->f(); //??? effets
exemple avec Dev
![Page 16: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/16.jpg)
Polymorphisme
déclaration d'un tableau de B contenant doncdes objets de classe B, des objets de classe D…
définition ?B tablo[100];
ou
B *tablo;tablo = new B[42];
![Page 17: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/17.jpg)
Polymorphisme
problèmes : la troncature !
D d;tablo[2]= d; // ok mais troncature
donc tableau de pointeurs :B* tablo[100];B[0] = new B;B[1] = new D;
utilise les types statiques des objets !
exemple avec Dev
![Page 18: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/18.jpg)
Polymorphisme
possibilité de déterminer le type dynamique de l'objet : forcer le compilateur à le traiter.
mot clef virtual dans la définition de la fonction au niveau de la classe de base.
![Page 19: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/19.jpg)
Fonctions virtual
contraintes sur les fonctions virtuelles redéfinies (appelons la f() ):
f() retourne T*
f() retourne T&
f() retourne T
rédéfinion de f() : (une sorte de T)*
rédéfinion de f() : (une sorte de T)&
rédéfinion de f() : T
![Page 20: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/20.jpg)
Classe abstraite
abstraction / taxonomie / concept
super classe
pas instanciable
rôle d'interface, de modèle
obligation de dériver des classes
![Page 21: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/21.jpg)
Classe abstraite
instrument de musique
orchestre
instrument à corde instrument à vent
cuivres bois
piano violon contrebasse
tuba trompette
hautbois
1*
![Page 22: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/22.jpg)
Classe abstraite
interface de instrument ?jouer();
class instrument{ public :
virtual void jouer(note)=0; }
fonction virtuelle pure : ne peut être appeléedoit être redéfinie par les classes dérivées
exemple avec Dev
![Page 23: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/23.jpg)
Classe abstraite
quid des classes abstraites intermédiaires ?
ne doivent pas redéfinir les fonctions virtuelles car classes abstraites
peuvent ajouter des informations d'interface
non instantiables !
![Page 24: Héritage et composition diagramme de classes… approche orienté objet… traduction au niveau du codage ? mécanismes de programmation de ces concepts concepts](https://reader038.vdocuments.pub/reader038/viewer/2022110305/551d9dc3497959293b8e1a79/html5/thumbnails/24.jpg)
Retour sur virtual
exemple de redéfinitionclass figure{
public:virtual void dessiner()=0;virtual figure *symetrique(droite)=0;
};
class triangle{
public :void dessiner(){//le code//}figure *symetrique(droite d){//du code}
};