Составление объектов-делегирование в C++ с примерами

Двумерный вектор в C++ Программирование и разработка

Композиции объектов

Объект является основной единицей объектно-ориентированного программирования и представляет реальные объекты. Сложные объекты — это объекты, которые построены из более мелких или совокупности объектов. Например, мобильный телефон состоит из различных объектов, таких как камера, аккумулятор, экран, датчики и т. Д. Этот процесс создания сложных объектов из более простых называется композицией объектов.
В объектно-ориентированных языках программирования объектная композиция используется для объектов, которые имеют взаимосвязь друг с другом. Поэтому сложный объект называется целым или родительским объектом, тогда как более простой объект часто называют дочерним объектом.

Синтаксис:

class A
{
// body of a class
};

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

В приведенных выше классах B использует объекты класса A в качестве членов данных. Следовательно, B — сложный класс, который использует простой класс A. Давайте посмотрим на программу, которая использует композицию.

Ниже представлена ​​реализация составного класса:

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 memebers
    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;
}

Вывод:

Constructor A(int a) is invoked
Data in object of class B = 25
Data in member object of class A in class B = 25

Типы композиций объектов

Есть два основных подтипа композиции объекта:

1. Композиция. Композиционные отношения — это отношения «часть-целое», в которых часть может быть только частью одного объекта за раз. Это означает, что деталь создается при создании объекта и уничтожается при уничтожении объекта. Чтобы квалифицироваться как композиция, объект и часть должны иметь следующие отношения:

  • Деталь (член) является частью объекта (класса).
  • Деталь (член) может принадлежать только одному объекту (классу).
  • Часть (член) существует под управлением объекта (класса).
  • Часть (член) не знает о существовании объекта (класса).

Есть несколько вариантов правила создания и разрушения деталей:

  • Композиция может избегать создания некоторых частей до тех пор, пока они не понадобятся.
  • Композиция может использовать в качестве входных данных переданную ей часть, а не создавать саму часть.
  • Композиция может делегировать разрушение своих частей какому-либо другому объекту.

2. Агрегация: агрегация также является отношением «часть-целое», но здесь в агрегации части могут принадлежать более чем одному объекту одновременно, и весь объект не несет ответственности за существование частей. Чтобы квалифицироваться как агрегация, весь объект и его часть должны иметь следующие отношения:

  • Деталь (член) является частью объекта (класса).
  • Часть (член) может принадлежать более чем одному объекту (классу) одновременно.
  • Часть (член) не существует, управляемая объектом (классом).
  • Часть (член) не знает о существовании объекта (класса).

Преимущества объектной композиции

Использование композиции объектов может дать следующие преимущества:

  1. Повторное использование существующих кодов: композиция объектов позволяет повторно использовать существующий код без необходимости моделирования отношения » есть-есть«, как это обычно делается при наследовании.
  2. Чистые API-интерфейсы дизайна: использование композиции объектов может помочь в разработке чистых и скомпонованных API. Это связано с тем, что при составлении класса легче решить, станет ли указанный класс частью API или будет скрыт.
  3. Изменение реализации класса, используемого в композиции, без использования внешних клиентов: композиция также позволяет упростить изменение и адаптацию кода при необходимости. Внутренние классы можно изменять без каких-либо побочных эффектов, а изменения можно обрабатывать внутри.

Делегирование объекта

Делегирование объекта означает использование объекта другого класса в качестве члена класса другого класса. Это известно как делегирование объекта. Делегирование может быть альтернативой наследованию, но в наследовании существует отношение есть, а в делегировании нет отношения наследования между классами.

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;
}

Вывод:

The Delegate

Преимущества делегирования объекта:

  • Класс повторного использования можно изменить без изменения класса повторного использования.
  • Несколько повторно используемых классов могут совместно использовать повторно используемые переменные класса одновременно.
  • Переменные и методы повторного использования и повторно используемые классы могут находиться на разных компьютерах.
  • Он работает на языках с единичным наследованием.

Композиция объекта против делегирования объекта

S Нет. Состав объекта Делегирование объекта
1 Речь идет об отношениях между объектами. Речь идет о передаче работы с одного объекта на другой.
2 В композиции методы внутреннего объекта могут использоваться только в частном порядке и не открываться повторно. Делегирование предполагает методы реэкспорта.
3 Композиция имеет некоторые последствия для жизненного цикла объекта, родительский объект владеет дочерним объектом, а у дочернего объекта нет особых причин для собственного существования. Делегация не подразумевает этого.

 

Читайте также:  Rollup.js : введение в сборщик JavaScript
Оцените статью
bestprogrammer.ru
Добавить комментарий