• Aucun résultat trouvé

Conception Orientée Objet

N/A
N/A
Protected

Academic year: 2022

Partager "Conception Orientée Objet"

Copied!
30
0
0

Texte intégral

(1)

Conception Orientée Objet

Les principes de base

Tianxiao LIU Master IISC 1ère Année CY Cergy Paris Université http://depinfo.u-cergy.fr/~tliu/coo.php

1

(2)

Sommaire

Introduction au module COO

Motivation, programme & organisation, MCC

UML diagramme de classes

Relations entre les classes

Comment construire un diagramme de classes

Les principes de base d’objet

OCP, LSP, DIP, ISP, CARP, LoD

2

(3)

Motivation du cours

Approche objet

Incontournable pour le développement des systèmes complexes

Moins intuitive que l'approche fonctionnelle

Besoins de conception

Rigueur pour la compréhension, la comparaison des solutions et la maintenance du système

Suivre les évolutions incessantes des technologies et des besoins applicatifs

3

(4)

Motivation du cours

Pour bien mener la conception

Besoin d'un outil de modélisation unifié

Un outil graphique au lieu de textuel

UML (Unified Modeling Language)

Offrir plusieurs modèles du même système

Chacun met en valeur des aspects différents : fonctionnels, statiques, dynamiques et

organisationnels

4

(5)

Programme et organisation

Approche objet et modélisation UML

Principes d’approche objet et design patterns

Diagramme de classes (class)

Diagramme de cas d’utilisation (user case)

Diagramme d'activités (activity)

Diagramme de séquence (sequence)

Diagramme d’états-transitions (statechart)

Outils modélisation UML

Sous Windows : Software Idea Modeler (SIM)

Sous Linux : Argo UML, Dia, etc.

5

(6)

Programme et organisation

Technologies Java SE / Java EE

Java multi-threading

JDBC (Java Database Connectivity)

Hibernate ORM framework + JPA Annotation

Spring Framework (IoC + AOP)

JSF (Java Server Faces) Web framework (MVC)

Outils technologies Java

Java 1.6 ou plus + les librairies frameworks

Eclipse pour Java EE

MySQL ou PostgreSQL

Tomcat : serveur Web

6

(7)

Partie examen (50%) – Janvier 2021

Tous documents autorisés (sauf livres et appareils électroniques)

Principes, patterns, modélisation UML

Partie CC (50%)

Petit contrôle écrit vers la fin du cours (1/3 CC)

Mécanismes des technologies pratiquées en TD

une feuille A4 recto-verso autorisé

Projet transversal – Janvier 2021 (2/3 CC)

Atelier Gestion de Projet (AGP) + COO + BDA

Evaluation de la conception et de la réalisation

7

MCC de l’UE COO

(8)

Diagramme de classes UML (cd)

Une vue interne du système à concevoir

◦ Une description purement statique

◦ Pas de d’indication qui montre comment une opération est réalisée

Un ensemble de classeurs

◦ Classe, classe abstraite, interface, paquetages, objets

◦ Les relations entre ces éléments

8

(9)

Notions de base

Objet, classe et instance

◦ Un objet représente une chose naturelle qui a des caractéristiques et des comportements

◦ Une classe est le regroupement des données et des traitements applicables aux objets

qu’elle représente

◦ Une instance peut être un objet d’une classe, et peut aussi être d’autres éléments du

langage UML, ex. un lien est une instance d’une association

9

(10)

Notions de base

Interface

◦ Une classe abstraite particulière

◦ Motivation

Classer les opérations en catégorie sans préciser la manière dont elles sont implémentées

Préciser surtout les conditions et les effets de l'invocations des opérations définies dedans

◦ Une interface n'a pas d'instances directes

peut être réalisée par différentes classes en Java

10

(11)

Notions de base

Composition d'une classe

◦ attribut

visibilité nom : type

◦ méthode (opération)

visibilité nom (paramètres) : type de retour

paramètre = nom : type

◦ classes ou méthodes abstraites

En italique

11

(12)

Relations entre classes

Héritage

◦ Une classe est la sous-classe (classe fille) d'une autre classe

◦ Pas de multi-héritage en Java

Réalisation

◦ Une classe implémente une interface

12

(13)

Relations entre classes

Association

Une relation structurelle entre les deux classes

Multiplicité (ou cardinalité) : nombre d'objets intervenant

1, 1..*, 1..5, …

Nom de l'association

un verbe en actif/passif

Rôles

Un nom

Navigabilité

Association unidirectionnelle

Association bidirectionnelle

13

(14)

Relations entre classes

Agrégation

une forme particulière de l'association

Relation d'inclusion structurelle ou comportementale

Composition

Une agrégation particulière

Classe composite et classe composant

La classe composite est responsable de la création, de la copie et de la destruction de ses composants

14

(15)

Relations entre classes

Dépendance

◦ Relation unidirectionnelle

◦ Classe cible et classe source

◦ Si modification de la cible, alors changement de la source

Stéréotypes : exemples typiques

use : le fonctionnement de la source a besoin de l’utilisation de la cible

call : appel d'une opération par une autre

create : une opération de la source crée une instance de la cible

15

(16)

Construction d’un cd

Processus de construction

16

Identifier les classes du

domaine

Définir les relations entre classes

Trouver les attributs des

classes

(17)

Construction d’un cd

Identifier les classes du domaine

◦ Idéalement, il faut consulter auprès d'un expert du domaine

◦ Faire une liste des classes candidates et éliminez celles redondantes et superflues

◦ Définir avec grand soin le niveau de granularité

◦ Evitez les implémentations trop détaillées

17

(18)

Construction d’un cd

Définir les relations entre classes

◦ Eviter les chemins redondants (surtout les cercles entre les classes)

◦ Pas de relations insensées

◦ Déterminer les multiplicités (cardinalités) dès que possible

◦ En général, pas de classes isolées

18

(19)

Construction d’un cd

Trouver les attributs des classes

◦ N'espérez pas trouver tous les attributs dès la construction du diagramme de classes

certains attributs seront ajoutés à l'implémentation

◦ Profitez bien de l'héritage, classes abstraites, interfaces, et polymorphisme pour simplifier le diagramme

◦ Pas besoin d'illustrer les getter/setter, constructor, toString

19

(20)

Bon système VS Mauvais système

Un bon système

Support de maintenabilité + réutilisabilité

Maintenabilitéréutilisabilité (niveaux différents)

Un mauvais système

Expression des besoins

Conception et réalisation

Livraison : on est content

Maintenance ? bugs découverts

Extension ? très difficile, très chère

Réutiliser le système

Abandon Recommencer le même cycle ?!!

20

(21)

Maintenabilité et réutilisabilité

Quels sont les problèmes ?

Rigidité

Difficile d'ajouter une nouvelle fonctionnalité

Fragilité

Modification d'une partie du code problème imprévisible dans un autre endroit

Immobilité

Impossible ou difficile de réutiliser des modules dans un autre système

Viscosité

Deux façons : garder ou modifier la conception originale

Si modification plus facile que garder viscosité

21

(22)

Maintenabilité et réutilisabilité

Quelles sont les qualités ?

Extensibilité

Ajout très facile d'une nouvelle fonctionnalité

Flexibilité

Modification d'une partie du code très peu ou sans effet sur les autres parties

Enfichable

On peut enlever/remplacer facilement une partie sans nuire au bon fonctionnement du système

22

(23)

Maintenabilité et réutilisabilité

Réutilisabilité du système

◦ Façons traditionnelles

Copier-coller du code source

Réutiliser les algorithmes

Réutiliser les structures de données

◦ Approche orientée objet

Niveau plus élevé grâce aux aspects objet:

abstraction, encapsulation, héritage, polymorphisme

On se concentre plus sur la partie métier (business)

Les design patterns

23

(24)

Maintenabilité et réutilisabilité

Extensibilité du système

◦ Utilisation correcte des interfaces et des classes abstraites

◦ Principes de conception pour extensibilité

Open-Closed Principle (OCP)

Liskov Substitution Principle (LSP)

Dependency Inversion Principle (DIP)

Interface Segregation Principle (ISP)

Composition/Aggregation Reuse Principle (CARP)

Law of Demeter (LoD)

24

(25)

Principe ouvert / fermé (OCP)

Principe

◦ Un système doit s'ouvrir à l'extension et se fermer à la modification

Réalisation

◦ Il faut toujours une très bonne abstraction

EVP : Principle of Encapsulation of Variation

Si un élément varie dans le système, encapsulez-le

Les variations doivent être encapsulées dans un objet au lieu d'être dispersées partout.

Ne pas mélanger deux types de variations

héritage ne dépasse généralement pas 2 niveaux

25

(26)

Principe de substitution de Liskov (LSP)

Définition

Si q(x) est une propriété démontrable pour tout objet x de type T, alors q(y) est vraie pour tout objet y de type S tel que S est un sous-type de T.

Principe

method (Base b) method (Derived b)

L'inverse n'est pas vrai.

Notion de base pour la réutilisation de l'héritage

Sous-type indétectable

26

(27)

Principe d'inversion de dépendance (DIP)

Motivation

◦ Problème de dépendance (top-down)

Solution

Utilisation d'une couche d'abstraction

Inverser la dépendance : concret ----> abstract

Trois types de couplages

◦ Couplage nul : pas de couplage

◦ Couplage concret : référence directe

Couplage abstrait : référence indirecte via classes abstraites ou interfaces

27

(28)

Principe de ségrégation des interfaces (ISP)

Principe

◦ Diviser une grande interface en plusieurs

petites interfaces : hiérarchiser les interfaces

◦ Exposer aux clients uniquement ce dont ils ont besoin : Customized Service

Contamination des interfaces

◦ Economiser le nombre d'interface ?  Très mauvaise idée

28

(29)

Principe de réutilisation des composites /agrégations (CARP)

Principe

◦ Utiliser un objet d'une classe existante dans une nouvelle classe  réutilisation

◦ Préférer composites/agrégation à héritage

◦ Différence entre "Has-A" et "Is-A"

◦ Composite ici n'est pas le pattern Composite

29

(30)

Loi de Déméter (LoD)

Motivation

Only talk to your immediate friends

Don't talk to strangers

Least Knowledge Principle (LKP)

LoD entre deux classes

Si ces deux classes n'ont pas besoin de se

communiquer directement, on utilisera une troisième classe entre les deux pour assurer la communication

LoD générale

Couplage faible entre les modules d'un système

Restreindre les accessibilités

30

Références

Documents relatifs

◦ Utilisation d'une classe abstraite qui définit une partie de réalisation concrète et une autre partie abstraite. ◦ Partie abstraite : implémentation dans

Tianxiao LIU Master IISC 1 ère Année CY Cergy Paris Université

◦ Le client peut retirer de l'argent, effectuer un virement et consulter son compte. ◦ Quand on effectue un virement, si le

 Déclarer une méthode pour chaque type de nœud à visiter  ajout d'un nouveau type de nœud = ajout d'une méthode. ◦

◦ Si l'événement de l'interruption se produit, toutes les activités en cours dans la région interruptible sont arrêtées  le flot de contrôle suit la flèche en zigzag

◦ Les messages asynchrones peuvent être reçus dans un ordre différent de l'ordre d'envoi..

◦ Evénement reçu  Transition déclenchée qui fera basculer l'objet dans un nouvel état. ◦ Etiquette

– privé ( private ) : les membres privés d’une classe ne sont accessibles que par les objets de cette classe et non par ceux d’une autre classe.. – protégé ( protected ) :