2

你必须学UML之理论篇 - 姜承轩

 1 year ago
source link: https://www.cnblogs.com/green-jcx/p/UML.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

你必须学UML之理论篇

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

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

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

722260-20220825151204842-1202815397.png

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

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


2.设计的重要性

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

722260-20220825151445710-2138629482.png

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

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

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


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

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

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

722260-20220825153018101-627029114.png

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

 

722260-20220825151648565-548818467.png

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


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

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

722260-20220825151802690-1153667180.png

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


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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK