第8章 面向对象方法学引论

第8章 面向对象方法学引论
第8章 面向对象方法学引论

第8章面向对象方法学引论

本章介绍

面向对象方法学引论;面向对象分析;面向对象设计;面向对象实现

8.1面向对象方法学

面向对象方法学的出发点和基本原则是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程。

8.1.1面向对象方法学概述

1、什么是面向对象的开发方法(OO)?

面向对象(Object-Oriented,缩写为OO)方法的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。

2、面向对象方法学的四个基本要点:

(1)认识世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。

(2)把所有对象都划分成各种对象类,每个对象类都定义了一组数据和一组方法。

(3)按照子类与父类的关系,把若干个对象类组成一个层次结构的系统。

(4)对象彼此之间只能通过传递消息互相联系。

通过上述四个基本要点,可以这样理解面向对象:

面向对象=对象+类+继承+通信(基于消息)

(1)与人类习惯的思维方法一致:传统的程序设计方法以算法为核心,把数据和过程作为相互独立的部分,忽略了数据和操作之间的内在联系。而面向对象的软件技术以对象为核心,开发出的软件系统由对象组成,使用现实世界的概念抽象地思考问题从而自然地解决问题。

(2)稳定性好:系统的功能需求变化时不会引起软件结构的整体变化,往往仅需要作一些局部性的修改。

(3)可重用性好:对象是比较理想的模块和可重用的软件成分。

(4)较易开发大型软件产品:可以把一个大型软件产品分解成一系列相互独立的小产品来处理

(5)可维护性好:易于理解、修改、测试

二、与对象相关的概念

1. 类(class):对具有相同数据和相同操作的一组相似对象的定义(对具有相同属性和行为的一个或多个对象的描述)

2. 实例(instance):由某个特定的类所描述的一个具体的对象(是对具有相同属性和行为的一组的对象的抽象,类在现实世界中并不能真正存在),如:地球上并没有抽象的中国人。

3. 消息(message):是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。

4. 方法(method):是对象所能执行的操作,也就是类中所定义的服务。

5. 属性(attribute) :类中所定义的数据,它是对客观世界实体所具有的性质的抽象

6. 封装(encapsulation):把数据和实现操作的代码集中起来放在对象内部。

们。

8. 多态性(polymorphism):指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。

9. 重载(overloading):有两种函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一个运算符可以施加不同类型的操作数上面。

8.3面向对象建模

众所周知,在解决一个问题之前,首先要理解所要解决的问题,对问题理解越好越容易解决。基于此,人们常常采用建立问题的模型的方法来解决。所谓建模就同为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。

面向对象方法开发软件通常需要建立3种形式的模型:

描述系统数据结构的对象模型

描述系统控制结构的动态模型

描述系统功能的功能模型

上述三种模型都涉及到数据、控制和操作等共同的概念。一个典型的软件系统组合了这三个方面的内容:它使用数据结构(对象模型)执行操作(动态模型),并且完成数据值的变化(功能模型)

这三种模型中,对象模型始终是最重要、最基本、最核心的一种模型。下面分别对三种模型进行介绍:

一、对象模型

对象模型表示静态的、结构化的系统的“数据”性质,它是对模拟客观世界

象模型需要定义一组图形符号,并且规定一组组织这些符号以表示特定语义规则。最常用的统一建模语言(Unified Modeling Language, UML),UML 是一种基于面向对象的可视化图形建模语言,用于对软件系统进行说明、构造和文档建立。下面简单介绍UML的类图。

1、类图的基本符号

类图是描述类及类与类之间的静态关系,是一种静态模型,它是创建其他UML图的基础。一个系统可以由多张类图来描述,一个类也可以出现在几张类图中。

(一)定义类:UML中为长方形,用两条横线把长方形分成三个部分,分别放类的名字、属性和服务,如右图所示。

(二)定义属性:

UML中描述属性的语法格式如下:

可见性属性名:类型名=初值{性质串}

属性的可见性即可访问性一般有三种:公有的(+)、私有的(-)和保护的(#)。

如:学生类的学号属性描述:-学号:string=“2006040000”

(三)定义服务:

描述语法格式为:可见性操作名(参数表):返回值类型(性质串)

2、表示关系的符号

前面我们知道,类图由类及类与类之间的关系组成,定义了类之后可以定义类之间的各种关系,类与类之间的关系有:关联、泛化(继承)、依赖和细化4种。

关联是类之间的连接,是涉及此关联的那些类的对象之间的语义连接(链接)。如下图描述了作家与计算机之间的使用与被使用的关联。

(1)普通关联

普通关联是常见的一种关联关系,

只要在类与类之间存在连接关系就可以用普通关联表示。

在表示关联的直线两端可以写上重数,它表示该类有多少个对象与对方的一个对象连接。重数的表示方法通常有:

0..1表示0到1个对象;0..*或*表示0到多个对象;1+或1..*表示1到多个对象;1..15:表示1到15个对象;3表示3个对象。

如上图可知:一个作家可以使用1到多台计算机,一台计算机可被0到多个作家使用。

(2)递归关联:一个类与它本身有关联关系。

这里主要分析:关联的角色,在任何关联中都会涉及到参与此关联的对象所

扮演的角色,在某些情况下显示标明角色名有助于别人理解类图。

如右图为递归关联,

(3)限定关联:通常用在一对多或多对多的关联关系中。

如右图所示:

(二)聚集

聚集也称为集合,是关系的特例,表示类与类之间的关系是整体与部分的关系。聚集除一般类型的聚集之外,还有共享聚集与组合聚集。

(1)共享聚集

如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构

成,则该聚集称为共享聚集。如右图即为一个共享聚集。

(2)组合聚集

如果部分类完全隶属于整体类,部分与

整体共存,整体不存在后部分也会随之消失,则称为组成聚集。如下图所示。再如滑翔机由机翼、机身与机尾三部分组合,这也是组成聚合的例子。

(三)泛化

就是普通所说的继承关系,它是通用元素和具体元素之间的一种分类关系。具体元素拥有通用元素的信息,并且还可以附加一些其他信息。在UML中用一端空心三角形的连线表示泛化关系。它出可分为普通泛化和受限泛化两种。这里就不再举例说明。

(四)依赖和细化

(1)依赖关系

描述两个模型元素之间的语义连接关系:其中一个模型元素是独立的,另一个不是独立的,它依赖于独立的模型元素,若独立元素改变了,将影响依赖于它的元素。

(2)细化关系

当对同一事物在不同抽象层次上描述时,这些描述之间具有细化关系。

如两个元素A和B描述同一个事物,它们的区别在于抽象层次不同,如果B 是在A的基础上更加详细的描述,则称B细化了A或A细化成了B。

二、动态模型

表示瞬时的,行为化的系统的控制性质,它规定了对象模型中的对象的合法变化序列。

所有对象都具有自己的生命周期,对于一个对象来说,生命周期由许多阶段组成,在每个特定阶段中,都有知适合该对象的一组运行规律和行为规则用以规范该对象的行为,生命周期中的阶段也就是对象的状态。

所谓状态:是对对象属性值勤的一种抽象,状态有持续性。

有关状态图这里就不与细述。

三、功能模型

表示变化的系统的功能性质,它指明了系统应该做什么,因此更直接地反映了用户对目标系统的需求。

通常功能模型由一组数据流图组成。

用例模型描述的是外部行为者所理解的系统功能。它的建立是系统开发者和用户反复讨论的结果,描述了开发者与用户对需求规格所达成的共识。

用例图:一般来讲用例图包含模型元素有系统、行为者、用例及用例之间的关系。

如下图所示用例图:

自动售货机系统用例图

含扩展和使用关系的用例图

四、三种模型之间的关系

分别从不同侧面描述了所要开发的系统,三种模型互相补充,相互配合,使人们对系统能全方位的认识。对象模型定义了做事件的实体;功能模型指明了系统应该做什么;动态模型指明了什么时候做。

8.4小结

第6章面向对象方法学引论

第6章 面向对象方法学引论 教学提示:本章主要讲述面向对象方法学的优缺点;面向对象的基本概念:对象、类、实例、消息、方法、封装、继承、多态性和重载等;面向对象的软件工程:OOA、OOD、 OOP、OOT;面向对象的建模及对象模型、动态模型、功能模型;面向对象的开发方法。 教学要求:面向对象的基本概念,比较抽象,教学中要注意结合面向对象的高级语言举一些例子来更深刻地领会。本章难点是面向对象的概念及特征和面向对象的模型。掌握面向对象的基本概念及特征,面向对象的建模,面向对象的软件工程。了解面向对象方法学的定义和优点,面向对象的开发方法。 面向对象的软件开发方法在20世纪60年代后期首次提出,经过将近20年这种技术才逐渐得到广泛应用。到了20世纪90年代前半期,面向对象的软件工程方法学已经成为人们在开发软件时首选的范例。今天看来,面向对象技术似乎是最好的软件开发技术 6.1 面向对象方法学概述 面向对象的技术是当前计算机界所关心的重点,是目前软件发展的主流。面向对象的概念来自面向对象的程序设计语言,实际上,面向对象的概念和应用已经超越了程序设计语言,扩展到很宽的范围,如面向对象的数据库系统、面向对象的系统分析与设计、CAD 技术、人工智能以及其他广泛的应用范围。 6.1.1 面向对象方法的发展历程 面向对象的方法的研究正在引起全世界越来越强烈的关注和高度重视,被誉为“研究最新技术的好方法”。针对日趋复杂的软件需求的挑战,软件业界开始崇尚利用面向对象的方法和思想进行软件开发。 与人类发明史上的许多创举不同,面向对象不是瞬间出现的。面向对象不是某个人的突发奇想,而是许多人经历多年研究积累的产物。 面向对象的方法起源于面向对象的程序设计语言。在20世纪60年代中期Simula-67的设计者Dahl和Nygaard 提出对象(object)的概念,在程序设计语言中开始使用数据封装(data encapsulation)的概念。在20世纪70年代,Liskov使用抽象数据类型(ADT)的理论和实现有了重大的进展,奠定了面向对象的基础。Liskov最著名的研究成果是CLU语言,支持隐藏内部数据表示方法。从20世纪70年代起,Xerox公司的 Palo Alto 研究中心经过对Smalltak 72、74连续不断的研究、改革后,在1980年推出了Smalltalk-80,它在系统设计中强调对象概念的统一,引入对象、对象类、方法和实例等概念及术语,采用了动态联编及单继承机制,体现了面向对象方法的许多重要概念,对面向对象方法学的形成和发展起

面向对象的软件开发方法简介

1面向对象的软件开发方法简介 面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法具有以下优点。 ●把软件系统看成是各种对象的集合,这更接近人类的思维方式。 ●软件需求的变动往往是功能的变动,而功能的执行者——对象一般不会有大的变 换。这使得按照对象设计出来的系统结构比较稳定。 ●对象包括属性(数据)和行为(方法),对象把数据和方法的具体实现方式一起封 装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立性, 从而提高了软件的可维护性。 ●支持封装,抽象,继承和多态,提高了软件的可重用性,可维护性和可扩展性。 1.1 对象模型 在面向对象的分析和设计阶段,致力于建立模拟问题领域的对象模型。建立对象模型既包括自底向上的抽象过程,也包括自顶向下的分解过程。 1.自底向上的抽象 建立对象模型的第一步是从问题领域的陈述入手。分析需求的过程与对象模型的形成过程一致,开发人员与用户交谈是从用户熟悉的问题领域中的事物(具体实例)开始的,这就使用户和开发人员之间有了共同语言,使得开发人员能够彻底搞清用户需求,然后再建立正确的对象模型。开发人员需要进行以下自底向上的抽象思维。 ●把问题领域中的事物抽象为具有特定属性和行为的对象。 ●把具有相同属性和行为的对象抽象为类。 ●若多个类之间存在一些共性(具有相同属性和行为),把这些共性抽象到父类中。 再自底向上的抽象过程中,为了使子类能更好的继承父类的属性和行为,可能需要自顶向下的修改,从而使整个类体系更加合理。由于这类体系的构造是从具体到抽象,再从抽象到具体,符合人们的思维规律,因此能够更快,更方便的完成任务。 2.自顶向下的分解 再建立对象模型的过程中,也包括自顶向下的分解。例如对于计算机系统,首先识别出主机对象,显示器对象,键盘对象和打印机对象等。接着对这些对象再进一步分解,例如主机对象有处理器对象,内存对象,硬盘对象和主板对象组成。系统的进一步分解因有具体的对象为依据,所以分解过程比较明确,而且也相对容易。因此面向对象建模也具有自顶向下开发方法的优点,既能有效的控制系统的复杂性,又能同时避免结构化开发方法中功能分解的困难和不确定性。 1.1.2UML:可视化建模语言 面向对象的分析与设计方法,在20世纪80年代末至90年代中发展到一个高潮。但是,诸多流派在思想和术语上有很多不同的提法,对术语和概念的运用也各不相同,统一是继续发展的必然趋势。需要有一种统一的符号来描述在软件分析和设计阶段勾画出来的对象模型,UML(Unified Modeling Language,统一建模语言)应运而生。UML是一种定义良好,易于表达,功能强大且普遍适用的可视化建模语言。而采用UML语言的可视化建模工具是Rational 公司开发的Rational Rose。 1.2 面向对象开发中的核心思想和概念 在面向对象的软件开发过程中,开发者的主要任务就是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型,如何用程序代码来实现对象模型,并且保证软件系统的可重用性,可扩展性和可维护性呢?本节节主要阐述面向对象开发的核心思想和概念,这些核心思想为从事面向对象的软件开发实践提供理论武器。

面向对象技术引论(复习题)[参考解答]

《面向对象技术引论》复习题 一、概念与术语 1. 对象: 在现实世界中,对象定义为:问题的概念和抽象的或具有明确边界和意义的事物; 在数据世界中,对象定义为:一组数据以及施加于这组数据上的一组操作; 从系统的观点出发,我们可以给对象作如下定义:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位(单元),一个对象是由一组属性和对这组属性进行操作的一组服务构成的。 2.持久对象: 生存期可以超越程序的执行时间而长期存在的对象称为持久对象。换句话说:一个对象在程序运行结束后仍继续存在,则称该对象是持久的。 2.主动对象: 主动对象是一组属性和一组操作(服务)的封装体,其中至少有一个操作不需要接收消息就能主动执行(称为主动服务)。 3.被动对象: 被动对象(Passive object)是指其内部的操作需要通过外部消息驱动才能执行的对象。可以看出被动对象必须工作在消息驱动环境中。 4.类: 定义1 一组具有相同性质(属性和操作)的对象的抽象。 定义2 类是对一组具有相同属性、操作、关系和语义的对象的描述。 定义3 具有相同属性和容许操作的一组对象的一般描述称为类。 5.主动类: 主动类的对象至少拥有一个进程或线程,因此它能够自主执行(能够启动控制活动)。注意:主动类的对象所描述的元素的行为与其他元素的行为并发,这是它与一般类的唯一区别。6.接口: 接口是描述一个类或构件的一个服务的操作集。因此,接口描述元素的外部可见行为。接口描述了一组操作的规格,而不是操作的实现。图形上,用一个带有名称的圆表示接口。7.用况: 用况是对一组动作序列的描述,系统执行这些动作将产生一个对特定的参与者有价值而且可观察的结果。用况用于对系统语境和系统需求建模。图形上,用一个包含名称的实线椭圆表示用况。 8.协作: 协作定义了一个交互,它是由一组共同工作以提供某协作行为的角色和其他元素构成的一个群体,这些协作行为大于所有元素的各自行为的综合。因此协作有结构、行为和维度。图形上,用一个仅包含名称(协作名)的虚线椭圆表示协作。 9.构件: 构件是系统中物理的、可替代的部件,它遵循且提供一组接口的实现。构件是物理的、可替代的部件。 10.节点: 节点也是物理的,是在系统运行时存在的物理元素,它表示了一种可计算的资源,通常至少有一些记忆能力和处理能力。 11.一般类/ 12. 特殊类: 如果类A具有类B的全部属性和服务,而且具有自己特有的某些属性和服务,则类A叫做类B的特殊类,类B叫做的类A的一般类。两者之间的关系称为“泛化”。可以看出一般

常用的开发方法:结构化方法、原型法、面向对象方法

常用的开发方法:结构化方法、原型法、面向对象方法 常用的开发方法有:结构化方法、原型法、面向对象方法。 结构化方法:结构化方法是应用最为广泛的一种开发方法。按照信息系统生命周期,应用结构化系统开发方法,把整个系统的开发过程分为若干阶段,然后一步一步她依次进行,前一阶段是后一阶段的工作依据;每个阶段又划分详细的工作步骤,顺序作业。每个阶段和主要步骤都有明确详尽的文档编制要求,各个阶段和各个步骤的向下转移都是通过建立各自的软件文档和对关键阶段、步骤进行审核和控制实现的。它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。 以数据流图,数据字典,结构化语言,判定表,判定树等图形表达为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。 结构化方法方法具有如下特点。 (l)遵循用户至上原则。 (2)严格区分工作阶段,每个阶段有明确的任务和取

得的成果。 (3)强调系统开发过程的整体性和全局性。 (4)系统开发过程工程化,文档资料标准化。 该方法的优点是:理论基础严密,它的指导思想是用户需求在系统建立之前就能被充分了解和理解。由此可见,结构化方法注重开发过程的整体性和全局性。 该方法的缺点是:开发周期长;文档、设计说明繁琐,工作效率低;要求在开发之初全面认识系统的信息需求,充分预料各种可能发生的变化,但这并不十分现实;若用户参与系统开发的积极性没有充分调动,造成系统交接过程不平稳,系统运行与维护管理难度加大。 原型法:原型法的基本思想与结构化方法不同,原型法认为在很难一下子全面准确地提出用户需求的情况下,首先不要求一定要对系统做全面、详细的调查、分析,而是本着开发人员对用户需求的初步理解,先快速开发一个原型系统,然后通过反复修改来实现用户的最终系统需求。 是在投入大量的人力,物力之前,在限定的时间内,用最经济的方法开发出一个可实际运行的系统模型,用户在运行使用整个原型的基础上,通过对其评价,提出改进意见,对原型进行修改,统一使用,评价过程反复进行,使原型逐步完善,直到完全满足用户的需求为止。 适用范围:处理过程明确、简单系统;涉及面窄的小型系统

面向对象的建模方法

面向对象的建模方法 [摘要]评述面向对象的几种建模方法并作一比较,阐述统一建模语言的优越性,并对其组成、特征、建模过程进行描述。 [关键词]软件工程建模面向对象 一、引言 面向对象方法学也称为面向对象的开发方法,它属于软件工程的范畴。面向对象方法学的出发点和基本原则是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程接近人类认识世界解决问题的方法与过程。也就是说,面向对象方法是一种崭新的思维方法,它是把程序看作是相互协作而又彼此独立的对象的集合。由于对象的独立封装,模块的可构造性、可扩充性、可重用性也大大加强,从而面向对象的软件工程能够胜任当今大规模复杂、易变软件系统开发应用的要求。 面向对象的软件工程要求首先对系统建立模型是对现实的简化,它提供了系统的蓝图。一个好的模型只需抓住影响事物发展的主要矛盾,而忽略那些次要矛盾。每个系统可以从不同方面用不同的模型来描述。因而每个模型都是在语义上闭合的系统抽象。通过建模可以按照实际情况对系统进行可视化模型详细地说明了系统结构或行为,指导我们构造系统模板 二、面向对象建模方法 建模是构造软件系统最基本的步骤,在软件工程学科中提供了多种多样的建模方法和高效的工具,其目的是为了在软件开发过程的早期就发现设计中可能隐含的缺陷和错误,对于今日的大型软件系统,采用一种合适的建模方法,建立一个良好的模型是成功的关键。在市场上已有一些公司,如Rationa1,Cayenne,Platinum等开始提供商品化的建模工具,即通常所谓的CASE工具,使得建模过程实现了一定的自动化的标准化,并逐步走向实用,而这些工具的后面,便是具有不同特色的建模方法。 下面分析比较Booch,OMT,OOSE,UML等几种主要的面向对象的建模方法: (一)Booch方法 Booch方法是由Grady Booch提出的,是一种主要面向设计的方法,它通过二维图形来建立面向对象的分析和设计模型,强调设计过程的不断反复知道满足要求为止。Booch 方法特别注重对系统内对象之间相互行为的描述,注重可交流性和图示表达。但在方法学上并不注重严格的过程,既不推荐软件设计人员该做什么,只是指出了其可做的工作。Booch 方法把几类不同的图表有机地结合起来,以反映系统的各个方面是如何可相互联系而又相互影响的。这些图贯穿于逻辑设计到物理实现的开发过程中,包括类图、状态图、对象图、交互图、模块图和进程图。 (二)OMT方法 OMT(Object Modeling Technology对象建模技术)是由JamesRumbaugh 等人提出的。OMT方法包含了一整套的面向对象的概念和独立于语言的图示符号。它可用于分析问题需求,设计问题的解法以及用程序设计语言或数据库来实现这个解法。OMT方法用一致的概念和图示贯穿于软件开发的全过程,这样软件开发人员不必在每一开发阶段便换新的表示方法。 OMT方法从对象模型、动态模型、功能模型3个不同但又相关的角度来进行系统建模。这3个角度各自用不同的观点抓住了系统的实质,全面地反映了系统的需求。其中,对象模型表示了静态的、结构化的系统数据性质,动态模型表示了瞬时的、行为化的系统的控制性质,功能模型则表示了变化的系统的功能性质。在软件开发的周期中,这3种模型都在逐渐发展:在分析阶段,构造出不考虑最终设计的应用域模型;在设计阶段,求解域的结构被

比较四种典型面向对象方法的异同

普 通 本 科 毕 业 小 论 文 题目:比较四种典型面向对象方法的异同 学院软件与通信工程学院 学生姓名张伟聪学号 0123992 专业软件工程届别 125 指导教师廖汉成 二O一四年九月二十七日

一、引言 随着计算机科学的发展和应用领域的不断扩大,对计算机技术的要求越来越高。特别是当计算机硬件有了飞速发展之后,各种应用领域对软件提出了更高的要求。结构化程序设计语言和结构化分析与设计已无法满足用户需求的变化。发展软件质量,缩短软件开发周期,发展软件可靠性、可扩充性和可重用性迫使软件界人士不断研究新方法、新技术,探索新途径。 面向对象的方法是一种分析方法、设计方法和思维方法。面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。其基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。面向对象程序设计方法起源于六十年代末期的语言SIMULA’67,到了七十年代末期,软件行业正受到软件危机的困扰,结构化的开发方法不能够很好地解决软件危机。面向对象语言Smalltalk的出现,进一步发展和完善了面向对象的程序设计语言,从此面向对象也和开发方法开始结合,出现了面向对象的开发方法。 自80年代后期以来,相继出现了多种面向对象开发方法,现将其中四种典型的方法作一个简介和比较。面向对象方法都支持三种基本的活动:识别对象和类,描述对象和类之间的关系,以及通过描述每个类的功能定义对象的行为。 一.Booch方法 Booch是面向对象方法最早的倡导者之一,他提出了面向对象软件工程的概念。1991年,他将以前面向Ada的工作扩展到整个面向对象设计领域。Booch方法的开发模型包括静态模型和动态模型,静态模型分为逻辑模型和物理模型,描述了系统的构成和结构,动态模型分为状态图和时序图。该方法对每一步都作了详细的描述,描述手段丰富、灵活。不仅建立了开发方法,还提出了设计人员的技术要求,不同开发阶段的资源人力配制。OOD[3](Object Oriented Design)方法是Grady Booch从1983年开始研究,1991年后走向成熟的一种方法。OOD主要包括下述概念:类(class)、对象(object)、使用(uses)、实例化(instantiates)、继承(inherits)、元类(meta class)、类范畴(class category)、消息(message)、域(field)、操作(operation)、机制(mechanism)、模块(module)、子系统(subsystem)、过程(process)等。其中,使用及实例化是类间的静态关系,而动态对象之间仅有消息传递的连接。元类是类的类。类范畴是一组类,它们在一定抽象意义上是类同的。物理的一组类用模块来表达。机制是完成一个需求任务的一组类构成的结构。 Booch方法的过程包括以下步骤: (1)在给定的抽象层次上识别类和对象; (2)识别这些对象和类的语义; (3)识别这些类和对象之间的关系; (4)实现类和对象;

传统方法学与面向对象区别

小议传统方法学与面向对象的区别 姓名:戴育兵 学号:G1030510 年级 :大二 班级: .net(2)班

摘要 传统的软件工程方法学曾经给软件产业带来巨大进步,部分地缓解了软件危机,使用这种方法学开发的许多中、小规模软件项目都获得了成功。但是,人们也注意到当把这种方法学应用于大型软件产品的开发时,似乎很少取得成功。 在20世纪60年代后期出现的面向对象编程语言Simdla_67中首次引入了类和对象的概念,自20世纪80年代中期起,人们开始注重面向对象分析和设计的研究,逐步形成了面向对象方法学。到了20世纪90年代,面向对象方法学已经成为人们在开发软件时首选的范型。面向对象技术已成为当前最好的软件开发技术。

软件工程传统方法学 1.传统方法学概述 随着计算机应用领域的不断拓广,各种各样的问题也不断涌现,当问题严重到开发人员无法控制的时候便产生了软件危机。软件危机的出现,促使了软件工程学的形成和发展。随之整合整套技术的软件工程方法学广泛应用,主流之一就是传统方法学。传统方法学在软件开发过程中占据相当大的比重,因为其悠久的历史而为很多软件工程师青睐。如果说自然语言和编程语言之间有一道难以跨越的鸿沟,传统方法学就是跨越这道鸿沟的桥梁。 传统方法学又称生命周期方法学或结构化范型。一个软件从开始计划起,到废弃不用止,称为软件的生命周期。在传统的软件工程方法中,软件的生存周期分为需求分析、总体设计、详细设计、编程和测试几个阶段。 传统方法学使用的是结构化分析技术来完成需求分析阶段的工作。软件工程学中的需求分析具有两方面的意义。在认识事物方面,它具有一整套分析、认识问题域的方法、原则和策略。这些方法、原则和策略使开发人员对问题域的理解比不遵循软件工程方法更为全面、深刻和有效。在描述事物方面,它具有一套表示体系和文档规范。但是,传统的软件工程方法学中的需求分析在上述两方面都存在不足.它在全局范围内以功能、数据或数据流为中心来进行分析。这些方法的分析结果不能直接地映射问题域,而是经过了不同程度的转化和重新组合。因此,传统的分析方法容易隐蔽一些对问题域的理解偏差,与后续开发阶段的衔接也比较困难。 在总体设计阶段,以需求分析的结果作为出发点构造出一个具体的系统设计方案,主要是决定系统的模块结构,以及模块的划分,模块间的数据传送及调用关系。详细设计是在总体设计的基础上考虑每个模块的内部结构及算法,最终将产生每个模块的程序流程图。但是传统的软件工程方法中设计文档很难与分析文档对应,原因是二者的表示体系不一致,所谓从分析到设计的转换,实际上并不存在可靠的转换规则,而是带有人为的随意性,从而很容易因理解上的错误而留下隐患。 编程阶段是利用一种编程语言产生一个能够被机器理解和执行的系统,测试是发现和排除程序中的错误,最终产生一个正确的系统。但是由于分析方法的缺陷很容易产生对问题的错误理解,而分析与设计的差距很容易造成设计人员对分析结果的错误转换,以致在编程时程序员往往需要对分析员和设计人员已经认识过的事物重新进行认识,并产生不同的理解。因此为了使两个阶段之间能够更好的衔接,测试就变得尤为重要。 软件维护阶段的工作,一是对使用中发生的错误进行修改,二是因需求发生了变化而进行修改。前一种情况需要从程序逆向追溯到发生错误的开发阶段。由于程序不能映射问题以及各个阶段的文档不能对应,每一步追溯都存在许多理解障碍。第二种情况是一个从

三种面向对象方法

三个著名的面向对象开发方法

摘要 主要介绍了3种典型的面向对象开发方法,并对它们进行了比较。面向对象的方法是一种分析方法、设计方法和思维方法。面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。 关键字:面向对象;开发方法;OMT;BOOCH;JACOBSON; 1.引言 面向对象的方法是一种分析方法、设计方法和思维方法。面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。其基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。 面向对象程序设计方法起源于六十年代末期的simnia语言.Smalltalk语言的出现,进一步发展和完善了面向对象的程序设计语言,从此面向对象与开发方法开始结合,出现 了面向对象的开发方法.自80年代后期以来,相继出现了多种面向对象开发方法,现将其中几种典型的方法作一比较分析. 2.三种典型的面向对象开发方法 2.1 OMT/Rumbaugh OMT(Object Modeling Technique)方法提出于1987年,曾扩展应用于关系数据库设计.1991年Jim Rumbaugh正式把OMT应用于面向对象的分析和设计.这种方法是在 实体关系模型上扩展了类、继承和行为而得到的.OMT覆盖了分析、设计和实现3个阶段,包括一组相互关联的类(class )、对象(object)、一般化(generalization)、继承(inheritance)、链(link)、链属性(link attribute)、聚合(aggregation)、操作(operation)、事件(event)、场景(scene)、属性(attribute)、子系统(subsystem)、模块(module)等概念. OMT方法把分析时收集的信息构造在3种模型中,这些模型贯穿于每个步骤,在每个步骤中被不断地精化和扩充.对象模型用ER图描述问题域中的列象及其相互关系,用类和关系来刻画系统的静态结构,包括系统中的对象、对象之间的关系、类的属性和操作等特征.动态模型用事件和对象状态来刻画系统的动态特性,包括系统对象的事件序列、状态和操作.功能模型按照对象的操作来描述如何从输入给出输出的结果,描述动态模型的动作所定义对象操作的意义。 OMT方法包含分析、系统设计、对象设计和实现4个步骤,它定义了3种模型,这些模型贯穿于每个步骤,在每个步骤中被不断地精化和扩充。这3种模型是:对象模型,用类和关系来刻画系统的静态结构;动态膜型,用事件和对象状态来刻画系统的动态特性;功能模型,按照对象的操作来描述如何从输人给出输出结果。分析的目的是建立可理解的现实世界模型。系统设计确定高层次的开发策略。对象设计的目的是确定对象的细节,包括定义对象的界面、算法和操作。实现对象则在良好的面向对象编程风格的编码原则指导下进行。 开发的四个阶段如下: (1)分析。基于问题和用户需求的描述,建立现实世界的模型。分析阶段的产物有: ●问题描述 ●对象模型=对象图+数据词典 ●动态模型=状态图+全局事件流图 ●功能模型=数据流图+约束 (2)系统设计。结合问题域的知识和目标系统的系统结构(求解域),将目标系统

面向对象方法学概述资料

9.1 面向对象方法学概述 9.2 面向对象的概念 9.3 面向对象建模 9.4 对象模型 9.5 动态模型 9.6 功能模型 9.7 3种模型之间的关系 传统的软件工程方法学曾经给软件产业带来巨大进步,部分地缓解了软件危机,使用这种方法学开发的许多中、小规模软件项目都获得了成功。但是,人们也注意到当把这种方法学应用于大型软件产品的开发时,似乎很少取得成功。 在20世纪60年代后期出现的面向对象编程语言Simula-67中首次引入了类和对象的概念,自20世纪80年代中期起,人们开始注重面向对象分析和设计的研究,逐步形成了面向对象方法学。到了20世纪90年代,面向对象方法学已经成为人们在开发软件时首选的范型。面向对象技术已成为当前最好的软件开发技术。 9.1 面向对象方法学概述 9.1.1 面向对象方法学的要点 面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。 面向对象方法学所提供的“对象”概念,是让软件开发者自己定义或选取解空间对象,然后把软件系统作为一系列离散的解空间对象的集合。应该使这些解空间对象与问题空间对象尽可能一致。这些解空间对象彼此间通过发送消息而相互作用,从而得出问题的解。也就是说,面向对象方法是一种新的思维方法,它是把程序看作是相互协作而又彼此独立的对象的集合。

概括地说,面向对象方法具有下述4个要点: (1) 认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。按照这种观点,可以认为整个世界就是一个最复杂的对象。因此,面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。 由此可见,面向对象方法用对象分解取代了传统方法的功能分解。 (2) 把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。因此,每当建立该对象类的一个新实例时,就按照类中对数据的定义为这个新对象生成一组专用的数据,以便描述该对象独特的属性值。 (3) 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承(inheritance)。 (4) 对象彼此之间仅能通过传递消息互相联系。对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须发消息请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。 重点:如果仅使用对象和消息,则这种方法可以称为基于对象的(object-based)方法,而不能称为面向对象的方法;如果进一步要求把所有对象都划分为类,则这种方法可称为基于类的(class-based)方法,但仍然不是面向对象的方法。只有同时使用对象、类、继承和消息的方法,才是真正面向对象的方法。 9.1.2 面向对象方法学的优点 1. 与人类习惯的思维方法一致 2. 稳定性好 3. 可重用性好(重点) 用已有的零部件装配新的产品,是典型的重用技术,例如,可以用已有的预制件建筑一幢结构和外形都不同于从前的新大楼。重用是提高生产率的最主要的方法。

面向对象技术引论(复习题带术语题答案)

一、概念与术语 1. 对象:(1)从现实世界:问题的概念和抽象的或具 有明确边界和意义的事物 (2)从数据世界:一组数据以施加在这组数据上的一组操作 (3)从系统观点:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,一个对象是由一组属性和对整个属性进行操作的一 组服务构成的。(P19) 2.持久对象:生存期可以超越程序的执行时间而长 期存在的对象。(P24) 2.主动对象(3种解释):(1)一个能够启动消息传 递的对象。(2)一个能为其他对象提供服务的对象,能被拷贝成代理,并且需要并发控制。(3)其方法(操 作)由自身状态的改变而激活。(P25) 3.被动对象:其内部的操作需要通过外部消息驱动 才能执行的对象。(P25) 4. 类:一组具有相同性质(属性和操作)的对象的 抽象。(P20) 5. 主动类:主动类的对象至少拥有一个进程或线程, 因此它能够自主执行(P65) 6. 接口:描述一个类或构件的一个服务的操作集 (P64) 7. 用况:用况是对业务过程所包含的一组动作序列的 描述,系统执行这些动作将产生一个对特定的参与者 有价值且可观察的结果。(P42) 8. 协作:协作定义了一个交互,它是由一组共同工作 以提供某协作行为的角色和其他元素构成的一个群 体,这些协作行为大于所有元素的各自行为的综合 (P64) 9. 构件:构件是系统中物理的、可替代的部件,它遵 循且提供一组接口的实现。(P65) 10. 节点:节点也是物理的,是在系统运行时存在的 物理元素,它表示了一种可计算的资源,通常至少有 一些记忆能力和处理能力。(P65) 11. 一般类和12. 特殊类:如果类A具有类B的全部 属性和服务(操作),而且具有自己特有的某些属性 和服务,则类A叫做类B的特殊类,B叫做A的一 般类。(P22) 13. 关联(关系):事物(类)之间的一种结构关系, 或者说是对象之间连接的抽象,用来描述对象之间的 相互作用(P67) 14. 关联类:关联类是一种具有关联特性和类特性的 建模元素,可以将其看出是具有类特性的关联,或者 具有管理特征的类(P116) 15. 依赖(关系):依赖是两个事物之间的一种语义关 系,其中的一个事物的改变会影响另一个事物,反之 未必(P106) 16. 泛化(关系):泛化是一种“特殊/一般”关系, 即特殊事物和一般事物之间的关系。(P108) 17. 实现(关系):类元之间的语义关系(P16) 18. 链和链属性:对象之间的关联或相互作用表现出 不同的类的对象的实例之间的实际的或概念上的联 系,称为链。链属性:??(P110) 19. 聚合:聚合用来表示事物时间的“整体/部分”关 系,“整体”事物是一个较大的事物,它是由多个” 部分“事物组成的。(P113-114) 20. 问题域:是指特定应用系统的应用领域,即在现 实世界中由该系统进行处理的业务范围。(P47) 21. 系统责任:指系统应该具备的职能。(P47) 22. 消息:消息定义为向对象发出的服务请求(P23 和P127) 23. 交互:交互是发生在对象之间后对象内部的消息 传递行为(P66) 24. 事件:一个触发行为成为一个事件,换句话说, 所谓事件是指特定时刻内发生的动作。(P139) 25. 事件流:(P84) 26. 状态:指在对象的生命期中的一个条件或状况(通 过属性值体现),在此期间,对象将满足某些条件、 执行某些活动或等待某些事件。(p141) 27. 状态机:状态机描述了一个对象或一个交互在生 命期内响应事件所经历的状态序列,即描述其状态变 迁。(P66) 28.封装:封装是对拥有结构和行为的一个对象的元 素进行划分的过程,封装完成抽象的契约接口和对象 实施的分离(P28) 29. 继承:特殊类拥有一般类的全部属性和服务(操 作),称为特殊类对一般类的继承(P29) 30 多态:在一般类中定义的属性被特殊类继承之后, 可以具有不同的数据类型;同理,一般类中定义的操 作,可以在特殊类中具有不同的实现方法。(P31) 31. 抽象:抽象即指通过思考进行分离的行为。另一 种解释:表示某事物的本质特征(P27) 32. 角色:当一个类位于关联的某一端时,该类(的 某些实例)就在这个关系中扮演了特定的角色。(这 个算??)(P111) 33. 限定词(修饰关联):限定词是关联的一个特定的 属性,它的值划分了一个关联与一个对象相关的对象 集。(p116) 34. UML的规则(命名、范围、可见性、完整性、执 行):P70-P71太多了~不想打~ 35. UML的公共机制(详述、修饰、通用划分、扩展 机制(构造型、标记值、约束)) 36.OOPL:面向对象的编程语言,OOD:面向对象设 计范式,OOA:面向对象分析方法 37.准则包括标准与原则,模块化设计的标准包括:可 分解性、组合性、可理解性、连续性、保护性;设计 上应遵循的原则为:语言模块单元、接口很少、小接 口、显示接口、信息隐蔽等。 38.面向对象的四个基本要素:面向对象系统是由对象 组成的、组成系统的对象抽象成类、类之间存在泛化 关系,此种关系支持继承、对象之间通过消息获取对 方的服务。 39.应用开发过程六个阶段:需求描述、分析、设计、 实现、测试、维护。 40.UML对软件密集型系统的制品进行下述工作:可 视化、详述、构造、文档化。 41.UML三大建模元素:事物、关系、图,事物分为: 结构事物、行为事物、分组事物、注释事物,结构事 物分为:类、接口、协作、用况、主动类、构件、节 点。 42.提交一个应用系统的过程包括:计划和细化、构造、 实施。 二、思考题 1.为什么应用对象技术可以改变软件制造(生产) 方式? 由人工集约方式改变成资源集约方式,由重复性 的编程劳动变成基于组件的系统组装,从而带来软件生产 效率的大幅度提高。 2.试述建模的重要性,为什么建模可以降低系统实 现的复杂度。 建模是开发优秀软件所有活动的核心部分,其目 的是把所要设计的结构和系统的行为沟通起来,并对系统 的体系结构进行可视化和控制。建模是为了更好的理解正 在构造的系统,并经常提供简化和复用的机会。建模还可 以管理风险。一个成功的软件组织有很多成功的因素,其 中共同的一点就是对建模的采用。 模型可以提高系统的可测试性。提高可交流性。 增强开发过程的可视性,使得分析和设计思路、设计过程 可视化。降低实现的复杂度。 通过将复杂系统的重要部分分解成一次能理解 与处理的多个子部分,可以降低实现的复杂性。人对复杂 问题的理解能力是有限的,通过建模,缩小所研究问题的 范围,一次只着重研究它的一个方面,这就是所谓的“分 而治之”“各个击破”。 3.为什么面向对象方法能较好地管理复杂性并增强 伸缩性。 管理复杂性的一个好办法就是“分而治之”。“分” 就是对应用领域的分解,面向对象方法强调以客观世界的 事物为基础,把某一领域分割成各种对象,这显然比自顶 向下进行功能分解更自然、合理。“治”的基本方法就是: 采用封装技术对被分割的事物进行包装,以简化接口、减 少事物之间不必要的联系。利用事物之间的泛化管子构造 继承机制以获得重用。可用性和可扩展性意味着复杂系统 可以由简单系统组合而成,并且复杂系统可以采用“迭代” 方式,逐步增量形成。基于对象的分块技术也有助于解决 过程的伸缩性问题。 4.何谓“软件复用”,为什么说面向对象技术对“软 件复用”提供了卓有成效的支持? 软件重用是将已有软件的各种有关知识用于建 立新的软件,以缩减软件开发和维护的花费。包括分析模 型、设计模型、代码以及测试用例、测试信息等等的复用。 面向对象技术使软件重用技术更加完善和规范, 对象的重要特性。:抽象、封装、继承和多态都从不同角 度支持软件重用:抽象使得对象组件更具一般化,也即充 分考虑到对象自身的性质、性能和应用环境的复杂性等多 方面的要求,以此获得通用化和标准化方面的保证。封装 允许开发人员将对象视为“黑匣子”,只需通过界面去理 解、引用和操作对象,而不必关心其实现细节。继承使得 基于类的抽象层次和泛化结构的代码重用成为可能,也即 通过泛化关系使得特殊类可以共享一般类的性质。 5.“用况驱动的、迭代式的、增量”的开发方法的要 点、优点、时间盒。 要点:①软件开发过程要经历若干个开发周期, 每个周期都包含:分析、设计、实现和测试等活动。②在 经过一个初步的计划和细化阶段后,开发进入由一系列开 发周期组成的系统构造阶段,所以迭代主要发生在构造阶 段,当然也包含部分实施,因此严格讲,构造发生在构造 及实施阶段。③在每个开发周期中,通过增加新的功能使 系统得以扩充。④每个开发周期只针对比较小的一部分需 求,它要经历分析、设计、实现和测试等活动。每个开发 周期完成后,系统都获得一定程度的扩充。开发周期一般 是以用况为单位组织的。 优点:①因为每个开发周期只针对比较小的一部 分需求,所以就可以比较好的解决由于一个开发过程太庞 大、复杂使得开发人员无从下手的问题,也即能够比较有 效地管理复杂性。②因为每个开发周期只快速实现系统的 一小部分,所以在开发过程的早期就能够获得反馈信息。 用户的反馈信息越早越好,尽早听到和采纳用户的意见, 可以少犯错误。 时间盒即给开发周期限定时间,开发周期中的所 用工作都必须在这个时间内完成。 6.“计划和细化”阶段的主要工作和主要活动。 主要工作:初期概念的形成、为做出各种项 目选择所进行的调查研究、需求的规格化描述等。主 要活动:定义计划草案、编制初步调查报告、定义需 求、在术语表中记录术语、实现原型、定义用况、定 义概念模型草案、定义系统结构草案、精华计划。 7.“构造阶段”的主要工作和主要活动。 构造阶段包括一系列重复的开发周期,每个 开发周期主要工作:精华计划、同步制品、分析、设 计、实现、测试等。在这些开发周期中,系统得到了 扩展和完善。构造阶段的最终目标是得到一个能正确 符合需求的软件系统。 8.何谓链属性,试述链属性不应置入关联两端的某 一对象类中作为其属性的理由,请举例说明之。 由于关联特性与存在关联关系的两个类有 关,因此建模时经常会将这些属性随意地置入某一个 类中,当成类的属性。关联的特性是与被关联的两个 或多个类有关的那些属性,这些属性不是从属于单个 类的,因而不应该随意置入某个类中。 9.系统分析阶段如何识别类和排除虚假类?(分别 简述语法分析法和现实分析法的要点)。 现实分析法:确定问题陈述所涉及的哪些活动是 与需求密切相关的,分析这些活动涉及到哪些具体的事 物、概念、过程,遵循哪些规则等,它们都可能是系统内 部的对象类。 语法分析发:在问题陈述中,对象类通常对应于 名词或名词词组,因此从问题陈述中找出所有的名词或名 词词组,就得到大多数的候选类,运用排除法可以排除虚 假的类,就获得确定的类组。 虚假类:冗余类、无关类、模糊类、属性、操作、 角色、实现结构。 10.简述描述类的基本特征(名称、属性等)并举例 说明之。 名称:一个字符串;属性:已被命名的类的 特性;操作:一个服务的实现,该服务可以由类的任 何对象,甚至其他类的对象所请求,以影响其行为; 职责:类的契约或责任。 11.为什么“继承”可以简化对问题的认识? 这是因为在分析问题时,运用继承手段至少 可以从数量上减少必须理解和分析的不同情况。 12.列举引起需求变化的主要因素,面向对象方法如 何应对需求的不断变化? 问题域本身在系统开发过程中发生变化、用户因 素、竞争因素、经费因素、技术支持。 冻结需求法、以系统中最稳定的部分作为系统的基本单位 (对象)。 13. 简述软件维护的主要工作,并说明其重要性。 主要工作:对系统潜在的错误进行检测和改 正;不断地面对用户的新要求以及为适应新环境对系 统进行改进与增强。

软件设计师面向对象方法学(一)

[模拟] 软件设计师面向对象方法学(一) 选择题 第1题: 下列关于静态多态实现重载的描述中正确的是______。 A.重载的方法(函数)的方法名(函数名)可以不同 B.重载的方法(函数)必须在返回值类型以及参数类型上有所不同 C.重载的方法(函数)必须在参数顺序或参数类型上有所不同 D.重栽的方法(函数)只需在返回值类型上有所不同 参考答案:C 第2题: 程序设计语言提供了基本类型及其相关的操作,而______则允许开发者自定义一种新的类型及其相关的操作。 A.对象 B.实例 C.类 D.引用 参考答案:C 第3题: ______表示了对象间“is-a”的关系。 A.组合 B.引用 C.聚合 D.继承 参考答案:D 第4题: 若对象A可以给对象B发送消息,那么______。 A.对象B可以看见对象A B.对象A可以看见对象B C.对象A、B相互不可见

D.对象A、B相互可见 参考答案:B 第5题: 类描述了一组对象共同的特性,下列叙述中正确的是______。 A.类本身不能具有变量 B.对象具有类定义的所有变量的一份拷贝 C.对象间不能共享类定义的变量 D.可通过类名访问静态变量(类变量) 参考答案:D (6) 反映了类间的一种层次关系,而(7) 反映了一种整体与部分的关系。 第6题: A.继承 B.组合 C.封装 D.多态 参考答案:A 第7题: A.继承 B.组合 C.封装 D.多态 参考答案:B 第8题: 下列叙述中正确的是______。 A.d西向对象程序设计语言都不支持过程化的程序设计 B.面向对象系统只可采用面向对象程序设计语言实现 C.某些过程化程序设计语言也可实现面向对象系统

面向对象方法学试题及答案

C++程序设计试题(下)样卷(卷面50分) (考试用时100分钟) 一、选择题(每题1分,共5分) 1.设计一个自定义类时,需要在屏幕上显示或向文件写入类对象的数据,最佳选择方法是。 A.为屏幕显示和文件写入各自设计一个成员函数。 B.为屏幕显示和文件写入统一设计一个成员函数。 C.重载插入运算符(<<)。 D.重载提取运算符(>>)。 2.关于异常处理,那些说法是错误的。 A.在C++程序中,由throw表达式抛出异常,而该表达式应直接或间接地被包含在try块中。 B.当抛出异常后,寻找匹配的catch子句有固定的过程:逆着程序函数的调用链返回,称为栈展开(Stack Unwinding)。 C.当某条语句抛出异常时,跟在其后的语句将被跳过,但析构函数仍然执行,所以应该在析构函数中释放资源。 D.catch子句实际是一个特殊的函数。 3.下列关于动态资源分配的说法中错误的是。 A.动态分配的资源不仅包括内存,还包括文件。 B.动态内存分配的优点在于可以随时给数组分配所需的内存而不会失败。C.动态分配的资源通常要求在析构函数中释放。 D.对含有动态分配的数据成员的类对象应该采用深复制。 4.下列有关模板的描述那些是错误的。 A.模板把数据类型作为一个设计参数,称为参数化程序设计。 B.模板参数除模板类型参数外,还有非类型参数。 C.类模板与模板类是同一概念。 D.使用时,模板参数与函数参数相同,是按位置而不是名称对应的。 5.关于多态,下面那些说法是正确的。 A.多态分静态的(编译时)和动态的(运行时)。 B.运行时的多态与类的层次结构有关。 C.在基类定义了虚函数后,在派生类中重新定义时可以不加关键字virtual。D.仅使用虚函数并不能实现运行时的多态性,还必须采用指针或引用来调用才能真正实现运行时的多态性。 二、填空题(每空0.5分,共5分) 1.有标准字符串类string对象str,str1,str2。对其字符元素的访问可用两种方式:str[i]和str.at(i)。两者的区别是(1)。str1+=str2 实现的运算是(2)。str.substr(pos,length1) 实现的运算是(3)。

相关文档
最新文档