學習面向對象分析(OOD)與面向對象設計(OOD),在擷取并列出概念類之後,必須要明确類與類之間的關系。這些關系由弱到強大緻分為一下幾種:依賴、關聯、聚合、組合、繼承。下面将分别以我最簡單的語言進行概述。
首先上UML圖和代碼:
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的靜态方法
駕駛員從駕駛學校學習駕車技巧,調用DrivingSchool靜态方法“You can drive.”
2.關聯
A類需要B類作為它的屬性,以進行一定的讀操作。
駕駛學校存放汽車Car資訊。Car同樣需記錄所屬機關。
3.聚合
A類在一定情形下屬于B類内,即A類可以獨立于B類存在。
汽車和駕駛員可以獨立存在,但是駕駛員可以控制汽車。
4.組合
A類屬于B類,即A類不可以獨立存在。
應特别注意聚合與組合的差別,在C++實作中有明顯的差別
車輪在汽車消失後即刻被銷毀掉。
5.繼承
A類擁有B類全部屬性,并且可以額外擁有一些B類沒有的特征。
Car車輛繼承了Vehicle載具的特性。
接下來将深入設計模式的環節。由于Java還不是很熟悉,仍将以C++的形式為大家呈現。