十. 面向对象技术
1. 面向对象基本概念
(1)对象与类相关概念
在面向对象的系统中,对象是基本的运行时的实体,它既包括数据(属性),也包括作用于数据的操作(行为)。一个对象把属性和行为封装为一个整体。封装是一种信息隐蔽技术,它的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。一个对象通常由对象名(ID)、属性和行为(方法)三部分组成。
一个类定义了一组大体上相似的对象。一个类所包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象是类的具体化,是类的实例。接口是一种特殊的类,它只有方法定义没有实现。
类可以分为三种:实体类、接口类(边界类)、控制类。
- 实体类:实体类的对象表示现实世界中真实的实体,如人、物等。
- 接口类(边界类):接口类的对象为用户提供一种与系统合作交互的方式,分为人和系统两大类,其中人的接口可以是显示屏、窗口、Web窗体、对话框、菜单、列表框、其它显示控制、条形码、二维码或者用户与系统交互的其它方法。系统接口涉及到把数据发送到其它系统,或者从其它系统接收数据。
- 控制类:控制类的对象用来控制活动流,充当协调者。
例题1:
在面向对象的系统中,对象是运行时实体,其组成部分不包括();一个类定义了一组大体相似的对象,这些对象共享()。
A.消息 B.行为(操作) C.对象名 D.状态
A.属性和状态 B.对象名和状态 C.行为和多重度 D.属性和行为
解析1:
先看 AD 选项的两个概念。对象之间进行通信的一种构造叫作消息,是动态的。消息是异步通信的,而消息传递是指接收到信息的对象经过解释,然后予以响应。状态是一组属性对应确定值。 BC 选项是对象的组成部分,状态本质上也是属性,因此选择 A 项。对象共享属性和行为,选 D。
例题2:
在面向对象方法中,将逻辑上相关的数据以及行为绑定在一起,使信息对使用者隐蔽称为()。当类中的属性或方法被设计为 private 时,()可以对其进行访问。
A.抽象 B.继承 C.封装 D.多态
A.应用程序中所有方法
B.只有此类中定义的方法
C.只有此类中定义的 public 方法
D.同一个包中的类中定义的方法
解析2:
将属性和行为绑定在一起,使用者和生产者分离,这是封装,第一个空选 C。private 代表私有访问控制符号,也就是只允许自己访问,即同一类中定义的方法可以访问。还有 public 代表公有,应用程序中所有方法均可访问,默认 protected 代表受保护的,同一个包中的类中定义的方法可以访问。因此第二个空选 B。
(2)继承与泛化相关概念
继承是父类和子类之间共享(复用)数据和方法的机制。一个父类可以有多个子类,父类描述了这些子类的公共属性和方法。一个子类可以继承它的父类中的属性和方法,这些属性和方法在子类中不必定义,子类也可以定义自己的属性和方法。
例如,父类动物中的方法 call(),也称为抽象方法,没有具体实现。猫类继承了方法 call(),且有具体实现 call(){喵},狗类同样,call(){汪},这称为重置/覆盖,即在子类中重新定义父类中已经定义的方法。另一个概念叫作重载,指同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。
例题:
在面向对象方法中,()是父类和子类之间共享数据和方法的机制。子类在原有父类接口的基础上,用适合于自己要求的实现去置换父类中的相应实现称为()。
A.封装 B.继承 C.覆盖 D.多态
A.封装 B.继承 C.覆盖 D.多态
解析:
继承是父类和子类之间共享数据和方法的机制,子类也可以定义自己的属性和方法,也可以覆盖父类中的相应实现。因此选择 BC。
(3)多态与动态绑定相关概念
在收到消息时,对象要予以响应。不同的对象收到同一消息可以产生不同的结果,这一现象称为多态。如猫对象收到消息 call,产生喵的结果;狗对象收到消息 call,产生汪的结果,这就是多态。
如果消息直接发送给一个类,然后由类在运行时决定由哪个对象响应,这就是动态绑定,或者说根据接收对象的具体情况将请求的操作与实现的方法进行连接。与之对应的,在编译阶段决定,称为静态绑定。
多态有四类:参数多态、包含多态、过载多态、强制多态。
过载多态:同一个名字(操作符、函数名)在不同的上下文中所代表的含义不同。
参数多态:应用广泛,最纯的多态。
包含多态:同样的操作可用于一个类型及其子类型。包含多态一般需要进行运行时的类型检查。
强制多态:编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。
例题1:
在面向对象方法中,不同对象收到同一消息可以产生完全不同的结果,这一现象称为()。在使用时,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定。
A.接口 B.继承 C.覆盖 D.多态
解析1:
不同的对象收到同一消息可以产生不同的结果,这一现象称为多态。
例题2:
在下列机制中,()是指过程调用和响应调用所需执行的代码在运行时加以结合;而()是过程调用和响应调用所需执行的代码在编译时加以结合。
A.消息传递 B.类型检查 C.静态绑定 D.动态绑定
A.消息传递 B.类型检查 C.静态绑定 D.动态绑定
解析2:
如果消息直接发送给一个类,然后由类在运行时决定由哪个对象响应,这就是动态绑定。与之对应的,在编译阶段决定,称为静态绑定。
(4)概念汇总
例题1:
在某销售系统中,客户采用扫描二维码进行支付。若采用面向对象方法开发该销售系统,则客户类属于()类,二维码类属于()类。
A.接口 B.实体 C.控制 D.状态
A.接口 B.实体 C.控制 D.状态
解析1:
根据三种类的定义可知,客户属于实体类,二维码属于接口类。
例题2:
在面向对象方法中,继承用于()。
A.在已存在的类的基础上创建新类。
B.在已存在的类中添加新的方法。
C.在已存在的类中添加新的属性。
D.在已存在的状态中添加新的状态。
解析2:
继承是父类和子类之间共享(复用)数据和方法的机制,因此是在父类的基础上创建新类。
例题3:
()多态是指操作(方法)具有相同的名称、且在不同的上下文中所代表的含义不同。
A.参数 B.包含 C.过载 D.强制
解析3:
根据四类多态的定义可知,过载多态是操作(方法)具有相同的名称、且在不同的上下文中所代表的含义不同。
后续会持续更新整理。