UML简易实践

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

面向对象的问题的处理的关键是建模问题。建模可以把在复杂世界的许多重要的细节给抽象出。许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML的精彩之处。

UML中有九种建模的图标,即:

  • 用例图
  • 类图
  • 对象图
  • 顺序图
  • 协作图
  • 状态图
  • 活动图
  • 组件图
  • 配置图

本课程中的某些部分包含了这些图的细节信息的页面链接。而且每个部分都有一个小问题,测试一下你对这个部分的理解。

为什么UML很重要?

为了回答这个问题,我们看看建筑行业。设计师设计出房子。施工人员使用这个设计来建造房子。建筑越复杂,设计师和施工人员之间的交流就越重要。蓝图就成为了这个行业中的设计师和施工人员的必修课。

写软件就好像建造建筑物一样。系统越复杂,参与编写与配置软件的人员之间的交流也就越重要。在过去十年里UML就成为分析师,设计师和程序员之间的“建筑蓝图”。现在它已经成为了软件行业的一部分了。UML提供了分析师,设计师和程序员之间在软件设计时的通用语言。

UML被应用到面向对象的问题的解决上。想要学习UML必须熟悉面向对象解决问题的根本原则――都是从模型的建造开始的。一个模型model就是根本问题的抽象。域domain就是问题所处的真实世界。

模型是由对象objects组成的,它们之间通过相互发送消息messages来相互作用的。记住把一个对象想象成“活着的”。对象有他们知道的事(属性attributes)和他们可以做的事(行为或操作behaviors or operations)。对象的属性的值决定了它的状态state。

类Classes是对象的“蓝图”。一个类在一个单独的实体中封装了属性(数据)和行为(方法或函数)。对象是类的实例instances。

用例图

用例图Use case diagrams描述了作为一个外部的观察者的视角对系统的印象。强调这个系统是什么而不是这个系统怎么工作。

用例图与情节紧紧相关的。情节scenario是指当某个人与系统进行互动时发生的情况。下面是一个医院门诊部的情节。

“一个病人打电话给门诊部预约一年一次的身体检查。接待员找出在预约记录本上找出最近的没有预约过的时间,并记上那个时间的预约记录。”

用例Use case是为了完成一个工作或者达到一个目的的一系列情节的总和。角色actor是发动与这个工作有关的事件的人或者事情。角色简单的扮演着人或者对象的作用。下面的图是一个门诊部Make Appointment用例。角色是病人。角色与用例的联系是通讯联系communication association(或简称通讯communication)

Use case

角色是人状的图标,用例是一个椭圆,通讯是连接角色和用例的线。

一个用例图是角色,用例,和它们之间的联系的集合。我们已经把Make Appointment作为一个含有四个角色和四个用例的图的一部分。注意一个单独的用例可以有多个角色。

Use case diagram

用例图在三个领域很有作用。

  • 决定特征(需求)。当系统已经分析好并且设计成型时,新的用例产生新的需求
  • 客户通讯。使用用例图很容易表示开发者与客户之间的联系。
  • 产生测试用例。一个用例的情节可能产生这些情节的一批测试用例。

类图

类图Class diagram通过显示出系统的类以及这些类之间的关系来表示系统。类图是静态的-它们显示出什么可以产生影响但不会告诉你什么时候产生影响。

下面是一个顾客从零售商处预定商品的模型的类图。中心的类是Order。连接它的是购买货物的Customer和Payment。Payment有三种形式:Cash,Check,或者Credit。订单包括OrderDetails(line item),每个这种类都连着Item。

Class diagram

UML类的符号是一个被划分成三块的方框:类名,属性,和操作。抽象类的名字,像Payment是斜体的。类之间的关系是连接线。

类图有三种关系。

  • 关联association-表示两种类的实例间的关系。如果一个类的实例必须要用另一个类的实例才能完成工作时就要用关联。在图中,关联用两个类之间的连线表示。
  • 聚合aggregation-当一个类属于一个容器是的一种特殊关系。聚合用一个带菱形的连线,菱形指向具有整体性质的类。在我们的图里,Order是OrderDetails的容器。
  • 泛化generalization-一个指向以其他类作为超类的继承连线。泛化关系用一个三角形指向超类。Payment是Cash,Check和Credit的超类。

一个关联有两个尾端。每个尾端可以有一个角色名role name来说明关联的作用。比如,一个OrderDetail实例是一个Order实例的项目。

关 联上的方向性navigability箭头表示该关联传递或查询的方向。OrderDetail类可以查询他的Item,但不可以反过来查询。箭头方向同 样可以告诉你哪个类拥有这个关联的实现;也就是,OrderDetail拥有Item。没有方向性的箭头的关联是双向。

关 联尾端的数字表示该关联另一边的一个实例可以对应的数字端的实例的格数,通过这种方式表达关联的多样性multiplicity。多样性的数字可以是一个 单独的数字或者是一个数字的范围。在例子中,每个Order只有一个Customer,但一个Customer可以有任意多个Order。

下面这个表给出了最普遍的多样性示例。

多样性 意义
0..1 0或1个实例. n..m符号表示有n到m个实例
0..*  or  * 没有实例格数的限制(包括没有).
1 只有一个实例
1..* 最少一个实例

每个类图包括类,关联和多样性表示。方向性和角色是为了使图示得更清楚时可选的项目。

包和对象图

为了简单地表示出复杂的类图,可以把类组合成包packages。一个包是UML上有逻辑关系的元件的集合。下面这个图是是一个把类组合成包的一个商业模型。

dependencies关系。如果另一个的包B改变可能会导致一个包A改变,则包A依赖包B。

Package diagram

包是用一个在上方带有小标签的矩形表示的。包名写在标签上或者在矩形里面。点化线箭头表示依赖

对象图Object diagrams用来表示类的实例。他们在解释复杂关系的细小问题时(特别是递归关系时)很有用。

这个类图示一个大学的Department可以包括其他很多的Departments。

Recursive class diagram

这个对象图示上面类图的实例。用了很多具体的例子。

UML中实例名带有下划线。只要意思清楚,类或实例名可以在对象图中被省略。

Object diagram

每个类图的矩形对应了一个单独的实例。实例名称中所强调的UML图表。类或实例的名称可能是省略对象图表只要图的意义仍然是明确的。

顺序图

类图和对象图是静态模型的视图。交互图是动态的。他们描述了对象间的交互作用。

顺序图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。

消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。

Sequence diagram

协作图

协作图也是互动的图表。他们像序列图一样也传递相同的信息,但他们不关心什么时候消息被传递,只关心对象的角色。在序列图中,对象的角色放在上面而消息则是连接线。

Collaboration diagram

对象角色矩形上标有类或对象名(或者都有)。类名前面有个冒号(:)。

协作图的每个消息都有一个序列号。顶层消息的数字是1。同一个等级的消息(也就是同一个调用中的消息)有同样的数字前缀,再根据他们出现的顺序增加一个后缀1,2等等。

状态图

对象拥有行为和状态。对象的状态是由对象当前的行动和条件决定的。状态图statechart diagram显示出了对象可能的状态以及由状态改变而导致的转移。
我们的模型例图建立了一个银行的在线登录系统。登录过程包括输入合法的密码和个人账号,再提交给系统验证信息。

登录系统可以被划分为四种不重叠的状态:Getting SSN, Getting PIN, Validating, 以及 Rejecting。每个状态都有一套完整的转移transitions来决定状态的顺序。

State diagram

状态是用圆角矩形来表示的。转移则是使用带箭头的连线表示。触发转移的事件或者条件写在箭头的旁边。我们的图上有两个自转移。一个是在Getting SSN,另一个则在上Getting PIN。

初始状态(黑色圆圈)是开始动作的虚拟开始。结束状态也是动作的虚拟结束。

事件或条件触发动作时用(/动作)表示。当进入Validating状态时,对象并不等外部事件触发转移。取而代之,它产生一个动作。动作的结果决定了下一步的状态。

活动图

活动图activity diagram是一个很特别的流程图。活动图和状态图之间是有关系的。状态图把焦点集中在过程中的对象身上,而活动图则集中在一个单独过程动作流程。活动图告诉了我们活动之间的依赖关系。

对我们的例子来说,我们使用如下的过程。

“通过ATM来取钱。”

这个活动有三个类Customer, ATM和 Bank。整个过程从黑色圆圈开始到黑白的同心圆结束。活动用圆角矩形表示。

Activity diagram

活动图可以被分解成许多对象泳道swimlanes ,可以决定哪些对象负责那些活动。每个活动都有一个单独的转移transition连接这其他的活动。

转移可能分支branch成两个以上的互斥的转移。保护表达式(在[]中)表示转移是从一个分支中引出的。分支以及分支结束时的合并merge在图中用菱形表示。

转移也可以分解fork成两个以上的并行活动。分解以及分解结束时的线程结合join在图中用粗黑线表示

组件与配置图

组件component是代码模块。组件图是是类图的物理实现。

配置图Deployment diagrams则是显示软件及硬件的配置。

下面的配置图说明了与房地产事务有关的软件及硬件组件的关系。

Deployment diagram

物理上的硬件使用节点nodes表示。每个组件属于一个节点。组件用左上角带有两个小矩形的矩形表示。

转载于:https://my.oschina.net/u/1246663/blog/169374

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

战斗机各种世界之最,涨知识了。。。

全世界只有3.14 % 的人关注了青少年数学之旅世界上最大的战斗机苏联的图-128是目前世界上起飞重量最大,体积最大的一款截击机,它由前苏联图波列夫设计局于1955研制成功并进行首飞,1963年装备部队,该机全长30.03米,翼展…

Bye Bye Embed-再见了Embed,符合web标准的媒体播放器代码

由于Embed标签是Netscape的私有财产,故一直未被W3C认可,对于各种媒体文件使用Embed标签是非标准的,如何改变?Elizabeth Castro的 Bye Bye Embed 一文对于各种媒体播放器给出了很好的符合web标准的代码。 在线媒体播放--Google Vid…

.NET Core授权失败如何自定义响应信息?

【导读】在.NET 5之前,当授权失败即403时无法很友好的自定义错误信息,以致于比如利用Vue获取到的是空响应,不能很好的处理实际业务,同时涉及到权限粒度控制到控制器、Action,也不能很好的获取对应路由信息本文我们来看…

计算机电缆2x2x1.5,计算机电缆djypvp1x2x1.5

计算机电缆djypvp1x2x1.5硅橡胶计算机电缆适用于各种仪器仪表的连结, 以及信号传输。它具有耐高温、低温、耐腐蚀、舒缓老化等优点,对特殊场所或恶劣环境中的使用是目前理想的产品,正常使用温度为—60℃一250℃。产品特点:1.执行标准Q/ILXD-1…

虚线 实现_redis跳跃表实现

跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。redis 使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员是比…

当代家长现状。。 | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅(图源都市音酱)太真实了↓ ↓ ↓

Prometheus(一):Web服务环境监控

写在前面现每个后端的同学的日常都在跟服务(接口)打交道,维护老的比较大单体应用、按业务拆得相对比较细的新服务、无论企业内部用的,面向用户的前端的服务。流量大的有流量小的,有重要的有不那么重要的。但是,不管怎…

acwing Linux 租云服务器环境配置

今天给大家讲解acwing Linux 租云服务器&环境配置,这里以阿里云为例子给大家讲解一下如何租用这个云服务器,现在有阿里云、华为云、腾讯云、京东云这么几个大的服务系统,我个人是喜欢华为云的嘻嘻,因为个人比较喜欢华为公司&a…

Shell练习题(持续更新)

1.输出1-10echo {1..10} seq -s 1 10 #默认分隔符\n for((i1;i<10;i));do echo -n "$i ";done;echo #最后echo为了换行 i1;while [ $i -le 10 ];do printf "%s " $i;i$[$i1];done;echo awk BEGIN{for(i1;i<10;i) printf "%s ",i;};…

楼层效果_1一28高楼最好最吉利的楼层是哪层?选楼层要注意什么?

在选择房屋楼层的时候&#xff0c;可能大家对于想过了&#xff0c;方法是比较纠结的&#xff0c;有些家庭可能考虑到室内的采光问题&#xff0c;有些可能考虑的是噪音的问题&#xff0c;更有些朋友们可能考虑的是室内的风水等相关问题&#xff0c;那么1一28高楼最好最吉利的楼层…

43秒处竟惊现刘强东!印度动作大片《WAR》终极预告曝光

全世界只有3.14 % 的人关注了青少年数学之旅都说印度是一个非常奇妙的国度&#xff0c;文能Z教治国&#xff0c;武能高产神片。科学家们骂骂咧咧地退出了群聊...这不&#xff0c;前不久印度又曝光了一部动作大片《WAR》&#xff1a;电影的剧情大概是讲述了一名印度士兵被派去消…

按id进行查找按名称进行排序_Excel工作表中如何按需要的顺序快速进行排序

在工作中&#xff0c;有时候需要经常对一组内容按一定的顺序来进行排序。如果每次都手动进行排序&#xff0c;会小号很多时间。因此可以将特定顺序添加到自定义序列中。有两种不同的操作方法可以来实现。方法一如图&#xff0c;现在有一列水果名称&#xff0c;之后需要都按照现…

20种最先进的机器人,感觉有点吓人!

全世界只有3.14 % 的人关注了青少年数学之旅随着科技的发展&#xff0c;机器人必然逐渐进入我们的生活&#xff0c;甚至在许多领域替代人类。以下是目前全球范围内最先进的一些机器人&#xff1a;Actroid-F这种实验性机器人的目标&#xff0c;是创造最逼真的仿人类机器人&#…

PDF批量删除注释

使用Adobe Acrobat Pro的批量处理完成 1.在“自定义”-“添加新工具集”-“动作向导”-将“创建新动作”加入-“保存”2.然后点新出现的“创建新动作”图标3.将“内容”-“删除所有注释”添加上&#xff0c;然后再添加上“保存和导出”中的保存4.保存设定的动作列表&#xff0c…

怎么让图片手机上排列_荣耀手机系列档次怎么排列?

目前&#xff0c;我们按照处理器和手机表现进行排列。荣耀magic2因为充电口(塑料问题)&#xff0c;所以&#xff0c;排名第一的位置我给荣耀V20&#xff01;其次&#xff0c;是荣耀magic2&#xff0c;然后是荣耀10&#xff0c;荣耀note10&#xff0c;其次是荣耀v10&#xff0c;…

金蝶显示服务器异常,金蝶提示云服务器异常

金蝶提示云服务器异常 内容精选换一换生命周期是指弹性云服务器从创建到删除(或释放)历经的各种状态。当云服务器网络异常、防火墙未放行本地远程桌面端口、云服务器CPU负载过高等场景均可能导致云服务器无法正常登录。当您的云服务器无法远程登录时&#xff0c;我们建议您首先…

Ajax 缓存

今天遇到ajax缓存的问题,指定同样的url和参数值总是有缓存&#xff0c;跳不到后台程序里&#xff01; 我先用了一种龌龊的方法,就是在url后又加了个由数据数产生的参数var randMath.random();var url"A.aspx?t"escape(t)"&r"escape(rand); 不知道大家…

S5PC100基于I2C子系统的lm75驱动流程图

转载于:https://blog.51cto.com/387929/1312237

如何有效利用碎片时间?这里有个办法

全世界只有3.14 % 的人关注了青少年数学之旅用了这么久微信&#xff0c;关注的公众号没有上千个&#xff0c;也有上百个&#xff0c;但其实大部分每天主动打开的公众号只有寥寥几个。今天就为大家推荐一些颜值与才华并存的好评公众号&#xff0c;希望你喜欢。【关注方式 】1 - …

gRPC四种模式、认证和授权实战演示

前言上一篇对gRPC进行简单介绍&#xff0c;并通过示例体验了一下开发过程。接下来说说实际开发常用功能&#xff0c;如&#xff1a;gRPC的四种模式、gRPC集成JWT做认证和授权等。正文1. gRPC四种模式服务以下案例演示&#xff0c;服务端用微软提供的模板创建&#xff0c;客户端…