第四章 类与对象
一、面向对象设计概述
1、面向过程与面向对象
传统的结构化程序设计通过设计一系列的过程(即算法)来求解问题,这些过程一旦被确定,就要开始考虑存储数据的方式。也就是首先确定如何操作数据,然后再决定如何组织数据,以便于数据操作。
面向对象程序设计却调换了这个次序,数据被放在第一位,然后再考虑操作数据的算法。
面向过程适合规模较小的问题,而面向对象更加适合用于解决规模较大的问题。
2、类
封装:封装是与对象有关的一个重要概念。从形式上看,封装是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实例域,操纵数据的过程称为方法。对于每个特定的类实例(对象)都有一组特定的实例域值,这些值的集合就是这个对象的当前状态(state)。无论何时,只要对象发送一个消息,它的状态就有可能改变。
实现封装的关键在于绝对不能让类中的方法直接访问其他类的实例域。程序仅通过对象的方法与对象的数据进行交互。封装给予对象了“黑盒”特征,这是提高重用性和可靠性的关键。这意味着一个类可以全面的改变存储数据的方式,只要仍然使用同样的方法操纵数据,其他对象就不会知道或介意所发生的变化。
3、对象:
对象的三个主要特性:
- 对象的行为——可以对对象施加哪些操作,或可以对对象施加哪些方法?
- 对象的状态——当施加那些方法时,对象如何响应?
- 对象的标识——如何辨别具有相同行为与状态的不同对象;
封装:就是把数据和行为隐藏起来,其他的类不能直接访问,只能通过对象的方法来访问。
对象:对象是对实际事物的抽象概括。
4、类之间的关系
在类之间常见的关系有:
> 依赖(“use-a”)
> 聚合(“has-a”)
> 继承(“is-a”)
依赖:即“use-a”关系,最常见的关系,例如,Order类依赖Accout类是因为Oder对象需要访问Acount对象查看信用状态。如果一个类的方法操纵另一个类的对象,就说这个类依赖于于另一个类。
聚合:即“has-a”关系,例如:一个Order类对象包含一些Item对象。聚合关系就是A的对象包含B的对象。
继承:即“is-a”关系,是一种表示特殊与一般的关系。一般而言,如果类A继承类B,类A不但包含从类B继承的方法,还会拥有额外的功能。
二、使用现有类
1、对象与对象变量
要想构造一个Date对象需要在构造器前面加上new操作符,如下:
new Date( )
这个表达式构造了一个新对象。这个对象被初始化为当前的日期和时间。
如果需要的话,也可以将这个对象传递给一个方法:
System.out.println( new Date( ) );
相反,也可以将方法应用于刚刚创建的对象上。Date类中有一个toString方法,这个方法将返回日期的字符串描述。如下:
String s = new Date( ).toString( );
在这两个例子中,构造的对象仅使用了一次。通常希望构造的对象可以多次使用,因此可以将对象存放在一个变量中:
Date birthday = new Date( );