一篇写的很好的解释依赖,关联,聚合,组合,继承的文章https://blog.csdn.net/killfat/article/details/81275798
学习面向对象分析(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载具的特性。