Quelle est la différence entre ces 2 relations?
Edit: si vous pouviez fournir un exemple de code simple illustrant la différence, ce serait vraiment utile!
J'essaie de donner des exemples simples des deux types de lignes.
Dans le premier diagramme, la ligne continue indique une association:
Si les classes étaient déclarées en Java, ceci ressemblerait à ClassA
stocker une référence à ClassB
en tant qu'attribut (elle pourrait être transmise au constructeur, créée, etc.). Donc, vous pourriez voir quelque chose comme:
public class ClassA {
ClassB theClassB = ...
...
}
Dans le deuxième diagramme, il montre une dépendance:
Une dépendance est beaucoup plus faible qu'une association. Pour citer UML Distilled:
Avec les classes, les dépendances existent pour diverses raisons: une classe envoie un message à une autre; une classe en a une autre dans ses données; une classe en mentionne une autre en tant que paramètre d'une opération. [...] Vous utilisez des dépendances chaque fois que vous souhaitez montrer comment des modifications apportées à un élément peuvent modifier d'autres éléments.
Encore une fois, en utilisant Java, il existe quelques exemples: un argument de type ClassB
est passé à une méthode ou une méthode déclare une variable locale de type ClassB
:
public class ClassA {
...
public void someMethod(ClassB arg1) {...}
...
public void someOtherMethod() {
ClassB localReferenceToClassB = ...
}
...
}
D'autres manières ClassA
pourrait dépendre sur ClassB
sans association (liste non exhaustive):
ClassB
a une méthode statique que ClassA
appelleClassA
intercepte des exceptions de type ClassB
ClassB
est modifié, ClassA
doit également être modifié (par exemple, une logique est partagée)Cette page Web en dit assez, je pense: http://www.classdraw.com/help.htm Le texte suivant en provient, mais devrait suffire à comprendre la différence, à mon avis.
Donc, fondamentalement, la ligne continue est une association et la ligne pointillée est une dépendance.
Les associations peuvent également être unidirectionnelles, une classe connaissant l'autre classe et la relation, mais pas l'autre. De telles associations nécessitent une flèche ouverte pour pointer sur la classe connue et seule la classe connue peut avoir un nom de rôle et une multiplicité. Dans l'exemple, la classe Client connaît un nombre quelconque de produits achetés, mais la classe Produit ne connaît rien des clients. La multiplicité "0 .. *" signifie zéro ou plus.
Une dépendance est une relation faible entre deux classes et est représentée par une ligne pointillée. Dans l'exemple, il existe une dépendance entre Point et LineSegment, car l'opération draw () de LineSegment utilise la classe Point. Cela indique que LineSegment doit connaître Point, même s'il ne possède aucun attribut de ce type. Cet exemple montre également comment les diagrammes de classes sont utilisés pour se concentrer sur ce qui est important dans le contexte, car vous ne voudriez normalement pas montrer de telles dépendances détaillées pour toutes vos opérations de classe.
Comme ma réputation n'est que de 8, je ne peux pas placer les images elles-mêmes, mais on peut toujours les trouver sur la page Web que j'ai mentionnée au début.
[EDIT]
Je n'ai pas d'exemples de code ici, mais la façon dont je l'expliquerais personnellement est aussi simple qu'une voiture et une porte.
Quand une voiture a une porte (ou plus) c'est juste une voiture
Car --- has a --> Door
Mais quand vous avez une porte qui peut être ouverte la classe de porte aura une fonction comme
public void openDoor(){
this.open();
}
Pour utiliser la fonction ci-dessus la voiture devra créer une instance de la porte
Class Car(){
Door door1 = new Door();
door1.open();
}
De cette façon, vous avez créé une dépendance.
Ainsi, la ligne continue ne fait que pointer un objet (1) vers un autre objet (2), mais lorsque vous commencez à utiliser l'objet (1), il devient une dépendance.
J'espère que ça va faire;)
La ligne en pointillé indique la dépendance à (dans le sens de la flèche). En supposant que votre code source soit parfaitement assemblé dans des fichiers et des en-têtes distincts pour chaque classe, il s’avère simplement que le code comprend la ligne #include ClassB.h.
CEPENDANT Le fait est que toutes les relations de classe (généralisation, réalisation, composition, agrégation, association, etc.) héritent toutes de la relation de dépendance. Pour cette raison, je n'utilise jamais de flèches en pointillé pour documenter le code. Dans la mesure du possible, je voudrais documenter la relation en termes plus spécifiques, par exemple. diamants, triangles, etc. Si je ne connais pas la relation exacte, mon point de départ est une ligne continue avec des flèches (une association, une dépendance (implicite)).
Malgré cela, la notation en pointillé peut être utile dans d’autres aspects de la modélisation UML, par exemple. montrer les dépendances aux exigences dans l'analyse de cas d'utilisation, par exemple. NOTE La Thought Police voudrait réduire le couplage et les dépendances entre les classes en utilisant des interfaces (classes virtuelles pures) autant que possible.
Tandis que les classes virtuelles pures offrent la perspective d'un héritage multiple et du couplage le plus étroit possible entre toutes les classes. Les classes d'interface ont l'avantage d'être entièrement faites de matière noire et donc totalement invisibles pour la police. En gardant cela à l'esprit, il est possible d'écrire du code c ++ avec un couplage apparemment nul entre les classes - ce qu'ils aiment, car ils n'ont jamais vraiment compris tous ces symboles drôles.
D'accord, puisque vous n'avez pas accepté la première réponse. Laisse-moi essayer.
Flèche 1: Une association normale
UML a différents types de lignes et de flèches. Ci-dessus figure la simple flèche d’association, ce qui signifie qu’une classe peut avoir un lien avec l’autre classe. Ci-dessous, je vais expliquer chaque type AVEC des exemples de code.
Comment pouvons-nous accomplir cela généralement dans le code?
class Husband{
Wife bestWomanInTheWorld;
public Husband(Wife theWife){
this.bestWomanInTheWorld = theWife;
}
}
Parce que le mari toujours a besoin d'une femme, nous mettons la relation obligatoire dans le constructeur. Parce qu'un artiste peut a une guitare, nous laisserions le constructeur vide comme ceci:
class Artist{
List<Guitar> guitars;
public Artist(){
}
public AddGuitarToCollection(Guitar newGuitar){
Guitars.Add(newGuitar);
}
}
Donc, c'est comme ça que nous accomplissons cela dans le code (la plupart du temps!). Si vous débutez en programmation, vous n’avez généralement pas besoin de différents types de lignes et de flèches. Rester simple.
Flèche 2: Dépendance
Bon, nous connaissons donc les associations normales que nous utiliserons la plupart du temps. Mais quand utiliserons-nous la flèche "dépendance"? Eh bien, définissons une dépendance (wikipedia):
Dependency is a weaker form of bond which indicates that one class depends on
another because it uses it at some point in time. One class depends on
another if the independent class is a parameter variable or local variable of
a method of the dependent class. This is different from an association, where
an attribute of the dependent class is an instance of the independent class.
Sometimes the relationship between two classes is very weak. They are not
implemented with member variables at all. Rather they might be implemented as
member function arguments.
S'il existe un lien, une relation, une association, etc. qui nécessite d'être présent, la classe doit fonctionner; c'est une dépendance. Exemple: Mari a besoin la femme doit exister. Une voiture a besoin une roue pour être une voiture (et conduire). Une usine de voitures a besoin une classe de voitures pour en faire un objet. Votre classe RSSNewsItem nécessite une classe XMLReader pour tout faire.
Quand utiliser lequel?
Eh bien, c’est la seule question valable à mes yeux; depuis Google montre beaucoup de réponses valides à votre question. Essayez de ne jamais utiliser une dépendance dans un diagramme de classes car cela signifie généralement que vous n'êtes pas assez spécifique. Visez toujours les associations, les réalisations, etc. N'utilisez les réalisations (à mon avis) que s'il est nécessaire d'utiliser une autre classe sans maintenir de relation. Exemple; Classes utilitaires (comme XMLReader).
Si vous avez des questions après avoir lu cette explication complète, n'hésitez pas à demander. : -)
Votre question m'a donné une bonne chance d'apprendre moi-même, voici ce que j'ai trouvé -
Association : propriété d'un autre type (par exemple, "A" possède un "B")
//@assoc The Player(A) has some Dice(B)
class Player {
Dice myDice;
}
Dépendance : Utilisation d’un autre type (par exemple, "C" utilise un "D")
//@dep The Player(C) uses some Dice(D) when playing a game
class Player {
rollYahtzee(Dice someDice);
}
Voici une référence précise que j'ai trouvée - Association vs. Dependency