Je revois mes connaissances en programmation orientée objet. Sous le thème des relations entre les classes, j'ai rencontré des relations qui sont un peu ambiguës pour moi.
Je sais que la dépendance "utilise-a" et l'héritage "est-a" mais je ne suis pas un peu familier avec l'agrégation, la composition, l'association et l'association directe; aussi, lequel d'entre eux est une relation "a-une". Certains utilisent l'agrégation de manière interchangeable avec l'association.
Qu'est-ce que l'association directe? Aussi, qu'est-ce que la composition? Dans les diagrammes UML, les flèches qui les représentent sont différentes. Je serais vraiment reconnaissant si vous pouviez clarifier ces choses pour moi.
Veuillez noter qu'il existe différentes interprétations des définitions d '"association". Mes vues ci-dessous sont largement basées sur ce que vous liriez dans les livres de certification Oracle et les guides d'étude.
Une utilisation à l'intérieur d'une méthode, sa signature ou comme valeur de retour. Ce n'est pas vraiment une référence à un objet spécifique.
Exemple: je gare ma voiture dans un garage.
Un soi-disant "STRONG relation": L'instanciation de l'objet lié est souvent codée en dur à l'intérieur du constructeur de l'objet. Il ne peut pas être défini depuis l'extérieur de l'objet. (Composition ne peut pas être une relation plusieurs-à-plusieurs.)
Exemple: une maison est composée de pierres.
Il s'agit d'un "relations FAIBLES". Les objets peuvent vivre indépendamment et il existe généralement des setters ou d'autres moyens d'injecter les objets dépendants.
Exemple: une voiture peut avoir des passagers.
Très similaire à une association directe. C'est aussi un "relation FAIBLE" avec des objets indépendants. Cependant, ici, les objets associés sont une partie cruciale de l'objet conteneur.
Exemple: une voiture devrait avoir des pneus.
Remarque: les associations directes et les associations d'agrégation sont souvent généralisées en tant qu '"associations". La différence est plutôt subtile.
L'intérêt de OOP est que votre code réplique des objets du monde réel, ce qui rend votre code lisible et maintenable.
1. Association
L'association est: la classe A utilise la classe B.
Exemple:
Et dans le diagramme UML, l'association est désignée par une tête de flèche normale.
2. Agrégation
La classe A contient la classe B ou la classe A a une instance de classe B.
Une agrégation est utilisée lorsque la durée de vie de l'objet est indépendante de l'objet conteneur. Mais l'objet conteneur possède toujours l'objet agrégé.
Donc, si nous supprimons la classe A, cela ne signifie pas que la classe B sera également supprimée. Par exemple. aucun ou plusieurs enseignants ne peuvent appartenir à un ou plusieurs départements.
La relation entre les enseignants et les départements est une agrégation.
. Composition
La classe A possède la classe B.
Par exemple. Le corps se compose de bras, tête, jambes. BankAccount se compose de Balance et TransactionHistory.
Donc, si la classe A est supprimée, la classe B sera également supprimée.
L'association directe n'a rien de commun avec les trois autres. Il n'appartient pas du tout à UML, c'est le terme de modélisation des exigences IBM .
Quant aux autres,
L'association A-> B est un enfant de la dépendance. L'association signifie que A (ou son instance) a un moyen simple d'accéder à l'instance de B. Par exemple, a.x.y.b. Ou par fonction, ou par une variable locale. Ou par une référence directe ou un pointeur, ou autre chose (il existe de nombreuses langues dans le monde). Comme vous le voyez, il n'y a pas de frontière stricte entre dépendance et association.
L'un des attributs de l'association est l'agrégation, elle peut avoir des valeurs: aucune, partagée (souvent appelée à tort agrégation) et la composition.
Si A (ou l'instance) a quelques (ou une) instances de B, alors la destruction de l'association signifie la destruction des instances B, c'est la composition.
Si vous ou un auteur d'outil avez décidé qu'une relation has-a, qui est plus faible que la composition, doit être spécialement affichée, vous pouvez utiliser l'agrégation shared
. Il s'agit généralement de quelques collections de références à B en A.
Il existe des attributs plus intéressants des associations. Regardez ici si vous êtes intéressé.
Une association entre les types d'objets classe les relations entre les objets de ces types. Par exemple, l'association Person
- isEmployedBy -Enterprise
peut classer les relations PeterMiller-isEmployedBy-IBM, SusanSmith-isEmployedBy-IBM et SarahAnderson-isEmployedBy-Google entre les objets PeterMiller, SusanSmith et SarahAnderson de tapez Person
ainsi que Google et IBM de type Enterprise
. En d'autres termes, les associations sont des types de relations avec au moins deux types d'objets qui y participent. Une association entre deux types d'objets est appelée binaire. Bien que les associations binaires soient plus courantes, nous pouvons également avoir à traiter avec des associations n-aires, où n est un nombre naturel supérieur à 2. Par exemple, Person
- isTreatedIn -Hospital
- for- Disease
est une association à 3 zones ("ternaire") entre les types d'objet Person
, Hospital
et Disease
.
Je suppose qu'avec "association directe" vous voulez dire une association directionnelle (ou dirigée), qui est une association (avec une classe de domaine et une classe de plage) qui représente une propriété de référence dans sa classe de domaine. Une telle association directionnelle a un "point de propriété" à son extrémité cible.
Veuillez consulter ce chapitre du livre pour en savoir plus sur les associations.
Et voir ma réponse à this SO question pour une explication des agrégations et des compositions.