浅谈对java编程思想的理解
刚从学校毕业的时候,对于这种概念的理解少之又少 ,只是单纯的从事编码工作,理解也只是停留在对java基本概念的使用上,很局限!随后工作了快三年的时间里,自己不断的理解这种所谓的思想在工作中到底怎么体现的,怎么就称为面向对象编程?所以在这简单谈谈这种思想的看法与思想的演变!
比如人可以砍树,这就是一种服务功能,有输入也有输出;它可以提供给外部,而行走,则是自我功能,没有输入也没有输出),外部环境和内部组织,以及环境数据和原料性数据之间的区别。从思维上来讲,面向过程更强调细节,忽视了整体性和边界性,但这与现实世界有很大的出入,因为现实世界中,这种过程都不是孤立存在的,而是从属于某个对象,因此,面向过程虽然反映了现实世界的而一个方面(功能),但无法更加形象的模拟或者表示现实世界。随后c++的过度,最后到java语言的出现,这一系列演变的过程,都是为了方便,简化编程任务,转变编程的思考角度,这就提出了一个重要的概念,面向对象编程。就是我们思考的角度转变,
面向对象以对象为中心,将对象的内部组织与外部环境区分开来,将对象的内部属性数据与外部隔离开来;就是封装对象特征,对外提供入口,其行为与属性构成一个整体,而系统功能则表现为一系列对象之间的相互作用的执行流。在编程组织中,对象的属性与方法不再像面向过程那样分开存放,而是视为一个整体(程序的最终实现其实还是分离的,但这仅仅是物理实现上的,不影响将对象的这两个部分视为一个整体),因此具有更好的封装性和安全性(表征内部的属性数据需要通过对象的提供的方法来访问)。面向对象强调的是整体性,因此面向对象与面向过程在很多方面是可以互补的。同时由于对象继承和多态技术的引入,使得面向对象具有更强、更简洁的对现实世界的表达能力。从而增强了编程的组织性,重用性,灵活性。
随着工作任务的高度封装,对于编程进行了服务化设计,这就是面向服务编程(SOA),我们只需要对外提供服务接口,无状态单一实例就可以,面向服务主要以服务为出发点,组织和协调相关的对象来提供目标服务,对外提供必要的参数输入接口,将服务的结果作为输出,而“服务”本身的计算过程和组织则被封装在一起,对用户透明。其实面向服务也是以功能(服务)为中心,但其强调的是功能的整体性,封装性、自包性,而不是过程性和协作性,整体性指的是服务对外是作为一整体来体现的;封装性指的是服务完成的计算和处理过程、自有属性都不直接暴露给外部,除了通过公共的服务接口进行交互外,用户无法也不用知道内部的具体组织和协调的;自包性指的是服务的完成不依赖于服务的调用方,服务系统的本身就可以完成服务所需的功能;因此面向服务在程序组织上处于更高的层次,是一种粗粒度的组织方法。面向服务与面向过程、面向对象本质上没有什么不同,区别就在于考虑问题的层面不同。面向对象和面向过程多用于系统内部的组织和管理,而面向服务主要用于系统间的组织和管理。这方面体现也是主要在架构方面体现的更加明显!
面向方面(AOP)应该属于面向对象的另一体现吧,最有体会就是spring 的核心思想;从对象组织角度来讲,我们传统思想都是沿着对象或事务发现的发现方向编程思考;这样对事物的控制性就比较差,也可以成为纵向编程;但事实上,对象之间除了这种纵向发展之外,我们同样可以从横向的角度去观察这些对象,这就是面向方面(切面)编程的基本出发点。原来要解决这类问题,我们一般是采用接口来完成,但这有两个问题,一是对象设计的时候一般都是纵向思维,如果这个时候需要就需要考虑这些不同类的对象的这些共性,不仅会增加设计的难度和复杂性,还会造成类的接口过多而难以维护,二是需要对现有的对象动态增加这种行为或者责任的时候非常困难。现在很多程序的都是以中间语言存在,执行的时候是解释执行或者即时编译执行,这也为增加这种切面行为或者责任提供了比较好的切入口;增强了对 对象或者事务的控制,比如事务控制,日志。安全等操作!