Java编程思想读书笔记之对象导论

来源:互联网 发布:windows api 激活窗口 编辑:程序博客网 时间:2024/05/16 01:51

    我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守协定的参与者,这个协定以语言的形式固定下来......除非赞成这个协定中规定的有关语言信息的组织和分类,否则我们根本无法交谈。

    上边一段话,是Java编程思想的开篇,借此作为自己写第一篇技术博客的开篇。

1.1 抽象过程

    所有语言都提供抽象机制,人们能够解决问题的复杂程度直接取决于抽象的类型和质量。所谓类型,指的就是我们抽象的是什么。例如汇编语言是对计算机结构的轻微抽象,而C语言则是对汇编语言的抽象。这些语言在抽象的过程中,都需要以计算机结构为抽象基础,而不是以待解决的问题为抽象基础。程序员必须建立起在机器模型和待解决问题模型之间的关联,这往往很复杂,而且很难以维护。这些编程的方法一般称为面向过程编程。而与之相反的是面向对象编程,面向对象编程时针对的是待解决问题的抽象,是根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。Alan Kay针对面向对象的SmallTalk语言总结除了五项基本特征:

    1)万物皆为对象。(每个对象都是对问题特定的描述)

    2)程序是对象的集合,它们通过发送消息来通知彼此需要做的。(消息指的是方法的调用)

    3)每个对象都有自己的由其它对象所构成的存储。(引入了包的结构,是简单的对象,能够描述复杂的问题)

    4)每个对象都拥有其类型。(每个对象都是某个类的实例)

    5)某一特定类型的所有对象都可以接受同样的消息。(多态的含义,如发送给三角形的消息,必定能够被等边三角形所接收)


1.2 每个对象都有一个接口

    1)因为一个类描述了具有相同特性或者行为的对象集合,所以一个类实际上就是一个类型。

    2)每个对象都只能满足某些请求,这些请求由对象的接口所定义,决定接口的便是类型。

  

1.3 每个对象都提供服务

    1)有助于提高内聚性。


1.4 被隐藏的具体实现

    程序开发人员分为类创建者和类使用者(客户端程序员),在类的创建过程中为了保证类的安全性,采用了访问控制机制。

    1)private 私有的。private控制的方法和变量只能被该类型内部的变量和方法进行访问。

    2)public 公有的。public控制的方法和变量能够被所有的变量和方法进行访问。

    3)protected 。protected控制的方法和变量只能够被该类型或者其继承的类的变量和方法进行访问。

    4)默认的访问权限是包访问权限。该访问权限限制类的访问只能在包的内部。


    访问控制存在的原因:

    1)让客户端程序员只能访问他们所需要的部分,禁止其触碰无法涉及的部分。

    2)允许类库的创建者对类库进行修改,而不用担心影响到客户端程序员。


1.5 复用具体实现

    复用可以被理解为创建一个成员对象来定义一个新的对象,是一种组合方式,如果组合方式是动态发生的也成为聚合方式,通常也成为has-a关系(拥有)。在开发过程中首先应该考虑使用组合的方式解决问题,如果无法解决问题时,再采用继承的方法实现。


1.6 继承

    一个基类包含其所有导出类型所共享的特性和行为。基类表述核心概念,导出类表示此核心可以被实现的各种不同方式。继承的两种常用方法为:

    1)在导出类中直接添加新的方法。

    2)在导出类中改变基类中的现有方法,这也被称为覆盖。

1.6.1 ”是一个“与”像是一个“关系

    1)是一个(is-a):指的是在导出类中只覆盖基类的方法,不添加新的方法,采用的是替代原则。

    2)像是一个(is-like-a):指的是在导出类中添加新的方法,与基类的接口不同


1.7 伴随多态的可互换对象

    在处理类型的层次结构时,经常需要把一个对象不当做它特定的类型来看待,而看做是其基类型来看待。面向对象采用了后期绑定机制,当向对象发送消息时,被调用的代码直到运行时才能确定,编译器确保调用方法的存在并对调用参数和返回类型进行检查,但并不知道调用哪些代码,Java使用一小段代码计算调用方法体的地址,通过这一小段代码,不同的导出类表现不同的行为。


1.8 单根继承结构(Object)

    单根继承结构的优点:

    1)所有对象的属于一个基本类型。保证了所有对象都能够处理一些方法。

    2)对垃圾回收机制和异常处理机制尤为重要。(可以避免陷入无法检查对象类型的僵局)


1.9 容器

    容器持有对象的引用,常用的容器有:

    1)List、ArrayList、LinkedList

    2)Map

    3)队列、树、堆栈

1.9.1 参数化类型

    1)向上转型是安全的,向下转型除非知道确切的类型,否则都不是类型安全的。

    2)泛型解决了向下转型的不安全问题。


1.10 对象的创建和生命期

    Java垃圾回收机制和单根继承结构的设计有效地避免了C++的内存泄露问题。


1.11 异常处理:处理错误

    异常处理将错误处理直接内置在编程语言中。异常是一种对象,它从错误的地点被抛出,被异常处理器所捕获,并进行处理,并不影响程序的执行。


1.12 并发编程

    把待解决的问题切片成多个独立执行的任务,提高程序的响应能力。线程只是一种为单一处理器分配执行时间的手段。但有一个隐患:资源共享,为了解决该问题引入了锁的概念。


0 0
原创粉丝点击