当前位置: 代码迷 >> 综合 >> 软件模型设计基础-图(Class diagram)
  详细解决方案

软件模型设计基础-图(Class diagram)

热度:43   发布时间:2023-12-13 10:49:35.0

1.5图

1.5.1类图(Class diagram)

类图的语义:

  类图是静态视图的图形表达方式,表示声明的(静态的模型元素),如类、类型及其他内容及相互关系。类图可以表示包的视图,包含嵌套包的符号。类图包含一些具体的行为元素,如操作他们的动态特征是在其他图中表示的,如状态图和协作图。

表示法:

  类图是用图形方式表示的静态视图。通常,为了表示一个完整的静态视图,需要几个类图(类图这个时候要讲究关联性,如逻辑划分)。每个独立的类图需要说明基础模型中的划分,即是某些逻辑划分,如包是构成该图的自然边界。

类图的表示是一个简单的表示:

  (我们还是来举个我们原先用过的例子来说明下面的各个图例。在述说状态的时候,我们举了一个下班拿钥匙的例子,这次,我们换一下说明方式,假如一位经理下班后,到了楼下,发现钥匙没有拿下来,这时他让秘书上去拿。最后秘书拿到钥匙后交给经理,经理拿到钥匙回家)

1.5.2对象图(Object diagram)

对象图的语义:

  对象图显示某些时刻对象和对象之间的关系,比如对象是类的实体,那么对象就是将类图中的类换成该类的实体-对象,那么,这个图就是对象图。对象图和协作图相关,协作图显示处于语境中的对象模型(类元角色)。

对象图的表示法:

  对于对象图无需提供单独的形式。类图中就包含了对象,所以只有对象而无类的类图就是一个"对象图"(和语义的描述一致)。然而,"对象图" 这一个术语仅仅在特定的环境下才很有用。
对象图不显示系统的演化过程,他仅仅是对象的关系等的静态描述。


1.5.3用例图(User case diagram)

用例图语义:

  表示处于同一个系统中参与者和用例之间的关系。

用例图表示:

  用例图是包括参与者、由系统边界(一个矩形)封闭的一组用例,参与者和用例之间的关联、用例间关系以及参与者的泛化的图。用例图表示来自用例模型的元素。

1.5.4顺序图(Sequence diagram)

顺序图语义:

  以时间顺序显示对象的交互的图,实际上,它显示了参与交互对象的和所交换消息的顺序。也是以时间为次序的对象之间的通讯的集合。不同于协作图,顺序图仅仅时间关系,而对象关系(准确地讲应该是对象的时间顺序关系)。

顺序图表示方法:

  顺序图有两个方向,就是我们所说的两维,垂直方向代表时间,水平方向代表参与交换的对象(其实含有先后次序),无论水平或垂直方向先后次序并没有规定,谁先谁后都可以。知道操作系统机制的朋友都有一个概念-就是消息机制为驱动,自然其他的应用程序也差不多,顺序的关系就是消息方向,这个方向对参加交互的对象也是有次序的,每次一个对象参与消息机制。

  当然,对象在进程(一个进程有n个对象,采用new(object)声明即可)中也是有生命期(随着delete(object)方法生命就结束了),那么这个线就可以不在画下去。那么对于一个外部对象(不在内部生成,也不在进程结束时消失),又如何描述呢?同样。

  每个消息显示为一个从发送消息的对象的生命线到接收消息的对象的生命线的水平箭头。在箭头相对空白处放置一个标号以表示消息被发送的时间或其他的约束条件。



1.5.5协作图(Collaboration diagram)

  在前面对协作讲述较少,如何解决?没有办法欠下来的就补上!

协作图语义:

  协作图表示角色间交互的视图,即,协作中实例及其链。与顺序图不同,协作图明确地表示了角色之间的关系。另一方面,协作图也不将时间作为单独的维来表示,所以必须使用顺序号来判断消息的顺序以及并行线程。顺序图和协作图表达的是类似的信息(使用不同的方法表达)。

协作图表示:

  我们先来澄清一下前一段对协作没有说清楚的问题,然后再说协作图。

<以下是作者对上面描述的协作的补充>

  协作的语义:在一组给定的对象(这些对象在构造构件图时进行说明)和给定的环境(描述时称为语境),为了完成某个目标而交换消息。从而实现了一种行为。要理解设计机制,应该重点着眼于实现一个或一组目标而涉及的对象和消息。它们在更大的系统中也用于完成其他目标。使对象和链共同工作以实现某种目的而进行的安排称为协作。在协作中实现的行为的消息序列称为交互。

  协作由静态部分和动态部分组成。静态部分描述在协作实例中对象和链可能承担的角色;动态部分包含一个或多个动态交互,表示在执行计算过程中不同时间里协作中的消息流。在协作中流动的消息流可以选用状态机来进行描述,状态机将规定合法的行为顺序。而状态机中的事件代表协作中各角色间的消息交换。

  协作由角色组成,同时角色也仅仅在协作中才有意义,在协作之外无意义。

  在程序的实施过程中,我们经常考虑的问题就是对象的运行期(Runtime)问题,其始终就是对象(此处看成角色)在运行期的协作(这个协作我们称为运行期绑定)。

  在上面我们已经说了关于协作的消息流,读者再查看一下我们曾叙述状态机的时候,也对事件或消息谈了许多。事件也是一种消息,不过这个消息在整体上将给应用性程序或协作的什么角色一个状态转换触发(这个地方是windows等操作系统"以事件驱动之"核心描述)。如果没有明白再看看下班的那个例子。

  不过在协作中还有另外两个概念:一是约束,一是资源。

  从本质上描述,假如对待的是消息的话,资源就是提供消息的类元,而约束就是提供什么样的消息。

协作图:

  我个人认为协作图该有两类,一是操作协作图,一是实体协作图。

  操作的协作图讲关系,而实体的协作图讲消息。对于图的本质是一致的都是角色间的交互。

1.5.6状态图(Stat chart diagram)

状态图语义:

  显示一个状态机(包括简单状态、转换、嵌套组成状态)的图。这个视图包括状态机。关于状态机我建议你再回头看一下状态机的说明。

状态图表示法:

  在状态机一段的说明时我们举例的就是一个状态图。

  参见原先述说状态时的状态图

1.5. 7活动图(Activity diagram)

活动图语义:

  活动图是状态机一个特例,在该状态机中所有的或大部分的状态都处于活动状态或动作状态,所有或大部分的转换由源状态中活动的完成所触发。

  活动图表示一个程序或工作流。工作流是被活动图所建模的过程的例子。活动图通常出现在设计的前期,即在所有实现决定前出现,特别是在对象被指定执行所有的活动前,其状态代表活动的执行,就象一个计算机或真实世界不间断的操作,而转换由状态内活动的完成来触发(若有约束条件,可能有几个可能不同的出口)。

  活动图是强调计算过程中顺序的和并发步骤的状态机。

几个概念:

  动态并发性:具有动态并发性的活动状态表示并发执行多个独立的计算。活动与一个参量表集合同时被调用。集合中的没一个成员都是活动的并行调用的参量表。调用是相互独立的,当所有的调用完成时,活动结束并触发它的完成转换。

  对象流:有时,查看一下操作和作为它的参量值或结果的对象之间的关系有好处的。一个操作的输入和输出可以表示成一个对象流状态。它是一个状态的构造型,表示在计算过程中特定点的给定类的对象流状态。它是一个状态的构造型,表示在计算过程中特定点给定类的对象存在。

  由动作输入或输出的对象可以表示为对象符号。符号表示处于计算中某一点的对象,在该点对象适合作为输入或输出。虚线箭头表示从活动状态到作为活动输出之一的对象流的输出转换。虚线箭头也可以表示从对象流到用这个对象作为输入的活动状态的输入转换,通常,同一个对象可以作为一个活动的输出和多个后继活动的输入。

  状态类:同一个对象被一些改变它的状态的后继活动所控制。为了更加准确,对象可以在图中出现多次。每次出现表示它生命中的不同状态。为了区分同一个对象的多次出现,每个点的对象的状态可以放在方括弧内附加类旁边。
泳道:活动图中的活动可以按照不同准则划分为几组。每个组代表活动职责的一些有意义的部分,例如,商业组织负责给定工作流的某一步。根据它们的图形表示法特征,每个组称为泳道。为了说明这个概念,拿泳道来表示并不直观,我一般这样看泳道的:拿业务上的流程来说明问题,比如填单是一个步骤(也可能是几个步骤,不一定连续),财务审核是一个步骤(也可能是几个步骤,也不一定连续),仓库也是一个步骤,其中中间的过程还可能转来转去的;好了,我们把业务、财务、仓库分为三个部分,这每个部分可以称为泳道。

  每个泳道里有几个步骤,我们可以看成对象,对象间逻辑、交互等关系,我们可以在顺序图中表示。其中关系的具体实施我将后几章详细说明。

  延迟事件:当其他的活动进行时,有一种事件必须为了晚一些使用而延迟(没有立即使用的事件会被遗失)。延迟事件是被放置在内部队列中,直到它被使用或抛弃的事件。如果在状态或活动中发生延迟事件,则该状态或活动将对它们进行说明,其他的事件必须被立即激发。如果几个转换为隐含的,则它们中的哪一个会被激发并不明确,且施行一条规则以选择一个要激发的转换是语义变更点。

活动图的表示法:

  活动图是状态机的一种,但是几种简单表示法(也可认为是几个分支)也适用于活动图,如:活动状态、分支、合并、泳道、对象流状态、状态、延迟事件等。



1.5. 8构件图(Component diagram )

构件图语义:

  构件图表明软件之间的依赖关系,包括源代码构件、二进制代码构件和可执行代码构件。软件模块可以用一个构件来表示。有些构件存在于编译时,有些存在于链接时,有些存在于执行时,有些在多种场合存在。一个编译时构件只在编译时有意义。

  构件图只有描述符形式,没有实例形式。要表示构件实例,应使用部署图。

构件图表示:

  构件图表示了构件类元,以及其中定义的类(或其他的类元)和构件间关系。构件类元还可以嵌套在其他构件类元之中,从而表示定义关系。

  构件中定义的类在构件中表示(在构件的"肚子"画类)。

  可以用包含构件类元和节点类类元的图来表示编译依赖关系。该关系用带箭头的虚线表示,箭头从用户构件指向它所依赖的服务构件。

  若从一个构件指向另一个构件上的接口可以采用虚线表示。

  图例的具体示例参见下一章。

1.5. 9实施图(Deployment diagram)

  实施图就是部署图,表示构件的实例该使用的,这个在构件图中已经提及。

实施图的语义:

  实施图表示运行时过程节点、构件实例及其对象的配置的视图。构件表示代码单元在运行时的表现。运行时不存在的构件不出现在实施图中,而是在构件图表示。

  实施图含有用通信链相连的节点实例。节点实例包括运行时的实例,如构件实例和对象构件实例和对象还可以包含对象。模型可以表示实例及其接口之间的依赖关系,还可以表现节点或者其他容器之间实体移动。

实施图表示法:

  实施图是节点符号与表示通讯关联的路径构成的网状图,节点符号可以包含构件实例。说明构件存在或运行于该节点上。构件符号可以包含对象,说明对象是构件的一部分。构件之间用虚线箭头相连,说明一个构件使用了另一个构件的服务。必要时可以用构造型说明依赖关系。

  实施图类似于对象图,通常用于表示系统中的各个节点的实例。很少有实施图来定义节点的种类和节点之间的关系。

  相关解决方案