Segmentointi ja Aggregointi
Pyyhkäise näyttääksesi valikon
Kun luodaan ylläpidettävää ja joustavaa ohjelmistoa, on prosessissa otettava huomioon monia asioita, erityisesti olio-ohjelmoinnissa. Koostaminen ja aggregaatio 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älle class ja niillä on vahva omistussuhde. Kun sisältävä object tuhotaan, myös sen koostetut osat tuhotaan. Esimerkiksi:
Car.h
Engine.h
123456789101112#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-koostumuksen muoto, jossa class sisältää object muiden classes-olioita, mutta sisältyvien instanssien suhde on heikompi kuin koostumuksessa. Aggregaatiossa sisältyvät jäsen-classes voivat olla olemassa itsenäisesti ja niitä voidaan jakaa useiden classes-luokkien kesken.
Car.h
Engine.h
123456789101112131415#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 autoa itseään. Lisäksi tämä estää Engine-olion jakamisen tai uudelleenkäytön useiden objects-olioiden kesken, mikä on myös järkevää.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme