面向对象是为了解决系统的可维护性,可扩展性,可重用性,我们再进一步思考,面向对象为什么能解决系统的可维护性,可扩展性,可重用性?

面向对象产生的历史原因有下面两点:

1、 计算机是帮助人们解决问题的,然而计算机终究是个机器,他只会按照人所写的代码,一步一步的执行下去,最终得到了结果,因此无论程序多么的复杂,计算机总是能轻松应付,结构化编程,就是按照计算机的思维写出的代码,但是人看到这么复杂的逻辑,就无法维护和扩展了。

2、 结构化设计是以功能为目标来设计构造应用系统,这种做法导致我们设计程序时,不得不将客体所构成的现实世界映射到由功能模块组成的解空间中,这种转换过程,背离了人们观察和解决问题的基本思路。

可见结构化设计在设计系统的时候,无法解决重用、维护、扩展的问题,而且会导致逻辑过于复杂,代码晦涩难懂。于是人们就想,能不能让计算机直接模拟现实的环境,用人类解决问题的思路,习惯,步骤来设计相应的应用程序?这样的程序,人们在读它的时候,会更容易理解,也不需要再把现实世界和程序世界之间来回做转换。

与此同时,人们发现,在现实世界中存在的客体是问题域中的主角,所谓客体是指客观存在的对象实体和主观抽象的概念,这种客体具有属性和行为,而客体是稳定的,行为不稳定的,同时客体之间具有各种联系,因此面向客体编程,比面向行为编程,系统会更稳定,在面对频繁的需求更改时,改变的往往是行为,而客体一般不需要改变,所以我们就把行为封装起来,这样改变时候只需要改变行为即可,主架构则保持了稳定。

于是面向对象就产生了。

二 ,首先看看面向对象的三大特征:

(1) 封装: 找到可变化的部分把他封装起来,你就可以在不影响其他部分的情况下修改或者扩展被封装的的变化部分 ,这是所有的设计模式的基础,这就是封装变化,因此封装的作用,就是解决程序的可扩展性。 (2) 继承:子类继承父类,可以继承父类的方法以及属性,实现了多台以及代码的重用,因此也解决了系统的重用和扩展性,但是继承破坏了封装,因为它是对子类开放的,修改父类对导致所有的子类的改变,因此继承一定程度上有破坏了系统的可扩展性,所以继承需要慎用,只有明确的IS-A关系才能使用,同时继承在程序开发过程中重构得到的,而不是程序设计之初就使用继承,很多面型对象开发者滥用继承,结果造成了后期的代码解决不了需求的变化了。因此优先使用组合,而不是继承,是面向对象对象开发中的一个重要经验。 (3) 多态:接口的多种不同的实现方式即为多态。接口是对行为的抽象,刚才在封装提到,找到变化部分并封装起来,但是封装起来后,怎么合适接下来的变化这正是接口的作用,接口的主要目的是为了不相关的类提供通用处理服务,我们可以想象一下。比如鸟会飞,但是超人也会飞,通过飞这个接口,我们可以让鸟和超人都实现,这就实现了系统的可维护性,可扩展性。

因此面向对象能实现人们追求系统的可维护性,可扩展性,可重用性。面向对象是一种编程思想,起初,“面向对象”是指

在程序设计中采用封装,继承,多态等设计方法,但面向对象的思想已经设计到软件开发的各个方面,比如现在细分为了面向对象的分析(OOA),面向对象的设计(OOD),面向对象的编程实现(OOP)。