统一建模语言UML---类图
什么是统一建模语言,来看看百科中的介绍
统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。
简单来说UML就是脱离于具体编程语言,以面向对象的形式,对产品进行说明的一种文档语言。
我们今天这里只说类图:Class diagram
类图是一种描述一个系统中类、接口的静态结构,以及静态关系的一种图。是最常用也是唯一可以直接映射成面向对象语言的图。
类图主要分为两部分:
1、类、接口的内部定义
2、类、接口之间的关系
这两部分都简单,我们逐一来看:(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )
(一)类、接口的内部定义
结构如图:
主要分为三个部分:
类名、属性(字段)、方法(功能、能力)
类名:通畅采用大驼峰规范命名
属性:一般用以下格式
可见性 属性名称: 属性类型 [=默认值]
可见性如下表:
方法:一般用以下格式
可见性 方法名称: 返回类型
可见性的表达方式和属性的规范一样。我们来举个例子,如下图:
(二)类、接口之间的关系
这种关系存在类和接口之间,接口和接口之间,类和类之间。
我们一般将关系分为六种类型:
继承关系
实现关系
依赖
关联
聚合
组合
我一般将这些分为三类
1、继承和实现
这俩关系非常相像
继承关系,代表的是父类和子类之间的关系,这种类关系的耦合程度是最强的。我们一般用“实线+空心三角”的形式标记,箭头由子类指向父类。
实现关系,代表的是接口和实现类之间的关系,这种类关系的程度非常强,但是还是要弱于继承关系,我们一般用“虚线+空心三角”的形式标记,箭头由实现类指向接口。
如下图:机械键盘类继承自键盘类,键盘类实现了键盘接口。同时我们添加了UML的注释文件,解释了轴类型属性。(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )
实现(键盘接口+键盘):
继承(键盘+机械键盘):
2、聚合和组合
这俩关系也非常相近
都是代表一个类是另外一个类的组成部分,但是为了区分耦合的强弱关系,我们才进行区分:
聚合代表一个类是另外一个类的成员,但是可以独立开来,比如课桌和教室,黑板和教室,他们都属于教室的组成部分,但是可以独立存在,即使教室不存在了,课桌仍然可以独立存在,或者是用于其他教室。教室和课桌之间的依赖关系并不是共存亡,也就是相同生命周期的关系。
我们一般用“实线+空心菱心”的形式标记,菱形指向集合类。
组合形式则是更强的依赖关系。代表一个类是另外一个类的不可或缺的组成部分,如果缺失,那么集合类也不能再称之为该类,两者的生命周期一般是同步的。例如太阳系是由太阳+行星组成。如果如果没有太阳了,那么太阳系只能算作是一个 星云,不能再称之为太阳系。两者的生命周期是同步的。
再或者电脑是由显示器键盘主机等器件组成的,如果 没有主机,那么就不能称之为电脑,两者的生命周期是同步的,没有主机的一堆设备,不能称之为电脑。我们一般用“实线+实心菱心”的形式标记,菱形指向组合类。
要注意组合和聚合 其实没有特别明显的界限,二者的界限是有些模糊的。
聚合(学校+老师):
组合(电脑+键盘):
3、依赖、关联
这俩关系也非常相近
我们一般将非常弱,没有直接耦合,只存在于某个方法中的耦合关系(临时变量的使用)称为依赖关系。比如某个方法需要获取下时间,那么对时间类就是依赖。所以这种关系是类与类之间最弱的一种耦合关系,它只存在于方法的依赖中,并不是对象之间直接依赖。我们用“虚线+箭头”表示,箭头指向被依赖的对象。
关联关系是对象之间的直接饮用关系,这是类之间最常用的一种关系。我们一般将之称为一般关联关系、聚合关系、组合关系。上文中的说的聚合、组合关系就属于这里的关联关系。关联关系用“实线+箭头”表示,箭头指向被依赖的对象。如公司依赖员工,则公司指向员工,但是员工其实也可以同时在多加公司任职。所以员工可以也依赖不同公司,像这种互相依赖的我们称之为双向关联。双向关联我们用一根实线来表示。除此之外还有一种特殊情况,就是自关联,也就是一个类的某个属性还是自身,我们需要用箭头再指向自己。(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )
依赖(老师+书):
关联(司机+车):
双向关联(老师+班级):
统一建模语言UML---类图的更多相关文章
- 2017.12.23 第二章 统一建模语言UML概述
第二章 统一建模语言UML概述 (1)为什么要建模 模型是某个事物的抽象,其目的是在构建这个事物之前先来理解它,因为模型忽略了那些非本质的细节,这样有利于更好的理解和表示事物: 在软件系统开发之前首先 ...
- 设计模式——统一建模语言UML
目录 一.UML的结构 1.1视图 1.2图 1.3模型元素 二.类图 2.1类与类图 2.2类之间的关系 三.序列图 3.1序列图定义 3.2序列图组成元素与绘制 四.状态图 4.1状态图定义 4. ...
- 统一建模语言UML
目录 1. UML定义 2. UML结构 2.1 视图(View) 2.2 图(Diagram) 2.3 模型元素(Model element) 2.4 通用机制(General mechanism) ...
- 014.统一建模语言UML
1.UML 的设计目的 UML是为了简化和强化现有的大量面向对象开发方法这一目的而开发的. UML 适用于各种软件开发方法.软件生命周期的各个阶段.各种应用领域以及各种开发工具,是一种总结了以往建模技 ...
- UML类图归纳
作为一个程序员,掌握UML类图是开发和阅读程序的基础. 转载请注明地址http://www.cnblogs.com/zrtqsk/p/3739288.html,谢谢! 一.基本介绍 UML是一种标准的 ...
- 技术人应该学习的行话--UML统一建模语言
新生代码农如何在硝烟弥漫的商业丛林中生存和崛起? 洞见,让一部分先遇见未来. 最近公司技术部在组织架构师培训,有幸参与.导师老刘特别推荐了UML语言的学习.回想多年来,自己习惯做一些流程图,框图或者所 ...
- 【UML】统一建模语言
如果是准备学习设计模式的同学,可以只了解类图相关的知识 而如果是在准备软件设计师考试的同学,或许会对你有点帮助 正在施工...... 参考博客:https://blog.csdn.net/unique ...
- UML类图的6大关系
<小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...
- [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图
[.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图 1.UML简介 Unified Modeling Language (UML)又称统 ...
随机推荐
- .NET ORM框架HiSql实战-第一章-集成HiSql
一.引言 做.Net这么多年,出现了很多很多ORM框架,比如Dapper,Sqlsugar,Freesql等等.在之前的项目中,用到的ORM框架也大多数是这几个老牌的框架. 不过最近园子关于.NET ...
- Redis入门到精通01
Redis入门到精通 目录 Redis入门到精通 一.Redis缓存框架基本介绍 1.1Redis的应用场景 二.Redis的安装方式 2.1Windows操作系统安装Redis 2.2Linux操作 ...
- 动态树 — Link_Cut_Tree
[模板]动态树(Link Cut Tree) Link-cut-tree是一种维护动态森林的数据结构,在需要动态加边/删边的时候就需要LCT来维护. Link-cut-tree的核心是轻重链划分,每条 ...
- 深度学习基础-基于Numpy的多层前馈神经网络(FFN)的构建和反向传播训练
本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及花书的读书笔记.本文将以多分类任务为例,介绍多层的前馈神经网络(Feed Forward Networks,FFN)加上 ...
- 【docker专栏6】详解docker容器状态转换管理命令
docker容器有三种状态运行.停止.暂停,镜像可以创建.运行容器,镜像和容器也可以转换成tar压缩包进行存储.本文为大家介绍容器的状态转换命令及镜像创建运行容器.tar包导入导出相关的命令及使用场景 ...
- Data too long for column 'xxx' at row
Data too long for column 'xxx' at row 数据库的默认的utff-8,且连接的字符串也设置了utf-8,数据库字段用的text,但是还是报错,原因超出了长度,要最大的 ...
- 串口应用:遵循uart协议发送N位数据(状态优化为3个,适用任意长度的输入数据,取寄存器中的一段(用变量作为边界))
上一节中成功实现了发送多个字节的数据.把需要发送的数据分成多段遵循uart协议的数据依次发送.上一节是使用状态机实现的,每发一次设定为一个状态,所以需要发送的数据越多,状态的个数越多,代码越长,因而冗 ...
- Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round(C,D题解)
Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round C - Zero Path 在这道题目中,不可以真正地进行寻 ...
- websocket心跳实现
简介 在实际项目中可能会使用到websocket,在使用过程中可能会存在一种问题就是,当网络异常断开时.或者websocket服务波动时,websocket会断开,导致异常,正常情况下,我们会采用心跳 ...
- java实现wordCount的map
打开IDEA,File--new --Project,新建一个项目 我们已经安装好了maven,不用白不用 这里不要选用骨架,Next.在写上Groupid,Next. 写上项目名称,finish.o ...