• Aucun résultat trouvé

La Programmation à Objets

N/A
N/A
Protected

Academic year: 2022

Partager "La Programmation à Objets"

Copied!
34
0
0

Texte intégral

(1)

La Programmation à Objets

 

Najib
TOUNSI


Notes de cours:

2e année Informatique EMI

(2)

LES FONDEMENTS DE LA POO

LES CONCEPTS DE LA POO

LES LANGAGES A OBJETS

(3)

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

(4)

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)

(5)

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.

(6)

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

(7)

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)

(8)

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).

(9)

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;

(10)

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;

(11)

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 champ

p = x.aPrixHT();

n = x.aNom()

avec: méthodes dites

fonctions d'accè

s

classe Article

aPrixHT() { return prixHT;}

aNom() { return nom;}

fin

(12)

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.

(13)

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).

(14)

RELATIONS ENTRE CLASSES

 Relation utilise «uses»

classe commande champs

Article e;

...

méthodes

facturer(){

...

e.prixTTC();

} ...

fin

classe Article ...

prixTTC () {…}

fin

(15)

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

(16)

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.

(17)

RELATIONS ENTRE CLASSES

 Relation Hiérarchique «ISA»

WHO'S WHO

(18)

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

.

Des

sous 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

(19)

CLASSES ET SOUS CLASSES

 Relation d'Héritage «ISA»

Exercice: Quelles sont toutes les caractéristiques de vêtement et de ArticleLuxe?

(20)

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.

(21)

CLASSES ET SOUS CLASSES

 Arbre d'Héritage

(22)

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...

(23)

CLASSES ET SOUS CLASSES

 Graphe d'Héritage

(24)

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.

(25)

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

(26)

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 ...)

(27)

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)

(28)

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 ISA

Un objet d'une sous classe peut être pris pour un objet d'une

classe mère

. (Inverse NON)

(29)

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 est

différente

(tva x%, ou tva y%).

(30)

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 f

Cas 3. est un autre aspect de la

généricité.

(31)

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

"


(32)

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

(33)
(34)

CLASSES GENERIQUES

 Exemple

Références

Documents relatifs

Cela donne avec le groupe octique (8 isoméries du carré) un groupe d’ordre 8*2*2 = 32 qui est le groupe classique opérant sur tous les carrés magiques.. Ensuite, je constate que

Si on ne garde que les carrés non équivalents par isométrie [Par exemple en imposant MIN (a, a’, d, d’) = a pour les rotations et d &lt; d’ pour la symétrie centrale],

temps de cycle 20% plus rapide, consommation d’énergie plus faible, imprimante et mécanisme de fermeture de porte plus rapides, fonctions d’enregistrement des données

Le temps scolaire disponible (en classe ou à la maison) doit être dévolu prioritairement aux apprentissages et non à l’évaluation. Ainsi le rythme sera identique en

Taux de couverture, installation solaire thermique, ECS Taux de couverture, installation de chauffage de base, ECS Taux de couverture, système de chauffage d’appoint, ECS Taux

[r]

Le lundi, nous soignons tout particu- lièrement notre plan de tra vail sur lequel nous pouvons déjà noter avec précision les bandes calcul et français à faire

temps de décisions collectives, des temps de régulation et d’organisa- tion, des temps de présentations et d’évaluations.La façon dont le groupe classe, par exemple lors