Dans un diagramme de classes UML, quelle est la différence entre une relation d'association et une relation de dépendance?
D'après ce que je sais, une association est une relation plus forte qu'une dépendance, mais je ne sais pas comment elle est plus forte.
Tout exemple serait plus que bienvenu :)
Quelle est la différence entre dépendance et association? :
En général, vous utilisez une association pour représenter quelque chose comme un champ dans une classe. Le lien est toujours là, en ce sens que vous pouvez toujours demander une commande pour son client. Ce n'est pas nécessairement un champ, si vous modélisez dans une perspective plus d'interface, cela peut simplement indiquer la présence d'une méthode qui retournera le client de la commande.
Pour citer la 3ème édition d'UML Distilled (maintenant à peine sortie) "une dépendance existe entre deux éléments si des changements dans la définition d'un élément (le fournisseur) peuvent entraîner des changements dans l'autre (le client)". Il s'agit d'une relation très vague et générale, c'est pourquoi l'UML a une multitude de stéréotypes pour différentes formes de dépendance. En termes de code, des choses comme nommer un type de paramètre et créer un objet dans une variable temporaire impliquent une dépendance.
...
Une association implique presque toujours qu'un objet a l'autre objet comme champ/propriété/attribut (la terminologie diffère).
Une dépendance implique généralement (mais pas toujours) qu'un objet accepte un autre objet comme paramètre de méthode, instancie ou utilise un autre objet. Une dépendance est très impliquée par une association.
En OOP termes:
Association -> A has-a C objet (en tant que variable membre)
Dépendance -> A références B (comme paramètre de méthode ou type de retour)
public class A {
private C c;
public void myMethod(B b) {
b.callMethod();
}
}
Il y a aussi un réponse plus détaillée .
La dépendance est comme lorsque vous définissez une méthode qui prend une chaîne (en Java, C #, car la chaîne est un objet en eux) comme paramètre, votre classe dépend de la classe String.
L'association est comme lorsque vous déclarez une chaîne comme attribut dans votre classe. alors votre code est associé à la classe de chaîne.
String name = null //: is a association.
Dépendance - Un changement dans une classe affecte le changement dans sa classe dépendante. Exemple - Le cercle dépend de la forme (une interface). Si vous changez de forme, cela affecte également Circle. Donc, Circle a une dépendance sur Shape.
Association - signifie qu'il existe une certaine relation entre 2 objets
(un, un, plusieurs, plusieurs)
L'association est de 2 types -
Agrégation
1) Composition - plus fort Association ou relation entre 2 objets. Vous créez un objet d'un classe B à l'intérieur d'un autre classe A
public class A { B b; public void setB(){ this.b= new B(); } }
Si nous supprimons la classe A, B n'existera pas (l'objet B est créé à l'intérieur de A uniquement).
Un autre exemple -Body & Liver .Liver ne peut pas exister en dehors du corps.
2) Agrégation - type plus faible de Association entre 2 objets.
public class A {
B b;
public void setB(B b_ref){
this.b= b_ref;
/* object B is passed as an argument of a method */
}
}
Même si vous supprimez la classe A, B existera à l'extérieur (B est créé à l'extérieur et transmis à la classe A)
Un autre exemple de cela: Man & Car. Man a une voiture, mais Man & Car existe indépendamment.
Ici: "Association vs dépendance vs agrégation vs composition" , vous avez un excellent mecum vade avec des diagrammes de classes uml et des extraits de code. L'auteur nous donne une liste de relations: Association, Dépendance, Agrégation, Composition en un seul endroit.
Une dépendance est très générale et réduire la complexité consiste à diminuer autant que possible les dépendances.
Une association est une forte dépendance (statique). L'agrégation et la composition sont encore plus fortes.