1.前言

对于当前社会背景下从事软件开发的工作者而言,“写代码”实际上并不是唯一的工作。特别在一些中小型的企业当中,这些企业往往对于开发者的要求,不单单停留在写代码完成相应功能上,在实际的软件项目工作开展期间,企业往往会节省成本需要你“身兼多职”。

基于这种市场现象而言,我对当下社会作为一个合格软件开发者的定义,更偏向另一种称谓:即“问题解决者”,解决以业务软件为中心的各式各样的问题。所以在编码工作之外还会参与:需求分析、项目设计、测试、项目部署等工作。除了参与多方面职能的工作之外,还需要你会多项技能,其中主要包括:制作文档、画图(UML建模)、沟通技巧,甚至还需要你会PS。(P过图的程序员请留言)

以下是你作为软件开发者可能会编写的文档,文档其中会包含着大量各式各样用UML绘制的模型图:

在软件领域的众多工作中,使用画图(UML建模)是最为基本、关键的技能。UML绘制建立的模型图,不仅会作为我们在开发前期与客户协商确定的“蓝本”,还会是团队内部敲定方案的“参照物”,还会是软件开发的“依据”,还会是制作各类文档的关键元素。从这样来看,画图(UML建模)涉及软件开发的方方面面,并贯穿整个软件生产的生命周期。

所以对于UML建模在软件工作中的地位可见一斑,并且在结合当下市场的工作环境,我认为“不会画图的程序员,不是一个合格的程序员”。综上所述,我打算围绕UML建模这门手艺开展系统性的介绍,本篇将先理论概念作为开端,促使你对UML的认识有所觉悟。在顺带提一句,你知道什么是“软件危机”吗?


2.设计的重要性

早些年刚接触编程的王小菜,收到的第一个任务是实现某管理系统的登录模块,自信满满的他为了展现自己的实力,第一时间就是打开IDE进行编码,并在一天内迅速的完成了任务。然而在交付演示的过程中,项目经理发现除了常规的登录和注册之外,登录模块还又很多功能没有完善,例如:登录安全的措施、忘记密码的措施、身份验证机制、单点登录的实现等等。这些缺失考虑的功能,导致王小菜一次又一次的进行返工,从原本预计一天内完成的登录模块,却足足花费了他一周的时间,他还时常加班修复一些Bug。

通过上面的事例,你是否也曾发现过“王小菜”的身影,对于大多数刚从事软件开发的从业者而言,在实际的工作中,在一开始接收到需求或开发任务后,就利马直接开始上手写代码,深怕难以体现自己的开发效率,对于开发的功能是想到哪一块就写到哪一块,毫无规划可言。

其实软件的制作就是一种工程,和我们建筑高楼大厦是一样的道理,所以在制作前必须进行合理的设计,并对软件进行建模和管理。不能一上来就开始盲目的写代码,对于任何业务需求、功能设计必须先分析、规划之后才能开始编码。在写代码事情必须明白:要做什么?做成什么样?怎么去做?

为了避免这种“先斩后奏”的开发方式,我们必须在编码之前通过UML进行建模用于分析和设计,只有经过合理规划和设计,才能最大程度上减少,客户一而再再而三的返工要求,或是频繁的变动需求。


3.模型

在介绍UML之前,我们必须先理解什么是模型,理解模型的概念是理解UML建模的基础。

模型从概念上描述:它是通过形象化的手段,对现实世界事物简化描述的一种方式。简单来概括,模型是对现实时间的简化。为什么使用模型?因为通常某些复杂的事物或软件系统,在描述和实现上是非常复杂的,在事物或软件完成之前,通过文字我们不可能将这些事物理解清楚,所以通过使用模型可以对复杂的事物进行抽象化、形象化,以便我们可以更好的理解、更好的进行分析设计工作。

这个道理可以通过现实生活中的一个场景形象的类比,那就是我们购房的例子。在当下的社会背景下,我们大多数人购买新房的时候,新房往往都还没有建造出来。开发商为了让消费者提前买到房,它们往往会在售楼部搭建各式各样的房屋沙盘模型,其中有室外的、室内的、全景的,以便消费者能在房屋没有建造完成之前,就能够感受房屋最终建造的效果。除此之外,在生活中使用模型来形象化描述现实世界事物的方式比比皆是,你可以想到有哪些?

结合上面的例子和概念,在软件工程中也是同理的。我们为了让客户能够直观的理解软件的构思、为了软件能够更好的分析和设计、为了开发人员能够更好的实现软件功能。所以我们会根据业务需求并结合面向对象的分析与设计思想(OOA/D),将软件工程中不同阶段、不同场景,通过UML来绘制建立模型。所以,通过UML建模可以将我们对软件的构思、设计、概念以一种图形化的方式表达出来。

使用UML建模可以为我们构建软件项目带来很大好处,但是使用UML有时并不是必须的,这也要取决于软件项目的规模和体量。通常我们构建企业中大型的信息管理软件,其中存在复杂的业务场景,所以我们必须使用UML建模,但是如果面对的软件体量很小,没有什么业务,我们可以选择简化或省略UML建模。所以UML的重要程度是取决于软件项目规模决定的,规模越大UML建模的重要性越大,反之越小。


4.简介

早在20世纪90年代就出现了UML,由于其简单、统一,又能够表达软件设计中的动态信息和静态信息,目前已经成为可视化建模语言事实上的工业标准,这就相当于你吃中餐默认的餐具是筷子,而软件建模就默认使用UML,其地位不言而喻。

UML简称可以翻译为两种形式:1.UML(You Must Learn)、2.UML(Unified Modeling Languang),第一种是从其重要程度巧译而成的“你必须学”,第二种则是官方的定义“统一建模语言”。UML是对象管理组织(OMG)指定的一个通用的、可视化的建模语言标准,它可以用来:可视化、描述、构造和文档化软件项目中的各种单元(业务、功能、算法、流程等等)。

UML并不像我们的编程语言那样五花八门,UML在建模语言中是统一的,就是说不同领域、不同技术栈使用的建模语言大多数都是UML。因为UML是从所有软件建模语言的基础上提炼的精华,几集百家之所长,它是软件建模语言的集大成者。UML还突破了软件的限制,广泛吸收了其他领域的建模方法,不仅可以用于软件领域的建模,还可以用于其他领域的建模工作。由此可见,UML是一种统一化极具广泛性的软件建模语言。


5.结语

UML如果理论上其实可以“罗里吧嗦”的引出很多概念性的东西,对于理解UML这些概念而言,我们觉得其中最为重要的是,通过这些概念唤醒你的觉悟,深刻去体会软件设计的重要性,不要需求任务一来就立马上手开始写代码,我们需要思考和分析,懂得设计和分析的人大多数都会有一个感触:在做一个项目或一个需求时,如果有良好的设计,其实编码的工作量放到整个软件生命周期上不会超过一半。

对于UML的知识体系来说其实可以单独作为一门学科的,是属于软件设计范畴的。当然作为软件开发者不可能花费太多精力,将UML所有细节都了然于心,我们应当遵循“二八定律”根据日常工作中经常使用的部分进行深入即可。我个人觉得对于UML学习比较重要的几点如下:

  • 能够从不同的视角、维度绘制不同的图形。
  • 能够清楚知道在软件项目的不同阶段绘制什么类型的图。
  • 能够根据面向的用户绘制不同层次的图形,也就是能够把握图形呈现的抽象程度。
  • 能够根据业务需求和设计思想绘制常用的图形,其中包括但不限:类图、用例图、活动图等。

文章主要作为UML系列的开篇主要以理论为主,在后续的UML系列文章中,我主要从实践操作性出发,介绍如何具体绘制软件开发中常用的模型,我相信只有在实践中才能更好的掌握UML建模的能力。

你必须学UML之理论篇的更多相关文章

  1. 一步步教你轻松学支持向量机SVM算法之理论篇1

    一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  2. (36)Spring Boot Cache理论篇【从零开始学Spring Boot】

    Spring Boot Cache理论篇 在上一篇中我们介绍了Spring Boot集成Redis的实战例子,里面使用到了Spring Cache,那么什么是Spring Cache呢,本章将会做一个 ...

  3. 小白学数据分析--聚类分析理论之K-means理论篇

    小白学数据分析--聚类分析理论之K-means理论篇 聚类分析是一类广泛被应用的分析方法,其算法众多,目前像SAS.Splus.SPSS.SPSS Modeler等分析工具均以支持聚类分析,但是如何使 ...

  4. [老老实实学WCF] 第八篇 实例化

    老老实实学WCF 第八篇 实例化 通过上一篇的学习,我们简单地了解了会话,我们知道服务端和客户端之间可以建立会话连接,也可以建立非会话连接,通信的绑定和服务协定的 ServiceContract 的S ...

  5. 如何编写高质量的 JS 函数(3) --函数式编程[理论篇]

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/EWSqZuujHIRyx8Eb2SSidQ作者:杨昆 [编写高质量函数系列]中, <如何 ...

  6. 14 微服务电商【黑马乐优商城】:day01-springboot(理论篇)

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) :day01-springboot(Thyme ...

  7. Python并发编程理论篇

    Python并发编程理论篇 前言 其实关于Python的并发编程是比较难写的一章,因为涉及到的知识很复杂并且理论偏多,所以在这里我尽量的用一些非常简明的语言来尽可能的将它描述清楚,在学习之前首先要记住 ...

  8. 一步一步学ROP之linux_x64篇

    一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防 ...

  9. 一步一步学ROP之linux_x86篇

    一步一步学ROP之linux_x86篇 作者:蒸米@阿里聚安全 ​ 一.序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过 ...

随机推荐

  1. CentOS 8.0与CentOS7.0 防火墙端口设置

    一,开放端口号 firewall-cmd --zone=public --add-port=8080/tcp --permanent  #开启8080端口 firewall-cmd --zone=pu ...

  2. Python 3函数的参数冒号注释

    Python 3.7版本,函数的参数可以通过冒号来进行注释 def f(ham: str, eggs: str = 'eggs') -> str : print("Annotation ...

  3. Python装饰器Decorators

    def hi(name="yasoob"): return "hi " + name print(hi()) # 我们甚至可以将一个函数赋值给一个变量,比如 g ...

  4. 【C++函数题目】重载完成Compare函数

    题目来源链接:https://www.dotcpp.com/oj/problem2008.html 题目讲解链接:http://6o2.cn/1yjJB2  题目描述 利用函数重载完成三个比较大小的C ...

  5. 认识一下什么是JSP

    摘要:JSP,全称是Java Server Pages,即Java服务器页面,是由Sun Microsystems公司主导创建的一种动态网页技术标准. 本文分享自华为云社区<Java服务器页面- ...

  6. Spring框架系列(4) - 深入浅出Spring核心之面向切面编程(AOP)

    在Spring基础 - Spring简单例子引入Spring的核心中向你展示了AOP的基础含义,同时以此发散了一些AOP相关知识点; 本节将在此基础上进一步解读AOP的含义以及AOP的使用方式.@pd ...

  7. SAP OOALV- 合计

    TYPES: BEGIN OF ty_mara, srno LIKE adrc-name1, " Storing the total text matnr LIKE mara-matnr, ...

  8. JSP 入门学习

    概念:java Server Pages java服务器页面 一个特殊的,既可以定义html标签,也可以定义Java代码 用于简化书写 原理 在浏览器上访问 jsp文件时 服务器先解析请求,找到是否有 ...

  9. mysql中innodb和myisam区别

    前言 InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,5.7之后就不一样了. 1.事务和外键 ● InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修 ...

  10. NC14662 小咪买东西

    NC14662 小咪买东西 题目 题目描述 小咪是一个土豪手办狂魔,这次他去了一家店,发现了好多好多( \(n\) 个)手办,但他是一个很怪的人,每次只想买 \(k\) 个手办,而且他要让他花的每一分 ...