Vous êtes sur la page 1sur 98

1

PROGRAMMATION
ORIENTEE OBJET
COO et POO
2

 Objectif du cours:

 Comprendre les concepts et principes de la POO

 Mettre en œuvre ces concepts dans un langage de POO

 Savoir développer des solutions informatiques utilisant les mécanismes


de base et principes avancés de la conception Objet
3
Introduction
4

 Paradigmes de Programmation
 Programmation structurée/modulaire
 Analyse fondée sur les fonctionnalités du programme;
 Mise en évidence des fonction(s) à réaliser
 Décomposition hiérarchique et descendante des fonctions jusqu'à ce que le
codage des sous fonctions simple à réaliser
 Unité logique = Fonction/module
 Définition duale Variables/Fonctions
 Question première : sur quoi porte le programme
Introduction
5

 Paradigmes de Programmation
 Programmation structurée/modulaire
Introduction
6

 Paradigmes de Programmation
 Programmation Orientée Objets (POO)
 Approche ascendante :
 Identifier les entités (objets) manipulées dans le système
 Composer ces objets pour créer le système;

 Unité logique = Objets (en fait les classes des Objets); des entités regroupant
a la fois des données et des fonctions qui les manipulent.
 Question première : sur quoi porte le programme
Introduction
7

 Paradigmes de Programmation
 Programmation Orientée Objets (POO)
Introduction
8

 Approche structurée vs Approche Objet


 Approche classique

 orienté «fonctions »  (quoi faire).

 Point fort: Approche « plus directe » pour implémenter le but souhaité

 Point Faible
 Evolutivité, maintenabilité : Les fonctions constituent la partie la plus
volatile du système; Le fait que son architecture soit très fortement liée
aux fonctionnalité d’un système donné, pose problème.
Introduction
9

 Approche structurée vs Approche Objet

 Approche Objet
 orienté «entités » : identification des objets du système, puis identification des
fonctions applicables à ces objets

 Point faible: Approche « moins directe » pour implémenter le but souhaité


Approche conventionnelle Approche OO

Hiérarchie des SDD

Hiérarchie des Classes


(SDD+Opérations)

Hiérarchie des procédures

10
Introduction
11

 Approche structurée vs Approche Objet

 Approche Objet
 Points forts …:
 Fournit un cadre plus homogène pour traiter simultanément les données et leur
comportement;
 permet de réduire la distance sémantique qui existe entre le modèle réel et le modèle du
système;
 Favorise la réutilisabilité (Réutiliser des fragments de code développés dans un cadre
différent)
 Améliore la conception et la maintenabilité et l’évolutivité des grands systèmes;
Introduction
12

 Approche structurée vs Approche Objet


 Approche Objet
 Points forts :
 Plus résilient car l'architecture est basée sur les données résistent mieux aux
changements car elle s’appuie sur la structure sous-jacente du domaine d’application
plutôt que sur les besoins fonctionnels liés à un seul problème (les données sont en
effet plus stables que les fonctions)

Nota: la réutilisabilité , la maintenabilité et l'évolutivité ne sont capitalisables qu’au prix


d’une bonne conception du système.
13
Introduction
14

 Le Label Objet
 Historique
 Début en Norvège à la fin des années 60
 Développement de Simula (Simple Universal Language) = Algol +
 concepts de POO et simulation discrète
 Années 1970
 Smalltalk = archétype des langages objets
 Développé chez Xerox (=>1er système Fenêtres, Icônes, Souris)
 Au cours des années 80 : intérêt pour les interfaces graphiques
 Apparition de nouveaux langages
 Eiffel : fortement typé, entièrement orienté objet
 C++, extension du C
 Object Pascal (Delphi)
Introduction
15

 Le Label Objet
 Historique
 Années 1990

 Maturité des concepts objets


 Standardisation de C++
 Apparition de Java et Python

 Développement de Méthodes Objets


Introduction
16

 Le Label Objet
 Constituants du Label « Orienté Objet »

 identité,
 classification,
 héritage
 polymorphisme
Introduction
17

 Le Label Objet
 Identité :
 Chaque objet possède sa propre identité indépendante du contenu de l’objet

 permet la création de collection d’objets (comme des répertoire qui


contiennent des fichiers et d’autres répertoires)

 peut être implémentée de plusieurs façons et ne relève pas en général de la


responsabilité du programmeur : adresse, indice dans un tableau, ou valeur
unique d’un attribut.
Introduction
18

 Le Label Objet
 Classification  :
 les objets ayant la même structure de données (attributs) et le même
comportement(opérations) sont regroupés dans une classe.

 Une classe est une abstraction qui décrit les propriétés pertinentes pour
l’application et ignore les autres.

 Le choix d’une classe est donc arbitraire et dépend de l’application.

 Chaque classe décrit un ensemble (potentiellement infini) d’objets


individuels (instances).

 Chaque instance possède ses propres valeurs pour chaque attribut mais
partage nom d’attributs et opérations avec les autres instances de la classe.
Introduction
19

Le Label Objet

 L’héritage

 Partage des attributs et des opérations entre les classes s’appuyant sur une
relation hiérarchique.

 Une classe peut être définie à grands traits (super-classe) et ensuite affinées
dans des sous-classes de plus en plus fines. Chaque sous incorpore ou hérite
toutes les propriétés de sa super-classe et y ajoute ses propres propriétés.

 La possibilité de factoriser des propriétés communes à plusieurs classes dans


une super-classe commune et d’hériter les propriétés de la super-classe peut
réduire de façon significative les répétitions dans la conception et dans les
programmes.
Introduction
20

 Le Label Objet

 Polymorphisme

 la même opération peut se comporter différemment sur différentes clases.

 Une opération est une action ou une transformation qu’un objet effectue ou
subit.

 L’implémentation spécifique d’une opération par une certaine classe est


appelée méthode.

 Une opération polymorphe peut être implémentée par plusieurs méthodes.


Introduction
21
 Les Thèmes de L‘Orienté Objet

 Types Abstraits de Données (TAD)

 Abstraction

 Encapsulation (Masquage d’Information)

 Combinaison « SDD - Comportement »

 Partage
Introduction
22
 Les Thèmes de L‘Orienté Objet

 TAD

 Exporte un type;
 Encapsule l'implémentation du type
 met à disposition une interface (ensemble de fonctions pour manipuler le
TAD)
Introduction
23

 Les Thèmes de L‘Orienté Objet


 Abstraction 
 Se concentrer sur les aspects essentiels d’une entité et ignorer les propriétés
« accidentelles ».
 Déterminer ce qu’est un objet et ce qu’il fait avant de décider comment il sera
implémenté

 L’abstraction se réfère toujours à un but précis

 l’usage approprié de l’abstraction permet d’utiliser (en le faisant évoluer) le


même modèle aussi bien pour l’analyse que pour la conception de haut
niveau, la structure des programmes, la structure des bases de données et la
documentation.
Introduction
24

 Les Thèmes de L‘Orienté Objet


 Encapsulation (Masquage d’Information)

 séparer les aspects externes d’un objet, accessibles par les autres objets, des
détails de son implémentation interne invisibles aux autres objets

 Ainsi, l’implémentation d’un objet peut être modifiée (par exemple pour
améliorer les performances, corriger un bogue, consolider le code ou porter
le code sur une autre machine) sans affecter les applications qui utilisent cet
objet.

 Réduit l’interdépendance des éléments d’une application et par conséquence


l’effet des modifications
Introduction
25

 Les Thèmes de L‘Orienté Objet


 Combinaison « SDD - Comportement »

 La hiérarchie des structures de données est identique à la hiérarchie des


hiérarchies d’opérations

 Combinée avec le polymorphisme, l’utilisateur d’une opération n’a pas


besoin de savoir combien d’implémentation (méthodes) existe pour cette
application.

 La charge de décider quelle opération employer est reporté vers la hiérarchie


des classes.
Introduction
26

 Les Thèmes de L‘Orienté Objet


 Partage
 L’héritage des sdd et du comportement permet de partager une structure
commune entre plusieurs sous-classes similaires (suppression de la redondance).

 économie de code

 conception plus claire car permettant de révéler que des opérations différentes
sont en réalité identiques (du point de vue sémantique).

 Ce partage d’information peut être étendu à des applications futures si l’on


conçoit en ayant à l’esprit la réutilisabilité.
Introduction
27

 Les Thèmes de L‘Orienté Objet


 Conclusion
 La Synergie de ces différents thèmes offre un style de développement puissant
aux multiples avantages :

 Système plus propre, plus robuste et plus général ;

 Plus grande Réutilisabilité

 Plus forte Stabilité


28
Les Concepts de Base de la POO
29

 Objet
 Un objet est un concept, une abstraction ou une chose ayant des
limites claires et un sens précis dans le contexte du problème étudié.

 Un objet est caractérisé par :


 Une identité qui distingue logiquement et physiquement l’objet des
autres.

 Un état : valeurs des attributs + liens avec d’autres objets

 Un comportement: ensembles d'opérations applicables à l'objet.


Les Concepts de Base de la POO
30

 Objet
 Identifiant d’objet (Object Identifier)

 Référence système unique et invariante qui matérialise l'identité d'un objet.


L'identifiant est attribuée à un objet lors de sa création permettant de le
désigner et de le retrouver tout au long de sa vie

 Un objet peut changer de valeur, mais pas d’identifiant). L’identité peut être
implémentée de plusieurs façons et ne relève pas en général de la
responsabilité du programmeur : adresse, indice dans un tableau, ou valeur
unique d’un attribut
Les Concepts de Base de la POO
31

 Objet
 Identifiant d’objet (Object Identifier)

 Deux objets O1 et O2 sont identiques (on note O1 == O2) s’ils ont le même
identifiant ; il n’y a alors en fait qu’un objet désigné par deux pointeurs O1 et
O2.
 Au contraire, deux objets sont égaux (on note O1 = O2) s’ils ont même
valeur (le même état). O1 == O2 implique O1 = O2, l’inverse étant faux;

 L’identité d’objet apporte une plus grande facilité pour modéliser des objets
complexes; en particulier, un objet peut référencer un autre objet;

 Le partage référentiel d’un sous-objet commun par deux objets devient


possible sans duplication de données.
Les Concepts de Base de la POO
32

 Objet
 Etat d’un objet

 Ensemble des données encapsulées dans l'objet.


 mémorise une ou plusieurs valeurs assignées aux attributs,
 mémorise un ou plusieurs identifiants d’objets liés pour les attributs de
type référence.

 Comportement

 Ensembles d’opération que l'on peut appliquer (invoquer) sur l’objet


 En particulier, les opérations publiques que peuvent utiliser les clients
de l’objet.
Les Concepts de Base de la POO
33

 Objet
V1

  Numéro: 812 RH 94,


  Marque: Renault,
 
Type: Clio, Moteur: M1 ;
 
 
 
créer(), démarrer(), rouler(),
 
stopper(), détruire()
 

P1 P2

  Nom: Traoré,   Nom: Koffo,


   
  Prénom: Mariam, Age: 24,  
Prénom: Paul, Age: 30,
  Voiture: V1 ;   Voiture: V1 ;
   
   
  naître(), vieillir(), conduire(),
naître(), vieillir(), conduire(),  
  mourir()   mourir()
   
Les Concepts de Base de la POO
34

 Classes
 Une classe décrit un groupe d’objets ayant des propriétés similaires
(attributs), un comportement commun (opérations), des relations
communes avec les autres objets ainsi qu’une même sémantique

 Une classe définit les attributs et les opérations


 Les objets d’ une classe (instances de la classe) partage un objectif
sémantique commun qui dépend de l’objectif de l’application et est
fonction du jugement individuel.
 La classe d’un objet est une propriété implicite de l’objet. La +part
des LOO peuvent déterminer la classe d’un objet à l’exécution.
Les Concepts de Base de la POO
35

 Classes
 Utilité d’une classe:
 Créer des catégories;
 Disposer d’un moule pour la création d’objets.

 La classe stocke les définitions communes (nom de la classe, nom


des attributs, définitions des opérations).
Les Concepts de Base de la POO
36

 Classes
 Attributs
 Aussi appelés variables d’instance.
 Caractéristique d’un objet désignée par un nom permettant de mémoriser une
ou plusieurs valeurs, ou un ou plusieurs identifiants d’objets.
 Un attribut sert à mémoriser une valeur ou une référence précisant une
caractéristique d’un objet.
 Un attribut a un nom, un type et une intention sémantique
 Le type d’un attribut peut être élémentaire (un entier, un réel ou un texte) ou
complexe (une structure à valeurs multiples) ou un type Référence. La
référence correspond à un identifiant d’un autre objet. Elle permet de pointer
vers un autre objet avec des pointeurs invariants.
Les Concepts de Base de la POO
37

 Classes
 Opérations, Méthodes

 Opération: action, fonction ou transformation qui peut être appliquée aux


objets ou par les objets dans une classe.
 Ex: embaucher, licencier, rémunérer sont des opérations de la classe Société

 Méthode : implémentation d’une opération par une classe.


 Une méthode est caractérisée par un en-tête appelé signature définissant son
nom, ses paramètres d’appel et ses paramètres de retour et par son code
 Ex: embaucher(Personne p, String poste)
Les Concepts de Base de la POO
38

 Classes
 Opérations, Méthodes
 Types d’opération :
Sélecteurs (accesseur),
Modificateurs (mutateur),
 constructeur : Fonction associée à une classe permettant la création et
l’initialisation d’un objet en mémoire
Destructeur: Fonction associée à une classe permettant la destruction d’un objet
en mémoire
Itérateurs

 Surcharge de méthode (Overloading)


La manœuvre consistant à surcharger une méthode revient à en créer une nouvelle,
dont la signature se différencie de la précédente, uniquement par la liste ou la nature
des arguments. le code approprié étant sélectionné selon le type des paramètres
fournis lors d’un appel.
Les Concepts de Base de la POO
39

 Classes
 Opérations, Méthodes

 Accesseurs
Méthodes get...() : lecture d'un attribut
Objet non modifié
Retour = une copie (valeur) de l'attribut

 Mutateurs
Méthodes set...() : écriture d'un attribut (et éventuellement d'attributs dépendants)
Objet modifié
Type de retour = void ou un type indiquant un statut (modification effectuée ou
non, ...)

 Si possible, un couple accesseur/mutateur par attribut


Les Concepts de Base de la POO
40

 Classes
 Encapsulation
 le principe d’ encapsulation hérité des types abstraits cache les structures
de données (les attributs) et le code des méthodes en ne laissant visible que
les opérations exportées, appelées opérations publiques.

 Par opposition, les opérations non exportées sont qualifiées de privées. Elles
ne sont accessibles que par des méthodes associées à l’objet.

 L’encapsulation est un concept fondamental qui permet de cacher un groupe


de données et un groupe de procédures associées en les fusionnant et en ne
laissant visible que l’interface composée des attributs et des opérations
publics
Les Concepts de Base de la POO
41

 Classes
 Encapsulation -
 Interface d’une classe : Ensemble des signatures des opérations, y compris
les lectures et écritures qui sont applicables depuis l’extérieur sur les objet de
la classe
 Pour éviter de modifier les clients, une interface ne doit pas être changée
fréquemment : elle peut être enrichie par de nouvelles opérations, mais il faut
éviter de changer les signatures des opérations existantes.

 Gestion de l’encapsulation dans les Langages objet :


 Une gestion élaborée de l'encapsulation :
 Privé
 Protégé
 Public
 Paquetage
Les Concepts de Base de la POO
42

class Fraction {
private int numerateur;
private int denominateur;

public Fraction (int, int); // Constructeur


public Fraction (int); // 1 autre Constructeur
public int getNum();
public void setNum(int);
public void affiche();
public Fraction addition (Fraction);
public Fraction addition (int);
public float valeur()
public Fraction inverse();
public bool inferieur(Fraction);

};
Les Concepts de Base de la POO
43

Classes
 Propriétés de classe:
 Un attribut classique est une variable d’instance (il stocke une valeur de
propriété d’une instance).

 Attribut de classe: attribut dont la valeur n'est pas propre a une instance particulière
(valeur partagée par toutes les instances).
 Permet d'implémenter une propriété (variable ou constante) commune à toutes les entités
d'une même classe :

 Méthode de classe: Méthode dont le résultat de l’exécution est indépendant de l'objet


récepteur. N'utilise pas l'état de l'objet récepteur.
 Une méthode de classe ne peut utiliser que des attributs de classe , et ne peut appeler en son
sein que des méthodes également de classe.
 L'utilisation de this n’apporte rien dans une méthode de classe
 Attribut et Méthode de Classe sont également accessibles à travers le nom de la classe.
En C++, java, …, on utile le mot clé static pour indiquer une propriété de classe
Les Concepts de Base de la POO
44

 Dynamique d'un Programme Objet - Message


 Dans un programme Objet, les objets communiquent entre eux par des
messages comportant le nom d’une méthode et ses paramètres. Un objet
reçoit un message et réagit à un message .  

 Message :
 Instruction composée d’un objet récepteur, d’un nom d’opérations et de paramètres,
permettant par envoi, l’invocation de l’opération publique de l’objet récepteur.

 Un objet réagit à un message en sélectionnant le code de la méthode associée selon le


nom de la méthode et le type des paramètres, réalisant ainsi le polymorphisme. Il
retourne les paramètres résultats de l’opération.
 Notation usuelle : notation pointée
 Exemple: Sembaucher(p1, "chef comptable"); p  affricher();
Les Concepts de Base de la POO
45

 Associations et Liens

 Une association permet d’établir une relation entre deux classes (binaire) ou
plus (n-aire). Une association décrit un ensemble de liens potentiels.

 Un lien est une connexion structurelles -physique ou conceptuelle- entre des


instances des classes associées. Un lien est une instance d’une association.
Les Concepts de Base de la POO
46

 Associations et Liens
 Agrégation
 Association entre deux classes exprimant que les objets de la classe cible sont des
composants (font partie ) de ceux de la classe source (composite).
 Relation de dominance et de subordination. Une action sur une classe implique une
action sur une autre classe.
 Une classe peut appartenir a plusieurs agrégats

 Composition
 Agrégation forte exprimant une Contenance structurelle :
 Création/Copie/Destruction du composite  Création/Copie/Destruction de ses
composants
 Un composant appartient à au plus un composite
Les Concepts de Base de la POO
47
 Associations entre classes et Liens
 Classe-Association
 Une association peut avoir ses propres propriétés, qui ne sont disponibles dans aucune des classes
associées.
 Une association peut être représentée par une classe pour ajouter attributs et opérations à des
associations

Personne 1.. * 1.. * Entreprise


employé employeur
 
Poste
dateDebut
dateFin
salaire

Personne Poste Entreprise


1 1.. * 1.. * 1
dateDebut
 
dateFin
salaire
Les Concepts de Base de la POO
48
 Associations entre classes et Liens
 Implémentation des Associations

 Les associations entre classe se traduisent le plus souvent par des instances
qui détiennent des références à d'autres objets.

 Les collections permettent d’implémenter les agrégations multivaluées.


 L’agrégation peut être implémentée par une référence (par exemple
List<Paragraphe*>) ou par une imbrication, selon que l’on désire ou non
partager les objets inclus.

 Collection (Collection) : Container typé désigné par un nom, contenant des


éléments multiples organisés selon une structure particulière, auxquels on
accède par des opérations spécifiques au type du container.
Les Concepts de Base de la POO
49
 Associations entre classes et Liens
 Implémentation des Associations
 Exemple de collections :

 l’ensemble (Set) qui permet de définir des collections non ordonnées sans double ;
 le sac (Bag) qui permet de définir des collections non ordonnées avec doubles;
 la liste (List) qui permet de définir des collections ordonnées avec doubles ;
 le tableau (Array) qui permet de définir des collections ordonnées et indexées.

 Dans les systèmes objet, la notion de collection est souvent réalisée par des classes
paramétrées, encore appelées classes génériques ou patterns de classes. Les classes
collection sont généralement organisée hiérarchiquement.
Les Concepts de Base de la POO
50

 Associations entre classes et Liens


 Implémentation des Associations

lesNums
AnnuaireTelephonique NumTelephone
*

Public class AnnuaireTelephonique {


private ArrayList <NumTelephone> lesNums
 
}
51
52

Agrégation et Propagation des opérations (Delegation)


 Application automatique d’une opération aux objets composants lorsque
l’opération est appliquée à un agrégat.
 Exemple

Document copier Paragraphe copier Caractère

copier copier copier


Les Concepts de Base de la POO
53

 Généralisation et Héritage
 Généralisation
 Lien hiérarchique entre deux classes spécifiant que les objets de la classe
supérieure sont plus généraux que ceux de la classe inférieure.

 La classe inférieure est appelée sous-classe ou classe dérivée. La classe


supérieure est appelée super-classe ou classe de base.

 Le parcours du lien de la super-classe vers la sous-classe correspond à une


spécialisation (l’inverse de la généralisation).
 Le concept de généralisation permet de définir un graphe de généralisation entre
classes. Les nœuds du graphe sont les classes et un arc relie une classe C2 à une classe
C1 si C1 est une généralisation de C2. Le graphe dont les arcs sont orientés en sens
inverse est appelé graphe d’héritage.
Les Concepts de Base de la POO
54

 Généralisation et Héritage
 Héritage: transmission automatique des caractéristiques (attributs et methodes)
d'une classe vers une sous-classe en faisant dériver une nouvelle classe d'une
classe existante.
 C’est une Abstraction permettant de partager les points communs entre les classes tout en
préservant leurs différences.
 Objectifs :
 définir une nouvelle classe comme specialisation d'une classe existante
 factoriser des propriétés et comportements communs à plusieurs classes
(généralisation)
 définir une relation de sous-typage entre classes
 hériter des attributs et des méthodes de sa super-classe
 éviter la duplication et encourage la réutilisation
 La sémantique la plus courante de la généralisation consiste à dire que tout
élément d’une sous-classe est élément de la superclasse (relation d’inclusion)
Les Concepts de Base de la POO
55

 Généralisation et Héritage
 Une sous-classe spécialise une superclasse de 2 manières:
 Par enrichissement: En ajoutant des attributs et/ou des méthodes;

 Par Redéfinition (Overriding) : Spécification d’une méthode existante dans


une super-classe au niveau d’une sous-classe, avec une implémentation
différente

 la Redéfinition ne change pas la signature de la méthode.


Les Concepts de Base de la POO
56

 Généralisation et Héritage
 Redéfinition
 On procède à une redéfinition pour les raisons suivantes:
 Redéfinir pour étendre: même opération que celle héritée mais modification du
comportement pour tenir compte par exemple de nouveaux attributs;
 Redéfinir pour restreindre: la nouvelle opération restreint le protocole par
exemple en réduisant le type des arguments pour conserver l’opération héritée
dans les limites de la classe.
 Redéfinir pour optimiser: tirer avantage des contraintes imposées par une
restriction pour améliorer le code de l’opération
 Redéfinir pour raisons pratiques: pratique non recommandée consistant à
rechercher une classe C similaire à la nouvelle classe C’, à hériter de C et à
redéfinir les méthodes de C non opportunes pour C’.
Les Concepts de Base de la POO
57

 Généralisation et Héritage
 Redéfinition
 Une instance d’une classe est une instance de tous les ancêtres de la classe  toutes
les caractéristiques des classes ancêtres doivent s’appliquer aux instances de la sous-
classe.
 Une classe descendante ne peut pas omettre ou supprimer un attribut ancêtre car ses
instances ne seraient pas vraiment des instances de l’ancêtre. Par contre une sous-
classe peut restreindre les attributs ancêtres (Restriction).

 Par exemple un cercle est une ellipse dont le petit axe et le grand axe sont égaux.

 Les opérations sur une classe ancêtre doivent s’appliquer sur toutes les classes
descendantes. Une sous-classe peut ré implémenter une opération mais ne peut pas
changer le protocole externe.
Les Concepts de Base de la POO
58

 Généralisation et Héritage

 Utilisation ad hoc de l’héritage (héritage d’implémentation):


 Pour implémenter une classe C’, rechercher une classe C qui a des points
communs avec C’ et hériter de C.
 Redéfinir (ignorer) dans C’, les méthodes de C non opportunes.

 L’héritage d’implémentation est anomal du point de vue sémantique, car il n y a


pas de relation « naturelle » entre C et C’. Il est une source potentielle de
problèmes de maintenance.

 Une Solution possible: Généraliser les aspects communs des classes originelles
et nouvelles en une troisième classe dont les deux premières héritent.
Les Concepts de Base de la POO
59

 Généralisation et Héritage

 Utilisation ad hoc de l’héritage (héritage d’implémentation):

A
C

B
A B

C = points communs de A et B
Les Concepts de Base de la POO
60

 Généralisation et Héritage

 Exemple de règles simples à appliquer:

 Toutes les opérations de requêtes (sélecteurs) sont héritées par toutes les sous-classes;
 Les opérations de màj sont héritées au travers de toutes les extensions;
 Les opérations de màj qui ont des attributs contraints ou les associations sont bloquées
par une restriction. Par ex. l’opération ajuster-x est autoriser pour Ellipse, bloquée
dans Cercle.
 Les opérations ne peuvent pas être redéfinies pour avoir un comportement différent de
celui des opérations héritées.
 On peut affiner les opérations héritées en leur ajoutant un comportement
supplémentaire
Les Concepts de Base de la POO
61

 Généralisation et Héritage
 Exemple java et c++
Les Concepts de Base de la POO
62

 Généralisation et Héritage

 Association vs généralisation:

 L’association met en relation des instances (un objets est lié à ou englobé
dans l’autre). L’association permet la réutilisation du code par délégation

 la généralisation met en relation les classes. L‘heritage permet la fusion des


comportements
Les Concepts de Base de la POO
63
Liste
Liste
ajouter
ajouter
enlever
enlever
premier
premier
dernier
dernier

Pile
Pile

empiler
dépiler empiler
dépiler

DECONSEILLE RECOMMANDE
Les Concepts de Base de la POO
64

classe Pile{
contenu: Liste de T // Liste<T>

empiler(e: T){
this.contenu.ajouter(1,e);
}

depiler(){
this.contenu.enlever(1);
}
sommet(): T {
retourner this.contenu.premier();
}
vide () : Booleen{
retourner this.contenu.vide();
}
Pile(){
this.contenu.= nouveau Liste();
}
}
65
Concepts Avancés
66

 Héritage multiple
 Afin d’augmenter la puissance de modélisation du Système, il est souhaitable
qu’une classe puisse hériter des propriétés de plusieurs autres classes (héritage
multiple).

 Héritage multiple (définition): Type d’héritage dans lequel une classe


dérivée hérite de plusieurs classes de niveau immédiatement supérieur.
 Avantages: grand pouvoir de spécification des classes, plus grande possibilité de
réutilisation;
 Inconvénients: augmentation de la complexité conceptuelle et d’implémentation
Concepts Avancés
67

 Héritage multiple

 2 types de problèmes sont induits par l’héritage multiple:


 Propriétés homonymes héritées de 2 superclasses

 Héritage à répétition d’une propriété


Concepts Avancés
68

 Héritage multiple
 Problème d’homonymie
 Il peut y avoir des problèmes de gestion des homonymes si Les classes A et B ont des
attributs et/ou des méthodes dont les noms sont identiques.
 C’est (en général) le programmeur qui a la responsabilité de résoudre le problème

 Solution C++:
 on utilise le nom de la classe mère en préfixe afin de spécifier l'origine du membre requis
(A::attr et B::attr)
 Pour les méthodes, il est également possible de redéfinir la super méthode qui est à l’origine
du conflit.

A B

C
Concepts Avancés
69

 Héritage multiple
 Héritage à répétition d’une propriété.
 Il y a héritage à répétition lorsqu’une propriété de la même classe ancêtre est
rencontrée sur plus d’un chemin.
 Les attributs de la classe A sont présents en double exemplaire
dans la classe D (en provenance de B et C)

 Solution C++:
 On utilise l’héritage en mode virtuel (virtual) pour préciser de n'incorporer
qu'une seule fois les membres de la classe A dans D
Concepts Avancés
70

 Héritage multiple
 Quelques règles concernant l’héritage multiple
 Chaque généralisation doit couvrir une propriété unique
 Si une classe peut être affinée sur plusieurs dimensions distinctes et indépendantes
alors, utiliser des généralisations multiples
 Les sous-classes d’une généralisation peuvent ou non être disjointes

 Une classe peut hériter de deux généralisations distinctes ou de différentes


classes à l’intérieur d’une généralisation avec recouvrement mais jamais de
deux classes d’une même généralisation disjointe.
Concepts Avancés
71

 Héritage multiple - Exemple

Véhicule

VéhiculeTerrestre VéhiculeMarin

Auto VéhiculeAmphibie Bateau


Concepts Avancés
72

 Héritage multiple
 Héritage multiple accidentel: une instance participe à deux classes se
recouvrant.
 Un thésard est à la fois enseignant et étudiant (héritage multiple normal)

 Un professeur X donné prenant des cours dans un autre établissement (héritage


multiple accidentel). Il n’existe pas de classe représentant cette combinaison et il serait
artificiel d’en créer une.

 Approche de solution:
 traiter une Personne comme un objet composé de multiples objets
MembresUniversité
Concepts Avancés
73

 Héritage multiple
 Héritage multiple accidentel

Personne MembreUniversité

CorpsEnseignant Étudiant Personnel

ChargédeCours
Concepts Avancés
74

 Héritage multiple
 Contournement de l’héritage multiple.
 Comment gérer(contourner) l’héritage multiple si le langage de programmation utilisé
ne l’autorise pas (comme Java par exemple) ?
 C’est un enjeu d’implémentation mais il est mieux traité si l’on restructure le modèle de
façon anticipée.

 Techniques de restructuration:
 Délégation utilisant l’agrégation des rôles

 Hériter de la classe la plus importante et Déléguer le reste

 Généralisation Imbriquée
Concepts Avancés
75

 Héritage multiple
 Contournement de l’héritage multiple (Agrégation des rôles)
 Une superclasse avec des généralisations multiples indépendantes peut être remaniée comme un
agrégat dans lequel chaque composant remplace une généralisation.

SalaireEmployé Employé PensionEmployé

EmployéNonProtégé
EmployéProtég
EmployéSalarié
EmployéHorair

Vacataire

é
e
Concepts Avancés
76

 Héritage multiple
 Contournement de l’héritage multiple (Héritage + Agrégation)
 Hériter de la classe la plus importante et Déléguer le reste

Employé PensionEmployé

EmployéNonProtég
EmployéProtégé
EmployéSalari
EmployéHoraire

Vacataire
é

é
Contournement
77
 Généralisation Imbriquée: Factoriser d’abord sur une généralisation puis sur une autre
et ainsi de suite.

Employé

EmployéHoraire EmployéSalarié Vacataire


EmployéHNonProtég

EmployéSNonProtég

EmployéVNonProtég
EmployéSProtég

EmployéVProtég
EmployéHProtégé

é
é

é
Concepts Avancés
78

 Héritage multiple
 Contournement de l’héritage multiple – Quelques conseils.
 Si une classe a plusieurs superclasses d’importance égale: utiliser la délégation qui préserve
la symétrie du modèle;
 Si une des superclasses dominent les autres: héritage simple + délégation;
 Si le nombre de combinaisons est réduit, envisager la généralisation imbriquée sinon il faut
l’éviter
 Si une superclasse a largement plus de propriétés que les autres superclasses ou qu’une
superclasse représente un goulot d’étranglement, préserver l’héritage à travers ce chemin
 Si l’on utilise la généralisation imbriquée, il faut factoriser en commençant par le critère plus
important.
 Éviter si possible les généralisations imbriquées si une grande quantité de code doit être
dupliquée
 Seules les généralisations imbriquées permettent de préserver une identité stricte.
79
Concepts Avancés
80

 Classes Abstraites
 Classes qui n’a pas d’instances directes
 « new » et « abstract » sont incompatibles

 les classes descendantes peuvent avoir des instances directes

 Une classe concrète peut avoir des sous-classes abstraites (mais elles doivent
avoir des descendants concrets)

 Une classe abstraite ne peut pas être une classe feuille dans l’arbre
d’héritage
Concepts Avancés
81

 Classes Abstraites
 Particularités
 Les classes abstraites servent à organiser les propriétés communes à
plusieurs classes:
 pour encapsuler les classes qui participent à la même association ou agrégation
 pour définir des méthodes qui doivent être héritées par des sous-classes.

 Une classe abstraites a la particularité de pouvoir définir le protocole pour


une opération sans fournir l’implémentation correspondante (méthode
abstraite).
 Méthode abstraite
 Une méthode abstraite est une fonction déclarée dans une classe abstraite
mais non implémentée dans celle-ci.
 Une méthode abstraite doit obligatoirement être surchargée par toute sous-
classe non abstraite.
Concepts Avancés
82

 Classes Abstraites
 Exemple
Employé
cumulsalaireanné
calculerpaie

EmployéHoraire EmployéSalarié Vacataire


tauxhoraire
taux-heures-sup taux hebdo taux journalier
calculerpaie calculerpaie calculerpaie
Concepts Avancés
83

 Classes Abstraites
 Exemple

ObjetGraphique

dessiner

Rectangle Ellipse Trait

dessiner dessiner dessiner


Concepts Avancés
84

 Classes Abstraites
 Implémentation dans les langages
 En C++, une classe abstraite est une classe contenant au moins une méthode virtuelle pure
(méthode abstraite); Il n’y a d’autre moyen de rendre une classe abstraite qu’en y
installant une méthode abstraite ou virtuelle pure
 Virtual float calculerPaie() = 0;

 En Java , C# ou en PHP5, une classe abstraite doit être explicitement déclarée abstraite:
 abstract class C {…}.

 Ces 3 langages n’accepteraient pas qu’une méthode abstraite soit définie dans une
classe, si cette classe elle-même n’est pas déclarée comme abstraite. Par contre, ils
acceptent d’une classe qu’elle soit abstraite, alors qu’aucune méthode abstraite ne s’y
trouve.
 public abstract class EmployeSalarie extends Employe{
 …….
 }
Classes Abstraites
85

public abstract class Ressource extends


ObjetJungle { /* classe abstraite */ public class Eau extends Ressource {
private int temps; Eau() {
private int quantite; super();
Ressource () { }
super();
public void dessineToi(Graphics g) { /* définition
temps = 0;
quantite = 100; de cette méthode abstraite */
} g.setColor(Color.blue);
abstract public void dessineToi(Graphics g.fillOval(getMaZone().x, getMaZone().y,
g); /* méthode abstraite */ getMaZone().width, getMaZone().height);
abstract public void evolue(); /* méthode }
abstraite */
public void evolue() { /* définition de cette
public void incrementeTemps() {
temps++; méthode abstraite */
} incrementeTemps();
public int getTemps() { if ((getTemps()%10) == 0)
return temps; decroitTaille(2);
} }
public void diminueQuantite() {
}
decroitTaille(2);
}
}
Concepts Avancés
86

 Classes Abstraites
 Intérêt des classes abstraites
 Elles permettent souvent une meilleure conception de la hiérarchie des
classes (reflétant plus précisément ce que l’on essaie de modéliser)
 Elles permettent une meilleure localisation des erreurs d’exécution
 Les classes abstraites ont un caractère général et sont donc souvent
réutilisable.

 Certaines classes abstraites apparaissent naturellement dans le domaine


d’application: employé, figure, etc. D’autres sont introduites artificiellement
pour faciliter la réutilisation du code.
87
Concepts Avancés
88

 Classes Génériques
 Une classe générique (classe paramétrée, template) est le descripteur d’une
classe ayant un ou plusieurs paramètres formels.
 Une classe générique définit une famille de classes non directement utilisable
 Une liaison des paramètres à des valeurs particulières génère une classe
particulière
 Les classes génériques sont utilisée massivement dans les classes de type
collections: List, Array, Set, etc.
 La génération des implémentations selon le type des paramètres est généralement à la
charge du compilateur du langage objet de définition de classe paramétrée.
 L’intérêt d’utiliser des classes paramétrées est la facilité de réutilisation, dans des
contextes différents selon les paramètres.
 L’inconvénient est souvent l’accroissement de la taille du code généré.
Concepts Avancés
89

 Classes Génériques
 Dans la plupart des environnement Objet, les collections sont des classes
d’objets génériques qui offrent des méthodes d’accès spécifiques. Le paramètre
est souvent le type des objets de la collection. Elles peuvent être organisées en
hiérarchie de généralisation.
 Exemple : List<X> et Set<X>
 Set<Int> , List<Etudiant>
 Set<List<Vin>>
Concepts Avancés
90

 Classes Génériques
 Exemple
class Phrase {
List <Array <char>> Séquence; };

class Paragraphe {
Phrase Thème;
List <Phrase> Détails;
Phrase Conclusion; };

class Texte {
List <Paragraphe*> Contenu; };
Concepts Avancés
91

 Classes Génériques
 Exemple
public class Duo<T, S> {
private T valeur1;
private S valeur2; public T getValeur1() {
public Duo(){ return valeur1;}
 
this.valeur1 = null;
public void setValeur1(T valeur1) {
this.valeur2 = null;} this.valeur1 = valeur1;}
   
public S getValeur2() {
public Duo(T val1, S val2){ return valeur2;}
this.valeur1 = val1;  
public void setValeur2(S valeur2) {
this.valeur2 = val2;} this.valeur2 = valeur2;}
}
92
Concepts Avancés
93

 Polymorphisme

 Une référence à une superclasse C peut (légitimement) pointer sur une


instance de n’importe quel descendant (direct ou indirect) de C.

 Un tableau de références sur C peut contenir des instances de n’importe


quel descendant de C.
Concepts Avancés
94

 Polymorphisme
 Question:
 Soit une méthode m de la superclasse C, redéfinie dans les sous-classes C 1, …
Cn de C;
 Soit refc (refc: C) une référence à une instance quelconque de C ou d’un
descendant Ci de C;
 Soit le message : refc.m(). Quelle version de m doit être appelée étant donnée
que refc peut référencer un C ou un Ci ?

 Réponses:
 Si l’on se base sur le type de la référence (C), C.m() sera évoquée;

 Si l’on se base sur le contenu de l’objet référencé, sot Cj la classe de cet objet,
alors la méthode Cj.m() sera évoquée. Polymorphisme
Concepts Avancés
95

 Polymorphisme
 Définition: le polymorphisme est la possibilité qu’une variable soit
utilisée pour référencer des objets de différents types (appartenant à une
hiérarchie) et pour appeler automatiquement la version appropriée de la
méthode de l’objet qu’elle référence.

 Avantages :
 Possibilité de regrouper des objets d’une même hiérarchie dans une même
structure (tableau, liste etc.) pour les traiter de façon uniforme.
 Référencer un code nouveau à partir d’un code ancien.
Concepts Avancés
96

 Polymorphisme
 Mise en Œuvre:

 Pour utiliser le polymorphisme sur une méthode m, il faut que m soit définie
dans la superclasse et dans la sous-classe.
 Approche Java: mise en œuvre automatique du polymorphisme (toute
méthode est considérée comme virtuelle);
 Approche C++: la méthode concernée doit être déclarée virtuelle dans la
superclasses et redéfinie dans les sous-classes qui nécessitent une
redéfinition.
 Approche C#: la méthode doit être déclarée virtual (dans la superclasse) et
override (dans la sous-classe)
Concepts Avancés
97

 Polymorphisme
 Mise en Œuvre:

public class TraitGraphique {


public class Trait { private Point debut;
private Point debut; private Point fin;
private Point fin; private int epaisseur;
public Trait(Point p1, Point p2 ){ private int couleur;
this.debut = p1; public Trait(Point p1, Point p2, int ep, int
this.fin = p2;} coul ){
  this.debut = p1;
public void affiche(){ this.fin = p2;}
System.out.println("debut :" +  
p1.toString() + public void affiche(){
 "fin: " + p2.toString() ; System.out.println("debut :" + p1.toString() +
}  "fin: " + p2.toString() ;
} }
}
98

Vous aimerez peut-être aussi