软考中级习题与解答——第五章_面向对象方法(1)
例题1
1、知识点总结
在面向对象技术中,多态有多种形式。通用多态包括参数多态和包含多态。参数多态是指将类型作为参数,使得同一操作可以应用于不同类型的对象;包含多态是通过继承和子类型化实现的多态,即一个父类的引用可以指向其子类的对象,从而调用子类的方法。
2、选项分析
- 选项 A(重置多态):重置多态(也叫覆盖多态)属于包含多态的一种表现,但单独的 “重置多态” 不是与参数多态并列的通用多态的组成部分,排除。
- 选项 B(过载多态):过载多态是指同一操作符或方法名在不同的上下文中有不同的实现,它属于专用多态,而非通用多态,排除。
- 选项 C(隐含多态):隐含多态不是与参数多态并列的通用多态的组成部分,排除。
- 选项 D(包含多态):包含多态与参数多态一起构成通用多态,符合知识点内容,正确。
3、最终答案:D
例题2
1、知识点总结
在面向对象编程中:
- 类是对具有相同属性和行为的对象的抽象,对象是类的具体实例。
- 类定义了对象的属性和方法,对象则是类的一个具体存在,包含了类所定义的属性和方法的具体值和执行。
- 存在抽象类,抽象类不能被直接实例化,只能被继承,由子类去实例化。
2、选项分析
- 选项 A:类是对象的抽象,对象是类的实例,这是面向对象中类与对象的基本关系,描述正确。
- 选项 B:类是一组具有相同属性和方法的对象的集合,符合类的定义,描述正确。
- 选项 C:并不是每个类都可以被实例化,比如抽象类就不能被直接实例化,所以该描述不正确。
- 选项 D:对象是一组属性及这组属性上的专用操作的封装体,准确描述了对象的概念,描述正确。
3、最终答案:C
例题3
1、知识点总结
在 UML(统一建模语言)的通用机制中,构件是系统中遵从一组接口规范且付诸实现的物理、可替换的软件模块。它是软件系统的基本组成部分,能够独立部署,并为其他构件或系统提供特定的功能 。每个构件都对外提供一组清晰定义的接口,这些接口规定了构件能提供的服务以及如何与其他构件进行交互。
- 提高软件复用性:开发好的构件可以在不同的软件项目中被重复使用,减少了重复开发的工作量。例如,日志记录构件可以在多个不同的业务系统中使用,每个系统不需要重新开发日志记录功能。
- 增强软件系统的灵活性和可维护性:当系统的某个功能需要升级或修改时,只需要替换对应的构件即可,而不会对整个系统造成太大影响。同时,不同的开发团队可以分别负责不同构件的开发,提高开发效率。
- 促进软件系统的集成:通过构件之间的接口交互,不同的构件可以方便地集成在一起,构建出复杂的软件系统。例如在一个企业资源计划(ERP)系统中,财务模块、库存管理模块、生产管理模块等构件可以通过接口集成,实现企业资源的统一管理 。
2、选项分析
- 选项 A(包):包主要用于对模型元素进行分组,用于组织和管理模型,不是物理可替换的软件模块,不符合题意。
- 选项 B(类):类是对具有相同属性、方法和关系的对象的抽象,是逻辑上的概念,并非物理可替换的软件模块,不符合题意。
- 选项 C(接口):接口是一组操作的集合,定义了服务的规范,本身并不实现功能,不符合 “付诸实现的软件模块” 这一描述,不符合题意。
- 选项 D(构件):构件符合 “遵从一组接口规范且付诸实现的物理、可替换的软件模块” 的定义,符合题意。
3、最终答案:D
例题4
1、知识点总结
在 UML(统一建模语言)中,事物是对模型中最具代表性成分的抽象。其中,行为事物是模型的动态部分,描述了跨越时间和空间的行为,比如交互、状态机等,它们展现了系统的动态操作和行为流程。
2、选项分析
- 选项 A(结构事物):结构事物是 UML 模型的静态部分,用于描述系统的静态结构,如类、接口、构件等,不是动态部分,排除。
- 选项 B(分组事物):分组事物主要用于对模型中的元素进行分组组织,如包,与动态行为无关,排除。
- 选项 C(行为事物):行为事物描述模型的动态部分,涵盖了系统的动态行为,符合题意,正确。
- 选项 D(注释事物):注释事物用于对模型进行说明和解释,不涉及动态行为,排除。
3、最终答案:C
例题5
1、知识点总结
面向对象编程有诸多重要原则,如针对接口编程(而非针对实现编程),这样能提高代码的灵活性和可扩展性;要设计职责单一的类,遵循单一职责原则,使类的功能更明确,便于维护和复用;尽量使用已有的类库,以提高开发效率和代码质量。同时,接口是对行为的抽象,实现是接口的具体实现,二者是可以分离的。
2、选项分析
- 选项 A:面向对象强调针对接口编程,而不是针对具体的实现编程,这样能降低代码间的耦合度,该描述正确。
- 选项 B:接口是对功能的抽象定义,实现是接口的具体实现方式,二者是可以分离的,并非不可分割,该描述错误。
- 选项 C:设计职责单一的类,符合单一职责原则,有助于类的维护和复用,该描述正确。
- 选项 D:尽量使用已有的类库,能避免重复开发,提高开发效率,该描述正确。
3、最终答案:B
例题6
1、知识点总结
在面向对象的继承中,访问权限和继承方式会影响派生类对基类成员的访问:
2、选项分析
3、最终答案:D
例题7
1、知识点总结
面向对象分析(OOA)和面向对象设计(OOD)是面向对象开发过程中的两个重要阶段:
- 面向对象分析阶段:基于用例模型,通过对象建模记录确定的对象、对象封装的数据和行为以及对象之间的关系。包含建模系统功能、发现并确定业务对象、组织对象并确定其关系这 3 个活动。
- 面向对象设计阶段:在分析对象模型基础上,设计各个对象、对象之间的关系(如层次关系、继承关系等)和通信方式(如消息模式)等,对 OOA 结果作进一步规范化整理。
2、选项分析
- 选项 A:组织并确定对象关系是面向对象分析阶段的活动(根据解析中 OOA 的活动包含 “组织对象并确定其关系”),而非设计阶段,该描述错误。
- 选项 B:发现并确定业务对象是面向对象分析阶段的活动,描述正确。
- 选项 C:建模系统功能是面向对象分析阶段的活动,描述正确。
- 选项 D:确定对象间的通信方式是面向对象设计阶段的活动,描述正确。
3、最终答案:A
例题8
1、知识点总结
在面向对象编程中,静态成员函数属于类本身,不依赖于类的实例对象,在静态成员函数中,只能直接访问类的静态成员(包括静态成员变量和静态成员函数),不能直接访问非静态成员(因为非静态成员依赖于实例对象,静态函数调用时可能没有对象存在);而非静态成员函数可以访问静态成员和非静态成员。
2、选项分析
3、最终答案:B
例题9
1、知识点总结
UML(统一建模语言)有 5 大系统视图,不同视图有不同的作用:
- 逻辑视图:主要支持系统的功能需求,即系统提供给最终用户的服务,用于描述系统的静态结构和动态行为。
- 进程视图:关注系统的并发性,将可执行线程和进程作为活动类进行建模,用于描述系统的并发和同步机制。
- 部署视图:描述系统的物理部署情况,展示系统的硬件节点以及在这些节点上运行的软件构件等。
- 用例视图:从用户的角度描述系统的功能,通过用例来捕获系统的需求。
2、最终答案:B
例题10
1、知识点总结
在 C++中,构造函数和析构函数是类的特殊成员函数:
- 构造函数:用于创建类的对象时初始化对象,函数名与类名相同,没有返回类型(包括
void
类型也没有),可以重载,从而实现不同方式的对象初始化。 - 析构函数:用于在对象销毁时进行清理工作,函数名是在类名前加
~
,无形参,不能重载,一个类只能有一个析构函数。
析构函数的核心作用
析构函数的任务是 “清理对象自身的资源”(比如释放动态分配的内存、关闭文件 / 网络连接等)。它是对象 “生命周期结束时” 自动执行的操作,不需要外部传递额外信息来控制 “怎么清理”。
为什么 “无形参”?
如果析构函数有参数,意味着:
- 我们需要在销毁对象时手动传递参数(比如
obj.~Class(参数)
),但析构函数是自动调用的(对象离开作用域、被delete
时触发),没有地方 “传递参数”。 - 析构函数的逻辑是 “清理当前对象自己的资源”,和 “外部参数” 无关。给它加参数,既没必要,也不符合 “自动清理” 的设计逻辑。
为什么 “不可被重载”?
重载的核心是 “同名函数,不同参数列表,实现不同逻辑”。但析构函数的逻辑是 “唯一的:清理当前对象”—— 不管对象是怎么创建的,销毁时的 “清理动作” 是统一的 **(比如一个 File
类,析构函数就是 “关闭文件”,不需要 “重载出‘关闭文件 A’‘关闭文件 B’” 两种版本)。
2、选项分析
- 选项 A:构造函数的函数名必须与类名相同,这是构造函数的基本规则,描述正确。
- 选项 B:构造函数没有返回类型,包括不是
void
类型,该描述错误。 - 选项 C:析构函数无形参,也不可被重载,符合析构函数的特点,描述正确。
- 选项 D:一个类只能有一个析构函数,但构造函数可以重载,即可以有多个构造函数,描述正确。