[思考] 广义继承的本质是default

说明: 一切的 "思考" 的前提都是 "我认为"

OOP的 inherit 已经非常熟悉了, 我问自己: 继承解决的最本质的问题是什么? 是复用吗?

事实证明: 想着复用(下个版本复用, team内复用, 公司复用, 更广泛的复用)的东西, 绝大部分都不会被复用.

有多少东西的设计原始目的就是冲着复用来的? 

从实用的角度出发, 我认为继承的本质应该是 "default", 将复用作为继承的亮点宣传, 给我的感觉就是OOP的广告词!

有继承, 就有 parent 和 child, 就有override

如果parent和child有相同属性(或是行为)时, 以哪个为准?

在面象对象的语言中都是 child 有更高的优先级. 但实际上还有一些继承是需要parent拥有更高的优先级!

典型的是Flash Player的 security/application domain模型, 以及JVM的class loader机制, 它们的共同点就是为了安全!

但JVM在AppClassLoader后, 因为能动态操作ClassLoader, 所以可以用这样的方法来模拟 子优先:

在爷爷(A)坐镇下, C 就有了和父亲(B)同台竞技的机会了, 它可以选择做B的儿子(也就是A的孙子), 也可以选择做B的兄弟(也就是A的儿子).

Tomcat的WebAppClassloader就是用的这种思路.

      Bootstrap
          |
       System
          |
       Common
       /     \
  Webapp1   Webapp2 ... 

Flash application domain还没有研究, 不知道能不能做  模拟的 "子优先".

配置文件能有继承机制就好了.

程序配置文件中的每个option改动的频率和概率都是不一样的, 甚至改动的角色都会不一样. 如果我们能做成一个配置文件的继承机制, 我们就可以所有的default值做成一个 default config file, extends base_config_file的配置文件, 可以选择性地覆盖一些option. 这样就能做到配置文件的简洁和灵活的统一了.

在我做的一个 基于command line的项目中, command option总共有30多个, 而最常用的也是4个. 我将default command options做成了一个template, 用户可以这样用:

./app -template=default

如果用户想更改default中的 batchsize=500 为 1000, 他可以这样用

./app -template=default  batchsize=1000

在不同的领域有着不同的 继承 的表现/实现方式, 但解决的问题, 和需要考虑的问题总是那么地相似!!

smithfox | Wednesday 06 April 2011 at 4:08 pm | | other       

five comments

胖子

不同的视角,学习之

胖子, (URL) - 07-04-’11 17:36
smithfox

Pan, 你们的 深入PHP内核 写的真的很好, 出书时, 一定要买一本

smithfox, (URL) - 08-04-’11 08:33
smithfox

最近, 在做一另一个改进型的 配置文件的 继承, 发现可以让用户 在运行那一刻 选择 继承关系, 这样配置文件就不必事先写好 继承那个 父配置文件. 很好很强大!!
得以启发: 为什么继承一定要做成静态的呢? 如果能在运行时决定继承关系, 那会解决好多的问题. :)

smithfox, (URL) - 15-04-’11 16:53
best iPhone 6 Case

Rumour has it the iPhone 7 camera could be up to 21-megapixels but more likely is a jump to 12Mp, according to Kevin Wang, IHS Technology Research Director in China. But the catch is that the pixels will be smaller which may mean a drop in low light performance.

best iPhone 6 Case, (URL) - 04-06-’15 14:51
Yeezy Boost 350 Replica

This release will include the same styles in blue and gray options. The shoes have a stretch patched-tape upper and a molded nubuck heel.

Yeezy Boost 350 Replica, (URL) - 01-06-’16 14:44
(optional field)
(optional field)
为阻止垃圾广告, 请在提交评论前, 回答一个简单问题(Please answer an simple question)
Remember personal info?
Notify
Small print: All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.