Question

Je suis face à une délégation distinguant problème persistant, la composition et l'agrégation de l'autre, et en identifiant les cas où il est préférable d'utiliser le un sur l'autre.

Je l'ai consulté un Java OO livre d'analyse et de conception, mais ma confusion reste encore. La principale explication est la suivante:

Délégation :. Quand mon objet utilise la fonctionnalité d'un autre objet comme est sans le modifier

Composition :. Mon objet est constitué d'autres objets qui à son tour ne peut pas exister après mon objet est-ordures détruit collectés

Agrégation :. Mon objet est constitué d'autres objets qui peuvent vivre même après mon objet est détruit

Est-il possible d'avoir quelques exemples simples montrant chaque cas, et le raisonnement derrière eux? Sinon, comment ces exemples ont démontré être autre que mon objet ayant simplement une référence à un autre objet (s)?

Était-ce utile?

La solution

Votre objet renverrait un autre objet (s) dans les trois cas. La différence réside dans le comportement et / ou du cycle de vie des objets référencés. Voici quelques exemples:

  1. Composition: Maison contient une ou plusieurs chambres. La durée de vie de la pièce est contrôlée par House comme chambre ne sera pas exister sans Chambre.

  2. Agrégation: Maison Toy construit à partir de blocs. Vous pouvez le démonter, mais les blocs demeurerez.

  3. Délégation: Votre patron vous a demandé de lui faire un café, vous avez eu un stagiaire le faire pour vous à la place. La délégation est pas un type d'association (comme composition / agrégation sont). Ces deux derniers ont été discutés sur Stack Overflow plusieurs fois

Dans le commentaire que vous demandez comment la mise en œuvre serait différent dans chaque cas, en observant que dans tous les cas, nous invoquons des méthodes sur les objets releated. Il est vrai que, dans chaque cas, nous aurions un code tel que

myRoom.doWork();

myBlock.doWork();

myMinion.doWork();

mais les différences se situent dans le cycle de vie et cardinalité des objets liés.

Pour la composante, les chambres sont à l'existence lorsque la Chambre est créée. Nous pourrions donc les créer dans le constructeur de la Chambre.

Dans le cas de l'Association (je vais utiliser des pneus et voitures) voitures pourraient ajouter pneus dans leur constructeur, mais plus tard, vous pouvez supprimer et changer de pneus. Donc, vous avez également des méthodes telles que

 removeTyre(FrontLeft)
 addNewTyre(aTyre, BackRight)

Et il est fort probable que l'objet aTyre provenait d'une usine - nous ne new dans l'une des méthodes de la voiture.

Dans le cas de la délégation, vous pourriez même pas une variable membre de tenir le délégué

 resourcingPool().getIntern().getCoffee(SkinnyLatte, workstation 7);

la relation entre les objets ne dure que tant que le stagiaire est aller chercher le café. Ensuite, il retourne à la piscine des ressources.

Autres conseils

Délégation

public class A {
  private B b = new B();

  public void methodA() {
    b.methodB();
  }
}

Lorsque les clients de A appel methodA, A classe délégués l'appel à la B de methodB.

Justification. Classe A expose les comportements qui appartiennent ailleurs. Cela peut se produire dans les langues unique héritage où la classe A hérite d'une classe, mais ses clients ont besoin de comportements qui sont mis en œuvre dans une autre classe. Une étude plus approfondie .

Délégation hybride

public class A {
  private B b = new B();

  public void methodA() {
    b.methodB( this );
  }
}

La différence entre la délégation qui implique simplement le transfert et la délégation qui agit comme un substitut à l'héritage que doit accepter le callee un paramètre de l'appelant, comme illustré:

    b.methodB( this );
.

Justification permet la classe des instances de B d'utiliser les fonctionnalités disponibles de la classe A, tout comme B de classe serait si elle a hérité de la classe A - mais sans héritage. Une étude plus approfondie .

Composition

public class A {
  private B b = new B();

  public A() {
  }
}

Une fois que plus aucune référence à une instance particulière de classe existent A de, son instance de B de classe est détruite.

Justification. Permet de définir des classes de comportements et attributs de façon modulaire. Une étude plus approfondie .

Agrégation

public class A {
  private B b;

  public A( B b ) {
    this.b = b;
  }
}

public class C {
  private B b = new B();

  public C() {
    A a = new A( this.b );
  }
}

Une fois qu'il n'y a plus de références à une instance particulière de A de classe, son instance de B de classe ne sera pas détruit. Dans cet exemple, les deux A et C doivent être des déchets collectés avant B seront détruits.

Justification. Permet de réutiliser les instances des objets. Une étude plus approfondie .

Démonstration Sans Références

Les noms donnés à ces modèles simples sont définis par leurs relations référentielles.

Votre livre explique assez bon alors laissez-moi élaborer et de vous fournir quelques exemples.

délégation:. Quand mon objet utilise la fonctionnalité d'un autre objet comme est sans le modifier

Parfois, une classe peut logiquement besoin d'être grand. Mais la grande classe n'est pas une bonne pratice de codage. Aussi quelque temps, certaines fonctionnalités d'une classe peuvent être implémentable dans plus d'une façon et vous voudrez peut-être changer cela un certain temps.


class FeatureHolder {
 void feature() {
  // Big implementation of the feature that you dont want to put in the class Big
 }
}

class Big {
 private FeatureHolder FH = new FeatureHolder();

 void feature() {
  // Delegate to FeatureHolder.
  FH.feature();
 }

 //.. Other features
}

Dans l'exemple ci-dessus, la fonction d'appel Big.feature () de FH est sans le modifier. De cette façon, la Grande classe n'a pas besoin de contenir la mise en œuvre de la fonction (séparation du travail). En outre, la fonction () peut mettre en œuvre différemment par d'autres classes comme « NewFeatureHolder » et Big peut choisir d'utiliser à la place le nouveau titulaire de la fonction.

composition:. Mon objet est constitué d'autres objets qui à son tour ne peut pas exister après mon objet est destryed-ordures collectées

l'agrégation:. Mon objet est constitué d'autres objets qui peuvent vivre même après mon objet est détruit

Technically, Composition est « partie de » et d'agrégation est « voir » relation. Vos bras sont une partie de vous. Si vous ne vivez plus, le bras va mourir aussi. Votre tissu ne fait pas partie de vous, mais vous les avez; comme vous pouvez invité, votre tissu ne va pas avec vous.

Dans la programmation, certains objets font partie d'un autre objet et ils ont pas de sens logique sans elle. Par exemple, un bouton est composé dans un cadre de fenêtre. Si un cadre est fermé, le bouton n'a aucune raison d'être plus autour de (Composition). Un bouton peut se référer à une base de données (souhaite refreash données); lorsque le bouton est éliminé, la base de données peut être encore autour (agrégation).

Désolé pour mon anglais, Hope this helps

1) Délégation: exemple Man-pilote automobile. Un homme a acheté une voiture. Mais que l'homme ne sait pas conduire la voiture. Donc, il désignera un conducteur qui sait conduire une voiture. Ainsi, la classe de l'homme veut effectuer un transport en utilisant la voiture. Mais il ne possède pas la fonctionnalité interacting- / compatibilité avec la voiture. Donc, il utilise une classe qui a une compatibilité avec la voiture qui est pilote qui est compatible avec la classe de l'homme. En supposant que le pilote peut comprendre ce que l'homme dit

2) Composition: simulation de voiture est un exemple de routine. Pour faire un mouvement de voiture, roue tourne. classe de voiture en utilisant la classe de roue tourne functinality dans le cadre de sa fonction de déplacement, alors que la roue fait partie de la voiture.

3) Agrégation: voiture et sa couleur. objet de classe de voiture ferrari aura un objet rouge de classe de couleur. Mais rouge objet de classe de couleur peut être là en tant que classe individuelle, lorsque la recherche de l'utilisateur se produit avec une spécification de couleur rouge.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top