设计模式之序章-UML类图那点事儿
设计模式之序-UML类图那点事儿
序
打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐的书我还隐约记得,叫GoF的,书名是《Design Patterns: Elements of Reusable Object-Oriented Software》,也即《设计模式》,机械出版社的将其翻译为《设计模式-可复用面向对象软件的基础》。至于为什么叫做GoF,那时候因为作者是四个人,被称为(Gang of Four),至于作者分别交什么?自行度娘或者谷歌去吧。好吧扯远了,继续刚才的说。虽然打算来写这么一个基于JAVA语言实现的设计模式系列,但是由于懒病深钟,且已病入膏肓,便无疾而终。直至前些天,群里有人并让我教他设计模式,他是一个做前端的,因此不禁念头又生,说道:那我写一个系列用于讲设计模式的算了,群里其他人也纷纷表示要学习。于是便有了此文。身为设计模式方面的半吊子,重温设计模式(以前看过小菜版的大话设计模式,不过是C#写的),文中若有不对之处,请各位大神务必指出,可不要让我误人子弟。闲话少说,在设计模式正文开始之前先介绍一下UML类图。
UML以及UML类图简介
Unified Modeling Language (UML)又称统一建模语言或标准建模语言。UML从考虑系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、部署图等9种图。这些图从不同的侧面对系统进行描述。系统模型将这些不同的侧面综合成一致的整体,便于系统的分析和构造。尽管UML和其它开发工具还会设计出许多派生的视图,但上述这些图和其它辅助性的文档是软件开发人员所见的最基本的构造。首先对9种图做个简要介绍:
1.UML用例图与OOSE中的用例图类似。
2.UML的类图综合了OMT、Booch等面向对象方法中的类图。
3.UML状态图是对David Harel所提出状态图的改进。
4.UML活动图的基本语义和状态图大致相同,它类似于许多方法(包括面向对象技术之前的一些方法)中的工作流图。
5.UML的协作图是通过对Booch方法的对象图、Fusion方法的对象交互图以及其它一些方法中的相关图表改造而成的。
6.UML的构建图和部署图是在Booch方法中的模块和进程图(处理关系图、处理器图)的基础上发展起来的。
当然在此主要介绍类图。在UML的静态机制中类图是一个重点,它不但是设计人员关心的核心,更是实现人员关注的核心。建模工具也主要根据类图来产生代码。James Rumbaugh对类的定义是:类是具有相似结构、行为和关系的一组对象的描述符。类是面向对象系统中最重要的构造块。类图显示了一组类、接口、协作以及 他们之间的关系。在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统。类加上他们之间的关系就构成了类图,类图中还可 以包含接口、包等元素,也可以包括对象、链等实例。
类的UML表示
类的命名尽量应用领域中的术语,应明确、无岐义,以利于相互交流和理解。类的属性、操作中的可见性使用+、#、-分别表示public、protected、private。

我们通过以上的图来分别解释行是什么含义(感谢百度百科提供的图):
第一行是类的名称,抽象类是用斜体表示。
第二行是类里面所具有的属性:比如说如果这个类是一个动物的话,那么color、name之类的都可以在此描述。
第三行是类里面所包含的方法,比如说跑,跳,说话等等等等~
说完了类的UML表示,那么重点内容就要来了(PS:警报,前方高能、、、)
UML类图的几种关系
在UML类图中,当然不可能仅仅一个类孤立的存在着,这样也没有什么意义,就如同人一般,必须是群体性的,既然有多个类图,那么自然就有各种关系,就像人,人与人之间有基友,损友,诤友blablabla、、、好吧,那些都是朋友~那么类图之间有什么关系呢?常见的有以下几种:实现(Realization)、泛化(Generalization)、关联(Association)、聚合(Aggregation)、组合(Composition)、依赖(Dependency)这么几种。下面具体介绍。(PS:以下内容来自tianhai110)。
实现(Realization)
【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现。
【箭头指向】:带三角箭头的虚线,箭头指向接口。

泛化(Generalization)
【泛化关系】:是一种继承关系,它指定了子类如何特化父类的所有特征和行为例如:老虎是动物的一种。
【箭头指向】:带三角箭头的实线,箭头指向父类。
关联(Association)
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子。
关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量。
【箭头及指向】:带普通箭头的实心线,指向被拥有者。

上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。当然也会有自身的关联。如下图所示就是自身的关联。
聚合(Aggregation)
【聚合关系】:是整体与部分的关系.如车和轮胎是整体和部分的关系。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量。
【箭头及指向】:带空心菱形的实心线,菱形指向整体。

组合(Composition)
【组合关系】:是整体与部分的关系.,没有公司就不存在部门 组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【代码体现】:成员变量。
【箭头及指向】:带实心菱形的实线,菱形指向整体。

依赖(Dependency)
【依赖关系】:是一种使用的关系,所以要尽量不使用双向的互相依赖。
【代码表现】:局部变量、方法的参数或者对静态方法的调用。
【箭头及指向】:带箭头的虚线,指向被使用者。

各种关系的强弱顺序:
泛化= 实现> 组合> 聚合> 关联> 依赖
下面这张UML图,比较形象地展示了各种类图关系:

以上就是有设计模式的序章的全部内容,主要介绍了UML、UML的九种图、类图以及类图间的关系。设计模式中有好些需要用到类图间的关系,所以在序章先打下基础了~
PS:本博客欢迎转发,但请注明博客地址及作者~
博客地址:http://www.cnblogs.com/voidy/
博客新址:http://voidy.net
<。)#)))≦
设计模式之序章-UML类图那点事儿的更多相关文章
- 设计模式之前奏(UML类图)
原文:设计模式之前奏(UML类图) 本人菜菜一个,最近一直在博客园游走闲逛,看到了各种技术,各种各种…….便看到了大话设计模式这本书,下了电子版的看了看第一章,感觉相当不错,不仅通俗易懂,而且与实际案 ...
- 北风设计模式课程---20、UML类图介绍
北风设计模式课程---20.UML类图介绍 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备工厂先生 ...
- 设计模式课程 设计模式精讲 2-3 UML类图讲解自上而下
1 内容简析(易错加粗) 2 uml类图展示 1 内容简析(易错加粗) 1.1 设计模式中的对象关系 依赖关系 虚线箭头 组合关系 实心菱形 聚合关系 空心菱形(想象成盘子,盛东西,盘子的多,另一方少 ...
- 《设计模式》读懂UML类图
一.类中的主要关系 继承.实现.组合.聚合.依赖.关联 二.UML类图 三.代码实现 public class H2O { } public class O2 { } public interface ...
- 设计模式学习——准备(UML类图)
前言 其实吧,最早接触UML是源于软件设计师的考试,半路出家实在难为我了.学设计模式总是要画类图的,所以补充UML的类图的知识是很重要滴.第一篇就偷懒一点copy别人的东西了.实话说,我们都是踩在巨人 ...
- 设计模式课程 设计模式精讲 2-2 UML类图讲解
1 类图讲解 1 类图讲解 + 公共方法 - private权限 # protected权限 包内和包外继承的子类都能引用 ~ default权限(包权限)只有包内能引用 下划线 静态 Stati ...
- 设计模式课程 设计模式精讲 2-4 UML类图讲解 对比讲解 demo
1 主要内容 1.1 关联和依赖的对比 1.2 组合和聚合的对比 1.3 继承和实现的对比 1.4 各种关系代码实现demo 1 主要内容 1.1 关联和依赖的对比 关联是a类中存在b类对象,企鹅类中 ...
- 设计模式-UML类图基础
设计模式之序-UML类图那点事儿 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐的书 ...
- UML类图和时序图符号
看懂UML类图和时序图 https://www.cnblogs.com/me115/p/4092632.html 内容目录: 从一个示例开始 类之间的关系 时序图 附录:<图说设计模式> ...
随机推荐
- Oracle SQL Developer-3.2.20.09.87 Windows 10启动问题处理&配置
用了好多年的工具,准备在笔记本上使用时启动不了,但在办公室PC上可以正常使用.两者电脑OS都一样,一个是全新安装.一个是从Windows 7升级而来.下载了最新版发现版本到17了,Oracle刷版本号 ...
- COGS 11. 运输问题1
★★☆ 输入文件:maxflowa.in 输出文件:maxflowa.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 一个工厂每天生产若干商品,需运输到 ...
- HDU1075 字典树 + 字符串映射
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1075 ,字典树的字符串映射. 题意是给你每个火星文单词对应的英语,然后让你把一篇火星文文章给翻译成英语 ...
- hdu-2255 奔小康赚大钱---KM模板
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2255 题目大意: Problem Description 传说在遥远的地方有一个非常富裕的村落,有一 ...
- Android(java)学习笔记83:各种边距设置
1. 各种边距设置: (1)android:layout_paddingLeft 内边距,对谁用,指的是谁的内部内容边距 (2)android:layout_marginLeft 外边距,对谁用,指的 ...
- 第八章 熟练dom的几个常用方法
显示“缩略词语” <abbr> 标签指示简称或缩写,比如 <abbr title="World Wide Web Consortium">W3C</a ...
- InstallShield Limited Edition for Visual Studio 2013 图文教程打包安装包
http://www.wuleba.com/23892.html 从Visual Studio 2012开始,微软就把自家原来的安装与部署工具彻底废掉了,转而让大家去安装使用第三方的打包工具“Inst ...
- Java如何将十六进制数转换为十进制数的自编程序
package com.swift;//所属包 import java.util.Scanner;//导入扫描器 public class Hex2Decimal { public static vo ...
- KVM修改虚机网卡模式:由NAT模式改为Bridge模式
1)关闭虚机# virsh shutdown vm1 2)编辑虚机配置文件# virsh edit vm1 <interface type='default'> 改为<int ...
- Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本
Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/92234 ...