SE4第二章软件建模语言.ppt_第1页
SE4第二章软件建模语言.ppt_第2页
SE4第二章软件建模语言.ppt_第3页
SE4第二章软件建模语言.ppt_第4页
SE4第二章软件建模语言.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 2 章,软件建模语言UML,软件工程学 之,用工程化的方法来开发软件,Copyright FJNU,2,5 类图,类图概述 类 类之间的静态关系 使用类图的建议,Copyright FJNU,3,5 .1 类图概述,类图技术是面向对象方法的核心技术。 它定义了很多的概念,并提供了丰富的表示法。 类图的表达能力强,应用范围广。,Copyright FJNU,4,5 .1 类图概述,类图描述了系统中的类及其相互之间的各种关系,其本质是反映系统中包含的各种对象类型以及对象间的各种静态关系。 类之间的静态关系主要有: 关联(聚集和组成是两种特殊的关联) 泛化 实现 依赖,Copyright FJNU,5,5 .1 类图概述,在UML中,可从三个不同的抽象层次来看待类图。 概念层:概念层类图描述的是应用领域中的概念或事物。概念层类图与实现它的软件没有直接的联系。 说明层:说明层类图主要关注的是软件的接口部分,而不是软件的实现部分。 实现层:实现层类图揭示了软件实现体的构成情况。 类图的三个抽象层次,对于画类图和理解类图都是至关重要的。,Copyright FJNU,6,5 .1 类图概述,建立类图的过程实际上是对现实世界的一个抽象过程。它可以对现实世界中与问题有关的各种对象及其相互之间的各种关系进行分类描述。 通过分类,可以有效地发现复杂问题的内在规律,更深刻地了解问题的本质,进而找到解决问题的有效方法。,Copyright FJNU,7,5 .1 类图概述,Copyright FJNU,8,5.2 类,类和对象 属性 操作 类的种类,Copyright FJNU,9,5.2.1 类和对象,对象 是对应用问题中或软件系统中事物或概念的一种抽象描述。 所有对象都是独立的实体,都有其唯一的标识。 同类对象具有相同的特征。,Copyright FJNU,10,5.2.1 类和对象,类 是对一类具有相同特征的对象的描述。 类的特征包括属性和行为。 任何对象都是某个类的实例。 用类的概念来划分问题中涉及的各种对象,并组织系统的结构。,Copyright FJNU,11,5.2.2 属性,在三个不同的抽象层次,属性也具不同的含义。以客户名称这一属性为例: 在概念层,仅表示客户具有名称这一属性。(仅仅是概念) 在说明层,表示客户对象能把自己的名称告诉给其它对象,并拥有一些设置名称的方法。(从概念到职责) 在实现层,表示为客户名字安排一个物理存储区。 (从职责到实现),Copyright FJNU,12,5.2.2 属性,UML定义属性的语法: 可见性 名称:类型=缺省值约束特性 可见性:表示该属性对于类外的元素是否可见。 公有 UML表示“+” 保护 UML表示“#” 私有 UML表示“-” 名称:一个字符串,表示属性的名字。 类型:定义属性的种类,基本类型或自定义类型 缺省值:属性的初始值。 约束特性:用于描述对属性的约束。如只读,Copyright FJNU,13,5.2.3 操作,在概念层,用操作去定义类的职责,而不是接口。 在说明层,主要描述重要的公有操作。 在实现层,主要描述一些私有的和受保护的操作。,Copyright FJNU,14,5.2.3 操作,类职责是从高层次描述的类的目的,它从对属性和方法的描述中摆脱出来,用几句话来定义类的目标。 对每项职责而言,可指定其它类作为 协作者来完成类的此项职责。 CRC卡片(Class-Responsibility-Collaborator ,“类-职责-协作者”)可用于在概念层定义类的职责。,Copyright FJNU,15,CRC卡片,CRC卡片是由美国Tektronix实验室两位著名的Smalltalk程序员在80年代末设计 的。 不是用图,而是用卡片来描述类。 不是描述类的属性和方法,而是描述类的职责。,Copyright FJNU,16,CRC卡片,CRC卡片实例,Copyright FJNU,17,CRC卡片,何时使用CRC卡片 在软件开发的早期,清理问题领域所涉及的类的时候。 当类缺乏清晰定义的时候。 当开发人员在定义类时,过早地陷于到太多的细节中的时候。,Copyright FJNU,18,5.2.3 操作,在UML中,操作的语法定义: 可见性 名称(参数表):返回类型 约束特性 可见性:表示该操作对于类外的元素是否可见。 公有 UML表示“+” 保护 UML表示“#” 私有 UML表示“-” 名称:是一个字符串,表示操作的名称。 参数表:操作所需的参数。 返回类型:返回值的类型 约束特性:描述对操作的约束。(前置、后置条件),Copyright FJNU,19,5.2.3 操作,操作的基本类型 获取型操作,不改变类状态的操作。 设置型操作,改变类状态的操作。 区别操作与方法 在具有多态性的定义中,操作只有一个,方法却有多个。,Copyright FJNU,20,5.2 类,类和对象 属性 操作 类的种类,Copyright FJNU,21,5.2.4 类的种类,接口 抽象类 模板类 关联类 嵌套类 主动类,Copyright FJNU,22,接口,OO方法十分注意接口和类的区别,将接口本身称作类型,将接口的实现称作类。以强调这种区别。 但面向对象程序设计语言通常将接口和类混为一团。新的OO语言,如Java、C#和CORBA就改变了这种状况。,Copyright FJNU,23,接口,接口的两种表示方法,Copyright FJNU,24,接口和抽象类,一个接口是一个不带实现的类,它 只规定类的外部特性。 接口可通过抽象类来描述。 UML用斜体表示抽象元素(包括类、属性、方法等)的名称。,Copyright FJNU,25,接口和抽象类,Copyright FJNU,26,参数化类,参数化类就是模板,特别适合定义抽象的集合。主要用在说明层和实现层。 实例,class Set void insert (T newElement); void remove (T newElement); Set empolyeeSet empolyseeSet.remove(),Copyright FJNU,27,5 类图,类图概述 类 类之间的静态关系 关联 泛化 依赖 实现 使用类图的建议,Copyright FJNU,28,5.3 .1 关联,关联表示类之间存在的某种关系,它是对对象之间存在的某种具体关系的抽象。 在概念层,属性与关联可以互换。即一个概念既可以用属性来表达,也可以用关联来表达。 如客户名字,可以用属性来表示;也可以在建立名字对象之后,用客户对象与名字对象之间的关联来表达。 在说明层和实现层,有时出于优化的目的,将概念层的属性定义为关联。并用指针或成员函数来实现。,Copyright FJNU,29,5.3 关联,关联可从以下几方面进行刻画: 名称 角色 多重性 导航 限定,Copyright FJNU,30,关联的名称,关联的名称用于描述关联的性质,可以使用动词或动词短语给关联命名。在含义十分明显时,名字可以省略。,Copyright FJNU,31,关联的角色,关联的两个端点被称为角色,表示关联所连接的两个类各自在此关联中的作用。,Copyright FJNU,32,关联的多重性,关联的角色可以具有多重性。一个角色可以由多个对象来扮演。关联的多重性表示参与角色的对象的数目的上下界。,33,关联的导航性,在关联上增加一个箭头表示导航性。导航主要用于 说明层和实现层,在概念层中用处不大。 说明层:学生对象知道自己学习了哪些课程,但课 程对象不需要知道哪些学生对象学习它。 实现层:学生对象包含指向课程对象的指针数组, 但课程对象没有指向学生对象的指针数组。,Copyright FJNU,34,关联的限定符,通过在关联的一方添加限定符,明确地标识在关联的另一方出现的多个对象中的每一个对象。限定符可以是关联另一方的某个属性或是一个表达式。,Copyright FJNU,35,关联类,有时需要为关联设置一些属性、操作及其它特性。UML用建模元素“关联类”来表示。 UML规定:在任何两个相关的对象之间,只能存在关联类的一个实例。,Copyright FJNU,36,关联类,关联类也可以用普通(正式)的 类来表示。 这种表示在描述一个对象与另一个对象之间,需要有多于一个的关联类实例时,是可行的。(此时使用关联类是不行的,因为那样就违反了UML的规定),Copyright FJNU,37,有两种特殊的关联关系,它们是聚合关系和组合关系。 聚合关系 组合关系,两种特殊的关联关系,注意: 聚合与组合的图符不同。 组合关系中部分对象与整体 对象共存亡。,Copyright FJNU,38,5 类图,类图概述 类 类之间的静态关系 关联 泛化 实现 依赖,Copyright FJNU,39,5.3.2 泛化,在概念层,泛化表示类与子类的关系。 在说明层,泛化意味着子类型的接口必须包括父类型接口中的每个元素。 在实现层,泛化与程序设计语言中的继承有一定联系。泛化可以用两种技术来实现。 类继承技术 授权技术,Copyright FJNU,40,继承,用继承机制实现泛化关系的条件 一个父类的任何子类都必须具有其父类的所有行为。这种行为的一致性要求类中的操作不仅在语法上一致,而且在语义上也要一致。 语义上的一致意味着每个对象都应该是其父类的一个对象,父类中的所有属性和操作都完全适用于子类对象。,Copyright FJNU,41,继承,即便子类重载父类中的操作,必须保证这个操作提供与父类操作同样的服务。只不过服务的内容可以更多更具体一些。 但是程序员在很多时候,没有严格确保子类与父类在语义上的一致性。往往违背语义的一致性,采用继承机制借用一个类的部分行为,导致行为继承的错误。,Copyright FJNU,42,授权,授权就是把原来属于类A的职责或任务转交给类B来完成。类B成为类A不可分割的一个组成部分。 复杂的泛化关系,如多元继承、动态继承等不宜用继承关系来实现。,Copyright FJNU,43,授权,Copyright FJNU,44,5.3.3 实现关系,实现关系用于在说明层和实现层表示类与被该类实现 的接口之间关系。,Copyright FJNU,45,5.3.4 依赖关系,依赖关系表示一个类以某种形式依赖另一个类。常见 的依赖关系有:,(1)使用依赖,(2)抽象依赖,(3)绑定依赖,Copyright FJNU,46,5 类图,类图概述 类 类之间的静态关系 使用类图的建议,Copyright FJNU,47,5.4 使用类图的建议,不要在一开始,就试图使用类图中所有的模型元素,应先易后难,逐步添加。 在项目的不同阶段,应按不同的抽 象层次构造不同的类图。 不要为每个概念或事物都画一个类图,只画几张关键的类图。 类图应随着开发过程的进展,而不断地更新。,Copyright FJNU,48,小结,类图的三个抽象层次:概念层、说明层和实现层 类 属性 操作 CRC卡 类的种类:接口、抽象类、模板类、关联类、嵌套类和主动类,Copyright FJNU,49,类之间的静态关系 关联 泛化:继承和授权两种实现方式 实现:接口和实现类之间的关系 依赖,小结,聚合关系 组合关系,Copyright FJNU,50,6 类图的高级概念,构造型 多值分类 动态分类 派生关联和派生属性 引用对象和值对象 约束规则,Copyright FJNU,51,6.1 构造型,构造型 是UML提供的在一种已定义的模型元素的基础上,构造一种新模型元素的机制。被构造出的元素被称为构造型元素。 构造型元素可以扩展基元素的语义,但不能扩展基元素的语法结构。,Copyright FJNU,52,6.1 构造型,构造型适用于所有类型的模型元素 构造型的表示法 用括号,如扩展 定义新的图符 UML已提供了40多个预定义的构造元素。如扩展就是构造型。,Copyright FJNU,53,6.1 构造型,定义一种新构造型元素的步骤: 在基元素的模型符号的基础上,附 加一个构造型名称或者指定一个图符。如下图中执行者就是类的一个构造型。,Copyright FJNU,54,6.1 构造型,定义一种新构造型元素的步骤 定义构造型元素的语义,其语义必须与基元素的语义一致。语义定义可采用形式语言和自然语言进行定义。,Copyright FJNU,55,6.1 构造型,构造型是对一种模型元素进行高层分类的机制。这种机制可适用于所有类型的模型元素,而不再仅仅只是对“类”这一种模型元素。 构造型与约束 都可用于为模型元素增加语义 约束侧重于施加某种限制 构造型则有分类的意味,Copyright FJNU,56,6.2 多值分类,多值分类的背景 在大多数OO程序设计语言中,都假定对象的分类是单值(是指一个对象只能属于一个类)的和静态的。 这种假定对于实现是有利的。但却过于限制了概念层的建模能力,使得人们不得不在概念层就去思考如何描述问题中的复杂分类关系。,Copyright FJNU,57,6.2 多值分类,UML允许在概念模型中使用多值分类。 多值:一个类可以根据多个不同的分类标准,分成多个子类族。这样一个对象 可以用几个类来描述,而且这些类之间不必有继承关系。 多重继承:一个类可以有多个父类,但 一个对象仍然只属于一个类。 多值与多重继承是不同的。,Copyright FJNU,58,6.2 多值分类,实例,Copyright FJNU,59,6.2 多值分类,在图中“人”可以按多种标准分成多个类。 多值分类允许将这些按不同标准定义的类进行任意组合,然后指派一个对象。 按同一种标准划分的子类,彼此之间是互斥的。 complete表示分类后得到的子类是一个全集。这意味着父类的任何实例都必须是这个(全集)分类中某个子类的一个实例。,Copyright FJNU,60,6.2 多值分类,合法的类组合 (男人,理疗师) (女人,病人) (女人,病人,护士) (女人,医生,外科医生) 不合法的类组合 (病人,医生) 注:缺全集类 (男人,医生,护士)注:含两个互斥的类 多值对象就是指这些类组合的实例对象,Copyright FJNU,61,6.3 动态分类,动态分类允许在同类的子类集中,动态地改变对象所属的类。 静态分类不允许对象改变类型。 静态分类通常将动态分类的子类集看作是类(对象)的状态集。,Copyright FJNU,62,6.3 动态分类,多值的动态分类 在概念层建模非常有用。下图中的动态分类符合人的职业可以变化的事实。,Copyright FJNU,63,6.4 派生关联和派生属性,派生关联和派生属性是指那些可以根据类图中其它关联和属性计算得到的关联关系和属性。 从说明的观点来看,派生表示值与值之间的约束关系,而并不表明计算什么和存储什么。,Copyright FJNU,64,6.4 派生关联和派生属性,Copyright FJNU,65,6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论