UML软件工程组织

几种构件模型的比较分析
作者:刘江宁 吴泉源 周立 选自:www.tongji.edu.cn

软 件 构 件 模 型 是 关 于 开 发 可 重 用 软 件 构 件 和 构 件 之 间 相 互 通 信 的 一 组 标 准 的 描 述。 通 过 重 用 已 有 的 软 构 件, 使 用 构 件 对 象 模 型 的 软 件 开 发 者 可 以 像 搭 积 木 一 样 快 速 构 造 应 用 程 序。 这 样 不 仅 可 以 节 省 时 间 和 经 费, 提 高 工 作 效 率, 而 且 可 以 产 生 更 加 规 范、 更 加 可 靠 的 应 用 软 件。

---- 软 件 构 件 应 该 具 备 以 下 几 个 特 征:

----· 自 描 述 构 件 必 须 能 够 识 别 其 属 性、 存 取 方 法 和 事 件, 这 些 信 息 可 以 使 开 发 环 境 将 第 三 方 软 件 构 件 无 缝 地 结 合 起 来;

---- · 可 定 制 提 供 一 个 典 型 的 图 形 方 式 环 境, 软 件 构 件 的 属 性 只 能 通 过 控 制 面 板 来 设 置;

---- ·可 集 成 构 件 必 须 可 以 被 编 程 语 言 直 接 控 制。 构 件 也 可 以 和 脚 本 语 言 连 接 或 者 与 从 代 码 级 访 问 构 件 的 环 境 连 接, 这 个 特 性 使 得 软 件 构 件 可 以 在 非 可 视 化 开 发 项 目 中 使 用;

---- · 连 接 机 制 构 件 必 须 能 产 生 事 件 或 者 具 有 让 程 序 员 从 语 义 上 实 现 相 互 连 接 的 其 他 机 制。 这 意 味 着 程 序 员 可 以 很 容 易 地 向 按 钮 添 加 代 码, 使 点 中 按 钮 就 可 以 影 响 其 他 构 件 的 动 作。

---- 构 件 模 型 是 为 开 发 者 定 义 软 件 构 件 而 建 立 的 体 系 结 构 和API 集, 使 开 发 者 可 通 过 软 件 构 件 的 动 态 组 合 来 建 立 应 用 系 统。 构 件 模 型 由 构 件 与 容 器 两 种 主 要 成 份 构 成。 构 件 是 具 有 可 重 用 特 性 的 基 本 软 件 部 件。 容 器 用 于 存 放 和 安 排 构 件, 实 现 构 件 间 的 交 互。 容 器 也 可 以 作 为 另 一 个 容 器 的 构 件 使 用。

----本 文 对CORBA、DCOM 和Java 等 三 种 典 型 的 构 件 模 型 做 出 了 比 较 分 析。

CORBA

 

---- CORBA 构 件 模 型 的 底 层 结 构 为ORB。 一 个CORBA 构 件 采 用IDL 进 行 描 述。CORBA 提 供 了IDL 到C、C + +、Java、 COBOL 等 语 言 的 映 射 机 制--IDL 编 译 器。IDL 编 译 器 可 以 生 成Server 方 的Skelton 和Client 方 的Stub 代 码, 通 过 分 别 与 客 户 端 和 服 务 端 程 序 的 联 编, 即 可 得 到 相 应 的Server 和Client 程 序。

---- CORBA 同 时 提 供 了 一 系 列 的 公 共 服 务 规 范--COSS, 其 中 包 括 名 字 服 务、 永 久 对 象 服 务、 生 命 周 期 服 务、 事 务 处 理 服 务、 对 象 事 件 服 务 和 安 全 服 务 等, 它 们 相 当 于 一 类 用 于 企 业 级 计 算 的 公 共 构 件。 此 外,CORBA 还 针 对 电 信、 石 油 等 典 型 的 应 用 行 业 提 供 了 一 系 列 的 公 共 设 施。

---- CORBA 是 一 种 语 言 中 性 的 软 件 构 件 模 型, 可 以 跨 越 不 同 的 网 络、 不 同 的 机 器 和 不 同 的 操 作 系 统, 实 现 分 布 对 象 之 间 的 互 操 作。

DCOM

 

---- DCOM 是Microsoft 与 其 他 业 界 厂 商 合 作 提 出 的 一 种 分 布 构 件 对 象 模 型(Distributed Component Object Model), 其 发 展 经 历 了 一 个 相 当 曲 折 的 过 程。DCOM 起 源 于 动 态 数 据 交 换(DDE) 技 术, 通 过 剪 切/ 粘 贴(Cut/Paste) 实 现 两 个 应 用 程 序 之 间 共 享 数 据 的 动 态 交 换。 对 象 连 接 与 嵌 入OLE 就 是 从DDE 引 伸 而 来 的。

---- 随 后,Microsoft 引 入 了 构 件 对 象 模 型 COM, 形 成 了COM 对 象 之 间 实 现 互 操 作 的 二 进 制 标 准。COM 规 定 了 对 象 模 型 和 编 程 要 求, 使COM 对 象 可 以 与 其 他 对 象 相 互 操 作。 这 些 对 象 可 以 用 不 同 的 语 言 实 现, 其 结 构 也 可 以 不 同。 基 于COM, 微 软 进 一 步 将OLE 技 术 发 展 到OLE2。 其 中,COM 实 现 了OLE 对 象 之 间 的 底 层 通 信 工 作, 其 作 用 类 似 于CORBA/ORB。 不 过 此 时 的COM 只 能 作 用 在 单 机Wintel 平 台 上。 在OLE2 中, 也 出 现 了 我 们 今 天 熟 知 的 拖- 放 技 术 以 及OLE 自 动 化。

---- 同 时, 微 软 在VB 中 引 入 了 可 以 嵌 入 任 何 可 视 构 件 的 通 用 模 型VBX。VBX 的 主 要 局 限 在 于 它 并 不 是 一 个 开 放 的 结 构, 也 没 有 为 第 三 方 软 件 开 发 商 提 供VBX 集 成 的 标 准。 最 后, 微 软 将 上 述 思 想 集 中 在 一 起, 以COM 作 为 构 件 通 信 框 架。 VBX 也 发 展 为OLE 控 件OCX 的 形 式。DCOM 是COM 在 分 布 计 算 方 面 的 自 然 延 续, 它 为 分 布 在 网 络 不 同 节 点 的 两 个COM 构 件 提 供 了 互 操 作 的 基 础 结 构, 而 所 有 以OLE 为 标 志 的 技 术 如 今 也 已 挂 上 了 ActiveX 标 志。

---- 从CORBA 的 观 点 来 看, 我 们 可 以 粗 略 地 说,ActiveX 控 件 与DCOM 的 关 系 相 当 于CORBA 构 件 与ORB 的 关 系。 当 然, 按 照 微 软 一 贯 的 产 品 开 发 逻 辑, 微 妙 的 思 想 都 退 到 了 幕 后, 而 提 供 给 开 发 者 的 是 一 个 以Wizard 方 式 生 成 各 种 应 用 的 可 视 化 开 发 环 境。 在 公 共 服 务 方 面, 微 软 提 出 了 自 己 的 事 务 服 务 器 MTS(Microsoft Transaction Server) 和 消 息 队 列 服 务 器MSMQ(Microsoft Message Queue Server)。 前 者 与CORBA 对 象 事 务 服 务 目 标 类 似, 后 者 则 是 为 了 保 证 应 用 之 间 进 行 可 靠 的 消 息 通 讯 和 管 理。 此 外, 微 软 在 网 络 安 全 方 面 也 有 一 整 套 实 用 的 解 决 方 案。

Java

 

---- 按 照Sun 和Javasoft 对Java 的 界 定,Java 是 一 个 应 用 程 序 开 发 平 台, 它 按 照 高 性 能、 可 移 植、 可 解 释 的 原 则, 提 供 面 向 对 象 的 编 程 语 言 和 运 行 环 境。Java 计 算 的 本 质 就 是 利 用 分 布 在 网 络 中 的 各 类 对 象 共 同 完 成 相 应 的 任 务。 例 如Java Applet 可 按 用 户 的 需 求 从 服 务 器 上 动 态 地 下 载 到 客 户 机 的 浏 览 器 上, 完 成HTML 页 面 的 动 态 变 化。

---- Java 对 于 软 件 构 件 的 观 点 与CORBA 中 的 构 件 观 点 存 在 一 定 的 区 别。 在CORBA 中,CORBA/ORB 相 当 于 一 根 软 总 线, 构 件 可 以 即 插 即 用。 也 就 是 说, 从CORBA 的 观 点 看 来, 所 有 构 件 的 地 位 相 当, 完 全 是 一 种 平 行 的 关 系。 而 在Java 中, 软 件 构 件 是 能 够 进 行 可 视 化 操 作 的 可 重 用 软 件, 它 满 足 一 定 的 特 征 要 求, 并 可 以 根 据 需 要 进 行 定 制 和 组 装。

---- Java 的 软 件 构 件 称 为JavaBean, 或 者 简 称 Bean。 按 照Javasoft 给 出 的 定 义,Bean 是 能 够 在 构 造 工 具 中 进 行 可 视 化 操 作 的 可 重 用 软 件。JavaBean 的 组 件 模 型 包 含 组 件 和 容 器 两 个 基 本 要 素, 这 一 思 想 在ActiveX/DCOM 技 术 中 同 样 存 在。 作 为 一 种 典 型 的 组 件 模 型,JavaBean 具 有 属 性、 方 法、 事 件、 自 我 检 查、 定 制 和 永 久 性 等6 个 方 面 的 特 征。 其 中 前3 种 特 征( 属 性、 方 法、 事 件) 是 面 向 对 象 的 组 件 必 须 满 足 的 基 本 要 求, 属 性 和 方 法 保 证Bean 成 为 一 个 对 象, 而 事 件 可 以 描 述 组 件 之 间 的 相 互 作 用 以 及 组 件 与 容 器 之 间 相 互 感 兴 趣 的 事 情。 通 过 事 件 的 生 成、 传 播 和 处 理, 构 件 相 互 之 间 关 联 在 一 起, 共 同 完 成 复 杂 的 任 务。 后 三 种 特 征( 自 我 检 查、 定 制 和 永 久 性) 主 要 侧 重 于 对JavaBeans 组 件 性 质 的 刻 画。 内 省 用 于 暴 露 与 发 现 构 件 接 口。 使 用 内 省 机 制, 可 以 使 构 件 的 使 用 者 了 解 到 构 件 的 属 性、 方 法 和 事 件。 由 于 一 个 构 件 通 常 是 具 有 一 定 性 质 和 行 为 的 对 象 的 抽 象, 它 往 往 有 很 大 的 通 用 性。 为 了 在 一 个 具 体 的 应 用 环 境 中 使 用 构 件, 必 须 对 构 件 进 行 定 制。JavaBean 的 定 制 通 常 在 一 个 可 视 化 生 成 工 具 中 进 行, 通 过 构 件 的 内 省 机 制, 发 现 构 件 的 属 性、 方 法 和 事 件, 然 后 利 用 生 成 工 具 提 供 的 属 性 编 辑 器 实 现 定 制。 永 久 性 是 将 构 件 的 状 态 保 存 在 永 久 存 储 器 中 并 能 够 一 致 恢 复 的 机 制。Java 通 过 序 列 化(Serialize) 实 现 定 制 构 件 的 永 久 性 存 储, 通 过 反 序 列 化 可 以 实 现 构 件 状 态 的 恢 复。

---- JavaBean 构 件 的 本 地 活 动 是 在 与 其 容 器 相 同 的 地 址 空 间 内 进 行 的。 在 网 络 上,JavaBean 构 件 可 以 以 三 种 方 式 进 行 活 动:

  • JDBC 使Bean 构 件 能 够 访 问SQL 数 据 库。Bean 可 以 实 现 给 定 数 据 库 中 的 表 操 作, 完 成 相 应 的 业 务 逻 辑;
  • JavaRMI( 远 程 方 法 调 用) 使 分 布 在 网 络 不 同 地 址 上 的 两 个 构 件 之 间 实 现 互 操 作。 构 件 之 间 的 调 用 方 式 采 用 经 典 的Client/Server 计 算 模 型;
  • JavaIDL 是 一 个Java 版 的CORBA/ORB。 通 过JavaIDL 可 以 实 现 一 个 JavaBean 和 一 个CORBA 服 务 之 间 的 互 操 作。 基 于JavaIDL 的Java 构 件 互 操 作 模 型 完 全 等 同 于CORBA 的 思 想, 只 不 过 具 体 的 编 程 语 言 采 用 Java, 而CORBA/ORB 选 择 了JavaIDL。

图1 Java 三 种 网 络 访 问 机 制

---- 远 程 方 法 调 用 机 制RMI 是 构 成Java 分 布 对 象 模 型 的 基 础 结 构。RMI 系 统 包 括 桩/ 框 架 层、 远 程 引 用 层 和 传 输 层。 目 前,RMI 的 传 输 层 是 基 于TCP 实 现 的, 将 来 的RMI 体 系 结 构 建 立 在IIOP 协 议 之 上, 可 以 实 现Java 技 术 与CORBA 技 术 的 深 层 融 合。 应 用 层 建 立 在RMI 系 统 之 上。 图2 给 出 了 各 层 之 间 的 关 系。

图2 RMI 系 统 中 各 层 之 间 的 关 系

---- 最 近 两 年,Java 又 提 出 了 企 业JavaBean (EJB) 的 思 想, 其 结 构 完 全 采 用 基 于 软 件 构 件 模 型 的 分 布 对 象 计 算 体 系, 如 图3 所 示。

图3 企 业JavaBeans 结 构

---- 企 业JavaBean 各 组 成 部 分 的 含 义 为:

  • JDBC(Java Database Connectivity): 基 于SQL 标 准Java 数 据 库 连 接, 其 基 本 功 能 和 设 计 与ODBC 相 似;
  • JavaRMI(Java Remote Method Invocation):Java 远 程 方 法 调 用;
  • JNDI(Java Naming and Directory Interface):Java 名 字 与 目 录 服 务;
  • JavaIDL:Java 和COBRA 之 间 的 连 接;
  • JTS(Java Transaction Service):Java 事 务 管 理 服 务;
  • JMAPI(Java Management API):Java 网 络 管 理API;
  • JMS(Java Message Service):Java 消 息 传 递 服 务。

---- 用CORBA 的 观 点 来 看, 企 业JavaBean 中 包 括 了 分 布 构 件 的 基 础 结 构, 也 包 括 了 各 类 公 共 服 务 构 件。 并 且 由 于Java 与 生 俱 来 的 跨 平 台 性 和 语 言 的 一 致 性, 使 其 成 为 软 件 构 件 模 型 的 一 个 有 力 的 竞 争 者。

比 较 分 析

 

---- 下 面, 我 们 从 企 业 计 算 的 角 度 出 发, 对CORBA、DCOM 和Java 三 种 构 件 模 型 进 行 分 析 比 较。 按 照 企 业 计 算 的 要 求, 构 件 模 型 的 比 较 分 析 应 该 依 据 以 下 原 则:

---- · 集 成 性 集 成 性 主 要 反 映 在 基 础 平 台 对 应 用 程 序 互 操 作 能 力 的 支 持 上。 它 要 求 分 布 在 不 同 机 器 平 台 和 操 作 系 统 上、 采 用 不 同 的 语 言 或 者 开 发 工 具 生 成 的 各 类 商 业 应 用 必 须 能 集 成 在 一 起, 构 成 一 个 统 一 的 企 业 计 算 框 架。 这 一 集 成 框 架 必 须 建 立 在 网 络 的 基 础 之 上, 并 且 具 备 对 于 遗 留 应 用 的 集 成 能 力;

----· 可 用 性 要 求 所 采 用 的 软 件 构 件 技 术 必 须 是 成 熟 的 技 术, 相 应 的 产 品 也 必 须 是 成 熟 的 产 品, 在 至 关 重 要 的 企 业 应 用 中 能 够 稳 定、 安 全、 可 靠 地 运 行。 另 外, 由 于 数 据 库 在 企 业 计 算 中 扮 演 着 重 要 角 色, 软 件 构 件 技 术 应 能 与 数 据 库 技 术 紧 密 集 成;

----·可 扩 展 性 集 成 框 架 必 须 是 可 扩 展 的, 能 够 协 调 不 同 的 设 计 模 式 和 实 现 策 略, 可 以 根 据 企 业 计 算 的 需 求 进 行 裁 剪, 并 能 迅 速 反 应 市 场 的 变 化 和 技 术 的 发 展 趋 势。 通 过 保 证 当 前 应 用 的 可 重 用 性, 最 大 程 度 地 保 护 企 业 的 投 资。

---- 这 些 观 点 实 质 上 反 映 了 将 软 件 构 件 技 术 看 作 一 个 黑 箱 时 给 予 企 业IT 经 理 们 的 重 要 观 感。

---- 表1 进 一 步 细 化 了 每 种 原 则 要 求, 并 给 出 了 三 种 软 件 构 件 技 术 的 比 较 结 果。 这 些 数 据 完 全 来 自 经 验, 并 不 代 表 深 入 细 致 的 调 查 结 果。

JAVA 和CORBA 的 互 补 性

 

---- Java 提 供 了 一 个 概 念 清 晰、 结 构 紧 凑 的 分 布 计 算 模 型 和 构 件 互 操 作 的 方 法, 为 构 件 应 用 开 发 提 供 了 相 当 的 灵 活 性。 但 由 于 它 还 处 于 发 展 时 期, 因 此 其 形 态 很 难 界 定。CORBA 是 一 种 集 成 技 术, 而 不 是 编 程 技 术。 它 提 供 了 对 各 种 功 能 模 块 进 行 构 件 化 处 理 并 将 它 们 捆 绑 在 一 起 的 粘 合 剂。Java 和 CORBA 在 很 大 的 程 度 上 可 以 看 作 是 互 补 的。 为 了 适 应WEB 应 用 的 发 展 要 求, 许 多 软 件 厂 商 都 急 于 促 成CORBA 和Java 技 术 的 结 合, 将 来 的RMI 可 能 建 立 在IIOP 之 上。CORBA 不 只 是 对 象 请 求 代 理ORB, 也 是 一 个 非 常 完 整 的 分 布 式 对 象 平 台。CORBA 可 以 扩 展Java 在 网 络、 语 言、 组 件 边 界、 操 作 系 统 中 的 各 种 应 用。 其 次,Java 也 不 仅 仅 是 与 CORBA 捆 绑 的 语 言, 它 还 是 一 个 易 变 的 对 象 系 统, 也 是 一 个 运 行 对 象 的 便 携 式OS, 而 且 允 许CORBA 对 象 在 主 机、 网 络 计 算 机 和 蜂 窝 电 话 等 应 用 上 运 行。Java 还 简 化 了 大 型CORBA 系 统 中 的 代 码 分 配, 其 中 内 置 的 多 线 程 和 垃 圾 收 集 使 编 写 可 靠 的 网 络 对 象 更 为 方 便。 此 外,Java 能 创 建 可 移 动 对 象 并 将 它 们 分 发 出 去, 而 采 用CORBA 可 以 将 它 们 连 接 在 一 起, 并 与 计 算 环 境 中 的 数 据 库、 遗 留 系 统、 其 他 语 言 编 写 的 对 象 和 应 用 相 互 集 成。

---- CORAB 与Java 的 基 础 结 构 也 可 以 很 好 地 互 补。CORBA 处 理 网 络 透 明 性,Java 处 理 实 现 透 明 性。CORBA 提 供 了 Java 便 携 应 用 环 境 与 对 象 间 的 连 接。 由 此 看 来CORAB/Java 技 术 紧 密 结 合 的 趋 势 是 势 不 可 挡 的。 而 且 二 者 的 结 合 将 成 为ObjectWeb 技 术 的 主 要 形 态。


版权所有:UML软件工程组织