关于OO的一点理解
2013-08-01 11:02
246 查看
对于面向对象程序设计,可能一个人有一个人的理解,就连林锐博士也说自己无法解释什么是“面向对象”。凡事都有个过程,理解面向对象也是。目前自己写过的代码也就只有一万行左右,既然是有个过程,那么就早点开始这个过程,理解肯定是有偏颇的,甚至错误的,就当写给未来的自己。
好像是在《设计模式精解》里面看到的一个例子,老师手上有一个表格,表格记录的是学生的姓名和学生要去哪里上课的记录,原始的方法是老师拿着单子,一条一条的念,老师比较累,老师当然不想了,于是老师把表格贴到墙上,让同学自己找自己要去哪个教室上课,然后老师拍屁股走人,这样就把查找教室的职责转移到学生身上了。有点像命令模式,也有点像观察者模式,当然并不是第一种方法一定不如第二种方法,而是要看具体什么地方会发生变化,如果查找教室的时候,老师要做的事情非常多,比如看这个名单每一条前需要老师的姓名、工号、工龄、履历、等等,那么这个方法与老师耦合紧,那么第一种方法比较合适。如果查看教室和老师没啥关系,而和学生的信息有关,并且需要学生的一些行为,那么这个职责最好是属于学生。
面向对象要解决什么问题?
解决最大的我觉得就是应对需求的改变。如果需求确定,大家要的都一样,那么面向对象就意义不那么大了,用面向过程的方法就可以解决问题。当然面向对象也有一些其他优点,代码复用、测试方便、可以并行开发,但是我觉得面向过程如果设计的好也可以实现,网上有人说“只有深刻理解面向过程的人才可以深刻理解什么是面向对象”,有道理,真正的高手不是一朝一夕可以修成的。什么是面向对象?
我的理解,找出变化的部分,为了应对变化的部分,职责转移。为了应对变化的部分也是面向对象要解决的问题,而“职责转移”可以当作方法,设计出来的每个类都有什么职责也是设计的关键(当然OOD不只是类的设计),大部分的设计模式都有职责转移的影子。好像是在《设计模式精解》里面看到的一个例子,老师手上有一个表格,表格记录的是学生的姓名和学生要去哪里上课的记录,原始的方法是老师拿着单子,一条一条的念,老师比较累,老师当然不想了,于是老师把表格贴到墙上,让同学自己找自己要去哪个教室上课,然后老师拍屁股走人,这样就把查找教室的职责转移到学生身上了。有点像命令模式,也有点像观察者模式,当然并不是第一种方法一定不如第二种方法,而是要看具体什么地方会发生变化,如果查找教室的时候,老师要做的事情非常多,比如看这个名单每一条前需要老师的姓名、工号、工龄、履历、等等,那么这个方法与老师耦合紧,那么第一种方法比较合适。如果查看教室和老师没啥关系,而和学生的信息有关,并且需要学生的一些行为,那么这个职责最好是属于学生。
相关文章推荐
- 一个草根关于OO的一点理解
- 关于 数据文件自增长 的一点理解
- 关于动态规划的一点理解
- 关于json的一点理解
- 【Android ContentProvider 一】关于ContactsContract.CommonDataKinds.Phone.CONTENT_URI的一点理解
- 关于NI CompactRIO自定义模块中FPGA与Labview FPGA中编程的一点理解
- 关于token、签名、加密的一点理解
- 【转载】关于C#中Thread.Join()的一点理解
- 关于Nim博弈的一点小理解----谁才是最强战舰
- 关于面向对象的一点理解
- 关于JSF2 composite component一点理解
- 关于linux系统环境变量的一点理解
- 关于版本升级的一点理解(VersionUpdate)
- 关于 alter table move tablespace 的一点理解
- 关于在数据库中存储层次数据的一点看法与理解
- 关于多重继承构造函数调用的一点理解与实践
- 关于oracle数据库update的一点理解
- 关于引用对象的使用的一点小理解
- 关于哈希表的一点理解
- 关于BMP图片的一点理解,读取图象数据到数组