对象导论

  面向对象方式通过向程序员提供表示问题空间中的元素的工具而更进一步,将问题空间中的元素及其在解空间中的表示成为“对象”。这种思想的实质是:程序可以通过添加新类型的对象使自身适用于某个特定的问题。

  Alan Key层总结了第一个成功的面向对象语言SmallTalk五个基本特性特征:万物皆对象;程序是对象的集合,他们通过发送消息来告知彼此要做的;每个对象都有自己的、由其他对象构成的存储;每个对象都拥有其类型,即每个对象都是类的一个实例;某一个特定类型的所有对象都可以接收同样的消息。

  Booch对对象提供了一个更加简介的描述:对象具有状态、行为和标识。

  类描述了具有相同特性(数据元素)和行为(功能)的对相集合。一个类实际上是一个数据类型。

  每个对象都只能满足某些请求,这些请求由对象的接口所定义。但在程序中必须有满足这些请求的代码,这些代码与隐藏的数据一起构成了实现。

  当正在试图开发或理解一个程序设计时,最好的方法就是将对象想像为“服务提供者”,它有助于提高对象的内聚性。

  将程序开发人员按照角色分为类创建者和客户端程序员是大有裨益的。客户端程序员的目标是手机各种用来实现快速应用开发的类。类创建者的目的是构建类,这种类只向客户端程序员暴漏必须的部分,而隐藏其他部分。

  访问控制存在的原因是:让客户端程序员无法触及他们不应该触及的部分;允许库设计者可以改变类内部的工作方式而不会担心会影响到客户端程序员。Java用是三个关键字在类的内部设定边界public、private和protected还有一种默认的访问权限,又称为包访问权限。

  复用的实现:创建类的实例;组合(composition,has-a);继承

  继承只覆盖基类的方法是一种处理继承的理想方式。通常情况下将这种情况下的基类和导出类之间的关系成为is-a广西,但有时也必须在导出类中添加新的接口元素,这种情况我们描述为is-like-a关系。

  在处理类型的层次结构时,把一个对象不当作它所述的特定类型来对待,而是将其当作几类的对象来对待,可以编写出不依赖特定类型的代码。

  前期绑定:编译器将产生对一个具体函数名称的调用,而运行时将这个调用解析到要将被执行的代码的绝对地址。

  在OOP中,程序知道执行时,才能够确定代码的地址。面向对象程序设计语言使用了后期绑定的概念。当向对象发送消息时,被调用的代码知道运行时才能确定。编译器确保被调用的方法存在,并对调用参数和返回值执行类检查,但却不知道将被执行的确切代码。为了执行后期绑定,Java使用了一端特殊的代码来替代绝对地址调用。这段代码使用在对象中存储的信息来计算方法体的地址。

  把将导出类看作是它的基类的过程成为向上转型。

  在Java中,所有的类最终都继承单一的类,这个类是Object。

  单根继承结构的优点:所有对象都具有一个共用的接口;保证所有对象都具备某些功能;使垃圾回收机制实现变得容易。

  容器:创建一种持有其他对象引用的对象。

  向下转型运行时的检查需要额外的程序运行时间。因此提出了一个参数化类型机制来解决向下转型的危险性。参数化类型就是一个编译器可以自动定制作用于特定类型上的类。通过使用参数化类型机制,编译器可以定制一个只接纳和取书Shape对象的容器,在Java中,它被称为泛型,一对尖括号,中间包含类型信息。

  对象的存储空间和生命周期可以在编写程序时确定,这可以通过将对象置于堆栈(自动变量,autometic variable)或限域变量(scoped variable)或静态存储区域来实现。这种方式将存储空间分配和释放置于优先考虑的位置,但牺牲了灵活性。因为必须在编写程序的时知对象的确切数量、生命周期和类型。第二种方式是在被称为堆(heap)的内存池中动态的创建对象。在这种方式中,直到运行时才知道需要多少对象、他们的生命周期如何以及他们的具体做什么。存储空间是在运行时被动态管理的,所以需要大量的时间在堆中分配空间,在堆栈中创建存储空间和释放存储空间通常各需一条汇编指令,分别对应将栈顶指针线下移动和将栈顶指针向上移动。创建堆存储空间的时间依赖于存储机制的设计。Java采用了动态内存分配。

  异常是一种对象,它从出错的地点被抛出,并被专门设计用来处理特定类型那个错误的相应的异常处理器捕获。

  线程只是一种为单一处理器分配执行时间的手段。

  客户/服务器系统的核心思想是:系统具有一个中央信息存储池(central repository of information),用来存储某种数据(常存于数据库中),你可以根据需要将它分发给某系人员或机器集群。客户/服务器概念的关键在于信息存储池的位置集中于中央,它可以被修改并将这些修改传播给信息消费者。总之,信息存储池用于分发信息的软件以及信息与软件所驻留的机器或在肌群,总称为服务器。驻留在用户机器上的软件与服务器进行通信,获取信息,处理信息,然后将他们显示在被称为客户机的用户机器上。

  Web最初的"服务器——浏览器"设计是为了能够提供交互性的内容。浏览器的提交动作通过所有的Web服务器都提供的通用网关接口(common gateway interface, CGI)传递,CGI程序的响应时间依赖与所发送的数据量大小以及服务器和Internet的负载。

  客户端编程:

    插件(plug-in):程序员可以下载一段代码,并将其插入到浏览器中适当的位置,以此来为浏览器添加新功能。

    脚本(scripting language):可以将客户端程序的源代码直接嵌入到HTML页面中。解释这种语言的插件在HTML页面被显示的时候激活。因脚本语言只是HTML的一部分,所以可以被加速加载,但代码会暴漏给任何人。

    Java:Java是通过applet以及使用Java Web Start来进行客户端编程的。applet只在Web浏览器中运行的小程序,它作为网页的一部分而自动下载。当applet被激活时,它便开始执行一个程序。它提供一个分发软件的方法,一旦用户需要客户端软件时,就自动从服务器把客户端软件分发给用户。

原文地址:https://www.cnblogs.com/forerver-elf/p/4867443.html