第6章 面向对象开发的 分析与设计
虽然结构化程序设计方法具有很多优点,但它仍是一种面向过程的程序设计方法。它把数据和处理数据的过程分离为相互独立的实体,当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。 为了改进这种情况,在20世纪80年代,就开始了面向对象方法的研究。面向对象方法作为一种新型的独具优越性的新方法正引起全世界越来越广泛的关注和高度的重视,是当前计算机界关心的重点。
6.1 面向对象方法简介 6.1.1 面向对象的基本概念与特征 1.面向对象的基本概念: 1)对象 6.1 面向对象方法简介 6.1.1 面向对象的基本概念与特征 1.面向对象的基本概念: 1)对象 对象是结构的基本单位,是要研究的任何事物。从一个学生到一所学校或极其复杂的装置都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由一组属性和一组操作构成。属性是用来描述对象静态特征的数据项,行为是用来描述对象动态特征的操作序列。
2) 类 类是对一组有相同属性和相同操作的对象的定义,一个类所包含的操作和属性描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。
3) 消息 消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。
6.1.1 面向对象的基本概念与特征 2.面向对象主要特征: 1)封装性 6.1.1 面向对象的基本概念与特征 2.面向对象主要特征: 1)封装性 封装是一种信息隐蔽技术,它体现在类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象的使用者分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
2)继承 继承是面向对象技术能够提高软件开发效率的重要原因之一,其定义是:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。 继承分为单继承(一个子类只有一个父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类的对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
3)多态性 同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,因此,同一消息即可调用不同的方法。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在面向对象编程语言中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
6.1.2 面向对象的基本思想 面向对象方法的关键在于加入了类及其继承性,用类表示通用特性,子类继承父类的特性,并可加入新的特性。对象以类为样板被创建。所以在面向对象方法中,首要的任务是决定所需要的类,每个类应设置足够的操作,并利用继承机制来共享共同的特性。
面向对象方法主要有以下几个要点: 1.客观世界是由各种“对象”所组成的 任何事物都是对象,每一个对象都有自己的运动规律和内部状态,每一个对象都属于某个对象“类”,都是该对象类的一个元素。复杂的对象可以是由相对比较简单的各种对象以某种方式而构成的。不同对象的组合及相互作用就构成了所要研究、分析和构造的客观系统。
2.对象间具有共同属性 通过类比,发现对象间的相似性,这就是构成对象类的依据。在“类”、“父类”、“子类”的概念构成对象类的层次关系时,若不加特殊说明,则处在下一层次的对象可自然地继承位于上一层次的对象的属性。
3.通过定义一组“操作”来说明该对象的功能 对象间的相互联系是通过传递“消息”来完成的,消息就是通知对象去完成一个允许作用于该对象的操作,至于该对象将如何完成这个操作的细节,则是封装在相应的对象类的定义中的,细节对于外界是隐蔽的。
6.1.3 面向对象的开发过程 1.面向对象分析的基本步骤 6.1.3 面向对象的开发过程 1.面向对象分析的基本步骤 分析强调的是对问题和需求的调查研究,而不是解决方案。在面向对象分析过程,强调的是在问题领域内发现和描述对象或概念。在用面向对象方法具体地分析一个事物时,大致上遵循如下五个基本步骤: 1)确定对象和类。这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。
6.1.3 面向对象的开发过程 2)确定结构。结构是指问题域的复杂性和连接关系。类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。 3)确定主题。主题是指事物的总体概貌和总体分析模型。
6.1.3 面向对象的开发过程 4)确定属性。属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。 6.1.3 面向对象的开发过程 4)确定属性。属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。 5)确定方法。方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。
2.面向对象设计方法 设计强调的是满足需求的概念上的解决方案,而不是实现。在面向对象设计过程中,强调的是定义软件对象和这些软件对象如何协作来满足需求。面向对象的设计方法是面向对象方法中一个中间过渡环节。其主要作用是对面向对象分析的结果作进一步的规范化整理,以便能够被面向对象编程直接接受。在面向对象设计的过程中,要展开的主要有如下几项工作。
1)对象定义规格的求精过程 对于OOA所抽象出来的对象—类以及汇集的分析文档,OOD需要有一个根据设计要求整理和求精的过程,使之更能符合OOP的需要。这个整理和求精过程主要有两个方面:一是要根据面向对象的概念模型整理分析所确定的对象结构、属性、方法等内容,改正错误的内容,删去不必要和重复的内容等。二是进行分类整理,以便于下一步数据库设计和程序处理模块设计的需要。整理的方法主要是进行归类,对类一对象、属性、方法和结构、主题进行归类。
2)数据模型和数据库设计 数据模型的设计需要确定类—对象属性的内容、消息连接的方式、系统访问、数据模型的方法等。最后每个对象实例的数据都必须落实到面向对象的库结构模型中。
3)优化 OOD的优化设计过程是从另一个角度对分析结果和处理业务过程的整理归纳,优化包括对象和结构的优化、抽象、集成。 对象和结构的模块化表示OOD提供了一种范式,这种范式支持对类和结构的模块化。这种模块符合一般模块化所要求的所有特点,如信息隐蔽性好,内部聚合度强和模块之间耦合度弱等。 集成化使得单个构件有机地结合在一起,相互支持。
3.面向对象的实现 即指软件功能的编码实现,它包括:每个对象的内部功能的实现;确立对象哪一些处理能力应在哪些类中进行描述;确定并实现系统的界面、输出的形式及其它控制机理等,总之是实现在OOD阶段所规定的各个对象所应完成的任务。
6.1.4 面向对象建模语言与工具 1. Rational Rose 6.1.4 面向对象建模语言与工具 1. Rational Rose Rational Rose 是由美国的Rational公司开发的、面向对象的可视化建模工具。利用这个工具,可以建立用UML描述的软件系统模型,而且可以自动生成和维护C++、Java、Visual Basic和Oracle等语言和系统的代码。 Rose提供了一个叫“Data Modeler”的工具,利用它可用将对象模型转换成数据模型,也可以将现有的数据模型转换成对象模型,从而实现两者之间的同步。
6.1.4 面向对象建模语言与工具 2.PowerDesigner 6.1.4 面向对象建模语言与工具 2.PowerDesigner PowerDesigner系列产品提供了一个完整的建模解决方案,业务或系统分析人员,设计人员,数据库管理员和开发人员可以对其裁剪以满足他们的特定的需要;而其模块化的结构为购买和扩展提供了极大的灵活性,从而使开发单位可以根据其项目的规模和范围来使用他们所需要的工具。PowerDesigner灵活的分析和设计特性允许使用一种结构化的方法有效地创建数据库或数据仓库,而不要求严格遵循一个特定的方法学。PowerDesigner提供了直观的符号表示使数据库的创建更加容易,并使项目组内的交流和通讯标准化,同时能更加简单地向非技术人员展示数据库和应用的设计。
6.1.4 面向对象建模语言与工具 3.Visio VISIO原来仅仅是一种画图工具,能够用来描述各种图形(从电路图到房屋结构图),也是到VISIO2000才开始引进软件分析设计功能到代码生成的全部功能,它可以说是目前最能够用图形方式来表达各种商业图形用途的工具(对软件开发中的UML支持仅仅是其中的一部分)。它跟微软的office产品的能够很好兼容。能够把图形直接复制或者内嵌到WORD的文档中。但是对于代码的生成更多是支持微软的产品如VB,VC++,MS SQL Server 等,所以它可以说用于图形语义的描述比较方便,但是用于软件开发过程的迭代开发功能还有待加强。
6.1.5 面向对象开发方法优缺点 针对前面所述的面向对象开发方法,可以发现它的优缺点如下: 1.优点 6.1.5 面向对象开发方法优缺点 针对前面所述的面向对象开发方法,可以发现它的优缺点如下: 1.优点 直观、方便,反映系统结构完整,模型一致性好,易于完成开发系统。 1) 是一种全新的系统分析设计方法(对象、类、结构属性、方法)。 2) 适用于各类信息系统的开发。 3) 实现了对客观世界描述到软件结构的直接转换 ,大大减少后续软件开发量。 4) 开发工作的重用性、继承性高,降低重复工作量。 5) 缩短了开发周期。
6.1.5 面向对象开发方法优缺点 2.缺点 对系统动态特征表述不充分(主要是整体动态特征),且反映系统整个功能特征的能力较差。 6.1.5 面向对象开发方法优缺点 2.缺点 对系统动态特征表述不充分(主要是整体动态特征),且反映系统整个功能特征的能力较差。 1) 需要一定的软件支持环境。 2) 只能在现有业务基础上进行分类整理,不能从科学管理角度进行理顺和优化。 3) 初学者不易接受、难学。 适用场所:可以普遍适用于各类信息系统开发,但是它不能涉足系统分析以前的开发环节。
6.2 统一建模语言UML 6.2.1 UML的产生背景 Ivar Jacobson的面向对象的软件工程(Object-Oriented Soft Engineering,OOSE)采用用例的概念作为基础,通过加强项目和用户之间的通信实现了高度重用,这是IT项目的第一个关键成功因素。 James Rumbaugh则开发出了对象建模技术(Object Modeling Technique,OMT),强调通过对系统里的事务和数据进行深入分析来确定目标问题,这是IT项目成功的第二个关键因素。最后,Grady Booch提出了Booch方法,该方法在设计,实现,定义解决方案并使之映射到目标问题方面具有独到之处,即为IT项目的第三个关键成功因素。以上三个因素相互支持,缺一不可。将它们的方法和符号结合起来,足以满足创建一个统一的,全面的建模标准的需求。
UML在1997年被对象管理组织(OMG,一个工业标准组织)采纳为标准,与此同时,一些公司研发并提交了关于UML的另一套建议,他们的研究结果被结合起来,这就是1997年9月发布的UML1.1,OMG开始正式对UML标准的开发负责,此后的UML,更在不断的发展中。2004年,UML2.0开始投入使用。目前版本已经发展至UML2.1.1。
6.2.2 UML概念模型 为了理解UML,就需要了解其建模的概念、符号。如果掌握了这些概念模型的思想,就能够读懂UML模型,并能建立一些基本模型。 组成UML有三种基本的构造块:事物、关系、图。
事物 事物(thing)是对模型中最具有代表性的成分的抽象,是模型中的基本成员。在UML中有4种事物:结构事物、行为事物、分组事物、注释事物,这些事物是UML中基本的面向对象的构造快。用它们可以写出结构良好的模型。 1)结构事物 2)行为事物 3)分组事物 4)注释事物
2.关系 依赖 是两个事物间的语义关系,其中一个事物发生变化会影响另一个事物的语义。 关联 关系是事物之间的联系。在图形上,把关系画成一条线,并用不同的线区别关系的种类。在UML中有4种关系:依赖、关联、泛化、实现。这些关系是UML的基本关系构造块,用它们可以写出结构良好的模型。 依赖 是两个事物间的语义关系,其中一个事物发生变化会影响另一个事物的语义。 关联 是一种结构关系,它描述了一组链,链是对象之间的连接。聚合是一种特殊类型的关联,它描述了整体和部分间的结构关系。 泛化 泛化关系也称为继承关系,即特殊元素的对象可替代一般元素的对象。用这种方法,子元素共享了父元素的结构和行为。
实现 是类元之间的语义关系,其中的一个类元指定了由另一个类元保证执行的契约。在两种地方可出现实现关系:一种是在接口和实现它们的类或者构件之间;另一种是在用例和实现它们的协作之间。 这四种元素是UML模型中可以包含的基本关系事物。它们也有变体,例如,依赖的变体有精化,跟踪,包含和延伸。
图 UML中的图共有10种,如图6-2所示,这些图可划分为两类,一类是为系统的静态结构建模的,另一类是为系统的动态结构建模的,分别称之为静态模型和动态模型。静态模型捕获物件以及物件之间的静态关系,动态模型捕获物件是如何交互以产生软件系统所需的行为。
其中各图的作用在于: 用例图:需求捕获,测试依据。 类图:类以及类之间的相互关系。 对象图:对象以及对象之间的相互关系。 包图:类的集合。 构件图:构件及其相互依赖关系。 部署图:构件在各节点上的部署。 顺序图:强调时间顺序的交互图。 协作图:强调对象协作的交互图。 状态图:类所经历的各种状态。 活动图:对工作流程建模。
6.2.3 UML的静态建模机制 所有的事物都有两个方面:静态结构和动态行为。任何建模语言都以静态建模机制为基础,标准建模语言UML也不例外。 UML的静态建模机制包括用例图、类图、对象图、包、构件图和部署图。
1.用例图(Use case diagram) 用例图叙述的是用户应该怎样去使用系统,也就是说用例图描述的是关于系统功能的一个概述。与目标系统交互的人或系统被称为参与者,而参与者使用的功能则被称为用例。用例图可以包含注释和约束,还可以包含包,用于将模型中的元素组合成更大的模块。用例图的目的是描述用户希望系统支持的所有功能,但是对于这些功能的实现细节却不提。 用例图反映了用户对系统的期望,并且描述了系统的特征与系统特征中的共同行为, 为客户观察自己的需求提供了简单易行的方法。
用例图由参与者、用例、系统边界、关联关系、包含关系、扩展关系和泛化关系这6个元素组成,用画图的方法来完成。 在UML中,用例图主要元素是用例和参与者。 (1)用例 用例是外部可见的系统功能单元,这些功能由系统单元所提供,并通过一系列系统单元与一个或多个参与者之间交换的消息所表达。用例的用途是,在不揭示系统内部构造的前提下定义连贯的行为。可以理解为用例是参与者想要系统做的事情。对于对用例的命名,可以给用例取一个简单、描述性的名称,一般为带有动作性的词。用例在画图中用椭圆来表示。
(2)系统边界 系统边界是用来表示正在建模系统的边界。边界内表示系统的组成部分,边界外表示系统外部。系统边界在画图中方框来表示,同时附上系统的名称,系统边界框指明了系统的范围,即矩形内部的用例表示的是准备要实现的功能。参与者画在边界的外面,用例画在边界里面。 P174 图6-11
(3)参与者 所谓的参与者(actor)是指所有存在于系统外部并与系统进行交互的人或其他系统。因此参与者可以是人,可以是事物,也可以是时间或其他系统等等。还有一点需要注意的是,参与者不是指人或事物本身,而是表示人或事物当时所扮演的角色。UML中用直立人形图标代表参与者。 参与者用来表示使用系统的对象,即系统用户,可以是一个人或者另一个系统。参与者的角色名应该用他们使用系统时的工作头衔,要避免起一个实际的人名。
(4)关系:由一条连接参与者和用例的线来表示。 关联关系(association) 关联关系表示参与者用例之间的通信。不同的参与者可以访问相同的用例,一般来说它们和该用例的交互是不一样的,如果一样的话,说明它们的角色可能是相同的。如果两种交互的目的也相同,说明它们的角色是相同的,就可以将它们合并。在UML中,关联关系使用箭头来表示。图6-3表示了用例的关联关系。
包含关系 一个基本用例的行为包含了另一个用例的行为这被称作为包含关系。在这种情况下,新用例不是初始用例的一个特殊例子,并且不能被初始用例所代替。在UML中,包含关系表示为虚线箭头加《include》字样,箭头指向被包含的用例。
扩展关系 一个用例也可以被定义为基础用例的增量扩展,这称为扩展关系,扩展关系是把新的行为插入到已有用例中的方法。同一个基础用例的几个扩展用例可以在一起应用。基础用例的扩展增加了原有的语义,此时是基础用例而不是扩展用例被作为例子使用。在UML中,扩展关系表示为虚线箭头加《extend》字样,箭头指向被扩展的用例(即基础用例),如图6-7所示。
泛化关系 泛化关系代表一般与特殊的关系。子用例表示父用例的特殊形式。子用例从父用例处继承行为和属性,还可以添加、覆盖或改变继承的行为。当父用例能够被使用时,任何子用例也可以被使用。在UML中,用例泛化与其他泛化关系的表示法相同,用一个三角箭头从子用例指向父用例,如图6-9所示。
图6-9 在用例泛化中,如果系统中一个或多个用例是某个一般用例的特殊化时,就需要使用用例的泛化关系。
某图书馆信息系统用例图的部分内容,用例“查询”(Search)负责在图书馆馆范围内查找符合用户输入条件的相关馆藏信息,它有两个子用例“查询图书”(Search Book)和“查询期刊”(Search Magazin)。这两个用例都继承了父用例“查询”的行为,并添加了自己的行为。它们在查询的过程中加入了属于自己的查询范围。如图6-10。
综上所述则可以了解如图6-11的图书馆借阅管理用例图。
2.类图、对象图和包图 类图(Class diagram)技术已经成为面向对象方法中的主要技术,对于一个想要描述的系统,其类模型和对象模型揭示了系统的结构。在UML中,类和对象模型分别由类图和对象图表示。类图表示了系统中各种对象类型及其之间存在的各种静态关系。
类图是面向对象系统建模中最常用的图,它是定义其他图的基础。类图包含7个元素:类、接口、协作、依赖关系、泛化关系、关联关系以及实现关系。与UML中的其他图一样,类图也可以包含注释和约束。类图中还可以含有包或子系统,它们使得模型元素可以聚集成更大的模块。
类 类是对一组具有相同属性,相同操作,相同关系和相同语义的对象的描述。一个类实现一个或者多个接口。类是面向对象系统组织结构的核心。类是对一组具有相同属性、操作、关系和语义的对象的描述。 此对象包括了现实世界中的物理实体、商业事物、逻辑事物、应用事物和行为事物等,甚至也包括了纯粹概念性的事物,它们都是类的实例。
如图6-12所示,在UML中,类用矩形来表示,并且该矩形被划分成为3个部分:名称部分、属性部分和操作部分。
名称 按UML的规定,把的类的名称放在矩形的上部,是每个类中所必有的构成元素,用于同其他类相区别。类的名称应该来自系统的问题域,并且应该尽可以地明确,以免造成歧义。
属性 类的属性描述了类所代表的事物具备的特性,这些特性是所有的对象所共有的。有时,属性的值也是一种描述对象状态的方法。 UML中,类属性的语法为: [可见性] 属性名 [:类型] [=初始值] [{属性字符串}]
其中: 可见性。属性可以具有不同的可见性。可见性描述了该属性对于其他类是否可见,以及是否可以被其他类引用,而不仅仅是被该属性所在类可见。类中属性的可见性主要有公有(public)、私有(private)和受保护(protected)3种。
属性名。类的属性是类的一部分,每个属性都必须有一个名字以区别于类中的其他属性。 类型。属性具有类型,用来说明该属性是什么数据类型。 初始值。设定初始值有两个用处:保护系统的完整性,防止漏掉取值或被非法的值破坏系统的完整性;为用户提供易用性。
属性字符串。属性字符中用来指定关于属性的其他信息,。任何希望添加在属性定义字符串值但又没有合适地方可以加入的规则,都可以放在属性字符串中。
操作 类的操作是对类的对象所能做的事务抽象,相当于一个服务的实现,且该服务可以由类的任何对象请求以影响其行为。属性是描述类的对象特性的值;操作用于操纵属性或执行其他动作。操作通常称为函数,它们位于类的内部,并且只能应用于该类的对象。
UML中,类操作的语法为: [可见性] 操作名 [(参数表)] [:返回类型] [{属性字符串}]其中: 可见性。类中操作的可见性主要包括公有(public)、私有(private)、受保护(protected)和包内公有(package)4种,分别用“+”、“-”、“#”和“~”来表示。
其中,只要调用对象能够访问操作所在的包,就可以调用可见性为公有的操作;只有属于同一个类的对象才可以调用可见性为私有的操作;只有子类的对象才可以调用父类的可见性为受保护的操作;只有在同一个包里的对象才可以调用可见性为包内公有的操作。
操作名。在实际建模中,操作名是用来描述所属类的行为的动词或动词短语。 参数表。参数表是一些按顺序排列的属性定义了操作的输入。参数表是可选的,即操作不一定必须有参数。参数的定义方式采用“名称:类型”的定义方式。如果存在多个参数,则将各个参数用逗号隔开。参数可以具有默认值,这意味着如果操作的调用都没有提供某个具有
默认值的参数的值,那么该参数将使用指定的默认值。 返回类型。返回类型是可选的,即操作不一定必须有返回类型。大部分编程语言只支持一个返回值,即返回类型至多一个。虽然没有返回值是合法的,但是具体的编程语言一般要加一个关键字void来表示无返回值。 属性字符串。如果希望在操作的定义中加入一些除了预定义元素之外的信息,就可以使用属性字符串。
职责 职责描述了类做什么,也就是类的属性和操作能完成什么任务。创建一个类时,同时声明这个类的所有对象具有相同种类的状态和相同种类的行为,在较高层次上,这些相应的属性和操作正是要完成类的职责和特性。类的职责是自由形式的文本,写成一个短语、一个句子或一段短文。在UML中把职责列在类图底部的分隔栏中,如图6-13所示。
约束 说明类的职责是消除二义性的一种非形式化的方法,形式化的方法是使用约束。约束指定了该类所要满足的一个或多个规则。在UML中,约束是用一个花括号括起来的自由文本。图6-14中用花括号括起来的是规则表达式限制了洗衣机的容量值,只能三者选一。
图6-14
注释 UML模型中的注释事物是解释部分。这些注释事物用来描述,说明和标注模型的任何元素。注释是一个依附于一个元素或者一组元素之上,对它进行约束或者解释的简单符号。在图形上,把一个注释画成一个右上角是折角的矩形,其中带有文字或者图形解释,
如图6-15所示:
接口 接口说明了操作的命名集合。接口包含操作但不包含属性,且它没有对外界可见的关联。在UML中,接口是用一个带有名称的小圆圈表示的,并且通过一条实线与它的模型元素相连接,如图6-16所示:
图6-16
类间的关系 依赖(Dependency) 依赖表示的情形是:对于一个元素(提供者)的某些改变可能会影响或提供消息给其他元素(客户),即客户以某种形式依赖于其他类元。
图6-17 从图6-17从可看到,学生类与书本类之间的依赖关系, 即学生依赖书本学习知识。
泛化(Generalization) 是一种存在于一般元素和特殊元素间的分类关系。其中的特殊元素与一般元素兼容,且还包含附加的信息。那些允许使用一般元素的地方都可以用特殊元素的一个实例来代替,但反过来不成立。泛化关系只使用在类型上,而不是实例上。从图6-18中可以看出由子类向父类
类指出一个空三角箭头即说明两个类间的泛化关系。 如图6-19所示,表示了人类与男人之间的泛化关系。
关联(Association) 关联(Association)是一种结构关系,指明一个事物的对象与另一个事物的对象之间的联系。即关联描述了系统中对象或实例之间的离散连接。最普通的是二元关联。从图6-20可以看到队员和球队之间的关联。这个关联可以表示了:队员为球队效力(Plays on)。
角色 角色是关联关系中一个类对另一类所表现出来的职责。当类出现在关联的一端时,该类就在关联关系中扮演一个特定的角色。角色的名称是名词或名词短语,以解释对象是如何参与关系的。
从图6-21中可以看到在队员和球队的关联中,如果球队的是职业球队,那么它就是队员的雇主(employer),队员就是球队的雇员(employee)。
多重性 关联是具有多重性(Multiplicity)的,它可以用来表达一个取值范围、特定值、无限定的范围或一组离散值。 在UML中,多重性被表示为用“..”分隔开的区间,其格式为“minimum.. maximum”,其中,minimum和maximum都是Int型的整数。赋给一个端点的多重性表示该端点可以有多少个对象与另一个端点的一个多象关联。端点的多重性表示该端点可以有多少个对象与另一个端点的一个多象关联。
多重性语法表示含义如表6-1
遵循表6-1中的语法规则,可以看到图6-22中表示的是公司与工作人员之间一对多的关联关系。