Cours POO
Cours POO
UNIVERSITE LIBRE DE
KISANGANI
Faculté des Sciences Informatiques
PROGRAMMATION ORIENTEE
OBJET
ASSISTANT TEGE SIMBONI
Janvier 2009
Page |2
Objectifs du cours
Sommaire du cours
1.1. INTRODUCTION
En fait, on peut dire que la POO est une façon de développer une application
qui consiste à représenter ou « modéliser » une application informatique sous la forme
d’objets, ayant des propriétés et pouvant interagir entre eux. La modélisation orientée objet
est proche de la réalité ce qui fait qu’il sera relativement facile de modéliser une
application de cette façon.
Il faut savoir que la POO, c’est beaucoup plus que ça et nous en verrons plus
dans la suite de ce cours, mais comprendre ce qu’est un objet est globalement suffisant
pour une grande partie du cours.
Les langages objets sont fondés sur la connaissance d’une seule catégorie
d’entités informatiques : les objets. Un objet incorpore des aspects statiques et dynamiques
au sein d’une même notion. Avec les objets les données sont prépondérantes. Et nous
devons répondre tout d’abord à la question « De quoi parle-t-on ? »
Données Données
Méthodes Méthodes
Objet 1 Objet 2
1.2. DEFINITIONS
1.2.1 POO
La POO est une méthode d’implémentation dans laquelle les programmes sont
organisés sous formes de collections coopératives d’objets, dont chacun représente une
instance d’une classe quelconque et dont toutes les classes sont membres d’une hiérarchie
de classes unis à travers des relations d’héritage.
1.2.2 Classe
Une classe est la modélisation informatique d'un concept. Le concept doit avoir
une notion bien précise possédant plusieurs aspects, alors la représentation informatique de
cette notion, le sera sous forme de classe. Une classe est l’équivalent d’un type de donnée
(abstrait). Une classe permet de définir les données relatives à une notion, ainsi que les
actions qu'y s'y rapportent. Les variables à l'intérieur d'une classe seront appelées attributs,
et les procédures et les fonctions seront appelées méthodes.
La représentation d’une classe :
NomClasse
Les Attributs
(propriétés)
Les Méthodes
Page |6
1.2.3 Objet
Un objet est une instance d’une classe ou soit est une entité logicielle. Si on
prend le monde réel, nous sommes entourés d’objets : une chaise, une table, une voiture,
etc. Ces objets forment un tout.
Ils possèdent des propriétés (la chaise possède 4 pieds, elle est de couleur bleue,
etc.).
Ces objets peuvent faire des actions (la voiture peut rouler, klaxonner, etc.).
Ils peuvent également interagir entre eux (l’objet conducteur démarre la voiture,
l’objet voiture fait tourner l’objet volant, etc.).
1.2.4 Attributs
Les attributs d’un objet sont l’ensemble des informations se présentant sous
forme de variable et permettant de représenter l’état de l’objet.
1.2.5 Message
1.2.6 Méthodes
Une méthode est une fonction ou procédure liée à un objet qui est déclenchée à
la réception d’un message particulier : la méthode déclenchée correspond strictement au
message reçu. La liste des méthodes définies au sein d’un objet constitue l’interface de
l’objet pour l’utilisateur : ce sont les messages que l’objet peut comprendre si on les lui
envoie et dont la réception déclenche les méthodes correspondantes.
Page |7
1.2.7 Signature
Le constructeur est une méthode particulière de l’objet qui permet de faire des
choses au moment de la création d’un objet, c’est-à-dire au moment où nous utilisons le
mot-clé new. Il est en général utilisé pour initialiser des valeurs par défaut d’un objet. Il est
en fait une méthode spéciale qui a le même nom que la classe et qui ne possède pas de type
de retour. Elle est appelée lors de la création de l’objet, avec new.
Lorsque nous écrivons le code d’une classe, le mot-clé this représente l’objet
dans lequel nous nous trouvons. Il permet de clarifier éventuellement le code, mais Il est
généralement facultatif. Ainsi, pour accéder à une variable de la classe ou éventuellement
une méthode, nous pouvons les préfixer par « this. ».
La Programmation orientée objet se base sur les notions clés suivantes : Classe
et objets, Encapsulation, Abstraction, Héritage ainsi que Polymorphisme.
Une instance d’une classe est un objet particulier d’une classe qui peut activer les
méthodes de la classe et qui a des valeurs particulières de ses attributs.
On définit l’objet comme l’instance d’une classe. La classe représente pour l’objet ce
que représente le type pour la variable. Un objet est caractérisé par :
Son identité (OID) : valeur unique et invariante qui caractérise l’objet
Page |8
Son comportement : qui est défini à travers les méthodes applicables à cet
objet et qui caractérisent sa façon d’agir et de réagir dans son environnement.
Son état : qui constitue l’ensemble des valeurs des attributs de cet objet.
Une classe est un type abstrait qui encapsulent données et traitement. C’est une sorte de
boite noire qui permet ensuite de créer autant d’instances qu’on veut. Ces instances
seront des objets de la classe auxquelles on pourra effectivement envoyer des messages
qui activeront les méthodes correspondantes.
La classe Etudiant a été créée. Elle ne possède que les attributs NoteMath et
NoteInfo. On peut aussi ajouter d’autres attributs comme le nom, post-nom, …. Et Les
méthodes de cette classe sont par exemple MoyMath, MoyInfo, MoyTotale.
Nous avons créé deux objets étudiants (deux instances : Julien et Claudie) de la
classe Etudiant.
1.3.2 Encapsulation
L’encapsulation est le fait qu’un objet (entité) renferme ou réuni ses propres
attributs et ses méthodes. Les détails de l’implémentation d’un objet sont masqués aux
autres objets du système à objets. On dit qu’il y a encapsulation de données et du
comportement des objets.
Page |9
1.3.2 Abstraction
1.3.4 Héritage
La notion d’héritage est une relation entre différentes classes permettant de
définir une nouvelle classe en se basant sur les classes existantes. On parle d’héritage
simple lorsqu’une classe fille ne possède qu’une classe mère. La relation entre la classe
mère et fille est « Est un ».
On parle d’héritage multiple lorsqu’une classe fille possède plusieurs classes
filles.
Classe mère
Classe fille
P a g e | 10
a. Héritage simple
b. Héritage Multiple
1.3.5 Polymorphisme
Le terme polymorphisme issu du grec signifie la faculté de prendre plusieurs
formes. Une entité est polymorphe si à l’exécution elle peut se référer à des instances de
classe différentes.
Exemples :
Le polymorphisme est un mécanisme qui permet à une sous classe de redéfinir une
méthode dont elle a hérité tout en gardant la même signature de
P a g e | 11
CHAPITRE II
MODELISATION ORIENTEE OBJET AVEC UML
Un modèle est une représentation simplifiée d’une partie de la réalité avec un but
spécifique. Une simplification parce que le monde réel est trop complexe.
Il existe trois modèles pour décrire un système à partir de différents points de vue :
le modèle de classes, pour les objets du système et leurs relations, le modèle d’états, pour
retracer l’historique des objets, et le modèle d’interactions, pour les interactions entre
objets.
Le modèle de classes décrit la structure statique des objets d’un système et leurs
relations. Il définit le contexte du développement logiciel – l’univers du discours. Ce
modèle contient des diagrammes de classes. Un diagramme de classes est un graphe dont
les nœuds sont des classes et les arcs des relations entre ces classes.
Le modèle d’états décrit les états successifs d’un objet au cours du temps. Il
spécifie et implémente les aspects de contrôle du système au moyen de diagrammes
P a g e | 13
d’états. Un diagramme d’états est un graphe dont les sommets sont des états et les arcs des
transitions entre états déclenchés par des événements.
Le modèle d’interactions décrit la façon dont les objets d’un système coopèrent
pour obtenir un résultat. Il commence par les cas d’utilisation, qui sont ensuite détaillés
grâce à des diagrammes de séquence et des diagrammes d’activités. Un cas d’utilisation
est axé sur une fonctionnalité – autrement dit sur ce que le système apporte à ses
utilisateurs. Un diagramme de séquence représente les objets qui interagissent et
l’ordonnancement de leurs interactions. Un diagrammes d’activités détaille les étapes
importantes du traitement.
Nota : Le modèle de classes est le plus fondamental, parce qu’il est nécessaire de décrire
ce qui change ou se transforme avant de décrire quand et comment les changements ont eu
lieu.
Entre 1970 et 1990, de nombreux analystes ont mis au point des approches
orientées objets, si bien qu’en 1994 il existait plus de 50 méthodes objet. Toutefois seules 3
méthodes ont véritablement émergé :
A partir de 1994, Rumbaugh et Booch (rejoints en 1995 par Jacobson) ont uni leurs
efforts pour mettre au point le langage de description UML (Unified Modeling Language),
qui permet de définir un langage standard en incorporant les avantages des différentes
méthodes (ainsi que celles d’autres analystes).
UML dans sa version 2 propose treize diagrammes qui peuvent être utilisés
dans la description d’un système. Ces diagrammes sont regroupés dans deux grands
ensembles dont les diagrammes de structure ou diagrammes statiques et les diagrammes
de comportement ou diagrammes dynamiques.
Ces diagrammes, au nombre de six, ont vocation à représenter l’aspect statique d’un
système (classes, objets, composants …).
I. Modélisation de Classes
A. Diagramme de classes
• déplacer, sélectionner
– un type de retour
• Sélectionner () : Boolean
– des arguments (avec leurs types)
• Sélectionner (p: Point) : Boolean
– une portée classe
• (class scope): soulignée
La visibilité
Une relation est utilisée afin de montrer comment deux classes sont liées entre
elles en suite elle exprime une connexion sémantique bidirectionnelle entre classes et est
une abstraction des liens qui existent entre les objets, instances des classes associées
1. La multiplicité
La multiplicité spécifie le nombre d’instances d’une classe qui peuvent être liées à
une seule instance d’une classe associée. Différents symboles sont utilisés pour indiquer la
multiplicité à chaque extrémité d’une association.
Merise UML Signification
0,1 0..1 Zéro ou un
1,1 1 un et un seul
0,n 0..* ou * De zéro à plusieurs
1,n 1..* D’un à plusieurs
2. L’étiquetage
Une relation peut être étiquetée afin de rendre explicite la nature de cette relation
P a g e | 18
3. Type Association
4. Classes-association
Il arrive, quelques fois, qu’un attribut ne puisse être attaché à aucune des deux
classes d’une association. Mais il peut être attaché à l’association elle-même.
Une classe-association est une association qui est également une classe. Vous
trouverez les classes-associations en recherchant les adverbes dans l’énoncé d’un problème
ou en abstrayant des valeurs connues.
5. Association réfléchie
6. Association directionnelle
7. Généralisation
La généralisation est une relation hiérarchique entre une classe (la super – classe)
et une ou plusieurs variantes de cette classe (les sous-classes). Elle organise les classes en
fonction de leurs similarités et de leurs différences, structurant ainsi la description des
objets. La super – classe contient les opérations, les associations et les attributs communs,
les sous-classes ajoutent des opérations, des associations et attributs spécifiques. On dit que
chaque sous-classe hérite des propriétés de sa super – classe. On qualifie parfois la
généralisation de relation « est-un », parce que chaque instance d’une sous-classe est
également une instance de la super – classe.
Une super – classe se spécialise en sous-classes. Le discriminant (optionnel) est une
étiquette décrivant le critère suivant lequel se base la spécialisation
En fait, une instance ne peut jamais changer la classe à laquelle elle appartient
8. Agrégation et composition
a. Agrégation
Une agrégation est une forme d’association qui exprime un couplage plus fort entre
classes. Une agrégation peut être utilisée si la relation qu’elle représente est de type :
– maître et esclaves : "appartient-à"
– tout et parties : "est-une-partie-de"
– composé et composant (constitué-constituant) : "est-composé-de"
Lorsque quelque chose contrôle l’agrégat, il contrôle aussi ses parties.
P a g e | 22
Une agrégation est une forme spéciale d'une association représentant une relation
‘partie-tout’.
• Le ‘tout’ est souvent appelé l’ensemble ou l’agrégat
• Le symbole désignant l’agrégation se place du côté de l'agrégat
Par exemple, une Tondeuse A Gazon est constituée d’une Lame, d’un Moteur, de
plusieurs Roues et d’un Carter. Tondeuse A Gazon est l’assemblage et les autres sont les
constituants.
Les questions suivantes peuvent servir de test pour savoir si une association est une
agrégation ou pas :
Peut-on utiliser l’expression fait partie de ?
Les opérations appliquées a l’objet constitué s’appliquent elles
automatiquement à ses constituants ?
Les valeurs des attributs de l’objet constitué se propagent-elles à tous ses
constituants ou à certains d’entre eux ?
L’association présente-t-elle une asymétrie intrinsèque, dans laquelle une
classe est subordonnée à une autre ?
b. Composition
9. Classes abstraites
Une classe abstraite est une classe qui ne peut pas être instanciée en tant que telle
mais dont les sous-classes peuvent l’être. Une classe concrète est, quant à elle,
instanciable et peut donc avoir des instances directes.
B. Diagramme d’objets
- Événements de signal
- Événements de changement
La notation UML de ce type d’événement est le mot-clé when (quand) suivi d’une
expression booléenne entre parenthèses.
Exemples:
1. when (température de la pièce < température de déclenchement du
chauffage)
2. when (pression du pneu < pression minimale)
- Événements temporels
Un événement temporel est causé par l’occurrence d’un temps absolu ou par
l’écoulement d’une durée. La notation UML d’un temps absolu est le mot-clé when suivi
d’une expression temporelle entre parenthèses, tandis que celle d’un intervalle est le mot-
clé after (après) suivi d’une expression temporelle entre parenthèses.
Exemples:
1. when (date = 01/01/2009)
2. after (10 secondes)
États
Un état est une abstraction des valeurs et des liens d’un objet. Des ensembles
de valeurs et de liens sont groupés dans un état conformément au comportement global de
l’objet. Par exemple, l’état d’une banque est solvable ou insolvable, selon que ses actifs
excèdent ou non ses dettes.
Les états correspondent souvent à des participes présents (Attendant,
Numérotant) ou à la stabilité d’une condition (Allumé, InférieurAZéro).
Événements vs État
Les événements représentent des moments précis dans le temps et les états
représentent des intervalles de temps ;
Transitions et conditions
Une transition est le passage instantané d’un état à un autre. Par exemple,
lorsque vous prenez un appel, la ligne effectue une transition : elle passe de l’état Sonnant
à l’état Connecté. On dit que la transition est franchie lors du passage de l’état source à
l’état cible.
Une condition de franchissement est une expression booléenne qui doit être
vraie pour que la transition soit franchie. Par exemple, quand vous sortez le matin
(événement), si la température est inférieure à zéro (condition), mettez des gants (état
suivant).
Un diagramme d’états est un graphe orienté dont les nœuds sont des états et les
arcs des transitions entre les états. Il spécifie les successions d’états provoqués par des
successions d’événements.
Vous pouvez implémentez les diagrammes d’états en les interprétant
directement ou en convertissant leur sémantique en un code équivalent.
• État. Un état est représenté par une boite aux coins arrondis contenant
optionnellement un nom. UML dispose d’une notation spéciale pour les
états initiaux (un cercle plein) et les états finaux (un cercle contenant un
point ou un x).
• Transition. Une transition est représentée par une ligne allant de l’état
d’origine à l’état cible. Une flèche pointe vers l’état cible. La ligne est
composée d’un ou de plusieurs segments.
• Effet (voir point suivant). Les effets peuvent être attachés à une transition ou
à un état et sont listés après une barre oblique (/). Les effets multiples sont
séparés par des virgules et exécutés simultanément. (Vous pouvez créer
des états intermédiaires si vous voulez que plusieurs effets soient exécutés
séquentiellement).
P a g e | 29
L’utilité des diagrammes d’états serait limitée s’ils se bornaient à décrire des
événements. La description complète d’un objet doit spécifier ce qu’il fait en réponse aux
événements.
Effets et activités
Au lieu de représenter des activités sur des transitions, vous pouvez les lier à
l’entrée ou à la sortie d’un état.
P a g e | 30
La figure ci-dessous représente le même modèle avec des activités à l’entrée dans
les états.
Conseils pratiques
• Abstraire les valeurs dans les états. Ne considérez que les attributs pertinents pour
définir un état. Les diagrammes d’états n’utilisent pas nécessairement tous les
attributs représentés dans un modèle de classes.
Parfois, un objet doit exécuter deux (ou plusieurs) activités concurremment. Les
étapes internes de ces activités ne sont pas synchronisées, mais les deux activités doivent
être achevées avant que l’objet ne puisse passer dans l’état suivant. Par exemple, un
distributeur automatique remet des billets à un utilisateur et lui rend sa carte à la fin de la
transaction. Le distributeur ne doit pas se réinitialiser tant que l’utilisateur n’a pas pris sa
carte et ses billets, mais celui-ci peut les prendre dans un ordre quelconque, voir
simultanément. C’est un exemple de division du contrôle en activités concurrentes et de
synchronisation du contrôle
P a g e | 32
• Les cas d’utilisation décrivent comment un système interagit avec les acteurs
extérieurs
Cas d’utilisation
Un cas d’utilisation est une partie cohérente des fonctionnalités qu’un système
peut fournir en interagissant avec les acteurs.
Par exemple, un client peut acheter une boisson à un distributeur automatique.
Le client insère de la monnaie dans le distributeur, effectue une sélection et reçoit par la
suite une boisson.
Un cas d’utilisation comprend une séquence de messages échangés entre le
système et ses acteurs. Par exemple, dans le cas d’utilisation acheter une boisson, le client
commence par insérer une pièce et le distributeur affiche le montant inséré. Cette séquence
peut se répéter plusieurs fois. Puis, le client appuie sur un bouton pour sélectionner sa
boisson. Le distributeur délivre alors la boisson choisie et il rend la monnaie si cela s’avère
nécessaire.
• Acheter une boisson. Le distributeur délivre une boisson après que le client l’a
sélectionnée et payée.
• Effectuer une maintenance de routine. Un technicien de maintenance effectue sur
le distributeur l’entretien périodique nécessaire pour le maintenir en bon état de
fonctionnement.
• Effectuer une réparation. Un technicien de maintenance effectue sur le
distributeur le service ponctuel nécessaire pour réparer un dysfonctionnement.
• Recharger des articles. Un employé au stock ajoute dans le distributeur des articles
pour réapprovisionner son stock de boissons.
UML propose une notation graphique des cas d’utilisation. Un rectangle contient
les cas d’utilisation d’un système, les acteurs étant listés à l’extérieur. Un nom dans une
ellipse représente un cas d’utilisation. L’icône d’un « bonhomme en fil de fer » représente
un acteur, dont le nom peut être placé à côté ou en dessous de l’icône. Des lignes pleines
connectent les cas d’utilisation aux acteurs qui y participent.
Conseils pratiques
Voici quelques conseils pour bien construire les modèles de cas d’utilisation :
• Cas d’utilisation informels. Ne soyez pas obsédé par le formalisme lorsque vous
spécifiez des cas d’utilisation. Ne les considérez pas comme un outil de
modélisation formel mais plutôt comme un moyen d’identifier et d’organiser les
fonctionnalités du système d’un point de vue centré sur l’utilisateur. Il est
acceptable qu’ils soient tout d’abord un peu vagues : vous les préciserez plus tard
lorsque vous les détaillerez et implémenterez
• Cas d’utilisation structurés. Pour de nombreuses applications, vous élaborerez des
cas d’utilisation complètement distincts, mais si vous modélisez un grand système,
vous pouvez les construire à partir de fragments plus petits en employant des
relations
1. Relation include
2. Relation extend
La figure ci-dessous présente le cas de base négocier des actions d’un système de
courtage. Le mot-clé « extend » accompagne la flèche. Le cas d’utilisation de base permet
simplement d’acheter et de vendre des actions au prix du marché. Le système de courtage
ajoute trois possibilités : acheter une action sur marge, vendre une action à découvert et
imposer une limite au montant d’une transaction (ordre à cours limité). Le cas d’utilisation
négocier des options a également une extension qui impose une limite au montant de la
transaction.
3. Généralisation
saisie du code secret. Chaque cas d’utilisation enfant contient les étapes supplémentaires
spécifiques à un type de transaction donné, comme la saisie de la date d’inspiration d’une
option.
B. Diagramme de séquence
Un modèle de séquence précise les thèmes fonctionnels introduits par les cas
d’utilisation. Deux types de modèles de séquence existent : les scénarios et un format plus
structuré nommé diagramme de séquence.
Un diagramme de séquence représente les participants à une interaction et la
séquence des messages qu’ils échangent. Il montre comment un système et ses acteurs
interagissent afin d’exécuter tout ou partie d’un cas d’utilisation.
La description du comportement de chaque cas d’utilisation nécessite plusieurs
diagrammes de séquence. Chacun d’eux représente une séquence de comportements
particulière du cas d’utilisation. Mieux vaut représenter une portion spécifique d’un cas
d’utilisation et de ne pas essayer d’être trop général.
P a g e | 41
• Au moins un scénario par cas d’utilisation. Les étapes d’un scénario doivent être
des commandes logiques, non de simples clics sur un bouton. Plus tard, lors de
l’implémentation, vous pourrez spécifier la syntaxe exacte d’entrée. Commencez
par l’interaction principale la plus simple: pas de répétition, une activité principale
et des valeurs types pour tous les paramètres. Si des interactions principales
substantiellement différentes existent, écrivez un scénario pour chacune d’entre
elles.
C. Diagramme d’activités
P a g e | 42
Les étapes d’un diagramme d’activités sont des opérations, plus spécifiquement les
activités décrites dans le modèle d’états. L’objectif d’un diagramme d’activités est de
représenter les étapes d’un processus complexe et les contraintes de séquencement.
Un objet demeure actif après avoir envoyé un message et peut répondre à d’autres
messages sans attendre de réponse. Cette représentation est appropriée pour les modèles de
haut niveau. En revanche, la plupart des implémentations sont procédurales et limitent le
nombre d’objets qui peuvent effectuer des tâches simultanément.
La syntaxe UML des diagrammes de séquence dispose d’une notation dédiée qui
permet d’illustrer des appels de procédures
Dans un code procédural, tous les objets ne sont pas constamment actifs. La plupart
d’entre eux sont passifs et n’ont pas leur propre thread. Un objet passif n’est pas activé tant
que l’un de ses comportements n’a pas été déclenché. Une fois que l’exécution d’une
opération se termine et que le contrôle retourne à l’appelant, l’objet passif devient inactif.
UML représente une période de temps pour l’exécution d’une opération d’un objet
par un étroit rectangle. C’est ce que l’on nomme activation ou période d’activation. Une
activation représente la période pendant laquelle un appel de méthode est traité, y compris
le moment où la méthode appelée a invoqué une autre opération. La période pendant
laquelle un objet existe mais n’est pas actif est indiquée par une ligne pointillée. La période
P a g e | 44
entière durant laquelle l’objet existe est appelée ligne de vie, puisqu’elle montre la durée
de vie de l’objet.
• Objets actifs vs objets passifs. Différenciez les objets actifs des objets passifs. La
plupart des objets sont passifs et n’ont pas leur propre thread de contrôle. Par
définition, les objets actifs sont toujours activés et possèdent leur propre période
d’activation
P a g e | 45
Les tâches suivantes doivent être réalisées: implémenter les types de données;
implémenter les classes; implémenter le contrôle d’accès; implémenter les généralisations;
Implémenter les associations.
Si vous n’avez pas encore affecté les types de données aux attributs, il est temps de
le faire maintenant. Certains types de données méritent une attention particulière
Types primitifs
Les nombres à virgule flottante, les entiers, les caractères et les booléens peuvent
exprimer des valeurs simples. Lorsque c’est possible, employez des valeurs numériques
plutôt que des chaînes de caractères. Les types numériques permettent une meilleure
efficacité du point de vue de l’espace mémoire et du traitement et facilitent la maintenance
de l’intégrité des attributs.
Types objet
Vous pouvez utiliser des objets pour regrouper et organiser des valeurs d’attribut en
types plus riches.
Les structures de C++ ne sont pas techniquement différentes des classes, hormis le
fait que tous les membres sont publics par défaut.
struct adresse {
string rue;
string ville;
string departement;
adresse() : rue(’’ ’’), ville(’’ ’’), departement(’’ ’’) {}
};
class Client {
string nom;
adresse adr; //attribut objet
float montantTemp;
public:
//…
string ville() { return adr.ville; } // utilise la délégation
};
Vous pouvez appliquer une stratégie similaire en Java, bien que l’initialisation ou le
constructeur de l’objet hôte doive créer explicitement l’instance de l’attribut objet. L’accès
P a g e | 48
package par défaut permet l’accès aux membres qui sont des attributs objet à l’intérieur de
la classe utilisatrice.
class Adresse {
String rue=’’ ’’;
String ville=’’ ’’;
String departement= ’’ ’’»;
};
public class Client {
private String nom;
// notez la construction explicite de l’attribut
private Adresse adr = new Adresse(); // attribut objet
private float montantTemp;
//…
String ville() { return adr.ville; } // utilise la délégation
};
Types références
Vous pouvez employer des références d’objets en Java, et des références et des
pointeurs en C++ pour implémenter les associations.
3.6.2.1.2. Classes
package infoBanque;
public class Client {…}
3.6.2.1.3. Généralisation
class Compte {
private float solde;
public void Enregistrer(float montant) {..}
public float Solde() {return solde;}
}
class CompteEpargne extends Compte {
private float taux; // ajout de l’attribut taux d’intérêt
float CalculInterets() {
// calcul des intérêts dûs non payés
}
}
3.6.2.1.4. Association
P a g e | 50
Si nous n’avons pas besoin de retrouver la collection des employés d’une société,
un pointeur de Personne vers Société s’avérera suffisant. En Java, la classe Personne peut
simplement contenir un champ de type Société.
public class Societe {}
public class Personne {
private Societe employeur;
…
}
Les associations bidirectionnelles entraînent la maintenance des liens pour les deux
extrémités de l’association. Par exemple, si un client peut avoir plusieurs comptes et qu’on
veuille être en mesure de naviguer dans les deux directions de l’association.
Le paradigme OO est adaptable et s’applique aussi bien aux bases de données qu’à
la programmation. Cela peut vous surprendre, mais vous pouvez implémenter des modèles
UML non seulement avec les bases de données OO mais aussi avec des bases de données
relationnelles. Les bases de données résultantes sont performantes, cohérentes et
extensibles.
Normalement, vous devez faire correspondre chaque classe à une table et chaque
attribut à une colonne. Vous pouvez ajouter des colonnes pour un identifiant d’objet et
pour les associations.
Associations n-aires. Elles sont également rares. Vous pouvez les traitées comme
des associations de multiplicité plusieurs-à-plusieurs et créer une table pour
l’association. Généralement, la clé primaire d’une association n-aire combine les
clés primaires des tables associées.
P a g e | 53
P a g e | 54
Références
Michael Blaha & James Rumbaugh. Modélisation et conception orientées objet avec UML
2. Pearson Education, 2e édition, 2005.
Kris Jamsa, C/C++/C# La Bible du programmeur, Ed. Reynald Goulet inc., 2004.
Tom Mens. Génie Logiciel Orienté Objet. Université de Mons-Hainaut Service de Génie
Logiciel, 2006.