《程序员面试题系列7》由会员分享,可在线阅读,更多相关《程序员面试题系列7(44页珍藏版)》请在金锄头文库上搜索。
1、 面 向 对 象 (Object Oriented,OO)是 当 前 计 算 机 界 关 心 的 重 点 , 它 是 90 年 代软 件 开 发 方 法 的 主 流 。 面 向 对 象 的 概 念 和 应 用 已 超 越 了 程 序 设 计 和 软 件 开 发 ,扩 展 到 很 宽 的 范 围 。 如 数 据 库 系 统 、 交 互 式 界 面 、 应 用 结 构 、 应 用 平 台 、 分 布式 系 统 、 网 络 管 理 结 构 、 CAD 技 术 、 人 工 智 能 等 领 域 。谈 到 面 向 对 象 , 这 方 面 的 文 章 非 常 多 。 但 是 , 明 确 地 给 出 对 象
2、的 定 义 或 说明 对 象 的 定 义 的 非 常 少 至 少 我 现 在 还 没 有 发 现 。 起 初 , “面 向 对 象 ”是 专 指在 程 序 设 计 中 采 用 封 装 、 继 承 、 抽 象 等 设 计 方 法 。 可 是 , 这 个 定 义 显 然 不 能 再适 合 现 在 情 况 。 面 向 对 象 的 思 想 已 经 涉 及 到 软 件 开 发 的 各 个 方 面 。 如 , 面 向 对象 的 分 析 ( OOA, Object Oriented Analysis) , 面 向 对 象 的 设 计( OOD, Object Oriented Design) 、 以 及 我
3、 们 经 常 说 的 面 向 对 象 的 编 程 实 现( OOP, Object Oriented Programming) 。 许 多 有 关 面 向 对 象 的 文 章 都 只 是讲 述 在 面 向 对 象 的 开 发 中 所 需 要 注 意 的 问 题 或 所 采 用 的 比 较 好 的 设 计 方 法 。 看这 些 文 章 只 有 真 正 懂 得 什 么 是 对 象 , 什 么 是 面 向 对 象 , 才 能 最 大 程 度 地 对 自 己有 所 裨 益 。 这 一 点 , 恐 怕 对 初 学 者 甚 至 是 从 事 相 关 工 作 多 年 的 人 员 也 会 对 它 们的 概 念
4、模 糊 不 清 。 编 辑 本 段 一 、 传 统 开 发 方 法 存 在 问 题1.软 件 重 用 性 差重 用 性 是 指 同 一 事 物 不 经 修 改 或 稍 加 修 改 就 可 多 次 重 复 使 用 的 性 质 。 软 件重 用 性 是 软 件 工 程 追 求 的 目 标 之 一 。2.软 件 可 维 护 性 差软 件 工 程 强 调 软 件 的 可 维 护 性 , 强 调 文 档 资 料 的 重 要 性 , 规 定 最 终 的 软 件产 品 应 该 由 完 整 、 一 致 的 配 置 成 分 组 成 。 在 软 件 开 发 过 程 中 , 始 终 强 调 软 件 的可 读 性 、
5、 可 修 改 性 和 可 测 试 性 是 软 件 的 重 要 的 质 量 指 标 。 实 践 证 明 , 用 传 统 方法 开 发 出 来 的 软 件 , 维 护 时 其 费 用 和 成 本 仍 然 很 高 , 其 原 因 是 可 修 改 性 差 , 维护 困 难 , 导 致 可 维 护 性 差 。3.开 发 出 的 软 件 不 能 满 足 用 户 需 要用 传 统 的 结 构 化 方 法 开 发 大 型 软 件 系 统 涉 及 各 种 不 同 领 域 的 知 识 , 在 开 发需 求 模 糊 或 需 求 动 态 变 化 的 系 统 时 , 所 开 发 出 的 软 件 系 统 往 往 不 能
6、真 正 满 足 用户 的 需 要 。用 结 构 化 方 法 开 发 的 软 件 , 其 稳 定 性 、 可 修 改 性 和 可 重 用 性 都 比 较 差 , 这是 因 为 结 构 化 方 法 的 本 质 是 功 能 分 解 , 从 代 表 目 标 系 统 整 体 功 能 的 单 个 处 理 着手 , 自 顶 向 下 不 断 把 复 杂 的 处 理 分 解 为 子 处 理 , 这 样 一 层 一 层 的 分 解 下 去 , 直到 仅 剩 下 若 干 个 容 易 实 现 的 子 处 理 功 能 为 止 , 然 后 用 相 应 的 工 具 来 描 述 各 个 最低 层 的 处 理 。 因 此 ,
7、结 构 化 方 法 是 围 绕 实 现 处 理 功 能 的 “过 程 ”来 构 造 系 统 的 。然 而 , 用 户 需 求 的 变 化 大 部 分 是 针 对 功 能 的 , 因 此 , 这 种 变 化 对 于 基 于 过 程 的设 计 来 说 是 灾 难 性 的 。 用 这 种 方 法 设 计 出 来 的 系 统 结 构 常 常 是 不 稳 定 的 , 用户 需 求 的 变 化 往 往 造 成 系 统 结 构 的 较 大 变 化 , 从 而 需 要 花 费 很 大 代 价 才 能 实 现这 种 变 化 。 编 辑 本 段 二 、 面 向 对 象 的 基 本 概 念(1)对 象 。对 象 是
8、 人 们 要 进 行 研 究 的 任 何 事 物 , 从 最 简 单 的 整 数 到 复 杂 的 飞 机 等 均 可看 作 对 象 , 它 不 仅 能 表 示 具 体 的 事 物 , 还 能 表 示 抽 象 的 规 则 、 计 划 或 事 件 。(2)对 象 的 状 态 和 行 为 。对 象 具 有 状 态 , 一 个 对 象 用 数 据 值 来 描 述 它 的 状 态 。对 象 还 有 操 作 , 用 于 改 变 对 象 的 状 态 , 对 象 及 其 操 作 就 是 对 象 的 行 为 。对 象 实 现 了 数 据 和 操 作 的 结 合 , 使 数 据 和 操 作 封 装 于 对 象 的
9、 统 一 体 中(3)类 。具 有 相 同 或 相 似 性 质 的 对 象 的 抽 象 就 是 类 。 因 此 , 对 象 的 抽 象 是 类 , 类 的具 体 化 就 是 对 象 , 也 可 以 说 类 的 实 例 是 对 象 。类 具 有 属 性 , 它 是 对 象 的 状 态 的 抽 象 , 用 数 据 结 构 来 描 述 类 的 属 性 。类 具 有 操 作 , 它 是 对 象 的 行 为 的 抽 象 , 用 操 作 名 和 实 现 该 操 作 的 方 法 来 描述 。(4)类 的 结 构 。在 客 观 世 界 中 有 若 干 类 , 这 些 类 之 间 有 一 定 的 结 构 关 系
10、 。 通 常 有 两 种 主 要的 结 构 关 系 , 即 一 般 -具 体 结 构 关 系 , 整 体 -部 分 结 构 关 系 。 一 般 具 体 结 构 称 为 分 类 结 构 , 也 可 以 说 是 “或 ”关 系 , 或 者 是 “is a”关 系 。 整 体 部 分 结 构 称 为 组 装 结 构 , 它 们 之 间 的 关 系 是 一 种 “与 ”关 系 , 或者 是 “has a”关 系 。(5)消 息 和 方 法 。对 象 之 间 进 行 通 信 的 结 构 叫 做 消 息 。 在 对 象 的 操 作 中 , 当 一 个 消 息 发 送 给某 个 对 象 时 , 消 息 包
11、含 接 收 对 象 去 执 行 某 种 操 作 的 信 息 。 发 送 一 条 消 息 至 少 要包 括 说 明 接 受 消 息 的 对 象 名 、 发 送 给 该 对 象 的 消 息 名 ( 即 对 象 名 、 方 法 名 ) 。一 般 还 要 对 参 数 加 以 说 明 , 参 数 可 以 是 认 识 该 消 息 的 对 象 所 知 道 的 变 量 名 , 或者 是 所 有 对 象 都 知 道 的 全 局 变 量 名 。类 中 操 作 的 实 现 过 程 叫 做 方 法 , 一 个 方 法 有 方 法 名 、 参 数 、 方 法 体 。 消 息传 递 如 图 10-1 所 示 。 编 辑
12、本 段 三 、 面 向 对 象 的 特 征(1)对 象 唯 一 性 。每 个 对 象 都 有 自 身 唯 一 的 标 识 , 通 过 这 种 标 识 , 可 找 到 相 应 的 对 象 。 在 对象 的 整 个 生 命 期 中 , 它 的 标 识 都 不 改 变 , 不 同 的 对 象 不 能 有 相 同 的 标 识 。(2)抽 象 性 。分 类 性 是 指 将 具 有 一 致 的 数 据 结 构 (属 性 )和 行 为 (操 作 )的 对 象 抽 象 成 类 。一 个 类 就 是 这 样 一 种 抽 象 , 它 反 映 了 与 应 用 有 关 的 重 要 性 质 , 而 忽 略 其 他 一
13、些无 关 内 容 。 任 何 类 的 划 分 都 是 主 观 的 , 但 必 须 与 具 体 的 应 用 有 关 。(3)继 承 性 。继 承 性 是 子 类 自 动 共 享 父 类 数 据 结 构 和 方 法 的 机 制 , 这 是 类 之 间 的 一 种 关系 。 在 定 义 和 实 现 一 个 类 的 时 候 , 可 以 在 一 个 已 经 存 在 的 类 的 基 础 之 上 来 进 行 ,把 这 个 已 经 存 在 的 类 所 定 义 的 内 容 作 为 自 己 的 内 容 , 并 加 入 若 干 新 的 内 容 。继 承 性 是 面 向 对 象 程 序 设 计 语 言 不 同 于 其
14、 它 语 言 的 最 重 要 的 特 点 , 是 其 他语 言 所 没 有 的 。在 类 层 次 中 , 子 类 只 继 承 一 个 父 类 的 数 据 结 构 和 方 法 , 则 称 为 单 重 继 承 。在 类 层 次 中 , 子 类 继 承 了 多 个 父 类 的 数 据 结 构 和 方 法 , 则 称 为 多 重 继 承 。在 软 件 开 发 中 , 类 的 继 承 性 使 所 建 立 的 软 件 具 有 开 放 性 、 可 扩 充 性 , 这 是信 息 组 织 与 分 类 的 行 之 有 效 的 方 法 , 它 简 化 了 对 象 、 类 的 创 建 工 作 量 , 增 加 了代 码
15、 的 可 重 性 。采 用 继 承 性 , 提 供 了 类 的 规 范 的 等 级 结 构 。 通 过 类 的 继 承 关 系 , 使 公 共 的特 性 能 够 共 享 , 提 高 了 软 件 的 重 用 性 。(4)多 态 性 (多 形 性 )多 态 性 使 指 相 同 的 操 作 或 函 数 、 过 程 可 作 用 于 多 种 类 型 的 对 象 上 并 获 得 不同 的 结 果 。 不 同 的 对 象 , 收 到 同 一 消 息 可 以 产 生 不 同 的 结 果 , 这 种 现 象 称 为 多态 性 。多 态 性 允 许 每 个 对 象 以 适 合 自 身 的 方 式 去 响 应 共
16、同 的 消 息 。 多 态 性 增 强 了 软 件 的 灵 活 性 和 重 用 性 。 编 辑 本 段 四 、 面 向 对 象 的 要 素(1)抽 象 。 抽 象 是 指 强 调 实 体 的 本 质 、 内 在 的 属 性 。 在 系 统 开 发 中 , 抽 象 指 的 是 在 决定 如 何 实 现 对 象 之 前 的 对 象 的 意 义 和 行 为 。 使 用 抽 象 可 以 尽 可 能 避 免 过 早 考 虑一 些 细 节 。类 实 现 了 对 象 的 数 据 ( 即 状 态 ) 和 行 为 的 抽 象 。(2)封 装 性 ( 信 息 隐 藏 ) 。封 装 性 是 保 证 软 件 部 件 具 有 优 良 的 模 块 性 的 基 础 。面 向 对 象 的 类 是 封 装 良 好 的 模 块 , 类 定 义 将 其 说 明 ( 用 户 可 见 的 外 部 接 口 )与 实 现 ( 用 户 不 可 见 的 内 部 实 现 ) 显 式 地 分 开 , 其 内 部 实 现 按 其 具 体 定 义 的 作用