图3描述了业务流程的实例。角色客户(customer) 下了一份定单,然后销售(sales)部门中的某个工人确认此定单。如果定单有效,此工人调用另一业务流程“公司运输物品(company ships an item)”的实例。这个类型的图在UML表示法指南中没有明确的提到,然而,它符合UML的元模型。在对象生命线顶部的符号代表分类器角色,如图3中的角色、对象角色和用例角色。
图4 UML用例图描述业务流程之间的静态关系
图4是UML用例图,描述了业务流程之间的静态关系。业务流程描述组织(organization)与角色客户(customer)的协作。注意在UML的1.1版本中,用例不能相互联系而总是由角色发送信号触发。这给建模环境带来困难,一个用例在运行期间,当特殊条件出现时,另一个用例也开始启动。在这种情况下,角色通过与另一个用例的联系初始化此用例而不需发出任何特定的开始信号。例如,如果客户的请求被评估为有效,用例公司运输物品(company ships an item)被组织中的对象触发。这个用例实例不直接由客户触发,希望下一版本的UML将减少用例间有关联系的限制。
UML用例图不容易表达出用例实例的顺序,例如,首先客户请求一项物品,然后公司将传送此物品,最后客户付款。一个解决的方法就是在用例间使用约束{precedes}或依赖关系 <<precedes>> 。类似的关系同样存在于OML(OPEN modeling language),参看[3],Robert C. Martin建议使用关键字follows替代precedes,参看[6]。这样替代的原因是依赖关系 <<follows>>与依赖关系<<preceds>>的指向相反,依赖关系<<follows>> 指向通常的依赖方向——从依赖元素指向独立元素,至于哪一个更直观仍是个未解决的问题。然而,带约束或依赖的图仍然是静态结构图,并不描述特定场景。
组织级(organization level)指定了一个组织(如公司、学校和政府机关)的职责,以及该组织的业务环境。工件组织(organization)指定了组织的职责和相关的静态属性。工件组织模型(organization model)指定了组织与其他组织之间的关系。工件组织用例(organization use case)用流程目标、前置条件、后置条件和业务流程必须符合与其相关的静态属性的业务规则来指定组织范围的业务流程。这个业务流程是组织与其他组织之间的协作,这种协作是在工件组织用例模型(organization use model)中指定的,见图11中的依赖关系协作。组织业务流程的实例是由组织交互模型(organization interaction model)用组织与其他组织间的交互来指定的。组织业务流程可以精化到更具体的系统业务流程,见图11中的依赖关系精化。工件组织用例生命周期(organization use case life cycle)指定了所允许的系统业务流程。组织用例交互模型(organization use case interaction model)指定了典型的业务流程实例序列,见图11中的实例依赖关系。组织业务流程的实现用软件系统和它的用户(团队角色)之间的交互来指定,见图11和12中实现依赖关系。
系统级(system level)指定了软件系统的环境以及与它的角色之间的关系。工件系统(system)用职责、前置条件、后置条件、参数和返回值来指明系统的接口和操作。若角色职责和接口是相关的,并由工件角色(actor)指定。系统生命周期(system lifecycle)指定了所允许的系统操作和事件。系统模型(system model)指定了软件系统和角色(其他系统和用户)之间的关系,系统交互模型(system interaction model)指定了软件系统和角色之间的交互。这些交互是系统业务流程的实例,见图11中依赖关系实例。工件系统用例(system use case)用流程的目标、前置条件、后置条件、非功能性需求、业务规则和其他相关静态属性指定了在系统范围内的业务流程。这个业务流程是系统与其它系统或用户的协作。
这些系统与它的角色之间的协作是在工件系统用例模型(system use case model)中描述的,见图11中的依赖关系协作。业务流程接口的动态属性,如在业务流程范围内所允许的系统操作顺序,是在系统用例生命周期(system use case life cycle)中指定的。系统用例交互模型(system use case interaction model)指定了典型的业务流程实例的序列。系统业务流程可以精化到子系统业务流程中,见图11中的依赖关系精化。系统业务流程的实现用构架级的子系统间的交互来指定,见图11中的依赖关系实现。
构架级(architectual level)定义了子系统(组件)、子系统的职责、接口、关系和交互。工件子系统(subsystem)职责、前置条件、后置条件、参数和返回值指定了子系统接口和子系统操作。子系统生命周期(subsystem lifecycle)指定了所允许的子系统的操作和事件的顺序。子系统模型(subsystem model)指定了子系统和其他子系统之间的关系,子系统交互模型(subsystem interaction model)指定了子系统之间的交互,这些交互是子系统业务流程的实例,见图11中依赖关系<<实例>>。工件子系统用例(subsystem use case)指定了在子系统范围内的业务流程,这个业务流程是子系统与其它子系统、系统和用户之间的协作。子系统和它的角色之间的所有协作是在系统用例模型(system use case)中描述的,见图11中的依赖关系<<协作>>。子系统业务流程接口的动态特性,如在业务流程范围里所允许的子系统操作顺序是在子系统用例生命周期(subsystem use case life cycle)中指定的。子系统用例交互模型(subsystem use case interaction model)指定了业务流程实例的典型序列。子系统业务流程的实现用类级别上对象之间的交互来描述,见图11中的依赖关系<<实现>>。
图12中,设计工件描述了组织团队结构。事实上,它与描述软件子系统结构的工件没有什么太大的区别。团队的角色可以表示成UML构造型的类,工件角色(role)指定工人角色的职责及其它相关的静态属性。工件角色生命周期(role lifecycle)指定了角色的动态属性、它们的状态以及它们所响应的事件。工件角色模型(role model)指定角色之间的静态关系。成员级业务流程(member level business process)指定团队成员角色与其它团队成员角色之间的协作,见图12中的依赖关系<<协作>>。这些业务流程的实例是在工件角色交互模型(role interaction model)用角色实例之间的交互指定的,见图12中的依赖关系<<实例>>。
图12 在团队和业务流程视图中,设计工件描述了软件系统
称为团队(team)的设计工件是一个角色包,指明了团队的职责以及相关的静态属性。团队的动态属性是在工件团队生命周期(team life cycle)中指定的。工件团队模型(team model)指定了团队之间的静态关系。团队级业务流程(team level business process)指定了团队和其它团队之间的协作,见图12中的依赖关系<<协作>>。团队级业务流程的实例是在团队交互模型(team interaction level)中指定的,见图12中的依赖关系<<实例>>。团队级业务流程的实现用团队成员之间的交互以及团队成员与软件系统之间的交互来指定,如图12中的依赖关系<<实现>>。设计工件的模式可以用相似的方法应用在更高的抽象级4上。