面向对象的好处就是可以让你的代码语义性更强,因为使用它可以直观的表达“谁.做什么()”的语义,使得我们的程序代码更接近自然语言。然而现实的情况就 是我们经常会看到使用面向对象的编程语言写出来的却是面向过程的代码。其实这也不难理解因为大多人开始学习编程语言都是从面向过程的语言学起的如 BASIC,C等这些经典的编程入门语言。但在实际开发中一方面是这些面向过程的知识和经验对我们产生了一种先入为主的主导作用,另一方面我们又希望能 够得到面对象编程的优势。最终使得我们实际产出的是即没有向过程也没有面向对象的代码,虽然感觉设计有问题但又不知道问题出在那。后来我们知道了OO设计 原则、OO设计模式便如获至宝般开始学习,但是在学习的过程中我们往往没能把注意力集中在书中所讲的分析和设计的方法上,而是放在了代码上。使得常徘徊在 面向过程和面向对象两者之间不得门而入。
为此在实际的编码过程中我们应该养成良好面向对象的编程习惯,以对象的眼光看问题,以面向对象的表述方式来描述问题,避免陷入面向过程的思维惯式中。当我们需要一个功能的是时候,我们最先想到的应该是行为即OO中的方法,而不是面向过程中函数。行为肯定是有一个主体发出的而这个主体就是对象。就像在现实世界中我们找不到两个完全一样的东西一样所以对象在当前的问题域中也应该是可以被区分的。尽量保证对象的完整性和唯一性可以确保对象可以被区分。要分开对象设计过程过程和实现过程,因为设计的时候我们考虑的是对象能够做什么,需要以什么样的API对外提供什么服务即对象的接口。这样我们就可以做到面向接口编程。方法的名称应该以它做什么来命名,而不是以它怎么做来命名。只有在实现的时候我们才去考虑它怎么去做,这些实现细节是封装在对象内部的可能有几个内部方法共同完成了一个API的功能。当然这些个内部方法就是面向对象编程中的私有方法。另外留意我们周围的对象也有助于培养良好面向对象的编程习惯。
在Javascript编程中具有不同背景的程序员实现OO的方式各不相同。用过C#的实现风格可能类似C#,典型的有ASP.NET AJAX的类库。用过python的实现风格可能就类似python,在他们的程序中常常会看到__init__ 、sleft等关键字。所以常 常有人质疑对于Javascript应不应该使用面向对象编程。其实面向对象的关键在于思想而不是语法。比如python、php都可以说是一门面向对象 的语言但是他们的OO语法都各不相同。所以用其他语言的语法标准来度量javascritp 的OO特性是不合理的。简单的说我认为只要能够把分析得到的UML图以程序的方式表述出来它就应该是支持面向对象的语言。