Contenuti del Corso
OOP in C++
OOP in C++
Segmentazione e Aggregazione
Quando si crea un software che sia manutenibile e flessibile, ci sono molti aspetti da considerare nel processo, specialmente nella programmazione orientata agli oggetti. Composizione e aggregazione sono concetti fondamentali che permettono la creazione di sistemi complessi a partire da componenti più semplici e fanno parte del paradigma dell'incapsulamento.
Composizione
La composizione è una tecnica di progettazione in cui una class
contiene objects
di altre classes
come variabili membro. Questi membri sono componenti essenziali della class
contenitore e presentano una forte relazione di possesso. Quando l'object
contenitore viene distrutto, anche le sue parti composte vengono distrutte. Ad esempio:
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 };
La classe Car
compone un oggetto Engine
. Quando viene creato un oggetto Car
, viene automaticamente creata un'istanza di Engine
come parte della sua composizione.
Aggregazione
Aggregazione è un'altra forma di composizione di object
in cui una class
contiene object
di altre classes
, ma le istanze contenute hanno una relazione più debole rispetto alla composizione. Nell'aggregazione, le classes
membri contenute possono esistere indipendentemente e possono essere condivise tra più 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 };
La classe Car
aggrega un oggetto Engine
utilizzando un puntatore. La classe Car
non possiede l'oggetto Engine
; si limita a mantenere un riferimento ad esso. Questo permette all'istanza di Engine
di esistere indipendentemente dall'oggetto Car
e di essere condivisa tra più istanze se necessario.
Scelta tra Composizione e Aggregazione
Durante la progettazione di sistemi software, è fondamentale valutare attentamente se utilizzare la composizione o l'aggregazione in base alle relazioni tra classi e oggetti.
Nel contesto delle classi Car
e Engine
, l'utilizzo della composizione sarebbe più appropriato. Ogni auto di solito ha il proprio motore, e il motore è una parte integrante dell'auto stessa. Inoltre, ciò impedisce che l'oggetto Engine
venga condiviso o riutilizzato tra più oggetti objects
, il che risulta coerente.
Grazie per i tuoi commenti!