面向对象:类的完备性和扩展性

在前面的例子中,我们可以看到对String的to_alphanumeric的方法扩展。


那么对于一个对象而言,例如ArrayList,只要具有了add/remove/get/update/iterator等,具有添加/删除/修改/读取/遍历等等,我们就认为该对象具有“完备性”。 也就是说这个类的对象,该有的就有了。

在此基础上添加的,例如forEach/map等,其实并非属于ArrayList的必需品,forEach完全可以用Iterator等来代替。 但是,这个方法添加到ArrayList具有极大的便利性。这样我们就不用写ArrayListHelper或者ArrayListUtils类。 因此通常我们又需要“扩展性”。

很多地方都具有类似情况,例如Ruby中的3.times{} ,times这个本身不属于int的范畴,其实仅仅是一个便利方法而已。

例如String,在Java中length/charAt/subString/startWith/indexOf等,已经提供了对string操作的完备性。 但现实中,通常需要对string进行改写,例如to_alphanumeric,  "Hi".md5等, 这些都属于扩展性。


在Java中,扩展一个类的方法,是没有提供的,只能重写static方法,例如XxxUtils,XxxxHelper,这样看起来更加不面向对象。

而C#中,扩展一个类的方法,是可以的,通常是static void Xxxx(String a){} , 通过Extend的方式来扩展。但依然不面向对象。

在JavaScript中,扩展一个类的方法,超级简单,String.prototype.md5=function(){}即可。

-----------------------------------------

其实,完备性和扩展性是一个矛盾,但扩展性很显然的解决了XxxUtils/XxxHelper等冗余的问题。从这个角度而言,扩展性很重要。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值