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
Cara unEngineet unWheel - Un
Persona unLeg. et unArm - A
BookaPages
Cela représente généralement quand il y a deux classes, ClassA et ClassB, et soit :
-
ClassAcontientClassBcomme attribut, ou - Des instances de
ClassBsont construites à l’intérieur deClassA
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é !