Objets - Réalisations

publicité
Analyse Orientée
Objet
Damien Porquet
[email protected]
Plan

Partie 1 : AOO
1 - Présentation
2 - Programmation fonctionnelle
3 - Programmation modulaire
4 - Les concepts de l'approche objet
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
2
Plan

Partie 2 : UML
1 - Présentation d'UML
2 - Les diagrammes de cas d'utilisation
3 - Les diagrammes de classes et d'objets
4 - Les diagrammes d'interaction
5 - Les diagrammes de comportement
6 - Les diagrammes physiques
7 - Mise en oeuvre d'UML
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
3
Partie I : AOO
I.1. Présentation de
l'approche objet
L'approche objet

Historique
Programmation : années 40
Fin 70 : crise du GL et apparition des méthodes
de développement OO (interfaces utilisateur)
Début de la POO : 1980 (version industrielle de
SmallTalk)
Exemple de langages OO : Turbo Pascal, C++,
D, C#, Java, ADA, Python, PHP, Objective
Caml, Eiffel,...
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
6
L'approche objet

Qu'est-ce que c'est ?



Un ensemble de concepts stables, éprouvés et
normalisés
Une solution destinée à faciliter l'évolution
d'applications complexes
Un ensemble d'outils et de langages
performants pour le développement
Les nouveaux langages sont toujours objet
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
7
L'approche objet

A quoi est due son apparition ?
Évolution des exigences : inadaptation de
l'informatique « traditionnelle »
données à traiter plus complexes
➔ problèmes plus complexes
➔ industrialisation de la production du logiciel
➔
Évolutions techniques : matériel & logiciel
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
8
I.2. Programmation
fonctionnelle
Programmation fonctionnelle

Définition
C'est l'approche traditionnelle de la
programmation : la modélisation du logiciel est
réalisée à partir des fonctions que doit
implémenter (réaliser) le système.
➔ cf. : module de langage C
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
10
Programmation fonctionnelle

La découpe fonctionnelle d'un problème informatique est une
approche intuitive.
Exemple : un logiciel de gestion d'une bibliothèque
main
maintenir_fonds_doc
lister_docs(critères)
modifier_docs(ref)
mettre_à_jour(ref)
ajouter(ref)
data
gérer_prêts
nouveau_prêt(ref)
retour_doc(ref)
lettre_de_rappel
supprimer(ref)
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
11
Programmation fonctionnelle

Maintenance complexe en cas d'évolution
En cas d'évolution majeure du logiciel (passage de la
gestion d'une bibliothèque à celle d'une médiathèque, par
exemple), de gros problèmes se posent.
Même si la structure générale du logiciel reste valide, la
multiplication des points de maintenance, engendrée par le
chaînage des fonctions, rend l'adaptation très laborieuse. Le
logiciel doit être retouché dans sa globalité.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
12
Programmation fonctionnelle

Évolution bibliothèque → médiathèque
main
affichage
selon le
type
maintenir_fonds_doc
lister_docs(critères)
data
modifier_docs(ref)
mettre_à_jour(ref)
ajouter(ref)
nouvelles données
à gérer
gérer_prêts
nouveau_prêt(ref)
supprimer(ref)
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
retour_doc(ref)
délai
selon le
type
lettre_de_rappel
dans quasiment
toutes les fcts, il faut
gérer les nouveaux types
13
Programmation fonctionnelle

Évolution bibliothèque → médiathèque
L'évolution nécessite (entre autres) :

de faire évoluer les structures de données qui sont
manipulées par les fonctions

d'adapter les traitements qui ne manipulaient à l'origine
qu'un seul type de document (des livres)
Il faudra donc modifier toutes les portions de code qui
utilisent la base documentaire pour gérer les données et
les actions propres aux différents types de documents.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
14
Programmation fonctionnelle

Exemple : les lettres de rappel
Si on désire que le délai avant rappel varie selon le type de
document emprunté, il faudra modifier la fonction qui réalise
l'édition des lettres de rappel.
struct Document
{
char
nom[50];
doc_t
type;
bool
est_emprunte;
char
emprunteur[50];
date_t date_emprunt;
} Docs[MAX_DOCS];
void lettres_de_rappel( ... )
{ ...
for(i=0; i<nb_docs; i++)
{
if( Docs[i].est_emprunte )
{
switch( Docs[i].type )
{
case LIVRE:
delai = 20; break;
case K7VIDEO: delai = 7; break;
case CDROM:
delai = 5; break;
...
}
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
15
Programmation fonctionnelle
En fait, c'est la quasi-totalité de l'application qui devra être adaptée pour gérer les
nouvelles données et réaliser les traitements correspondants. Et cela, à chaque
fois qu'on décidera de gérer un nouveau type de document.
Première amélioration possible : rassembler les valeurs qui caractérisent un type,
dans le type.
struct Document
{
char
nom[50];
doc_t
type;
bool
est_emprunte;
char
emprunteur[50];
date_t date_emprunt;
int
delai_emprunt;
} Docs[MAX_DOCS];
void lettres_de_rappel( ... )
{ ...
for(i=0; i<nb_docs; i++)
{
if( Docs[i].est_emprunte )
{
if( date() >= ( Docs[i].date_emprunt
+ Docs[i].delai_emprunt ) )
imprimer_rappel( Docs[i] );
...
}
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
16
Programmation fonctionnelle
Deuxième amélioration possible : rassembler les traitements associés à un type,
auprès du type.
Avantage : cela permet de retrouver immédiatement où faire la modification et ne
la faire qu'à cet endroit précis. Par exemple, dans notre exemple, dans un
fichier spécialement dédié au type Document et ses fonctions dédiées.
struct Document
{
...
} Docs[MAX_DOCS];
...
int calculer_delai_rappel( doc_t type )
{
switch( type )
{
case LIVRE:
return 20;
case K7VIDEO: return 7;
case CDROM:
return 5;
/* nouveaux type ajoutés ici */
}
}
...
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
17
Programmation fonctionnelle
Écrit en ces termes, le logiciel est plus facile à maintenir et bien
plus lisible.
Les modifications apportées au logiciel de gestion de
médiathèque nous ont amené à transformer ce qui était à
l'origine une structure de données, manipulée par des
fonctions, en une entité autonome, qui regroupe un
ensemble de propriétés cohérentes et leur traitements
associés.
Une telle entité s'appelle un objet et constitue le concept
fondateur de l'approche du même nom.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
18
Programmation fonctionnelle

Récapitulatif
Approche fonctionnelle :
La modélisation est réalisée à partir de fonctions que doit
réaliser le système.
Approche orientée objet :
On identifie les objets manipulés par le système, avec
leurs états et leurs comportements.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
19
I.3. L'objet et le génie
logiciel
Objet et génie logiciel

Qualités d'un logiciel

Facteurs externes : du point de vue de
l'utilisateur
ex: rapidité d'exécution, facilité de mise en oeuvre, ...

Facteurs internes : du point de vue du
programmeur
ex : réutilisation, lisibilité du code source, ...
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
21
Objet et génie logiciel

Facteurs internes de qualité









Exactitude
Robustesse
Extensibilité
Réutilisation
Compatibilité
Portabilité
Mise en oeuvre
Apprentissage
...
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Modularité
22
Objet et génie logiciel

Modularité
Doit satisfaire les principes de :




Décomposition
Réutilisabilité
Indépendance
Compréhensibilité
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Caractérisent un objet
23
Objet et génie logiciel

Cycle de développement d'un logiciel
Analyse
Conception
Implémentation
Tests
n fois
Grâce à la programmation orientée objet, on
ajoute des propriétés aux classes déjà
introduites, ou on ajoute de nouvelles classes,
sans avoir à modifier l'existant.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
24
I.4. Les concepts de
l'approche objet
Concepts de l'approche objet

La programmation orientée objet repose sur trois
concepts de base :
1
2
3
La classe
L'objet
L'héritage
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
26
Concepts de l'approche objet

Objets et classes

Le terme orienté objet signifie l'organisation du logiciel en un
ensemble d'objets incorporant à la fois les structures de données et le
comportement. La programmation conventionnelle n'établit qu'une
faible connexion entre structure de données et comportement.

C'est la classe qui sert à regrouper sous un même terme générique
les objets partageant la même structure de données et le même
comportement.

Un objet est une instance de classe.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
27
Concepts de l'approche objet

Objets et classes
Objets : Alice, Pierre, Paul; université d’Orléans, université Paris 7,
université Lyon 1.
Classe : regroupement d ’objets de même type, dans notre cas :
Personne
Université
L’objet est une instance de sa classe.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
28
Concepts de l'approche objet

Attributs
Objet
Classe
Pierre : Personne
Personne
25 ans
Age : int
Pierre Durand
Nom : string
40 rue ZOLA
Adresse :string
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
29
Concepts de l'approche objet

Méthodes
Personne
Age : int
Nom, Adresse : string
renvoie Nom
SePrésenter()
Vieillir()
ChangerNom(…)
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Age = Age+1
30
Concepts de l'approche objet

Classes
La classe est séparée en deux parties :
1. La spécification de la classe qui décrit le domaine de définition et
les propriétés des instances de classes
2. La réalisation de la classe qui décrit comment la spécification est
réalisée
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
31
Concepts de l'approche objet

Que sont les objets ?
Les objets du monde réel nous entourent ; ils naissent, vivent et
meurent. En orienté objet, ils sont alloués, changent d'état et se
comportent en conséquence, et sont désalloués. Ce sont des
instances des classes.
Les objets informatiques définissent une représentation simplifiée des
entités du monde réel. Ils peuvent représenter des entités concrètes
ou des entités abstraites (concepts).
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
32
Concepts de l'approche objet

Les objets sont des abstractions
Une abstraction est un résumé, un condensé qui met en avant les
caractéristiques essentielles et qui dissimulent les détails.
Les caractéristiques essentielles d'un objet sont celles qui sont
précisées lors de la spécification de la classe dont il est une instance.
Les détails, qui sont les détails d'implémentation, sont précisés au
moment de la définition des opérations de la classe.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
33
Concepts de l'approche objet

Des caractéristiques aux attributs et
méthodes 1/2
Approche fonctionnelle

Créer une structure qui représente un nombre complexe

Créer une fonction qui retourne un complexe à partir de sa partie
imaginaire et de sa partie réelle passées en arguments

Créer une fonction qui additionne deux nombres complexes

...
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
34
Concepts de l'approche objet

Des caractéristiques aux attributs et
méthodes 2/2
Approche objet

Créer une classe CComplexe qui contient :
 Ses attributs : partie réelle et imaginaire
 Ses méthodes :
 création à partir de sa partie réelle et de sa partie
imaginaire
 s'additionner à un autre nombre complexe
 ...
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
35
Concepts de l'approche objet

Caractéristiques fondamentales des objets
L'identité
L'état
Le comportement
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
36
Concepts de l'approche objet

L'identité

Chaque objet a sa propre identité ; deux objets sont distincts même si
toutes les valeurs de leurs attributs sont identiques. Cela se
comprend aisément puisque la place mémoire occupée par chaque
objet est distrincte.

Pour reconnaître un objet et lever toute ambiguïté, on utilise, en
général, un identifiant particulier : n° de SS, plaque d'immatriculation,
clé dans une base de données, ...
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
37
Concepts de l'approche objet

L'état et le comportement

Les attributs d'un objet peuvent contenir différentes valeurs. Ce sont
les différents états que peut prendre l'objet.

Le comportement regroupe toutes les compétences d'un objet, sous
la forme d'opérations. C'est l'ensemble des actions et des réactions
de l'objet.
Avion
Atterrir

L'état et le comportement sont liés :

le comportement dépend de l'état

l'état est modifié par le comportement
en vol
Décoller
Avion
Tour de contrôle
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
au sol
38
Concepts de l'approche objet

Communication entre objets

Une application, en orienté objet, est une société d'objets
collaborants.

Comment, dans ces conditions, sont réalisées les fonctions de
l'application ? Ce sont les objets, qui travaillent en synergie, pour
parvenir à les réaliser.

Donc, l'achèvement d'une tâche par une application repose sur la
communication entre les objets qui la composent. L'unité de
communication entre les objets est le message.

Plus spécialisé et plus coopératif que l'objet, l'agent (implémentation
partielle des agents possible en Java). L'agent est plus adapté que
l'objet pour représenter des êtres intelligents.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
39
Concepts de l'approche objet

Communication entre objets
Message B
Message A
Objet 1
Objet 2
Message C
Message E
Objet 4
Objet 3
Message D
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
40
Concepts de l'approche objet

Les messages
Il existe cinq catégories principales de messages :
1 les constructeurs qui créent des objets
2 les destructeurs qui détruisent des objets (pas en Java)
3 les sélecteurs qui renvoient tout ou partie de l'état d'un objet
4 les modificateurs qui changent tout ou partie de l'état d'un objet
5 les itérateurs qui visitent l'état d'un objet ou le contenu d'une
structure de données qui contient plusieurs objets
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
41
Concepts de l'approche objet

La programmation Orientée Objet
On dit d'un langage de programmation qu'il est un langage orienté objet
quand il supporte les mécanismes :

d'héritage

de polymorphisme

d'encapsulation
Ex: Smalltalk, Eiffel, C++, D, Java, Delphi...
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
42
Concepts de l'approche objet

L'héritage
Les hiérarchies de classes (classification) permettent de gérer la
complexité en ordonnant les objets au sein d’arborescence de
classes d’abstraction croissante. Les classes descendantes héritent
des propriétés des classes ancêtres (exemple : vertébrés,
mammifères, hominidés, hommes).
Généraliser
Spécialiser
Une classe descendante (une sous-classe) peut être également vue comme
un sous-type du type défini par la classe ancêtre (la sur-classe)
Ex. : ensembles et sous-ensembles mathématiques.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
43
Concepts de l'approche objet

Exemple d'héritage
Véhicule
Véhicule
aérien
Véhicule
roulant
Voiture
Camion
Avion
Bateau
Hélicoptère
Goélette
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
A voile
Catamaran
44
Concepts de l'approche objet


Héritage et redéfinition
Une sous-classe peut spécialiser les fonctionnalités de sa superclasse en définissant de nouveaux attributs et/ou de nouvelles
méthodes dont elle hérite de deux manières :



en remplaçant complètement la méthode héritée par une nouvelle
implémentation
en spécialisant la méthode héritée en proposant une nouvelle
implémentation qui réutilise celle héritée
Exemple : calculer la surface d’un polygone, d’un quadrilatère, d’un
triangle, d’un carré, d’un rectangle, d’un triangle isocèle, d’un triangle
rectangle, ...
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
45
Concepts de l'approche objet

Redéfinition : réutilisation
Etudiant
Nom
Prenom
Age
Affiche()
EtudiantSportif
SportPratiqué
Affiche()
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
46
Concepts de l'approche objet

Polygone
Redéfinition :
substitution
Surface()
Quadrilatere
Triangle
Surface()
Surface()
Rectangle
Carre
TriangleRectgle
Surface()
Surface()
Surface()
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
TriangleIsocele
Surface()
47
Concepts de l'approche objet



Polymorphisme
Le polymorphisme signifie qu'une même opération peut se traduire
différemment selon l'objet sur laquelle elle s'applique : C'est la
capacité d’un objet à prendre plusieurs formes.
On parle également de liaison dynamique. Le polymorphisme
associé à la liaison dynamique offre une plus grande simplicité du
code (plus besoin de distinguer les cas en fonction des classes) et
une plus grande facilité d’évolution du code (les programmes sont
plus facilement extensibles comme on peut redéfinir une opération
appartenant à une classe dont on hérite, appartenant à une surclasse).
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
48
Concepts de l'approche objet

Polymorphisme
Polygone
Surface()
Quadrilatere
Triangle
Surface()
Surface()
Rectangle
Carre
TriangleRectgle
Surface()
Surface()
Surface()
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
TriangleIsocele
Surface()
49
Concepts de l'approche objet

Polymorphisme

Pour exploiter pleinement le polymorphisme, il est courant de définir
des classes dont le seul rôle est de spécifier une interface (un
ensemble de méthodes) commune pour toutes les classes qui en
seront dérivées.

Dans de telles classes, les méthodes qui servent à définir cette
interface commune sont le plus souvent muettes (elles ne contiennent
pas de code effectif).
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
50
Concepts de l'approche objet

Polymorphisme : classe abstraite
ObjetGeom
Surface()
Polygone
Surface()
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
51
Concepts de l'approche objet



L'encapsulation 1/2
Il existe trois niveaux de visibilité :

privé

protégé

public
Cela permet de limiter les effets de bord.
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
52
Concepts de l'approche objet

Encapsulation 2/2

Regroupement des attributs et des
méthodes


Modularité :
1 protège les données d ’une utilisation
erronée
2 cache les détails des méthodes
Evolutivité, fiabilité
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Personne
Age : int
Nom, Adresse : string
SePrésenter()
Vieillir()
ChangerNom(…)
53
Concepts de l'approche objet


Quelques autres spécificités de la POO
La surcharge (prototype de fonctions : plusieurs méthodes portant le
même nom à l’intérieur d’une classe)

Les pré-conditions, les post-conditions, les invariants

La généricité (« template » en C++)

Le traitement des situations exceptionnelles (« throw », « try » et
« catch » : lever et attraper une exception)
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
54
Téléchargement