Композиции объектов
Объект является основной единицей объектно-ориентированного программирования и представляет реальные объекты. Сложные объекты — это объекты, которые построены из более мелких или совокупности объектов. Например, мобильный телефон состоит из различных объектов, таких как камера, аккумулятор, экран, датчики и т. Д. Этот процесс создания сложных объектов из более простых называется композицией объектов.
В объектно-ориентированных языках программирования объектная композиция используется для объектов, которые имеют взаимосвязь друг с другом. Поэтому сложный объект называется целым или родительским объектом, тогда как более простой объект часто называют дочерним объектом.
Синтаксис:
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. Агрегация: агрегация также является отношением «часть-целое», но здесь в агрегации части могут принадлежать более чем одному объекту одновременно, и весь объект не несет ответственности за существование частей. Чтобы квалифицироваться как агрегация, весь объект и его часть должны иметь следующие отношения:
- Деталь (член) является частью объекта (класса).
- Часть (член) может принадлежать более чем одному объекту (классу) одновременно.
- Часть (член) не существует, управляемая объектом (классом).
- Часть (член) не знает о существовании объекта (класса).
Преимущества объектной композиции
Использование композиции объектов может дать следующие преимущества:
- Повторное использование существующих кодов: композиция объектов позволяет повторно использовать существующий код без необходимости моделирования отношения » есть-есть«, как это обычно делается при наследовании.
- Чистые API-интерфейсы дизайна: использование композиции объектов может помочь в разработке чистых и скомпонованных API. Это связано с тем, что при составлении класса легче решить, станет ли указанный класс частью API или будет скрыт.
- Изменение реализации класса, используемого в композиции, без использования внешних клиентов: композиция также позволяет упростить изменение и адаптацию кода при необходимости. Внутренние классы можно изменять без каких-либо побочных эффектов, а изменения можно обрабатывать внутри.
Делегирование объекта
Делегирование объекта означает использование объекта другого класса в качестве члена класса другого класса. Это известно как делегирование объекта. Делегирование может быть альтернативой наследованию, но в наследовании существует отношение есть, а в делегировании нет отношения наследования между классами.
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 | Композиция имеет некоторые последствия для жизненного цикла объекта, родительский объект владеет дочерним объектом, а у дочернего объекта нет особых причин для собственного существования. | Делегация не подразумевает этого. |