设计模式之序-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类图那点事儿的更多相关文章

  1. 设计模式之前奏(UML类图)

    原文:设计模式之前奏(UML类图) 本人菜菜一个,最近一直在博客园游走闲逛,看到了各种技术,各种各种…….便看到了大话设计模式这本书,下了电子版的看了看第一章,感觉相当不错,不仅通俗易懂,而且与实际案 ...

  2. 北风设计模式课程---20、UML类图介绍

    北风设计模式课程---20.UML类图介绍 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备工厂先生 ...

  3. 设计模式课程 设计模式精讲 2-3 UML类图讲解自上而下

    1 内容简析(易错加粗) 2 uml类图展示 1 内容简析(易错加粗) 1.1 设计模式中的对象关系 依赖关系 虚线箭头 组合关系 实心菱形 聚合关系 空心菱形(想象成盘子,盛东西,盘子的多,另一方少 ...

  4. 《设计模式》读懂UML类图

    一.类中的主要关系 继承.实现.组合.聚合.依赖.关联 二.UML类图 三.代码实现 public class H2O { } public class O2 { } public interface ...

  5. 设计模式学习——准备(UML类图)

    前言 其实吧,最早接触UML是源于软件设计师的考试,半路出家实在难为我了.学设计模式总是要画类图的,所以补充UML的类图的知识是很重要滴.第一篇就偷懒一点copy别人的东西了.实话说,我们都是踩在巨人 ...

  6. 设计模式课程 设计模式精讲 2-2 UML类图讲解

    1 类图讲解 1 类图讲解 + 公共方法 - private权限 # protected权限 包内和包外继承的子类都能引用 ~ default权限(包权限)只有包内能引用 下划线   静态 Stati ...

  7. 设计模式课程 设计模式精讲 2-4 UML类图讲解 对比讲解 demo

    1 主要内容 1.1 关联和依赖的对比 1.2 组合和聚合的对比 1.3 继承和实现的对比 1.4 各种关系代码实现demo 1 主要内容 1.1 关联和依赖的对比 关联是a类中存在b类对象,企鹅类中 ...

  8. 设计模式-UML类图基础

    设计模式之序-UML类图那点事儿 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐的书 ...

  9. UML类图和时序图符号

    看懂UML类图和时序图 https://www.cnblogs.com/me115/p/4092632.html 内容目录: 从一个示例开始 类之间的关系 时序图 附录:<图说设计模式> ...

随机推荐

  1. <Android 基础(一)> Service

    介绍 Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件.其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行.另外,一个组件能够 ...

  2. JNI教程

    一.什么是JNI JNI(Java Native Interface ),它是Java SDK的一部分,主要用于实现Java对其他语言编写的代码和库的调用,比如C和C++.JNI提供的API也能让JV ...

  3. System Center Configuration Manager 2016 域准备篇(Part4)

    步骤4.创建系统管理容器 注意:在Active Directory域控制器服务器(AD01)上以本地管理员身份执行以下操作 有关您为何这样做的详细信息,请参阅https://docs.microsof ...

  4. LeetCode Remove Element删除元素

    class Solution { public: int removeElement(int A[], int n, int elem) { ]; int i,num=n; ;i<n;i++){ ...

  5. 详细步骤教你安装yii高级应用程序和配置composer环境

    现在开始工作,应公司的要求,要开始接触yii了,作为一个没有碰过yii的小白,首先一个问题就是怎么去安装高级程序应用,过程不麻烦,但是也需要细心和耐心,百度资料里面的教程都不太全,漏这漏那的,所以在这 ...

  6. centos下的安装mysql,jdk

    mysql: 如果你是用rpm安装, 检查一下RPM PACKAGE:rpm -qa | grep -i mysql如果mysql已经安装在本机,则会列出mysql安装过的文件 ,像mysql-ser ...

  7. 【BZOJ4001】[TJOI2015] 概率论(卡特兰数)

    点此看题面 大致题意: 问你一棵\(n\)个节点的有根二叉树叶节点的期望个数. 大致思路 看到期望,比较显然可以想到设\(num_i\)为\(i\)个节点的二叉树个数,\(tot_i\)为所有\(i\ ...

  8. CDQ分治入门

    前言 \(CDQ\)分治是一个神奇的算法. 它有着广泛的用途,甚至在某些题目中还能取代\(KD-Tree\).树套树等恶心的数据结构成为正解,而且常数还小得多. 不过它也有一定的缺点,如必须离线操作, ...

  9. 2018.6.18 MyEclipse导入jquery-1.8.0.min.js等文件报错的解决方案

    MyEclipse导入jQuery-1.8.0.min.js等文件的时候有时候会报了一堆missing semicolon的错误.怎么解决这个报错呢?方法如下: 1.选中报错的jquery文件例如&q ...

  10. USACO09FEB Fair Shuttle

    题目传送门 据说\(NOIp\)前发题解可以\(\mathfrak{RP}\)++ 因为要尽可能满足更多奶牛,所以按照这种区间贪心题的套路,先按右端点排序,然后依次遍历,能坐车的就让它们坐车,这样一定 ...