最近非常有幸,米老师亲自给我们讲课,首先让我们就面向过程编程(POP)、面向对象编程(OOP)和面向切面编程(AOP),师徒组一起提出问题并讨论解决,于是每个师徒组都展开了激烈的研究和讨论,也发现自己往往都是知道知识的表象,却没有深思。学习要学其原理,正所谓:做学问不能只知其然,而不知其所以然。
今天,小编就这三种编程思想来总结和比较一下,对比学习,方便清楚其中的相通之处,构建知识网。
一、面向过程(POP)与面向对象(OOP)的区别:
“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。“面向过程”也可称之为“面向记录”编程思想,这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。他们不支持丰富的“面向对象”特性(比如继承、多态),并且它们不允许混合持久化状态和域逻辑。
简单来说:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;
面向对象是相对于面向过程来讲的。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向对象也可以说是从宏观方面思考问题,而面向过程可以说是从细节处思考问题。
可以结合生活中的例子来理解一下面向对象和面向过程:比如我想吃打卤面
面向过程: 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现。对于我要吃打卤面来说,首先,我需要想好我要吃什么卤子,是西红柿鸡蛋卤,还是香菇木耳卤等,假如我要吃西红柿鸡蛋打卤面,那么我下一步就是要去准备食材(西红柿、鸡蛋、面条),然后要做洗菜、切菜、打鸡蛋、打卤、煮面…等等一系列的事情。
面向对象: 面向对象是把构成问题事务分解成各个对象,描述某个事物在整个解决问题的步骤中的行为。如果我想吃打卤面,那么我直接去面馆,张开嘴:老板!来一份西红柿打卤面。
在此过程中,我不需要知道面馆做饭的过程,不需要知道是先煮面还是先做卤,想吃什么打卤面直接点餐就好了,这个就是面向对象。
面向对象有什么优势呢? 首先你不需要知道打卤面是怎么做的,降低了耦合性。如果你突然不想吃西红柿打卤面了,想吃香菇木耳打卤面,对于面向过程你可能不太容易了,还需要重新买菜,买调料什么的。对于面向对象太容易了,大喊:老板!那个西红柿打卤面换成香菇木耳打卤面吧,提高了可维护性。总的来说就是降低耦合,提高维护性!
面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。
面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。
面向对象,对象是什么?每个对象都具有属性和行为。
属性:用于描述某个对象的特征,比如:身高,体重,姓名,年龄,性别等等。
方法:描述对象动态的一方面,比如:厨师会做饭,服务员会点餐等。
面向对象具有三大特征:封装、继承、多态。 这是对于类而言的,但是其实现过程又是通过类实例化成对象来实现的。类是对象的抽象概念,对象是类的实例化,比如:人类就是一个“类”,而“张三”、“李四”等就是类中的一个具体对象。
二、面向对象和面向过程的优缺点:
面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低
面向过程:
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
三、面向切面编程(AOP):
简介:
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
四、OOP 和AOP的区别与联系:
OOP和AOP区别:
1、面向目标不同:简单来说OOP是面向名词领域,AOP面向动词领域。
2、思想结构不同:OOP是纵向结构,AOP是横向结构。
3、注重方面不同:OOP注重业务逻辑单元的划分,AOP偏重业务处理过程的某个步骤或阶段。
OOP和AOP联系:
两者之间是一个相互补充和完善的关系。
总的来说:
AOP是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性。主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等
OOP针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。
AOP的优势:
AOP将面向对象过程中,一些业务中重复(相同)的部分截取出来,并将它放在一个独立的类里,这样就大大减少了面向对象过程中重复的
运行负载,且独立出来的这个类仍然可以掌控全局(执行原有的职责),有利于复用及软件的维护。
AOP的主要应用:
日志记录、事务处理、异常处理、安全控制和性能统计方面。
关于AOP,小编只是初步了解,具体的使用和原理还不太清楚,后续继续学习!对于每一种编程思想,要充分了解其设计的编程思想和理念,针对具体的问题使用。