首页 > 代码库 > 面向对象

面向对象

面向对象的基本思想是,从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的思想。

面向过程的基本思想是分析一件事情从头到尾每一步是怎么实现的。

面向对象的实现我觉得还是要依赖面向过程的。怎么说呢!首先我们举一个例子分析一下,我们就举建筑公司。如果是面向过程的话,一个项目的开始,首先是市场调查,然后是分析,其次是策划,再次施工,最后展示,在编写代码的时候我们就按着公司的运营链1,2,3…下去就可以了,这样就可以完成一个建筑项目。如果是面向对象的话,我们需要做的就是将任务分配到每一个部门,然后每一个部门去做就可以了。仔细想想其实就是将面向过程的步骤嵌入到了面向对象类的方法当中去了。因为不管怎么说,公司的运营都是必须先要市场调查,然后分析,策划等等,不可能我们用了面向对象这个事情就不遵循这个流程了,面向对象是一种思考的习惯,因为有了对象,公司的领导不用关心1,2,3…怎么去一步一步完成,而是面对不同的部门对象,每一个对象已经将自己对应的行为划分到自己的范围之内,直接指派他们去完成就可以了,具体怎么完成领导不用关心,领导只要把握进度,把握好这些对象好好干活就好了。从这里也就可以看出,面向对象将事物进行了很好的封装,不用担心细节,只要找到对象,它就会去执行,由此可见面向对象最基本的特征就是封装,使得复杂的问题简单化。当然既然是面向对象,领导在开会的时候给各部门说“干活”,各部门就去“干活”,这里就可以体现出继承。各部门从领导那里只得到“干活”两个字,抽象啊,没办法,各部门开工干活吧,继承领导的干活命令,各部门要根据自己的职责将怎么干活具体的实现。还有就是领导说周末休息,但是各个部门的休息情况也不相同,领导乘坐私人飞机去巴黎度假了,策划部门开着大巴去野营,施工部门继续公司上班,这里说明了什么呢,同样是休息却有不同的表现形式,这就是多态。

面向对象的三大特征就是封装、继承、多态。那么在接收到一个项目的时候,我们应该怎样运用面向对象这种思维呢?首先,要看一下这个项目中有那些个类、那些个对象;其次,每一个类每一个对象应该有那些个属性和方法;最后是这些个类与类之间有那些个关系。这里面的类呢就是对具有共同特性事物的一个抽象概念,这个类中要定义这一个类对象具有的静态属性(属性)和动态属性(行为)。这里面的对象呢就是这个类的一个具体实例。此外,在设计面向对象的时候要遵循以下原则:面向对象设计的原则
(1)封闭角度:

        1)OCP 开放-封闭原则:软件实体(类、模块、函数等)应该是可以开展的,但是不可修改; 

        2)CCP 共同封闭原则:包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响;
(2)依赖角度:

        1)DIP 依赖倒置原则: 抽象不应该依赖于细节。细节应该依赖于抽象。

        2)ADP 无环依赖原则:在包的依赖关系图中不允许存在环。

        3)SDP 稳定依赖原则: 朝着稳定的方向进行依赖

(3)重用角度:

       1)REP 重用发布等价原则: 重用的粒度就是发布的粒度

       2) CRP 共同重用原则: 一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。

(4)LSP Liskov 替换原则:子类型必须能够替换掉它们的父类型。

(5)ISP 接口隔离原则:不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。

(6)SRP 单一职责原则:  就一个类而言,应该仅有一个引起它变化的原因; 

如果很好的应用了面向对象的设计思想,那么他会给我们带来很多好处与便利:

1、易维护:采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高:在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3、效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

总之,面向对象更加强调运用人类在日常生活的思维逻辑中经常采用的思想方法和原则,如抽象、分类、继承、聚合、多态等,大家都对面向对象这个词烂熟与胸,但是真的做到融会贯通,真正的做到理解和应用还有很长的路要走,这需要我们在项目和生活中不断领悟。