面向对象程序设计(简称OPP)
面向对象的程序是由
对象组成的。每个对象包含对用户
公开的特定
功能部分和
隐藏的
实现部分。
OOP中不关心对象的具体的实现,只要能满足用户的需求即可。
程序= 算法+数据结构
传统的结构化程序: 算法第一位
面向对象程序:数据第一位
4.1.1 类
类(class)是构造对象的
模板或蓝图。
由类
构造(construct)对象的过程成为创建类的
实例
封装(encapsulation)将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。封装的关键在于
决不能让类中的方法直接的访问其他类的实例域。
对象中的数据称为
实例域(instance filed),操纵数据的过程称为
方法(method)。
每个特定的类实例都有一组特定的实例域值,称为这个对象的当前
状态(state)。
OPP的另外一个原则就是可以通过
扩展一个类来建立另外一个新的类。Java所有的类都源自同一个Object类。
扩展一个已有的类,新类具有原来的类的所有属性和方法。这个过程称为
继承(inherittance)。
4.1.2 对象
对象的三个主要特性:
行为(behavior)
状态(state)
标识(identity)
4.1.3 识别类
面向对象程序的设计流程:首先从设计类开始,然后再往每个类中添加方法
识别类的简单规则:在分析问题的过程中寻找名词,而方法对应着动词
4.1.4 类之间的关系
常见关系由:
依赖(use-a)
聚合(has-a)
继承(is-a)
可以采用UML(Unified Modeling Language,统一建模语言)绘制类图
4.2 使用预定义类
4.2.1 对象和对象变量
要想使用对象,首先必须构造对象,并指定其初始状态,然后对对对象应用方法。
使用
构造器(constructor)来构造新实例。
构造器的名字要与类名相同,要想构造一个新对象,要在构造器前面加上new操作符
import java.util.*;
public class Test {
public static void main(String[] args) {
System.out.println(new Date());
//此处new Date() 相当于调用 Date().toString() 方法将返回日期的字符串描述
}
}
等价于
import java.util.*;
public class Test {
public static void main(String[] args) {
String s = new Date().toString();
System.out.println(s);
}
}
为了使构造的对象能多次使用,可以引入一个对象变量:
Date date = new Date();
定义了一个
对象变量date,可以
引用Date类型的对象,
对象变量并不是一个对象!!
s = date.toString();
将会产生编译错误
任何对象变量的值都是对储存在另外一个地方的一个对象的引用。new操作符返回值也是一个引用。
4.2.2Java类库的GregorianCalendar类
GregorianCalendar类月份从0开始,11表示十二月!
4.2.3 更改器方法和访问器方法
更改器方法:对实例域做出修改的方法 比如
deadline.set(Calendar.YEAR, 2001);
deadline.set(Calendar.MONTH, Calendar.APRIL);
访问器方法:仅访问实例域而不进行修改的方法,比如
int month = now.get(Calendar.MONTH);
通常的习惯是在访问器方法名前面加上前缀get,更改器方法前面加上set
Date time = calendar.getTime();
calendar.setTime(time);