应需而变-聚合优先于继承机制的原理分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
标代 码机 器化 ,未竟的事业 留待运行到这一句时再动态绑定 次 。动 态绑定意味着要编译器在遇到某些 函数调用时先放
一
弃静态绑定, 所 以也称 迟滞 编译。具体做 法是: 使用 v i r t u a l 关 键字标识要推迟绑定 的函数 。 v i r t u a l 函数作用于成员函数, 有 两层涵义 : 推迟绑定; 一旦一个函数定义为v i r t u a l , 就 意味着它 所在的类的派生类可 以改写这个 函数业务逻辑规则 。 动态多态 的意义在于 当使用基类类型 的访 问形式 ( 但基 类指针或基类 引用实际存储指 向的对象变化不定) 时, 该机制 提供 了更高层次意义上 的代码适应变化 的能力 : ( 1 ) 服务方在基类 中定义缺省规则给出一个常规的业务处 理实现 ( 也可 以不定义仅给声 明) , 该 函数定义为 v i r t u a l 虚 函 数, 意味 着 可 以被 派 生 类 覆 盖 改 写 ; ( 2 ) 服务 方定义多个派生类, 定 义 预 见 到 的不 同版 本 业 务 逻辑规则实现 , 实则定义了多个不 同的改写 ; ( 3 ) 客户方可根据业务变化需要定义新的派生类业务逻辑; ( 4 )使 用 基 类 指 针 或 引用 的形 式 调 用 该 函数 。 下面 的代码示例 中, 仅凭客户端代码 p . > f 【 ) 函数调用这一 句 己不 能准确 判定是何种绑定( A: : f o r B: : f o r C: : f ) , 而要根 据上 下文 ( p类型 以及具体指 向) 以及 f 绑定类型 ( v i t r u a l 动态 绑定类型函数 o r 静态绑定类型普通 函数) :
定义: 推迟绑 定, 在运行时再进行一次编译绑定 。 动 态 多 态 ,意 即 需 要 再 运 行 时 再 确 定 具 体 调 用 的函 数 形 式,也称 为动态绑定 。编译阶段实际没有完成对源代码 的 目
继承是编译 时静 态确定的类属性结构 ,一旦一个类 继承 了另一个类 时, 它就是基类类 型的型, 没法动态 的让它变成 另
( 湖北经济学院 信息管理学院 , 湖北 武汉 4 3 0 2 0 5 )
摘要 :信息 管理 系统 面临的 困境是应用 多变,开发能适应 未来需求变更 的弹性应用持 续成为面向对象方法 学研 究的热 点。 本文从 面向对 象的两个基本特 性聚合和继承 出发 , 试图挖掘 分析聚合优先 于继承 的本质原 因 , 指 出聚合优先 于继承
( 1 ) 重载 ( O v e r l o a d ) : 可在 同域书写多个同名但不同参数 类型和参数个 数的函数, 它们之 间形成重载关 系。 ( 2 ) 模板 ( T e mp l a t e ) ( J A V A 中称 为泛 型 G e n e i t c t y p e ) : 模
对 ma i n内的函数调用 , 编译后存储为 f @i n t 的形式 , i n t
表示参数类 型。 显然 , 我们可 以得 出函数重载与模板 都是静态 多态 。
机器替代 , 或部分替代 问题 。因此 , 首先需要分析现实世界 的 人、 物 互动 , 然后用软件代 码来模拟 。
的原 则, 并给 出丰 富示例 以演示体 系结构类设计 的持 续改进过程 。 关键词 : 继承 ; 聚合 ; 两类多态 ; 设 计 模 式 中图分类 号 : T P 3 0 1 文献标识码 : A 文章编号 : 1 6 7 3 — 1 1 3 1 ( 2 0 1 4 ) 0 1 — 0 1 1 7 — 0 3
无能为力 了。也就 是说, 一旦 继承 了某 类, 那么就 具有 了该类 的全部静态 的属 性和方法 ,在编译期就绑定好 了这 些特征无 法卸除 。 如果使用 聚合 , 就有动态加载给 它变化能力 的可能 。 在 Go F提 出的 2 3种设计模式 中, 聚合 替换继承 常被 用于组 织 易变功 能的对 象实体, 但其机 理尚值得深入研究 。
从现实对象来看 , 对象 问如果发生联 系, 我们称为耦合关 系, 它不外乎 I s继承关系和 US E使用关系 。I S关系 , 表示 一 个对象继承来 自另一个 更本质特征 的对象 的特征 ,并加入 了 新的特征 , 使用术语继承来表示 I S关 系 。US E关 系 , 表 示 两 个 对 象 间发 生 着 消 息传 递 ( 类似于 函数调用) 的使 用 关 系 。 最 强烈的 US E关系称之 为聚合, 它表示事物 间的一种组成包含 。 继承与 聚合本是 没有 多少关联 的平行范畴 ,却 因为实 际应 用 系统可能 的弹性 需求 变化 , 变得 需要灵活交替使用 。
v o i d ma i n ( )
{ 5 ) :} 一 一 一 一 一 一 一 一 一调 用
O 引言
对象间具有依赖 、 关联 、 聚合 ,以及 继承这 四种基本关系 ( 还可 复合 组成 一些复杂关系) , 提 出这 四种 关系的 目的, 是希 望建立的模型具有完备表达 能力,能准确模拟现实世界对 象 系统。从本质来说 , 软件解决 的是现实世界 人、 物相互动作 的
个类 。以一 台智能洗衣 机为例 , 如果还想它变成烘干机、 熨 烫机怎么办 ?或 者哪一天要去掉洗衣 的功 能,让 它只是一台
一
智能扫地机 该怎么办 ?对于还想让它能烘干机 、熨烫机 的需 求, 简单 的再增加 它的父类烘干机 、 熨烫机继承 即可 , 但 如果 要去掉洗衣 、 烘干 和熨烫的功能 , 让它 只能是扫地机 , 继承 就
板支 持使 用未定类 型的名称作为类型使用 : 如果 定义一个 函数使用未定类型名称 ( 称为函数模板) , 那么 当发 生函数调用绑定时再 由编译器展开生成具体的模板 函数 。 具体 的类型是 由函数 实参传递 到函数 定义中的形参 的; 如果定义一个类使用未定类型名称 ( 称为类模板) , 在实例化 该类的对象时传入具体类型, 然后编译器展开生成具体的模板类。 静态 多态告诉我们编译器具有实际判断具体类型进行适 配的能力: 重载是我们主动提供 不同类型的版 本; 模板则提供 了可使用通用类型 ,后使用时再传递具体类型让编译器去实 际创 建具体类型版本的能力 。 1 . 2 动 态 多态
2 0 1 4年 第 1期
( 总第 1 3 3 期)
信来自百度文库息 通 信
1 N FORM A T1 0N & C0 M M UN I CAT1 0N S
2O1 4
( S u m .N o 1 3 3 )
应 需而变一 聚合优 先于继承机制 的原理 分析
刘鹏远 , 关培 超 , 包 琼