Exemple de composition et d'agrégation avec un diagramme de classes UML
je n'arrive pas à comprendre complètement la différence entre l'agrégation et la composition d'un code.
Client <.>---->Comptebancaire
(ce qui est censé être le Client Comptebancaire composition diagramme de classe).
Donc dans cet exemple, le Client dispose d'un compte bancaire, donc cela signifie que, lorsqu'un client de l'objet meurt, son compte en banque de l'objet meurt trop. Est-ce à dire, que nous avons d'avoir un compte bancaire de l'objet dans le Client de classe ?
Class Client
{
BankAccount acc = new BankAccount();
public void addMoneyToBankAccount(decimal amount)
{
acc.AddMoney(amount);
}
public decimal CheckBalance()
{
return acc.CheckAccountBalance();
}
}
Alors, est-ce la composition dans le code ? Ce serait l'agrégation de ressembler à cet exemple?
Désolé pour le newbie question, s'il vous plaît corrigez-moi si le code était faux. Merci à l'avance.
source d'informationauteur Mefhisto1
Vous devez vous connecter pour publier un commentaire.
Oui, Ce que vous avez à faire est d'appeler la composition, si vous voulez faire de l'agrégation de vous comme cela:
Agrégation:
Si nous offre l'héritage "est-un" et de la composition nous donne la "partie-de", on pourrait avancer que l'agrégation nous donne un "a-un" de la relation. À l'intérieur de l'agrégation, la durée de vie de la pièce n'est pas géré par l'ensemble. Pour rendre cela plus clair, nous avons besoin d'un exemple. Pour les 12 derniers mois, j'ai participé à la mise en œuvre d'un système de CRM, donc je vais utiliser une partie de ce comme un exemple.
Le système CRM dispose d'une base de données de clients et une base de données qui contient toutes les adresses à l'intérieur d'une zone géographique. L'agrégation a du sens dans cette situation, en tant que Client 'a-a' l'Adresse. Il ne serait pas logique de dire que l'Adresse est "partie-de" le Client, car il n'est pas. Envisager de cette façon, si le client cesse d'exister, l'adresse? Je dirais qu'il ne cesse pas d'exister. L'agrégation est représenté sur un diagramme UML, comme un carnet de diamant.
Comme je l'ai dit au début de la réponse, c'est mon point de vue sur la composition et agrégation. La prise de décision quant à l'utilisation de la composition ou d'agrégation ne devrait pas être difficile. Lors de la modélisation d'objets, il doit être une question de dire: est-ce "partie-de" ou ' -'?
Votre client Comptebancaire code est un
composition
relationVotre code répond à toutes les propriétés de la composition
->la durée de vie de la partie classificateur(
BankAccount
) dépend de la durée de vie de l'ensemble du classificateur(Client
).->data généralement de flux dans une seule direction (qui est, de l'ensemble du classificateur(
Client
) à la partie classificateur(BankAccount
).Agrégation peut être représenté par le passage compte bancaire du client comme argument à une méthode
Donc,ce code est l'Agrégation
Comme vous pouvez le voir il satisfait à toutes les propriétés d'Agrégation
->il peut exister indépendamment de
client
->flux de Données provenant de l'ensemble du classificateur(
client
) de la partie(BankAccount
)Cette explication à partir d'IBM est utile pour moi:
Par exemple, nous pouvons penser à une Voiture comme une entité entière et d'une Roue de Voiture en tant que partie de l'ensemble de la Voiture. La roue peut être créé semaines à l'avance, et il peut s'asseoir dans un entrepôt avant d'être placé sur une voiture lors de l'assemblage. Dans cet exemple, la Roue de la classe de l'instance clairement vie de façon indépendante de la Voiture de classe de l'instance. Cependant, il ya des moments où la part de la classe de cycle de vie n'est pas indépendant de celui de l'ensemble de la classe — ce qui est appelé la composition de l'agrégation. Considérons, par exemple, la relation d'une société à ses services. De la Société et les Ministères sont modélisés comme des classes, et d'un département ne peut pas exister avant qu'une société existe. Ici, le Ministère de la classe de l'instance dépend de l'existence de la Société de la classe de l'instance.
Donc, pour moi, le créateur ou destructeur de cycle de vie (nouvelle version) pour une composition qui se passe à l'intérieur d'une instance; une agrégation doit avoir la possibilité, au lieu de addObject et la méthode de simplement enregistrer l'id de l'objet comme un attribut de lui-même. Ainsi, dans le ci-dessus le Client et le Compte en Banque exemple, il est vraiment à l'entreprise pour déterminer si un Compte ne peut exister, même si l'enregistrement du Client est détruit (comptes orphelins) Si elle est aggegator, vous auriez des méthodes Client:
et la clôture du compte de la méthode de la partie de la Comptebancaire instance de l'objet, car il peut exister indépendamment de la part du Client.
rapport à la méthode de composition qui requres le Client d'exister, et si le Client cesse d'exister, tous les comptes appartenant à un titulaire de compte sont supprimés. Donc, vous demandez au Client de l'objet à créer vous un compte:
Oui, vous avez raison. C'est un simple composition.
Pour un agrégationvotre classe Client doit garder de référence pour la classe Comptebancaire, mais ne devrait pas le contrôle de la durée de vie des objets.
Après Client de l'objet sera détruit, Comptebancaire objet utilisé à l'intérieur peut être attribué, pour un autre Client.