-
类(Class)的表示
- 图形结构:在 UML 类图中,类通常用一个矩形来表示。这个矩形被划分为三个部分。最上面的部分是类名,类名一般是名词,并且首字母大写,它代表了这个类的抽象概念,比如 “Customer”(顾客)、“Product”(产品)等。中间部分是类的属性,用于描述类的状态信息。最下面的部分是类的操作,代表了类可以执行的行为或者功能。
- 属性部分:属性的表示格式为 “[可见性] 属性名:类型”。可见性有三种常见的表示方式,“+” 表示公共(public)属性,意味着可以从其他类中访问这个属性;“-” 表示私有(private)属性,只能在类内部访问;“#” 表示受保护(protected)属性,本类及其子类可以访问。例如,“- customerId:Integer” 表示一个私有属性 customerId,其类型是整数。属性用于存储对象的状态信息,不同的属性可以有不同的数据类型,如整数、字符串、布尔值等。
- 操作部分:操作的表示格式为 “[可见性] 操作名 (参数列表): 返回类型”。例如,“+ getCustomerId ():Integer” 表示一个公共方法 getCustomerId,没有参数,返回一个整数类型的值。操作定义了类可以执行的行为,比如计算、数据访问和修改等功能。
-
接口(Interface)的表示
- 图形结构:接口在 UML 类图中用一个带有《interface》关键字的矩形来表示。它与类的表示有所不同,因为接口主要关注的是方法签名,所以通常只有方法部分,没有属性部分(在一些高级用法或者特定的设计模式中,接口也可能有属性,但这种情况相对较少)。
- 方法签名部分:接口中的方法签名和类中的操作表示类似,格式为 “[可见性] 方法名 (参数列表): 返回类型”。由于接口中的方法默认是抽象的(在 Java 等编程语言中),所以没有方法体。例如,一个名为 “Drawable” 的接口可能有一个方法 “+ draw ():void”,表示实现这个接口的类需要实现 draw 方法,并且这个方法没有返回值。
- 接口与类的关系表示:当一个类实现一个接口时,在 UML 类图中用一条带有空心三角形箭头的虚线来表示这种实现关系,箭头从类指向接口。这表示类要遵循接口中定义的规范,实现接口中定义的所有方法。例如,如果有一个 “Shape” 类实现了 “Drawable” 接口,那么在类图中就会有一条从 “Shape” 类指向 “Drawable” 接口的虚线箭头。
-
关联关系(Association)
- 概念理解:关联关系是 UML 类图中最常见的关系之一,它表示类与类之间的一种连接,这种连接使得一个类知道另一个类的存在,并且可以访问另一个类的公共属性和方法。关联关系可以是双向的,也可以是单向的,它体现了对象之间的结构关系。
- 图形表示:用一条直线来表示关联关系。如果是双向关联,两端都没有箭头,这意味着两个类可以互相访问对方的公共成员。例如,“Customer”(顾客)和 “Order”(订单)之间可能是双向关联,因为顾客可以查看自己的订单,订单也可以关联到下单的顾客。如果是单向关联,则在知道另一个类的一端有一个箭头,比如 “Customer”(顾客)和 “Address”(地址)之间可能是单向关联,顾客知道自己的地址,但地址不需要知道是哪个顾客的(在某些简单的设计场景下)。
- 关联的多重性(Multiplicity):关联关系还可以表示多重性,也就是一个类的对象可以与另一个类的多少个对象相关联。多重性可以用数字、数字范围或者特定的符号来表示。例如,“1” 表示一个对象只能和一个对象关联;“0..” 表示零个或多个对象关联;“1..3” 表示一个到三个对象关联。例如,一个 “Customer”(顾客)可以有 “0..” 个 “Order”(订单),表示一个顾客可以没有订单,也可以有多个订单。
-
聚合关系(Aggregation)
- 概念理解:聚合关系是一种特殊的关联关系,它表示整体与部分的关系,其中部分可以独立于整体存在。这种关系就像是一个容器和它里面的元素的关系,元素可以从容器中取出,并且在容器销毁后,元素仍然可以存在。
- 图形表示:用一个空心菱形加一条直线来表示聚合关系,空心菱形靠近代表整体的类。例如,“Computer”(计算机)和 “CPU”(中央处理器)之间是聚合关系,计算机是一个整体,CPU 是它的一个部分,CPU 可以从计算机中拆卸下来,并且可以安装到其他计算机中,即使这台计算机报废了,CPU 仍然可以独立存在。
- 与关联关系的区别:聚合关系比一般的关联关系更强调整体与部分的关系,并且这种关系在语义上更明确地表示了对象之间的组合层次。在实际的系统设计中,聚合关系可以帮助我们更好地组织和理解复杂的对象结构。
-
组合关系(Composition)
- 概念理解:组合关系也是一种整体与部分的关系,但与聚合关系不同的是,部分依赖于整体的生命周期,当整体被销毁时,部分也会随之销毁。这种关系就像是人体和器官的关系,器官不能独立于人体而存在,人体死亡,器官也就失去了意义。
- 图形表示:用一个实心菱形加一条直线来表示组合关系,实心菱形靠近代表整体的类。例如,“Car”(汽车)和 “Engine”(发动机)之间是组合关系,发动机是汽车的一个重要组成部分,当汽车报废时,发动机通常也会被报废,因为发动机是专门为这辆汽车设计和安装的,很难再用于其他汽车(在一般情况下)。
- 与聚合关系的对比应用:在设计系统时,需要根据实际情况选择使用聚合关系还是组合关系。如果部分对象可以在多个整体对象之间共享,并且有自己独立的生命周期,那么聚合关系更合适;如果部分对象紧密依赖于整体对象,并且它们的生命周期是同步的,那么组合关系更能准确地描述这种关系。
-
依赖关系(Dependency)
- 概念理解:依赖关系是一种比较弱的关系,它表示一个类在某些特定的情况下会使用另一个类。这种使用通常是临时性的,或者是在某个方法内部的调用关系。依赖关系不像关联关系、聚合关系或者组合关系那样表示一种长期的、结构上的关系。
- 图形表示:用一条虚线箭头来表示依赖关系,箭头从依赖的类指向被依赖的类。例如,在一个 “Student”(学生)类中,有一个方法 “takeExam (ExamPaper examPaper)”,这个方法需要一个 “ExamPaper”(试卷)对象作为参数,这就表示 “Student” 类依赖于 “ExamPaper” 类。这种依赖关系只在学生参加考试这个行为发生时存在,平时学生对象和试卷对象之间没有结构上的关联。
- 应用场景:依赖关系在很多情况下用于表示一个类对另一个类的局部使用,比如方法参数、局部变量或者在某个方法内部创建的对象。它可以帮助我们分析系统中类之间的临时交互关系,以及确定哪些类在某些功能实现上是相关的。
-
实现关系(Realization)
- 概念理解:实现关系用于表示一个类实现了一个接口所定义的规范。接口定义了一组方法签名,实现类需要按照这些签名来实现具体的方法,以满足接口的要求。实现关系体现了一种契约式的编程思想,即接口定义了契约,实现类遵守这个契约。
- 图形表示:用一条带有空心三角形箭头的虚线来表示实现关系,箭头从实现类指向接口。例如,“ArrayList”(动态数组类)实现了 “List”(列表接口),在 UML 类图中就会有一条从 “ArrayList” 指向 “List” 的虚线箭头,表示 “ArrayList” 类实现了 “List” 接口中定义的所有方法,如添加元素、删除元素、获取元素等操作。
- 接口的重要性及实现意义:接口在软件设计中起到了非常重要的作用,它可以使得系统更加灵活和可扩展。通过实现关系,不同的类可以实现相同的接口,这样在系统的其他部分使用这些类时,只需要依赖接口,而不需要关心具体的实现类,从而提高了系统的可维护性和可替换性。例如,在一个图形绘制系统中,不同的图形类(如 “Circle”(圆)、“Rectangle”(矩形)等)都可以实现 “Drawable”(可绘制)接口,系统的绘制模块只需要调用接口的方法就可以绘制不同的图形,而不需要针对每个图形类编写不同的绘制代码。
posted @
2024-12-31 15:15
酥饼馅红豆沙
阅读(
11)
评论()
收藏
举报