【软件架构】软件的设计图纸(用例图,类图,状态图,活动图,顺序图)
按图索骥---软件的设计图纸
序:
我一直以为,在软件设计中,各种图要比文档重要的多。图可以更加直接的反应软件的构造。尤其是在面向对象的软件设计中。图可以让我们直观的了解各个类和对象直接的交互和关系。
1、 用例图
定义:展示系统中参与者与用例之间的关系
我的理解 :用例图是根据需求分析得到的,也是软件设计中的第一张图纸。描述了软件系统的全部用户(角色)和全部功能点(业务需求),以及他们之间的关系。也是软件开发中最重要的一张图纸。
用例准则:用例描述了为参与者提供可测量的价值的一个动作顺序,如:提取资金,登记文件。
参与者准则:参与者是和系统进行一次或多次交互的某个角色,它可以是人,组织,进程或者外部系统,如:客户,学生,付款机
技巧:通过竖排用例,隐含表达用例之间的时间顺序。
用例名以意义明确的动词开头。
主要参与者放在图的左上角
图例:
2、 类图
定义:类图展示的系统中的类,类之间的相互关系,类的方法和属性。
理解:根据用例图,可以基本上设计出系统的类和他们的之间的关系。类图描述的就是类的静态结构
类关系:
关联:关联指的是类之间的特定的对应关系,在UML中拥戴实现的箭头表示。按照类之间的数量对比,关联可分为以下3种。
聚合:聚合指的是整体与部分之间的关系,在UML中用带实线的菱形箭头表示。例如台灯和灯泡之间就是聚集关系。当台灯类(ReadingLamp类)由灯泡类(Bulb类)和Circuit类聚集而成时,在ReadingLamp类中应该包含Bulb类和Circuit类型的成员变量。
聚集关系中,子系统允许被拆卸和替换。例如:电灯和灯泡
Bulb bulb1 = new Bulb(); //创建第一个灯泡
Bulb bulb2 = new Bulb(); //创建第二个灯泡
ReadingLamp lamp = new ReadingLamp(bulb1); //创建的时候使用第一个灯泡
lamp.setBulb(bulb2); //创建以后还可以换成第二个灯泡
组合:是关联关系的一种,是比聚集关系强的关联关系。它要求普通的聚合关系中代表的对象负责代表部分的对象的生命周期,合成关系是不能共享的。
合成关系中,子系统不允许被拆卸和替换。例如:Windows的窗口和窗口上的菜单就是组合关系。生命周期一致指的是部分必须在组合创建的同时或者之后创建,在组合销毁之前或者同时销毁,部分的生命周期不会超出组合的生命周期。
依赖:依赖指的是类之间的调用关系,在UML中用带虚线的箭头表示。如果类A访问类B的属性或方法,或者类A负责实例化类B,那么可以说类A依赖类B。和关联关系不同,无须在类A中定义类B类型的属性。例如Panel与Shape类之间存在依赖关系,因为Panel类会调用Shape类的draw()方法。
继承:类之间的继承关系,在UML中用带实线的三角形箭头表示。例如长方形Rectangle、圆形Circle和直线Line都继承Shape类
实现:实现指的是类与接口之间的关系,在UML中用带虚线的三角形箭头表示,这里的接口指的是接口类型,接口名字用斜体字表示,接口中的方法都是抽象方法,也采用斜体字表示。
图例:
3、 状态图
定义:状态图中展示实体基于它当前的状态对不同的事件是如何反应的。
我的理解:状态图是系统即时、实施的图纸。从这个图开始,消息的概念开始贯穿设计始终。通过状态图,我们可以了解系统中的主要对象的状态变迁和变迁散发出的消息。
图例:
4、 活动图
定义:工作流程活动图用于研究实现业务目标时所要执行的各项任务或活动的顺序安排。活动既可以是手动执行的任务,也可以是自动执行的任务。它可完成一个工作单元。
我的理解:活动图是状态图的延续,不止是在图中标记了对象状态的变迁,还加入了状态变迁相关的操作。
基本元素:活动状态表示在工作流程中执行某个活动或步骤。
转移表示各种活动状态的先后顺序。这种转移可称为完成转移。它不同于一般的转移,因为它不需要明显的触发器事件,而是通过完成活动(用活动状态表示)来触发。
决策,为其定义了一组警戒条件。这些警戒条件决定在活动完成后将执行一组备选转移中的哪一个转移。您也可以使用判定图标来表示线程重新合并的位置。决策和警戒条件使您能够显示业务用例的工作流程中的备选线程。
同步示意条用于显示平行分支流。同步示意条使您能够显示业务用例的工作流程中的并行线程。
泳道:可以使用垂直实线将活动图划分为泳道。每条泳道代表整个工作流程的某活动图个部分的职责,该职责由组织的某个部门来执行。泳道最终可以由组织单元或者业务对象模型中的一组类来实施。
图例:
5、 顺序图
定义:描述涉及用例实现的多个对象实例以及对象交互时传递的消息,并按照用例的执行步骤为顺序指明对象的交互顺序。
我的理解:主要描述对象间消息的传递和消息传递的顺序。
重点:画顺序的关键是要理清对象间的交互,也就是决定消息该发给那个对象。
图例:
活动图与流程图区别
活动图面向对象分析设计,流程面向过程的
活动图描述对象的活动顺利关系应尊守的规则,主要强调行为而非过程。流程图是面向过程,通过顺序,条件、循环来描述过程的顺序关系和时间序列。
uml中活动图与流程图的区别
活动图定义:
活动图是UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图。
它是UML中用于对系统动态活动建模的图形,反映系统中一个活动到另一个活动的流程,常常用于描述业务过程和并行处理过程。活动图中包括泳道、活动开始、活动结束、活动、对象、分支、消息等图形符号。
泳道将一个活动图中的活动划分为不同的组,每个组分别对应不同角色的操作。活动图描述多个角色之间的协作处理非常有效。
一张活动图可以有多个开始状态和结束状态。
一个活动可以与多个实体对象相关(相关指的是一种访问操作)。
分支用在有多条路径可选的流程中,针对不同的路径进行不同的分支处理。
活动图的走向可以是横向的也可以是纵向的,根据个人喜好而定。上图的这个销售订单处理活动图重点展示的是并发处理符号,它反映多个活动可以同时并发处理,并发结束后,又转变为顺序处理。
流程图定义:
1: 有起止框、输入框、输出框、处理框 、流程线、连接点组成。
2: 起止框:表示算法的开始或结束
3: 输入\输出框:表示算法的输入和输出操作。输入操作是指从输入设备山过江算法所需要的数据传递给指定的内存变量;输出操作 则是将常量或变量的值由内存贮器传递到输出设备。
4: 处理框:算法中各种技术和赋值的操作均一处理框加以表示。处理框内填写处理说明或具体的算式。
5: 判断框:算法中的条件判断操作。判断框说明算法中尝试了分支,需要根据某个灌水或提哦案件的成立与否来确定下一步的执行路 线。判断框内应当填写判断条件,一般用关系比较运算或逻辑运算来表示。
6: 注释框:表示对算法的走向,流程线箭头的方向就是算法执行的方向。
7: 连接点:表示不同地方的流程图的连接。
活动图与流程图的区别:
(1)、流程图着重描述处理过程,它的主要控制结构是顺序、分支和循环,各个处理过程之间有严格的顺序和时间关系。而活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为,而非系统的处理过程。
(2)、活动图能够表示并发活动的情形,而流程图不行。
(3)、活动图是面向对象的,而流程图是面向过程的。