虽然在本科阶段就学习了各种编程语言,包括C,C++,Java,VB等等,中间也做过不少实际的项目,主要是asp,jsp的开发,但对什么是面向对象还没有很好的理解,以为把面向过程的东西通过类来封装就是面向对象,根本没有了解面向对象的精髓。直到今年才对面向有了比较深刻的理解,这其中离不开实际项目和其中用到的设计模式的功劳。再次感谢设计模式,让我理解了面向对象。
以前只是了解面向对象,但是从软件开发的角度来说并不完整。面向对象的思想和以前的面向过程的思想截然不同,面向过程是以事件流的方式来考虑问题,其移植性比较差,因为耦合性相对面向对象的思想要强得多;而面向对象,是从对象的存在考虑问题,不管什么时候都要考虑的对象的身份和行为,将一系列的行为封装在一个个具体的对象中,相对于面向过程提高了移植性,并且在做大软件的时候也便于分工,这样也提高了效率。举例说明,一个具有面向对象思想的架构师他的主要职责就是将一个软件进行对象分析,抽象出各种各样的接口,然后下面的程序员可以具体地实现这些接口,对客户来说,根本不用关心具体的实现,只要接口就可以,所以利用面向对象的思想可以提高程序的可移植性和可复用性。其实在面向对象的分析中,利用最多的就是多态,他彻底地将接口和实现分离,简直可以用"miraculous"来形容,以前对面向对象的理解其实非常肤浅,以为面向对象就是程序员设计一个一个类,然后实例化对象即可,这种看法现在看来真是太可笑了。一位程序高手说过,不会利用多态的程序员是不合格的面向对象的实施者,他说的太对了。可以这么说,一定程度上,多态其实就是面向对象。
在学习设计模式的过程中,体会到核心思想其实还是多态,并且又对封装有了更深一层次的理解,封装不只是将各个行为写到一个个具体的类中,其实更广义的封装就是封装变化,设计模式的核心就是封装变化,通过将易变化的地方封装在一个地方,那么如果需求等改变,只需要修改这个地方,别的地方不用动,这样,就降低了程序的耦合性。对程序员来说,维护一个软件的代价相对于非面向对象要小得多。其实作为一个软件开发人员,追求软件稳定性和易维护性是根本目标。不采用面向对象的思想,在需求发生变化的时候,那么你的程序就需要发生大的改动,这会搞的焦头烂额,并且会大大地打击程序员的自信心,所以面向对象是一种思想,具备了这种思想,其实不只是在做程序的时候大有帮助,在其他方面也会有收获,比如说,针对抽象编程,而不是针对实现编程,因为实现是死的,而抽象是活的,针对抽象,可以一不变应万变,很有哲学意味。而针对实现则不然,太僵硬太死板。