Composition Over Inheritance
The principle says, that we should prefer composition (class A uses class B) than inheritance. When using inheritance, remember not to break the Liskov Substitution Principle.
The principle does not say that we should completely reject inheritance.
Example:
We have a Worker and a Manager.
Inheritance: Both classes have names and surname. They can inherit an Employee class.
Composition: Both classes calculate salary. A better solution is injected salary calculator into Worker and Manager.
Advantages
- Less dependency between classes.
- Classes are smaller (and have less responsibility).
- Easier comply SOLID principles.
- Easier testing.
Disadvantages
- Sometimes inheritance is better.
All posts from mini project: Learn SOLID and OOP principles:
- SOLID
- SOLID exercises
- S like Single responsibility principle
- SOLID exercises — Kata
- O as Open-closed principle
- L jak Liskov Substitution Principle
- Interface segregation principle
- KISS — Keep it simple, stupid
- DRY — Don’t repeat yourself
- Dependency inversion principle
- SLAP — Single Level of Abstraction Principle
- Composition Over Inheritance
- Encapsulate what changes
- Lod — Law of Demeter
- ES as Exercises of Single responsibility principle
- EO as Exercises of Open/closed principle
- EL as Exercises of Liskov Substitution Principle
- EI as Eexrcises of Interface segregation principle
- ES as Exercises of Dependency Inversion Principle
- Object-oriented programming
- OOP — Object-Oriented Programming — Advice
- OOP — Object Oriented Programming
Sources
Main image
Materials
- https://devcave.pl/notatnik-juniora/zasady-projektowania-kodu#composition-over-inheritance
- https://blog.helion.pl/dziedziczenie-vs-kompozycja/
- https://sarvendev.com/2017/10/kompozycja-ponad-dziedziczenie/
- https://javarevisited.blogspot.com/2013/06/why-favor-composition-over-inheritance-java-oops-design.html
- https://en.wikipedia.org/wiki/Composition_over_inheritance
1
/
53
2025_01_17 Jak Ugotować Jajka? | Walka I Postępy
017/100| AI Generowanie Obrazów - AI Image Generation| Bubble.io TUTORIAL
2025_01_16 Rozmawiaj!!! Walka I Postępy
016/100| AI Chat Produktywności - Productivity Chatbot AI| Bubble.io TUTORIAL
2025_01_15 Świąteczne Prezenty Walka I Postępy
015/100| AI Trener Personalny - Motivational Coach AI| Bubble.io TUTORIAL
2025_01_14 Metoda Na Cele | Walka I Postępy
014/100| Połączenie przez API - API Connector| Bubble.io TUTORIAL
2025_01_13 Przerwa Świąteczna | Walka I Postępy
013/100| Rejestracja i Logowanie - Sign-Up & Login Page| Bubble.io TUTORIAL
012/100| Proces Tworzenia Oprogramowania - Transforming App Development|Bubble.io TUTORIAL
011/100| Debugowanie - Debugging| Bubble.io TUTORIAL
010/100| Reużywalny Element - Reusable Elements| Bubble.io TUTORIAL
009/100| Listy Tekstów - Lists of Text| Bubble.io TUTORIAL
008/100| Logika: Warunki - Conditional Basics| Bubble.io TUTORIAL
007/100| Edycja w Bazie Danych - Edit Database| Bubble.io TUTORIAL
006/100| Baza Danych - Database| Bubble.io TUTORIAL
Powiadom Osobę w Komentarzu - Notify Person via Comments| Bubble.io TUTORIAL
005/100| Działanie: Akcje i Wydarzenia - Workflows: Events and Actions| Bubble.io TUTORIAL
004/100| Animowany Przycisk - Custom Animated Buttons| Bubble.io TUTORIAL
003/100| Grupy - Group Elements| Bubble.io TUTORIAL
002/100| Teksty - Text Elements| Bubble.io TUTORIAL
001/100| Edytor Aplikacji i Układ Strony - Editor & Layouts| Bubble.io TUTORIAL
Zbuduj TODO Aplikację - To-Do App in 10 Minutes | Bubble.io Budowa Aplikacji
Wysuwający się Panel - Slide-in Panel| Quick Tip
Wykresy Wykorzystania Bubble.io - App Usage Charts | Bubble.io TUTORIAL
Własny Tymczasowy Stan - Learn Custom States in 5 min| Bubble.io Quick Tip
Uważaj przy Usuwaniu Definicji Danych - Data-Deleting Ripple Effect| Bubble.io TUTORIAL
Szablony - Bubble Templates | Bubble.io TUTORIAL
Stwórz Szybko Bazę Danych - Create Database | Bubble.io TUTORIAL
1
/
53