现在的位置: 首页 > 综合 > 正文

面向对象:类组合还是类继承?

2013年10月12日 ⁄ 综合 ⁄ 共 1201字 ⁄ 字号 评论关闭

 

类组



类继
承?



有一

表A,有多个画面用到。比如10个画面用到。由于每个画面功能不一

,但A表的大多数字段所以字段都是共用的。

种情况下,怎么写自己的INFO

呢?大概有3种方案
方案1:每个画面都写一个自己的INFO
方案2:先写一个表A的INFO
,然后每个画面的INFO

里面加一个表A的INFO



属性。也就是
类组
合。
方案3:先写一个表A的INFO
,然后每个画面的INFO



承于表A的INFO

。也就是
类继
承。
 

稍微分析一下,方案1首先被淘汰掉,因



量大,增加了工作量和
维护
成本。那方案2和方案3呢?都是面向

象的思想,究竟哪种好呢?
这还
得了解一下
类组
合和
类继
承的

缺点。
类组
合的

点:
  
--容器类仅
能通

被包含

象的接口来




访问

  
--  “黑盒”复用,因
被包含

象的内部
细节对
外是不可


  
-- 封装性好。
  
-- 实现
上的相互依

性比

小。被包含

象与容器

象之

的依

关系比


  
-- 每一个


注于一




  
-- 通过获
取指向其它的具有相同

型的

象引用,可以在运行期
间动态
地定



象的)

合。
类组
合的缺点:
  
--
致系

中的



多。
  
-- 
了能将多个不同的

象作
为组


(composition block)来使用,必





接口

行定


 
类继承的优点:
  
--  容易
行新的
实现
,因

其大多数可

承而来。
  
--  易于修改或
展那些被复用的
实现

■类继承的缺点:
  
--  破坏了封装性,因为这
会将父


实现细节
暴露




  
--  “白盒”复用,因


的内部
细节对
于子

而言通常是可

的。
  
--  当父

实现
更改

,子

也不得不会随之更改。
  
--  从父类继
承来的
实现
将不能在运行期
间进
行改


 
Coad规则

仅当下列的所有标准被满足时,方可使用继承:
  
▲子
表达了“是一个…的特殊

型”,而非“是一个由…所扮演的角色”。
  
▲子
的一个

例永

不需要

化(transmute)

其它

的一个

象。
  
▲子


其父


职责
(responsibility)



展,而非重写或

除(nullify)。
  
▲子
没有

那些



一个工具

(utility
class)的功能




展。
  

于一个位于
实际

问题
域(Problem Domain)的

而言,其子

特指一种角色(role),交易(transaction)或
设备
(device)。
 
 

合与

承都是重要的重用方法,在面向

象开

的早期

承被

度使用。
实际
上究竟是用





承是要根据
实际
情况来判断的,用

合的好



是用

承的好

多,或者两者集合起来用。
 
因此
合上面的

缺点,上面的那个例子用

承好

多,因
为这
个地方只是一个
单纯
的一

表的操作。如果是
设计


表的

,使用
类组
合更好一些,因
为类组
合封装性好,不容易出



个地方就需要我

具体
问题
具体分析了。
【上篇】
【下篇】

抱歉!评论已关闭.