对象是面向对象编程的基本单元,代表现实生活中的实体。复杂对象是从较小的对象或对象集合构建的对象。例如,移动电话由各种对象组成,例如照相机,电池,屏幕,传感器等。在本文中,我们将了解复杂对象的用法和实现。
在面向对象的编程语言中,对象组合用于彼此之间具有“ has-a”关系的对象。例如,移动设备有一个电池,一个传感器,一个屏幕等。因此,复杂对象称为整个对象或父对象,而较简单的对象通常称为子对象。在这种情况下,所有对象或组件都是一起构成复杂对象(移动设备)的子对象。
具有内置类型的数据成员的类对于简单的类确实可以很好地工作。但是,在实际编程中,产品或软件包含许多不同的较小对象和类。在上面的示例中,移动电话由各种不同的对象组成,这些对象总体上构成了完整的移动电话。由于这些对象中的每个对象执行不同的任务,因此它们都保留在不同的类中。因此,在大多数实际方案中都使用了这种复杂对象的概念。使用此概念的优点是:
- 每个单独的类都可以简单明了。
- 一堂课可以专注于执行一项特定任务并获得一项行为。
- 该类更易于其他程序员编写,调试,理解和使用。
- 尽管较简单的类可以执行所有操作,但是可以设计复杂的类来协调较简单类之间的数据流。
- 它降低了复杂对象的整体复杂性,因为复杂对象的主要任务是将任务委派给已经知道如何执行子任务的子对象。
最重要的优点是,如果必须在子类中进行任何更改,则只能更改子类,而不是更改整个父类。
- 例如,如果我们想在移动对象中更改电池类别,则只能在电池类别中进行更改,并且整个移动对象都可以在更新后的更改中正常工作。
使用范围:尽管没有明确的规则来规定程序员何时必须使用该组合,但是作为经验法则,应该构建每个类来完成单个任务。任务应该是执行部分操作或负责协调其他类,但不能同时执行这两项任务。这极大地增加了代码的维护和将来的更新,因为当我们希望更新功能或对象时,仅需要更新与该特定功能有关的类。而且,很容易跟踪程序中的错误。例如:
// 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 fuctionality
// using the points is implemented
// here
class Location {
Private : Point Source;
Point Destination
};
在此处给定的类中, Location使用Point类的对象作为其数据成员。因此,位置是一个复杂的类,它使用简单的Point类。让我们看一下利用该组合的程序。
下面是一个复合类的实现:
// C++ program to implement a
// composite class
using namespace std;
#include
// 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();
}
Number = 100
说明:请注意,在程序中,类2具有一个对象One。要访问One的成员,我们必须使用TOset(100)中的Two对象。此外,由于num是One的私有成员,因此我们必须使用公共函数来访问其值。