您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

面向对象设计与统一建模语言UML

时间:2020-10-10 10:32:53  来源:  作者:

面向对象设计

自从面向对象编程语言在软件开发中成为主流之后,遵循面向对象技术特点的软件设计工作,也一并发展了起来。

首先要提出一个问题,就是设计的工作是要做什么?

面向对象设计与统一建模语言UML

 

它包括的范围其实是很广泛的,从搜集用户需求,进行业务分析,到绘制系统流程图等。可以说,在动手编写代码之前,程序员要做的都属于设计工作。

就像建造房屋一样,先确定要造的房屋类型,然后是选址,设计样式。最后工程师带领施工队按照设计图纸将房子造出来。

而面向对象技术,因为其封装、继承、多态等特点,在对现实世界建模时,可以方便地以自然思维将事物抽象为计算机可处理的数据。关于面向对象技术的详细说明,可参看往期文章学好面向对象编程语言的关键,在于掌握它们的共通结构与特性 。

要做的事情清楚了,思维工具也有了,接下来就是如何将工作成果表述出来。一个相当有力的工具就是统一建模语言(Unified Modeling Language,简称UML),下一节会对其进行入门级的介绍。

最后会以一个示例讲述在面向对象设计中,如何应用UML来完成建模工作。

UML概述

UML虽然也是一门“语言”,但它其实是一套图形化的符号系统。UML最主要的作用,就是在现实世界与程序代码之间建起一座桥梁。

这就是UML的“统一”所要求的,所以它的各种图形都有着严格的定义。包括形状、连接线的方向、方法与属性的标明等。

遵循统一标准的好处,就是方便了沟通。当设计的各个阶段的成果绘制成UML图保存下来时,那么无论是团队内部协作,还是对外交流,大家都省去了学习符号表示法的时间,可以直接掌握设计意图。

面向对象设计与统一建模语言UML

 

UML 2 定义了13种图形,我们可以了解一下,对于重要的图形,会给出图示。所有图形采用bouml工具绘制。

用例图:表示系统提供的功能和使用者之间的关系。

面向对象设计与统一建模语言UML

用例图

类图:表示类的规格和类之间的关系。

面向对象设计与统一建模语言UML

类图

对象图:表示实例之间的关系。

面向对象设计与统一建模语言UML

对象图

时序图:将实例之间的相互作用表示为时间序列。

面向对象设计与统一建模语言UML

时序图

活动图:表示一系列处理中的控制流程。

面向对象设计与统一建模语言UML

活动图

通信图:将实例之间的相互作用表示为组织结构。

面向对象设计与统一建模语言UML

通信图

状态机图:表示实例的状态变化。

面向对象设计与统一建模语言UML

状态机图

组件图:表示文件和数据库、进程和线程等软件的实现结构。

面向对象设计与统一建模语言UML

组件图

部署图:表示硬件、网络等系统的物理结构。

面向对象设计与统一建模语言UML

部署图

复合结构图:表示具有整体-部分结构的类的运行时结构。

包图:表示包之间的关系。

交互概览图:将根据不同条件执行不同动作的时序图放到活动图中进行表示。

定时图:采用带数字刻度的时间轴来表示实例之间的状态迁移和相互作用。

建模

什么是统一说了,用到的图形语言也说了,最后就得说一说怎么建模了。我们进行面向对象的设计工作,终归是要让计算机来帮助我们处理那些繁琐、重复性的工作。

那么,接下来我们就以一个租车业务为示例,使用UML工具进行设计过程吧。我们模仿实现一个线上租车应用,为了简化讨论,只提及最关键的几个功能点。

业务分析阶段

用户想要租一辆车开,第一步是要先挑选合适的车。例如是城市代步,还是郊游远行等。选好车之后,就是预约下单。用户办理好手续,将车开走使用,最后完成归还手续。

那么,对以上场景分析之后,可以通过活动图把整体流程画出来。

面向对象设计与统一建模语言UML

租车业务整体流程

需求定义阶段

从上述业务分析可知,这个线上租车系统可以承担的自动化工作,包括展示车辆信息,处理预订订单,车辆出库,跟踪车辆行驶情况,以及车辆归还入库这些功能。

使用用例图展示客户与服务提供商可以使用的功能。

面向对象设计与统一建模语言UML

租车业务功能用例

系统设计阶段

系统功能点梳理出来之后,就是对系统中的各个关键对象进行定义。车辆对象(Car)是基本单元,所有的租赁业务都要围绕它展开。接下来是汽车展示对象(ShowCar),它可以从车辆对象取得可供展示的信息,例如车型、厂商、颜色等。

当用户选定车辆之后,就可以执行预订功能。租赁管理对象(RentServer)将会接受订单、收取押金和预付款。用户取车时RentServer则进行出库处理,并通知车辆跟踪对象(TraceCar)持续监控车辆运行情况。

用户使用完,归还车辆时,RentServer则从TraceCar查询车况,确认无误后则执行入库处理,退还用户押金。

据以上描述,我们可以先画出类图。

面向对象设计与统一建模语言UML

租车业务类图

从上图可以看到,Car作为系统的基本单元,被其他类聚合使用。关于聚合,这是一种整体与个体之间的关系,即has-a关系。而组合则要更高一级,是包含关系。例如汽车与发动机就是组合关系,因为离开了发动机,汽车就不可用了。

关联关系则比聚合还要弱一级,但需要注意的是,在程序代码中,关联与聚合的语法是一样的,它们的差异是存在于语义上的。这也是UML设计能比代码包含更多信息的优势。

类图表示的是类之间的静态关系,要看到对象实例之间的消息调用,则还要使用时序图。下面分步骤绘制,先看预订流程的时序图。

面向对象设计与统一建模语言UML

租车预订时序图

接下来是用户归还车辆的时序图。

面向对象设计与统一建模语言UML

归还车辆时序图

对象间的交互已经有了,接下来就是具体方法的实现过程。说明方法的执行过程,使用活动图比较适合。下面选取CheckOut方法,对其绘制活动图进行说明。

面向对象设计与统一建模语言UML

CheckOut流程活动图

至于其他功能,有兴趣的同学们可以自行绘制。实际项目所产出的UML设计,则会复杂得多,但只要掌握好面向对象设计的理念,以及UML工具的图形细节,那么无论是阅读既有设计,还是自己通过绘图表达设计想法,都能够做到得心应手。



Tags:UML   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
面向对象设计自从面向对象编程语言在软件开发中成为主流之后,遵循面向对象技术特点的软件设计工作,也一并发展了起来。首先要提出一个问题,就是设计的工作是要做什么? 它包括的...【详细内容】
2020-10-10  Tags: UML  点击:(87)  评论:(0)  加入收藏
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道。实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧:一、类的属性的表示方式在UM...【详细内容】
2020-08-14  Tags: UML  点击:(58)  评论:(0)  加入收藏
一、概述用例图是编写需求说明时经常用到的需求表达方式,用于向开发、测试同事说明需求中用户与系统功能单元之间的关系。但是很多刚接触用例的新人,在准备用例说明时并不清楚...【详细内容】
2020-03-17  Tags: UML  点击:(69)  评论:(0)  加入收藏
Unified Modeling Language (UML)又称统一建模语言或标准建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分...【详细内容】
2019-09-19  Tags: UML  点击:(147)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条