Please enable JavaScript.
Coggle requires JavaScript to display documents.
Méthodologie développement (ex: Processus Unifié) Exam Final (Diagrammes…
Méthodologie développement
(ex: Processus Unifié)
Exam Final
Les grands principes (GRASP)
Recettes
Créateur
Problème
Qui devrait créer les instances de la classe A?
Solution
La classe qui…
•Contient ou agrège les A
•Enregistre les A
•Utilise étroitement les A
•Possède les données pour initialiser des objets A
Expert en information
Problème
À quel classe affecter une certaine responsabilité (méthode) ?
Solution
À la classe qui possède les informations nécessaires pour s’en acquitter
Contrôleur
Problème
Quel est le premier objet au-delà de la couche présentation qui reçoit les «messages» de l’utilisateur et contrôle l’accès aux objets de la couche du domaine?
Solution
Généralement: un objet qui représente le «système global» ou un «objet racine»
:star: Le contrôleur délègue les tâches aux autres objets. Il ne fait normalement pas faire grand-chose par lui-même
:star: Larman: il est acceptable de «lire» directement les informations de la couche application pour rafraichir l’affichage
:star: Le contrôleur peut retourner un objet permettant la lecture seule
Polymorphisme
Problème
Comment gérer des alternatives dépendantes du type de la classe ?
Comment gérer des composants logiciels «enfichables» (plugins) ?
Solution
Quand des fonctions ou des comportements connexes varient en fonction du type de classe, utiliser des classes / méthodes polymorphes
On évite d'utiliser
if thenelseif thenelseif thenelse
switch case casecase
Fabrication pure
Problème
Si les solutions recommandées par les grands principes semblent toujours mener à des designs avec trop de couplage et/ou manque de cohésion?
Solution
Affecter un ensemble de responsabilités fortement cohésif à une classe de commodité «artificielle» qui ne représente pas un concept du domaine
C’est une pure fabrication de l’imagination, afin de permettre un design pur
Exemples
Dans notre projet: Sous-système d’affichage avec JPanel
sauvegarder des objets dans une base de données
Indirection
Problème
Où affecter les responsabilités pour éviter le couplage entre deux entités (ou plus) ?
Comment découpler les objets pour maintenir le potentiel de réutilisation?
Solution
Affecter la responsabilité à un objet qui sert d’intermédiaire entre d’autres composants ou systèmes externes pour éviter de les coupler directement
L’intermédiaire crée une indirection entre les composants
Caractéristiques recherchées
Modularité
Faible couplage
Problème
Comment réduire l’impact des modifications futures?
Solution
Affecter les responsabilités aux classes de manière à éviter tout couplage inutile entre les classes
Forte cohésion
Problème
Comment s’assurer que les objets restent compréhensibles et faciles à gérer, et qu’ils contribuent au faible couplage?
Solution
Affecter les responsabilités de manière à ce que la cohésion demeure élevée
:warning: Va parfois à l’encontre d’autres principes
:star: La modularité est la propriété d’un système qui est décomposé en un ensemble de modules cohésifs et faiblement couplés
Protection contre les variations
Problème
Comment concevoir des objets, des sous-systèmes ou des systèmes de telle façon que les variations ou l’instabilité de ces éléments n’aient pas d’impact indésirable sur d’autres éléments?
Solution
Prévoir les éléments qui risquent fort de changer
Les encapsuler par une interface stable (cacher le design interne d’éléments qui risquent de changer grâce à une interface stable)
Application directe
Principe du contrôleur
Diagrammes d'activités
Sert à représenter le comportement dynamique du système (et son effet sur l’environnement)
Montre en même temps les flots de contrôle et les flots de données
Utilisés pour modéliser des éléments
De très haut niveau
Modélisation des processus d'affaire
De très bas niveau
Algorithmes
Décrire un scénario d'un cas d'utilisation
Détailler une étape d'un cas d'utilisation
Met en évidence les actions d’un système/objet
Représente une exécution d’un processus quelconque ou encore un déroulement d’étapes séquentielles
Utile durant ses disciplines
Très utile
Dans le modèle du domaine
Pratique
Dans le modèle de conception
Parfois pratique
Dans le modèle de cas d'utilisation
:gear: Composantes
Actions
Modélise une étape dans l’exécution d’un algorithme ou d’un flot de travail(workflow)
Transitions
Les actions sont reliées par des transitions représentées par des flèches
Conditions de garde
Les transitions peuvent prendre des conditions de garde booléennes
Branchement
Une alternative peut être exprimée en utilisant un branchement
Une transition avec une garde «Sinon» est effectuée si aucune autre garde des transitions en aval du point de jonction n’est évaluée à vrai
Synchronisation
Une barre de synchronisation permet d’ouvrir et de fermer des branches parallèles dans un flot d’exécution d’une méthode ou d’un use-case
Les transitions qui quittent une barre de synchronisation sont déclenchées simultanément
Travées / swimlanes/ sections
Les diagrammes d’activités peuvent être découpés en plusieurs travées (sections, ouswimlanes) pour montrer les responsabilités au sein d’un mécanisme ou d’une organisation
Patrons de conception (GoF)
Exemples de constructions/assemblages d’objets classiques que l’on retrouve fréquemment dans les design d’analystes expérimentés (constitue un répertoire d’idées)
Singleton
Problème
Une et une seule instance d’une classe est autorisée (un singleton). Les classes utilisatrices ont besoin d’un point d’accès global et unique à cette instance
Solution
Définir une méthode statique de la classe qui retourne le singleton
Lors du premier appel à cette méthode statique, l’instance de la classe est créée, stockée dans un attribut statique, et retournée à l’appelant
Lors des appels subséquents à cette méthode, on retourne toujours le même objet stocké dans l’attribut statique
Ainsi, tous les utilisateurs de la classe travailleront avec la même instance
Strategy
Problème
Différentes versions d’un algorithme (ou d’une politique, ou d’une stratégie) sont appelés à coexister
Solution
Définir les versions de l’algorithme comme des classes distinctes (possédant une interface commune), plutôt qu’en tant que méthode…
Factory(Version simplifiée de AbstractFactory(Gof))
Problème
Quand j’ai besoin d’un objet, plutôt que de le créer moi-même en faisant un «objet = new ClasseQueJeVeux()»
Solution
On délègue la responsabilité à une usine à objets. Ce patron offre une interface permettant de créer des objets sans avoir à connaître/spécifier leur classe concrète
Composite
Problème
Comment traiter un groupe d’objet (une composition) de la même manière (polymorphique) qu’un des objets individuel?
Solution
S’assurer que le «conteneur» implémente la même interface que le «contenu»
Adapter (GoF)
Problème
Utilisation souhaitée de plusieurs composants alternatifs qui présentent des «interfaces» différentes
Solution
Mettre un objet intermédiaire entre les deux (l’adaptateur) qui nous sert d’interprète
Observer
Problème
Différents objets (observateurs) désirent être informés lorsqu’une information change (ou lorsqu’un événement survient). On veut cependant éviter que l’objet ayant détecté le changement (diffuseur) appelle explicitement tous les observateurs (on veut éviter qu’il connaisse leurs classes)
Solution
Définir une «interface» appelée Observateur. Tous les objets désirant être mis au courant des changements implémentent cette interface. Le diffuseur maintient une liste d’observateurs qu’il informe le moment venu.
Facade
Problème
On désire définir un point de contact unique pour plusieurs objets disparates constituant en quelque sorte un sous-système
Solution
Définir une «façade» qui encapsule ce sous-système. Il présentera une interface unifiée de plus haut niveau rendant le sous-système plus facile à utiliser
Grands principes de conception orientée objet (GRASP)
Larman les appelle les GRASP (General Responsibility Assignment Software Patterns)… mais ce ne sont pas vraiment des «patrons» (au sens classique du terme) à part «Contrôleur»
Les types de modèles
Logique
Architecture logique
:star: l’organisation à grande échelle des classes logicielles en packages, sous-systèmes et couches
Algorithmes
Classes
Objets
Mécanismes
Messages
Physique
Matériel
Les périphériquesde support
les imprimantes, routeurs, lecteurs de disquettes/CD, etc. Ils sont généralement connectés à un processeur qui les contrôle. Il y a souvent peu de différence entre un processeur et un périphérique
Les connexions
ce sont les liens physiques entre les processeurs (câbles-fibre optique et/ou protocoles p.e. TCP/IP)
Les processeurs / noeuds de calcul
ce sont les ordinateurs qui exécutent les programmes du système
Composants logiciels
les implantations physiquesdes conceptset fonctionnalitésdéfinis dans le modèle logiquedu système
Architecture physique
s’intéresse à la description détaillée de celui-ci sur les plans du matériel et des composants logiciels
Diagrammes UML utilisés pour décrire l’architecture physique
Diagramme des composants /component diagram
définit les composantes logicielles et les relations entre elles
Diagramme de déploiement / diagramme de répartition / deploymentdiagram
décrit l’architecture physique du système en couvrant les matériel et les composantes logicielles qui y sont associés