设计模式之序-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的九种图、类图以及类图间的关系。设计模式中有好些需要用到类图间的关系,所以在序章先打下基础了~

设计模式-UML类图基础的更多相关文章

  1. 设计模式UML类图基础

    1.聚合 聚合(aggregation)表示一种弱的"拥有"关系,体现的是A对象可以包含B对象,但是B对象不是A对象的一部分.如大雁是群居动物,每只大雁都属于一个雁群,一个雁群可以 ...

  2. 23种经典设计模式UML类图汇总

    在这里23种经典设计模式UML类图汇总       创建型模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基 ...

  3. 设计模式-UML类图的各符号含义(转)

    UML类图的各符号含义 类图基本符号可拆分为虚线,箭头,实线,空心右三角,实心右三角,空心菱形和实心菱形.由这些基本的图形进行组合构成了类图的基本符号.这里要注意这几个符号的顺序,代表了类与类之间关系 ...

  4. php设计模式——UML类图

    前言 用php开发两年多了,准备也写一下平时常用的设计模式,都是基于自己的实践经验,当然,用设计模式之前首先要看懂设计模式,因此这里首先讲解一下UML类图.通过UML类图,能更好的和大家交流,也能很容 ...

  5. Java 大黑话讲解设计模式 -- UML类图

    目录 1.啥是UML类图? 2.UML类图有啥用? 3.正式理解UML类图 4.使用idea画第一个UML类图 5.类之间的关系图[必须牢记] 6.类之间的关系 6.1.依赖 6.2.泛化 6.3.实 ...

  6. UML类图基础说明

    UML类图主要由类和关系组成. 类: 什么具有相同特征的对象的抽象, 具体我也记不住, 反正有官方定义 关系: 指各个类之间的关系 类图 类就使用一个方框来表示, 把方框分成几层, 来表示不同的信息, ...

  7. UML 类图基础知识记录

    UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 依赖(Dependency): 关联(Association): 聚合(Aggregation): 合成(Composition): 泛化 ...

  8. UML 类图基础

    先留个坑, 后续再填 UML 类图中主要包括以下几种关系: 1. 泛化: 定义:继承关系,指定子类继承父类的所有特征与行为. 图形:三角形箭头,指向父类.         2. 实现 定义:类与接口的 ...

  9. java设计模式--UML类图

    2016-06-07 22:46:16 下面简单介绍UML类图:(图是截取的,大家可以用UML工具去画) 1.描述类的类图 类:Person 属性:name   age   sex 访问权限:-  表 ...

随机推荐

  1. 防火墙在setup进入不了

    dbus-daemon --system dbus-daemon --system

  2. iOS边练边学--tableView的批量操作

    一.tableView批量操作方法一:(自定义) <1>在storyboard中添加imageView控件,用来操作当cell被选中后显示图标 <2>拖线,在自定义控件类中与i ...

  3. 消息中间件系列之Java API操作ActiveMQ

    一.依赖 <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activem ...

  4. Ubuntu创建新用户并增加管理员权限 删除某个用户

    sudo adduser xxx 这样的命令会在home目录下添加一个帐号sudo useradd xxx 仅仅是添加用户, 不会在home目录添加帐号 删除:终端方法:以下用newuser代替想要删 ...

  5. HTTP/1.1 学习

    发现对于HTTP协议不能脱口而出,故而怒翻资料,RFC2616 . 在其abstract中是这么说HTTP的,应用层协议,generic.无状态.其特点之一是 the typing and negot ...

  6. native生成策略:由Hibernate根据所使用的数据库支持能力从identity、sequence或者等生成策略中选择一种

    increment生成策略:当Hibernate准备在数据库表中插入一条新记录时,首先从数据库表中获取当前主键字段的最大值,然后在最大值基础上加1,作为当前持久化对象的标识符属性值.这种策略即incr ...

  7. js unicode处理

    //岗位详细界面 var str="1.\u000D\u21B52.\u000D\u21B53"; var pad = function() { var tbl = []; ret ...

  8. CentOS6.8忘记root密码的解决办法(开始初始化也可以用)

    在开机启动的时候按键盘上的“E”键会进入如下界面. 选择相应的内核,再次按“E”,出现下图,选择第二项,再次按“E”键 经过第二步,这个画面可以编辑,在信息的最后加“空格”,然后键入“single”( ...

  9. Js注释和对象

    1.注释 单行: //注释内容 console.log('加油~');//在控制台输出一条信息: 多行: /*注释内容*/: 2.对象 1)对象是一个复合值,是根据某种引用类型创建出来的实例. 2)常 ...

  10. [精]Odoo 8.0深入浅出开发教程-模块开发基础

    參考资料点击这里. 构建Odoo模块 模块组成 业务对象 业务对象声明为Python类, 由Odoo自己主动加载. 数据文件 XML或CSV文件格式, 在当中声明了元数据(视图或工作流).配置数据(模 ...