程序设计发展到今天已经没有几个不了解面向对象的了,尤其当业务越来越复杂,团队人数越来越多,系统对可扩展性要求也来越高的情况下。面向对象已经成了设计和开发的必备思想。无论从学术还是实践方都有无数理由证明这一思想的完整性和必要性。
万物皆对象,一切都可以因为抽象变得简单。但是想要真正做到面向对象的思考仿佛真的不那么容易,因而写出真正面向对象的程序也就更加困难。这是方法学、哲学的范畴,仅有大量的实践似乎并不凑效。
仔细回味java中面向对象的四大特征:封装、抽象、继承和多态。便会发现一个真正的面向对象思维过程应该是这样:先站在一个高度去分析一个事物被完成需要涉及到的环节和执行它对象,抽取对象的共性,环节的不变与可变部分。
封装是认识并承认对象的基础,即确定事物的存在及如何存在。不必多说。
抽象,提取对象的共有属性作为一切对象的基类,从而确定这一组对象为一类事物,即分类的过程产生公共基类。提取各个环节的不变部分并加以实现,对可变部分进行抽象处理,即抽象过程产生抽象接口,对每一个执行流程内部进行细分,确定哪些部分是一类事物中的易变部分,总之,先定义好整个系统或局部的执行流程,而不去关心细节的实现,是抽象的基本要领。在高层求同,在中层存异,在底层生变。
继承,继承是抽象之后的结果,因为公有的东西需要被其他同类持有。继承的直接表现是归类的过程,即将一个事物归为同一个类别。
多态则是继承产生之后必须要解决的对象行为模式,当一个对象拥有了同类的共有行动能力之后,可能需要变异以完成自己的功能及特殊流程。多态分为编译时多态和运行时多态,继承产生的多态是运行时多态,是new 一个具体对象是jvm中指针指向的类方法地址。编译时多态则和继承没有关系,它是方法重载产生的,编译时因为参数不同而被编译成两个方法入口。
接口、抽象类、模版、回调概念
接口:定义一组操作或行为,是抽象的最高形式;
抽象类:对一些可以事先确定的事物或行为作一实现,并向下暴露可变部分以待扩展。从事物的角度讲:抽象类是一个较低层次的抽象,介于接口和实现类之间的浑浊状态;
模版:对一组事物的执行流程加以约束并简化;
回调:事物的执行过程中的一些环节固定另一些环节可变,提供回调的方式处理变化部分使得整个流程不变。
javaEE中,关注四种实体,实体Bean,业务逻辑Bean,数据访问Bean,控制Bean。成熟的MVC结构已经完成了大部分通用实现,此处就改写googlecode,对ssh框架的整合作一总结。googlecode通用dao,采用泛型接口扩展并实现hibernate的大部分接口,通过泛型改造之后,dao层就不需要实现了,继承通用dao,并告知需要处理的对象类型。通过泛型接口可以获知当前操作的对象类型,因此dao层就被大大的简化为一个通用dao,service层同理,如果仅仅处理简单的crud就不需要再写实现了,当然大部分业务可能并不如这么简单,只是对crud的全部抽象实现。
泛型的好处:限定一种操作的范围,针对一组写好的模版或接口,为了让他支持多种类型且保证类型安全,则泛型是一个绝佳的选择,泛型相当于类的参数,他在类被初始化时告诉类或者接口当前正在处理的对象为何物。class提供了很好的泛型支持,可以轻松的获取类型信息。
总结起来,java 在多方面提供了抽象,先是全局的划分各层面的对象,产生不同的类。其次对过程进行抽象产生不同的过程即接口。再对过程中的每一个环节抽象形成统一流程和回调接口。