笔者, 一位 23 岁的 Java 高级开发工程师的处女作, 望轻喷......
众所周知, Java 是纯面向对象编程的一门语言, 然而这就造成很多 Java Programmer 自以为自己随随便便写出来的代码就是面向对象编程的结晶.
我们以一个简单的案例来切入主题:"人吃饭".
面向对象编程我们需要注意一下几点:
要围绕对象来展开一系列的活动
对象应该具备什么, 不应该具备什么 (也就是与生俱来与后天养成)
1. 生活中的人吃饭
吃这个动作是与生俱来的, 天生的, 而不是后天学习的 (用筷子吃饭是后天学习). 所以说, 如果拆分 "人吃饭", 就是 "人" - "吃" - "饭".
2. Coding 中的人吃饭
在 "生活中的人吃饭" 的基础上, 我们进一步进行分析. 根据 "人" - "吃" - "饭", 我们知道, Coding 的时候, 我们需要一个 Person 类, 用来承载人的基本属性特征, 那么吃这个动作呢? 我们先不说答案, 先看看我见到过的一种代码书写:
EatUtil.eat(Person person, Food food)
既然是面向对象的高级语言, 那也就是说很贴切于人的自然语言, 那么, 我们就用自然语言来翻译一下上面的代码:"吃" - "人" - "饭". 我去, 什么逻辑???
看到这里, 想必读者都有自己的答案了吧?
很显然, 吃这个动作, 我们应该安放到 Person 类里面, 也就是 Person#eat, 人拥有吃这个动作. 那么人吃饭就可以表示为:
person.eat(food)
是不是这样更为合理些呢?
可能你会说, 我们有时候需要纯净无暇的和 table of DB 完全一对一的 entity 对象, 按照上面的设计就不合理了. 那么, 作为 Java Programmer, 应该知道 BO, VO, DTO,DAO 等等这些概念吧?! 所以, 举个栗子, 我们可以通过 PersonBo(Person)#eat, 也就是说:
- class PersonBo extends Person {
- public void eat(Food food) {
- // to be done...
- }
- }
好了, 以上就是在下大一刚开始接触 Java 的时候的想法, 想来现在总结出来. 不喜轻喷, 不是不喷. 哈哈, 在下, 现在工作刚满一年的一位小菜鸟...... 希望各位多多指教, 不吝赐教! Thank U!
来源: http://www.jianshu.com/p/e8d8767af3bc