第一章对象导论

1.1抽象过程
1、所有编程语言都提供抽象机制。人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。
2、程序可以通过添加新类型的对象使自身适用于某个特定问题。
3、OOP允许根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。
4、①万物皆为对象。
②程序是对象的集合,它们通过发送消息来告知彼此所要做的。
③每个对象都有自己的由其他对象所构成的存储。(可以通过创建包含现有对象的包的方式来创建新类型的对象。)
④每个对象都拥有其类型。
⑤某一特定类型的所有对象都可以接收同样的消息。
5、对象具有形态、行为和标识。这意味着每一个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每一个对象都可以唯一地与其他对象区分开来,具体说来,就是每一个对象在内存中都有一个唯一的地址。
6、程序员必须建立起在机器模型(位于“解空间”内,这是你对问题建模的地方,例如计算机)和实际待解问题的模型(位于“问题空间”内,这是问题存在的地方,例如一项业务)之间的关联。
1.2每个对象都有一个接口
1、关键字class的由来是在程序执行期间具有不同的状态而其他方面都相似的对象会被分组到对象的类中。
2、创建抽象数据类型(类)是面向对象程序设计的基本概念之一。抽象数据类型的运行方式与内置类型几乎完全一致;你可以创建某一类型的变量(按照面向对象的说法,称其为对象或实例),然后操作这些变量(称其为发送消息或请求;发送消息,对象就知道要做什么)
3、类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以一个类实际上就是一个数据类型。
4、接口确定了对某一特定对象所能发出的请求。当向对象发送请求时,与之相关联的方法就会被调用。此过程通常被概括为:向某个对象“发送消息”(产生请求),这个对象便知道此消息的目的,然后执行对应的程序代码。
1.3每个对象都提供服务
1、程序本身将向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。你的目的目的就是去创建(或者最好是在现有代码库中寻找)能够提供理想的服务来解决问题的一系列对象。
1.4被隐藏的具体实现
1、访问控制存在的原因就是①让客户端程序员无法触及他们不应该触及的部分,这些部分对数据类型的内部操作来说是必需的。②允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。
2、public private protected default ①public 表示紧随其后的元素对任何人都是可用的。②private表示除类型创建者和类型的内部方法之外的任何人都不能访问的元素。③protected 和private 相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员。④default类可以访问在同一个包中的其他类的成员。

1.5复用具体实现
1、新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成。因为是在使用现有的类合成新的类,所以这种概念被称为“组合”,如果组合是动态发生的,那么它通常被称为聚合。
2、组合带来了极大的灵活性。实际上,在建立新类时,应该首先考虑组合,因为更加简单灵活。
1.6继承
1、一个基类型包含其所有导出类型所共享的特性和行为。
2、基类和导出类具有相同的基础接口:有两种方法可以使基类与导出类产生差异。
①直接在导出类中添加新方法。这些新方法并不是基类接口的一部分。
②改变现有基类的方法的行为,被称之为覆盖。
1.6.1“是一个”与“像是一个”关系
1、继承如果只覆盖基类的方法(并不添加在基类中没有的新方法),如果这样做,就意味着导出类和基类是完全相同的类型,因为它们具有完全相同的接口。在某种意义上,这是一种处理继承的理想方式,经常将这种情况下的基类与导出类之间的关系称为is-a(是一个)关系。
2、有时候必须在导出类型中添加新的接口元素,这样也就扩展了接口。这个新的类型仍然可以替代基类,但是这种替代并不完美,因为基类无法访问新添加的方法。这种情况可以描述为is-like-a(像是一个)关系。
1.7伴随多态的可互换对象
1、前期绑定:一个非面向对象编程的编译器产生的函数调用会引起所谓的前期绑定,这意味着编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址。
2、后期绑定:当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查(无法提供此类保证的语言被称为是弱类型的),但是并不知道将被执行的确切代码。
3、为了执行后期绑定,Java使用一小段特殊的代码来替代绝对地址调用。
4、把将导出类看做是它的基类的过程称为向上转型。向上转型是安全的。
1.8单根继承结构
1、万事万物皆Object。单根继承结构保证所有对象都具备某些功能。单根继承结构使垃圾回收器的实现变得容易得多。
1.9容器
1、不同容器提供了不同类型的接口和外部行为。如堆栈和队列。
2、不同的容器对于某些操作具有不同的效率。
1.9.1 参数化类型
1、向下转型:转化为更具体的类型。向下转型几乎是不安全的。
1.10对象的创建和声明期
1、第一种方式:为了追求最大的执行速度,对象的存储空间和声明周期可以在编写程序时确定,这可以通过将对象置于堆栈或限域变量或静态存储区域内来实现。这种方法将存储空间分配和释放置于优先考虑的位置,某些情况下这样控制非常有价值。但也牺牲了灵活性,因为必须在编写程序时知道对象确切的数量、生命周期和类型。
2、第二种方式:被称为堆内存池中动态地创建对象。在这种方式中,直到运行时才知道需要多少对象,它们的生命周期如何,以及它们的具体类型是什么。
3、Java完全采用了动态内存分配方式,每当想要创建新对象时,就要使用new关键字来构建此对象的动态实例。
4、Java的垃圾回收器被设计用来处理内存释放问题(尽管它不包括清理对象的其他方面)。垃圾回收器“知道”对象何时不再被使用,并自动释放对象占用的内存。这一点同所有对象都是继承自单根基类Object以及只能以一种方式创建对象(在堆上创建)这两个特性结合起来,使得Java编程的过程较之用C++编程要简单得多。
1.11异常处理:处理错误
1、异常处理将错误处理直接置于编程语言中,有时甚至置于操作系统中。异常是一种对象,它从出错点被“抛出”,并被专门设计用来处理特定类型错误的响应的异常处理器“捕获”。
1.12并发编程
1.13Java与Internet
1.13.1Web是什么
1、客户/服务器系统的核心思想是:系统具有一个中央信息存储池,用来存储某种数据,它通常存在于数据库中,你可以根据需要将它分发给某些人员或机器集群。
1.13.2客户端编程
1、Web最初的“服务器-浏览器”设计是为了能够提供交互性的内容,但是其交互性完全由服务器提供。服务器产生静态页面,提供给只能解释并显示它们的客户端浏览器。
2、通用网关接口 CGI
1.13.3服务器
1.14 总结

猜你喜欢

转载自blog.csdn.net/panda_____/article/details/80232223