Зміст курсу
C++ ООП
C++ ООП
Сегментація та агрегація
Під час створення програмного забезпечення, яке є підтримуваним і гнучким, у процесі слід враховувати багато аспектів, особливо в об'єктно-орієнтованому програмуванні. Композиція та агрегація — це фундаментальні поняття, які дозволяють створювати складні системи з простіших компонентів і є частинами парадигми інкапсуляції.
Композиція
Композиція — це техніка проєктування, за якої class
містить objects
інших classes
як змінні-члени. Ці члени є важливими складовими class
та мають сильний зв'язок володіння. Коли object
знищується, його складові частини також знищуються. Наприклад:
Car.h
Engine.h
#include "Engine.h" class Car { public: void Start() { engine.Start(); // Start the engine std::cout << "Car started" << std::endl; } private: Engine engine; // Engine object composition };
Клас Car
містить об'єкт Engine
. Коли створюється об'єкт Car
, автоматично створюється екземпляр Engine
як частина його композиції.
Агрегація
Агрегація — це інша форма композиції object
, коли class
містить object
інших classes
, але зв'язок між ними є слабшим порівняно з композицією. При агрегації вкладені члени classes
можуть існувати незалежно та можуть бути спільними для кількох classes
.
Car.h
Engine.h
#include "Engine.h" class Car { public: Car(Engine* engine) : engine(engine) {} void Start() { engine->Start(); // Start the engine std::cout << "Car started" << std::endl; } private: Engine* engine; // Engine object aggregation };
Клас Car
агрегує об'єкт Engine
за допомогою вказівника. Клас Car
не володіє об'єктом Engine
; він лише зберігає посилання на нього. Це дозволяє екземпляру Engine
існувати незалежно від об'єкта Car
і бути спільно використаним між кількома екземплярами за потреби.
Вибір між композицією та агрегацією
Під час проєктування програмних систем важливо ретельно обирати між композицією та агрегацією залежно від відносин між класами та об'єктами.
У контексті класів Car
та Engine
використання композиції буде більш доцільним. Зазвичай кожен автомобіль має власний двигун, і двигун є невід'ємною частиною самого автомобіля. Крім того, це запобігає спільному використанню або повторному використанню Engine
між кількома об'єктами objects
, що також є логічним.
Дякуємо за ваш відгук!