面向对象习题

  • 格式:docx
  • 大小:163.15 KB
  • 文档页数:9

单项选择题1.什么不是面向对象程序设计的主要特征(D)A.封装B.继承 C 多态D结构2.UML中有四种关系是:依赖,泛化,关联和(C)A.继承 B.合作 C.实现 D.抽象3. 在UML中,(B)图显示了一组类,接口,协作以及它们之间的关系.A. 状态图B.类图C.用例图D.部署图4. 软件生存期包括计划,需要分析和定义(B),编码,软件测试和运行维护.A. 软件开发B.软件设计(详细设计) C软件支持D软件定义5. ( A )模型的缺点是缺乏灵活性,特别是无法解决软件需要不明确或不准确的问题.A.瀑布模型B原型模型 C 增量模型D螺旋模型6. 下图是(B)A类图B用例图C活动图D状态图7.下面哪个不是UML中的静态视图(A)A. 状态图B用例图C对象图D类图8.下列关于状态图的说法中,正确的是(C)A.状态图是UML中对系统的静态方面进行建模的五种图之一.B. 状态图是活动图的一个特例,状态图中的多数状态是活动状态.C.活动图和状态图是对一个对象的生命周期进行建模,描述对象活动时间变化的行为.D.状态图强调对有几个对象参与的活动过程建模,而活动图更强调对单个瓜型对象建模.9.对反应型对象建模一般使用(A)图A.状态图B顺序图C活动图D类图10.类图应该画在Rose的哪种视图中(B)A. Use Case View B.Logic View C .Component View D. Deployment View11.类通常可以分为实体类,(C)和边界类.A. 父类B.子类C控制类D祖先类12.顺序图由类角色,生命线,激活期和(B)组成A.关系B.消息C.用例D.实体13.( D)是系统中遵从一组接口且提供实现的一个物理部件,通常指开发和运行时类的物理实现.A部署图 B.类 C.接口D.组件14.关于协作图的描述,下列哪个不正确(B)A.协作图作为一种交互图,强调的是参加交互的对象的组织.B. 协作图是顺序图的一种特例.C. 协作图中有消息流的顺序号.D. 在Rose工具中,协作图可在顺序图的基础上按”F5”键自动生成.15.(C)是一组用于描述类或组件的一个服务的操作.A.包 B. 节点 C. 接口 D.组件16. 一个对象和另一个对象之间,通过消息来进行通信,消息通信在面向对象的通信中C17. D18. 下图中的空心箭头连线表示(A)关系A.泛化 B 包含C扩展D实现19.组件图展现了一组组件之间组件和依赖,它专注于系统的(B)实现图.A.动态 B.静态 C 基础D实体20. 下列关于类方法的声明,不正确的是 ( C )A.方法定义了类所许可的行动B.从一个类所创建的所有对象可以使用同一组属性和方法C.每个方法应该有一个参数D.如果在同一个类中定义了类似的操作,则他们的行为应该是类似的第二题:填空1.面向对象系统包含的3个要素有:对象,类和继承.2.OOA模型的五个层次有:主题层,结构层,服务层,属性层和类及对象层.3.UML的全称是:Unified Modeling Language4.组件是被节点执行的事物.5.构造,析构6.UML提供一系列的图支持面向对象的分析与设计,其中(类图)给出系统的静态设计视图;(用例图)对系统的行为进行组织和建模是非常重要的;(序列图)和(协作图)都是描述系统动态视图的交互图,其中(序列图)描述了以时间顺序组织的对象之间的交互活动,(协作图)强调收发消息的对象的组织结构.7.在协作图中通过(消息编号)表示出消息的时间顺序.8.UML中的交互图有顺序图和协作图两种.9.在UML提供的图中,(用例图)用于描述系统与外部系统及用户之间的交互,(序列图)用于按时间顺序描述对象间的交互.10. 用例图的建模步骤包括寻找参与者,确定用例,分析关系,细化用例规约,精化用例模型.11. 时序图包括对象或(Object),生命线或(Lifeline),激活或(Activation),消息或(Messsage) 12. RUP开发过程中各阶段的核心工作流包括:初始阶段,细化阶段,构造阶段.13. 标准建模语言UML的重要内容可以由哪五类图(共9种图形)来定义:用例图,静态图(包括类图,对象图和包图),行为图,交互图和实现图.14. 动态视图包含交互图和行为图,交互图包括时序图,协作图,状态图和活动图.第三题:分析题1、下面那些特征不能被派生类继承。

答:1)构造函数:不能。

每个类至少含义一个构造函数,如果编写代码时没有显式的定义,编译器会为类自动生成一个;调用时,编译器会根据派生的实现依次调用基类和派生类的构造函数,因此没有必要继承基类的构造函数。

2)析构函数:同"构造函数"3)用户定义的NEW运算符:能。

但该运算符必须是公有的,以使派生类得以访问。

4)友元关系:不能。

友元函数不是类的成员函数,自然不能被他的派生类继承。

5)成员变量的属性:能。

但必须是公有的,以使派生类得以访问。

2、分析下面的类层次结构:class Base{int b;void fun(int);};class Derived:Base{void b( );void fun(double);};class SubDerived:Derived,Base{Derived b;SubDerived c;Base d;};下面的语句各能访问那些成员?为什么?(1) b.b();(2) b.fun(3);(3) c.b();(4) c.fun(5);(5) d.fun(2);答:类默认的访问是私有的;当不使用基类访问标识符时,类的派生视为私有。

派生类无法得到基类的私有元素。

所以:(1)和(2)访问的分别是类Derived实例b的b()和fun();(3)和(4)没有可访问的对象,(5)仿问的是基类Base实例D的fun()。

3、看图回答问题a.下图中类的名字是:___ReaderManager___b.类中的行为(方法)是:_newReader(),ModifyReader(),deleteReader()___c.类中的成员方法的访问可见性是:publicd.该类是什么类型的类,这种类型的类作用是什么?答:该类是控制类。

控制类是负责协调其他类的工作,它建立了一个或几个用例的行为模型。

它整理系统的行为并描述一个系统的动态特性,处理主要的任务和控制流。

每个用例通常都有一个控制类、控制用例中的事件顺序。

也存在多个用例共享同一个控制类。

4、请指出在下面各说明语句中,变量p各被说明成什么类型?int *p; //整数指针。

int *p[]; //整数指针数组,数组元素为整数指针int &p=5; //引用类型const int *p=a; //指向整形常量a的指针int **p; //两级指针5、以下各词法,哪些是合法的C++变量名?并说明为什么其他词法符号不合法。

答:不合法的变量名:3nd 不能以数字开头。

只能用26个字母或下划线作开头。

@price 不合法的开头。

a*b *为非法变量名字符。

π非法变量名字符。

-depth 不合法的开头。

via.num 点号"."为非法变量名字符。

6、请指出以下程序中存在的错误:#include <iostream.h>void main(){const: x=1; //const后不应该有冒号。

y=6; //y没有进行定义就被赋值。

x=x+y; //x是const常量,不能被重新赋值。

cout<<'X='<<x; //字符串应该用双引号写成″X=″。

}第四题:简答1、简述继承机制的重要性。

答:当今软件开发十分重视软件的"可扩充性"和"复用性",软件"模块化"是实现该目标的重要途径。

提供模块化实现"复用性"的过程就是利用"继承"机制实现类与类之间关系的过程,如扩充、特化和组合等。

2、类的作用域是什么?答:类的作用域是指类定义和相应的成员函数定义范围,一个类的所有成员都位于这个类的作用域内。

3、面向对象程序设计的多态性功能目标是什么?答:在面向对象的概念中,多态性是指不同对象收到相同消息时,根据对象类不同产生不同的动作。

多态性提供了把接口与实现分开的另一种方法,提高了代码的组织性和可读性,使软件的可扩充性有充分的提高。

4、在C++中,类的设计应遵循的原则是什么?答:基本的原则是:寻求一个系统中事物的共性,将具有共性的系统成分确定为一个类。

由于实际问题的复杂性,要求在第一次就能正确地确定和划分一个类几乎是不可能的。

有可能在最初设计时被确定为5、面向对象的系统分析和设计的主要目的和应完成的主要工作是什么?答:面向对象的系统分析和设计是将面向对象的方法运用到软件工程的分析设计阶段。

面向对象的系统分析和设计的主要目的是完成对某个特定应用论域(application domain)的分析和系统的建模。

应完成的主要工作是描述系统中的对象、对象的属性和操作、对象的动态特性、对象间的构造关系和通信关系等,从而建立系统的静态结构和动态活动模型。

6、试述使用友元函数时,在封装性原则和开放性控制上的利弊得失。

答:编程中为提高效率,有时需要用普通函数直接访问类的保护或私有数据成员。

如果没有友元机制,则只能将相关数据成员声明为公共成员,但这样一来,其他的任何函数都可以无约束地访问它。

而采用友元函数控制了类的开放性,避免类的数据成员暴露在一般函数的调用之下,但是同时由于友元函数可以访问类的保护和私有成员,破坏了类的封装性。

7、什么是类属类?在使用中有哪些注意事项?答:由C++语言的模板定义的类称为类属类(generic class),或参数化类(parameterized class)。

类属类仅描述了适用于一组类型的通用样板,由于其中所处理对象的数据类型尚未确定,因而程序员不可用类属类直接创建对象实例,即一个类属类并不是一种真正的类类型。

类属类必须经过实例化(instantiation)后才能成为可创建对象实例的类类型。

类属类的实例化是指用某一数据类型替代类属类的类型参数。

类属类定义中给出的类型参数称为形式类属参数,类属类实例化时给出的类型参数称为实际类属参数。

如果类属类实例化的实际类属参数可以是任何类型,那么这种类属类称为无约束类属类。

然而在某些情况下,类属类可能要求实际类属参数必须具有某些特殊的性质,以使得在类属类中可应用某些特殊操作,这种类属类称为受约束类属类。

在C++语言中,使用模板机制实现的类属类是无约束类属类,模板机制无法支持受约束类属类。

8、继承的含义是什么?答:一个模块是一组向外提供的服务。