La Programmation à Objets
Najib TOUNSI
Notes de cours:
2e année Informatique EMI LES FONDEMENTS DE LA POO
LES CONCEPTS DE LA POO
LES LANGAGES A OBJETS
LES CONCEPTS DE LA POO
✔ Classe d'Objets
Concrétisation d'un TAD
Objets, Méthodes, Envoie de Message, Instanciation …
✔ Relations entres Classes
Composition (use) et Généralisation Hiérarchique (isa).
✔ Classes et Sous Classes
Héritage, Liaison Dynamique, Polymorphisme, Surcharge
✔ Généricité
Paramétrage des Classes.
✔ Collection et Itérateurs
NOTION DE CLASSE
Objets et Classes d'Objets
Une classe, est une implantation d'un TAD. Elle décrit un ensemble d'objets caractérisés par les mêmes opérations de manipulation.
La classe est l'unité modulaire de structuration d'un programme
.
Elle encapsule une partie statique
la description des données représentant un objet (état d'un objet)et une partie dynamique
la description des opérations de manipulation (information sur, ou changement d'état d'un objet)
Un objet est une instance directe d'une classe. (cf. valeur et son type)
NOTION DE CLASSE
Champs, Méthodes, Envoie de Message ✆
Champs:
Méthodes:
Envoi de message:
données constituant la
représentation
opérations de
manipulations
demande d'exécution
d'une méthode sur un objet.NOTION DE CLASSE
Exemple:
Classe Article
champs
int numéro;
char nom[20];
float prixHT;
short qte;
méthodes
prixTTC () { return prixHT * 1.19; } ajouter (entier q) { qte = qte + q; } retirer (entier q) { qte = qte - q; } fin
Champs et Méthodes caractéristiques (features).
Identificateurs sélecteurs
Synonymes parfois: attributs, propriétés
NOTION DE CLASSE
Instanciation d'objet
C'est la création en mémoire des objets d'une classe
. (+ initialisation).Une instance est repérée à travers une variable
(peut être un pointeur).Une classe deux instances (objets)
NOTION DE CLASSE
Instanciation d'objet
Dans un programme main() qui utilise cette classe Article.
Exemples déclarations:
Article a, b; initialisation par défaut.
Article c (23, "vélo", 120, 5); initialisation fournie.
Exemples d'envois de messages:
a.ajouter (5);
x = b.prixTTC();
Remarque:
constructeur
peut servir à l'initialisation (Voir partie langage).NOTION DE CLASSE
Notations
1
envoyer_message (Instance, Méthode, Paramètres);
envoyer_message (a, ajouter, q);
2
Méthodes (Instance, Paramètres)
ajouter (a, q);
3
Instance.Méthode (Paramètres)
a.ajouter(q);
Intérêt de 3
i. Forme contractée
ii. Mise en évidence envoie message.
vs Call classique
Avec 2 a.qte = a.qte + q;
Dans corps de méthode Avec 1, Il est écrit simplement
qte = qte + q;
NOTION DE CLASSE
Pointeur this (ou self, current) :
Dans les méthodes, les champs se rapportent à l'instance à laquelle le message est envoyé
Appel opération Méthode associée
a .ajouter(q);. Ajouter (entier q) {qte = qte + q}
Il existe un pointeur implicite
, (this)
vers l'instance d'appel.qte = qte + q; ≡ this->qte = this->qte + q;
NOTION DE CLASSE
Accès aux données composant un objet (les champs) ( Charactéritiques publiques/privés)
✔
Direct
:instance.champ
Article x;
p = x.prixHT;
n = x.nom;
✔
Méthode explicite
: retourne la valeur d’un champp = x.aPrixHT();
n = x.aNom()
avec: méthodes dites
fonctions d'accè
sclasse Article …
aPrixHT() { return prixHT;}
aNom() { return nom;}
fin
NOTION DE CLASSE
Accès aux champs ( publique vs privé)
Bonne pratique
Méthodes publiques
Champs privés ⇒ Abstraction, Protection des informations
...Il est utile de ne laisser visibles à l'extérieur que certains sélecteurs (publiques) et de masquer les autres (privés). La bonne pratique c’est :. seules les méthodes sont publiques.
RELATIONS ENTRE CLASSES
Relation utilise «uses»
La Programmation Orientée Objets est la construction d'un système logiciel comme une collection structurée de classes
.B. MEYER
Une première relation entre classe est la relation utilise.
Une classe A utilise une autre classe B si elle déclare en son sein une ou plusieurs entités de la classe B et en appelle les méthodes.
On dit aussi que la classe A est cliente de la classe B (langage Eiffel).
RELATIONS ENTRE CLASSES
Relation utilise «uses»
classe commande champs
Article e;
...
méthodes
facturer(){
...
e.prixTTC();
} ...
fin
classe Article ...
prixTTC () {…}
fin
RELATIONS ENTRE CLASSES Considérations sémantiques
✘ Un objet de classe A
a
parmi ses caractéristique un objet de classe B.✘ B est un composant de A.
✘ La composition, dite aussi agrégation (aggregation), est un puissant concept sémantique.
(cf. notions de record, tuple)
✘ Modèle objet se distingue en plus: A appelle des méthodes de B
RELATIONS ENTRE CLASSES
Relation Hiérarchique «ISA»
✔ Deuxième relation fondamentale entre classes.
✔ Très structurante au niveau conceptuelle (Généralisation/Spécialisation).
✔ Très avantageuse au niveau pratique (héritage et réutilisation de code).
✔ Concept sémantique de généralisation.
RELATIONS ENTRE CLASSES
Relation Hiérarchique «ISA»
WHO'S WHO
CLASSES ET SOUS CLASSES
Relation d'Héritage «ISA»
Un objet de classe B est_un objet de classe A s'il possède les caractéristiques de A avec d'autres qui lui sont propres.
✗
Dans un même ensemble, certains objets sont plus nuancés.
✗
Une classe A pour les caractéristiques communes:super classe
.✗
Dessous classes
B, B',... pour nuancer:
✓
Rajout de nouvelles caractéristiques (plus spécifiques)✓
Modification des caractéristiques communes
✗
B, B', ...héritent
ainsi de la classe A (les propriétés communes).Une Notation:
classe B
super classe A
... // nouvelles caractéristiques et/ou ... // redéfinition de caractéristiques fin
CLASSES ET SOUS CLASSES
Relation d'Héritage «ISA»
Exercice: Quelles sont toutes les caractéristiques de vêtement et de ArticleLuxe?
CLASSES ET SOUS CLASSES
Relation d'Héritage «ISA»
✔ Partage de description
✔ Réutilisation du travail fait
✔ Enrichissement et complément de connaissances
✔ Développement incrémental
✔ Arbre d'héritage
✔ Incidence d'une modification sur un sous arbre.
CLASSES ET SOUS CLASSES
Arbre d'Héritage
CLASSES ET SOUS CLASSES
Héritage Multiple
✘ But: définir de nouveaux objets en se servant de plusieurs autres.
✔ Des classes de branches différentes, partagent encore des caractéristiques.
✔ Dupliquer ces caractéristiques ou hériter de plusieurs endroits.
✔ Graphe d'héritage sans circuits.
✘ Défaut: Parfois classe d'objets artificielle (factorisation de caractéristiques)
Ne correspond pas à une entité réelle...
CLASSES ET SOUS CLASSES
Graphe d'Héritage
CLASSES ET SOUS CLASSES
Conflits d'Héritage
propriété de même nom chez deux ancêtres différents
p est quel sélecteur ?
‐ Changer idf p dans B ou C Contraignant.
‐ Renommer à l'héritage.
CLASSES ET SOUS CLASSES
Conflits d'Héritage
Classe A
super classe B: p' renames p super classe C: p" renames p ...
end
Donner des noms distincts aux caractéristiques héritées ayant même nom.
Autre Solution…(e.g. C++)
Préfixage par la classe (:: opérateur de résolution de portée) dans A: B::p
est la propriété p héritée de B
C::p
est la propriété p héritée de C
C LASSES ET SOUS CLASSES
Orthogonalité des Relations uses et ISA
D uses B et C uses A déduits.
‐
Relations essentielles en Génie Logiciel
.(Conception/Structuration, Maintenance ...)
CLASSES ET SOUS CLASSES
Typage et Liaison
Lier une variable à son type et donc aux opérations applicables.
Compilation : Conformité des opérations appliquée.
Typage statique ou typage fort.
Génie logiciel.
Article x ; x.prixTtc(); x++ ; x.titi() ;
OK ! !
Edition de lien : déterminer quel code (compilé) exécuter à chaque appel méthode.
Statique avant l’exécution Dynamique : en cours d’exécution..
LOO Liaison toujours dynamique. (Sauf optimisation compilateur)CLASSES ET SOUS CLASSES
Le Polymorphisme
✔ Une entité qui revêt plusieurs formes.
✔ Changement dynamique de type pour:
✗
Objet désigné par une variable✗
Objet paramètre d'une fonction✗
Objet composant dans une classe etc…➥
Généralement lié a l'héritage, conséquence de la relation ISAUn objet d'une sous classe peut être pris pour un objet d'une
classe mère
. (Inverse NON)CLASSES ET SOUS CLASSES
Le Polymorphisme
Exemple:
article A;
articleLuxe B;
A ← B; Juste B ← A; Faux
(astuce: respecter sens de ISA)
Liaison dynamique
⇒
:A.prixTTC();
A ← B;
A.prixTTC();
La requête prixTTC(),
n'as pas le même sens
avant et après l'affectation➥
A l'exécution, la méthode activée estdifférente
(tva x%, ou tva y%).CLASSES ET SOUS CLASSES
Polymorphisme et Surcharge
Le polymorphisme intervient dans
(x étant déclaré de classe A) x.m(…) Message envoyé à un objet
…f(x,…) Objet paramètre
x[i] Objet dans un ensemble
classe C champs
x; Objet composant.
… fin etc.
x peut designer n'importe quelle instance de A ou descendant de A
Cas 2. on parle aussi de
surcharge
de fCas 3. est un autre aspect de la
généricité.
CLASSES GENERIQUES
Paramétrisation des classes
C'est quand plusieurs classes ne différent que par le type d'un composant.
On définit une seule classe générique paramétrée alors par ce type.
Une pile d'entiers ressemble étrangement à une pile de caractères…
Type PileEnt:
Rep tableau t [MAX] de entier;
entier top;
...
empiler (p, n) { p.top = p.top+1;
p.t[p.top] = n; } depiler(p) { p.top = p.top-1; } ...
fin
Type Pilecar:
Rep tableau t [MAX] de car;
entier top;
...
empiler (p, c) { p.top = p.top+1;
p.t[p.top] = c; } depiler(p) { p.top = p.top-1; } ...
fin
"
CLASSES GENERIQUES
Paramétrisation des classes
TypeGénérique Pile <type ELEMENT>:
Rep tableau t [MAX] de ELEMENT;
entier top;
...
fin
✔ ELEMENT représente un type ou classe (vs un objet.)
✔ Il fait paramètre formel
(*).
✔ On peut instancier plusieurs piles.
On pourra déclarer, par exemple: Pile <entier> pe;
Pile <car> pc;
Pile <Article> pa; etc...
Entier, car, Article, paramètres effectifs.
Définition de type par: Pile <type> où type est le type paramètre effectif
(*) Doit être muni parfois de certaines opérations (e.g. comparaison, affectation