Académique Documents
Professionnel Documents
Culture Documents
Termes clés
1
Partie 1. Concepts de base et principes
de l’Orienté-Objet
Introduction
Objectifs
Termes clés
2
Leçon 1 – Concepts de base de l’orienté-objet
Présentation
Cette leçon décrira les concepts de base de l’orienté-objet. Nous aborderons les termes
comme : les objets, les classes, l’héritage et le polymorphisme. Nous mettrons l’accent sur les
composantes d’une classe, comment créer une hiérarchie de classe, comment créer des
classes mères et des classes filles et comment donner plusieurs rôles à une même méthode.
1.1 Objets
Toute discussion portant sur l’ingénierie logicielle orientée objet doit commencer en
abordant l’expression « orienté-objet ». Qu’est-ce qu’un point de vue orienté objet ? Dans
quels cas une méthode est considérée comme orientée-objet ? Qu’est-ce qu’un objet ? Tel
que défini par Ojo et Estevez (2005), l’orientation objet porte sur la visualisation et la
modélisation du monde / système comme un ensemble d’objets liés et interagissant entre
eux. Les caractéristiques de l’approche OO sont:
• L’univers est composé d’objets qui interagissent
Les objets sont les entités d’exécution de base dans un système orienté objet. Ils peuvent
représenter une personne, un lieu, un compte, une base de données ou un objet que le
programme doit gérer. Ils peuvent également représenter des données définies par
l’utilisateur telles que les vecteurs, le temps et les listes. Un problème de programmation est
analysé en termes d’objets et cette analyse prend en compte la nature de la communication
entre ces objets. Les objets dans un programme doivent être choisis de telle sorte qu’ils
correspondent étroitement avec les objets du monde réel comme le montre la figure 1.5 (Ojo
et Estevez, 2005).
Lorsqu’un programme est exécuté, les objets interagissent en envoyant des messages les uns aux
autres. Par exemple, si « étudiant » et « enseignant » sont deux objets dans un programme, alors
l’objet « étudiant » peut envoyer un message à l’objet « enseignant » pour demander ses notes à un
contrôle. Chaque objet contient des données et des instructions (code) pour manipuler les données.
Les objets peuvent interagir sans connaitre les détails des données ou du code de l’autre.
3
Prenons un exemple d’un objet du monde réel. Chaise est un membre (le terme instance est également
utilisé) d’une plus grande classe d’objets que nous appelons mobilier. Un ensemble d’attributs
génériques peuvent être associés à chaque objet dans la classe mobilier (Par exemple, tout mobilier a
un coût, les dimensions, le poids, l’emplacement et la couleur, parmi beaucoup d’attributs possibles).
Ceci s’applique quand nous parlions d’une table, d’une chaise ou d’un canapé. Etant donné que chaise
est un membre/instance de mobilier, chaise hérite tous les attributs définis pour la classe comme le
montre la figure 1.8. Une fois que la classe a été définie, les attributs peuvent être réutilisés lorsque de
nouvelles instances (objets) de la classe sont créées.
Dans le monde réel les objets peuvent être caractérisés par deux choses : leur état et les
traitements qu’ils peuvent subir. Chaque objet du monde réel possède des données et des
comportements. Les données pour un objet sont généralement appelés les attributs de l’objet. Les
différents comportements d’un objet sont appelées les méthodes (ou traitements) de l’objet.
L’état d’un objet est l’ensemble des informations stockées dans l’objet. Il peut changer au fil du
temps. Il change aussi à la suite d’un traitement exécuté sur l’objet. Il ne peut pas changer
spontanément. L’état est encapsulé dans l’objet et n’est pas directement visible. Les différentes
composantes de l’état sont parfois appelés les attributs de l’objet. Un traitement est une procédure
4
qui, à partir de l’état de l’objet et éventuellement de certains arguments peut changer cet état et /
ou retourner une ou plusieurs valeurs. Les objets permettent certains traitements et pas d’autres.
1.2 Classes
Une classe est un modèle pour la création d’un objet. Une classe est une description d’un ensemble
d’objets connexes qui partagent les mêmes attributs, traitements. Une classe décrit les attributs et
méthodes qui existeront pour toutes les instances de la classe. Une classe est simplement une
description ; elle n’existe pas vraiment en tant que telle jusqu’à ce que vous déclarez une instance de la
classe.
Les objets contiennent des données et du code pour manipuler ces données. L’ensemble des données et le
code d’un objet peut devenir un type de données défini par l’utilisateur lorsqu’il est représenté sous la
forme d’une classe. En fait, les objets sont des variables de type classe. Une fois qu’une classe a été définie,
nous pouvons créer un certain nombre d’objets appartenant à cette classe. Les objets sont créés en utilisant
la définition de la classe comme modèle. Lorsqu’un objet est d’une classe donnée, il est associé aux données
de cette classe. Une classe est donc une collection d’objets du même type. Graphiquement, une classe est
assimilée à un rectangle. Voici un concept important à retenir - la classe que vous créez ne peut rien faire
jusqu’à ce que vous l’utilisiez.
Un nom de classe doit être unique dans son empaquetage. Chaque classe doit avoir un nom qui distingue des
autres classes. Un nom de classe est une chaîne de texte. Ce nom est appelé un nom simple ; un nom de chemin est le
nom de la classe préfixé par le nom du paquet dans lequel évolue cette classe. Une classe peut être représentée ne
montrant que son nom comme le montre la figure 1.7 à titre d’exemples.
Un attribut est une propriété nommée d’une classe qui décrit une plage de valeurs que les occurrences
de la propriété peuvent détenir. Une classe peut avoir un nombre quelconque d’attributs ou pas
d’attribut du tout. Un attribut représente une propriété de la chose que vous modélisez qui est
partagée par tous les objets de cette classe. Un nom d’attribut peut être du texte. Dans la pratique, un
nom d’attribut est un nom court ou un nom nominal qui représente une propriété de sa classe
englobante. En général, la première lettre de chaque mot dans un nom d’attribut est en majuscule, sauf
la première lettre, comme dans nom ou porte-Bagage
Un traitement est l’implémentation d’un service qui peut faire l’objet d’une requête provenant de
n’importe quel objet de la classe en vue de modifier le comportement de l’objet. En d’autres termes, un
traitement est une abstraction de quelque chose que vous pouvez faire à un objet et qui est commun à
5
tous les objets de cette classe. Une classe peut avoir un nombre quelconque de traitements ou pas de
traitements du tout. Un nom de traitements peut être du texte. Dans la pratique, un nom de
traitements est un verbe qui représente un comportement de sa classe englobante. En général, la
première lettre de chaque mot dans un nom de traitements est en majuscule, sauf la première lettre,
comme dans déplacer ou estVide. Figure 1.8 montre un exemple d’une classe et d’objets liés.
Figure 1.8: La classe imprimante avec sa liste d’objets (Source: Ojo et Estevez, 2005)
1.3 Héritage
L’héritage est un des concepts clés qui différencient les systèmes conventionnels (structuré) et l’OO.
Une sous-classe Y hérite de tous les attributs et les opérations associées à sa superclasse, X. Cela signifie
que toutes les structures de données et algorithmes à l’origine conçus et mis en œuvre pour X sont
immédiatement disponibles pour Y sans qu’aucune action supplémentaire ne soit requise. Les
structures de données et algorithmes peuvent être réutilisés automatiquement. Toute modification des
données ou des opérations contenues dans une superclasse est immédiatement héritée par toutes les
sous-classes qui ont héritées de la superclasse. Par conséquent, la hiérarchie des classes devient un
mécanisme à partir duquel les modifications (à des niveaux élevés) peuvent être immédiatement
propagées à travers un système.
L’héritage est le processus par lequel les objets d’une classe acquièrent les propriétés des objets d’une
autre classe. Il prend en charge le concept de classification hiérarchique. Par exemple, le petit-fils est
une partie de la classe parent qui est encore une partie de la classe grand-parent. En programmation
orientée objet, le concept d’héritage entraîne l’idée de réutilisation. Cela signifie que nous pouvons
ajouter des fonctionnalités supplémentaires à une classe existante sans la modifier. Ceci est possible en
obtenant une nouvelle classe à partir de celle qui existe.
En C ++, la classe d’origine est appelée une classe de base et la classe qui a acquis les caractéristiques
de la classe de base est appelée classe dérivée. La nouvelle classe aura les caractéristiques combinées
des deux classes. La puissance du mécanisme d’héritage est qu’il permet au programmeur de
réutiliser une classe. Ce qui signifie que l’héritage favorise le partage et la réutilisation des
informations de conception et du code du programme.
1.4 Polymorphisme
Le polymorphisme est un autre concept important de la POO. C’est la capacité pour un objet à prendre
plus d’une forme. Par exemple, un traitement peut avoir un résultat différent selon les cas. Le
6
résultat dépend des types de données utilisés dans le traitement. Par exemple, considérons
l’opération d’addition.
Pour deux nombres, ce traitement va générer une somme si les opérandes sont des chaînes, le traitement
produira une troisième chaîne par concaténation. Cela signifie qu’un seul nom de la fonction peut être
utilisé pour gérer un nombre différent et différents types d’arguments. Ceci est quelque chose de
semblable à un mot particulier ayant plusieurs significations différentes selon le contexte. Les classes
dérivées peuvent redéfinir la mise en œuvre d’une méthode.
Exemple :
Si nous voulons créer un bateau et une classe de voitures, nous voudrions certainement hériter de la
classe transport, comme tous les bateaux peuvent se déplacer et toutes les voitures peuvent se
déplacer, même si c’est de différentes façons.
Evaluation 1
1. Répondre par Vrai ou faux. Pour celles qui sont fausses, expliquer pourquoi.
- Faux : create est un verbe d’action, qui est utilisé pour les opérations
- Vrai
Une classe n’a pas d’utilité en elle-même. Un logiciel avec de nombreuses fonctionnalités peut avoir des
milliers de classes. Les objets des différentes classes doivent être liés les uns aux autres, interagir et de
collaborer pour mener à bien les processus. Les relations entre les objets (connus sous le nom des
associations) sont représentées par des lignes reliant les objets.
L’association exprime les relations entre les classes et définit les liens entre les instances de la classe
(objets). Un lien exprime une relation entre les objets. Il existe quatre types de relations entre les
classes: Association, Agrégation, Composition, Généralisation.
7
1.5.1 Association
C’est la relation la plus simple entre les classes. C’est une relation d’égal à égal. C’est une relation
structurelle décrivant un ensemble de liens. Les liens sont des connexions entre les objets. Les liens
sont implémentés dans les objets en utilisant des références. Une association est une relation entre
deux ou plusieurs classes et implique une connexion entre les instances. Les associations entre les
classes A et B peuvent être :
4. A est un élément de B
6. A utilise ou gère B
7. A communique avec B
8. A suit B
9. A appartient à B
1.5.2 Agrégation
Une agrégation est une association qui représente une relation d’inclusion structurelle ou
comportementale d’un élément dans un ensemble. Les objets sont rassemblés pour créer un objet plus
complexe. Ce rassemblement peut être physique ou logique. L’agrégation définit un point de contrôle
unique pour les objets qui y participent. L’objet issu de l’agrégation gère les différents objets qui
composent l’agrégation. L’agrégation est représentée comme un diamant creux, pointant à la classe qui
est utilisée.
Exemple 1: Un processeur fait partie d’un ordinateur. CPU, périphériques, moniteur et le clavier sont
assemblés pour créer un ordinateur
Figure 1.9: Liens d’agréation entre un ordinateur est ses composantes ou périphériques
La composition est une agrégation composite. La durée de vie des objets individuels dépend de la durée de
vie de l’objet global. Aucune partie de la composition ne peut exister par elle-même. Une classe composite
est construite à partir d’autres classes. La classe a besoin d’une ou de plusieurs autres classes pour exister.
La composition est représentée par un diamant solide
Exemple:
Un mot ne peut pas exister si il ne fait pas partie d’une ligne. Si un paragraphe est supprimé, toutes les
lignes de l’alinéa sont supprimées, et tous les mots appartenant à ces lignes sont supprimés. Si un
document est supprimé, tous les paragraphes le composant disparaissent.
La généralisation est aussi appelé relation “d’héritage”. Une généralisation est la relation entre une
classe générale et une ou des classes plus spécialisées. Dans une relation de généralisation, les
spécialisations sont appelées sous-classe et la classe généralisée est appelée la superclasse. Une
généralisation permet l’héritage des attributs et des opérations d’une superclasse par ses sous-classes.
L’héritage ou la généralisation est décrite comme une relation parent / enfant, où une classe enfant
hérite de tous les attributs et méthodes d’une classe, et ajoute ses propres attributs et méthodes pour
créer un nouveau comportement. L’héritage est représenté comme une flèche triangulaire creuse,
dirigée vers la classe parente.
Une super-classe est une classe qui contient les caractéristiques communes à deux ou plusieurs classes. Une
super classe est similaire à un sur-ensemble, par exemple, personnel-agence. Une sous-classe est une classe
9
qui contient au moins les attributs et méthodes de sa (ses) superclasse(s). Une classe peut être une sous-
classe et une super classe en même temps.
1.5.6 Multiplicité
La multiplicité montre le nombre d’objets d’une classe pouvant être associés à un objet d’une autre
classe. Exemple: Un citoyen peut demander une ou plusieurs licences, et une licence est requise par un
citoyen.
Conclusion
Comme l’a déclaré Liu, (2001), le but d’une association et d’un lien entre deux objets est d’établir
diverses sortes de relation, et donc des classes peuvent avoir toutes sortes d’associations dans un
domaine d’étude. Les objectifs que doit remplir toute association sont les suivants :
• Une association entre deux classes doit fournir des connexions physiques ou
conceptuelles entre les objets de ces classes.
10
• Seuls les objets qui sont associés entre eux peuvent collaborer les uns avec les autres à
travers les liens.
• Booch décrit le rôle d’une liaison entre les objets de la manière suivante :
• “Un lien représente l’association spécifique par lequel un objet (le client) applique les
services d’un autre objet (le fournisseur), ou par lequel un objet peut accéder à un
autre”.
Evaluation 2
1. Ces affirmations sont-elles vraies ou fausses ? Pour celles qui sont fausses, expliquer
pourquoi.
2. Supposons que nous voulons modéliser une application e-service pour un organisme
gouvernemental. Est-ce que ce schéma modélise raisonnablement la relation entre les entités
Utilisateur, Employé, EmployéServiceClientèle, EmployéServiceAdministratif, et Demandeur?
Si non, proposez un modèle plus approprié.
3. Ajouter une généralisation pour les classes définies dans l’évaluation 1.3.6 (2)
i. Ajouter une opération à la super classe qui pourrait être implémentée de différentes
manières par ses sous-classes.
11
Leçon 2 : Principes de l’orienté-objet
Présentation
Cette leçon décrit les principes fondamentaux de l’orientée- objet que vous devez comprendre et qui
serviront de tremplin pour le reste de l’unité.
En d’autres termes, la modularité porte sur le processus de décomposition des systèmes complexes en de
petits morceaux, plus autonomes qui peuvent être gérés facilement. La modularité peut être effectuée en:
• Décomposant le problème en de plus petits sous-problèmes
2. Couplage faible
La définition du couplage est la suivante : "une entité (sous-partie, composant, classe, méthode) est couplée à
une autre si elle dépend d'elle", autrement dit, si elle a besoin d'elle pour fonctionner. Plus une classe ou une
méthode utilise d'autres classes comme classes de base, attributs, paramètres ou variables locales, plus son
couplage avec ces classes augmente.
12
Au sein d'une application, un couplage fort tisse entre ses éléments des liens puissants qui la rend plus rigide à
toute modification (on parle de "code spaghetti"). A l'inverse, un couplage faible permet une grande souplesse de
mise à jour. Un élément peut être modifié (exemple : changement de la signature d'une méthode publique) en
limitant ses impacts.
Le couplage peut également désigner une dépendance envers une technologie ou un élément extérieur
spécifique : un SGBD, un composant logiciel, etc.
Le principe de responsabilité unique permet de limiter le couplage au sein de l'application : chaque sous-partie a
un rôle précis et n'a que des interactions limitées avec les autres sous-parties. Pour aller plus loin, il faut limiter le
nombre de paramètres des méthodes et utiliser des classes abstraites ou des interfaces plutôt que des
implémentations spécifiques ("Program to interfaces, not to implementations").
3. Cohésion forte
Ce principe recommande de placer ensemble des éléments (composants, classes, méthodes) ayant des rôles
similaires ou dédiés à une même problématique. Inversement, il déconseille de rassembler des éléments ayant
des rôles différents.
Exemple : ajouter une méthode de calcul métier au sein d'un composant lié aux données (ou à la présentation)
est contraire au principe de cohésion forte.
4. Abstraction
L’abstraction est un modèle qui prend en compte les aspects les plus importants d’un système donné,
tout en ignorant les détails les moins importants. L’abstraction implique un savoir-faire qui consiste à
prendre en compte l’essentiel et à ignorer ce qui ne l’est pas. L’orienté objet est une bonne abstraction
du monde réel ; cela signifie que si le problème change (à savoir les exigences changent, comme c’est
presque toujours le cas), la solution devrait être plus facile à modifier. Ojo and Estevez, (2005) indique
que l’abstraction est le processus permettant de se concentrer sur les aspects les plus importants, tout
en ignorant les détails moins importants. Elle permet la gestion de la complexité, en se concentrant sur
les caractéristiques essentielles qui font qu’une entité diffère des autres. La figure 1.1 montre un
exemple d’abstraction du traitement de commandes.
5. Encapsulation
L’encapsulation permet de définir des niveaux de visibilité des éléments de la classe. Ces niveaux de visibilité
définissent les droits d'accès aux données selon que l'on y accède par une méthode de la classe elle-même, d'une
classe héritière, ou bien d'une classe quelconque. Il existe trois niveaux de visibilité:
Publique: les fonctions de toutes les classes peuvent accéder aux données ou aux méthodes
d'une classe définie avec le niveau de visibilité public. Il s'agit du plus bas niveau de protection des
données
protégée: l'accès aux données est réservé aux fonctions des classes héritières, c'est-à-dire par
les fonctions membres de la classe ainsi que des classes dérivées
Privée: l'accès aux données est limité aux méthodes de la classe elle-même. Il s'agit du niveau
de protection des données le plus élevé.
13
Il est recommandé d’avoir une encapsulation forte c’est à dire de n'exposer au reste de l'application que le strict
nécessaire pour que la sous-partie joue son rôle. Au niveau d'une classe, cela consiste à ne donner le niveau
d'accessibilité publique qu'à un nombre minimal de membres, qui seront le plus souvent des méthodes. Au
niveau d'une sous-partie d'application composée de plusieurs classes, cela consiste à rendre certaines classes
privées afin d'interdire leur utilisation par le reste de l'application.
En d’autre terme, l’encapsulation, autorise uniquement l’instance qui possède un membre donné à le modifier
ou à y accéder. L’objet chaise (et tous les objets en général) encapsule les données (les valeurs d’attributs qui
définissent la chaise), les opérations (les actions qui sont chargées de modifier les attributs de la chaise), d’autres
objets (des objets composites peuvent être définis), les constantes (valeurs fixes), et d’autres renseignements
connexes. L’encapsulation signifie que l’ensemble de ces informations est empaqueté sous un nom et peut être
réutilisé comme une spécification ou un composant d’un programme. En d’autres termes, l’encapsulation cache
l’implémentation aux utilisateurs et aux clients (Ojo and Estevez, 2005). Les Clients dépendent des interfaces
comme le montre la figure 1.2 par exemple.
• Faire en sorte que les données contenues dans un objet ne puissent pas être altérées par
d’autres objets.
6. Hiérarchie
La hiérarchie est un arrangement des classes dans une structure arborescente. Dans cette hiérarchie,
un système complexe est composé de sous-systèmes interdépendants qui ont à leur tour leurs
propres sous-systèmes, et ainsi de suite, jusqu’à ce que le plus bas niveau de composants
14
élémentaires soit atteint. Figure 1.4 montre un exemple du principe de la hiérarchie dans la
programmation orienté objet.
La méthode O.O.D (object oriented design) de G.Booch propose 5 étapes dans l’établissement
d’une conception orientée objet. Ces étapes n’ont pas obligatoirement à être enchaînées dans
l’ordre dans lequel nous les citons dans le paragraphe suivant. C’est cette souplesse qui nous a
fait choisir la démarche de G.Booch, car cette méthode est fondamentalement incrémentale et
n’impose pas un cadre trop précis et trop rigide dans son application. Cette démarche se révèle
être utile pour un débutant et lui permettra de fabriquer en particulier des prototypes avec efficacité
sans trop surcharger sa mémoire.
On cherchera à identifier les objets du monde réel que l’on voudra réaliser.
On cherchera ensuite à identifier les actions que l’objet subit de la part de son
environnement et qu’il provoque sur son environnement.
Etablir la visibilité :
15
Conseil : On établira quels objets le voient et quels objets sont vus par lui (les
spécialistes disent alors qu’on insère l’objet dans la topologie du projet). Il faudra
prendre bien soin de définir ce qui est visible ou non, quitte à y revenir plus tard si un
choix s’est révélé ne pas être judicieux.
Etablir l’interface :
Dès que la visibilité est acquise, on définit l’interface précise de l’objet avec le monde
extérieur.
La dernière étape consiste à implanter les objets en écrivant le code dans un langage
de votre choix.
Conclusion
Cette leçon a mis l’accent sur les principes fondamentaux de l’orientée-objet. Ces principes concernent
l’abstraction, l’encapsulation, la modularité et la hiérarchie.
Evaluation
2. Quels sont les quatre principes de base l’orienté objet ? Fournir une brève description de
chaque principe.
Résumé de la partie
Un objet est toute abstraction qui modélise quelque chose dans l’univers ayant des propriétés et des
comportements. Une classe est une abstraction d’un ensemble d’objets liés logiquement ayant des
caractéristiques semblables. Les classes peuvent être liées par les types de relations suivantes :
association, agrégation, composition, héritage ou généralisation. Les concepts de l’orienté objet
16
comprennent : les objets, les classes, l’héritage et le polymorphisme. La POO est caractérisée par
quatre principes fondamentaux : l’abstraction, encapsulation, la modularité et la hiérarchie. Cela peut
être considéré comme un critère pour déterminer si deux objets doivent être liés. La maîtrise de ces
concepts et principes permet de se doter d’outils méthodologiques rationalisant l’effort de production
du logiciel, sans que leur lourdeur rebute l’étudiant non professionnel et masque ainsi l’intérêt de leur
utilisation.
Évaluation de la partie 1
4. Le masquage d’information exprime l’idée qu’un module cache certains aspects de son
fonctionnement interne à d’autres modules. (2 points)
5. Quel autre terme (unique) désigne le masquage d’information
Encapsulation (critiquée)
6. Pourquoi le masquage d’information est-il important ?
• Liu Z., (2001), “Object-Oriented Software Development Using UML”, The United Nations
University, UNU-IIST International Institute for Software Technology, Tech Report 229.
• Ojo A. and Estevez E., (2005), “Object-Oriented Analysis and Design with UML”, Training
Course, The United Nations University, UNU-IIST International Institute for Software
Technology, e-Macao Report 19, Version 1.0, October.
17
• Fien Van der Heyde, Laurent Debrauwer, UML 2 : Initiation, exemples et exercices
corrigés, Eni.
• Benoît Charroux, Aomar Osmani, Yann Thierry-Mieg, “UML 2”, collection Synthex
, Pearson Education , 3ème édition, 2010
18