环境:Red Hat Enterprise Linux 5 ,
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Client VM (build 24.60-b09, mixed mode, sharing)
前言
一、为什么有程序设计?
管理复杂性,复杂性一是问题的复杂性,二是待解决问题的复杂性。
二、java的优点:
为程序员减少复杂性
减少开发代码的【时间】和困难
改善后的运行效率。
跨平台 。
提高生产率。
引用:
它开始着手解决日渐变得重要的各种复杂任务,例如多线程与网络编程,并将其作为语言特性或以工具库的形式纳入Java,这使得开发此类应用变得倍加简单。
绪论
引用:
我们不应该将Java仅仅看作是一些特性的集合——有一些特性在孤立状态下没有任何意义。只有在考虑到设计,而不仅仅是编码时,才能完整地运用Java的各部分。
//软件设计师的下午题关于设计模式,可以一看。
//JDBC Servlet JSP ,java学习重中之重
第一章 对象导论
引用:计算机革命起源于机器,因此,编程语言的产生也始于对机器的模仿。
计算机是头脑延伸的工具,同时还是一种不同类型的表达媒体。面向对象程序设计(Object-oriented Programming ,OOP)便是这种以计算机作为表达媒体的大趋势中 的 组成部分
1.1 抽象过程
一、“类型”是指“所抽象的是什么?”。
二、汇编语言是对底层机器的轻微抽象。命令式语言(basic,C)都是对汇编语言的抽象,但是,它们的抽象基于计算机的结构,而非基于问题的结构来考虑。程序员需要在机器模型(位于“解空间”内,这是你对问题建模的地方,例如计算机) 和 待解决问题的模型(位于"问题空间"内,这是问题存在的地方,例如一项业务) 之间建立关联,很麻烦,很费力。
三、极端的方法:只对待解决问题建模。例如LISP和APL,但是它们只能解决特定类型的问题,不具有通用性。
四、面向对象 表示方法非常通用,使程序员不会受限于任何特定类型的问题,然后通过添加类型的对象来解决某个特定问题。
五、第一个面向对象语言、同时也是Java所基于的语言之一的Smalltalk的五个基本特性。
1.万物皆为对象。对象可以存储数据,可以执行操作。eg:人作为对象,有身高、体重的数据值,执行的操作是可以说话、行走。
2.程序是对象的集合,它们通过发送消息来告知彼此所要做的。使用一个对象,必须向对象发出消息请求。
3.每个对象都有自己的有其他对象所构成的存储。比如说一个公司,有着所谓的核心技术,于是将它封装成一对象A,公司的临时工程序员怎么使用核心技术解决实际问题呢?创建一个对象B,里面包括调用对象A的方法,对临时工程序员来说,感觉问题解决的很轻松,自认为什么都懂,可惜就是个人形打字机。不过,通过这种方法,可以在程序中构建复杂的体系,分工明确,极具效率,将问题真正的复杂性隐藏。
4.每个对象都拥有其类型。
5.某一特定类型的所有对象都可以接受同样的消息。 几何形 是基类,圆形是子类,子类可以接受基类拥有的一切。感觉有点怪怪的。某某某想使用基类的对象,于是向 基类的对象发送请求消息,于此同时,子类的对象也可以接受这个消息,子类可以代替基类,但基类不能代替子类,这就是可替代性(substitutability),OOP中重要的概念之一。每个对象在内存中都有一个唯一的地址。
1.2 每个对象都有一个接口
一、所有的对象都是唯一的,但具有相同特性和行为的对象都是类的一部分。第一个面向对象语言Simula-67,它在程序中使用基本关键字class引入新的类型。经典的"银行出纳员问题"。面向对象 也是一种仿真程序,仿真待解决问题。
Light |
数据成员 |
on() off() brighten() dim() |
UML统一建模语言(Unified Modelling Language)
Light lt=new Light();
lt.on();
类名Light,用new方法创建了一个对象lt,对这个对象lt发出的请求是:打开它,关闭它,将它调亮,将它调暗。
1.3 每个对象都提供服务
程序向用户提供服务,它调用其它对象提供的服务来实现这一点,程序员的任务就是创建能够提供服务解决问题的一系列对象。
1.4 被隐藏的具体实现
程序员有类创建者(创建新类)和客户端程序员(使用类)两个层次,类创建者构造类,客户端程序员则收集然后使用这些类快速开发,这些类有一个问题,那就是只向客户端程序员暴露他们所需的部分,提供接口,其余核心代码部分隐藏,你不想把核心技术暴露给其他人,这就需要用到访问控制。访问控制的第二个好处就是类创建者修改了之前使用的类,例如重新设计了一个算法加快程序的运行速度,由于类创建者提供的接口没有改变,那么客户端程序员也没必要修改应用程序。//具体可参考数据库的三层体系结构
访问控制的三个关键字public ,private,peotected.
1.5 复用具体实现
代码复用是面向对象程序设计语言了不起的优点之一。
最简单 的复用: 类A,根据这个类创建一个对象B,创建一个对象C,创建一个对象D,省略号。。。。。
上一层的复用: 类A,类B,根据现有的两个类,通过组合(composition),合成新的类,新类一般声明为private,客户端程序员不能访问。
具体参考:http://blog.csdn.net/liushuijinger/article/details/6994265
建立新类时,应优先考虑组合,因为它简单灵活,然后再考虑继承。
1.6 继承
一、解释:根据现有的类为基础,复制它,然后通过添加或修改这个复制副本来创建新类。
二、例子:几何形问题,基类为几何形,有尺寸、颜色、位置等,同时可以被绘制、擦除、移动和着色等。派生类有圆形、正方形、三角形,每一种都有特有的特性和行为,例如计算面积。
三、子类包括父类的所有类型的所有成员(尽管private成员被隐藏且不可访问),更重要的是它复制了基类的接口,也即是说发给父类的消息也可以发给子类."一个圆形也是一个几何形"。
四、基类和子类有相同的基础接口,这些接口必须有子类的某些代码来实现。例如,对象A收到请求消息,必须有某些代码去执行。如果子类只是简单的继承类而不去实现,那么对象A毫无用处。
五、
继承的简单使用:直接在子类中加入新方法,这些新方法基类没有,Java中关键字extends表示继承。
继承的高级使用:改变基类中已有方法的行为,谓之覆盖(overriding),虽然子类在用基类的方法,但是子类想做自己的事。
例如:电灯泡,基类:打开。子类A继承后想:我可以声控打开,子类B继承后想:我可以智能手机打开。 ??例子有点不恰当。
子类使用overridring,子类、基类是is -a的关系,子类is-a 父类,子类可以替代父类。
子类添加新方法,但是基类不能访问新添加的方法,子类不是完美的替代父类。
1.7 伴随多态的可互换对象
处理类型的层次结构时,经常先抽象基类,然后对基类编写不会依赖特定类型的代码。然后设计子类,对子类进行扩展。一是改善设计,二是降低维护费用。
代码略。
1.8 单根继承结构
所有的类都继承于一个单一的基类,终极类名是Object。
1.9 容器
程序运行时,需要多少个对象,你不可能知道,于是便有了容器,在任何需要的时候都可以扩充自己以容纳所需的空间,它是动态变换的,由这个容器对象来处理细节。
C++中,容器是标准C++类库的一部分,称为标准函数模板(Standard Template Library,STL)。
Java中,拥有许多满足不同需求的各种容器,例如List(存储序列),Map(关联数组,用来建立对象之间的关联),Set(每种对象类型只持有一个),还有队列,数,堆栈等。为什么要设计这么多容器,一是不同的容器提供不同的接口和功能,二是不同的容器在不同场合效率不同。
由子类向父类向上转型是安全的,但是有父类向子类向下转型是危险的。
新增的范型 ???不是泛型
:例子
ArrayList<Shape> shapes=new ArrayList<Shape>(); //创建一个存储Shape的ArrayList.
1.10 对象的创建和生命期
使用对象是,一个关键问题是对象的生成和销毁。每个对象为了生存需要资源,尤其是内存。
Java采用了动态内存分配方式,用new关键字构建对象。
Java提供'"垃圾回收器"的机制,自动销毁不使用的对象来释放对象占用的内存。
1.11 异常处理:处理错误
异常是一种对象。
1.12 并发编程
用户界面是使用线程的常见例子。
1.13 Java和Internet
中间件:将负载分散给服务器端的其他机器。
CGI:common gateway interface ,通用网关接口
客户端编程,即浏览器编程。
Java通过applet以及Java Web Start 进行客户端编程。
applet :是浏览器中运行的小程序。
JVM:java虚拟机,执行java程序的软件平台。
Servlet和JSP:服务器端编程。
1.14 总结
评估问题需求,考察其他选择,适合解决问题的语言才是最好的语言。