阅读本文大概需要 3.5 分钟。

本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统。

所以现在打算重写,加上距离现在也有一段时间了,也算是自己的一个回顾吧!

学而时习之,不亦说乎。

从零开始单排学设计模式的国服排位之旅,今天正式开启!

目前段位:定级赛

 

这篇文章来总结下UML类图,本来不打算讲UML类图的,因为我在学习设计模式的时候,一遇到有关UML的就会自动忽略,一看感觉就很复杂。

但是随着学习的深入,发现不掌握UML类图,对设计模式或者某一个框架没有整体的把控。所以与其逃避,不如敢于面对,今天就让我们一起来了解下什么是UML类图。

Let's Go!

前言

设计模式不是语法,是一种巧妙的写法,能把程序变的更加灵活。架构模式比设计模式大,架构模式是战略,而设计模式是战术。

设计模式分为3大类型:创建型,行为型,结构型,总共有23种。

UML类图

类图描述系统中类的静态结构,它不仅定义系统中的类,描述类之间的联系,如关联、依赖、聚合等,还包括类的内部结构(类的属性和操作)。

类图描述的是静态关系,在系统的整个生命周期中都是有效的。

对象图是类图的实例,它们的不同之处在于对象图显示类图的多个对象实例,而不是实际的类。由于对象存在生命周期,所以对象图只能在系统某一时间存在。

UML基本图示法

虚线箭头指向依赖;

实线箭头指向关联;

虚线三角指向接口;

实线三角指向父类;

空心菱形能分离而独立存在,是聚合;

实心菱形精密关联不可分,是组合;

上面是UML的语法,在画类图的时候,清理类和类之间的关系是重点。

类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。

其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。

基本概念

类图(Class Diagram):类图是面向对象系统建模中最常见和最重要的图,是定义其他图的基础。

类图的主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。

类图的3个基本组件:类名、属性、方法。

详细解析

注:下面图片实例中的代码为C#代码,非Java代码!

继承关系

 

首先看到上图这个“动物”矩形框,它就代表一个类(Class)。

类图分三层

第一层显示类的名称,如果是抽象类,则就用斜体显示。

第二层是类的特性,通常就是字段和属性。

第三层是类的操作,通常是方法或行为。

 

在看到上图中的“飞翔”,它表示一个接口图,与类图的区别主要是顶端有<<interface>>显示。

第一行是接口名称,第二行是接口方法。

接口还有另一种表示方法,俗称棒棒糖表示法,就是唐老鸭类实现了“讲人话”的接口。

鸭子本来也有语言,只不过只有唐老鸭是能讲人话的鸭子。

注意动物、鸟、鸭、唐老鸭之间的关系符号,你就会发现它们都是继承的关系。

 

继承关系用空心三角形+实现来表示。

这里列举的几种鸟中,大雁是最能飞的,我让它实现了飞翔接口。

 

实现接口用空心三角形+虚线来表示。

在看下图中企鹅和气候两个类,企鹅是很特别的鸟,会游不会飞。更重要的是,它与气候有很大的关联。我们不去讨论为什么北极没有企鹅,为什么它们要每年长途跋涉。

 

总之,企鹅需要“知道”气候的变化,需要“了解”气候规律。

当一个类“知道”另一个类时,可以用关联(association)。

关联关系用实现箭头来表示。

 

我们再来看上图中大眼与雁群这两个类,大雁是群居动物,每只大雁都属于一个雁群,一个雁群可以又很多只大雁。

所以它们之间就满足聚合(Aggregation)关系。

聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。

聚合关系用实心的菱形+实线箭头来表示。

 

合成(Composition,也有翻译成“组合”的)是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的声明周期一样。

在这里鸟和其翅膀就是合成(组合)关系,因为它们是部分和整体的关系,并且翅膀和鸟的声明周期是相同的。

合成关系用实心的菱形+实现箭头来表示。

另外,你会注意到合成关系的连线两端还有一个数字“1”和数字“2”,这被称为基数。表明这一段的类可以有几个实例,很显然,一个鸟应该有两只翅膀。

如果一个类可能有无数个实例,则就用“n”来表示。关联关系、聚合关系也可以有基数的。

 

动物几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气、水以及食物等。也就是说,动物依赖于氧气和水。

他们之间是依赖关系(Dependency),用虚线箭头来表示。

结语

编程是一门技术,更加是一门艺术!

不能只满足于写完代码运行结构正确就完事,时常考虑如何让代码更加简练,更加容易维护,容易扩展和复用,只有这样才能可以真正得到提高。

切身感悟:自己几个月之前写完的代码,现在再来回顾,你会发现这代码简直了...,一团糟,甚至怀疑这代码不是出自自己之手(绝对是自己写的)。想着手优化,进行改进,又怕本来没问题的功能,改出问题,影响使用,然后又进入恶性循环了。。。这种情况要切记,一定要尽可能的避免!

写出优雅的代码也是一种很爽的事情!!!


往期精彩回顾

房东:你敢申报,我就涨房租!京东取消年终奖!

一千行MySQL详细学习笔记(值得学习与收藏)

你女朋友是高可用么?

在Java中如何优雅地判空

最近整个业内状态不太好,注意提防一些公司的小九九!

Java爬取并下载酷狗TOP500歌曲

如何计算服务器能够承受多大的pv?

程序员们,别再学习框架了!

专科程序员与本科程序员之间有什么区别?

程序员的一天是怎样过的?

从 0 开始手写一个Tomcat,7 步搞定!

从零开始单排学设计模式「UML类图」定级赛的更多相关文章

  1. 从零开始单排学设计模式「装饰模式」黑铁 I

    阅读本文大概需要 3.6 分钟. 本篇是设计模式系列的第四篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了 ...

  2. 从零开始单排学设计模式「策略模式」黑铁 II

    阅读本文大概需要 1.7 分钟. 本篇是设计模式系列的第三篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统.所以现在打算重写,加上距离现在也有一段时间了, ...

  3. 从零开始单排学设计模式「简单工厂设计模式」黑铁 III

    阅读本文大概需要 2 分钟. 本篇是设计模式系列的第二篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统.所以现在打算重写,加上距离现在也有一段时间了,也算 ...

  4. 设计模式之UML类图的常见关系

    设计模式之UML类图的常见关系 本文来自转载 烧点饭博客 本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association), ...

  5. 北风设计模式课程---UML类图各符号含义

    北风设计模式课程---UML类图各符号含义 一.总结 一句话总结: 用脑子,挺好记的:实线关系肯定比虚线重,箭头.三角形.菱形的关系肯定依次加重,三角形是继承和实现, 1.UML类图中 线+箭头 表示 ...

  6. 23种常用设计模式的UML类图

    23种常用设计模式的UML类图 本文UML类图参考<Head First 设计模式>(源码)与<设计模式:可复用面向对象软件的基础>(源码)两书中介绍的设计模式与UML图. 整 ...

  7. 图解Java设计模式之UML类图

    图解Java设计模式之UML类图 3.1 UML基本介绍 UML图 UML类图 3.1 UML基本介绍 1)UML – Unified modeling language UML(统一建模语言),是一 ...

  8. 转载:23种常用设计模式的UML类图

    转载至:https://www.cnblogs.com/zytrue/p/8484806.html 23种常用设计模式的UML类图 本文UML类图参考<Head First 设计模式>(源 ...

  9. 设计模式之UML类图

    在学设计模式的过程中经常碰到各式各样的UML类图.那些眼花缭乱的符号有什么含义呢? 类图含义 类图中的关系 从网上找来一张图作为实例 依赖关系:比如动物依赖氧气和水,这里如学生要依赖自行车.用虚线箭头 ...

随机推荐

  1. mysql启动服务

    mysql.server start 启动mysql服务mysql.server stop 停止mysql服务 mysql密码:123456Az_

  2. Jenkins+Gradle+Git自动打apk包,并上传到ftp

    软件安装: 1.安装Jenkins.git.AndroidSDK 2.配置AndroidSDK环境变量 ANDROID_HOME:D:\Androidsdk PATH:%ANDROID_HOME%\p ...

  3. pytesseract在识别只有一个数字的图片时识别不出来

    大家好,近期在做自动化测试时,遇到了一个问题需要通过识别图片来实现,遂用到了pytesseract模块和tesseract-ocr这个工具.在使用过程中发现,识别带有数字的图片时,如果这个图片上仅有一 ...

  4. openstack系列文章(1)devstack安装测试Queens

    1.在OpenStack 圈子中,有这么一句名言:”不要让朋友在生产环境中运行DevStack.但是初学者在没有掌握OpenStack CLI的情况下用devstack安装测试环境还是不错的.本系列文 ...

  5. 初学html,任务2:写一个简单的登陆/注册界面

    先在body中把最基础的标签写出来 现在页面运行出来是这样的 就是一个没有任何样式的基础界面: 接下来我们为这些标签加上样式 首先还是让页面所有元素的padding和margin都设置为0, 清除浏览 ...

  6. HTTP之请求消息Request

    客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line).请求头部(header).空行和请求数据四个部分组成. 请求行以一个方法符号开头,以空格分开,后面跟着请 ...

  7. SystemUI中监听app启动,修改app中的状态栏背景色

    参考 http://www.2cto.com/kf/201206/137225.html 从Android4.4开始,app可以自定义status bar 背景. 对于一些第三方app定义的状态栏背景 ...

  8. 学习python importlib的导入机制

    1. Importer协议 协议涉及两个对象: Finder 和 loader 1. Finder 实现了方法: finder.find_module(fullname, path=None) 返回一 ...

  9. 第四次Scrum编码冲刺!!!!

    一.总体任务: 本次冲刺是完成对图书馆管理系统的最后三个功能的实现------管理员对用户授权.用户注销和用户查询 二.个人任务及完成情况:    本人本次的任务是实现对管理员对用户授权部分的界面与部 ...

  10. php发送http put/patch/delete请求Demo

    CURL请求对于PHPer是必备技能,使用curl_opt函数来发送各式各样的http请求动作,不仅限于get和post.在测试自己的restful api的时候,通过访问这个代理发送http put ...