你必须学UML之理论篇
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建模的能力。