UML类图、6种关系

举报
用户已注销 发表于 2021/11/19 01:32:45 2021/11/19
【摘要】 目录 一,类图 二,类的6种关系 1,泛化 2,实现 3,组合 4,聚合 5,关联 6,依赖 三,总结 一,类图 类图中,每个类由3个部分组成,上面的是类名,中间的是属性,下面的是方法。 属性和方法可以用修饰符修饰:加号(+)表示public;减号(-)表示private;井号(#)表示protected ...

目录

一,类图

二,类的6种关系

1,泛化

2,实现

3,组合

4,聚合

5,关联

6,依赖

三,总结


一,类图

类图中,每个类由3个部分组成,上面的是类名,中间的是属性,下面的是方法。

属性和方法可以用修饰符修饰:加号(+)表示public;减号(-)表示private;井号(#)表示protected

二,类的6种关系

类的6种关系:泛化 实现 组合 聚合 关联 依赖

6种关系依次减弱。

参考:UML类图几种关系的总结

1,泛化

泛化是一种继承关系,如老虎类继承动物类,动物是老虎的泛化,老虎是动物的特化。


  
  1. class Animal {
  2. public:
  3. Animal() {
  4. posX = posY = 0;
  5. }
  6. void move(int dx, int dy) {
  7. posX += dx, posY += dy;
  8. }
  9. void getPos() {
  10. cout << "x=" << posX << ", y=" << posY << endl;
  11. }
  12. private:
  13. int posX, posY;
  14. };
  15. class Tiger :public Animal {
  16. public:
  17. Tiger() {
  18. this->name = "Tiger";
  19. }
  20. string name;
  21. };
  22. int main()
  23. {
  24. Tiger t;
  25. cout << t.name << endl;
  26. t.move(3, 4);
  27. t.getPos();
  28. return 0;
  29. }

2,实现

实现关系是子类实现了接口类。

在JAVA中,有专门的接口类和实现的关键字。

在C++中,用纯虚类作为接口类,而且纯虚类也没有关键字,包含纯虚函数的就是纯虚类。

 老虎类实现了攀爬接口类。


  
  1. class Animal {
  2. public:
  3. Animal() {
  4. posX = posY = 0;
  5. }
  6. void move(int dx, int dy) {
  7. posX += dx, posY += dy;
  8. }
  9. void getPos() {
  10. cout << "x=" << posX << ", y=" << posY << endl;
  11. }
  12. private:
  13. int posX, posY;
  14. };
  15. class Climb {
  16. public:
  17. Climb() {
  18. posZ = 0;
  19. }
  20. virtual void GoClimb(int dz) = 0;
  21. void getHeight() {
  22. cout << "z=" << posZ << endl;
  23. }
  24. protected:
  25. int posZ;
  26. };
  27. class Tiger :public Animal, public Climb {
  28. public:
  29. Tiger() {
  30. this->name = "Tiger";
  31. }
  32. string name;
  33. void GoClimb(int dz) {
  34. posZ += dz;
  35. }
  36. };
  37. int main()
  38. {
  39. Tiger t;
  40. cout << t.name << endl;
  41. t.move(3, 4);
  42. t.getPos();
  43. t.GoClimb(5);
  44. t.getHeight();
  45. return 0;
  46. }

3,组合

组合是整体与部分的关系,个体没有独立的生命周期。

组合是把个体对象作为整体类的属性。

 

组合关系中,有1对1的,也有1对多的。 

每只老虎有4条腿,1个头。


  
  1. class Leg {
  2. protected:
  3. int len;
  4. };
  5. class Head {
  6. protected:
  7. int size;
  8. };
  9. class Tiger {
  10. public:
  11. Tiger() {
  12. this->name = "Tiger";
  13. }
  14. private:
  15. string name;
  16. Leg leg[4];
  17. Head head;
  18. };

4,聚合

聚合也是整体与部分的关系,但个体有独立的生命周期。

聚合是把个体对象的指针作为整体类的属性。

 

 虎群里可能有1-n只老虎。


  
  1. class TigerGroup {
  2. private:
  3. vector<Tiger*> vtiger;
  4. };

5,关联

关联是一种拥有关系,它使一个类知道另一个类的属性和方法,

如老虎拥有若干食物,那么它就知道每个食物是什么,什么颜色,有没有坏掉等等。

有1-n的单向关联,也有n-n的双向关联,双向关联可以用双向箭头,也可以没有箭头。

  


  
  1. class Food {
  2. protected:
  3. string foodName;
  4. string foodColor;
  5. };
  6. class Tiger {
  7. public:
  8. Tiger() {
  9. this->name = "Tiger";
  10. }
  11. private:
  12. string name;
  13. Leg leg[4];
  14. Head head;
  15. vector<Food> food;
  16. };

在《大话设计模式》中企鹅和气候的关系也是关联,理由是企鹅需要知道气候的变化。

6,依赖

依赖是一种使用关系,如老虎喝水。

 


  
  1. class Leg {
  2. protected:
  3. int len;
  4. };
  5. class Head {
  6. protected:
  7. int size;
  8. };
  9. class Food {
  10. protected:
  11. string foodName;
  12. string foodColor;
  13. };
  14. class Water {
  15. private:
  16. float weight;
  17. };
  18. class Tiger {
  19. public:
  20. Tiger() {
  21. this->name = "Tiger";
  22. }
  23. void Drink(Water water) {
  24. return;
  25. }
  26. private:
  27. string name;
  28. Leg leg[4];
  29. Head head;
  30. vector<Food> food;
  31. };

三,总结

 

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/121063408

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。