转载:http://blog.csdn.net/mo_fan_qing_wa/article/details/48085395
- 面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法
- 面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现
- 接口应有两类:
- 第一类是对一个体的抽象,它可对应为一个抽象体(abstract class);
- 第二类是对一个体某一方面的抽象,即形成一个抽象面(interface);
面向过程
面向过程是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想.可以说面向过程是一种基础的方法.它考虑的是实际地实现.一般的面向过程是从上往下步步求精.所以面向过程最重要的是模块化的思想方法.
随着时代的进步,软件的规模越来越大越来越复杂,需求变化也越来越快,面向过程就显得力不从心了,如果我们根据需求变化修改了某个结构体,那么就不得不修改与之相关的所有过程函数,而一个过程函数的修改,往往又会涉及到其他数据结构,
如果仅仅是在系统规模较小的项目中,面向过程还勉强可以应付,当系统规模越来越大的时候,多人共同开发的时候,就变得十分困难了。
《面向过程思想》举个例子:把大象装冰箱要分几步?
1.把冰箱门打开
2.计算大象的体积
3.查看冰箱容量
。。。。。。
4.把大象装进去
5.把冰箱门关上
如果我不想把大象放冰箱里了,我想把烧鸡装冰箱里,这时候,计算烧鸡的体积,冰箱的容量。。。。都需要修改。
面向对象
面向对象的方法主要是把事物给对象化,对象包括属性与行为。面向对象的三个特征是封装,继承和多态,封装可以把问题中的数据和对数据进行处理的函数结合在一起,形成了一个整体的对象的概念。继承用来对系统的扩展,在原有系统的基础上,只要简单的继承关系,就可以完成系统的扩展。用多态来应对需求的变化,统一的接口,可以有不同的实现(好多人把面向对象和面向接口分开来讲,其实面向接口主要讲的就是多态,为了调理清晰,我也把面向接口分开单独说一下)。
《面向对象思想》举个例子:把大象装冰箱要分几步?
只需要一步,就是你把你女朋友叫过来,让她把大象赶到冰箱里。女朋友就是你的对象,至于你女朋友怎么做,就是对象的事儿啦。以后要好好善待女朋友,如果没了女朋友,以后再有大象就没法办了。呵呵,这就是面向对象。
3.面向接口
面向接口编程,就是面向抽象编程。
意思是指在面向对象的系统中所有的类或者模块之间的交互是由接口完成的。
一个对象实例只能赋值给与它类型相同的引用、或者父类(包括接口)的引用。
接口就好比是一个公司的领导,某天领导A下了一条命令,让员工B把大象装冰箱里,员工B干活慢,领导就发火了,还想不想干了,公司不是没有你就不行了,不想干随时有人来接替你,于是领导就让员工C按照领导的指示把大象装冰箱里了。这就是面向接口编程。
举个例子:A a=new B();
在内存堆中创建一个B对象,在内存栈中创建一个引用A,A指向B。用A中的a.put()方法去调用B中的同名方法,这当然是正确的,因为B类实现了A接口。B是A的实现类所以B的实例可以赋值给A的引用。
这个耦合度是指:一个类(或者对象)对另一个类(或者对象)的依赖。a这个对象具有A接口规定的一切方法(B类里强制必须实现的)。
如果用类的继承,要求所有的具有某一个方法的一类对象都必须是指定类的子类对象,总是存在依赖,应用灵活度非常差!
如果使用接口,我们可以把B这个类换成别的类来实现这个接口,同样可以实现接口中的方法,这样就降低了程序之间的耦合度,因为我们在具体的调用处都是接口进行的,并不依赖于具体类,B类可以换成是任意的类,只要实现了A这个接口就可以调用他的方法,完成相应的功能。
4.面向切面:
面向切面的编程 主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。面向对象编程将程序分解成各个层次的对象,而面向切面编程将程序运行过程分解成各个切面。
面向对象编程是从静态角度考虑程序结构,而面向切面编程则是从动态角度考虑程序运行过程。面向对象编程是以对象为核心,整个项目都是由一系列相互依赖的对象组成的,而这些对象将被抽象成一个类,并允许使用类继承来管理类与类之间一般到特殊的关系。
面向对象可以通过分析抽象出一系列具有一定属性和行为的类,并通过这些类之间的协作来形成一个完整的软件功能。由于类可以继承,因此可以把具有相同功能或相同特性的属性抽象到一个层次分明的类结构体系中。随着软件规范的不断扩大,专业划分工越来越细致,以及OOP应用实践的不断增多,随之也暴露了一些OOP无法很好解决的问题。
说了这么多,还是来举个例子吧,要把大象装冰箱总共分几步。。。
这个大家都知道,如果这时候我改了需求呢?要求大象必须是洗过澡的,不能臭烘烘的放冰箱里,还要求大象在冰箱里不能被冻感冒了。。。。(有点奇葩了。。。)
但是又跟对象说好了,他只负责把大象装冰箱,于是自己偷偷找人在对象把大象装冰箱之前,给大象洗了个澡,换了身衣服,又吩咐手下,在对象把大象装冰箱之后,把电源拔掉,不能让大象感冒了。然后就叫对象过来把大象装冰箱里,但是给大象洗澡,换衣服,拔电源这是事儿对象并不知道。
这就是面向切面(找一个切入点,把要办的事儿给办了)。AOP专门用于处理系统中分布于各个模块中(不同方法)的交叉关注点的问题,在java EE应用中,经常通过AOP来处理一些具有横切性质的系统服务,如事务管理,安全检查,缓存,对象池管理等。