UML类图依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的事物,反之不成立。在你想显示一个事物使用另一个事物时使用,两个元
素之间的一种关系,其中一个元素(服务者)的变化将影响另一个元素(客户),或向它(客户)提供所需信息。它是一种组成不同模型关系的简便方法。依赖表示
两个或多个模型元素之间语义上的关系。它只将模型元素本身连接起来而不需要用一组实例来表达它的意思。它表示了这样一种情形,提供者的某些变化会要求或指
示依赖关系中客户的变化。
根据这个定义,关联和泛化都是依赖关系,但是它们有更特别的语义,故它们有自己的名字和详细的语义。我们通常用依赖这个词来指其他的关系。依赖用一
个从客户指向提供者的虚箭头表示,用一个构造型的关键字来区分它的种类,通常情况下,UML类图依赖关系体现在某个类的方法使用另一个类作为参数。
2关联关系(Association)
关联是一种结构化的关系,指一种对象和另一种对象有联系。给定有关联的两个类,可以从一个类的对象得到另一个类的对象。关联有两元关系和多元关系。
两元关系是指一种一对一的关系,多元关系是一对多或多对一的关系。一般用实线连接有关联的同一个类或不同的两个类。当你想要表示结构化关系时使用关联,如
果几个类元的实例之间有联系,那么这几个类元之间的语义关系即关联。关联描述了系统中对象或实例之间的离散连接。
关联将一个含有两个或多个有序表的类元,在允许复制的情况下连接起来。最普通的关联是一对类元之间的二元关联。关联的实例之一是链。每个链由一组对
象(一个有序列表)构成,每个对象来自于相应的类。二元链包含一对对象。关联带有系统中各个对象之间关系的信息。当系统执行时,对象之间的连接被建立和销
毁。关联关系是整个系统中使用的“胶粘剂”,如果没有它,那么只剩下不能一起工作的孤立的类。在关联中如果同一个类出现不止一次,那么一个单独的对象就可
以与自己关联。如果同一个类在一个关联中出现两次,那么两个实例就不必是同一个对象,通常的情况都如此。二元关联用一条连接两个类的连线表示。
聚集表示部分与整体关系的关联,它用端点带有空菱形的线段表示,空菱形与聚集类相连接。组成是更强形式的关联,整体有管理部分的特有的职责,它用一
个实菱形物附在组成端表示。每个表示部分的类与表示整体的类之间有单独的关联,但是为了方便起见,连线结合在一起,现在整组关联就像一棵树。
类之间的关系是类图中比较复杂的内容。有关联、聚合、组合、泛化、依赖。
关联:是模型元素之间的一种语义联系,是类之间的一种很弱的联系。关联可以有方向,可以是单向关联,也可以是双向关联。可以给关联加上关联名来描述关联的作用。关联两端的类也可以以某种角色参与关联,角色可以具有多重性,表示可以有多少个对象参与关联。可以通过关联类进一步描述关联的属性、 *** 作以及其他信息。关联类通过一条虚线与关联连接。对于关联可以加上一些约束,以加强关联的含义。如下图所示:
聚合是一种特殊的关联,聚合表示整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如舰队是由一系列的舰船组成。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。
组合也是一种特殊的关联,也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。
聚合和组合的区别:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
泛化定义了一般元素和特殊元素之间的分类关系,类之间的这种泛化关系也就是继承关系。泛化关系是“a-kind-of”关系,定义一般元素和特殊元素之间的分类关系。下图是一个泛化关系的例子。
有两个元素如果修改X的定义可能会导致对Y的定义,则认为Y依赖X。依赖关系可能由各种原因引起,如一个类向另一个类发送消息,或者一个类是另一个类的数据成员类型,或者一个类是另一个类的 *** 作的参数类型等。有时依赖关系和关联关系比较难区分。如果类A和类B有关联关系,它们之间必然有依赖关系。如果两个类之间有关联关系时不用再表示出这两个类之间的依赖关系。
1、消费:包括餐厅吃饭消费、澡堂洗浴消费、超市消费、医务室、体育场馆收费等。
2、身份识别类:新生注册(数字迎新)、图书借阅、寝室和教学楼的门禁和考勤识别等。
而使用的校园卡多为mifare卡,根据卡中存放信息分为ic卡和id卡:
1、IC卡是集成电路卡,通过卡里的集成电路存储信息,此类卡存放的有各种人员信息和账户信息,与应用终端(消费机、考勤机)交互后需要上传到数据库人员信息表中,使得数据库与卡片同步,与数据库交互不够及时,批量上传数据。
2、ID卡是身份识别卡,卡中只存放一条帐号信息,每次与应用终端交互都需要与数据库交互,此类卡的应用终端必须实时联网,写校园一卡通设计的话推荐此种卡片。数据库建一组相互关联的表,使得能存放完整的人员信息,人员信息主要字段自少包括:姓名、学号、班级信息、卡号、账户金额(消费金额)、消费各种状态信息()、权限类别(考勤的权限、食堂消费权限、洗浴消费权限、门禁刷卡权限)等,消费记录表包括交易流水、交易时间、交易地点、交易金额等。
卡与消费终端交互流程:
1、鉴权:根据应用终端的类别,交互数据库取出该账户权限类别,判断是否有资格。
2、如鉴权通过,上传消费终端上输入的消费金额,平台根据上传金额与数据库提取出来的账户余额对比,判断金额是否合理。
3、平台自动 *** 作数据库更改消费后的账户余额及相关信息。
注:一卡通的充值流程同消费流程,纯手工敲的,欢迎采纳,一卡通业务方面问题可以powerliu@163com。关联(association)
是模型元素间的一种语义联系,它是对具有共同的结构特性、行为特性、关系和语义的链(link)的描述。(不同对象或类之间的结构化关系)
表示对象之间的联系。
在类图中,关联用一条把类连接在一起的实线表示。
比如:学生与课程之间就是通过选课关系进行关联
聚合(aggregation)
表示两个类之间是“is part of”关系,即整体--部分关系。
用横线加空心菱形表示,菱形部分对应整体一端
比如:组员是团队中的一部分
相对的横线加实心菱形表示组合(composition)关系,虽然组合关系也表示整体--部分关系,可是它表示部分对象被嵌入到整体对象中。比如:引擎是飞机的一部分
我理解的也比较浅 大家一起学习学习
本文会包含几块内容:
流程图= 流程+图。
流程:Flow, 是指特定主体为了满足特定需求而进行的有特定逻辑关系的一系列 *** 作过程,流程是自然而然就存在的。但是它可以不规范,可以不固定,可以充满问题。所以就会造成看似没有流程。
图:Chart 或者 Diagram , 是将基本固化有一定规律的流程进行显性化和书面化,从而有利于传播与沉淀、流程重组参考。
从定义可以看出,只要有事情和任务,流程就会有,但是并不是所有的流程都适合用流程图的方式去表现,适合用流程图去表现的流程是一定程度固定的有规律可循的,流程中的关键环节不会朝令夕改的。
● 参与者 :谁在这个流程中?可以是系统,可以是个打印机,更多的指什么角色——一般是有某种工种的人。比如客服同时有小A和小B两人,但是若他们的工作性质完全一样,那么在流程图里只需要写一个客服角色就可以了。
● 活动 :做了什么事,比如点餐,结帐等活动。
● 次序 :这些事情发生的前后顺序如何,哪个任务是其他任务的前置条件?比如客人不结帐,就不会产生送他优惠卡的活动。
● 输入 :每项活动开始取决于什么样的输入物或数据,比如做饭的师傅开始做菜时,需要拿到具体的点菜单。
● 输出 :每项活动结束后,会输入什么样的文档或数据传递给下一方,比如师傅做好菜后,如何让负责传菜的人知道菜已经做好?
● 标准化 :采用一套标准化的符号用以传递你的流程图,从而使受众更快明白。
常见的流程图有业务流程图(Transaction Flow), 页面流程图(Page Flow)。
在工作中,作为UED,你可能会发现PD经常谈的是业务流程,而作为交互设计师,我们更多产出的是页面流程图。页面流程图和业务流程图到底有什么关系呢? 先有谁,其次再有谁呢?
先讲个故事:假设你的梦想是开个中高档的全国连锁餐馆,那么首先你想到的应该不是如何去选址,而是将为何要开连锁餐馆这件事情,以及你的定位,核心竞争力想清楚。是快餐,还是点餐,是连锁还是加盟?定位于社区还是繁华商圈?是川菜还是江浙海鲜?是面向中老年还是年轻人?是家庭主题还是动漫主题?竞争对手是谁?需要什么样的投资?可能的风险是什么?这些都想清楚了,问题都有答案了,所谓战略层要清晰了吧。然后假设你现在分析来分析去,与主要投资方决定了一个方向:面向年轻人的时尚动漫茶餐厅,连锁,但是先在杭州开始第一家,选址定位于年轻人约会,扫街的地域,比如风景区,著名商圈,院旁…………等等等等,那么接下来呢?
接下来就是想办法让这些实现吧?那么需要做什么事情呢?选址?拉投资?搞装修?选餐饮菜单?雇佣员工?每一步怎么去做,时间点是什么?等等的任务拆解以及计划,就需要到战术层了。
这些事情的执行,总是需要请人的吧?先是核心团队分工去部署各项建设任务,当餐厅开设起来后,就需要组织稳定的运营团队,如服务、卫生、厨房、采购、人事等等,厨房里面还得分工,白案,热菜,冷菜等等吧?每个部门需要设置管理层以及汇报关系吧?所以你的组织结构就诞生了。
那具体每种角色是如何顺畅合作完成日常稳定的以及突发的各项任务呢?比如,当顾客上门时,谁去引导客人入座,谁去点菜,怎么将点菜的讯息迅速传递到厨房,并分发到酒水间、冷菜间、热菜间?并保证客人尽快能够吃到所点的菜?你必须要考虑各种人员的协作流程,优化效率,所以业务流程就出现了。
人肉运营了一段时间,没有借助任何点餐系统,你发现也还可以。客人点菜时,服务员手抄写下客人的要求,因为有复印纸,所以服务员能够将副本送入厨房,同时写下餐桌号码。厨房规模较小,负责分配任务的员工看下菜单,分别往冷菜处的黑板上写下需要他们处理的,以及跑到热菜区的黑板上写下待处理的菜品,以及去酒水间报下品名即可。可是随着经营的扩大,以上的人肉方式出现了很多问题,首先,手抄效率太低,顾客频繁换菜,响应来不及,手抄出错,导致经常报错菜。厨房很混乱,不得不多招了几个人专门跑堂。而一旦顾客要加菜,撤菜就更麻烦了,需要找出他们当时点的菜,再进行人工的批注和修改,同时要修改厨房后端的各个黑板……
所以你们想要开发一套智能系统,取代很多人肉工作,你们请了系统开发团队,他们经过评估,判断从点菜开始,一直到传菜都可以用系统解决。手持终端,能够快速传递顾客点菜需求到打印机,打印系统能够根据顾客点菜的类型进行自动的分单打印,所以热菜间看到自己的热菜菜单,冷菜间看到自己的冷菜菜单,而酒水间看到酒店菜单。当他们准备完毕后,送出,传菜员可以根据菜名与打印出来的单据进行传菜并根据顾客的点菜小票进行核对。这套系统同时必须配备结算系统,将最终确认掉的菜单及消费价格传递到结算前台,收银员能够快速进行 *** 作。
这套系统最终是需要展现出来的,那么手持终端的界面如何设计?服务员能够用更少的点击完成一个菜的点餐吗?结算中心的界面如何设计?
通过以上的故事,是不是更明白从战略、战术、业务流程图到页面流程图的关系了?总结下:
●先是有一个业务需求和业务目标,也即我们的愿景是什么?(战略)
●然后就诞生了我们需要分解出什么样的任务,如何执行战术?(战术)
●然后就诞生了需要架构什么部门,岗位去分工协作?(组织架构)
●然后就诞生了不同的部门在协作完成某件任务时的业务流程?(业务流程)
●业务流程基本稳定后,往往会考虑优化效率,所以会诞生出系统来支持流程,减少人肉环节,促进数据采集(系统愿景)
●为了设计这个系统,PD需要思考什么功能能够取代某个环节的人肉工作(功能需求,系统流程)
●不管是怎么样的功能最终都会以界面的方式呈现,设计师们会关注用户在系统里的任务流,行为路径,让用户完成任务更加高效愉悦。(页面流程)
当然,除了业务流程,系统流程,页面流程,还有数据流程被人关注。
我们平时工作中,还会经常听人谈到泳道图啊,任务流程图啊等等概念,究竟是神马关系呢?
在工作中,我们经常能够看到两种业务流程图,从表现形式来看,一种很好区分,俗称为“泳道图”的它,在样子上也确实像个泳道,可以有横向的泳道,也会有纵向的泳道。泳道图在某些文档里会被称为“以活动为单位的流程图”,浮在泳道中的都是一个个活动。
泳道图有几个关键点:两大维度,活动流转,流程要素。
另外一种类型是以部门和岗位为单位的流程图,下图中的圆形就代表一个个部门或岗位。矩形代表活动。这种流程图关注事情如何完成的逻辑,但是在体现各个部门的责任上比较弱。如果是某个岗位的人来看,很难像泳道图那样一眼就能看到自己部门的职责和任务。所以现在用得比较少。
流程图可以提供一种简单扼要的“缩略俯瞰图”,帮助观众快速了解业务如何运转。它包含了几个关键词: 谁,什么时候,在什么条件下,做了什么事情,输入什么,输出什么,输出给谁……
与系统流程不同,业务流程更关注于业务本身如何运作,讲的是业务故事,包含的是业务规则。而系统流程则是满足业务流程,实现部分流程或全部流程的信息化和系统化。
所以业务流程是所有环节的前置条件——软件需求分析,信息系统建设也会先进行业务流程的梳理。
下面表现了业务流程图是如何在三个主要场景中发挥作用的:
1、培训
在此场景中:流程图能够提供一种快速了解业务如何运作的视图,通过业务流程图,新员工能够快速明白业务的最终目标是什么,中有哪些角色在参与以及他们的职责,以及彼此之间的联接。
除了培训新员工,在员工轮岗、调职场景中,员工也需要业务流程图参考,明白新的工作内容如何开展,以及自己所处的位置,自己的上游是谁,下游是谁,自己需要交付的工作内容是什么。
2、流程优化与重组
业务流程重组(Business Process Reengineering)的存在可以明确反驳:存在即合理。事实上,存在的业务流程并未是合理的,有可能是参与的多个角色习惯了某种做法,有可能是变革尚未影响到末端的 *** 作,也有可能缺乏对于运行中的业务流程问题的洞察以及强有力的变革推动——因为要推动业务流程变革,不是某个部门的事情,而是需要流程中各个部门的通力配合。
更多时候,业务流程优化是自上而下的,但是老板们未必对实际运作的业务流程那么心知肚明,业务流程图能够很好去表现这个“运作模型”。通过看业务流程图,找关键节点的人访问,能够直接切入:为什么要这么做,为什么不这么做?从而探索出更深层次的问题,而不是问:你们现在怎么做?
通过调研,分析业务流程图,引入更多角色,能够分析出目前业务流程的问题:缺失,重复,风险,效率等等。从而制定相应的优化方案。
3、信息化的基础
正如上文所述的餐馆梦想的案例,信息系统的一项任务就是解放员工的手脚,取代一些重复的人力劳动工作。系统上了之后,不是说业务流程不需要而是经过了一些调整,其中某个参与者变成了系统,或手持设备,或打印机而已。
那么在做系统的功能设计和系统流程设计时,是不是必须先要了解目前业务是如何运作的呢?从而更好分析分析,更好说明系统在什么环节取代了什么类型的人肉工作?
所以我们看到的PRD往往也会先以业务流程图开始说明,而叙述一个系统建设的好处时,也可以用以前的业务流程与系统上了之后的业务流程进行对比。根据分析,将愿景中的新的业务流程图背后需要系统的功能点撰写清楚。
首先绘制业务流程图本身有没有流程?一定是有的。在软件工程学里听说一句话叫:万物皆对象。那么在流程学里,万事皆流程。吃饭难道没流程吗?就吃饭的动作而言,就有流程:拿筷子——夹菜——入口——咀嚼——吞咽。
那么,绘制业务流程图有没有可遵循的流程呢?我建议可以从下面4步着手。
1、调研
如何快速了解业务运作真相?有没有调研的技巧放送?
2、梳理与呈现
能否快速将调研得到的文字和问题,快速转化为业务流程图?
业务流程图的标准图示是什么?
怎么评价一个业务流程图的好与坏?
3、评审与确认——能否真正让业务流程图反映现实中的业务?
4、归档维护——流程不断变更,业务流程图如何快速响应?
在绘制业务流程图前,思考如何精美、如何交互以及使用什么工具,都不应该是重点。
真正重点的是将业务流程图的关键要素给搜集一番。请试图回答清楚以下几个问题,否则不要开始绘制流程图:
除了在本部分开始的那几个问题要顾及到, 其实调研过程解决的仍然是who,what,why,how,以及where的问题:谁,在什么情况下,做了什么事情,这个事情需要什么前置条件,又输出了什么,这个事情在哪里完成的? 搞明白这几个问题,我们的调研就可以圆满完成了。
流程图的表现,要回答这几个问题:
1、Who——谁?部门,角色,岗位
2、What——什么事情?
3、Where——在哪里做的?在我梳理的业务流程图上,where更多表示是文档还是各种系统,用来表示信息化的程度。比如当我们梳理中发现,有一项登记,是用excel而不是业务系统来进行的,那么在这里的where就可以表示为:excel文档。
4、Document——那产生的这份文档叫什么名字?也写出来,代表有文件的传递,而以后要进行信息化的话,此份人肉文档也是需要被消除而被系统取代的。(相反,如果这项工作是在某个系统里 *** 作的,where就可以写成“人事系统”,文档可以继续存在,即该系统中的表单名称:“员工登记表单”)
5、Condition——条件。在这种条件下,下一个活动还能够继续,即用逻辑链接线的方式来表示一项活动的输入和输出,指向某个活动的箭头就表示此活动的前置输入条件。
6、Dicision——决策。有些活动会产生一个条件判断,根据不同的判断结果从而走不同的分支流程。比如输入员工信息的时候,可以根据员工之前是否就职过,选择不同的流程,对于已经就职过的,选用之前的工号而不用生成新的工号。
举个案例(如果不太恰当,请意会)。假设你受命要调研两家餐饮店的业务流程,目的是给他们提供性价比最高的点餐系统。
在调研中:
你首先可以要求精通业务流程的人给你系统讲解一遍。
调研具体 *** 作的人,来验证他给你讲解的是否全面和偏差。
实地观察和记录(花点时间走遍业务流程)
三种方式相互结合使用。第一种方法可以让你首先建立一个系统观,了解大体枝干,但是很难切入到可能会出现问题的细节。第二种方法太依赖于问题的质量以及问问题的场景。有很多结论的不正确其实是因为问错了人或者问问题的方法不对。那么就需要借助第三种,在观察中再进行验证。
在这些问题中,就涉及到了“分单”,“切菜”,“择菜”,”烹饪”,“传菜”,“上菜”几个活动,也涉及到了“服务员”,“厨师”,“助理”,“刀工”,“传菜员”几个角色。几个活动的次序也比较清楚了。
下面的问题,可能厨师就不了解了,要问点菜员了。
你的调研和观察使你拥有了“烹饪”所需的原材料。
接下来的任务是不是很简单,对,就像填空题一样简单。将活动/事件按照一定的规则填到由部门和时间两条维度决定的框框里。
这个阶段是paper work,你需要将调研阶段收集到的原材料用更直观明了的方式呈现出来。从而能够更好进行评审和确认。也为以后的流程评审和优化做准备。
不可能将所有的活动都放到一张图里呈现。
“业务流程是有层次性的,这种层次体现在由上至下、由整体到部分、由宏观到微观、由抽象到具体的逻辑关系。这样一个层次关系符合人们的思维习惯,有利于企业业务模型的建立 企业部门之间的层次关系表。一般来说,我们可以先建立主要业务流程的总体运行过程(其中包括了整个企业的大的战略),然后对其中的每项活动进行细化,落实到各个部门的业务过程,建立相对独立的子业务流程以及为其服务的辅助业务流程。”
——引自《百度百科》 业务流程词条
对于很多新人来讲, 业务最难的在于划分业务流程图的层次上。
首先,明确你要梳理的业务流程的范围 ——用大的粗略的关键节点,讲清楚这个业务流程范围中的故事,就是顶层业务流程图。你的顶层业务流程图是业务全局故事的简单表达,但是请注意这里的业务全局不见得是公司整体的业务全局,而是你界定好的业务范围。比如,下图是餐厅的日常运作流程图,若你界定的业务范围是面向顾客的点餐和结帐流程,那么这就是顶层业务流程图。但是若你界定的是整个餐厅的运作业务流程,那这显然还是一个子集——并没有包含餐厅的采购、供应商管理、一级库存管理等工作。
其次,先从顶层的业务流程分解开始,由粗至细。 顶层业务流程图的梳理原则:
1、界定范围内的业务全局故事。
2、包含该范围内的关键节点。并且,当被质疑说某某环节怎么不存在时,自己要清楚它在下一层分解中应该被包含在那个关键节点中。比如,赠送10周年优惠券,应该会在结帐节点分解中出现。而打印分单,会在点菜节点中分解。而准备儿童座椅应该是接待入座环节。
3、顶层流程图分解出来的关键节点未必都会细化分解下去,生成二级以及三级的流程图。这要看该节点涉及到的“活动”以及“角色”是否复杂。
再看一个案例,对传统生产型企业的进销存主业务流程进行分解。橙色的代表被分解点,已经可以分解为四层。当我们分解到第四层,发现再往下去涉及到的活动和角色都已经很少时,就不必再分解了,而是可以将第四层的关键节点直接作为第三层业务流程的“活动”,而不是子流程图。
当然,这是依赖于你梳理业务流程的目标。如果你偏偏是要对“打样”环节进行剖析优化,则还可以继续分解下去。
这一步的工作会帮你建立出清晰的流程目录结构,如下图所示是摘选于刚完成的一个流程梳理的项目中的目录结构部分。可以看到全图即是顶层关键节点,作为老大,可能只要看这一层就够了。下面则会对顶层做更多细化拆解。
“H3样品认证”在顶层业务流程图中,仅仅是一个“活动”,而在自己细化的这一个层次中,则会包含详细的子活动一级参与者。
我常用的就是前两行的“活动”,“判断”,“逻辑关系线”,“起始与终止”,以及第二行的“子流程”,和“文件/表单”。如果你不是符号控,我建议这几个就足够了。
其中,“子流程”此图示就是可以帮助你将流程分解得到的子流程能够串联起来,比如,当在”A流程”中涉及到进一步需要分解的”A11流程”时,就可以在”A流程”中用子流程符号代表“A11”。然后你的读者就会明白要想进一步了解”A11″应该参考另外一个流程图。
流程图的常用结构:
给大家看一些案例:
基本上包含大多数图示的流程图:
只用到少数几个图示画的简单流程图(台湾人的文档中称为程序图——不过这里的程序不是指计算机程序,而是process,仅仅是体现任务之间的处理流程,所以使用极简单的符号也不为怪了):
以上两个流程图案例,从符号的复杂程度上来讲,一个是完整流程图,一个是基本流程图,但是从表现形式来讲,都属于“泳道图”——Swimlane。这也是我们最常用的一种表现形式了。泳道图能够很好体现部门或者角色在流程中的职责以及上下游的协作关系。且流程图本身的标准容易掌握,达成共识也就更加容易。
验证你是否做到了以上的DO,以及规避了Donnot的做法是什么?
很好办,及时与各位进行评审。将各个涉众都叫到一起,给他们看你梳理出来的成果。
这会发现一些有意思的事情,除了评审你的流程图是否符合现实外,也会评审目前的业务流程是否符合理想。不同的部门和岗位的代表会在这个评审中,确认当前,也会相互提出意见,甚至吵起来,这不失于做流程优化的一个很好的契机。暂且不表了。
统一建模语言UML软件工程领域在1995年至1997年取得了前所未有的进展,其成果超过软件工程领域过去15年来的成就总和。其中最重要的、具有划时代重大意义的成果之一就是统一建模语言(UML:Unified Modeling Language)的出现。
在世界范围内,至少在近10年内,UML将是面向对象技术领域内占主导地位的标准建模语言。采用UML作为我国统一的建模语言是完全必要的:首先,过去数十种面向对象的建模语言都是相互独立的,而UML可以消除一些潜在的不必要的差异,以免用户混淆;其次,通过统一语义和符号表示,能够稳定我国的面向对象技术市场,使项目根植于一个成熟的标准建模语言,从而可以大大拓宽所研制与开发的软件系统的适用范围,并大大提高其灵活程度。
统一建模语言(UML)是用来对软件密集系统进行描述、构造、视化和文档编制的一种语言。
首先,也是最重要的一点,统一建模语言融合了Booch、OMT和OOSE方法中的概念,它是可以被上述及其他方法的使用者广泛采用的一门简单、一致、通用的建模语言。
其次,统一建模语言扩展了现有方法的应用范围。特别值得一提的是,UML的开发者们把并行分布式系统的建模作为UML的设计目标,也就是说,UML具有处理这类问题的能力。
第三,统一建模语言是标准的建模语言,而不是一个标准的开发流程。虽然UML的应用必然以系统的开发流程为背景,但根据我们的经验,不同的组织,不同的应用领域需要不同的开发过程。举个例子来说,开发错综复杂的软件是非常有趣的工作,但开发这种软件与构造严格实时的航空电子系统是大不一样的,后者是性命攸关的大事。因此我们首先把精力集中在设计通用的元模型上(统一不同方法的语义),其次是建立通用的表示法(提供对这些语义的形象化的表达)。虽然UML的开发者们将继续倡导从用例驱动到体系结构为中心最后反复改进、不断添加的软件开发过程,但实际上设计标准的开发流程并不是非常必要的。
UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它溶入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。
面向对象技术和UML的发展过程可用上图来表示,标准建模语言的出现是其重要成果。在美国,截止1996年10月,UML获得了工业界、科技界和应用界的广泛支持,已有700多个公司表示支持采用UML作为建模语言。1996年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。1997年11月17日,OMG采纳UML 11作为基于面向对象技术的标准建模语言。UML代表了面向对象方法的软件开发技术的发展方向,具有巨大的市场前景,也具有重大的经济价值和国防价值。
标准建模语言UML的内容
首先,UML融合了Booch、OMT和OOSE方法中的基本概念,而且这些基本概念与其他面向对象技术中的基本概念大多相同,因而,UML必然成为这些方法以及其他方法的使用者乐于采用的一种简单一致的建模语言;其次,UML不仅仅是上述方法的简单汇合,而是在这些方法的基础上广泛征求意见,集众家之长,几经修改而完成的,UML扩展了现有方法的应用范围;第三,UML是标准的建模语言,而不是标准的开发过程。尽管UML的应用必然以系统的开发过程为背景,但由于不同的组织和不同的应用领域,需要采取不同的开发过程。
作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分。
(1) UML语义 描述基于UML的精确元模型定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的最佳表达方法所造成的影响。此外UML还支持对元模型的扩展定义。
(2) UML表示法 定义UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。
标准建模语言UML的重要内容可以由下列五类图(共9种图形)来定义:
·第一类是用例图,从用户角度描述系统功能,并指出各功能的 *** 作者。
·第二类是静态图(Static diagram),包括类图、对象图和包图。其中类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和 *** 作)。类图描述的是一种静态关系,在系统的整个生命周期都是有效的。对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。包由包或类组成,表示包与包之间的关系。包图用于描述系统的分层结构。
·第三类是行为图(Behavior diagram),描述系统的动态模型和组成对象间的交互关系。其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。通常,状态图是对类图的补充。在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。而活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。
·第四类是交互图(Interactive diagram),描述对象间的交互关系。其中顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,合作图跟顺序图相似,显示对象间的动态合作关系。除显示信息交换外,合作图还显示对象以及它们之间的关系。如果强调时间和顺序,则使用顺序图;如果强调上下级关系,则选择合作图。这两种图合称为交互图。
·第五类是实现图( Implementation diagram )。其中构件图描述代码部件的物理结构及各部件之间的依赖关系。一个部件可能是一个资源代码部件、一个二进制部件或一个可执行部件。它包含逻辑类或实现类的有关信息。部件图有助于分析和理解部件之间的相互影响程度。
配置图定义系统中软硬件的物理体系结构。它可以显示实际的计算机和设备(用节点表示)以及它们之间的连接关系,也可显示连接的类型及部件之间的依赖性。在节点内部,放置可执行部件和对象以显示节点跟可执行软件单元的对应关系。
从应用的角度看,当采用面向对象技术设计系统时,首先是描述需求;其次根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图(包含包)、对象图、组件图和配置图等五个图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图和合作图等四个图形,是标准建模语言UML的动态建模机制。因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。
顺序图和通信图都属于交互图。
这两种图之间的区别在于:顺序图基于时间,按时间顺序显示出现的任务;而通信图显示任务和信息(对象)的交互方式。在通信中,时间以编码形式显示,很难选取。
虽然存在这些根本区别,但这两类图有相同之处:都用于显示对象和用户如何交互以执行任务
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)