16.在一个“图书管理系统”中,借书处理和还书处理都需要先通过身份验证。那么,用例“借书处理”、“还书处理”与用例“身份验证”之间是(C )关系 A. 特化 B. 泛化 C. 使用 D.扩展
17.(D )就是用于表示构成分布式系统的节点集和节点之间的联系的图示,它可以表示系统中软件和硬件的物理架构。
A.对象图 B.类图 C.组件图 D.配置图 18.阅读图例,判断下列哪个说法是错误的。( D )
A.读者可以使用系统的还书用例
B.每次执行还书用例都要执行图书查询用例
C.执行还书用例有可能既执行图书查询用例,又执行交纳罚金用例
D. 每次执行还书用例都要执行交纳罚金用例
19.( B )描述了一组交互对象间的动态协作关系,它表示完成某项行为操作的参与对象和这些对象之间传递消息的时间顺序。
A. 协作图 B.序列图 C.对象图 D.组件图 20.( C )能够更好地用于对数据库建模。
A.传统的ER图 B.UML的用例图 C.UML的类图 D.数据流图
二、填空题 ( 每空 1 分,共 20 分 )
1. 面向对象开发方法模拟人们理解和处理客观世界的方式来__(1)_分析_问题,把系统视
为一系列__(2)对象_的集合,其面向对象的__设计(3)__又将分析的结果映射到某种面向对象__(4)实现__工具的结构上,使映射过程有着比较直接的对应关系,使分析者、设计者和编程者都可使用相同的概念,从而使面向对象的软件开发能比较自然地模拟客观世界的活动,使__(5问题描述)__空间与__(6解)__空间在结构上尽可能一致。因此,采用面向对象方法可以更有效地开发大型软件系统。面向对象方法的__(封装7)__、__(继承8)__、__多(9)__态等机制不仅支持软件复用,而且使软件维护工作可靠有效,
可实现软件系统的柔性制造,更好地克服__软件危机(10)_。因此,它已成为成熟的广为采用的软件开发方法。到20世纪末,面向对象软件工程逐渐发展成熟,特别是__(11)_统一建模语言(UML)标准_的形成和广泛使用,使面向对象软件开发方法已成为软件开发的主流技术。
2. UML 通过9种视图来为系统建模,这9种视图是:
_____(12)_用例图______、_____类图(13)_______、___对象图__(14)________、 _____(1组件图5)_______、_____配置图(16)_______、__序列图___(17)________、 _____(1协作图8)______、__活状图___(19)______、___状态图___(20)_______。
三、写出下列程序的输出结果 ( 满分 10 分 ) #include
virtual void show()
{ cout<<“ It is a person”< } }; class student:public person { public: virtual void show() { cout<<“It is a student”< { person O1, *ps; Student O2; O1.show(); O2.show(); ps=&O1; ps->show(); ps=&O2; ps->show(); } 四、 简答题(每小题5分,共 20 分) 1. 简述面向对象分析的基本步骤。 2. 简述建立面向对象设计模型的方法步骤。 3. 简述基于UML的面向对象系统开发方法的基本步骤。 4. 简述基于UML的关系数据库设计的方法步骤。 五、请用UML对图书借阅管理系统及相关的数据库系统进行分析和设计。图书管理系统应实现图书资料和借阅信息查询、借书、 还书以及系统维护功能操作。试完成下列工作: (1)画出读者用例图(5分) (2)画出“读者查询图书信息”用例的序列图和协作图(10分) (3)画出设计类图(10分); (4)“读者”与“图书”类之间存在多对多的关联,试将这种关联转化为一个关联表。(5 分) ---------------------------------------------------------------------------------------------------------------------- 2010-2011第一学期面向对象分析与设计试题 一、单项选择题 ( 在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。每小题 1 分,共 20 分 ) 1. ( D )是对具有相同属性和行为的一组对象的抽象描述。 A. 实体 B. 对象 C. 类模板 D. 类 2. 一类对象向另一类对象所发消息的格式中不包括( D )。 A. 对象名 B. 操作函数名 C. 参数表 D. 类名 3.面向对象技术的三大机制不包括( A )。 A. 抽象 B. 封装 C. 多态 D. 继承 4. 从整体功能层面考虑类的设计应遵循下列三条原则,除了( B )。 A. 单一功能原则 B. 封装原则 C. 最小惊讶原则 D. 开放/封闭原则 5. 可以在类外访问类的( C )。 A. 私有成员 B. 受保护性成员 C. 公有成员 D. 纯虚函数 6. 类的( D )是供创建类的实例对象时调用,完成对象的初始化。 A. 内联函数 B. 析构函数 C. 友员函数 D.构造函数 7. 派生类可以继承 ( B)。 A. 私有成员 B. 部分公有成员 C. 构造函数 D. 析构函数 8. 如果合理地利用( B ),就可以在类的复杂层次关系中为共享访问与成员隐蔽之间找到一个平衡点,既实现部分成员隐蔽,又能方便部分成员的继承,实现代码的高效重用和扩充。 A. 私有继承 B. 保护继承 C. 公有继承 D. 多继承 9. 如果将某类族中的一个同名成员函数说明为虚函数,则可用( C )来调用不同派生类的虚函数,实现运行时多态。 A. 基类对象 B. 派生类对象 C. 基类对象的指针 D. 派生类对象的指针 10. C++中既可实现文件输入又可实现文件输出的类是 (D ) A. ifstream B. ofstream C. iostream (系统) D. fstream 11. 基类中的protected 成员,通过public派生,其在派生类中的可见性为 ( C )。 A. 不可访问 B. private C. protected D. public 12. 在C++程序中,对象之间的相互通信可以通过( B )来实现。 A.继承 B.调用成员函数 C.封装 D.函数重载 13.( A )阶段的主要目标是为了更精确地理解用户需求,并获得一个使用开发人员熟悉 的语言描述的、易于维护且能体现系统基本结构的模型。 A. 系统需求分析 B. 系统分析 C. 系统设计 D. 系统实现 14. 在面向对象程序设计语言中,(B )是利用可重用成分构造软件系统的最有效的特性, 它不仅支持系统的可重用性,而且还有利于提高系统的可扩充性。 A. 封装 B. 继承 C. 抽象 D. 引用 15. ( C )是从用户使用系统的角度描述系统功能的图形表达方法。 A.类图 B. 组件图 C. 用例图 D. 配置图 16. 用来描述实现某些服务所涉及的对象及其交互关系(包括消息通信)的动态视图就称为 ( B ),可用于描绘业务流程。 A.对象图 B. 协作图 C. 状态图 D. 活动图 17.( C )表示构成系统的代码部件及其相互之间联系的图示。 A. 状态图 B. 协作图 C.组件图 D. 配置图 18. UML提供了一系列的图支持面向对象的分析与设计,其中( C ) 描述的是系统的静态 组织结构和数据结构。 A. 序列图 B 协作图 C. 对象图 D. 类图 19. ( C )是描述系统体系结构的静态实现视图。 A.类图 B. 对象图 C. 组件图 D. 配置图 20. 使用UML进行关系数据库的(D)时,需要设计出表达持久数据的实体类及其联系,并把它们映射成为关系数据库表(Table)、视图(View)等。 A. 物理数据模型设计 B. 物理实现设计 C. 业务Use Case模型设计 D. 逻辑数据模型设计 二、填空题 ( 每空 1 分,共 20 分 ) 1. 用_( 1 多态)_机制可以实现发送一个通用消息而调用不同的方法;( 2_封装)机制是实现信息隐蔽的一种技术,其目的是使类的_(3定义和实现)_相互分离。 2. 类是一组具有相同属性和服务的对象的抽象描述,类中的每个对象都是 这个类的一个_( 4实例 )_。类之间共享属性与服务的机制叫做_(继承 5 )。 一个对象通过发送_( 6消息 )_来请求另一个对象为其服务。 3. 派生类的生成包含三个步骤:_(吸收基类成员 7 )_、_(改造基类成员 8 )_和_(定义派生类的新成员 9 )_。 4. _(1序列图0)_描述完成某项行为操作的参与对象和这些对象之间传递消息的 时间顺序。_(11状态图)_描述系统运行过程中某类对象可能具有的状态,以及在 不同状态间的跳转和触发这些跳转的外部事件。_1活动图2__可用于描述系统业 务流程,它由一系列的动作状态构成, 动作的状态控制可以从一个状态流 向另一个与之相邻的状态。 5. 基于UML的系统分析的主要目标是为了更精确地理解_(13需求_)_,并 获得一个使用开发人员的语言描述的、易于维护的且能体现系统基本结构 的_(14分析 )_模型。该模型主要包括_(类图15_) 和 (1对象图6_)。 6. 基于UML的关系数据库设计一般可分为4个阶段: _(_1业务Use Case 模型设计7_)_、 _(_1逻辑数据模型设计8_)_、_(_物理数据模型设计19__)_和_(_20物理实现设计_)_。 三、写出下列程序的输出结果。 ( 满分 10 分 ) class B { public: B( ) { cout << \ virtual void f( ) { cout << \ virtual ~B( ) { cout << \}; Class D: public B { private: int d; public: D( ) { cout << \ } void f( ) { cout << \ } virtual ~D( ) { cout << \}; void main( ) { B* pB; D d1; pB=&d1; pB->f( ); delete pB; } 四. 简答题(每小题4分,共 20 分)