Articles

Agregacja vs. Kompozycja w Programowaniu Obiektowym

W Programowaniu Obiektowym, istnieje wiele różnych typów relacji, które mogą istnieć pomiędzy dwoma lub więcej klasami. Najpopularniejsze dwa typy to:

  • Dziedziczenie – relacja „jest”
  • Asocjacja – relacja „ma”

Niniejszy blog będzie poświęcony dwóm typom relacji asocjacyjnych – Aggregacji i Kompozycji.

Asocjacja pomiędzy dwoma klasami jest relacją „ma”. Na przykład:

  • A Car posiada Engine i Wheel
  • A Person posiada Leg i Arm
  • A Book ma Pages

To zwykle reprezentuje, gdy istnieją dwie klasy, ClassA i ClassB, i albo:

  • ClassA zawiera ClassB jako atrybut, lub
  • Instancje ClassB są konstruowane wewnątrz ClassA

Jaka jest różnica między Aggregation a Composition?

Istnieją dwa podtypy relacji asocjacyjnych – Aggregation i Composition. Jaka jest różnica między nimi?

Kompozycja

Kompozycja implikuje, że zawarta klasa nie może istnieć niezależnie od kontenera. Jeśli kontener zostanie zniszczony, dziecko również zostanie zniszczone.

Przykładem może być Page i BookPage nie może istnieć bez Book, ponieważ książka składa się z Pages. Jeśli Book zostanie zniszczony, Page również zostanie zniszczony.

W kodzie, zwykle odnosi się to do instancji dziecka tworzonej wewnątrz klasy kontenera:

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

Agregacja

Z agregacją, dziecko może istnieć niezależnie od rodzica.

Myśląc więc o Car i EngineEngine nie musi być zniszczony, gdy Car jest zniszczony.

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

Jak są one reprezentowane diagram UML?

W diagramie UML, zarówno Aggregation, jak i Composition są reprezentowane za pomocą diamentowej strzałki między klasami. Końcówka diamentu znajduje się po stronie kontenera.

  • Agregacja używa otwartego diamentu
  • Kompozycja używa zamkniętego diamentu

Oto przykład:

Mam nadzieję, że to pomogło!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *