引言
耦合性:参考文章
下面就通过耦合性的由弱到强,依赖、关联、聚合、组合、继承(泛化)、实现。(总结:衣冠剧组呈现)
一、依赖Dependency
例:A类是B类的成员函数的参数、返回值(局部变量)
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
1 2 3 4 5 6 7 8 9
| class A{}; class B{ public: void FunB(A& a){} A GetA() { return A(); } };
|
二、关联Association
例:A类是B类的一个成员属性
(1)弱关联
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class A{}; class B{ private: A* pa; public: B(A* ptr):pa(ptr) {} ~B(){} }; int main() { A a; B b(&a); return 0; }
|
(2)强关联
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class A{}; class B{ private: A& aref; public: B(A& a):aref(a) {}
~B(){} }; int main() { A a; B b(a); return 0; }
|
三、聚合Aggregation
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class point{ private: int _x; int _y; public: point(int x, int y): _x(x), _y(y){} ~point(){} }; class Circle{ private: point center; int radius; public: Circle():center(pointer(0, 0)), radius(0) {} };
|
四、组合Composition
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
1 2 3 4 5 6 7 8 9 10
| class body{}; class soul{}; class human{ private: body _bd; soul _sl; public: human(const body& bd, const soul& sl):_bd(bd), _sl(sl) {} };
|
五、继承Generalization
![在这里插入图片描述](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
1 2
| class Animal{}; class Bird : public Animal{};
|
六、实现Realization
实现对应的是面向对象中的”接口”,即动物都要移动,但是每种移动的方式不一样,鸟要实现自己独有的移动的方法。
在C++中,接口通过的纯虚函数来实现,C++的多态就是通过虚函数来实现的。
1 2 3 4 5 6 7 8 9
| class Animal{ public: vitual void move(); }; class Bird: public Animal{ void move(){ } };
|
参考文章:
面向对象的类关系及其C++实现
设计模式中类的关系:依赖、关联、聚合、组合、继承、实现。耦合度依次递增