第1章 对象导论

本章主要介绍了面向对象程序设计(Object-oriented Programming, OOP)的基本概念,有助于帮助读者了解面向对象编程的全貌。本章概念性的东西很多,但作者举了许多生动而准确的例子来帮助读者理解。

1.1抽象

抽象就是把实际问题中的元素表示为计算机所能理解的东西,所有的编程语言都提供抽象机制。从机器语言->汇编语言->C语言->Java,抽象层次逐级升高。开发人员逐渐从关注机器的结构转向对实际问题的关注,随着抽象层次的提高,软件所能支持的业务也更加复杂。

Alan Kay总结了Smalltalk 的五个基本特性:

1)万物皆是对象

2)程序是对象的集合,它们通过发送消息来告知彼此所要做的。

3)每个对象都有自己的由其他对象所构成的存储。

4)每个对象都有其类型

5)某一特定类型的所有对象都可以接收同样的消息。

1.2每个对象都有一个接口

类描述了具有相同特性(数据元素)和行为(功能)的对象集合。一个类实际上就是一种数据类型。当一个类被确定后就可以在实际应用中创建任意个它的实例(对象)来使用它。接口则表示了一个对象所能向外界提供的服务(功能)

1.3每个对象都提供服务

把每一个对象看做一个服务提供者,根据实际问题去抽象出合适的对象。

对象的设计需满足单一聚合原则,每个对象都明确其提供的服务,创建多个对象去满足实际业务的要求。

1.4被隐藏的具体实现

开发者之间也可以分为消费者和生产者,生产者往往只希望消费者消费对其开放的产品。对于类的创建者来说,隐藏一些实现的细节是非常有必要的。访问权限的控制有助于其实现这一点。接口与实现的分离,既可以使避免面类的使用者接触与修改一些隐蔽的逻辑,又可以保证创建者在修改这些逻辑时不会影响到使用者的正常使用。

1.5复用具体实现

最简单的复用某个类的方式就是直接使用该类的一个对象,一个类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式组成。这种复用方式叫做“组合”,即一个对象拥有(has-a)另一个对象。

1.6继承

继承可以使子类拥有父类所有对其公开的属性和方法,并允许对其修改及新增。发送给父类的消息子类同样能够处理,子类与父类拥有相同的类型。

子类功能往往要比父类强大。

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

如果子类仅仅是覆盖父类的方法,这是意味着子类与父类是完全相同的类型,结构可以用一个子类来完全替代一个父类,这叫做“纯粹替代”,这种关系成为“是一个”(is-a)关系。

如果子类在父类的基础上新增了新的功能,则变成不完全替代,两者成为“像是一个”(is-like-a)关系、

1.7伴随多态的可互换对象

Java代码的只能需要到实际运行时才能确定,编译器使用后期绑定来实现这种功能。当在把消息向一个匿名的父类发送时,编译器会根据其确切的子类类型可返回不同的处理结果。

1.8单根继承结构

Java仅支持单根继承,这样既有利于对象在对上创建,又有利于垃圾回收器的回收。

Java中,所有类都最终继承自OBject类。

C++支持多根继承。

1.9容器

容器也就是数据结构,是用来持有一系统对象的特殊对象。Java中有List(存储序列)、Map(键值对)、Set(存储不重复元素的序列)、树、队列等不同的容器,每种容器又有着多种不同的实现,在应用中可以根据需要选择不同的容器。

1.9.1参数化类型

即Java SE5中新增的泛型机制,在创建容器时可以为其指定其所能持有的类型信息。这样有助于明确容器的功能,保证容器能一直存储一系列相同特性的对象;也避免了向下转型所带来的类型检查开销及一系列的危险性。

1.10对象的创建和声明期

Java中的对象在对(heap)的内存池中动态创建,而基本类型的数据则位于堆栈上。

Java采用了动态内存分配方式,可以使用new 关键字来构建对象的动态实例。

Java的垃圾回收器可以用来处理内存释放问题,它可以自动的发现对象何时不再被使用,并继而进行销毁。

1.11异常处理

Java的异常处理机制简化了开发,使得开发者不需要为可能出现问题的代码进行额外的检查,并且为错误状况提供了一种进行可靠恢复的途径。

异常处理不是面向对象的特性、

1.12并发编程

计算机可以在同一时刻处理多个任务,这是通过进程或线程来实现的。线程是轻量级的,而且多个线程可以共享一个资源。

资源竞争是进行多线程开发的难点。

1.13Java与Internet

Java applet是在Web浏览器中运行的小程序,运行时需要JRE环境,目前已被淘汰。

然而Java在服务器端编程的表现却大放异彩,是目前服务器后台开发的主流,各种各样的类库框架也是层出不穷。

1.14总结补充

OOP与Java并不能解决所有问题,根据自己的需求去所选合适的工具,目前流行的开发语言有很多,每一样必定都有其优势及价值所在。即时最终选择Java,也要对别的语言有所了解,至少也要理解还有哪些选项可供选择.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值