找回密码
 立即注册
首页 业界区 业界 UML类图-UML Class Diagram

UML类图-UML Class Diagram

琉艺戕 2025-6-3 00:17:02
导航
1前言
2UML类图中的元素
2.1类
2.2接口
3UML类图中的关系
3.1关联关系
3.2泛化关系
3.3实现关系
3.4聚合关系
3.5组合关系
3.6依赖关系
3.7关系中的数量表示
1 前言
在面向对象软件开发中,类是软件设计的基本单元,由类构造出对象,由对象支持整个软件系统的运行,因此UML中的类图是开发人员使用最高频的图。一个复杂的软件系统,通常由非常多的类构成,如何让这些相互交织的类与对象高效的协同工作,一直以来都是软件设计领域中的巨大挑战,在这个过程中,诞生了诸如领域驱动设计(DDD),微服务等一系列革命性的思想。
类图以可视化的方式呈现了软件中的基本单元以及它们之间的关系。在软件架构设计过程中,它可以帮助架构师快速构思项目框架而无需关注代码细节;在软件开发过程中,它又可以精确描述类中的所有元素细节。因此对于开发人员,了解了面向对象就必须掌握UML类图。来源:https://www.wubayue.com
2 UML类图中的元素
2.1 类
类的基本构成
1.jpeg

在UML类图中,类主要由三部分构成:类的名称、类的属性与类的方法。
类的基本构成代码示例如下:
  1. // 类名称
  2. public class MyClass
  3. {
  4.     // 属性
  5.     public int MyProperty { get; set; }
  6.     // 方法
  7.     public int MyMethod(int p1, int p2)
  8.     {
  9.         return p1 + p2;
  10.     }
  11. }
复制代码
类成员的可访问性
2.jpeg

类成员的可访问性通过类成员的前缀符号表示:
+ 表示公有,该成员可以被任何对象访问。
~ 表示包内公有,该成员可以被同一包内的对象访问。
# 表示受保护,该成员只能被当前类对象及子类的对象访问。
- 表示私有,该成员只能被当前类对象访问,其它外部对象无法访问。
类成员的可访问性代码示例如下:
  1. // 类成员的可访问性
  2. public class MyClass
  3. {
  4.     // 公有
  5.     public void PublicMethod()
  6.     {
  7.     }
  8.     // 包内公有
  9.     internal void InternalMethod()
  10.     {
  11.     }
  12.     // 受保护
  13.     protected void ProtectedMethod()
  14.     {
  15.     }
  16.     // 私有
  17.     private void PrivateMethod()
  18.     {
  19.     }
  20. }
复制代码
抽象类与抽象成员
3.jpeg

抽象类与抽象成员均使用斜体表示。
抽象类与抽象成员代码示例如下:
  1. // 抽象类
  2. public abstract class AbstractClass
  3. {
  4.     // 抽象方法
  5.     public abstract void AbstractMethod();
  6. }
复制代码
静态类成员
4.jpeg

静态类成员使用下划线表示。
静态类成员代码示例如下:
  1. // 静态类成员
  2. public class MyClass
  3. {
  4.     // 静态属性
  5.     public static int StaticProperty { get; set; }
  6.     // 静态方法
  7.     public static void StaticMethod()
  8.     {
  9.     }
  10. }
复制代码
2.2 接口
5.jpeg

接口在UML图例中与类的主要差别是接口名称后多了一个圆圈。
接口代码示例如下:来源:https://www.wubayue.com
  1. // 接口
  2. public interface MyInterface
  3. {
  4.     // 属性
  5.     int MyProperty { get; set; }
  6.     // 方法
  7.     void MyMethod();
  8. }
复制代码
3 UML类图中的关系
3.1 关联关系
6.jpeg

关联关系是对象之间最常见的一种关系,主要表示为拥有。比如老师拥有课程,老师与课程之间即为单向的关联关系;老师拥有学生,学生也拥有老师,老师与学生之间即为双向的关联关系。
关联关系示例代码如下:
  1. // 课程
  2. public class Course
  3. {
  4.     public string name { get; set; }
  5. }
  6. // 老师
  7. public class Teacher
  8. {
  9.     // 老师的课程
  10.     public Course[] Courses { get; set; }
  11.     // 老师的学生
  12.     public Student[] Students { get; set; }
  13. }
  14. // 学生
  15. public class Student
  16. {
  17.     // 学生的课程
  18.     public Course[] Courses { get; set; }
  19.     // 学生的老师
  20.     public Student[] Students { get; set; }
  21. }
复制代码
3.2 泛化关系
7.jpeg

泛化通常表示子类对父类的继承关系。
泛化关系示例代码如下:
  1. // 动物
  2. public class Animal
  3. {
  4.     // 重量
  5.     public decimal Weight { get; set; }
  6.     // 移动
  7.     public virtual void Move()
  8.     {
  9.         Console.WriteLine("动物都会动");
  10.     }
  11. }
  12. // 狗
  13. public class Dog : Animal
  14. {
  15.     public override void Move()
  16.     {
  17.         Console.WriteLine("狗在地上跑");
  18.     }
  19. }
  20. // 鱼
  21. public class Fish : Animal
  22. {
  23.     public override void Move()
  24.     {
  25.     Console.WriteLine("鱼在水中游");
  26.     }
  27. }
复制代码
3.3 实现关系
8.jpeg

通常为具体类实现抽象的接口。
实现关系示例代码如下:
  1. // 画画
  2. public interface Drawing
  3. {
  4.     // 笔
  5.     string Pen { get; }
  6.     // 作画
  7.     void Paint();
  8. }
  9. // 素描画
  10. public class Sketch : Drawing
  11. {
  12.     public string Pen 
  13.     { 
  14.         get { return "铅笔"; } 
  15.     }
  16.     public void Paint()
  17.     {
  18.         Console.WriteLine("画素描画");
  19.     }
  20. }
  21. // 水彩画
  22. public class Watercolor : Drawing
  23. {
  24.     public string Pen
  25.     {
  26.         get { return "毛笔"; }
  27.     }
  28.     public void Paint()
  29.     {
  30.         Console.WriteLine("画水彩画");
  31.     }
  32. }
复制代码
3.4 聚合关系
9.jpeg

表示整体与部分的关系,聚合属于强关联关系。
3.5 组合关系
10.jpeg

表示整体与部分的关系,组合属于最强关联关系。
组合与聚合的区别在于组合中的部分不能脱离于整体单独存在,比如部门不能脱离于公司而存在。
3.6 依赖关系
11.jpeg

依赖关系并非类图中的特有关系,而是UML中的一种通用关系,比如在用例图中也能使用。依赖即使用关系,通常为单方向。
3.7 关系中的数量表示
两个类之间的关系,有时还需要使用数量进行更精确的描述,比如一辆汽车有一台引擎多个轮胎,一家公司有多个部门等。类图关系中的数量表示位于关系连线的两端,具体含义如下:来源:https://www.wubayue.com
标识含义0..10个或1个,最多1个0..*0个或多个,数量不限1..1只有1个1..*1个或多个,至少1个1只有1个(简化表示)*0个或多个,数量不限(简化表示)本文同步发布于个人博客:wubayue.com


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册