设计目标专注于克服开发与维护程序的复杂性;
Java的开发时间短,提高程序员的生产率;
Arts & Crafts 强调简洁设计,回归自然,但是并不回避使用现代工具;
Eckel建议先学习C语言的与饭操作符和函数之后再学习java;
一. 对象导论
计算机-头脑的自行车
抽象过程
汇编语言:对底层机器的轻微抽象;
命令式语言:主要抽象仍要求在解决问题时基于计算机的结构,而不是基于所要解决的问题的结构;
Smalltalk:
1. 万物皆对象;
2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的;
3. 每个对象都有自己的由其他对象所构成的存储;
4. 每个对象都有其类型;
5. 某一特定类型的所有对象都可以接收同样的消息;
UML,Unified Modelling Language, 统一建模语言;
将问题分解为对象的集合;
访问控制:
1. 让客户端程序员无法触及他们不应该触及的部分;
2. 允许类库设计者可以改变类内部的工作方式而不用担心影响客户端程序员;
代码复用,组合(has a),聚合
继承,基类型包含其所有导出类型所共享的特性和行为;
使继承类与基类之间产生差异的方法:
1. 扩展(is a),在导出类直接添加新方法;
2. 覆盖(is like a),改变现有基类的方法的行为;
泛化,多态,前期绑定 vs 后期绑定,向上转型(将自己从必须知道确切类型中解放出来)
为了执行后期绑定,java使用一小段特殊的代码来替代绝对地址的调用;
java的方法默认为动态绑定,c++是通过virtual关键字实现;
单根继承结构:C++为了更好的适应C模型以及灵活性,没有采用单根继承结构;单根继承机构简化了垃圾回收器的实现,不会因无法确定对象的类型而陷入僵局;
容器:
向下转型,不安全的,解决方案为参数化类型(Java SE5增加);
对象的创建和生命期:
C++必须明确删除对象;将对象置于堆栈(自动变量),限域变量,静态存储区中,追求最大的执行速度,将存储空间分配和释放置于优先考虑的位置;
Java采用在堆中动态地创建对象,需要大量的时间在堆中分配存储空间。而堆栈中创建存储空间和释放存储空间需要一条汇编命令即可。
垃圾回收器可以自动发现对象合适不再被使用,继而销毁它,提供了更高层的保障,可以避免暗藏的内存泄露问题。
异常处理:
提供了一种从错误状况进行可靠恢复的途径;
并发编程:
用户界面:用户可以在按下一个按钮后快速得到响应,而不用被迫等待到程序完成当前任务;
共享资源:某个任务锁定某项资源,完成其任务,然后释放该资源锁,使得其他任务可以使用这项资源;
Java与Internet
客户端编程:
服务器:信息存储池,用于分发信息的软件以及信息与软件所驻留的机器或集群
返回文件,将信息反馈给服务器,数据库查找,下订单。
CGI,按下网页上的提交按钮,数据被发送回服务器,服务器启动一个CGI程序来检查,发现错误,并将错误组装为一个HTML页面发送回来。
插件,允许程序员不用经过浏览器生产厂商的许可,就可以开发某种语言扩展,将其添加到服务器中。提供了一个后门,可以创建心的客户端编程语言。
脚本语言,将客户端程序的源代码直接嵌入到HTML页面中,解释这种语言的插件在HTML页面被现实时自动激活。能够解决客户端编程中遇到的80%的问题;
Java,解决客户端编程剩下的20%的问题。
Java applet,是浏览器中运行的小程序,作为网页的一部分而自动下载,当其被激活之后,便开始执行一段程序。提供了一种分发软件的方法,一旦用户需要客户端软件时,就自动从服务器下载。需要JRE。
.NET平台相当于JVM和Java类库。
服务器端编程:
常见的情形:复杂的数据库搜索请求,然后服务器将结果进行格式编排,使其成为一个HTML页面发回给客户端;
实现方式:
1. 使用Perl,Python,C++或其他某种语言编写CGI程序实现;
2. 用Java编写被成为servlet的程序来进行服务器端编程;
servlet及其衍生物JSP是许多开发网站的公司迁移到Java上的两个主要原因,因为其消除了处理具有不同能力的浏览器时所遇到的问题。