静态图第3章类图对象图和包图.doc
10页第3章 类图、对象图和包图使用面向对象的思想描述系统,能够把复杂的系统简单化、直观化,这有利于用面向对象的程序设计语言实现系统,并有利于未来对系统的维护构成面向对象模型的基本元素有类、对象和类与类之间的关系等类图和对象图合称为结构模型视图或者静态视图,用于描述系统的结构或静态特征其中,类图用来描述系统中的类以及类与类之间的静态关系等;对象用来描述特定时刻实际存在的若干对象以及它们之间的关系一个系统的模型中可以包含多个对象图,每个对象图描述了系统在某个特定时刻的状态人们为了控制现实系统的复杂性,通常会将系统分成较小的单元,以便一次只处理有限的信息UML提供了包这一机制,使用它可以把系统划分成较小的便于处理的单元本章主要介绍类、类图、对象、对象图、类与类之间的关系以及包图等内容,并且还将创建图书管理系统的类图本章学习要点:Ø 理解类图的基本概念Ø 为系统建模类Ø 建模类之间的关联关系Ø 理解并建模泛化关系Ø 了解依赖关系和实现关系Ø 了解对象图和包图的概念Ø 构造类图3.1 类图构建面向对象模型的基础是类、对象以及它们之间的关系可以在不同类型的系统(例如,商务软件、嵌入式系统、分布式系统等)中应用面向对象技术,在不同的系统中描述的类可以是各种各样的。
例如,在某个商务信息系统中,包含的类可以是顾客、协议书、发票、债务等;在某个工程技术系统中,包含的类可以有传感器、显示器、I/O卡、发动机等在面向对象的处理中,类图处于核心地位,它提供了用于定义和使用对象的主要规则,同时,类图是正向工程(将模型转化为代码)的主要资源,是逆向工程(将代码转化为模型)的生成物因此,类图是任何面向对象系统的核心,类图随之也成了最常用的UML图3.1.1 概述类图是描述类、接口以及它们之间关系的图,它显示了系统中各个类的静态结构,是一种静态模型类图根据系统中的类以及各个类的关系描述系统的静态视图可以用某种面向对象的语言实现类图中的类类图是面向对象系统建模中最常用和最基本的图之一,其他许多图,如状态图、协作图、组件图和配置图等都是在类图的基础上进一步描述了系统其他方面的特性类图可以包含类、接口、依赖关系、泛化关系、关联关系和实现关系等模型元素在类图中也可以包含注释、约束、包或子系统类图用于对系统的静态视图(它用于描述系统的功能需求)建模,通常以如下所示的某种方式使用类图: 对系统的词汇建模 在进行系统建模时,通常首先构造系统的基本词汇,以描述系统的边界在对词汇进行建模时通常需要判断哪些抽象是系统的一部分,哪些抽象位于系统边界之外。
对协作建模 协作是一些协同工作的类、接口和其他元素的共同体,其中元素协作时的功能强于它们单独工作时的功能之和系统分析员可以用类图描述图形化系统中的类及它们之间的关系 对数据库模式建模 在很多情况下,都需要在关系数据库中存储永久信息,这时,可以使用类图对数据库模式进行建模图3-1是一个类图示例,举此例的目的在于使读者对类图有一个直观浅显的了解,并起到一个引导作用,下面要介绍的内容将会逐步澄清你在看到这幅图时遇到的疑惑 类图示例通过分析用例和问题域,可以建立系统中的类,然后再把逻辑上相关的类封装成包,这样就可以直观清晰地展现出系统的层次关系3.1.2 类及类的表示类是构成类图的基础,也是面向对象系统组织结构的核心要使用类图,需要了解类和对象之间的区别类是对资源的定义,它所包含的信息主要用来描述某种类型实体的特征以及对该类型实体的使用方法对象是具体的实体,它遵守类制定的规则从软件的角度看,程序通常包含的是类的集合以及类所定义的行为,而实际创建信息和管理信息的是遵守类的规则的对象类定义了一组具有状态和行为的对象,这些对象具有相同的属性、操作、关系和语义其中,属性和关联用来描述状态属性通常用没有身份的数据值表示,如数字和字符串。
关联则用有身份的对象之间的关系来表示行为由操作来描述,方法是操作的 实现为了支持对身份、属性和操作的定义,UML规范采用一个具有3个预定义分栏的图标表示类,分栏中包含的信息有:名称、属性和操作,它们对应着类的基本元素,如图3-2所示当将类绘制在类图中时,名称分栏是必须出现的分栏,而属性分栏和操作分栏则可以出现或不出现图3-2显示了所有的分栏,另外3种形式如图3-3所示 类的3种预定义的分栏 表示类的几种形式当隐藏某个分栏时,并非表明某个分栏不存在;只显示当前需要注意的分栏可以使图形更加直观清晰类在它的包含者(可以是包或者另一个类)内必须有唯一的名称类对它的包含者来说是可见的,可见性规定了类能够怎样被位于可见者之外的类所使用类的多重性说明了类可以具有多少个实例,通常情况下,可以有0个或多个;关于类的多重性的概念,在本章后面会详细介绍下面将详细介绍类的名称、属性和操作在类图中的具体表示方法和含义1.名称类名采用黑体字书写在名称分栏的中部给类命名时最好能够反映类所代表的问题域中的概念,并且要清楚准确,不能含糊不清;类名通常表示为一个名词,既不带前缀,也不带后缀。
类名可分为简单名称和路径名称简单名称只有类名没有前缀;路径名称中可以包含由类所在包的名称表示的前缀,如图3-4所示类的简单名称和路径名称其中,Employee是类的名称,Person是Employee类所在包的名称2.属性类的属性,也称为特性,描述了类在软件系统中代表的事物(即对象)所具备的特性,这些特性是该类的所有对象所共有的对象可能有很多属性,在系统建模时,只抽取那些对系统有用的特性作为类的属性,通过这些属性可以识别该类的对象例如,可将姓名、出生年月、所在部门、职称等特性作为类Employee的属性从系统处理的角度来看,在事物的特性中,只有其值能被改变的那些才可以作为类的属性一个类可以有0个或多个属性在UML中,描述类属性的语法格式如下所示:[可见性] 属性名 [:类型] [=初始值] [{属性字符串}]在定义属性时,除了属性名之外,其他内容都是可有可无的,可以根据需要选用上面列出的某些项下面对以上格式中的各项进行解释位于属性名前面的是可见性可见性用于指定它所描述的属性能否被其他类访问,以及能以何种方式访问最常用的可见性类型有3种,分别为:公有(Public)、私有(Private)和被保护(Protected)类型。
被声明为Public的属性和操作可以在它所在类的外部被查看、使用和更新在类里被声明为Public的属性和操作共同构成了类的公共接口类的公共接口由可以被其他类访问及使用的属性和操作组成,这表示为公共接口是该类与其他类的联系的部分类的公共接口应尽可能减少变化,以防止任何使用该类的地方有不必要的改变对于是否应该声明为Public属性是有不同的观点的许多面向对象的设计者对Public属性存在抱怨,因为这会将类的属性向系统的其余部分公开,就违反了面向对象的信息隐蔽的原则因此,最好避免使用Public属性被声明为Protected的属性和操作可以被类的其他方法访问,也可以被任何相应继承类所声明的方法访问,但是非继承的类无法访问Protected属性和操作即使用Protected声明的属性和操作只可以被该类和该类的子类使用,而其他类无法使用Private可见性是限制最为严格的可见性类型,只有包含Private元素的类本身才能使用Private属性中的数据,或者调用Private操作除了以上3种类型的可见性之外,其他类型的可见性可由程序设计语言进行定义需要注意的是,公有和私有可见性一般在表达类图时是必需的。
在UML中,Public类型用符号“+”表示,Private类型用符号“–”表示,Protected类型用符号“#”表示如果在属性的左边没有标识任何符号,表明该属性的可见性尚未定义,而并非取了默认的可见性,在UML中并未规定默认的可见性这几种符号在类中的表示如图3-5、图3-6所示 可见性的表示 类变量的表示在上两图中,属性empNo、empBirth是类Employee的私有属性,empNumber是公有属性,empName是被保护的属性,这些属性的可见性是由它们的名字左边的符号指 定的在可见性的右边是属性名类的属性是类定义的一部分,每个属性都应有唯一的属性名,以标识该属性并以此区别其他属性属性名通常由描述所属类的特性的名词或名词短语表示按照约定,属性名用小写字母表示,当属性名需要使用多个单词时,要将这几个单词合并起来,并且从第二个单词起,每个单词的首字母都应是大写形式对于每个属性,都应为其指定所属的数据类型常用的数据类型有整型、实型、布尔型、枚举型等,这些类型在不同的编程语言中可能有不同的定义;可以在UML中使用目标语言中的类型表达式,这在软件开发的实施阶段是非常有用的。
除此之外,属性的数据类型还可以使用系统中的其他类或者用户自定义的数据类型在定义了类的属性之后,类的所有对象的状态由其属性的特定值所决定可以为属性设置初始值设置初始值可以防止因漏掉某些取值而破坏系统的完整性,并为用户提供易用性为Employee类的有关属性指定了数据类型和初始值后的图形化表示如图3-7所示如图3-7所示,属性和数据类型之间要用冒号分隔,数据类型与初始值之间用等号分隔,该图是使用Microsoft Visio画的,所以冒号和等号都是该软件自动添加的(本章中的其他模型图还有使用Rational Rose画的,这两种工具在使用时各有优缺点,读者可以根据不同的情况进行选用)描述类属性的语法格式中的最后一项是属性字符串属性字符串用来指定关于属性的其他信息,例如,某个属性应该是永久的可以把希望添加到属性的定义中但又找不到合适地方的规则放在属性字符串中除此之外,还有一种类型的属性,它能被所属类的所有对象共享,这就是类的作用域属性,或者叫做类变量(例如,Java类中的静态变量)这类属性在类图中表示时要在属性名的下面加一条下划线例如,将类Employee中的empNumber属性更改为类变量,可用图3-6中的形式表示。
这时,对属于Employee类的所有对象来说,empNumber的值都是一样的有时候属性代表一个以上的对象事实上,属性能代表其类型的任意数目的对象在程序设计时这样的属性用一个数组来实现这体现了面向对象中对象之间关联的多重性,多重性允许用户指定属性实际上代表一组对象集合,而且能够应用于内置属性及关联属性如图3-8所示,由于一个学生可以借阅多本图书,所以一个Student类对应了多个Book类 属性的数据类型和初始值 属性对应的多重性事实上当为类定义属性时,总是要使用类作为属性的数据类型例如,属性stuID其实质上是一个字符串对象3.操作属性仅仅描述了要处理的数据,而操作则描述了处理数据的具体方法类的操作是对其所属对象的行为的抽象,相当于一个服务的实现,且该服务可以由类的任何对象请求以影响其行为属性是描述对象特征的值,操作用于操纵属性或执行其他动作操 作可以看作是类的接口,通过该接口可以实现内、外信息的交互,操作的具体实现称为方法某类的操作只能作用于该类的对象一个类可以有0个或多个操作操作由返回值类型、名称和参数表进行描述在UML中,用于描述操作的语法形式为:[可见性] 操作名 [(参数表)] [:返回类型] [{属性字符串}]下面对该形式进行解释。
类中操作的可见性包括公有(Public)、私有(Private)、受保护(Pr。





