关于OO的一点理解


        对于面向对象程序设计,可能一个人有一个人的理解,就连林锐博士也说自己无法解释什么是“面向对象”。凡事都有个过程,理解面向对象也是。目前自己写过的代码也就只有一万行左右,既然是有个过程,那么就早点开始这个过程,理解肯定是有偏颇的,甚至错误的,就当写给未来的自己。


面向对象要解决什么问题?

        解决最大的我觉得就是应对需求的改变。如果需求确定,大家要的都一样,那么面向对象就意义不那么大了,用面向过程的方法就可以解决问题。当然面向对象也有一些其他优点,代码复用、测试方便、可以并行开发,但是我觉得面向过程如果设计的好也可以实现,网上有人说“只有深刻理解面向过程的人才可以深刻理解什么是面向对象”,有道理,真正的高手不是一朝一夕可以修成的。


什么是面向对象?

        我的理解,找出变化的部分,为了应对变化的部分,职责转移。为了应对变化的部分也是面向对象要解决的问题,而“职责转移”可以当作方法,设计出来的每个类都有什么职责也是设计的关键(当然OOD不只是类的设计),大部分的设计模式都有职责转移的影子。
        好像是在《设计模式精解》里面看到的一个例子,老师手上有一个表格,表格记录的是学生的姓名和学生要去哪里上课的记录,原始的方法是老师拿着单子,一条一条的念,老师比较累,老师当然不想了,于是老师把表格贴到墙上,让同学自己找自己要去哪个教室上课,然后老师拍屁股走人,这样就把查找教室的职责转移到学生身上了。有点像命令模式,也有点像观察者模式,当然并不是第一种方法一定不如第二种方法,而是要看具体什么地方会发生变化,如果查找教室的时候,老师要做的事情非常多,比如看这个名单每一条前需要老师的姓名、工号、工龄、履历、等等,那么这个方法与老师耦合紧,那么第一种方法比较合适。如果查看教室和老师没啥关系,而和学生的信息有关,并且需要学生的一些行为,那么这个职责最好是属于学生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值