Composición de objetos-Delegación en C++ con ejemplos

Composiciones de objetos

Un objeto es una unidad básica de la Programación Orientada a Objetos y representa entidades de la vida real. Los objetos complejos son objetos que se construyen a partir de objetos más pequeños o una colección de objetos. Por ejemplo, un teléfono móvil se compone de varios objetos como una cámara, una batería, una pantalla, sensores, etc. Este proceso de construir objetos complejos a partir de otros más simples se denomina composición de objetos .
En los lenguajes de programación orientados a objetos, la composición de objetos se usa para objetos que tienen una relación de «tiene un» entre sí. Por lo tanto, el objeto complejo se llama el objeto completo o principal, mientras que un objeto más simple a menudo se denomina objeto secundario.

Sintaxis:

class A
{
    // cuerpo de una clase
};

clase B
{
    A objA;
    public:
   B(arg-list) : objA(arg-list1);
};

En las clases dadas arriba, B usa objetos de la clase A como sus miembros de datos. Por lo tanto, B es una clase compleja que usa una clase A simple. Echemos un vistazo al programa que hace uso de la composición.

A continuación se muestra la implementación de la clase compuesta:

C++

#include <iostream>
using namespace std;
  
// Simple class
class A {
public:
    int x;
  
    // COnstructor initializing
    // the data members
    A() { x = 0; }
  
    A(int a)
    {
        cout << "Constructor A(int a) is invoked" << endl;
        x = a;
    }
};
  
// Complex class
class B {
    int data;
    A objA;
  
public:
    // COnstructor initializing the
    // data members
    B(int a)
        : objA(a)
    {
        data = a;
    }
  
    // Function to print values
    // of data members in class
    // A and B
    void display()
    {
        cout << "Data in object of class B = " << data
             << endl;
        cout << "Data in member object of "
             << "class A in class B = " << objA.x;
    }
};
  
// Driver code
int main()
{
    // Creating object of class B
    B objb(25);
  
    // Invoking display function
    objb.display();
    return 0;
}

Producción:

Se invoca al constructor A(int a)
Datos en objeto de clase B = 25
Datos en objeto miembro de clase A en clase B = 25

Tipos de composiciones de objetos:

Hay dos subtipos básicos de composición de objetos:

1. Composición: Las relaciones de composición son relaciones parte-todo donde una parte solo puede ser parte de un objeto a la vez. Esto significa que la parte se crea cuando se crea el objeto y se destruye cuando se destruye el objeto. Para calificar como una composición, el objeto y una parte deben tener la siguiente relación:

  1. La parte (miembro) es parte del objeto (clase).
  2. La parte (miembro) solo puede pertenecer a un objeto (clase).
  3. La parte (miembro) tiene su existencia gestionada por el objeto (clase).
  4. La parte (miembro) no sabe de la existencia del objeto (clase).

Hay algunas variaciones en la regla de crear y destruir partes: 

  1. Una composición puede evitar crear algunas partes hasta que se necesiten.
  2. Una composición puede optar por utilizar una parte que se le ha dado como entrada en lugar de crear la parte en sí.
  3. Una composición puede delegar la destrucción de sus partes a algún otro objeto.

2. Agregación: La agregación también es una relación parte-todo, pero aquí en la agregación, las partes pueden pertenecer a más de un objeto a la vez, y el objeto completo no es responsable de la existencia de las partes. Para calificar como agregación, un objeto completo y su parte deben tener las siguientes relaciones:

  1. La parte (miembro) es parte del objeto (clase).
  2. La parte (miembro) puede pertenecer a más de un objeto (clase) a la vez.
  3. La parte (miembro) no tiene su existencia gestionada por el objeto (clase).
  4. La parte (miembro) no sabe de la existencia del objeto (clase).

Beneficios de la composición de objetos:

El uso de la composición de objetos puede proporcionar los siguientes beneficios:

  1. Reutilizar códigos existentes: la composición de objetos permite reutilizar el código existente sin necesidad de modelar una relación es-un como suele hacerse en la herencia.
  2. API de diseño limpio: el uso de la composición de objetos puede ayudar a diseñar API limpias y compuestas. Esto se debe a que cuando se compone la clase, es más fácil decidir si la clase a la que se hace referencia pasará a formar parte de la API o se ocultará.
  3. Cambio en la implementación de la clase utilizada en la composición sin necesidad de clientes externos: La composición también permite que el código sea más fácil de cambiar y adaptar si es necesario. Las clases internas se pueden cambiar sin efectos secundarios y los cambios se pueden manejar internamente.

Delegación de objetos

Delegación de objetos significa usar el objeto de otra clase como miembro de otra clase. Se conoce como delegación de objetos. La delegación puede ser una alternativa a la herencia, pero en una herencia hay una relación, pero en la delegación no hay una relación de herencia entre las clases.

C++

// C++ program to illustrate the
// Object Delegation
#include <iostream>
using namespace std;
class First {
public:
    void print() { cout << "The Delegate"; }
};
class Second {
    // Creating instance of the class
    First ob;
  
public:
    void print() { ob.print(); }
};
  
// Driver Code
int main()
{
    Second ob1;
    ob1.print();
    return 0;
}

Producción:

el delegado

Beneficios de la delegación de objetos:

  1. La clase de reutilización se puede cambiar sin cambiar la clase de reutilización.
  2. Múltiples clases de reutilización pueden compartir variables de clase reutilizadas simultáneamente.
  3. Las variables y métodos de reutilización y las clases reutilizadas pueden estar en computadoras separadas.
  4. Funciona en lenguajes de herencia simple.

Composición de objetos frente a delegación de objetos

No. S. Composición de objetos Delegación de objetos
1 Se trata de relaciones entre objetos. Se trata de pasar trabajo de un objeto a otro.
2 En la composición, los métodos del objeto interno pueden usarse solo en privado y no volver a exponerse. La delegación implica métodos de reexportación.
3 La composición tiene algunas implicaciones para el ciclo de vida del objeto, el objeto padre es dueño del hijo y el hijo no tiene muchas razones para existir por sí mismo. La delegación no tiene esta implicación.

Publicación traducida automáticamente

Artículo escrito por akshaysobti15 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *