UML类图详细介绍
类图主要描述程序对象以及他们之间的关系。一般来说,类、接口、抽象类这些程序对象的区别很容易,但是他们之间六种关系以前总是理解不够深刻,这次进行了一次复习,顺便写成博文以便加深理解
类图中的三种对象
类/抽象类
类的表示一般一般如下图所示
- 类名:图正中间的黑体字表示类的名称,如果是名字的字体是斜体字,则表明该类是抽象类
- 属性:类名下面的区域表示类的属性
- 操作:属性下面的区域表示类的操作(或者说方法)。
- 可见性:属性和操作前面的+、-、#符号代表了这些对象的可见性分别是public、private、protected
接口
接口的表示一般如下图所示
接口的图和类图类似,只不过加入了interface标识。接口中的成员可见性都是public
类图中的六种关系
类图中,类与类之间一般会有六种关系,他们分别是继承(Generalization)、实现(Implements)、组合(Composition)、聚合(Aggressgation)、依赖(Dependency)、关联(Association)
继承(Generalization)
如果对面向对象编程思想了解,则比较容易理解继承的概念。在面向对象的编程思想中,继承是指子类继承了父类的所有功能,并且能够在父类的基础上扩展自己的功能。这里的继承就是表现这种父类和子类的关系。继承关系如下图所示
在这里Teacher和Student类分别是继承了Person类,自动拥有了Person类的公共属性和操作。同时他们分别扩展了自己独有的操作teach和listen。继承关系用一个实线空箭头的连线来表示,箭头指向父类
实现(Implements)
实现的概念和继承有些类似。但是接口中不会有已经写好的操作或者方法,接口中声明的操作都需要再实现类中实现。实现关系如下图所示
在这里SuperMan类一样继承了Person类,因为超人还有一个特性是会飞,所以他还实现了一个Fly的接口。实现关系用一个虚线空心箭头的连线来表示,箭头指向接口。
组合(Composition)
组合表示的是两个对象之间一种强“拥有”的关系,如果B组合成为A,那么B是A的一个整体,B和A的生命周期是一样的。例如是一种部分与整体的关系,部分与整体之间的生命周期是一样的。组合关系用一个一个带箭头的连线表示,尾巴上有实心的菱形,箭头指向被拥有的对象。上面的数字表示两者之间的数量关系。如下图所示
在这里,Hand和Person是组合关系,Hand是Person的部分,Person拥有Hand,而且Hand的生命周期依赖Person的生命周期。也就是说Person没有了,Person的Hand也没有了。在这里表示一个Hand一定归宿一个Person而一个Person可能有0个或者多个Hand。因为刚刚有报道说一个人长了3只脚,所以一个人也可能长出多条手哈
聚合(Aggressgation)
聚合也表示两个对象之间的一种拥有关系,但是这个关系是一种弱的拥有关系。两者的生命周期是不依赖的。这是和组合的一个重要区别。聚合关系用一个带箭头的连续表示,尾巴带一个空心的菱形,箭头指向被拥有的对象。上面的数字表示两个对象之间的数量关系。如下图所示
这里Classess是由Teacher和Student聚合而成,他们之间是一种拥有关系,但是Classes消亡,并不代表Teacher和Student的消亡,他们的生命周期是不依赖的。这是和组合的重要区别。这幅图里面聚合关系上的数字表示一个Teacher可以在0或者多个Classes中,而一个班级可以由0到多个Teacher。Classes和Student之间聚合关系上的的数量表示的是同样的含义。
依赖(Dependency)
如果一个对象的活动中要依赖另一个对象,则两者之间是依赖关系。例如学生上课依赖课程对象,老师教课也依赖课程对象。依赖关系用一个虚线箭头表示,箭头指向被依赖的对象。在代码中一般体现为操作的参数。如下图所示
关联(Association)
如果一个对象需要知道另一个对象,则对象之间是一种关联的关系。关联可以是单向的,即一个对象知道另一个对象,而另一个对象不知道该对象,也可以是双向的,即两个对象相互知道。关联式用一条实现表示,单向关联带一个箭头,指向被知道的对象,双向关联无箭头。例如学生需要了解考试对象的情况,考试对象需要了解学生的情况,这是一种双向关联关系。如下图所示。
UML类图详细介绍的更多相关文章
- UML 包图 详细介绍
6.1 包图的概念 包是一种常规用途的组合机制.UML中的一个包直接对应于Java中的一个包,C#中的命名空间.在Java中,一个包可能含有其他包.类或者同时含有这两者.进行建模时,通常使用逻辑性 ...
- UML类图简单介绍
先上一张图: 概述 类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 类图组 ...
- UML类图介绍(转载)
UML类图详细介绍 类图主要描述程序对象以及他们之间的关系.一般来说,类.接口.抽象类这些程序对象的区别很容易,但是他们之间六种关系以前总是理解不够深刻,这次进行了一次复习,顺便写成博文以便加深理 ...
- UML类图的6大关系
<小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...
- UML类图新手入门级介绍
UML类图新手入门级介绍 举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法. 首先,看动物矩形框,它代表一个类(Class).类图分三层,第一层显示类的名称,如果是抽象类,则就用 ...
- UML类图介绍以及PlantUML使用方法
类的UML表示方法 UML介绍 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间的示意图.它形象的描述出了系统的结构,帮助人们理解系统. 类图是 ...
- UML类图介绍及简单用法
原文链接 一.类的属性的表示方式 在UML类图中,类使用包含类名.属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和em ...
- [转帖]UML类图新手入门级介绍
UML类图新手入门级介绍 2010-11-12 19:45:00 monkey_d_meng 阅读数 27230 收藏 文章标签: umlinterfaceclass编程扩展更多 分类专栏: 软件工 ...
- 北风设计模式课程---20、UML类图介绍
北风设计模式课程---20.UML类图介绍 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备工厂先生 ...
随机推荐
- Linux 安装配置 JDK 8
所需软件包, 可以到Oracle官网去下载, 放到/usr/local/src文件夹下: jdk-8u45-linux-x64.tar.gz 安装: cd /usr/local/srctar -zx ...
- 零售ERP开发(一)
随着企业信息化不断提高,各种企业管理系统应用而生:怎么才能开发一套简洁.易用.功能健全的管理系统,尤其是能够帮助企业做出重大策略的系统,一致是我们追求的目标.近些年,接触的Erp系统主要包括国内比较知 ...
- PHP创建桌面快捷方式实例
要利用php创建桌面快捷方式我们需要借助于header,InternetShortcut及一些我看不懂的代码. 方法:新建一个php文件,然后把下面的代码扔进去,保存为比如shortcut.php,放 ...
- print,print_r,echo,var_dump,var_export比较
print string 1个参数 返回1 语言结构echo 多个string 无返回 语言结构 print_r array 如果想捕捉 print_r() 的输出,可使用 return 参数.若此参 ...
- Android 下拉刷新控件Android-PullToRefresh
需要用到一个开源库 Android-PullToRefresh https://github.com/chrisbanes/Android-PullToRefresh ---------------- ...
- 结合使用 Oracle Database 11g 和 Python
结合使用 Oracle Database 11g 和 Python 本教程介绍如何结合使用 Python 和 Oracle Database 11g. 所需时间 大约 1 个小时 概述 Python ...
- Hive 的 排序
全排序:order by对全部所有的数据进行排序,在实现的时候是放到一个reduce中进行的,可以想象这样做效率是比较低的: 局部排序:sort by对数据进行分组,然后在组内进行排序,每个reduc ...
- ios8新特性widget开发-b
os8发布已经有一段时间了,伴随着ios8同时也出现了许多新的特性,ios系统将会越来越开放,这是好事.其中一个新特性就是在下拉通知栏里加入了个性的widget,开发者可以自己定义widget的样式内 ...
- Struts2技术内幕----深入解析Struts2架构与设计(一)
Struts2的核心入口程序,从功能上来说必须能够处理Http请求,这是表示层框架的基本要求.为了达到这一目的,Struts2毫无例外地遵循了Servlet标准,通过实现标准的Filter接口来进行H ...
- php对象与数组互转
//对象转数组 function objectToArray($obj){ $arr = is_object($obj) ? get_object_vars($obj) : $obj; if(is_a ...
