【现实抽象】
(1)在编写程序时,可以将现实世界中的一切事物抽象为对象(数据+操作)。(2)程序实际上是对象的有机结合,通过发送消息来告知彼此所要做的(极其类似社会中“人”的角色)。(3)对象不仅有并列关系,也有包含关系。(4)每个对象都拥有其类型,即说明了可以接受哪些消息。(5)某一特定类型的所有对象都可以接受同样的消息。
【每个对象都有一个接口】
类描述了具有相同特性(数据元素)和行为(功能)的对象集合。对象一旦被创建,它的接口同时向外界指明了对该特定对象所能发出的请求。当向某个对象“发送消息”(产生请求),该对象便知道此消息的目的,然后执行相应的程序代码。
Tips:学会在项目开发之前,设计规划UML(统一建模语言)形式的图。
【每个对象都要提供服务】
因为建立对象的初衷就是为了解决某个需求,因此对象一定要提供某些服务。此外,将对象想象成“服务提供者”有利于将程序开发和现实生活中显而易见的现象联系起来。程序本身向我们提供服务,它是通过调用其它对象提供的服务达到这一目的。
【隐藏具体实现】
类创建者和类消费者,由于在程序的开发和利用中处于上下游,为了开发和利用的效率最大化,我们约定:类创建者创建类,并说明类的接口(即有什么用,该怎样用);类使用者不去理会该类的具体实现细节,只管利用类的接口去开发程序。此外,为了区分哪些程序段是类创建者可以修改的,哪些程序段是类使用者可以修改的,我们约定了关键词:public-公共可用、private-只有类的创建者和类里面的内部方法可用、protected-半私有,即自己使用之外,继承的类可以访问这些protected东东。如果越雷池半步,编译器会以“报错”来抗议。
【复用/组合、聚合】
现实世界中,一个具体的机械零件是一个对象,N个机械零件组合在一起,可以构成一辆小汽车,该小汽车也是一个新的对象(新的类型)。映射到程序世界:新的类可以由任意数量、任意类型的其它对象以任意满足需求的方式组成。因为在现实生活中,要解决当下的新问题,更可能的是利用多个工具的特定功能组合(螺丝刀、扳手、锤子...),而非将某个工具送到加工厂改造成功能更复杂的超级工具。映射到程序世界:建立新类时,首先考虑组合(更简单灵活)。
【继承】
现实世界中,父亲和儿子往往很相似,但儿子会在父亲的能力之上具有新眼界,新技能。映射到程序世界:当某个类需要扩展某些功能,可通过继承基类(父类),从而得到导出类(子类)。一个基类包含所有导出类中所共享的特性和行为。基类变动时,导出类也会反映出这些变动。导出类和基类具有同样的类型。
继承的方法有两个:接口中添加新方法(“is like a”)、覆盖(“is a”)。最理想状态是覆盖,基类和导出类类型完全相同,接口也完全相同,成为替代原则。
【多态】
编写程序时,把对象当做基类,尽量不依赖具体特定类型。这样的代码不受新类型的影响。我们知道,一个非面向对象编程的编译器产生的函数调用会引起所谓的“前期绑定”——编译器产生一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址。但面向对象程序设计的玄妙在于,编译器不可能产生传统意义上的函数调用。我们用“后期绑定”这个词来说明该问题:当向对象发送消息时,被调用的代码直到运行时才能确定。java使用一小段特殊的代码来替代绝对地址调用,该段代码使用在对象中存储的信息来计算方法体的地址。(C++使用virtual关键词实现,java默认动态绑定)
【容器】
如果不知道在解决某个特定问题时需要多少个对象,或存活多久。我们就不知道该如何存储这些对象(因为确实有些信息只有在运行时才能获得)。幸好java内置了“容器”,在任何需要时都可以扩充自己以容纳你置于其中的所有东西。如List(用于存储序列)、Map(即关联数组,用来建立对象间的关联)、Set(每种对象类型只持有一个),以及诸如列队、树、堆栈等构件。
【参数化类型】
编译器可以通过参数化类型(即“泛型”-一个尖括号,中间包含类型信息),定制一个接纳/取出特定类型的容器。如:ArrayList<shape> shapes = new ArrayList<shape>();创建了一个存储shape类型的数组容器。
【异常处理】
java中异常是一种对象,从出错地点被“抛出”,并被专门设计用来处理特定类型错误的相应的异常处理器“捕获”。异常处理似乎是与程序正常执行路径并行的,在错误发生时执行的另一条路径。
【并发编程】
Java的并发是内置于语言中的。线程只是一种为单一处理器分配执行时间的手段,但针对操作系统支持多处理器,每个任务可以被指派给不同的处理器,此时是真正的并行执行。(但需要利用资源锁,保障共享资源的安全)。
【客户端编程】
插件-某些更快更强大的行为都是插件添加到服务器中的。程序员可以下载该段代码,并将其插入到浏览器中适当的位置,以此来为浏览器添加新功能。 脚本语言-略。java-略。
【服务器端编程】
通常,请求只是要求“给我发送一个文件”,之后浏览器会议某种适当的形式解释该文件(如作为HTML页面、图片、脚本程序、java applet等)。更复杂的对服务器的请求通常涉及数据库事务。如复杂的数据库搜索请求,然后服务器将结果进行编排,使其成为一个HTML页面发回给客户端。(如果客户端更智能,服务器可将原始数据发回,客户端进行格式编排,效率更高)。当对数据库的修改时,必须通过服务器端的某些代码来实现,即服务器端编程。用java编写称作servlet的程序来实现(或其衍生物JSP)。
提示:
TIPS:本文只是个人对过去的总结,不保证简洁性、系统性、易懂性。如需交流:zhejiangdaxue2011(微信号)
网友评论