En la programación orientada a objetos , la agregación (o, como también se le llamó anteriormente, delegación ) significa la técnica de crear una nueva clase a partir de clases existentes al incluirlas. La agregación también se denomina a menudo "relación de propiedad" en el sentido de que "un automóvil tiene una carrocería, ruedas y un motor".
Los objetos anidados de una nueva clase generalmente se declaran privados, lo que los hace inaccesibles para los programadores de aplicaciones que trabajan con la clase. Por otro lado, el creador de la clase puede modificar estos objetos sin romper el código del cliente existente. Además, reemplazar objetos anidados en el tiempo de ejecución del programa le permite cambiar dinámicamente su comportamiento. El mecanismo de herencia no tiene esta flexibilidad, ya que las clases derivadas están sujetas a restricciones que se comprueban en tiempo de compilación.
Sobre la base de la agregación, se implementa la técnica de delegación , cuando la tarea asignada a un objeto externo se delega a un objeto interno que se especializa en resolver problemas de este tipo.
Agregación : profesores - facultades, profesores quedan para vivir después de la destrucción de la facultad
Composición : universidad - facultades, facultades sin universidad mueren.
La agregación (agregación por referencia) es una relación parte-todo entre dos objetos iguales, cuando un objeto (contenedor) tiene un vínculo con otro objeto. Ambos objetos pueden existir de forma independiente: si el contenedor se destruye, su contenido no.
profesor de clase ; departamento de clase { privado : Profesor * miembros [ 5 ]; // Agregación, porque sin operador de eliminación }; class Ehe // Ejemplo de agregación { privado : Persona & _socio1 ; // Entaltener Teil. // Persona de agregación & _partner2 ; // Entaltener Teil. // Agregación pública : // Ehe constructor ( Persona & socio1 , Persona & socio2 ) : _socio1 ( socio1 ), _socio2 ( socio2 ) { } };La composición (agregación por valor) es una variante más estricta de agregación, cuando el objeto incluido solo puede existir como parte del contenedor. Si se destruye el contenedor, también se destruirá el objeto incluido.
departamentoclase ; _ universidad de clase { privado : facultad del departamento [ 20 ]; // composición }; clase Carburador ; coche de clase { privado : Carburador * itsCarb ; public : Automóvil () { itsCarb = nuevo Carburador ();} virtual ~ Automóvil () { eliminar itsCarb ;} // Composición desde el objeto itsCarb se eliminará };