【UML】最简单的类图

Rational Rose简明实用教程  https://blog.csdn.net/gz153016/article/details/49641847

Rational Rose是Rational公司出品的一种面向对象统一建模语言可视化建模工具。用于可视化建模和公司级水平软件应用的组件构造。现在比较少的公司在使用已Rose。IBM推出了Rational Software Architect来替代Rational Rose。

如何用Rational Rose 画 组合聚合关系(实心菱形)

聚合关系包括 基本聚合(空心菱形) 和 组合聚合关系(实心菱形)

也有的 称 为 聚合aggregation(空心菱形) 和 组合composition(实心菱形)

聚合是一种相对松散的关系,在ROSE里面生成的代码和组合是一样的。

Rose 2003并不提供“组合关系”这种图形(实心菱形)

1.可以先画一个aggregation(空心)的关系(下拉菜单栏tools--->aggregation),

2.然后右键单击这个关系,open specification ->Role B Detail,

3.你会发现有三项选(By Value, By Reference, Unspecified),在你选上By Value的时候,菱形就变成实心的了。

双击线条,设置Role B General和Role A General

  • 共有可见性(+):对能看到这个类的任何元素都可见。
  • 保护可见性(#):对这个类及其子类的其他元素可见。
  • 私有可见性(-):对这个类的其他元素可见。
  • 包可见性(~):对同一个包中的其他元素可见。

类关系

类很少是独立的,类之间的基本联系包括关联、泛化、聚合和组合。

1.关联和依赖

对于很多刚刚接触UML的童鞋,可能会对类之间的关联与依赖关系不太理解,今天小菜就浅薄的讲一下。

依赖

表现为函数中的参数(use a),是类与类之间的连接,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类。例如如果A依赖于B,则B体现为局部变量,方法的参数、或静态方法的调用。如电视(TV)依赖于频道(channel)常见的依赖关系如下:
(1)类B以参数的形式传入类A的方法。我个人将它就取名为“参数依赖”。
(2)类B以局部变量的形式存在于类A的方法中。我个人将它就取名为“局部依赖”。
(3)类A调用类B的静态属性或方法。我个人将它就取名为“静态依赖”。
UML图中实现使用一条带有箭头的虚线指向被依赖的类,如下:

关联(委派)

表现为变量(has a),类与类之间的联接,它使一个类知道另一个类的属性和方法。例如如果A关联于B,则B体现为A的全局变量,如person类和company类。
关联关系有双向关联和单向关联:
1、双向关联:两个类相互都知道另一个类的公共属性和操作。
2、单向关联:只有一个类知道另外一个类的公共属性和操作。
大多数关联应该是单向的,单向关系更容易建立和维护,有助于寻找可服用的类。
UML图中实现使用一条实线(有的地方用带箭头的实线)连接相同或不同类,如下:

这块的确是有点乱,不过小菜突然找到了一个比较好的切入点,拿出来分享一下。

接触过设计模式的读者,会经常看到这样的场景:在实例化A类的时候,需要B类作为构造方法的参数,这说明A类需要持有一个B类的引用。比如代理模式、装饰 模式等,都会这样做。例如Java中的IO流采用的就是装饰模式,所以我们会经常看到这样的语句:new BufferInputStream(new FileInputStream("c:\\1.db"));

person与company之间的关联关系也叫委派关系(我自己称呼的)。

这种持有引用,就是简单的关联关系。在代码中表现为:在A类中有一个成员变量,变量的类型是B类,A类中持有了B类的引用,就说明A类和B类发生了关联关系

用UML图表示如下:

稍加说明,由于是A类持有B类的引用,因此关联是从A类中发出的(由A类引起),因此箭头要从A类指向B类。

通常情况下,这种简单的单向关联就够用了,但是关联关系主要还是应用在数据库设计中。

在数据库设计中,无论是一对一、一对多、多对多,都不是单向的。

从表的角度分析,它们均可以从任意一端确定另一端。就拿一对多来说,有了one端的主键,可以根据many端表的外键查出many端数据;有了many端外键,可以根据one端表的主键查出one端数据。

从实体类的角度分析,同样可以从任意一端确定另一端。还是拿一对多来说,one端的实体类会持有一个many端的引用集合,例如private Set<B> bs;,查询到了one端,可以直接从这个集合中读取many端;many端的实体类会持有一个one端的引用,例如private A a;,查询到了many端,可以直接从这个引用确定每一个many端的one端。

这样一来,就成了双向关联,用UML画关联关系的时候,两边都要加箭头,这样太难看,索性就都不加了。

例如部门实体类和员工实体类的关系,就可以这样表示:

由于是数据库实体类间的关联关系,因此还要加上数量关系,1代表one端,0..n代表many端,说明一个部门可以有多个员工,但一个员工只能属于一个部门,通过UML图描述了一对多。

这个才是关联关系典型的应用。

不得不提的是,关联关系还可以细分为聚合和组合(二者的具体概念读者自行搜索)。

小菜发现聚合、组合可以从另一个角度去理解。

先说说聚合,它是一种弱关联,大概意思就是整体和部分可以独立存在。如果我们换个角度,可以看成是数据库的级联操作。

就拿小组和组员来说,删除某个小组的时候,把该组的组员也删除,这显然是不科学的,因为小组和组员是一种弱关联,小组可以拥有任意一个组员,一个组员也可以去任意一个小组,这个小组不存在了,可以去另一个小组,它们没有必然的关联,可以称为聚合。

因此,我们在设计数据库的时候,往往不会设置级联删除,也就是说,删除小组时不会删除组员。

UML图表示如下:

空心菱形表示聚合,指向one端。

再说说组合,组合是一种强关联,大概意思是整体和部分不可分割,不能独立存在。同样从级联操作理解。

就拿学生和学生证来说,假如某个学生退学,不再属于这个学校,那么可以考虑将该学生信息删除,删除的时候,学生对应的学生证信息也会被删除,在此处可以加 级联删除。因为学生证属于某个学生专有的信息,学生不存在了,学生证又不能让他人使用,因此是一种强关联,可以称为组合。

UML图表示如下:

最后要谈的是依赖关系。

假如A类的某个方法中,使用了B类,那么就说A类依赖于B类,它们是依赖关系。

A类的某个方法使用B类,可能是方法的参数是B类,也可能是在方法中获得了一个B类实例。但无论是哪种情况,B类在A类中都是以局部变量的形式存在的。

因此,A类中有B类型的局部变量,就说A类依赖于B类。

UML图表示如下:

虚线箭头表示依赖,箭头指向被依赖的类。

综上,有一个简单的判断原则:某个类以成员变量的形式出现在另一个类中,二者是关联关系;某个类以局部变量的形式出现在另一个类中,二者是依赖关系。

       注意:本文为了方便讲解,一直是拿类当例子,这并不是一种好的设计思维。实际开发中,为了更好的实现"开-闭原则",一般都是定义接口,依赖于接口,依赖于抽象,而不是根据具体编程,希望读者不要被小菜误导!!

原文链接:https://www.cnblogs.com/igoodful/p/9441316.html

Association关联关系表现为变量(has a )。类与类之间的联接,它使一个类知道另一个类的属性和方法。例如如果A依赖于B,则B体现为A的全局变量。关联关系有双向关联和单向关联。双向关联:两个类都知道另一个类的公共属性和操作。单向关联:只有一个类知道另外一个类的公共属性和操作。大多数关联应该是单向的,单向关系更容易建立和维护,有助于寻找可服用的类。

参考链接:https://blog.csdn.net/wdjxxl/article/details/79608796

2.组合和聚合

菱形代表的意思就是全体 - 部分的关系。也就是说不管实心还是空心,都代表全体 - 部分 / part - of 的含义。

  • 空心,全体和部分的连接可以是宽松的,代表聚合关系,全体和部分可以相互脱离独立存在。
  • 实心,全体和部分的连接是强关联,代表组合关系。组合也是关联关系的一种,一种比聚合关系强的关系。组合关系中的部分类不能独立于整体类存在。整体类和部分类有相同的生命周期。

参考链接:https://blog.csdn.net/huuinn/article/details/78176946

3.泛化

在上图中,空心的三角表示继承关系(类继承),在UML的术语中,这种关系被称为泛化(Generalization)。Person(人)是基类,Teacher(教师)、Student(学生)、Guest(来宾)是子类。 
若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性。 
例如,教师是人,Teacher 是Person的“一种”(a kind of )。那么类Teacher可以从类Person派生(继承)。 
如果A是基类,B是A的派生类,那么B将继承A的数据和函数。

如果类A和类B毫不相关,不可以为了使B的功能更多些而让B继承A的功能和属性。 
若在逻辑上B是A的“一种”(a kind of ),则允许B继承A的功能和属性。

参考链接:https://blog.csdn.net/gz153016/article/details/49641847

原文地址:https://www.cnblogs.com/aidata/p/11450229.html

时间: 2024-08-10 19:58:11

【UML】最简单的类图的相关文章

UML用例图与类图的基本知识的了解

题记:记录学习的UML用例图与类图的基本知识. 一.UML的用例图: UML的用例图的用途:帮助开发团队一一种可视化的方式理解系统的功能需求. UML用例图包含的元素:(1)参与者:表示与你的应用程序或系统进行交互的用户组织或外部系统(ps:用一个小人表示). (2)用例:用例就是外部可视的系统功能,对系统提供的服务进行描述(ps:用椭圆表示). (3)子系统:用来展示系统的一部分功能.这部分功能联系紧密. UML用例图中的关系主要包含5种:(1)关联(2)泛化(3)包含(4)扩展 关联:表示参

设计模式之UML(一)类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合)

类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据.接下来我们就来谈谈类图的组成,在下一篇中我们将讨论一下类图之间的关系. 一.类图的组成 1. 普通类 上图就是一个UML的普通类图,从上图我们看出,一个UML通常由三部分组成. 第一部分是类名:每个类都必须有一个名字,类名是一个字符串. 第二部分是类的属性(Attributes):属性是指类的性质,即类的成员变量.一个类可以有任意多个属性,也可以没有属

UML建模—EA创建类图

1.新建类图 2.添加类或接口 在类图可以捕获系统-类-和模型组件的逻辑结构.它是一个静态模型,描述存在什么,有哪些属性和行为,而不管如何去做. 3.工具栏 从工具箱中的类页面选择类图元素和连接器. Package 包 Class 类 Interface 接口 Enumeration 枚举 Table 表 Sigle 对象通信信号的描述 Association 关联 Associate 实现 Generallize 泛化 Compose 组成 Associate Class 关联类 Assemb

Uml 建模 一(类图建模和startuml的使用)

本文将分三个部分介绍Uml建模:Uml建模的作用.类图.startuml的使用 Uml的作用 本文以java为例介绍Uml,在当前的软件开发中大多数使用面向对象开发(OO),面向对象的就是将现实世界中的对象,行为,关系等模拟化到软件系统中.当在开发一个软件系统的时候,不会一开始直接编程.这样做的后果就是没有经过详细的设计,导致后期某些业务逻辑基于现有的系统不能开发.所以对于软件系统的设计尤其重要.对于系统的设计分为两部分:1.需求分析人员根据现实业务场景,梳理出业务关系.(eg:一个老师带一个班

UML简单梳理类图

依赖 Dependency Class Car{} Class Person{ int a; static int b public void buy(Car c){ int c; .... } } 一个类是还有一个类的某个方法的參数,或局部变量,或静态方法调用等. 另外变量分两种:局部变量,成员变量. 在某个方法中定义的变量为局部变量,比如上面的c. 在直接在类中定义的叫成员变量,成员变量也分两种实例变量,类变量 实例变量就是上面的a 类变量就是上面的b; 以下三种情况 关联,聚合,组合三种关

[转载]UML类图总结

前言 类图和序列图是UML中最常用的两种Diagram.我将做详细的总结.在许多书中,或者网站中,在介绍一个系统的子系统的设计时,很多时候,都是给出简单的类图来简述构成子系统的类之间的关系.这足以说明类图的重要性. 对类图的基本认识有以下两点: 类图是以反映类的结构(属性.操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法: 类图中的类与面向对象语言中的类的概念是对应的,是对现实世界中的事物的抽象. 我们基于以上两点,来对类图进行更详细的学习. 类图中基本语法学习 在UM

UML类图的6大关系

<小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下UML类图中6大关系了.这6大关系分别是Inheritance(继承).Implementation(实现).Dependency(依赖).Association(关联).Aggretation(聚合)和Composition(组合).在这6大关系中,依赖.关联.聚合和组合是比较容易混淆的,我也会讲解它们之间

UML 类图学习

!!!摘自: http://www.cnblogs.com/silent2012/archive/2011/09/07/2169946.html 类图中几种结构 http://www.open-open.com/lib/view/open1328059700311.html 1.什么是类图 类图(Class diagram)主要用于描述系统的结构化设计.类图也是最常用的UML图,用类图可以显示出类.接口以及它们之间的静态结构和关系. 2.类图的元素 在类图中一共包含了以下几种模型元素,分别是:类

转载:UML学习(二)-----类图(silent)

原文:http://www.cnblogs.com/huiy/p/8552607.html 1.什么是类图 类图(Class diagram)主要用于描述系统的结构化设计.类图也是最常用的UML图,用类图可以显示出类.接口以及它们之间的静态结构和关系. 2.类图的元素 在类图中一共包含了以下几种模型元素,分别是:类(Class).接口(Interface).依赖(Dependency)关系.泛化(Generalization)关系.关联(Association)关系.聚合关系(Aggregati