W tym rozdziale poznaliśmy różne rodzaje relacji między dwoma obiektami.
Streszczenie
Proces budowania złożonych obiektów z prostszych nazywa się kompozycją obiektu. Istnieją dwa typy kompozycji obiektów: kompozycja i agregacja.
Kompozycja istnieje, gdy członek klasy ma częściową relację z klasą. W relacji kompozycji klasa zarządza istnieniem jej członków. Aby zakwalifikować się jako kompozycję, obiekt i część muszą pozostawać w następującej relacji:
- Część (element) jest częścią obiektu (klasa)
- Część (element) może należeć tylko do jednego obiektu (klasy) w danym momencie
- Część (element) ma swoje istnienie zarządzane przez obiekt (klasę)
- Część (element) nie wie o istnieniu obiektu (klasy)
Kompozycja jest zwykle implementowana za pomocą normalnych zmiennych składowych lub wskaźników, gdzie klasa zarządza całą alokacją i dezalokacją pamięci. Jeśli możesz zaimplementować klasę jako kompozycję, powinieneś zaimplementować klasę jako kompozycję.
Agregacje istnieją, gdy klasa ma relację ma z członkiem. W relacji agregacji klasa nie zarządza istnieniem członków. Aby zakwalifikować się jako agregacja, obiekt i jego części muszą pozostawać w następującej relacji:
- Część (element) jest częścią obiektu (klasa)
- Część (element) może należeć do więcej niż jednego obiektu (klasy) naraz
- Część (element) nie jego istnieniem nie zarządza obiekt (klasa)
- Część (element) nie wie o istnieniu obiektu (klasy)
Agregacje są zazwyczaj realizowane za pomocą wskaźnika lub referencji.
Skojarzenia to luźniejszy typ relacji, w którym klasa wykorzystuje obiekt w przeciwnym razie niepowiązany. Aby zakwalifikować się jako skojarzenie, obiekt i skojarzony obiekt muszą pozostawać w następującej relacji:
- Powiązany obiekt (element) nie jest w żaden sposób powiązany z obiektem (klasą)
- Powiązany obiekt (element) może należeć do więcej niż jednego obiektu (klasy) naraz
- Powiązany obiekt (członek) nie jego istnieniem nie zarządza obiekt (klasa)
- Powiązany obiekt (członek) może wiedzieć o istnieniu obiektu (klasy) lub nie.
Skojarzenia mogą być implementowane poprzez wskaźnik lub odwołanie, albo w sposób bardziej pośredni (taki jak trzymanie indeksu lub klucza skojarzonego obiektu).
W zależności jedna klasa używa innej klasy do wykonania zadania. Klasa zależna zazwyczaj nie jest członkiem klasy, która z niej korzysta, lecz jest tymczasowo tworzona, używana, a następnie niszczona lub przekazywana do funkcji składowej ze źródła zewnętrznego.
W klasą kontenera jedna klasa zapewnia kontener do przechowywania wielu obiektów innego typu. Pojemnik na wartości to kompozycja przechowująca kopie przechowywanych w nim obiektów. Kontener referencyjny to agregacja przechowująca wskaźniki lub odniesienia do obiektów znajdujących się poza kontenerem.
std::initializer_list może służyć do implementowania konstruktorów, operatorów przypisania i innych funkcji, które akceptują parametr inicjujący listę. std::initializer_list znajduje się w nagłówku <initializer_list>.
| Właściwość\Typ | Kompozycja | Agregacja | Stowarzyszenie | Dependency |
|---|---|---|---|---|
| Typ powiązania | Cała/część | Cała/część | W inny sposób niepowiązany | W inny sposób niepowiązany |
| Członkowie mogą należeć do wielu klasy | Nie | Tak | Tak | Tak |
| Istnienie członków zarządzane przez klasę | Tak | Nie | Nie | Nie |
| Kierunkowość | Jednokierunkowa | Jednokierunkowa | Jednokierunkowa lub dwukierunkowa | Jednokierunkowa |
| Zależność czasownik | Część | Ma-a | Używa-a | Depends-on |
Czas quizu
Ten rozdział jest całkiem prosty i nieco bardziej abstrakcyjny niż poprzednie, więc ten quiz będzie krótki i treściwy punkt.
- Jaki typ relacji (skład, agregacja, powiązanie lub zależność) opisują poniższe?
1a) Klasa Animal zawierająca typ zwierzęcia (enum) i nazwę (string).
Pokaż rozwiązanie
1b) Klasa edytora tekstu z funkcją save(), która przyjmuje funkcję save() Obiekt pliku jako argument. Funkcja save() zapisuje zawartość edytora na dysk.
Pokaż rozwiązanie
1c) Klasa Poszukiwacza Przygód, która może przenosić różnego rodzaju Przedmioty, takie jak miecze, różdżki, mikstury czy księgi zaklęć. Przedmioty te mogą być upuszczane i zbierane przez innych Poszukiwaczy Przygód.
Pokaż rozwiązanie
1d) Gracz modli się w Kaplicy (aby otrzymać nową moc).
Pokaż rozwiązanie
1e) Klasa komputera zawierająca klasę procesora. Procesor można wyjąć z komputera i przetestować samodzielnie.
Pokaż rozwiązanie
1f) Kowal ma specyficzne kowadło, którego używa do wykonywania swojej pracy.
Pokaż rozwiązanie
- Wybierz jedno: Jeśli możesz zaprojektować klasę za pomocą (wybierz jedną: kompozycję, agregację, powiązanie lub zależność), powinieneś to zrobić.

