1、建立对象模型是面向对象的开发方法的基本任务,是软件系统开发的基础,也是一个最需要倾注精力和时间的技术活动。 对象类与对象的图形表示法是面向对象分析方法的核心技术之一,它能表达面向对象模型的主要概念。 UML的对象类图(Class Diagram)与对象图(Object Diagram)具有强大的表达能力,能够有效地对现实世界的业务领域和计算机系统建立可视化的对象模型。 UML对象类图与对象图表达的是对象模型的静态结构方面。 UML的对象类图与对象图中的一部分图形元素是基本的,如类、对象、关联等,对于任何面向对象模型都是必不可少的;另一部分高级概念及其图形表达方法则不一定都会用到。,第5章 对象
2、类图与对象图,Home,第5章 对象类图与对象图,5.1 对象类图,Home,5.2 对象类的关联,5.3 聚合与组合,5.8 对象类的高级概念,5.4 泛化,5.9 对象类图的应用,5.5 依赖,5.6 对象图,5.7 接口与端口,对象类(Class)简称类,是面向对象模型的最基本的模型元素。对象类图表达一组对象类和它们的联系。 在对象类图中,一方面描述各个对象类本身的组成,即类的属性、操作和对对象的约束;另一方面描述系统中对象类之间的各种静态的联系。 对象类图描述的是系统的静态结构。 对象类的结构性联系:关联、聚合、组合、泛化/特化。 对象类的行为性联系:消息联系,系统预定义或用户自定义的
3、语义联系 。 使用联系 :依赖。 对象类图标加上它们之间的联系就构成了对象类图。,5.1 对象类图,Home,例:对象类图示例,如图5.1所示,它表示一个 网上商店的对象模型(部分)。,5.1 对象类图,Home,图5.1 一个对象类图示例,5.1 对象类图,Home,5.1.1 对象类,5.1.2 属性,5.1.3 操作,对象类是对象的集合,这些对象具有共同的结构特征、行为特征、联系和语义。 对象类的图标(Icon)用实线矩形框表示,矩形框中含有若干分隔框,分别包含类的名字、属性、操作、约束以及其他成分等,如图5.2所示。 类名可以是简单名,也可以是路径名。 属性框中包含对象类的属性。属性是
4、类的命名的性质,它描述类性质的实例所能具有的值。 操作框中包含对象类的操作。操作实现类的服务功能,它可以被本类的对象请求执行,从而发生某种行为。 其他的框可以包含责任、联系、约束、业务规则、事件、例外情况等内容的说明。,Home,5.1.1 对象类,图5.2 对象类的图形表示,类的属性(Attribute)是类的命名的性质,属性在类图标的属性分隔框中用文字串说明,如图5.3所示。 属性有在本对象类中唯一的属性名或标识符。 冒号“:”后跟属性值的数据类型。 属性名后跟的方括号中的内容是可选项目。 多重性(Multiplicity)用多值表达式表示,其值是该对象类的每个实例的属性值的个数。 多值表
5、达式的格式为:integer,integer, 或低界高界,Home,5.1.2 属性,图5.3 对象类的属性框,属性可视性 属性名 多重性:类型 = 初始值,可视性(Visibility)用以下可视性标记表示:+ (公共),# (保护), (私用) 可视性也可以用以下关键字表示:public(公共)、protected(保护)、private(私用)。 若可视性标记为“+”或“public”,则为公共属性,可以被外部对象访问。若可视性标记为“#”或“protected”,则为保护属性,可以被本类或子类的对象访问。若可视性标记为“”或“private”,则为私用属性,不可以被外部对象访问,只能
6、为本类的对象使用。可视性可以缺省,表示该属性不可视。 属主范围(Owner scope)有两种情况:实例和分类符。 若属性的属主范围是实例,则该对象类的每一个实例对象都有一个自己的该属性的值 若属性的属主范围是分类符,则对于该对象类本属性只有一个值,该对象类的每一个实例对象都持有此唯一的属性值。,Home,5.1.2 属性,操作(Operation)是对象类的行为特征或动态特征。 一个类可以有多个操作,也可以没有一个操作。没有一个操作的类常用于表达接口或数据表。 操作用文字串说明,如图5.4所示。 操作有在本对象类中唯一的操作名或标识符。 参数列表是可选项目,即一个操作可以有参数,也可以没有参
7、数。 参数列表由逗号分隔的操作的形式参数组成,其格式为:参数列表 参数名 : 类型 = 缺省值, 返回列表由逗号分隔的操作的返回值类型表达式组成,其格式为: 返回类型 或返回名字 = 类型,,Home,5.1.3 操作,图5.4 对象类的操作框,操作可视性 操作名 (参数列表):返回列表 (性质),操作的可视性的表示方法和含义与属性中相同。 操作也有属主范围的区分,它的含义和表示与属性的属主范围相同。 对象的构造操作(构造函数)必须带有下划线,表示它的属主范围是分类符。构造操作也可以用构造型标示。 操作定义的最后花括号中的性质,是一个文字串,说明该操作的一些有关信息。性质是一个可选项。 注意区
8、别术语“操作”和“方法(Method)”。操作是被对象调用的一个过程,而方法是过程体,这在有多态性的情况下二者是有所区别的。,Home,5.1.3 操作,例:对象类“Circle”的图形表示,如图5.5所示。,Home,5.1.3 操作,图5.5 对象类示例,5.2 对象类的关联,Home,5.2.1 对象的关联,5.2.2 自返关联、二元关联与N元关联,5.2.3 关联的约束,关联(Association)代表对象类的实例(对象)之间的一组链接(Link)。关联的一个实例,就是相互关联的两个对象间的一个链接。 关联的定义可以用一个类图表示,如图5.6所示。,Home,5.2.1 对象类的关联
9、,图5.6 对象类关联的图形表示,在对象类图上,关联用一条把对象类连接在一起的实线表示。一个关联至少有两个关联端,每个关联端连接到一个类,关联端是有序的。 关联线旁可以标出关联的名字 。线旁的小实心三角箭头表示关联的方向,从源对象类指向目标对象类。箭头起关联的导航作用。 关联可以是单向的或双向的,如果该关联是双向的,就不必标出方向箭头,如图5.7 所示。 在关联端可有多重性标记,规定该对象类中有多少个对象参与该关联。 在关联的对象类图标旁可以标出类的角色名(Role)。角色表示被关联的类参与关联的特定的行为。,Home,5.2.1 对象类的关联,图5.7 关联的角色与可视性示例,带有限定符的关
10、联称为限定关联(Qualified Association)。 如图5.8所示。 限定符的值确定如何划分和标识该关联的目标对象类的对象。 源对象类的一个带有限定符值的对象,唯一地选择目标对象类的一个划分。 目标对象类的每一个对象只能是某一个划分的成员。,Home,5.2.1 对象类的关联,图5.8 限定关联示例,关联本身也有特性,通过关联对象类(Association Class)可以进一步描述关联的属性、操作,以及其他信息。 例:图5.9 中的关联对象类“工作岗位” 。,Home,5.2.1 对象类的关联,图5.9 关联对象类示例,自返关联又称递归关联,是一个对象类与本身的关联,即一个类的两
11、个对象间的联系。 自返关联虽然只有一个被关联的类,但有两个关联端,每个关联端的角色不同。 例:在图5.10中,对象类“职务”存在自返关联“管理”。,Home,5.2.2 自返关联、二元关联和N元关联,图5.10 自返关联示例,二元关联是在两个对象类之间发生的关联。图5.7、图5.8和图5.9所表示的关联均为二元关联。 N元关联是在3个或多个对象类之间发生的关联,N 元关联的每一个实例是被关联的类的对象的多元组。 在对象类图上用一个菱形连接互相关联的类表示N 元关联,如图5.11所示。,Home,5.2.2 自返关联、二元关联和N元关联,图5.11 N元关联示例,关联可以加上一些约束,以规定关联
12、的含义。 约束的字符串括在花括号内。 UML定义了一些约束可以施加在目标关联端上,如“implicit”、“ordered”、“changeable”、“addonly ”、“xor”等。 例:具有xor约束的关联,如图5.12所示。约束xor 代表一组关联的互斥的情况。,Home,5.2.3 关联的约束,图5.12 对象类的xor关联示例,5.3 聚合与组合,Home,5.3.1 聚合,5.3.2 组合,聚合(Aggregation)表示事物的部分/整体关系的较弱的情况。聚合也称为“has-a”联系。 在关联线端加一个小空心菱形表示聚合,菱形连接代表整体事物的对象类,称之为聚合类,另一个关联
13、端连接代表部分事物的对象类。 例:圆和多边形是图形格式的两个聚合对象类,如图5.13所示。,Home,5.3.1 聚合,图5.13 对象类的聚合与组合示例,组合(Composition)表示事物的部分/整体关系的较强的情况。组合也称为“contains-a”联系。 在关联线端加一个小实心菱形表示组合,菱形连接代表整体事物的对象类,称之为组合类,另一个关联端连接代表部分事物的对象类。 例:圆由点组成,“圆”是组合对象类,“点”是成分对象类;多边形也是由点组成的,是一个组合类 ,如图5.13所示。 聚合与组合表示的部分/整体结构关系对系统建模具有重要的作用:简化了对象的定义;支持软件重用。,Hom
14、e,5.3.2 组合,组合的另一种表示方式:把成分对象类放在它的组合类的属性框中,在其右上角可以标出多重性标记。成分对象类的名字可以按格式写为:“角色名:类名”。 例:图5.14是图5.13的另一种画法。,Home,5.3.2 组合,图5.14 组合的另一种表示,5.4 泛化,Home,5.4.1 返化/特化,5.4.2 继承,5.4.3 重载与多态性,泛化/特化(Generalization / Specialization)是现实世界中一般性实体与特殊性实体之间的关系,一般性实体是特殊性实体的泛化,特殊性实体是一般性实体的特化。泛化也称为“a-kind-of”联系。 表示一般性实体的对象类
15、称超类(Supertype),表示特殊性实体的对象类称子类(Subtype)。子类继承超类的特性(属性、操作、关联等),同时可以有自己的特性。 泛化用一条带空心三角箭头的实箭线表示,箭线尾端连接子类,箭头指向超类,如图5.15、图5.16所示。,Home,5.4.1 泛化/特化,图5.15 泛化的表示,图5.16 对象类的泛化联系示例,泛化联系体现了分类与继承原则。一个子类继承超类的全部属性和方法,一个子类本身又可以有自己的子类,从而构成复杂的一般/特殊的结构。 单继承:一个子类可以只从它的一个父类继承属性和方法。如果在一般/特殊的结构中只有单继承,则为层次结构。 多继承:一个子类也可以从它的
16、多个父类继承属性和方法。如果在一般/特殊的结构中包含有多继承,则为网格结构(lattice structure)。 继承有传递性。一个子类不但可以从它的直接父类继承属性和方法,也可以通过其父类继承祖先类的属性和方法。,Home,5.4.2 继承,例:类的层次结构,如图5.17 所示。,Home,5.4.2 继承,图5.17 一般/特殊的层次结构示例,例:多继承属性的定义,如图5.18 所示。,Home,5.4.2 继承,图5.18 多继承属性示例,泛化涉及面向对象技术的多态性、重载、多继承等概念,这在建立泛化联系时需特别注意。 重载是实现多态性的方法,它修改继承来的属性和操作的内容,而不改变其
17、名字。 例:在图5.17中有表示重载的约束“overlapping”,说明子类型“风动交通工具”、“机动交通工具”、“陆上交通工具”、“水上交通工具”虽然继承了超类“交通工具”的属性和操作,但是对于某些具有多态性的属性和操作,各个子类型的对象都有自己不同的含义和实现,而属性和操作的名字则是一样的。 对于一个操作,可以用约束“polymorphic”规定为多态性操作,即该操作可以为子类重载。 对于一组泛化,可以用约束“overlapping”规定为是可重载的,即它的实例可以有多种类型。,Home,5.4.3 重载与多态性,依赖(Dependency)是指一个模型元素的变化必影响到另一个模型元素。
18、 对象类之间的依赖用一条虚箭线表示,位于虚箭线尾端的对象类(称为客户)依赖于箭头所指向的对象类(称为供应者)。 对于依赖可以加上构造型,规定依赖的含义和作用,常用的构造型有(使用)、(实例)、(调用)、(友元)等。 依赖的一些详细的说明可以用注释图形来描述。 例:一个教学管理系统中的对象类之间的依赖联系如图5.19所示。,Home,5.5 依赖,图5.19 对象类依赖示例,对象图(Object Diagram)表示一组对象和它们之间的联系。 对象图是一个系统的详细状态在某一时刻的快照。对象图实质上是对象类图的实例,或者是交互图的静态部分的实例,对象图有时也称为实例图(Instance Diag
19、ram)。 对象图的模型元素有对象和链接(Link)。对象图的表示方法与对象类图大体相同。 在建立系统模型时,一般是用对象类图可视化系统的静态方面特征,用交互图可视化系统的动态方面特征。对象图则冻结了系统的某一瞬间,表达系统的对象在该时刻的具体状态(属性值和操作)。 对象图的使用相当有限,它主要用于表达数据结构的示例,以及了解系统在某个特定时刻的具体状况。,Home,5.6 对象图,5.6 对象图,Home,5.6.1 对象,5.6.2 对象图,对象(Object)是对象类的实例(Instance),用于模型化特定的实体。 对象是唯一的,可以标识的。每个对象都是不同的,即使它具有相同的属性。
20、对象的图标与对象类一样是用实线矩形框表示的,矩形框中含有若干分隔框。 对象名分隔框中包含一个对象的名字,对象名的格式为:对象名:类列表 状态列表 一个对象可以有多个型(角色),它们可以动态地改变。但是,一个对象只属于一个对象类,它是不能改变的。 对象名分隔框中的状态列表,表示该对象的并发状态。 对象的属性分隔框含有该对象的属性值。 对象图标中可以有其他的分隔框,如同在其对象类中定义的那样,但是可以不含有操作框。,Home,5.6.1 对象,对象图是对象类图的一个实例。对象图表示了在某一时刻系统对象的状态、对象之间的联系的状态以及对象行为的静态方面的状态。 对象图的表示方法与类图没有什么不同,但
21、它们所表达的内容、含义和侧重点是有所不同的。 例:图5.20(b)是对象类图5.20(a)的一个实例对象图。在图5.20(b)中的对象是图5.20(a)中相应的类的一个实例。 对象之间一律用实线相连,表示当前的链接。 在图中没有显示对象所能进行的操作,但是每一个对象都可以进行其所属的类定义的操作。,Home,5.6.2 对象图,Home,5.6.2 对象图,图5.20(a) 对象类图示例,图5.20(b) 对象图示例,接口(Interface)是一组外部可访问的操作,用于为对象类或组件提供服务。 接口可以看作为一种特殊的抽象类,它不含属性,它的操作也没有方法(method),即没有操作的实现。
22、 接口代表系统中的接缝,接口两端的对象或组件可以独立变更,只要它们遵守和实现接口的规定,通过接口相联系即可。 接口可以用一个类图标表示,如图5.21所示。,Home,5.7 接口与端口,图5.21 抽象类表示的接口,接口也可以用棒糖式图标或托座式图标表示,前者是一个小圆球,并加虚箭头表示依赖关系;后者是一个小圆球加一个弧形托座,图标旁标有接口的名字,如图5.22所示。 接口可以分为两种:供给接口和需要接口。 供给接口表示一个系统元素(类、组件等)能够向外界提供的功能行为,需要接口表示本系统元素所需要的外界的服务。 在图形上,供给接口用一个小圆球表示,需要接口用一个弧形凹托座表示,分别用一条直线
23、段连接到某系统元素(类、组件等)的图形边框上,并在直线段旁给出接口的名称。,Home,5.7 接口与端口,图5.22 接口的棒糖式表示与托座式表示,接口可以通过一个实现联系(Realization)获得其他对象类的支持,这些对象类提供在接口中定义的全部操作。 实现联系是一种泛化联系,用带空心三角箭头的虚箭线表示(称为虚泛化符)。对于棒糖式接口的实现联系则用一条实线表示。 对象类可以通过依赖联系(虚箭线)使用接口,此时可以标出构造型“”,也可不标。 可以用接口定义角色,把一个对象类和它的实例对象静态地绑定,如图5.23所示。,Home,5.7 接口与端口,图5.23 用接口定义角色,端口(Por
24、t)是分类符(对象类、组件等)的一种特征(Property),是一个分类符与其外部环境的交互点,它将分类符的内部与它的外部环境隔离,实现了双向封装。 端口必须结合有接口。一个分类符(类、组件等)通过端口使用接口或实现接口,通过与端口相结合的供给接口和/或需要接口与外部环境联系。 一个分类符可以有多个端口,一个端口可以有一个和多个供给接口和需要接口。 端口的图标是一个小正方形,该小正方形放置在分类符图标的边框上,如图5.24所示。,Home,5.7 接口与端口,图5.24 端口示例,订单处理,OnLine Services,OrderEntry, Tracking,Payment,5.8 对象类
25、的高级概念,Home,5.8.1 抽象类,5.8.2 参数对象类,5.8.4 导出属性与导出关联,5.8.3 型与实现对象类,抽象类(Abstract Class)是不能直接产生实例的对象类,抽象类的实例对象只能通过一个非抽象类的子类产生。 抽象类的作用仅仅是为了其他的非抽象对象类继承和重用它所说明的属性、操作及其他性质。 UML的抽象类与程序设计语言中的纯虚函数的含义一致。 抽象类一般是在继承结构中作为一个公共接口。 UML中的抽象类与接口是不同的模型元素。一个抽象类可以含有属性,接口不含有属性,而且接口既可以由对象类实现(逻辑抽象元素),也可以由组件实现(物理抽象元素)。 抽象类的表示:在
26、类图标中的类名下标有约束abstract,或把类名写成斜体字 。,Home,5.8.1 抽象类,例:抽象类的应用,如图5.25所示。,Home,5.8.1 抽象类,图5.25 抽象类示例,参数对象类(Parameterized Class)又称对象类模板(Template),是带有形式参数的类描述符,它定义一个类的家族。 在参数类中属性和操作都是以形式参数来定义的(参数通常代表属性的类型),参数类是不能直接使用的类,只有通过把参数类的形式参数绑定到实在参数时才得到一个类。 参数类用类图标表示,其右上角有一个小的虚线框,其中列出形式参数表。 参数类的名称、属性、操作等的定义与常规类相同,但必须包
27、含形式参数。 参数类不能是其他常规的类的超类,但可以是其他常规的类的子类 。,Home,5.8.2 参数对象类,例:在图5.26中,“设置”是一个参数类,它有形式参数“p”和“q”,均为整型数;它的两个操作“insert(p, q)”和“remove(p, q)”以形式参数“p”和“q”为变量。,Home,5.8.2 参数对象类,图5.25 参数对象类示例,可以用构造型或把类说明为型(Type)或实现类(Implementation Class)。 型是对象类的一个构造型,用于说明对象的域和作用于对象的操作,但不定义这些对象的物理实现。 型可以不包含任何方法,但可能提供其操作行为的说明。 型有
28、时也有属性和关联,但只限于说明其操作行为的少数,并不包含静态数据的实际实现。 型的概念与接口很相近,只不过型可以包含属性,而接口不可以包含属性。 接口可以看成一个型。,Home,5.8.3 型与实现对象类,实现类定义对象的物理数据结构和方法。 如果一个实现类为一个型所规定的行为提供了全部的操作,则说明该实现类实现了该型。 一个实现类可以实现多个不同的型,而且实现类中的物理属性和关联,不一定与其实现的型中的属性和关联一样。实现类甚至可以通过其物理属性和关联为型提供方法。 在类图中,实现类与型的图标之间用一条虚泛化线连接,它从实现类指向型。 虚泛化线表示该实现类为该型所规定的行为提供了全部的操作,
29、但并不意味该实现类与型之间存在继承结构(属性和关联)。,Home,5.8.3 型与实现对象类,例:在图5.27中,类“Object”和“Set”代表型,类“HashTable”和“HashTableSet”代表实现类。型“Set”由实现类“HashTableSet”实现。,Home,5.8.3 型与实现对象类,图5.27 型与实现对象类示例,导出属性和导出关联是可以从其他属性和关联计算推演得到的属性和关联。 在对象类图中导出属性和导出关联的名字前需加一个斜杠“/”。 例:在图5.28中,属性“/年龄”是导出属性,关联“/为公司工作”是导出关联。,Home,5.8.4 导出属性与导出关联,图5.
30、28 导出属性与导出关联示例,在面向对象的系统分析与设计方法中,对问题领域和系统建立对象模型是工作的中心环节。 对象类图表达系统的静态结构方面的特征,是建立对象模型的主要工具之一。 UML的对象类图具有充分的表达能力和丰富的语义,能够用于对常见的各类系统建立对象模型,如信息管理系统、数据库系统、Web应用系统、实时控制系统等。 UML的对象类图的概念和表示法十分丰富。对于开发一个实际的具体的系统,建立对象类图时并不需要用到全部的概念和表示法。应当从最基本的内容开始,如类、属性、联系(关联、泛化、聚合、组合、依赖)、接口、约束等 。,Home,5.9 对象类图的应用,5.9 对象类图的应用,Ho
31、me,5.9.1 对象类的建立,5.9.2 模型景象与粒度控制,5.9.4 边界类的应用,5.9.3 系统的三层结构与对象类的类型,5.9.5 例外情况建模,建立对象类图的过程就是对领域问题及其解决方案的一个分析和设计的过程,关键是要准确地找出现实世界的对象类和类之间的联系,把它们映射成系统中的对象类和类之间的联系,并加以设计和调整,最后用图形表示出来。 建立对象类图的一般步骤: (1)研究分析问题领域,确定系统的需求。 (2)发现对象与对象类,明确它们的含义和责任,确定属性和操作。 (3)发现类之间的静态联系。着重分析找出对象类之间的一般与特殊关系、部分与整体关系,研究类的继承性和多态性。类
32、之间的静态联系用关联、泛化、聚合、组合、依赖等表达。 (4)设计类与联系。 (5)绘制对象类图并编制相应的说明。 上述的做法是直接从领域分析抽取对象和对象类开始的,这是常规的面向对象的系统分析与设计的做法。,Home,5.9.1 对象类图的建立, RUP主张采用Use Case驱动的系统分析与设计方法。从业务领域的分析中先抽取活动者和Use Case,先建立业务模型,然后据以逐步建立系统模型 。 对于一个典型的4层系统体系结构(如图2.8所示),业务模型可以作为输入,映射到系统的顶上两层。 具体的参考做法如下: (1)对于每一个为系统所支持的业务Use Case,在分析模型中可以对应一个子系统
33、,该子系统位于系统的应用层。 (2)对于每一个为系统所支持的活动者(人),标识出Use Case。 (3)对于每一个为系统所支持的业务实体,在分析模型中给出代表实体的对象类。 (4)对于业务实体的聚集,如在一个Use Case中的一组业务实体,或关系密切的一组业务实体,在系统的专用业务层建立一个相应的子系统。 一张对象类图不应过于庞大和复杂。一般应按照对象类图的抽象层次分层绘制,同一个层次的对象类图按一个Use Case或一个子系统绘制。,Home,5.9.1 对象类图的建立,建立对象模型和绘制对象类图可以从3种不同的景象(Perspectives)出发:概念景象、说明景象、实现景象。 按照概
34、念景象(Conceptual Perspectives)绘制的对象类图表现所研究的问题领域的概念,这些概念由对象类实现。在概念景象的模型中不考虑软件实现方面的问题。在系统的分析阶段从概念景象出发建立系统的分析模型。 按照说明景象(Specification Perspectives)绘制的对象类图表现软件,尤其着重表现的是软件的结构和接口,而不是软件的实现在系统的设计阶段从说明景象出发建立系统的设计模型。 按照实现景象(Implementation Perspectives)绘制的对象类图体现在构建阶段所产生的实现模型,它具体定义对象类及其实现。 关于景象的叙述不是UML的规定,但是在建立对象
35、模型和绘制对象类图时,注意区别景象是大有好处的,尤其是应注意区别说明景象和实现景象。,Home,5.9.2 模型景象与粒度控制,关于景象的考虑实际上涉及到系统建模的抽象层次与粒度控制问题。 在建立对象模型时,可以采用由顶向下或由底向上的方式进行。 顶层的对象类图是概念性的,下层的对象类图是上层对象类图的精细化,最低层的对象类图是实现性的,一般可以直接映射到程序设计语言,它们的对象类图粒度是不同的。 例:对于项目与资源管理系统PRMS高层的项目管理对象类图如图5.29所示,它对应第4章的图4.2中的Use Case“项目管理”;高层的资源管理对象类图如图5.30所示,对应第4章的图4.2中的Us
36、e Case“资源管理”;资源管理对象类图的一个精细化图如图5.31所示,是一种属于说明景象的对象类图;PRMS系统的一个对象图如图5.32所示。,Home,5.9.2 模型景象与粒度控制, PRMS系统的高层的项目管理对象类图与资源管理对象类图示例。,Home,5.9.2 模型景象与粒度控制,图5.29 PRMS系统的高层项目管理对象类图,图5.30 PRMS系统的高层资源管理对象类图, PRMS系统的一个属于说明景象层的精细化的对象类图示例。,Home,5.9.2 模型景象与粒度控制,图5.31 PRMS系统的详细资源管理对象类图, PRMS系统的一个对象图示例。,Home,5.9.2 模
37、型景象与粒度控制,图5.32 PRMS系统的一个对象图,当前的应用系统常按照三层结构(或多层)组织,即把系统划分为表现层、中间层和数据层。 表现层是系统的外部表现,是系统与用户和其它系统打交道的界面,包括用户图形界面(GUI)、数据输入/输出客户端程序、外部系统接口等。 中间层实现系统的核心业务逻辑,并且控制和协调系统中各对象的执行。中间层常包括一些组件,以及居中通信协调的对象。 数据层包括处理数据的组件,负责处理数据的存储、更新等。 应用系统的三层(或多层)结构,在基于Internet的Web应用系统开发方面得到了广泛的应用。,Home,5.9.3 系统的三层结构 与对象类的类型,在UML中
38、相应于三层结构,对象类可以分为三种类型:边界类、控制类和实体类。 (1)边界类边界类代表系统与外部活动者(用户)或外部系统的接口,它是系统与外界交换信息的媒介,并且把系统与其环境相隔离。大多数的边界类为图形用户界面类(GUI)。(2)控制类控制类在系统中起“控制”作用,又称为控制器。控制类代表应用系统领域活动的协调程序,包含了大部分应用程序逻辑,可以协调对象之间的交互作用,特别是在用户和存储的数据之间起着桥梁作用。 (3)实体类实体类是对系统中必须存储的信息及其相关的行为的建模,这些信息具有持久性(Persistent)。 实体类通常是独立于其环境的。,Home,5.9.3 系统的三层结构 与
39、对象类的类型,上述三种对象类以及活动者之间的交互关系应当遵循以下规则: 活动者只与边界对象交互。 边界对象只与活动者、控制对象交互。 实体对象只与控制对象交互。 控制对象可以与边界对象、实体对象以及其它控制对象交互,但不能直接与活动者交互。 三种对象类的图形表示如图5.33所示。,Home,5.9.3 系统的三层结构 与对象类的类型,三种对象类的图形表示的示例,Home,5.9.3 系统的三层结构 与对象类的类型,图5.33 边界类、控制类和实体类的图标示例,(a)边界类,(b)控制类,(c)实体类,SetupProjectUI,Project_Process,Project,图形用户界面(G
40、UI)提供可视化的图形界面,实现人机交互。 图形用户界面通常由窗口、表单、菜单、工具栏等元素构成,它们分别用相应的边界类表示。 窗口布局图表达窗口的结构。窗口布局的相应边界类如图5.35所示。 窗口导航图的作用是表示用户怎样按照主流的应用路径从一个窗口向另一个窗口切换。 对于一个Web应用系统来说,窗口导航图实际上是一张Web页面转换流图,如图5.36所示。,Home,5.9.4 边界类的应用,图5.35 窗口的边界类表示,窗口导航图示例,Home,5.9.4 边界类的应用,图5.36 窗口导航图示例,在建立系统模型时,不但要处理领域业务和系统的正常的工作流程,而且还要处理各种例外的情况(Ex
41、ception)。 建立对象模型时,可以把对例外情况的处理用一个专门的类信号来表达。当在某个操作的执行中出现例外情况的条件成立时,就发送(send)一个处理该例外情况的信号。 对于系统中的例外情况的建模可按如下步骤进行。 (1)对于每一个对象类和接口,找出可能发生的例外情况和出现例外情况的条件。 (2)把每一个例外情况用一个信号类描述,类名前可冠有构造型“”。 (3)建立例外情况的层次结构,把一般性的例外情况置于高层,把特殊性的例外情况置于低层。 (4)对于每一个操作确定可能发生的例外情况。在操作和它的例外情况的信号图标之间用一条虚箭线连接,其上标出构造型,表示从操作到它的例外情况的“send
42、”依赖。,Home,5.9.5 例外情况建模,在建立分析模型时可以只在一个类图标中增加一个描述例外情况的分隔框,其中包含对所有例外情况的文字说明。 例:宾馆管理系统中的一个类“预定客房”,它有两个附加的例外情况分隔框“责任”和“例外”,如图5.37所示。,Home,5.9.5 例外情况建模,图5.37 例外情况分隔框示例,例:一个容器类的例外情况的层次结构,以及容器的设置操作与例外情况的联系,如图5.38所示。3种例外情况:“Duplicate”(重复)、“Overflow”(溢出)和“Underflow”(低于下限)。它们用信号类表示,信号名前冠有构造型。,Home,5.9.5 例外情况建模,图5.38 例外情况建模示例,