面向对象的反思

<p$1$2$3$4$5$6> 

面向对象有三个特性:封装、继承、多态。

封装是不容置疑的,就算不是面向对象,一样有封装的开发思想。

多态,是能够减少阅读难度的方法,对合作开发有很大的帮助。

<p$1$2$3$4$5$6> 

最让人质疑,也是最有特色的是继承。

面向对象用很形象的思维,创造性的将现实世界的种类关系纳入开发指导中,但是正是这种类比,让我产生了一种忧虑。是不是这个目标太过理想,反而让人们忽视了其实质。

肯定的,现实世界的种类关系确实很普遍,我们完全有理由相信,编程使用类似的思想是有价值的,但是对于如何借鉴值得研究。

现在的面向对象继承方法,实质是什么?举例说:有个类D,继承自类B,类D实质上就是类B的简单修改版。用面向对象的语言来说,就是“使用原有功能,保持接口,添加功能”,或者“修正基类的功能”。

第一、接口基本一致。

第二、功能稍作改变。

因此,一般来说,继承就是为了建立一组“类族”,他们有很强的相似性。

为什么说继承有问题,在于继承极为容易被滥用。

最近我重新思考了这个问题,得出来的结论是:继承是一项高层应用,而不是一个基本设计概念。将一个具体的应用策略作为基础设计思想,是相当危险的,降低了设计的成效。

我认为,面向对象其实质是模块化的组件思想,其中“封装”作为基础,“接口”作为通信手段,“多态”作为“接口”的基本属性,从而达到组件于组件之间的松耦合,搞内聚状态。如果,没有封装,就不可能达到高内聚的设计要求,如果没有接口,或者接口不具备多态,组件和组件之间就没有真正意义上的分离,封装也没有任何意义,也不能达到松耦合的设计目标。

因此,我觉得,“面向对象”这个提法,着眼于将概念模型实例化这个角度,虽说有一定的合理性,但是从另一个角度,称作“面向组件”编程或者更能概括其设计思想。

总结:

面向对象有几个相关的理论。

1.概念模型。所谓的概念模型,就是将现实中的一组相关操作和对应的数据,组成一个单一的概念来描述的思想。比如,吃,喝,拉,撒,就可以组成人这个概念来描述。概念模型是将现实的事物,抽象化成一组操作和数据的方法。

2.组件化思想。根据建立的概念模型,引入封装,接口等技术手段,实现组件化,达到高内聚松耦合的设计目标。

3.设计模式。设计模式基于组件化,建立一套卓有成效的,关于组件和组件之间的结构关系的设计方案。

面向对象理论不包含:

1.算法

2.数据结构

我们知道“程序=算法+数据结构”,面向对象却不包含这两个,说明面向对象只是上层建筑,而不包含其底层支持。学习面向对象,是无法“做程序”的,但是对于本身懂得“做程序”的人来说,他就是一个有力的帮手。

转载于:https://www.cnblogs.com/Nobel/archive/2010/01/31/1660488.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值