设计模式之UML关系图

什么是UML图,在这里我就不赘述了,园子里有很多介绍UML图的文章。

UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。

  • 依赖Dependency:元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A;类属关系和实现关系在语义上讲也是依赖关系,但由于其有更特殊的用途,所以被单独描述。uml中用带箭头的虚线表示Dependency关系,箭头指向被依赖元素。
  • 泛化(Generalization:通常所说的继承(特殊个体 is kind of 一般个体)关系,不必多解释了。uml中用带空心箭头的实线线表示Generalization关系,箭头指向一般个体。
  • 实现(Realize:元素A定义一个约定,元素B实现这个约定,则B和A的关系是Realize,B realize A。这个关系最常用于接口。uml中用空心箭头和虚线表示Realize关系,箭头指向定义约定的元素。
  • 关联(Association:元素间的结构化关系,是一种弱关系,被关联的元素间通常可以被独立的考虑。uml中用实线表示Association关系,箭头指向被依赖元素。
  • 聚合(Aggregation:关联关系的一种特例,表示部分和整体(整体 has a 部分)的关系。uml中用带空心菱形头的实线表示Aggregation关系,菱形头指向整体。
  • 合(Composition:组合是聚合关系的变种,表示元素间更强的组合关系。如果是组合关系,如果整体被破坏则个体一定会被破坏,而聚合的个体则可能是被多个整体所共享的,不一定会随着某个整体的破坏而被破坏。uml中用带实心菱形头的实线表示Composition关系,菱形头指向整体。

其中关系由强到弱:泛化>实现>组合>聚合>关联>依赖

一、依赖(Dependency)

表示方法:虚线加箭头表示

依赖关系是对象之间最基本的关系,也是类与类之间的联结。当一个对象(调用者)需要调用另外一个对象(被调用者)的方法去完成某些工作时,依赖关系就建立了。

依赖总是单向的。(Tips: 要避免双向依赖。一般来说,不应该存在双向依赖。

依赖关系在 C#(Java、C++等)中体现为局部变量、方法的参数或者对静态方法的调用

  (软件开发中,往往会设计一些公用类,供别的类调用,如果这些公用类出问题了,那调用这些公用类的类都会因此而出问题。 

两个元素之间的一种关系,其中一个元素(提供者)的变化将影响另一个元素(客体),或向它提供所需信息显示一个类引用另一个类)

public class Client
{
    // 方法的参数
    void call(Service service)
    {
        // 局部变量
        // Service service = new Service();
        // 静态方法调用
        // Service.Call();
       ...
    }
} 

  

  特点:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地方(比如某个方法体内)才有关系。

  Client依赖Service,但是Client变动不会影响Service。但是Service变动可能会影响Client(如上Service的Call方法变动一定会影响Client)。

二、关联(Association)

  表示方法:实线箭头表示

 

 

关联关系是类与类之间的联结,它使一个类知道另一个类的属性和方法。

关联可以是双向的,也可以是单向的(Tips:还有自身关联)。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

依赖关系在 C#(Java、C++等)中体现为成员变量(属性),但是没有包含关系

public class Teacher
{
     
}
public class Student
{  
    protected List<Teacher> thList { get; set; };
}

  表示方法:实线箭头

  特征:表示类与类或类与接口之间的依赖关系,表现为“拥有关系”;具体到代码可以用实例变量来表示。(A类有一个成员变量保存的是B类的一个引用,也就是说由A类可以找到B类)

  Student关联Teacher,可以通过Student找到Teacher。Student和Teacher每有包含关系。

三、聚合(Aggregation)

  表示方法:带空心菱形箭头表示

 

聚合关系是关联关系的一种,是强的关联关系,体现的是整体和部分之间的关系,即“has-a”关系

聚合是整体和部分之间的关系,例如部门由员工组成。

在 C#(Java、C++等)中体现为成员变量(属性)。但是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。

public class Employee
{

}
public class Department
{
    protected List<Employee> ElList { get; set; };
}

一个Department拥有多个Employee,Department作为整体,Department中的Employee是Department的一部分。
Department和Employee都有自己的生命周期,当一个Department被撤销时,Employee可以转到其他Department或离职了。
Employee转到其他Department或离职时,Department仍然是存在的。  

  表示方法:空心菱形头

  特征:属于是关联的特殊情况,体现部分-整体关系,是一种弱拥有关系;整体和部分可以有不一样的生命周期;是一种弱关联;

四、组合(Composition)

  表示方法:带实心菱形头的实线表示

  组合关系是关联关系的一种,是比聚合关系还要强的关系,体现的也是整体和部分之间的关系,即“is-a”关系

  它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。

  简单来说就是C#(JAVA、C++等)中的属性。两者之间有组成关系。

class Heart
{
} 
class Person
{ 
    Heart heart { get; set; }; 
}

  心脏是人的组成部分,不可单独存在。

  特征:属于是关联的特殊情况,也体现了体现部分-整体关系,是一种强“拥有关系”;整体与部分有相同的生命周期,是一种强关联;

五、 泛化(Generalization)

  表示方法带空心箭头的实线线表示

   

  泛化(下图)表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。

  简单来说就是C#(JAVA、C++等)中的继承一般用于类继承类

  泛化关系表示类与类之间的继承关系。如父和子、老虎和动物及植物和花等。

  如下图: 

public class Employee
{
}
public class Professor : Employee
{
}

六、实现(Realization)

  表示方法:空心箭头和虚线表示

  实例(I)关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。

  简单来说就是C#(JAVA、C++等)中的实现一般用于类实现接口

表达一种说明元素与实现元素之间的关系;

public interface IVehicle
{
    void Move();
}

public Car : IVehicle
{
    public void Move()
    {
    }
}

                  图I

依赖、关联、聚合和组合的区别

  依赖、关联、聚合和组合都可以泛指为”依赖关系”。
  当对象之间构成关联(Association)、聚合(Aggregation)或组合(Composition)关系时,也建立了对象之间的依赖关系。
  它们表现的依赖关系强弱程度不同,这4种关系所表现的强弱程度依次为:组合(Composite) > 聚合(Aggregation) > 关联(Association) > 依赖(Dependency)。

  关联、聚合和组合是大家经常容易混淆的3种关系,这种关系最大的区别在于对象的生命周期。

  1. 关联关系:每个对象都有自己的生命周期,对象之间不存在从属关系 
  2. 聚合关系:整体和部分是可以分离的,整体和部分都可以拥有各自的生命周期 
  3. 组合关系:整体和部分是不可以分离的,整体的生命周期结束时,也意味着部分的生命周期结束。

 

 泛化与实现就是C#(Java,C++)中的继承与实现,这两个不难理解。

 

 参考文献:

 UML类图符号 各种关系说明以及举例

 UML类图的6大关系

使用工具:

 UML: https://www.processon.com

原文地址:https://www.cnblogs.com/maplebridge/p/10486113.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


UML有助于在软件开发生命周期的所有阶段理解和可视化系统。以下是使用UML图可以获得的一些好处:它是一种标准化的建模语言。它是系统的不同利益相关者之间的交互方式。支持广泛的应用。独立于特定的编程语言和开发过程。开发用于指定,可视化,构建和记录系统的工件。用于表示系统的结
UML各种图总结-精华 https://www.cnblogs.com/jiangds/p/6596595.html之前自己以为画图很简单不需要用心学现在发现自己一直没有学会一些基础的知识能力也因为这种自以为是的观点提升的非常慢需要客户自己的这种缺点多学习一些有用的内容,没有什么东西是很简单简单到
MicrosoftOfficeVisio“UML模型图”模板为创建复杂软件系统的面向对象的模型 (模型:建模系统的一种抽象表示,它从特定的视角并在某一抽象级别上指定建模系统。)提供全面的支持。1.用例图在开发项目的早期阶段,使用用例图 (用例:在用例图中,当主角使用系统来完成某一进程时所
用例图1.用例图是UML用于描述软件功能的图形。用例图包括用例、参与者及其关系,用例图也可以包括注释和约束。2.用例图的要素包括三个方面:a.参与者,与用例存在交互关系的系统外部实体。b.用例,用来描述一个相对独立的软件功能。c.关系,包含参与者与用例的关系,参与者相互之间的关系
一、用例图:用例图(usecasediagram)是UML用于描述软件功能的图形。用例图包括用例、参与者及其关系,用例图也可以包括注释和约束。程序员要画时序图啥的用其他的比较麻烦,用plantuml比较方便。语法:活动标签以冒号开始,以分号结束         关键字以start和stop表示开始和结
1.A类B类C类这三个类是什么关系?B类依赖A类和C类因为最主要的原因是B类功能需要A类和C类协助才能完成。有一个粗暴的方法,如果A类B类C类不同包,B类需要先导入A类和C类的包才能运行,但是A类C类则不需要B类2.注意,要避免双向依赖。一般来说,不应该存在双向依赖。类
在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。下面我们结合实例理解这些关系。基本概念类图(ClassDiagram):
1,用例用例用圆括号括起来,或者用关键字xxx来定义用例or还可以用关键字as定义一个别名@startuml(Firstusecase)(Anotherusecase)as(UC2) usecaseUC3usecase(Last\nusecase)asUC4@enduml2,角色角色用两个冒号包裹起来。也可以用actor关键字来定义角色。还可以用关键
UML是什么UML定义:统一建模语言(UnifiedModelingLanguage,缩写UML)非专利的第三代建模和规约语言UML特点:UML是一种开放方法用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂
uml第一次作业plantuml之例图主要包括:用例actor用例描述连接扩展用例(NAME)usecase 关键字as 用于指定别名效果图如下:  几者间的关系:关联关系表示参与者和用例之间的通信。在UML中虹关联关系用直线或箭头表示。关联中communicates版型是参与者和用例之间唯
用例图用例图是用来描述系统功能的技术,表示一个系统中用例与参与者及其关系的图,主要用于需求分析阶段。 用例图的基本组成元素:参与者、用例、元素之间的关系。 用例图使用范围:需求分析1.捕获需求。描述功能需求、行为需求(系统要完成什么任务)2.分析需求。明确类和对象,建立
目录介绍基本的UML类型结构UML图行为UML图可用的建模工具PlantUML的救援VisualStudioCode集成编写少数模型类图活动图导出文档结论介绍UML代表统一建模语言。它是一种通用建模语言,用于标准化可视化软件系统体系结构的方法。它是由格雷迪Booch、伊瓦尔·雅各布森
一个典型类的定义:1/**2*一个典型类的定义3*@author房廷飞4*5*/6publicclassTextObject{7//属性8intid;9Stringname;10intage;11//方法12Computercom;13voidstudy(){14System.out.print
     UML类图新手入门级介绍举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法 首先,看动物矩形框,它代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或
1.泛化(generalize)实线空心三角箭头。2.实现(realize)虚线空心三角箭头。3.聚合(aggregation)实线空心菱形箭头。4.组合(composition)实线实心菱形箭头。5.关联(association)实线(直线),普通箭头("<",">")可选。如果强调方向,则加一个普通箭头。否则只需要一条实线。
文章大纲一、什么是UML二、UML基础介绍三、UML实例介绍四、参考文档 一、什么是UML  UML(UnifiedModelingLanguage,统一建模语言)是一种在软件设计时提供给分析师、设计师和工程师之间的通用语言。它在软件需求分析及软件整个生命周期中起着重要作用:UML建模有助于
    类类的UML表示是一个长方形,垂直地分为三个区,如图1所示。顶部区域显示类的名字。中间的区域列出类的属性。底部的区域列出类的操作。当在一个类图上画一个类元素时,你必须要有顶端的区域,下面的二个区域是可选择的(当图描述仅仅用于显示分类器间关系的高层细节时,下
1.策略模式 2.观察者模式3.装饰者模式4.工厂模式5.单例模式
什么是UML图,在这里我就不赘述了,园子里有很多介绍UML图的文章。UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。依赖(Dependency):元素A的变化会影响元素B,但反之不成立,那么B和A的关系是
第一部分:PlantUML用例图语法学习小结用例用例用圆括号括起来,也可以用关键字usecase来定义用例。还可以用关键字as定义一个别名,这个别名可以在以后定义关系的时候使用。@startuml(Firstusecase)(Anotherusecase)as(UC2)usecaseUC3usecase(Last\nusecase)asUC4@endu