从封装的角度看OO编程

        OO(Object-Oriented )编程现在基本上很多人的口头禅了。什么东东是OO呢?估计每个人的想法都不太一致。我个人认为,OO的目的就是为了封装变化。对象的划分,我倾向于interface的概念,可以多多参考契约设计的概念。 本质上来说,一个对象,主要不是看它的类是什么,或者它的parent 类是什么,主要的目的是它能够提供什么feature或者说功能,在整个系统中,这些功能就被抽象成一个interface。从而,在整个系统中,关注的重点就是interface,划分的重点也是interface。至于具体怎样来实现这些东西,就是简单类实现了。因此,OO设计,可以简单的抽象成interface设计。如果从封装的角度来看,其实interface只是在大的系统范畴下封装了class这个东东。

        关于OO的思维,建议多多思考封装的概念。我认为OO的本质是去封装变化的东西,不太变的东西其实用不着OO的思维的。至于很多C++书上来就是继承、多态等概念,造成初学者认为有继承、多态才是OO,呵呵,我感觉这是阻碍了许多新学着的思维。据说C#设计时,对于是否支持继承,进行表决过,基本上高手级别的人都不希望有继承的机制,不过最终为了易用还是加入了继承机制。 从这点来看,继承不是OO的固有特性,可以抛弃它,只是有些语言通过它来提供复用的功能。

         因此,对待继承的问题,OO设计原则是,优先考虑组合然后才是继承。 在ruby的语言体系下,发现继承基本都可以不用了,通过module可以达到代码的复用。不过ruby这个语言还是加入了类派生的功能,或许人们感觉继承的东西好理解一些。Go语言里,interface的有点象动态语言里面的duck type的类型了,不需要你明确支持接口的实现,只要有对应的方法就ok。

        其实OO编程,不就是 obj.send(msg) 往一个对象发送消息嘛。至于消息是怎样处理的,这是obj自己内部的事情(这就是封装的内涵所在了)。 然后把 松耦合、高内聚的概念一套,很多OO的思维就融汇一体了。 封装变化的东西,优先组合然后继承, 松耦合高类聚。基本就是OO的原则了。反过来看,这些都是为了后续最小代价来拥抱变化(毕竟需求是多变的),如果没有需求的变化,基本上也不会引申这么多方法和原则了。如果精通OO思维,发现其实用C语言也是可以写出OO风格的代码的,因此OO思维基本和语言没有多大关系,它是灵魂,并且没有强制规定具体的招数的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值