Kurssisisältö
C++ OOP
C++ OOP
Segmentointi ja Aggregointi
Kun luot ylläpidettävää ja joustavaa ohjelmistoa, on prosessissa otettava huomioon monia asioita, erityisesti olio-ohjelmoinnissa. Koostaminen ja aggregointi ovat keskeisiä käsitteitä, jotka mahdollistavat monimutkaisten järjestelmien rakentamisen yksinkertaisemmista osista ja kuuluvat kapseloinnin periaatteisiin.
Koostaminen
Koostaminen on suunnittelutekniikka, jossa class
sisältää muiden objects
classes
jäsenmuuttujina. Nämä jäsenet ovat olennaisia osia sisältävässä class
ja niillä on vahva omistussuhde. Kun sisältävä object
tuhoutuu, myös sen koostetut osat tuhoutuvat. Esimerkiksi:
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
-luokka koostaa Engine
-olion. Kun Car
-olio luodaan, se luo automaattisesti Engine
-instanssin osana koostumustaan.
Aggregaatio
Aggregaatio on toinen object
koostamisen muoto, jossa class
sisältää muiden object
classes
, mutta sisältyvillä instansseilla on heikompi suhde verrattuna koostumukseen. Aggregaatiossa sisältyvät jäsenclasses
voivat olla olemassa itsenäisesti ja niitä voidaan jakaa useiden classes
kesken.
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
-luokka yhdistää Engine
-olion osoittimen avulla. Car
-luokka ei omista Engine
-oliota; se ainoastaan säilyttää viitteen siihen. Tämä mahdollistaa sen, että Engine
-instanssi voi olla olemassa itsenäisesti Car
-oliosta ja sitä voidaan jakaa useiden instanssien kesken tarvittaessa.
Koostamisen ja aggregaation valinta
Ohjelmistojärjestelmiä suunniteltaessa on tärkeää harkita tarkkaan, käytetäänkö koostamista vai aggregaatiota luokkien ja olioiden välisten suhteiden perusteella.
Car
- ja Engine
-luokkien yhteydessä koostaminen olisi sopivampi vaihtoehto. Jokaisella autolla on tyypillisesti oma moottorinsa, ja moottori on olennainen osa itse autoa. Lisäksi tämä estää Engine
-olion jakamisen tai uudelleenkäytön useiden objects
-olioiden kesken, mikä on myös järkevää.
Kiitos palautteestasi!