FAQ UMLConsultez toutes les FAQ
Nombre d'auteurs : 16, nombre de questions : 64, dernière mise à jour : 13 avril 2013 Ajouter une question
La FAQ UML, toutes les réponses à vos questions.
- Qu'est-ce qu'une métaclasse ?
- Qu'est-ce qu'une classe candidate ?
- Qu'est-ce qu'une agrégation ?
- Qu'est-ce qu'un agrégation par valeur ou composition ?
- Comment implémenter une agrégation ?
- Qu'est-ce qu'une classe utilitaire ?
- Comment représenter un template ?
- Comment modéliser un "implements" JAVA ?
- Comment choisir entre une association et une agrégation ?
- Qu'est-ce qu'un attribut dérivé ?
- Peut-on générer automatiquement le diagramme de classe depuis les diagrammes de séquence ?
- Comment modélisez vous en UML vos interfaces graphiques ?
Les meta-informations sont, en général, des informations expliquant l'oganisation des informations. Par exemple, les meta-infomations d'une table dans une base de données sont les informations concernant cette table : nom de la table, noms des champs, types des champs, ... Contrairement aux données qui viendraient remplir cette table.
C'est le même principe pour les meta-informations d'une classe : les attributs et leur type, le nom de la classe, les méthodes et leur signature etc. En JAVA, ces méta informations sont accessibles via le package java.lang.reflect.
La méta-classe est donc une classe qui exprime une information sur l'organisation globale des classes implémentées et instanciées. En particulier, on peut citer la class "Class" en JAVA mais aussi la class "Package" .
La rédaction d'une liste de classes candidates intervient en phase d'analyse preliminaire (ou même avant). Le but est de "dégrossir" un peu le domaine fonctionnel et d'en faire ressortir les principales notions. Notions qui pourront, éventuellement, par la suite (analyse et conception) se concrétiser sous forme de classes. Dans la pratique, les classes candidates sont obtenues à partir des textes fournis par le client (cahier des charges, documents techniques, etc...), des connaissances générales du domaine, des entretiens avec le client, etc. Le but est de répertorier, dans une liste, un maximum de notions. Cette liste sera ensuite "affinée".
Par exemple, pour un système informatique de gestion d'une bibliothèque, la liste des classes candidates pourrait être (ceci n'est qu'un exemple, en réalité cette liste serait beaucoup plus grande) :
- livre
- inscription
- prêt
- ouvrage
- roman
- journal
- retard
- abonné
Ces termes ne donneront sûrement pas tous lieu à des classes. Par exemple, on s'apercevra peut-être, dans la suite de l'analyse, * que les notions d'ouvrage et de livre sont redondantes et donc ne donneront lieu qu'à une classe. Mais, comme on l'a dit au debut, le but des classes candidates est de dégrossir le domaine : mieux vaut être le plus exhaustif possible.
Une agrégation est une relation particuliere entre un objet et plusieurs objets le composant.
Une agrégation est représentée par un losange vide positionné du côté du composé (la classe représentant le tout). Une agrégation est parfois appelée agrégation de référence par opposition à agrégation par valeur (appelée également composition).
Exemple : Un ordinateur est composé d'un mircro-processeur, d'un disque-dur, d'un CD-ROM,...
L'ordinateur est appelé le "composé" et les autres éléments les "composants".
Une composition (losange noir) est une agrégation (losange vide) contrainte. La contrainte supplémentaire par rapport à une agrégation classique est relative à la durée de vie des objets. La composition implique que les composants ont une existance dépendante du composé.
Une composition est aussi appelée agrégation par valeur.
Exemple :Une fenêtre Windows est composée de menus, d'ascenseurs, de boutons... Si la fenêtre est détruite alors tous les composants (menus, ascenseurs, boutons...) sont détruits également.
Une agrégation va en général s'implémenter sous forme d'attribut.
Pour deux classes A et B, A-------B avec une agrégation du coté de A et une multiplicité 1 du coté de B. Exemple en JAVA :
Code Java : | Sélectionner tout |
1 2 3 4 | class A { private B objB; ... } |
Code Java : | Sélectionner tout |
1 2 3 4 5 6 | public class A { private att1; private class B { string att_de_B_1; } } |
Une classe utilitaire comme son nom l'indique ne répond pas directement à un besoin fonctionnel mais plutôt propose des services techniques du style sérialisation XML ou écriture dans un journal d'événements.
Pour modéliser un template, on utilise une classe qui va porter comme distinctif un petit rectangle en pointillés superposé sur la classe, en haut à droite. Ce petit rectangle en pointillés contient une liste de paramètres (formels) et les types correspondants. Cette liste ne doit pas être vide normalement. Le nom, les attributs et opérations de cette classe "paramétrée" apparaissent comme pour n'importe quelle classe. Les opérations peuvent faire appel aux paramètres definis dans le rectangle.
Syntaxe des paramètres : [nom] : [type] .
Ensuite, pour les classes qui utilisent ce template, il faudrait utiliser un lien particulier : le bind. C'est une flèche creuse pointillée normalement. Elle relie les deux classes, la flèche dirigée vers le template. L'instanciation de template (binding) : relation entre un template (fournisseur) et élément (client) généré à partir du template, qui instancie le template en substituant aux paramètres du template les siens.
Un "implements" JAVA est représenté par une relation d'héritage mais avec une flèche en pointillés.
Il est parfois difficile de choisir entre association classique et agrégation. Pour cela, il faut s'interroger sur le cycle de vie des objets concernés. Voici quelques questions qui vous permettront peut-être de trouver une réponse :
- Les objets concernés sont-ils indépendants les uns des autres ? C'est à dire, la mort de l'un entraine-t-il la mort d'autres ? Si NON alors ASSOCIATION.
- Y a-t-il des méthodes d'une classe qui s'appliqueraient aux autres ? Si oui, cette classe est le composé et sera reliée aux autres par une AGREGATION
- Demandez-vous si cela paraît naturel de dire mon objet TITI est une partie de mon autre objet TOTO ? Si oui, TOTO est composé de TITI (composant), et nous avons là une AGREGATION.
Un attribut dérivé est un attribut intéressant pour l'analyste, mais redondant car sa valeur peut être déduite d'autres informations disponibles pour la classe concernée.
Exemple : une classe 'Personne' contient un attribut 'date_de_naissance' et un attribut 'age'. Ce dernier étant redondant, on écrira '/age'. A priori, en conception cet attribut deviendra une méthode.
Il n'existe donc pas de moyen automatique de passer de l'un à l'autre. On peut évidemment réussir à déduire, extrapoler, une partie de l'un grace à l'autre mais c'est limité et partiel.
Toutefois, les méthodes appliquées à UML proposent quasi systématiquement de créer le diagramme de classe à partir des classes découvertes dans lors de la réalisation des diagrammes de séquence. Le diagramme de classe sera par la suite enrichi pour contenir toutes les classes nécessaires à la réalisation du système/logiciel voulu.
- Le diagramme de séquences présente une vue dynamique de ton système
- Le diagramme de classe présente une vue statique de ton système
On peut regarder du côté des classes boundary, control et entity. Par exemple, pour une fenêtre sur un diagramme de séquence on utilise des boundary, ensuite pour les diagrammes de classe on peut utiliser la stéréotype boundary . Grossièrement, on peut dire que :
- boundary : représente des fenêtres
- entity : instance d'une classe, élément d'une classe
- control : c'est en gros le chef, c'est lui qui permet par exemple de vérifier des infos, aller rechercher des infos dans les entity
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.