Articles

Aggrégation vs. composition en programmation orientée objet

En programmation orientée objet, il existe de nombreux types de relations qui peuvent exister entre deux ou plusieurs classes. Les deux types les plus courants sont :

  • Héritage – une relation  » est une  »
  • Association – une relation  » a une  »

Ce blog va faire une plongée profonde dans les deux types de relations d’association – Agrégation et Composition.

Une relation d’association entre deux classes est une relation  » a une « . Par exemple :

  • Un Car a un Engine et un Wheel
  • Un Person a un Leg. et un Arm
  • A Book a Pages

Cela représente généralement quand il y a deux classes, ClassA et ClassB, et soit :

  • ClassA contient ClassB comme attribut, ou
  • Des instances de ClassB sont construites à l’intérieur de ClassA

Quelle est la différence entre l’agrégation et la composition ?

Il existe deux sous-types de relations d’association : l’agrégation et la composition. Quelle est la différence entre les deux ?

Composition

La composition implique que la classe contenue ne peut pas exister indépendamment du conteneur. Si le conteneur est détruit, l’enfant l’est aussi.

Prenez par exemple un Page et un Book. La Page ne peut exister sans la Book, car le livre est composé de Pages. Si la Book est détruite, la Page est également détruite.

Dans le code, cela fait généralement référence à l’instance enfant créée à l’intérieur de la classe conteneur :

class Book:
def __init__(self):
page1 = Page('This is content for page 1')
page2 = Page('This is content for page 2')
self.pages =
class Page:
def __init__(self, content):
self.content = contentbook = Book() # If I destroy this Book instance,
# the Page instances are also destroyed

Agrégation

Avec une agrégation, l’enfant peut exister indépendamment du parent.

Alors, en pensant à un Car et à un Engine, le Engine n’a pas besoin d’être détruit lorsque le Car est détruit.

class Car:
def __init__(self, engine):
self.engine = engine
class Engine:
def __init__(self):
passengine = Engine()
car = Car(engine) # If I destroy this Car instance,
# the Engine instance still exists

Comment sont-elles représentées un diagramme UML ?

Dans un diagramme UML, l’agrégation et la composition sont toutes deux représentées par une flèche en losange entre les classes. L’extrémité du losange va sur le côté du conteneur.

  • L’agrégation utilise un losange ouvert
  • La composition utilise un losange fermé

Voici un exemple :

J’espère que cela vous aura aidé !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *