Conteúdo do Curso
C++ Poo
C++ Poo
Segmentação e Agregação
Ao criar um software que seja sustentável e flexível, diversos fatores devem ser considerados durante o processo, especialmente na programação orientada a objetos. Composição e agregação são conceitos fundamentais que possibilitam a criação de sistemas complexos a partir de componentes mais simples e fazem parte do paradigma de encapsulamento.
Composição
Composição é uma técnica de design em que uma class
contém objects
de outras classes
como variáveis membro. Esses membros são componentes essenciais da class
que os contém e possuem uma relação de forte propriedade. Quando o object
que contém é destruído, suas partes compostas também são destruídas. Por exemplo:
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 };
A classe Car
compõe um objeto Engine
. Quando um objeto Car
é criado, ele automaticamente cria uma instância de Engine
como parte de sua composição.
Agregação
Agregação é outra forma de composição de object
onde uma class
contém object
de outras classes
, mas as instâncias contidas possuem uma relação mais fraca em comparação à composição. Na agregação, as classes
membros contidas podem existir independentemente e podem ser compartilhadas entre várias 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 };
A classe Car
agrega um objeto Engine
usando um ponteiro. A classe Car
não possui o objeto Engine
; ela apenas mantém uma referência a ele. Isso permite que a instância de Engine
exista independentemente do objeto Car
e seja compartilhada entre várias instâncias, se necessário.
Escolhendo Entre Composição e Agregação
Ao projetar sistemas de software, é fundamental considerar cuidadosamente se deve ser utilizada composição ou agregação com base nos relacionamentos entre classes e objetos.
No contexto das classes Car
e Engine
, o uso de composição seria mais apropriado. Cada carro normalmente possui seu próprio motor, e o motor é uma parte integrante do próprio carro. Além disso, isso impede que o Engine
seja compartilhado ou reutilizado entre vários objetos objects
, o que também faz sentido.
Obrigado pelo seu feedback!