Introducción a Objetos Complejos y Composición

Un objeto es una unidad básica de la Programación Orientada a Objetos y representa las entidades de la vida real. Los objetos complejos son los 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, batería, pantalla, sensores, etc. En este artículo, comprenderemos el uso y la implementación de un objeto complejo. 
En los lenguajes de programación orientados a objetos, la composición de objetos se usa para objetos que tienen un «tiene-a»relación entre sí. Por ejemplo, un móvil tiene una batería, tiene un sensor, tiene una pantalla, etc. Por lo tanto, el objeto complejo se denomina objeto completo o principal, mientras que un objeto más simple a menudo se denomina objeto secundario. En este caso, todos los objetos o componentes son los objetos secundarios que juntos forman el objeto complejo (móvil). 

Las clases que tienen miembros de datos de tipo incorporado funcionan muy bien para clases simples. Sin embargo, en la programación del mundo real, el producto o software se compone de muchos objetos y clases diferentes más pequeños. En el ejemplo anterior, el teléfono móvil constaba de varios objetos diferentes que, en conjunto, formaban un teléfono móvil completo. Dado que cada uno de esos objetos realiza una tarea diferente, todos se mantienen en diferentes clases. Por lo tanto, este concepto de objetos complejos se utiliza en la mayoría de los escenarios del mundo real. Las ventajas de utilizar este concepto son: 

  • Cada clase individual puede ser simple y directa.
  • Una clase puede enfocarse en realizar una tarea específica y obtener un comportamiento.
  • La clase es más fácil de escribir, depurar, comprender y utilizar por otros programadores.
  • Mientras que las clases más simples pueden realizar todas las operaciones, la clase compleja se puede diseñar para coordinar el flujo de datos entre las clases más simples.
  • Disminuye la complejidad general del objeto complejo porque la tarea principal del objeto complejo sería delegar tareas a los subobjetos, que ya saben cómo hacerlo.
  • Por ejemplo, si queremos cambiar la clase de batería en el objeto móvil, con la ayuda de la composición, los cambios solo se realizan en la clase de batería y todo el objeto móvil funciona bien con los cambios actualizados.

Ámbito de uso: aunque no existen reglas bien definidas para establecer cuándo un programador debe usar la composición, como regla general, cada clase debe construirse para realizar una sola tarea. La tarea debe ser realizar alguna parte de la manipulación o ser responsable de coordinar otras clases, pero no puede realizar ambas tareas. Esto aumenta enormemente el mantenimiento del código y las actualizaciones futuras porque, cuando deseamos actualizar una característica o un objeto, solo se necesita actualizar la clase que pertenece a esa funcionalidad específica. Y también, es muy fácil hacer un seguimiento de los errores en el programa. Por ejemplo:

C++

// C++ program to implement a
// composition
 
// A point class
class Point {
private:
    int x;
    int y;
};
 
// Every location has a point.
// Every point has two coordinates.
// The above class's functionality
// is only to store the coordinates
// in two variables. Any functionality
// using the points is implemented
// here
class Location {
    Private : Point Source;
    Point Destination
};

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

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

C++

// C++ program to implement a
// composite class
using namespace std;
#include <iostream>
 
// Class with a private parameter
// and the getters and setters
class One {
 
    // Private parameter
private:
    int num;
 
    // Public setter and getter
public:
    void set(int i)
    {
        num = i;
    }
    int get()
    {
        return num;
    }
};
 
// Another class
class Two {
 
    // Public method and the object
    // of the previous class
public:
    One O;
    void show()
    {
        cout << "\n Number = "
             << O.get();
    }
};
 
// Driver code
int main()
{
    // Creating the object of
    // class Two
    Two T;
 
    // Perform some operation using
    // the object of One in this class
    T.O.set(100);
    T.show();
}
Producción: 

Number = 100

 

Explicación : tenga en cuenta que en el programa, la clase Dos tiene un objeto de clase Uno. Para acceder a un miembro de Uno, debemos usar el objeto de Dos como en TOset(100). Además, dado que num es un miembro privado de One, debemos usar una función pública para acceder a su valor.
 

Publicación traducida automáticamente

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

Categories C++

Deja una respuesta

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