什么是面向对象?

面向对象编程OOP (Object Oriented Programming), 你可能大致明白这种思想是干什么的, 老师会告诉你, OOP就是一切都是对象的

面向对象编程OOP (Object Oriented Programming), 你可能大致明白这种思想是干什么的, 老师会告诉你, OOP就是一切都是对象的意思。但说真的, "面向XX"这种说法它不符合国人的习惯表达, 而且一切都是对象的说法也太笼统了, 比如花括号、表达式、关键字这些都不是对象啊。以后还要理解SOP(面向服务编程)又怎么办啊? 本着多理解一点就可以少记忆一点的原则, 我们对其解构一下, 帮助自己更好地领悟这些伟大思想。

我不知道印欧语系的人是否天然秒懂Object Oriented Programming的意思, 我自己开始是很不理解oriented的含义的, 虽然我知道它是"东方"、"方位"或者"导向"的意思, 但"对象导向"又是什么鬼呢? 

还是翻最老的词典, 从词源说起。orient来自拉丁语oriri, 旭日东升的意思, 那东方升起的太阳和导向是什么关系呢? 难道对象是我们码农心中的太阳, wtf...  别说还真是, 你就把自己想象成一株向日葵, 花(脸)盘子就跟着太阳转, 太阳没了, 你也就蔫了, 这就是面向。(不得不感叹"面向对象"这个翻译确实传神, 换成"对象导向"或者"趋向对象"都差一层意境)。

当我们时刻都面向一个人的时候, 就是在围着他转, 我们就是为了他而存在, 我们所有的活动和行为都是为他进行的。如果他不在了, 我们就失去了方向(意义)。来到面向对象编程的世界里就是, 所有的代码都是为了对象而存在, 如果写了一堆代码, 里面却没有什么对象, 比如逻辑都写在main()方法里, 这就不叫面向对象了; 或者你造了一些对象, 但它们不怎么交互, 很快就被垃圾回收, 这也没贯彻好面向对象的思想。我们知道对象就是属性和方法封装成的个体, 它们有类(模板), 造出来之后各司其职, 通过交互构建起一个应用程序的环境。

OOP是模拟现实世界的, 现实世界中, 房子和树都是对象, 空气和风也是对象, 并不局限于有形的物体。OOP的世界里亦是如此, Event和Exception这种对象, 开始也是不好理解的, 简单粗暴来说, 名词都可以是对象, 不管虚的实的, 只要能承载属性和方法拿来使用, 就创建这个类。在面向对象编程的世界, 你不搞对象, 代码写再多都没什么意义, 因为你用不到这种思想背后强大的能量。