UML类图详解和示例
ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/UMLDescription
UML类图概述
什么是UML类图
要认识UML类图,要从UML是什么开始.UML(Unified Modeling Language)即统一建模语言,是用于系统可视化建模语言。它是国际统一软件建模标准,融合了OMT、OOSE、Booch方法中的建模语言。
UML是一种可视化、可用于详细描述、文档化的语言。UML就像数学中的数字和加减符号一样,为所有软件开发的人员提供了一种图形化表达、标准化的语言。通过UML,软件开发人员可以准备的描述软件结构和建模,并通过UML建立整个系统架构和详细文档。
UML类图正是UML建模元素中的一种。
扩展
UML2.0包括14种不同的图,非为表示系统静态结构的静态模型和表示系统动态结构的动态模型。
静态模型:类图、对象图、包图、构件图、部署图、制品图
动态模式:对象图、用例图、顺序图、通信图、定时图、状态图、活动图、交互概览图
为什么要使用UML类图
由于UML类图的精确、无歧义、完整的建模,通常,我们通过使用UML类图来详细的描述系统中的对象和他们的关系。认识UML类图也能帮助我们快速了解、理清系统中对象之间的关系。
UML类图的组成
UML是OO方法(面向对象设计分析方法)的核心。类图包含了:类和对象、类之间的关系、类之间的多重性。
类和对象
对象是描述客观世界中某个具体的实体,而类是对一类具有相同特征的对象的描述。对象是类的实例。在UML中类可表示为一个划分为三个格子的长方形,第一个格子包含类名,中间的格子包含类的属性,最后个格子包含类的操作。如下图:
第一个方格,猫是这个类的类名。
第二个方格包含了两个部分,左边的+、-、# 表示了属性的可见性,分表表示public、private、protected
右边表示类的属性。
第三个方格同属性一样,包含了两部分,前面的符号表示了方法的可见性,后面表示类的方法。
类之间的关系
建立模型时,类不可能是单独存在的。比如猫咪的抓如果没有其他对象,抓这个方法显得毫无意义。UML类图中类之间的关系主要包括:依赖关系、泛化关系、关联关系、实现关系。关联关系包含了聚合关系、组合关系。
依赖关系
定义:有两个元素X、Y,如果修改X的定义可能会引起对Y的定义修改,则称Y依赖与元素X
产生依赖的原因有很多,通常表现为:一个类向另一个类发送信息;一个类是另一个类的数据成员;一个类是另一个类的操作参数等。如下图:
银行作为用户贷款操作的参数,用户依赖与银行,UML类图中用带箭头的虚线表示依赖关系。
泛化关系
泛化关系描述了一般事物与该事物中的特殊种类之间的关系。Java中的继承关系,父类就是子类泛化。
在UML中,泛化关系有三个条件:
- 付类所具有的关联、属性和操作,子类都应该具有
- 子类除了与父类一致的信息外还包含额外的信息
- 可以使用父类的地方,也可以使用子类实例
泛化关系使用带空心箭头的实现表示,箭头指向父类。如下图:
关联关系
关联关系表示两个类之间存在某种语义上的联系,比如一个公司有多个部门,一个部门有多个员工。
关联关系是所有关系语义最弱的关联。UML类中中,用实线来表示。
在上图中1、1..n是用来表示关联的两个类之间的数量关系。具体参见类的多重性。
聚合关系
聚合关系是一种特殊的关联关系。聚合关系表示了类之间的整体与部分的关系。整体与部分之间并没有相同的生命周期,整体消亡后部分可依旧存在。在UML中用带有空心菱形的实线表示,空心菱形指向代表整体的类。比如:电脑是由CPU、主板等组成的。UML表示图如下:
组合关系
组合关系也是部分和整体的关系,相对聚合关系,组合关系中的部分和整体联系更为紧密。整体与部分之间有相同的生命周期,整体消亡后部分也随之消亡。比如公司和部门之间的关系,一旦公司解散,部门也随之解散。UML中用带有实心菱形的实线表示。UML图如下:
实现关系
实现关系用来规定接口和实现接口的类或组件之间的关系。接口可以看作是操作的集合,这些操作用于规定类或组件的服务。在UML中,用一个带空心箭头的虚线来表示。比如我们抽象出飞行这个动作,而对于不同的类可以通过实现飞行接口来作个性化处理。UML图如下:
类的多重性
多重性是用来说明两个类之间的数量关系,表示为一个整数范围n...m,整数n定义所链接的最少对象的数目,m为最多对象数目(但不确定最大数时,可以*号表示)。常见的多重性如下表
| 表示 | 含义 |
|---|---|
| 0...1 | 表示0或者1的关联数目 |
| 0...* | 表示0或多个关联数目 |
| 1...1 | 表示1个关联数目 |
| 1...* | 表示1或多个关联数目 |
| * | 表示有多个关联数目 |
UML类图详解和示例的更多相关文章
- UML类图详解_关联关系_一对多
对于一对多的示例,可以想象一个账户可以多次申购.在申购的时候没有固定上限,下限为0,那么就可以使用容器类(container class)来搞,最常见的就是vector了. 下面我们来看一个“一对多” ...
- UML类图详解_关联关系_多对一
首先先来明确一个概念,即多重性.什么是多重性呢?多重性是指两个对象之间的链接数目,表示法是“下限...上限”,最小数据为零(0),最大数目为没有设限(*),如果仅标示一个数目级上下限相同. 实际在UM ...
- UML类图详解
下面是类图的实例: (注:飞翔接口那里应为空心三角形) UML中类图实例 接口:空心圆+直线(唐老鸭类实现了‘讲人话’):依赖:虚线+箭头(动物和空气的关系):关联:实线+箭头(企鹅需要知道气候才迁移 ...
- UML 类图详解
转载来源:http://blog.csdn.net/shift_wwx/article/details/79205187 可以参考:http://www.uml.org.cn/oobject/2012 ...
- UML类图详解_泛化关系
泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次. 依旧是这个图 下面我们来看一个例子 Account.h #include <cstdlib> ...
- UML类图详解_组合关系
组合关系和聚合关系有一个最大的不同,组合关系中的整体直接掌握部件的生灭,聚合关系中的整体并不具有生灭部件的权力.一旦组合中的整体不存在时,其组合部件也不能单独存在,必须同时消灭.另外,外界也不能直接与 ...
- UML类图详解_关联关系_多对多
在关联关系中,很多情况下我们的多重性并不是多对一或者一对多的,而是多对多的. 不过因为我们要考虑里面的导航性,如果直接搞的话就是需要去维护两群对象之间多对多的互指链接,这就十分繁杂且易错.那么我们怎么 ...
- UML类图详解_聚合关系
结合UML关系,以看台和基金来介绍聚合关系 aggregation,是一种特殊的关联关系,既有关联关系的特质,还独有“整体 —— 部分(whole —— part)”的特质. 也就是说,用之前的关联关 ...
- UML简单介绍—类图详解
类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...
随机推荐
- kubernetes二进制高可用部署实战
环境: 192.168.30.20 VIP(虚拟) 192.168.30.21 master1 192.168.30.22 master2 192.168.30.23 node1 192.168.30 ...
- threeJS创建mesh,创建平面,设置mesh的平移,旋转、缩放、自传、透明度、拉伸
这个小案例是当初我在学习的时候,小的一个小案例,代码还需要进一步优化:还请谅解~~:主要用到了threeJS创建mesh,创建平面,设置mesh的平移,旋转.缩放.自传.透明度.拉伸等这些小功能: 采 ...
- Eclipse "R cannot be resolved"问题
前两天 Eclipse 又遇到了这个问题.网上找了不少,不过最终还是没能解决我的问题,无奈重装了 Eclipse…… 搜索中找到了下面这几篇文章,常见的解决方法都在这里,还是不错的,分享一下: htt ...
- 【经验分享】ASP.NET 的 Page_Load 执行了2次,真的!
发现问题 这是来自一位网友的提问: 本着求真务实的态度,我打开了 AppBoxPro 项目,本地调试果然发现 Page_Load 进入了两次! 其实在没测试之前,我就有了大概的方向,因为AppBoxP ...
- 多线程编程(Linux C)
多线程编程可以说每个程序员的基本功,同时也是开发中的难点之一,本文以Linux C为例,讲述了线程的创建及常用的几种线程同步的方式,最后对多线程编程进行了总结与思考并给出代码示例. 一.创建线程 多线 ...
- ORACLE 的CONNECT BY、START WITH,CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、SYS_CONNECT_BY_PATH,LEVEL的使用(Hierarchical query-层次查询)
如果表中存在层次数据,则可以使用层次化查询子句查询出表中行记录之间的层次关系基本语法: START WITH <condition1> CONNECT BY [ NOCYCLE ] < ...
- lvs+keepalived 高可用及负载均衡
一.环境准备 VIP:10.18.43.30 dr1:10.18.43.10 dr2:10.18.43.20 web1:10.18.43.13 web2:10.18.43.14 结构图 (一).预处理 ...
- Java:控制反转(IoC)与依赖注入(DI)
很长一段时间里,我对控制反转和依赖注入这两个概念很模糊,闭上眼睛想一想,总有一种眩晕的感觉.但为了成为一名优秀的 Java 工程师,我花了一周的时间,彻底把它们搞清楚了. 01.紧耦合 在我们编码的过 ...
- python_Tensorflow学习(三):TensorFlow学习基础
一.矩阵的基本操作 import tensorflow as tf # 1.1矩阵操作 sess = tf.InteractiveSession() x = tf.ones([2, 3], &qu ...
- Asp.Net Core WebAPI+PostgreSQL部署在Docker中
PostgreSQL是一个功能强大的开源数据库系统.它支持了大多数的SQL:2008标准的数据类型,包括整型.数值值.布尔型.字节型.字符型.日期型.时间间隔型和时间型,它也支持存储二进制的大对像, ...