《系统分析-类与类图.ppt》由会员分享,可在线阅读,更多相关《系统分析-类与类图.ppt(98页珍藏版)》请在三一办公上搜索。
1、2023/11/16,1,第4讲 类与类图,2023/11/16,2,内容提要,类的定义类的表示:三部分类的关系:依赖、泛化、关联特殊类:接口,抽象类,参数化类建模指南对象图:“快照”,1.类的概念,2023/11/16,4,1.1 类的定义/1,用例图定义了系统应该具备的功能,它描述了系统应该为用户解决的问题。交互图描述了此问题的解决方案,它定义了为解决此问题软件系统中必须设置的软件对象及其职责,这些对象及其职责或语义,是解决方案的概念或系统词汇(vocabulary)。类描述了一组对象的公共的结构和行为,类为对象规定了它们的结构和所能提供的服务(操作),相当于为对象图中规定的系统词汇提供了
2、严格的定义,包括系统词汇的:静态结构动态行为类构成了系统建造的基础,2023/11/16,5,1.1 类的定义/2,类的静态结构,在UML里用属性(attribute)描述类的动态行为,由操作(operation)描述交互是用例图提出的问题的解决方案,交互由对象和它们之间的消息的传递构成在交互中,对象为与它相连接的其它对象提供服务,对象本身会有状态的保持和转换在一个系统中,具有相同的结构和提供相同的服务的对象可能不止一个,它们可以参与在不同的交互中,提供类似的服务类是解决用例视图定义的问题的解决方案中必须具备的对象的抽象,2023/11/16,6,1.1 类的定义/3,一个类描述了一组对象的公
3、共的结构和行为类是真实世界的事物的抽象当这些事物存在于真实世界中时,它们是类的实例,并被称为对象同一个类的各对象具有相同的属性,提供相同的操作,具有相同的语义,2023/11/16,7,1.2 类的表示,类的图形表示:它是分为三个分隔区(compartment)的长方形。其中:顶端的分隔区为类的名字,下面两个分隔区为可省略的,分别可以列出类的属性和操作,2023/11/16,8,2023/11/16,9,1.3 类的命名,类的名字是每个类所必有的构成,用于和其它类相区分类的名字可分为简单名字:简单名字是一个不包含冒号的字串复杂名字(路径名字):路径名是简单名字前面加上一个包含此类的所在的模型包
4、的名字,这两个名字之间用两冒号隔开,Temperature Sensor,Wall,Business Rules:FraudAgent,java:awt:Rectsngle,简单名字,路径名字,2.属性,2023/11/16,11,2.1 属性的概念/1,类不是孤立存在的,它的对象将参与一个或多个交互类捕获了系统实现方案中的概念或词汇,使得类代表某一类特定事物,具备特定的语义类的语义是对此对象代表的事物的性质的描绘,通过对事物性质的描绘,可以记录对象在交互过程中状态的变换,并可进一步决定对象在此状态下的行为例如:在基于窗口操作的操作系统中,处理窗口的对象描述窗口的尺寸、位置,类型等性质,窗口的
5、性质的不同取值又可以决定系统对鼠标操作的不同响应方式。,2023/11/16,12,2.1 属性的概念/2,类的属性,它是类的一个组成部分,描述了类在软件系统中代表的事物所具备的特征属性的定义在UML里,属性是类的一个具名的构成(named property),它描述了此构成在类的实例中能具备的取值范围根据定义:类的属性首先是类的一个组成部分;其次,类每个属性都必须有一个名字,以区别于类的其它属性。为了定义属性的取值范围,必须为属性指定类型。例如:布尔类型的属性可以取两个值:TRUE和FALSE;字节型的属性只能取256个值当一个类的属性被完备地定义后,它的任何一个对象的状态都被这些属性的特定
6、取值所决定,2023/11/16,13,2.2 属性的表示/1,属性的图形表示:类的属性被列在其中的第二个分隔区中属性分隔区是可省略的当属性分隔区未被省略时:属性的名字必须出现属性的名字后面是它的类型类型和名字之间用冒号(:)分隔,2023/11/16,14,2.3 属性的初始值,属性的初始值:当类的一个对象被创建,它的各个属性就开始有特定的状态。有时,对象的初始状态对此对象参与的交互是有意义的。这时,有必要在对象的类中定义其对象的属性的初始值初始值的图形表示类的属性的初始值在属性的类型的后面指定初始值和类型之间用等号(=)分隔属性的初始值是可选的当未为属性指定初始值时,属性的初值是不确定的,
7、2023/11/16,15,2.4 可省略的描述,除了属性的名字之外,属性的其它描述都是可省略的,包括:类型、初值、可见性,3.操作,2023/11/16,17,3.1 操作的概念/1,对象在交互中,存在着消息的交换消息是一个对象向另一个对象发送请求其提供服务的指令一个对象接收的各个不同的消息,构成了此对象的类能提供的服务的集合。类的操作就是对这些服务的具体规定,包括接收服务请求的格式以及类对合法请求所能提供的有效的服务的承诺如果把操作映射到C+语言,则操作就是C+的类的成员函数,2023/11/16,18,3.1 操作的概念/2,操作的定义:操作是一个类所能提供的服务的实现,此服务能被请求,
8、以改变提供服务的类的对象的状态或为服务的请求者返回一个值一个类的操作被定义后,它的任何一个对象都能提供此操作所定义的服务操作必须有一个名字可以有参数表可以有返回值,2023/11/16,19,3.2 操作的表示,按照操作的定义,类的操作所提供的服务可以分为两类一类是操作的结果引起了对象状态的改变,状态的改变也包括相应的动态行为的发生另一类是为服务的请求者提供返回值例如:执行特定的计算,并把结果返回给请求者操作的图形表示:操作被列在属性最下部的分隔区里操作分隔区是可隐藏的如果操作分隔区未被隐藏,则操作的名字必须列出,名字后面必须有一对括弧以表示此名字是操作的名字,2023/11/16,20,20
9、23/11/16,21,3.3 操作署名/1,操作署名(operation signature)在交互中,操作是通过消息启动的,为了使操作对应的服务被有效地提供,操作的请求者必须提供合法的启动消息,包括:合法的操作参数对操作的返回值(如果有的话)的正确解释消息的合法性在UML中,通过操作署名(operation signature)规定定义:操作署名是操作的参数的名字、参数类型、参数缺省值以及操作的返回值的类型的集合,2023/11/16,22,3.3 操作署名/2,操作署名的图形表示:在类的图符上,操作署名是可隐藏的如果不隐藏,则参数表出现在操作名后面的括弧内参数表内的各参数之间用逗号分隔,
10、参数包括名字、类型和缺省值在每个参数名字后面跟着的是参数的类型,它们之间用冒号分隔,类型后面是可选的参数缺省值,它和类型之间用等号(=)分隔如果一个参数被指定了缺省值,就意味着此操作被调用时,可以不指定此参数的值,这时操作认为调用者使用缺省值作为此参数的值。操作的返回值类型出现在此括弧之后,返回类型和括弧之间之间用冒号分隔。,4.类的表示方法,2023/11/16,24,4.1 类的说明,S,t,e,r,e,o,T,y,p,e,W,I,N,D,O,W,作,者,=,王,刚,状,态,=,测,试,可,访,问,性,名,称,:,类,型,=,缺,省,值,(,+,#,-,),可,访,问,性,函,数,名,(,
11、变,量,表,),:,返,回,类,型,(,+,#,-,),变,量,表,变,量,名,:,类,型,=,缺,省,值,2023/11/16,25,2023/11/16,26,4.2 属性和操作的表达/1,类的构成有可能很复杂,将产生很长的属性列表和操作列表,没有必要在模型图上把所有的属性和操作都绘制在模型图上。这是因为:一方面,这样会使UML图过于繁杂另一方面,出于表达特定问题的需要,不需要将与问题无关属性和操作与重要的属性和操作同时绘制在模型图上这时,可以应用UML的隐藏原则,在UML模型图上把对表达问题不重要的属性或操作隐藏因此,如果发现模型图上某个类的属性分隔区或操作缺失或分隔区内没有内容,不表示
12、此类没有属性或操作,有可能它们是被省略了。,2023/11/16,27,4.2 属性和操作的表达/2,类的隐藏表示,可以采取4种方式:隐藏分隔区有选择地隐藏属性/操作隐藏操作署名隐藏属性/操作的变体如果一个类的所有操作和属性可以根据它们的语义分为若干组,可以在操作或属性前面为它们指定变体标记,使得同一分组的操作或属性带有同样的变体标记,2023/11/16,28,5.类的建模指南,2023/11/16,30,5.1 类的设计的特点,类的设计是软件系统建造的第一步,它决定着软件系统结构合理性软件部件的可维护性可重用性可移植性软件系统的类的设置、职责的明确、类的属性和操作的确定,其过程是:用例驱动
13、的面向对象的,2023/11/16,31,5.2 类的职责/1,为了给软件系统设置有效的实现类,应当从系统的用例图出发,得出系统为实现用例规定的功能,内部应实现的交互通过合理地设置参与交互的对象的职责,确定这些对象的实现类的职责根据类的职责,以及其对象在交互中起的作用,为类指定属性和操作。,2023/11/16,32,5.2 类的职责/2,类由交互图导出在交互图中,不同的类互相合作,以完成用例图规定的功能或任务在交互中,不同的对象担负着不同的职责,为其它对象提供所需的服务对象的职责对应到其实现类,就成为了类的职责(responsibility)在UML里,职责是一个类所承担的义务或协议一个良好
14、定义的类应该有清晰的职责一个类只应承担一种职责类的职责划分的好坏,取决于对象参与交互时,此对象在交互中担任的职责的划分的合理性,2023/11/16,33,5.2 类的职责/3,类的职责是通过用例驱动,以面向对象的方式产生的 通过对用例的分析,产生了系统的交互。在交互中,通过以面向对象的方式分析交互中完成某任务所需的步骤及完成步骤的主体,以产生合理的对象职责的划分 例如:在位图浏览的交互中,专门设置“外壳”对象负责和操作系统打交道,又有专门的对象负责系统内部功能的实现(“内核”对象)在“内核”对象中,有职责明确的对象分别负责鼠标工具状态机的实现,位图显示状态的维护的实现等等有了合理的对象职责的
15、划分,就自然地导出了合理的类的职责的划分,2023/11/16,34,5.2 类的职责/4,指定类的职责,是对类进行建模的第一步类所应具备的属性和操作,将根据类的职责给出例如:“位图浏览”鼠标工具的对象的交互,“位图浏览”对象的职责是翻译鼠标消息,使其转换为对位图的浏览操作。该职责决定了实现位图浏览鼠标工具的类必须有的相应的操作接口,它接收传进来的三个鼠标消息,决定了这个类必须具备一个属性,作为状态变量以记录鼠标按键的状态处理鼠标移动消息时,如果鼠标按键处于按下状态,才能把鼠标移动消息“翻译”为位图的拖动操作,2023/11/16,35,5.2 类的职责/5,类的职责的描述:可以用非形式的普通
16、文本描述可以出现在操作分隔区下面的第四个分隔区内在某些工具里,类的职责不占一个单独的分隔区而是在一个专门的文档窗口(documentation)中出现考虑类的职责划分时,应注意类的职责的平衡分布,应注意既不要使一个类的职责过重、过多又不要使类的职责过于简单、平淡分析和考察类的职责的平衡分布,可以在交互图上进行,2023/11/16,36,5.3 指南/1,一个实用的软件系统,其结构是复杂的,类是其中基本的构成元素可以用模型包(package)将语义上紧密联系的类组织到一起在类的表达方面,应充分应用UML模型的隐藏机制,有重点地用类来表达系统的各个侧面,2023/11/16,37,5.3 指南/
17、2,软件系统只有和外部直接交互,才能够为其用户提供使用价值,因此在设计和建造一个软件系统时,免不了要对软件系统之外的非软件事物,如用户、外部设备等,进行分析和建模例如:建造一个信息管理系统,需要分析用户群的结构、分工、职责和业务流程,类和对象也是描述这类非软件事物的手段,可以用特定的类来代表一类特定的非软件事物,用交互图描述它们的业务流程,用属性和操作定义它们的职责,可以用UML的变体机制将非软件事物与软件事物相区分。,2023/11/16,38,5.3 指南/3,类描述了和软件系统在建造和实现过程中产生的相关概念或词汇对于大多数的软件系统而言,它们不可能直接在一个不含任何软件的纯硬件平台上建
18、造,总会存在一个软件的开发环境支持这个软件系统的建造,这包括:操作系统高级语言开发环境等这些系统本身已经存在了大量的预定义好的概念或词汇,亦即已经存在了大量预定义好的类或类型在这样的开发环境上设计软件系统的过程中,预定义类会被大量地引用例如:在应用MFC进行软件开发时,会有许多其类库中的类或类型被引用。在建模时,可以简单地把这些预定义类(类型),作为应用系统设计模型中的类来加以引用。在引用时,可以根据需要,利用UML的隐藏机制 不暴露或只暴露所需的属性或操作。,6.关系,2023/11/16,40,6.1 关系的定义/1,对象不是孤立存在的,它必定参与某一交互,参与一个交互的各对象之间必然要发
19、生语义的连接对象的特性,包括结构方面和行为方面的特性,在UML中,被类所捕获。对象的类之间,必然也存在语义上的连接。这种连接,在UML中,被抽象为类之间的关系在UML中,类之间的语义连接被定义为关系类之间的关系的建模,为其对象之间的交互提供了实现支持对象之间的交互,可以对应到类之间的关系,而这些关系,又可以被映射到大多数的程序设计语言,从而使得对象之间交互得到最终的实现,2023/11/16,41,6.1 关系的定义/2,在类之间的关系中,最常用的是依赖关系泛化关系关联关系它们在面向对象的建模中,起着十分重要的作用。,2023/11/16,42,6.2 关系的表示,关系的图形表示:UML中类之
20、间的关系被图形化地表示为连接类之间的路径。这些路径以不同的线型,区分不同的关系,关联,WIndow,open(),close(),move(),diaplay(),handleEvent(),consoleWindow,Event,DialogBox,control,依赖,泛化,2023/11/16,43,6.3 依赖关系/1,在一个交互中,存在着对象之间消息的传递消息的传递大多数情况下是以函数调用的形式实现的,有时也会通过直接访问目标对象的成员变量的形式实现消息的传递,意味着源对象的某些功能或动态特性将依赖于目标对象的功能或动态特性在类图上强调类的对象之间的这种关系,可以在对象的对应类之间建
21、立依赖关系,2023/11/16,44,6.3 依赖关系/2,依赖关系的定义:两个类之间的依赖关系,表明其中的一个类(客户类)依赖于另一个类(供应类)所提供的某些服务图形表示:依赖关系被图形化地表示为一个带虚线的箭头箭头所指的类是供应类(被依赖的类)箭头的出发点是客户类,2023/11/16,45,FilmClip,Channel,依赖关系,客户类,服务类,2023/11/16,46,6.3 依赖关系/3,两个类之间存在着依赖关系,意味着客户类的语义依赖于服务类的语义。服务类的语义的变化,将会导致客户类的语义的变化如果两个类的对象之间存在着下面的情形,且两个类之间不存在结构方面的联系(例如:供
22、应类以成员变量的形式作为客户类的一部分),就可以建模成为具有依赖关系,这些情形是:客户类访问定义在供应类内部的值(常量或 变量)客户类的操作启动了定义在供应类内的操作客户类的返回类或参数是供应类的实例序列图中的两个对象,如果存在着消息的发送。且它们之间又没有结构方面的连接,就可以在类图上用依赖关系对它们建模,2023/11/16,47,6.4 泛化关系/1,位图观察器的例子,鼠标工具通常,在这样的应用软件系统中,会存在多个鼠标工具。它们都从操作系统接收同样的鼠标消息,对这些鼠标消息的不同解释,使得各鼠标工具的功能得以区分在实现这些鼠标工具时,每一个鼠标工具用一个对象实现,由于它们所处理的鼠标消
23、息是相同的,因此,它们的实现类所具备的操作有许多是相同的,区别在于它们对操作的执行上各有不同。有的对象还有可能有些扩展的操作,以实现不同工具的功能在面向对象的程序设计语言中,这样的鼠标工具的一组实现对象的实现类可以共同定义为某个基类的导出类UML中,则用泛化关系为这种基类/导出类的关系建模,2023/11/16,48,6.4 泛化关系/2,泛化关系的定义:在UML中,泛化关系表示子类共享定义在一个或多个超类(parent)里的结构或行为泛化关系表示类之间的一般和特殊的关系在一组类中,如果它们都有一组相同的属性和操作,那么,可以把这组属性和操作定义在一个超类中,并把其它类与超类的关系定义为泛化关
24、系。如果两个类被定义为具有泛化关系,就意味着在任何超类的对象出现的地方,都可以用子类来代替。,2023/11/16,49,6.4 泛化关系/3,在UML中,泛化关系被图形化地表示为一个带有空心三角形的箭头的线段箭头所指的方向是超类箭头起始端是子类在泛化关系中一个类可以有零个、一个或多个超类如果一个类只有一个超类,那么就称为是单继承如果一个类有多个超类,就称为是多重继承如果一个类没有超类但有一个或多个子类,则这个类成为基类(base class)如果一个类没有任何子类,则成为叶子类(leaf class),2023/11/16,50,6.4 泛化关系/4,继承的多态性在子类中,如果存在一个操作和
25、其超类中的操作具有相同的署名(signature),则子类中的此操作的动态行为将替代超类的动态行为。,2023/11/16,51,基类,Shape,origin,move(),resize(),display(),Rectangle,corner:Point,Circle,radius:Float,Polygon,points:List,display(),Square,泛化关系,叶子类,2023/11/16,52,6.5 关联关系/1,依赖关系和泛化关系反映的是类之间在动态行为方面的联系在软件系统中还存在着大量的结构方面的联系例如:建造管理信息系统时,需要对其所处的管理机构的运行结构进行建模
26、,以建立各管理实体之间的对应关系(部门和雇员之间的关系、销售部门和商品之间的关系等),并在此基础上建立相应的数据库模式。在以前经常使用的工具有实体-关系模型等在UML里可以用关联关系描述,2023/11/16,53,6.5 关联关系/2,关联关系的定义:在UML里,关联关系表示两个类或类和接口之间的语义连接关联关系可以是双向的。它在所有的关系中间语义最弱从关联关系的定义可以看出:如果两个类之间存在着依赖关系或泛化关系,那么它们一定也隐含着具有关连关系但在些情况下,描述这种关联关系已经没有意义,所以一般不必再对这种关联关系进行描述,或者说,这时关联关系已经被依赖关系或泛化关系所取代这就是“语义最
27、弱”的含义所在,2023/11/16,54,6.5 关联关系/3,关联关系是一种结构关系如果两个类之间存在着关联关系,则它们的对象是互相连接的(对象之间存在着连接关系),即其中的一个对象可以访问另一个对象,它可以访问另一个对象的属性,或启动另一个对象的操作。,2023/11/16,55,6.5 关联关系/4,关联关系并不是仅仅一个抽象的概念它在实现为程序设计语言源代码时,会有对应的映射通常,当把两个有关联关系的类映射为特定的程序设计语言代码时,每一个类都会被定义为一个可以引用对方的类的对象的成员变量这个成员变量视对关联关系的修饰的不同,可能会采取不同的形式,如:它可以指向对方的类的指针也可能是
28、对方类的对象,2023/11/16,56,6.5 关联关系/5,在UML中,关联关系的图形化表示的基本形式是连接两个类的直线。,对象类,对象类,限定符,关联对象类,多重性,角色名,限定符,角色名,多重性,关联名,2023/11/16,57,6.5.1 关联关系:方向,关联方向关联可以是单向的,也可以是双向的,双向的不必标出箭头说明给出了一个订货,就可以指出办理该订货的顾客,但是给出一个顾客却不能标识相应的订货实现时,可以在“订货”类中设置一个指向“顾客”类的指针。,订货,顾客,*,1,2023/11/16,58,6.5.2 关联关系的修饰,由于关联关系的语义弱,所以可以对关联关系及其图形表示进
29、行修饰以表达更为特指的情形对于关联关系,存在着四种修饰,它们是:名字角色重复度(multiplicity)聚合,2023/11/16,59,6.5.3 关联关系的名字,对于关联关系,可以用名字对其进行标识,以和其它关联关系相区别名字可以是任何有意义的文字串。如果名字里的词汇带有指向性,用以特指所涉及的那个类,则可以在名字的靠近这个类的一侧放置一个指向三角形指向这个类,2023/11/16,60,Person,Company,Work for,4,名字,关联,名字的指向,2023/11/16,61,6.5.4 关联关系的角色/1,关联关系中的角色如果两个类之间存在着关联关系,则它们的对象可以互相
30、访问这意味着对其中任意一个对象而言,存在着另外一个类的对象能被它访问为了访问关联关系的某一端类的对象,必须为它定义一个标识,使得通过这标识,另一个类的对象能够访问被访问的对象,2023/11/16,62,6.5.4 关联关系的角色/2,角色的定义:在UML里,关联关系两端的类的对象在对方的类里的标识,称为角色(role)。角色在关联关系的图形化表示里由角色名(role name)表示。当关联关系里的类被映射到程序设计语言时角色名字就成为类的一个成员变量的名字,此成员变量的类型将是另一个类的对象,或指向另一个类的指针,2023/11/16,63,Person,Company,+employer,
31、+employee,角色名,关联关系,2023/11/16,64,6.5.4 关联关系的角色/3,角色的重复度当一个类的对象以关联关系的角色的形式出现在另一个类里时,此角色可以在此类中出现一次,也可以出现多次。角色的重复度指的就是角色的这种出现次数。角色重复度的定义:在UML里,角色重复度被定义为关联关系的实例的两端所连接的对象的数目。,2023/11/16,65,6.5.4 关联关系的角色/4,角色重复度的图形化表示:角色重复度被图示为一个表达式,它被放置在关联关系中靠近相应角色的一侧,此表达式确定了一个常数值或值的范围,例如:重复度1:代表对象作为角色必须出现且只出现1次。重复度0.1:表
32、示对象作为角色可以出现0次或1次。星号(*):代表任意多次,例如:重复度0.*表示对象作为角色可以出现0次任意多次;重复度1.*表示对象作为角色必须至少出现1次且可以出现多至任意多次。,2023/11/16,66,+employee,Person,Company,*,1.*,+employer,*,1.*,关联,重复度,2023/11/16,67,6.5.4 关联关系的角色/5,在一个带有多重性的关联关系中,相关联的某一方可能同时出现过个对象。如目录与文件。这样的描述比较粗糙。没有具体说明在目录中是如何标示一个文件的。因此,对于目录这个对象,虽然可以说出属于它的所有文件,但却无法指明哪个特定的
33、文件要被删除。使用限定关联可用来解决该问题。限定符用来说明对于关联关系的一方,它是如何表示和识别与它相关联的另一方中的多个对象的。如任何一个目录对象都是使用文件名来标示属于它的每个文件的。,目录,文件,文件名,1,2023/11/16,68,6.5.4 关联关系的角色/6,关联的属性、操作以及其它信息可以由关联对象类进一步描述一个人能被一个单位或无单位聘用,一个单位可以聘用多个人,聘用的期限和工资信息在关联类“工作岗位”中描述。,2023/11/16,69,6.5.4 关联关系的角色/7,根据关联的类的个数,可以分为:自返关联二元关联N元关联,2023/11/16,70,(1)自返关联,自返关
34、联(Reflexive Association,Recursive Association)是一个对象类与本身的关联,即一个类的两个对象间的关系至多只有一个人的职务可以为业主,其他人的职务可以为工作人员,他们都是“职务”类的实例对象。一个“业主”可以与多个“工作人员”相连接。,2023/11/16,71,(2)N元关联,发生在3个和多个对象类之间,顾客,供应商,商品,订货商品编号商品名单价,*,*,*,2023/11/16,72,6.5.5 关联关系:约束,约束:Implicit:概念性的,在精化中不会再用Ordered:规定一个多重性大于1的一端对象是有序的Changeable:规定被关联的
35、对象之间的连接是可变的,可以被添加、删除和改变Addonly:规定可以在任何时间从源对象添加新的连接Frozen:规定当源对象已经创建和初始化后,就被冻结,不能再添加、修改和删除连接Xor:代表一组关联的互斥情况,2023/11/16,73,6.5.6 关联关系:聚合/1,聚合:关联关系的基本形式是双向的,意味着关联关系两端的类的地位是平等的。关联关系又是一种结构关系,其中的角色代表着一个类的对象在另一个类中的存在。也就是说关联关系中类的对象被互相拥有,有时,出于建模的需要,有必要打破这种平等的关系,强调类与对象之间的有向的拥有关系为此,可以用聚合对关联关系进行修饰,以表示类和对象的拥有关系。
36、,2023/11/16,74,6.5.6 关联关系:聚合/2,聚合关系的定义:在UML中,聚合关系(aggregation)被定义为两个类之间的整体和部分的关系,表明聚合关系中的客户端以供应端的类的对象作为其一部分聚合对象具有其部分的所有权。,2023/11/16,75,6.5.6 关联关系:聚合/3,聚合关系的图形表示通过在关联关系的聚合类一侧放置一个菱形得到聚合关系还可被进一步修饰为两类:值聚合(by value,composite aggregate)引用聚合(by reference),2023/11/16,76,整体:,聚合类、,客户端,Company,Department,*,1,
37、*,1,聚合,部分:,供应端,2023/11/16,77,关联关系:组合,表示事物的整体与部分的关系较强的情况组合中,代表整体事物的组合对象负责创建和删除代表部分事物的对象(成分对象)。代表部分事物的对象只属于一个组合对象,而且与组合对象同时存在,同时消失,一旦删除了组合对象,也就随即删除了相应的代表部分事物的对象。在聚合中,代表部分事物的对象可以属于多个聚合对象,可以为多个聚合对象共享,而且可以随时改变它从属的多个聚合对象。部分事物对象的生存期与聚合对象的生存期无关。,2023/11/16,78,6.5.8 关联关系:组合与聚合/1,多边形,点,圆,图形属性块颜色结构,1,1,1,1,1,3
38、*,ordered,2023/11/16,79,7.特殊类,2023/11/16,80,7.1 接口,接口是一组外部可访问的操作,用于为对象类或组件提供服务。接口可以看作一种特殊的抽象类,它不含属性,操作也没有方法,即没有操作的实现接口两端的对象或组件可以独立变更,只要它们遵守和实现接口的规定,通过接口相联系就可以了。,2023/11/16,81,实现,依赖,2023/11/16,82,7.2 抽象类/1,抽象类是不能直接产生实例的对象类抽象类的实例对象只能通过一个非抽象类的子类产生,2023/11/16,83,7.2 抽象类/2,抽象类一般在继承结构中作为一个公共接口。但是在UML中的抽象类
39、与接口是不同的模型元素。一个抽象类可以有属性,接口不含有属性,而且接口既可以由对象类实现(逻辑模型元素),也可以由组件实现(物理抽象元素),2023/11/16,84,7.3 参数化类/1,参数类(parameterized class)又称对象类模板(Template)是带有形式参数的类描述符,它定义一个类的家族。在参数类中属性和操作都是以形式化参数来定义。参数类不能直接使用,只有通过把参数类的形式参数绑定到实在参数时才得到一个类。绑定的类不能扩充参数类,即不能添加属性和操作。,2023/11/16,85,7.4 型与实现对象类,可以用构造型把类说明为型(Type)或实现类(Implemen
40、tation Class)。对象类图标的类名之下标有构造型type或implementationClass,2023/11/16,86,2023/11/16,87,7.5导出属性和导出关联,可以从其它属性和关联计算推延得到的属性和关联,当前日期生日,2023/11/16,88,8.类图建模指南,2023/11/16,89,类图建模指南/1,在使用UML的关系为软件系统建模时,必须注意软件模型中关系的导出过程,是通过用例驱动的这意味着应当从交互图出发,根据对象间的交互,得出对象的抽象类,以及对象连接的抽象,2023/11/16,90,类图建模指南/2,在描述类之间的关系时应优先描述语义较强的关系
41、当两个类的对象之间存在着连接关系时,应首先区分它们的类之间是否存在着结构方面的关系(例如:部分/整体关系)如果不是,则应使用依赖关系否则,应使用关联关系在使用关联关系时,应先考察是否应强调类之间的“整体/部分”的关系,如果是则使用聚合来修饰此关联关系,2023/11/16,91,类图建模指南/3,如果不必须强调整体部分的关系,则使用一般的关联关系在这种情况下也应适当使用关联关系的修饰机制以强化其语义例如如果需要强调访问的方向,则应把关联关系修饰为有向关联在双向关联的情况下,则应描述关联关系的角色名字、重复度等。,2023/11/16,92,类图建模指南/4,如果参与交互的一组对象的类中存在着共
42、同的结果和行为,则可以用泛化关系把这些公共的结构和行为提取出来,放到一个类中,并使其它共享这些结构和行为的类成为这个类的导出类在类之间存在泛化关系的情形下,如果使用这种继承关系的目的是为了实现动态行为的多态性,则可以把其中的基类定义为抽象类。抽象类是不存在任何对象的类,它被图形化表示为具有斜体名字的类,抽象类的作用是为其导出类定义公共的结构和服务接口,而服务的实现则可由各导出类实现,因此同一个接口可以提供不同内容的服务。,2023/11/16,93,CToolPan,m_cur_pos:POINT,CToolPan(),CToolPan(),OnLButtonUp(),OnLButtonDow
43、n(),OnMouseMove(),CToolBase,m_nToolID:int=0,OnLButtonUp(),OnLButtonDown(),OnMouseMove(),CToolBase(),CToolZoom,OnLButtonUp(),OnLButtonDown(),OnMouseMove(),2023/11/16,94,9.对象图,2023/11/16,95,对象图,对象图是系统的某一时刻的“快照”可以用来说明复杂的数据结构或一系列的快照中表示行为所有的快照是系统的样本,而不是系统的定义,2023/11/16,96,2023/11/16,97,小结,类的定义类的表示:三部分类的关系:依赖、泛化、关联特殊类:接口,抽象类,参数化类建模指南对象图:“快照”,2023/11/16,98,作业,请画出下列关系的类图,有些可能是三元或N元关系一个国家有一个首都一位进餐的哲学家正在使用一把叉子一个文件或者是一个普通的文件,或者是一个目录文件一个多边形由一组有序的点组成一个图形对象是一段正文、一个几何对象或是一个组合对象人在项目中要运用一种计算机语言调制解调器和键盘都是输入输出设备对象类可以含有多个属性一个运动员在一个时期内只能效力于一个运动队,
链接地址:https://www.31ppt.com/p-6597641.html