Contenido del Curso
POO en C++
POO en C++
Segmentación y Agregación
Al crear software que sea mantenible y flexible, hay muchos aspectos a considerar en el proceso, especialmente en la programación orientada a objetos. Composición y agregación son conceptos fundamentales que permiten la creación de sistemas complejos a partir de componentes más simples y forman parte del paradigma de encapsulamiento.
Composición
La composición es una técnica de diseño donde una class
contiene objects
de otras classes
como variables miembro. Estos miembros son componentes esenciales de la class
contenedora y existe una relación de fuerte propiedad. Cuando el object
contenedor es destruido, sus partes compuestas también se destruyen. Por ejemplo:
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 clase Car
compone un objeto Engine
. Cuando se crea un objeto Car
, automáticamente se crea una instancia de Engine
como parte de su composición.
Agregación
Agregación es otra forma de composición de object
donde una class
contiene object
de otras classes
, pero las instancias contenidas tienen una relación más débil en comparación con la composición. En la agregación, los miembros classes
contenidos pueden existir de forma independiente y pueden ser compartidos entre varias 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 clase Car
agrega un objeto Engine
utilizando un puntero. La clase Car
no es propietaria del objeto Engine
; simplemente mantiene una referencia a él. Esto permite que la instancia de Engine
exista de manera independiente al objeto Car
y pueda ser compartida entre múltiples instancias si es necesario.
Elección entre composición y agregación
Al diseñar sistemas de software, es fundamental considerar cuidadosamente si se debe utilizar composición o agregación según las relaciones entre clases y objetos.
En el contexto de las clases Car
y Engine
, el uso de composición sería más apropiado. Normalmente, cada coche tiene su propio motor, y el motor es una parte integral del propio coche. Además, esto impide que el Engine
sea compartido o reutilizado entre varios objetos objects
, lo cual también resulta lógico.
¡Gracias por tus comentarios!