信息系统项目管理师考试辅导教程第3版第4章面向对象方法.docx
- 文档编号:6599842
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:27
- 大小:45.32KB
信息系统项目管理师考试辅导教程第3版第4章面向对象方法.docx
《信息系统项目管理师考试辅导教程第3版第4章面向对象方法.docx》由会员分享,可在线阅读,更多相关《信息系统项目管理师考试辅导教程第3版第4章面向对象方法.docx(27页珍藏版)》请在冰豆网上搜索。
信息系统项目管理师考试辅导教程第3版第4章面向对象方法
第4章面向对象方法
结构化分析和设计方法在一定葙度上缓解了“软件危机”。
但随着人们对软件提出的要求越来越高,结构化方法己经无法承担快速高效开发复杂软件系统的重任。
20世纪80年代逐渐成熟的面向对象方法学,使软件开发者对软件的分析、设计和编程等方面都有了全新的认识。
由于“对象”概念的引入,将数据和方法封装在一起,提高了模块的聚合度,降低了模块的耦合度,更大程度上支持了软件重用,从而十分有效地降低了软件的复杂度,提高了软件开发的生产率。
目前,面向对象方法学已成为软件开发者的第一选择。
根据考试大纲,本章要求考生掌握以下知识点:
•面向对象的基本概念;
•统一建模语言UML;
•可视化建模;
•面向对象系统分析;
•面向对象系统设计。
4.1面向对象的基本概念
为了讨论面向对象(Object-Oriented,00)的技术和方法,必须首先明确什么是“面向对象”?
为什么要讨论面向对象的方法?
什么是对象?
对于这些问题,有许多不同的看法。
其中Booch、Coad/Yourdon和Jacobson的方法在面向对象软件开发界得到了广泛的认可。
特别值得一提的是统一建模语言(UML,UnifiedModelingLanguage),该方法结合了Booch、OMT和Jacobson方法的优点,统一了符号体系,并从其他的方法和工程实践中吸收了许多经过实践检验的概念和技术。
PeterCoad和EdwardYourdon曾提出了下列等式:
面向对象=对象(Objects)+类(Classes)+继承(Inheritance)+消息通信(CommunicationwithMessages)
4.1.1对象与封装
对象(Object)是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。
面向对象的软件系统是由对象组成的,复杂的对象由比较简单的对象组合而成。
也就是说,面向对象方法学使用对象分解取代了传统方法的功能分解。
对象三要素:
对象标志、属性和服务。
对象标志(ObjectIdentifier),也就是对象的名字,供系统内部唯一地识别对象。
定义或使用对象时,均应指定对象标志。
属性(Attribute),也称状态(State)或数据(Data),用来描述对象的静态特征。
在某些面向对象的程序设计语言中,属性通常被称为成员变量(MemberVariable)或简称变量(Variable)。
服务(Service),也称操作(Operation)、行为(Behavior)或方法(Method)等,用来描述对象的动态特征。
在某些面向对象的程序设计语言中,服务通常被称为成员函数(MemberFunction)或简称函数(Function)。
封装(Encapsulation)是对象的一个重要原则。
它有两层含义:
第一,对象是其全部属性和全部服务紧密结合而形成的一个不可分割的整体;第二,对象是一个不透明的黑盒子,表示对象状态的数据和实现操作的代码都被封装在黑盒子里面。
使用一个对象的时候,只需知道它向外界提供的接口形式,无须知道它的数据结构细节和实现操作的算法。
从外面看不见,也就更不可能从外面直接修改对象的私有属性了。
4.1.2类与类库
类(class)是对象的抽象定义,是一组具有相同数据结构和相同操作的对象的集合。
类的定义包括一组数据属性和在数据上的一组合法操作。
类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。
类与对象是抽象描述与具体实例的关系,一个具体的对象被称为类的一个实例(Instance)。
它们都可使用类中提供的函数。
一个对象的状态则包含在它的实例变量中。
从物理特征上来看,类库和传统例程库是类似的,它们都是一种预先定义的程序库。
类库是一种预先定义的程序库,它以程序模块的形式,按照类层次结构把一组类的定义和实现组织在一起。
较上层的类代表了较一般的事物,相反,较下层的类代表了较具体的事物,很好地体现了面向对象机制的继承性、重载等许多特征。
类属类(GenericClass)仅描述了适用于一组类型的通用样板,由于其中所处理对象的数据类型尚未确定,因而程序员不可用类属类直接创建对象实例,即一个类属类并不是一种真正的类类型。
类属类必须经过实例化后才能成为可创建对象实例的类类型。
类属类的实例化是指用某一数据类型替代类属类的类型参数。
类属类定义中给出的类型参数称为形式类属参数,类属类实例化时给出的类型参数称为实际类属参数。
如果类属类实例化的实际类属参数可以是任何类型,那么这种类属类称为无约束类属类。
然而在某些情况下,类属类可能要求实际类属参数必须具有某些特殊的性质,以使得在类属类中可应用某些特殊操作,这种类属类称为受约束类属类。
类属类对类库的建设提供了强有力的支持。
4.1.3继承与多态
继承(Inheritance)是使用已存在的定义作为基础建立新定义的技术,继承是面向对象方法学中的一个十分重要的概念。
新类的定义可以是现存类所声明的数据、定义与新类所增加的声明的组合。
新类复用现存类的定义,而不要求修改现存类。
因为这种类的一部分已经实现和测试,故开发费用较少。
现存类可当作父类(泛化类、基类或超类)来引用,则新类相应地可当作子类(特化类、子女类或派生类)来引用。
在面向对象技术中,多态考虑的是类与类之间的层次关系,以及类自身内部特定成员函数之间的关系问题,是解决功能和行为的再抽象问题。
多态是指类中具有相似功能的不同函数是用同一个名称来实现,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数。
这也是人类思维方式的一种直接模拟,比如一个对象中有很多求两个数最大值的行为,虽然可以针对不同的数据类型,写很多不同名称的函数来实现,但事实上,它们的功能几乎完全相同。
这时,就可以利用多态的特征,用统一的标志来完成这些功能。
这样,就可以达到类的行为的再抽象,进而统一标志,减少程序中标志符的个数。
严格地说,多态性可分为四类,分别为过载多态(重载多态),强制多态,包含多态和参数多态,其中前两种统称为专用多态(特定多态),后面两种称为通用多态。
包含多态是研究类族中定义于不同类中的同名成员函数的多态行为,主要是通过虚函数来实现。
包含多态最常见的例子就是子类型化,即一个类型是另一类型的子类型。
参数多态的应用比较广泛,被称为最纯的多态。
这是因为同一对象、函数或过程能以一致的形式用于不同的类型。
参数多态与类属(类模板)相关联,类属是一个可以参数化的模板,其中包含的操作所涉及的类型必须用类型参数实例化。
这样,由类模板实例化的各类都具有相同的操作,而操作对象的类型却各不相同。
过载多态是同一算子(操作符、函数名等)被用来表示不同的功能,通过上下文以决定一个算子所代表的功能,即通过语法对不同语义的对象使用相同的算子,编译能够消除这一模糊。
强制多态是通过语义操作把一个变元的类型加以变换,以符合一个函数的要求,如果不做这一强制性变换将出现类型错误。
类型的变换可在编译时完成,通常是隐式地进行,当然也可以在动态运行时来做。
从实现的角度来看,多态可划分为两类,分别是编译时的多态和运行时的多态。
前者是在编译的过程中确定了同名操作的具体操作对象,而后者则是在程序运行过程中才动态地确定操作所针对的具体对象。
这种确定操作的具体对象的过程就是联编(编联,束定或绑定)。
联编是指计算机程序自身彼此关联的过程,也就是把一个标志符名和一个存储地址联系在一起的过程。
用面向对象的术语讲,就是把一条消息和一个对象的方法相结合的过程。
按照联编进行的阶段的不同,可以分为两种不同的联编方法,分别为静态联编和动态联编,这两种联编过程分别对应着多态的两种实现方式。
联编工作在编译连接阶段完成的情况称为静态联编。
因为联编过程是在程序开始执行之前进行的,因此有时也称为早期联编或前联编。
在编译和连接过程中,系统就可以根据类型匹配等特征确定程序中操作调用与执行该操作代码的关系,其确定了某一个同名标志到底是要调用哪一段程序代码。
有些多态类型,其同名操作的具体对象能够在编译、连接阶段确定,通过静态联编解决,比如过载,强制和参数多态等。
与静态联编相对应,联编工作在程序运行阶段完成的情况称为动态联编,也称为晚期联编或后联编。
在编译、连接过程中无法解决的联编问题,要等到程序开始运行之后再来确定,包含多态的操作对象的确定就是通过动态联编完成的。
4.1.4消息通信
消息(Message)是指向对象发出的服务请求,它应该含有下述信息:
提供服务的对象标志、消息名、输入信息和回答信息。
对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须发消息请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。
消息通信(CommunicationwithMessages)也是面向对象方法学中的一条重要原则,它与对象的封装原则密不可分。
封装使对象成为一些各司其职、互不干扰的独立单位;消息通信则为它们提供了唯一合法的动态联系途径,使它们的行为能够互相配合,构成一"t'有机的系统。
只有同时使用对象、类、继承与消息通信,才是真正面向对象的方法。
4.1.5面向对象方法学的优点
与面向过程相比,面向对象方法学具有以下优点。
(1)与人类习惯的思维方法一致:
面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使软件开发的方法与过程尽可能接近人类认识世界解决问题的方法与过程,,也就是使描述问题的“问题域”与解决问题的“解域”在结构上尽可能一致。
(2)稳定性好:
传统的软件开发方法基于功能分析与功能分解,软件结构紧密依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。
由于用户需求变化大部分是针对功能的,因此这样的系统是不稳定的。
面向对象的方法用对象模拟问题域中的实体,以对象为中心构造软件系统,当系统的功能需求变化时并不会引起软件结构的整体变化。
由于现实世界中的实体是相对稳定的,因此以对象为中心构造的软件系统也是比较稳定的。
(3)可重用性好:
面向对象方法学在利用可重用的软件成分构造新的软件系统时有很大的灵活性。
继承机制与多态性使得子类不仅可以重用其父类的数据结构与程序代码,并且可以方便地修改和扩充,而这种修改并不影响对原有类的使用。
(4)较易开发大型软件产品:
由于用面向对象方法学开发软件时,构成软件系统的每个对象相对独立。
因此,可以把一个大型软件产品分解成一系列相互独立的小产品来处理。
这不仅降低了开发的技术难度,而且也使得对开发工作的管理变得容易多了。
(5)可维护性好:
面向对象的软件比较容易理解、容易修改、容易测试。
4.2UML概述
在20世纪的80〜90年代,面向对象的分析与设计(OOA&D)方法获得了长足的发展,而且相关的研究也十分活跃,涌现了一大批新的方法学。
其中最著名的是Booch的Booch1993、Jacobson的OOSE和Rumbaugh的OMT方法。
而UML正是在融合了Booch、Rumbaugh和Jacobson方法论的基础上形成的标准建模语言。
4.2.1UML是什么
UML(UnifiedModelingLanguage,统一建模语言)是用于系统的可视化建模语言,尽管它常与建模00软件系统相关联,但由于其内建了大量扩展机制,还可以应用于更多的领域中,例如工作流程、业务领域等。
(1)UML是一种语言:
UML在软件领域中的地位与价值就像“1、2、3、+、-、…”等符号在数学领域中的地位一样。
它为软件开发人员之间提供了一种用于交流的词汇表,一种用于软件蓝图的标准语言。
(2)UML是一种可视化语言:
UML只是一组图形符号,它的每个符号都有明确语义,是一种直观、可视化的语言。
(3)UML是一种可用于详细描述的语言:
UML所建的模型是精确的、无歧义和完整的,它适合于对所有重要的分析、设计和实现决策进行详描述。
(4)UML是一种构造语言:
UML虽然不是一种可视化的编程语言,但其与各种编程语言直接相连,而且有较好的映射关系,这种映射允许进行正向工程、逆向工程。
(5)UML是一种文档化语言:
它适合于建立系统体系结构及其所有的细节文档。
4.2.2UML的发展历史
面向对象建模语言,最早出现于20世纪70年代中期,而在20世纪80年代末开始进入快速发展阶段,截止到1994年,就从不到10种发展到50多种。
由于每种语言、方法的创造者都极力推崇自己的成果,于是爆发了“面向对象技术的方法大战”,也从此流传着一句戏言:
“方法学家和恐怖分子的差别在于,方法学家不能谈种。
”
而在1994年之后,各种方法论逐渐拉开了差距,以GradyBooch提出的Booch方法和JamesRumbaugh提出的OMT(ObjectModelingTechnique,对象建模技术)成为了可视化建模语言的主。
而IvarJacobson的Objectory方法则成为最强有力的方法。
Booch是面向对象方法最早的倡者之一。
他在1984年《Ad软件工程》(“SoftwareEngineeringwithAda”)一书中就描述了面向对象软件开发的基本问题。
1991年,他在《面向对象的设计》(“Object-OrientedDesign”)一书中,将以前针对Ad的工作扩展到整个面向对象设计领域。
他对继承和类的阐述特别值得借鉴。
Boochl993比较适合于系统的设计和构造。
Runbaugh等人提出了面向对象的建模技术(OMT),采用了面向对象的概念并引入各种独立于程序设计语言的表示符号。
这种方法用对象模型、动态模型、功能模型和用例模型共同完成对整个系统的建模,所定义的概念和符号可用于软件开发的分析、设计和实现的全过程,软件开发人员不必在开发过程的不同阶段进行概念和符号的转换。
OMT-2特别适用于分析和描述以数据为中心的信息系统。
Jacobson于1994年提出了面向对象软件工程(OOSE)的方法。
其最大特点是面向用例,并在用例的描述中引入了外部角色的概念。
用例的概念贯穿于整个开发过程(包括对系统的测试和验证),是精确描述需求的重要武器。
目前在学术界和工业界已普遍接受用例的概念,并认为是面向对象技术走向第二代的标志。
OOSE比较适合支持商务工程和需求分析。
面对众多的建模语言,首先,用户无力区分不同建模语言之间的差别和使用范围。
其次,各种建模语言其实各有长短。
第三,由于不同的用户使用不同的建模语言和不同建模语言表达方式上的差异,使得用户之间的沟通方面出现了困难。
要解决以上问题就必须在综合分析各种不同建模语言的优缺点及适用情况的基础上统一各种不同的建模语言。
1994年10月,GradyBooch和JimRumbaugh开始了这项工作。
首先他们将Booch1993和OMT-2统一起来,并于1995年10月发布了第一个公开版本称为标准方法UM0.8(UnifiedMethod)。
1995年秋,OOSE的创始IvarJacobson加盟到这项工作中,经过Booch、Rumbaugh和Jacobson三人的共同努力,于1996年6月和10月分别发布了两个新的版本(UML0.9和UML0.91),并将UM重新命为UML。
1996年,UML被OMG提议为00可视化建模语言的推荐标准,UML被提交。
1997年,OMG采纳了UML,—个开放的00可视化建模语言工业标准诞生了。
UML在经历了1.1、1.2和1.4三个版本的演变之后进行了一次大的调整,升级为2.0版标准。
目前UML的最新版是2010年11月发布的2.4版。
4.2.3UML结构
1.构造块
构造块也就是基本的UML建模兀素、关系和图。
(1)建模元素:
包括结构元素(类、接口、协作、用例、活动类、组件、节点等)、行业元素(交互、状态机)、分组元素(包)、注解元素。
(2)关系:
包括关联关系、依赖关系、泛化关系、实现关系。
(3)图:
在UML1.X中包括9种不同的图,当升级为2.x之后,增加至14种图。
分为表示系统静态结构的静态模型(包括类图、对象图、复合结构图、构件图、部署图、包图),以及表示系统动态结构的动态模型(包括用例图、活动图、状态机图、顺序图、通信图、定时图、交互概观图、制品图)。
2.公共机制
公共机制是指达到特定目标的公共UML方法,主要包括规格说明、修饰、公共分类和扩展机制四种。
(1)规格说明:
规格说明是元素语义的文本描述,它是模型真正的核心。
(2)修饰:
UML为每一个模型元素设置了一个简单的记号,还可以通过修饰来表达更多的信息。
(3)公共分类:
包括类元与实体(类元表示概念,而实体表示具体的实体)、接口和实现(接口用来定义契约,而是实现就是具体的内容)两组公共分类。
(4)扩展机制:
包括约束(添加新规则来扩展元素的语义)、构造型(用于定义新的UML建模元素)、标记值(添加新的特殊信息来扩展模型元素的规格说明)。
3.构架
UML对系统构架的定义是:
系统的组织结构,包括系统分解的组成部分、它们的关联性、交互、机制和指原则,这些提供系统设计的信息。
具体来说,是指五个系统视图。
(1)逻辑视图:
以问题域的语汇组成的类和对象集合。
(2)进程视图:
可执行线程和进程作为活动类的建模,它是逻辑视图的一次执行实例。
(3)实现视图:
对组成基于系统的物理代码的文件和组件进行建模。
(4)部署视图:
把组件物理地部署到一组物理的、可计算节点上。
(5)用例视图:
最基本的需求分析模型。
4.2.4UML的主要特点
UML统一了Booch、OMT、OOSE和其他面向对象方法的基本概念和符号,同时汇集了面向对象领域中很多人的思想,是从优秀的面向对象方法和丰富的计算机科学实践中总结而成的。
目前UML是最先进、实用的标准建模语言,而且还在不断发展进化之中。
UML是一种建模语言而不是一种方法,其中并不包括过程的概念,它本身是独立于过程的,可以在使用过程中使用它。
不过与UML结合最好的是用例驱动的、以体系结构为中心的、迭代的、增量的开发过程。
4.2.5UML的应用领域
作为一种标准建模语言,UML的核心是以面向对象的思想来描述客观世界,具有广阔的应用领域。
目前主要应用领域是在软件系统建模,但是它同样可以应用于其他领域,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。
总之,UML是一个通用的标准建模语言,可以对任何系统的动态行为和静态行为进行建模。
同时,标准建模语言UML可以对信息系统提供从需求分析到系统维护的整个生命周期提供有效的支持。
在需求分析阶段,可以通过用例模型来捕获和组织用户的需求,分析系统对于用户的价值。
通过用例建模,描述对系统感兴趣的外部角色及其对系统(用例)的功能要求。
分析阶段主要关心问题域中的主要概念(如抽象、类和对象等)和机制,以及这些概念之间的相互协作,并用UML类图来描述。
至于类之间的协作关系则可以用交互图和顺序图来描述。
在分析阶段,只对问题域的对象(现实世界的概念)建模,而不考虑定义软件系统中技术细节的类(如处理用户接口、数据库、通信和并行性等问题的类)。
由于这些技术细节将在设计阶段引入,因此设计阶段为构造阶段提供更详的规格说明。
编码阶段的主要任务是将设计阶段的设计结果转换成为实际的代码。
在设计阶段需要注意的是不要过早地考虑设计结果要用哪种编程语言实现。
如果过早地考虑这个问题,会使设计工作陷入细节的泥潭,不利于对模型进行全面理解。
标准建模语言UML还可以对测试阶段提供有效的支持。
不同的测试阶段可以使用不同的UML图作为测试的依据。
比如,在单元测试阶段,可以使用类图和类的规格说明来进行测试;在集成阶段,可以f用合作图,活动图和部署图;系统测试和验收测试阶段则可以使用顺序图和用例图来验证系统的外部行为。
总之,标准建模语言UML能够用面向对象的方法描述任何类型的系统,并对系统开发从需求调研到测试和维护的各个阶段进行有效的支持。
4.3UML的建模机制
UML是一个通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统的文档。
它记录了对必须构造的系统的决定和理解,可用于对系统的理解、设计、浏览、配置、维护和信息控制。
UML适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域,以及各种开发工具,UML是一种总结了以往建模技术的经验并吸收当今优秀成果的标准建模方法。
UML包括概念的语义,表示法和说明,提供了静态、动态、系统环境及组织结构的模型。
它可被交互的可视化建模工具所支持,这些工具提供了代码生成器和报表生成器。
UML标准并没有定义一种标准的开发过程,但它适用于迭代式的开发过程。
它是为支持大部分现存的面向对象开发过程而设计的。
UML不是一种可视化的编程语言,但是UML描述的模型可与各种编程语言直接相连,即可把用UML描述的模型映射成编程语言。
UML2.X中包括14种不同的图,分为表示系统静态结构的静态模型(包括类图、对象图、复合结构图、构件图、部署图、包图),以及表示系统动态结构的动态模型(包括用例图、活动图、状态机图、顺序图、通信图、定时图、交互概观图、制品图)。
4.3.1用例图
用例实例是在系统中执行的一系列动作,这些动作将生成特定参与者可见的价值结果。
一个用例定义一组用例实例。
它确定了一个和系统参与者进行交互、并可由系统执行的动作序列。
用例模型描述的是外部执行者(Actor)所理解的系统功能。
用例模型用于需求分析阶段,它的建立是系统开发者和用户反复讨论的结果,表明了开发者和用户对需求规格达成的共识。
在UML中,用例表示为一个椭圆。
图4-2显示了一个个图书管理系统的用例图。
其中,“新增书籍信息”、“查询书籍信息”、“修改书籍信息”、“登记外借情况”、“查询外借情况”、“统计金额与册数”等都是用例的实例。
1.参与者
参与者(Actor)代表与系统接口的任何事物或人,它是指代表某一种特定功能的角色,参与者都是虚拟的概念。
在UML中,用一个小表示参与者。
图4-2中的“图书管理员”就是参与者。
对于该系统来说,可以充当图书管理员角色的可能有多个人,由于他们对于系统而言均起着相同的作用,扮演相同的角色,因此只使用一个参与者表示。
切忌不要为每一个可能与系统交互的真画出一个参与者。
可以通过以下问题来帮助你寻找到系统的相关参与者。
•谁是系统的主要用户?
•谁从系统获得信息?
•谁向系统提供信息?
•谁从系统删除信息?
•谁支付、维护系统?
•谁管理系统?
•系统需要与哪些其他系统交互?
•系统需要操纵哪些硬件?
•在预设的时间内,有事情自动发生吗?
•系统从哪里获得信息?
•谁对系统的特定需求感兴趣?
•几个人在扮演同样的角色吗?
•一个扮演几个不同的角色吗?
•系统使用外部资源吗?
•系统用在什么地方?
2.用例
用例(UseCase)是对系统行为的动态描述,它可以促进设计人员、开发人员与用户的沟通,理解正确的需求,还可以划分系统与外部实体的界限,是系统设计的起点。
在识别出参与者之后,可以使用下列问题帮助识别用例:
•每个参与者的任务是什么?
•有参与者将要创建、存储、修改、删除或读取系统中的信息吗?
•什么用例会创建、存储、修改、删除或读取这个信息吗?
•参与者需要通知系统外部的突然变化吗?
•需要通知参与者系统中正在发生的事情吗?
•什么用例将支持和维护系统?
•所有的功能需求都对应到用例中了吗?
•系统需要何种输入输出?
输入从何处来?
输出到何处?
•当前运行系统的主要问题是什么?
3.包含和扩展
两个用例之间的关系可以主要概括为两种情况。
一种是用于重用的包含关系,用构造型《include»表示;另一种是用于分离出不同的行为,用构造型《extend》表示。
(1)包含关系:
当你可以从两个或两
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息系统 项目 管理 考试 辅导 教程 面向 对象 方法