UML 入门指南 | 面向对象设计 | 类图 | 时序图 |(万字多图,非常干燥)

一、前言

谈到面向对象技术的分析和设计,自然就离不开 UML。对于 UML 这个概念,很多程序员朋友耳熟能详,也有在用,但在工作中,一些朋友其实并不擅长使用 UML 甚至对 UML 这个东西模棱两可,也包括我自己。因此我希望可以结合自己的经验和实践,写一篇 UML 的入门文章,帮助做面向对象的程序员朋友能更好的利用它,从而顺利完成自己的编程设计工作。

以下是本文大纲。

二、从一个示例开始

先举个现实世界的例子。我们上大学的时候,作为学生,每人都有一张学生证,会归属到一个班级,上学时可能会用到自行车。很多同学还会考驾照,挑放假时间练车,车可能是轿车也可能是皮卡。

如果想通过在线的方式记录以上的信息和行为,在软件世界中如何表达呢?

相信很多朋友的操作是,找到这段话里的主语和宾语,也就找到了这个例子中涉及的角色,然后通过动词来判断各个角色之间的关系和能力,最后用代码的方式来表达,产出可执行的程序。

像下图这样,识别出关键的实体和它们之间的关系。

用软件工程的方式,解决现实中的问题,是信息时代最明显的特点,这让我们的生活和工作变得更加便利。

但现实世界错综复杂,灵活多变,每个人的理解可能会有不同,从现实世界到软件世界的映射,就变得困难重重,一团乱麻。

如何让现实世界到软件世界映射变的简单容易,这就是 UML 要解决的问题。

三、什么是 UML?

UML 全称是 Unified Modeling Language(统一建模语言),它以图形的方式来描述软件的概念。

3.1 为什么称为语言

先说语言,为什么称为语言?

名称的落脚点是语言。既然是语言,那么它就会具备语言的特性,比如结构上它由词汇和语法构成,功能上它能解决沟通问题。

你熟知的语言里比较多的应该是汉语和英语,如果从事软件行业,C 语言和 Java 语言你应该也不会陌生。英语和 Java 语言明显都是语言,却常常不被放在一起讨论,为什么?因为它们是不同维度的语言。英语是解决现实世界中人与人之间沟通问题的人类语言,Java 是解决软件世界中程序员与计算机之间沟通问题的计算机语言。

人类语言本质上是事实和观点的表达,计算机语言本质上是0 和 1 的表达。前者的表达形式是难以确定的,而且可能会产生歧义,所以才会有「被误解是表达者的宿命」这样的观点, 但后者就是确定性无歧义的 0 1 表达。

这么看来,UML 的目标是通过一定结构的表达,来解决现实世界到软件世界的沟通问题。

3.2 什么是建模

再说建模,模是什么,需要怎么建?

建模简单讲,是指通过抽象的方式解决某个领域的问题。各个抽象角度共同组成了一个问题领域。

对于传统模型而言,建造它是为了证明这个问题领域下某件事物能否工作。当然它有前提,即建造模型的成本远远低于建造实物的成本。比如造飞机或造高楼。

对于软件模型而言,建造它是为了与他人沟通,也为了保存这个问题领域下软件设计的最终成果。当然它也有前提,就是模型比代码更说明问题。

比如购物这个问题,甲可以在淘宝上买衣服,乙可以在亚马逊上买书,丙可以在京东上买手机。

谁买东西?是甲、乙和丙,他们都能抽象成人。

买什么东西?有衣服、书和手机,它们都能抽象成货。

在哪里买?在淘宝,亚马逊和京东,它们都能抽象成场。

整体抽象一下就是人到场里买货。所以购物这个场景所抽象出来的人货场,就用来解决零售领域的问题。当然还可能会有些规则,比如成为注册会员才能发生交易。

我们会发现,一个特定的事件(比如购物)里,会有特定的人的行为(比如甲乙丙要上电商网站),会有特定的物(比如货),有特定的规则(比如注册会员),共同完成购物这件事。

特定的事 = 特定的人的行为 + 特定的物 + 特定的规则

<< · Back Index ·>>

发表回复

相关推荐

必胜客兼职体验

一、面试 选择一个人少的时间去面试,一般都会安排好,我是3点半去的,面试10分钟左右,面试的人是一位小姐姐,讲话很温柔, ...

· 12分钟前

考研一般怎么报名?在哪里报?

考研报名包括网上报名和现场确认两个阶段。网上报名阶段需登录教育部规定的官方网站进行报名,报名网站为“中国研究生招生信 ...

· 21分钟前

公司培訓管理制度模板分享

俗話說,無規矩不成方圓;凡事預則立,不預則廢;創業不是一件容易的事,對外我們需要去開拓市場,對內我們需要穩定、團結、...

· 21分钟前

关于蜜蜂和蜂产品的那些事 1 ——蜜蜂的类别

​ 一年蜂忙季即将结束,得花偷闲又开侃。 蜜蜂是自然中常见的生物,是昆虫界群体生活的代表,它们数量庞大群居在一起,过著 ...

· 34分钟前

英语课可以叫自己 Dio 吗? 网络流行语科普-dio是什么意思?

dio,就是嚣张傲慢,又玩世不恭的感觉。 源自《JoJo的奇妙冒险》第三部星辰十字军中的反派角色之一的迪奥·布兰度(dio),迪 ...

· 37分钟前