天天看點

C++實作類與類之間簡單關系(依賴,關聯,聚合,組合,繼承)1.依賴2.關聯3.聚合4.組合5.繼承

學習面向對象分析(OOD)與面向對象設計(OOD),在擷取并列出概念類之後,必須要明确類與類之間的關系。這些關系由弱到強大緻分為一下幾種:依賴、關聯、聚合、組合、繼承。下面将分别以我最簡單的語言進行概述。

首先上UML圖和代碼:

C++實作類與類之間簡單關系(依賴,關聯,聚合,組合,繼承)1.依賴2.關聯3.聚合4.組合5.繼承
class Wheel {
	int size;
public:
	Wheel(int sz) : size(sz) {};
	int getSz() { return size; };
};

class Vehicle {
	int weight;
public:
	Vehicle(int wt) : weight(wt) {};
};

class Car : public Vehicle{
	Wheel *wh;
public:
	Car(int wt, int sz) : Vehicle(wt), wh(NULL) 
	{ wh = new Wheel(4); };
	int getSz() { return wh->getSz(); };
	~Car() { delete wh; };
};

class DrivingSchool {
	Car coachCar[10];
public:
    static void Drive() {
		cout << "You can drive." << endl;
	}
}; 

class Driver {
	Car* car_ptr;
	int learnt;
public:
	Driver(Car *pc) : car_ptr(pc), learnt(0) {};

	void driverLearn() { DrivingSchool::Drive(); }
};

int main()
{
	Car c = Car(10000, 5);
	Driver drv(&c);
	
	drv.driverLearn();
	return 0;
}
           

1.依賴

A類使用到了B類一部分屬性或方法。不會主動改變B類内的内容。

代碼化一些:

  • 類A把類B的執行個體作為方法裡的參數使用
  • 類A的某個方法裡使用了類B的執行個體作為局部變量
  • 類A調用了類B的靜态方法
C++實作類與類之間簡單關系(依賴,關聯,聚合,組合,繼承)1.依賴2.關聯3.聚合4.組合5.繼承

駕駛員從駕駛學校學習駕車技巧,調用DrivingSchool靜态方法“You can drive.”

2.關聯

A類需要B類作為它的屬性,以進行一定的讀操作。

C++實作類與類之間簡單關系(依賴,關聯,聚合,組合,繼承)1.依賴2.關聯3.聚合4.組合5.繼承

駕駛學校存放汽車Car資訊。Car同樣需記錄所屬機關。

3.聚合

 A類在一定情形下屬于B類内,即A類可以獨立于B類存在。

C++實作類與類之間簡單關系(依賴,關聯,聚合,組合,繼承)1.依賴2.關聯3.聚合4.組合5.繼承

汽車和駕駛員可以獨立存在,但是駕駛員可以控制汽車。

4.組合

A類屬于B類,即A類不可以獨立存在。

應特别注意聚合與組合的差別,在C++實作中有明顯的差別

C++實作類與類之間簡單關系(依賴,關聯,聚合,組合,繼承)1.依賴2.關聯3.聚合4.組合5.繼承

車輪在汽車消失後即刻被銷毀掉。

5.繼承

A類擁有B類全部屬性,并且可以額外擁有一些B類沒有的特征。

C++實作類與類之間簡單關系(依賴,關聯,聚合,組合,繼承)1.依賴2.關聯3.聚合4.組合5.繼承

Car車輛繼承了Vehicle載具的特性。

接下來将深入設計模式的環節。由于Java還不是很熟悉,仍将以C++的形式為大家呈現。