一、建模语言的背景:
通俗地阐述就是:客户一开始不知道要什么,开发通过客户的阐述进行理解和分析,这个过程中间可能会产生一些误解。为了避免此类事件,所以需要建模。类似于要建造一栋楼,建筑设计师根据住户的提出的想法,设计出建筑图稿,建筑工人再根据图稿开始建造房子。
1、因为不能完全地理解一个复杂的系统,所以要对它进行建模,
2、为了更好地理解正在开发的系统。
3、建模的四个目的:
(1)帮助我们按照需要对系统进行“可视化”。
(2)允许我们详细“说明系统的结构和行为”。
(3)给出了一个指导我们“构建系统”的模版。
(4)对我们所做出的决策进行“文档化”。
二、建模的含义: 通俗概括,在理解的过程中生产出的对现实进行抽象和简化的模型。
1、重要的研发成果往往产自类比。
2、把不太理解的东西和一些已经较为理解,且十分类似的东西作比较,可以对这些不太理解的东西产生深刻的理解,叫做建模。
模型:
1、建模产生的结果叫做模型,模型是对现实的简化,对事物的一种抽象。
2、模型帮助人们更好地了解事物的本质,抓住问题的要害。
3、在模型中,人们总是剔除与问题无关的、非本质的东西,从而使模型与真实的实体相比更加简单,易于把握。
三、建模的四项基本原理。
1、选择要创建什么模型。
同一个现象,不同的模型,不同的结论
2、每一种模型可以在不同的精度级别上表示。
可以是纸飞机,也可以是飞机模型。
3、最好的模型要与现实相关联的。
(1)和现实不关联的话,毫无价值。
(2)模型是对现实的简化,但是简化不能掩盖掉任何重要的细节。
4、单个模型是不充分的,对每一个重要的系统最好用一组几乎独立的模型去处理。
比如对每个角度每个部分的理解都是片面的,不能以偏概全,只有综合所有部分的模型,才能形成完整的模型。
四、UML,统一建模语言
UML出现之前,每个人都有不同的表达方式,跨部门跨人群之间的沟通很困难,只能定义出一门语言来进行统一建模。
UML类似一个工具包。UML由事物、关系、图组成。
五、UML的是一种图形化建模工具,常用符号如下:
六、用例图
更多用例图的含义请参考博文:UML--用例图详解-菜鸟笔记
1、用例图作用:用例图是需求分析中的产物,主要作用是描述参与者与和用例之间的关系,帮助开发人员可视化地了解系统的功能。借助于用例图,系统用户、系统分析人员、系统设计人员、领域专家能够以可视化的方式对问题进行探讨,减少了大量交流上的障碍,便于对问题达成共识。
2、用例图的构成元素
用例图的构成元素有四个:参与者(角色)、用例、系统边界、元素之间的关系。
(1)参与者:位于系统之外并与系统进行交互的一类事物(人、物、其他软件系统)。
参与者的作用:通过它可以对软件系统与外界发生的交互进行分析和描述、通过它可以了解客户希望软件系统提供哪些功能。
(2)用例:系统为响应参与者引发的一个事件而执行的一系列的处理/动作,而这些处理应该为参与者产生一种有价值的结果。
(3)系统边界:系统边界是指系统与系统之间的界限。用方形框+系统名称表示
(4)用例图中的关系:
参与者与用例的关系:关联关系(用实线表示)。
参与者与参与者的关系:泛化关系(实线+空心箭头) 。
用例之间的关系:
泛化关系(比如 发出订单和网上发出订单,其中网上发出订单属于发出订单的一种方式)、
包含关系( 多个用例用到同一段的行为,则可以把这段共同的行为单独抽象成一个用例,比如取款和查询余额之前都需要输入密码,则输入密码可以作为公共的用例,被取款用例和查询余额用例包含 )、
扩展关系 (一个扩展功能的用例,满足条件执行,不满足条件不执行。比如打印取款流水用例是取钱用例 的扩展)
用例图:
3、用例描述
用例描述模版示范:
summary:大概的功能
actor List:涉及的参与者
pre-condition:前置条件。运行的前置条件
description:用例中详细的步骤描述。如输入密码->系统验证密码->输入金额...
post-condition: 后置条件,用例执行完之后,系统所处的状态。比如取完钱之后,银行卡里的钱要扣除金额。
exception:异常情况。比如金额不足,报错。
七、活动图:
1、活动图的定义:
(1)描述一项任务执行过程中所完成的工作。
(2)描述对象内部的工作。
(3)显示如何执行一组相关的动作,以及这些动作如何影响它们周围的对象。
(4)显示用例的实例如何执行动作,以及如何改变对象的状态。
(5)说明一次业务流程中的人(参与者)和对象是如何工作的。
2、活动图与用例模型互为补充,主要用于需求分析阶段。
3、活动的基本要素包括:
活动(动作)、动作流、分支与合并、分叉与汇合、泳道。
(1)活动:活动表示某流程中的任务的执行,它可以表示算法过程中语句的执行。
(2)动作流:所有动作状态之间的转换称之为动作流。
(3)分支与合并:分支一般用于表示对象类所具有的条件行为。条件行为用分支和合并表达。
分支如上图的绿色棱形,表示条件。
(4)分叉与汇合:分叉可以用来描述并发线程。汇合代表两个或多个并发控制流同步发生,当所有的控制流都达到汇合点后,控制才能继续往下进行。
(5)泳道:泳道将活动图中的活动分成了若干小组,并把每一组制定给负责这种活动的业务组织,通常为对象。泳道区分了负责活动的对象,明确地表示哪些活动是由哪些对象触发的。
每个活动只能明确地属于一个泳道,并且泳道要负责泳道内的全部活动。
泳道没有顺序,不同泳道中的活动既可以顺序进行,也可以并发进行,动作流和对象流都可以穿越分割线。
分成customer,sales,warehouse 三个部门,且用实线分开,各自完成组内的活动。
八、类图
(1)类的定义:
具有相同属性、操作、方法、关系或者行为的一组对象的描述符。类是真实世界事物的抽象。
在对系统建模时,将会涉及到如何识别业务系统中的事物,这些事物构成了整个业务系统,在UML中,将所有的这些事物都建模成类。
(2)对象的定义:
当这些事物存在于真实世界中,它们是类的实例,并被称为对象。同一个类的各对象具有相同的属性,但属性的取值可以不同。对象提供相同的操作,相同的定义。
(3) 把类相关的元素画在一起,组成的图叫做类图。
(4)类之间的关系
依赖关系、关联关系、继承关系、实现关系。
1.1 关联关系:
lecturer教Course。 1..* 表示 1到多个老师教Course。0..* 表示每一门课可以由0到多个老师教。
角色:Company是Employer的角色(雇主),person是Employee的角色(雇员)
1.2 关联关系的修饰:多重性、聚合/组合、关联类
1.2.1 多重性:
关联关系解读:
角色:company是employer(雇主),person是employee(雇员)一个公司有7个雇员,一个人拥有(owner)0到多个账号bankAccount,1到多个人可以操作(operator)0到多个账号。
1.2.2 聚合/组合:
聚合和组合的区别:组合,整体没了,部分也没了。聚合,整体没了,部分还存在。
1.2.3 关联类:
job为关联类,company和person不足以表达两者之间的关系。则用job来解释两者之间的关系。
表示,人在这个公司是从事什么工作,拿多少薪水的。
类图解读:
school、student的解读: school是由student聚合的(学校没了,学生还在),1到多个学校可以有无数个学生。因为黑色箭头朝上,则student 是school的成员。
school、department的解读:1个 school有1到多个department,组合关系(school没了,department就消失了)。
department和chairperson的解读:0到1个department可以有0到1个chairperson(主任)。
department 和instructor解读: 这个department是由1到多个instructor(老师)组成的。(聚合,部门没了,老师还是存在的)。
instructor和course的解读:1个instructor可以教多门课程。每门course可以有多个instructor来教。
department和course的解读:一个department可以有多门课程。
student和course的解读:student可以出席(attends)多门课程。
九、顺序图
1、顺序图是什么:顺序图是将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。
2、顺序图的元素:
顺序图有四部分:参与者(Actor)或对象(Object)、生命线(Lift Line) 、激活期 和 消息。
2.1 、消息:
消息中还细分为了简单消息、同步消息和异步消息。
简单消息:就表示控制如何从一个对象发送给另一个对象,并不包含控制的细节。
同步消息:意味着阻塞和等待。如:A向B 发送一个消息后,对象A 必须一直等到B执行完成后返回才能继续往下执行。这就是同步消息。
异步消息:就意味着是非阻塞。如:A向B发送消息后,直接可以执行下面代码,无需等待B的执行。
同步消息用实心箭头表示,异步消息用开放式箭头表示。返回消息用相左的虚线箭头表示。
2.2、交互框:
UML在2.0时在时序图中加入了交互框。交互框用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。组合片段共有13种,名称及含义如下:
2.2.1、alt (选择片段):
将 if/else 在图示中表示出来了。
2.2.2 、opt:
包含一个可能发生或不发生的序列
只要当我成绩score小于60时,老妈打我这件事情肯定会发生。
大于就不会发生。
2.2.3 、Loop (循环):
片段重复一定次数,可以在临界中指示片段重复的条件。
2.2.4 、并行(Par):
3、顺序图举例:
loop(1,3)代表 enter password,valid=verify(password)要循环执行1到三次。
opt 条件valid password满足则执行enter(account)和enter(amount),不满足则不执行。
4、代码与顺序图映射:
十、通信图
1、通信图(Communication Diagram),也叫协作图(Collaboration Diagram),描述了对象与对象之间的协作/合作关系,侧重说明对象的消息传递,强调发送和接收消息的对象之间的组织结构。通信图的建模结果用于获取对象的职责和接口。
2、通信图的构成:对象、链接(对象之间的连接)、链接上的消息。
上述的通信图解读:第一步是执行1,第二步执行 2.1、2.2 两个重载方法,第三步执行3,把Transaction删掉。
3、通信图和顺序图的区别:
同:都来自uml的元模型中相同的信息,二者在语意上是等价,可以互相转化。
不同:
(1)通信图显示对象之间是如何被连接的结构关系。对象之间的交流,通过在链接上附着带序号的消息,而顺序图没有。
(2)顺序图显示消息的返回,有对象的生命线,控制焦点,而通信图没有。
十、状态图
1、状态图出现的背景:
顺序图是对多个对象的动态行为进行建模,当需要考察单个实体的动态行为时,则用状态图对其进行建模。
2、状态图的概念:
状态:是对象的生命期中的一个条件或状况。
状态机:是一种行为,说明对象在它的生命期中,响应事件所经历的状态序列以及它们对每个事件的响应。
状态图:状态机可以用状态图可视化,状态图显示了一个状态机,它强调从状态到状态的控制流。
3、状态的组成:
名称、进入/退出动作、内部迁移、子状态、延迟事件
4、事件event:
(1)是对一个在时间和空间上占有一定位置的有意义的事件的描述。
(2)UML对四种事件进行建模:参量的变化(布尔表达式,定时器,溢出)、信号signal(异步)、调用call(同步)、时间事件。
时间事件:表示一段时间的推移。after 时间表达式,at表示某个绝对时间点上发生的时间事件。
变化事件:表示状态的一个变化或某些条件得到满足的条件。when + 布尔表达式,当条件满足,则引发变化事件。
5、迁移:
(1)在状态A,发生事件并满足一定条件,转到状态B。
(2)一个迁移由5部分组成。源状态、事件触发器,触发条件,效应,目标状态。
6、特殊的迁移
(1)自身迁移
从状态A迁移到状态A
(2)内部迁移
在状态A内部行为
7、状态图
(1)状态:
一般状态:圆角矩形;初始状态:实心圆;结束状态:像眼睛。
(2)事件:
触发事件名(触发条件)/迁移动作
(3)迁移:叉形箭头实线(从初始状态指向目标状态)
(4)状态图:
状态图解读:有两种状态off和on。基于Off的状态的基础上,lockedDoor车门则锁住了,所以仍旧为off。通过开门(Open)则灯就变成On状态。在on状态的基础上又open车门,则继续回到On状态。在On的状态下DownUp_button把按钮按下,则车灯则关闭变成Off状态。在Off的状态下,downUp_Button,则车灯为ON。ON在LockedDoor 关门5秒后就变成OFF状态。