01.导论
求解问题有多种不同途径,算法与实体是迄今发现非常适合以计算机为求解工具的问题解表达方式。面向对象技术认为程序是实体在计算机中的实现。
程序设计方法与程序设计语言相互独立、相辅相成。
程序设计语言包括语法、语义与语用三方面,其中形式语义学是当前的研究重点。
面向对象程序设计是一个建模过程;实体的属性、行为、实例等在程序中都存在直接对应的要素;至于实体约束的表达,则迄今并无良好的解决办法。
02、Java语言基础
Java程序设计也是一个建模过程,实体的属性、行为、实例等在Java程序中都存在直接对应的要素。
一个Java程序由一个或多个类组成,其中必须有一个类包含main()方法。
Java源程序必须经过编辑、编译后才可装入到解释程序中运行,JDK提供的工具可帮助程序员调试Java程序或分析Java程序的性能。
利用javadoc工具可在程序中编写文档化的注释。 03、Java类型系统
类型决定了数据的表示方式、取值范围和可用操作。
每一类型的数据都可分为常量与变量两大类。常量的类型由其书写形式决定;变量的类型由程序员显式声明,遵循“先声明、后使用”原则。
Java语言的类型分为基本数据类型与引用类型两大类,其基本数据类型共8种,每一种都有对应的包装类。
表达式有三重含义:求值、副作用与指派变量。求值次序由运算符的优先级与结合性质决定。
编译器会自动执行隐式类型转换以完成某一操作;程序员自己也可显式地强制类型转换。
04、控制结构
结构化程序设计的主要技术是自顶向下、逐步求精;结构化程序设计采用的基本控制结构是顺序、选择和循环。
设计控制结构时常用伪码、盒图等结构化设计工具描述算法,然后转换为Java语言编写的源程序。
源程序中各种控制结构应采用合理的缩进,使程序的版面形式能直接体现程序的逻辑结构。
Java语言的分支结构:if、if-else、switch。 Java语言的循环结构:while、do-while、for;循环不变式是一个循环的重要特性。
Java语言的跳转结构;break、continue及带标号用法。
05、方法
在程序中引入例程或方法符合分而治之的思维方式,是自顶向下、逐步求精技术的体现。 方法的声明与调用属于两个不同的范畴。方法调用是一个表达式,并可形成一个表达式语句。
Java语言只支持按值调用的参数传递方式,不支持按引用调用;但对象引用作为参数的传递效果与按引用调用相同。
作用域为程序员命名标识符提供了层次状的名字空间。
递归程序适合处理本身以递归方式定义的问题。设计递归程序必须保证程序是可终止的。
Java语言的许多重要功能通过API提供,熟练的Java程序员须掌握这些API的用法。
06、类与对象之一
类既可作为封装和信息隐藏机制,也可作为类型定义机制;信息隐藏通过访问控制实现。
一个类的主要成员分为域和方法两类,设计者可通过访问控制约束这些成员的可见性。
每一对象实例都占存储空间以保存其内部状态,构造方法用于初始化对象状态。
静态成员表达了类(而不是实例)的属性与行为。 07、类与对象之二
Java语言的对象模型简化了C++语言的对象模型:对象实例仅能通过对象引用操纵。
JVM将动态分配的存储空间划分为堆栈和堆两部分,所有对象实例都在堆中创建。
类成员初始化时,先默认值后程序员设置值;先类变量后实例变量;先初始化表达式与初始化块,后构造方法。
对象实例收尾工作通常不采用finalize()方法,但该方法也有些其他用途。
应用程序员需要了解垃圾收集机制的基本原理。 08、类与对象之三
对于复合对象而言,浅复制与深复制具有不同的语义效果;程序员应根据实际需要选择合适的对象复制方式。
在Java程序中实现对象的深复制既可以重定义clone()方法,也可以借用对象串行化机制。
对象浅比较与深比较之间的差别类似于对象浅复制与深复制之间的差别,它实现方式也类同。
对于Java新手而言,还须注意对象的比较和复制与引用的比较和复制之间的区别。
09、继承与多态性之一
软件的可复用性是度量软件质量的重要因素,继承是实现代码复用的有效手段,它将问题域中的泛化关系映射到解空间中。
继承作为类型机制时,它定义了子类型关系:子类的对象实例中含有父类类型的子对象。
多继承有其应用背景,但可能引起语法与语义的冲突,特别是考虑到重复继承的现象。
单一根类的类层次结构简化了对象模型;Java语言的根类是Object,它描述了所有对象的基本语义。
10、继承与多态性之二
多态性的重要目标之一是实现程序中表示独立性,从而提高程序的可扩展性与可复用性。
编译时多态性主要体现在方法重载、运算符重载以及类属机制。
运行时多态性是面向对象设计的精华所在;重定义是应用运行时多态性的一个重要环节。
BertrandMeyer提出的单点选择原则是指导我们实际运用多态性的一种设计模式。
11、大型程序设计之一
在大型程序设计中,程序包机制为类提供了封装,类访问控制机制为类成员提供了信息隐藏。
程序包为Java程序员提供了一种层次结构的名字空间;Java程序的逻辑结构与物理结构有很严格的对应关系。
接口与抽象类的抽象方法表达了那些接口相同、实现不同的行为的共性,在分析与设计阶段扮演重要角色。
更理想的抽象方法表达形式是在现有的接口语法基础上增加接口语义;前、后置断言是在程序中表达语义的简单且有效的方式。
12、大型程序设计之二
嵌套类是定义在类作用域中的类,甚至可以定义在块作用域中。
嵌套类可将类名字空间组织为与程序包名字空间一样的层次结构,并实现在该名字空间中的信息隐藏。
嵌套的静态类、内部类、局部类与匿名类根据其不同特点,均有其适用的应用场合。
面向对象设计采取了与结构化方法不同的方式实现方法的回调,从而设计出主动对象或事件处理对象;内部类是实现回调的理想方式。
13、对象容器之一
Java语言除提供内置的数组类型外,还提供了诸如链表、集合、映射等预定义的对象容器类。
对象容器在程序中用于表达实体的复杂属性,提高了求解问题的能力。
应用程序中最常用的是一维数组,有时还会用到二维或多维数组;数组是一种引用类型,故其语义与其他对象引用相同。
处理数组变量的典型模式是利用循环语句对数组中每一元素逐一处理;在访问数组元素时应注意下标不可超过数组的边界。
14、对象容器之二
当前流行的高级语言都为应用程序员提供了对象容器类库,以提高软件生产率与软件质量。
Java类库的类集框架采用迭代器设计模式;迭代
器是一个用于遍历一个类集中所有对象的对象。
Java类库提供的容器主要有列表、集合、映射3大类,应用程序应根据应用需求选择合适的对象容器。
类似数组的操纵工具Arrays,Java类库提供了对象容器的操纵工具Collections。
对象容器的设计必须是多态的;Java语言的多态性比类属机制更灵活,但缺乏类属机制的类型安全性。
15、异常处理与断言
结构化异常处理的基本思想是将异常的检查者与异常的处理者分离,并允许异常在两者之间传递。
Java语言采用try-catch-finally结构处理异常,其中finally部分通常用于执行收尾任务,无论try块语句是否产生异常都会执行finally块语句。
断言可用于表达实体的约束;在不支持断言机制的程序中将断言表达为注释也非常有意义。
JDK1.4引入的断言机制主要用法帮助程序员揭露程序中的错误,其断言检测开关既可用命令行方式控制,也可用编程方式控制。
16、输入输出流之一
流是在输入∕输出应用中的一种高度抽象,这种抽象为提高应用程序的可复用性与可扩展性奠定了基础。
Java语言的流系统分为基于字节的流和基于字符的流两大类;每类流都根据不同的关联设备种类或数据操作方式派生出多种具体的流。
Java语言的流系统最具特色的是其过滤器流,这些流拥有的可复合性使得应用程序可以组装的方式轻松地应对各种需求。
17、输入输出流之二
连接流、管道流、随机访问文件等各种输入∕输出流都有其特定用途。
对象串行化可用于实现轻量持久对象,也是分布式对象通信基础设施RMI的核心技术。
在Java类库的设计与应用中采用了多种设计模式,学习Java类库为掌握设计模式提供了一个良好的机会。
java.io程序包是设计模式中的装饰模式的一个典型应用。
JDK1.4引入的新程序java.nio提供了基于块(block)的新I/O操作,追求高效率输入∕输出的应用程序可充分运用这些新特征。
第二篇:类与对象总结
类与对象总结
对象是对事物的抽象,而类是对对象的抽象和归纳。人类在认识客观世界时经常采用的思维方法就是把众多的事物归纳成一些类。分类所依据的原则是抽象,即抽象出与当前目标有关的本质特征,而忽略那些与当前目标无关的非本质特征,从而找出事物的共性,把具有共同性质的事物归结为一类,得出一个抽象的概念——类。类是描述对象的“基本原型”,它定义一类对象所能拥有的数据和能完成的操作。在面向对象的程序设计中,类是程序的基本单元。 相似的对象可以归并到同一个类中去,就像传统语言中的变量与类型关系一样。
.对象--就是把具有相同部分的物体,抽象出一个概念.比如: 人类”就是一个类,那么具体的某个人“张三”就是“人类”这个类的对象,而“名字、年龄”等信息就是对象的属性,人的动作比如“吃饭、穿衣”等就是对象的方法。总之类就是有相同特征的事物的集合,而对象就是类的一个具体实例。同时类有多态和继承,例如“人类”可以分为“男人、女人”,“老人、小孩”那么“男人、女人”就是“人类”的子类等等。观世界中的许多对象,无论其属性还是行 为常常有许多共同性,抽象出这些对象的共同性便可以构成类。所以,类是对象的抽象和归纳,对象是类的实例。观世界是由一些具体的事物构成的,每个事物都具有自己的一组静态特征(属性)和一组动态特征(行为)。例如,一辆汽车有颜色、型号、马力、生产厂家等静态特征,又具有行驶、转弯、停车等动态特征。
类的定义:例
//创建一个学生类
public class Student{
//学生姓名属性
Private String name;
//学生的学分属性
Private int scro=5;
//获取姓名
pulic void setName(String n)
Name=n;
//定义学生学习的方法
public void study(){
Scro--;
System.out.printfln(name+”学习中“);
}
//创建一个学生对象
Student stu=new Student();
//调用这个对象的方法
stu.setName(“张三”);
stu.study();
回合制游戏代码:
package angry;
//定义一个Boss类
public class Boss{
private String name;
private int blood;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setBlood(int blood){
this.blood = blood;
}
public int getBlood(){
return blood;
}
//定义一个对战方法
public void fight(Soldier sol){
//boss对象减少血量的方法
sol.setBlood(sol.getBlood()-10);
System.out.println(sol.getName()+"被
"+name+"攻击了!\n"+sol.getName()+"剩余的血量是"+sol.getBlood());
}
}
package angry;
public class Soldier {
private String name;
private int blood;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}
//定义一个对战方法
public void fight(Boss boss){
//boss对象血量减少的方法
boss.setBlood(boss.getBlood()-10);
//输出对战信息
System.out.println(boss.getName()+"被"+name+"攻击了\n"+boss.getName()+"剩余的血量是
"+boss.getBlood());
}
}
package angry;
//定义一个Fight类
public class Fight{
public static void main(String [] args){
//实例化对象
Soldier sol=new Soldier();
sol.setName("soldier");
sol.setBlood(300);
Boss boss=new Boss();
boss.setName("boss");
boss.setBlood(200);
//循环的条件
while(sol.getBlood() > 0 && boss.getBlood() > 0){
sol.fight(boss);//让战士攻击boss
if(boss.getBlood() <= 0){
System.out.println(sol.getName()+"胜利!");
break;
}
boss.fight(sol);
if(sol.getBlood() <= 0){
System.out.println(boss.getName()+"胜利!");
}
}
}
}