1. struktury
1.1. czasu kompilacji
1.2. wykonywania programy
1.2.1. szybko komunikujące się ze sobą obiekty
2. obiekty
2.1. agregowalność
2.1.1. jeden obiekt obejmuje inny
2.1.2. czas istnienia agregowalnego obiektu jest identyczny jak czas istnienia jego rodzica
2.2. asocjacja
2.2.1. znajomość
2.2.2. relacja używania
2.2.3. obiekt wie o istnieniu drugiego
3. kiedy dziedziczenie a kiedy kompozycja ?
3.1. dziedziczenie
3.1.1. obiekt A posiada wszystkie cechy obiketu B
3.1.2. jeśli zmieniają się zachowania obiektu (A ma inne zachowanie niż B, a poza tym są identyczne)
3.1.3. jeśli relacja między obiektami jest znana na poziomie czasu kompilacji
3.2. kompozycja
3.2.1. jeśli A używa tylko części zachowań obiektu B
3.2.2. jeśli zmieniają się dane obiektu i musimy go konfigurować
3.2.3. jeżeli relacja między A i B jest znana dopiero w czasie wykonania programu
4. white-box resuse
4.1. ponowne wykorzystanie metod z klasy bazowej
4.2. w klasach dziedziczących widać wewnętrzne mechanizmy klasy
4.3. poprzez dziedziczeni realizowane
4.4. użycie zmodyfikowane codu/klasy/funkcji do innego projektu
5. back-box resuse
5.1. wewnętrzne mechanizmy nie są widoczne
5.2. poprzez kompozycję realizowame
5.3. użycie niezmowyfikowangeo codu/klasy/funkcji do innego projektuy
5.4. wady
5.4.1. niemożliwe do zrealizowana w wielu sytuacjach
5.4.2. prostota i przejrzystość