第四章 類與對象
一、面向?qū)ο笤O(shè)計(jì)概述
1、面向過程與面向?qū)ο?/h4>
??? 傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)通過設(shè)計(jì)一系列的過程(即算法)來求解問題,這些過程一旦被確定,就要開始考慮存儲數(shù)據(jù)的方式。也就是首先確定如何操作數(shù)據(jù),然后再決定如何組織數(shù)據(jù),以便于數(shù)據(jù)操作。
??? 面向?qū)ο蟪绦蛟O(shè)計(jì)卻調(diào)換了這個次序,數(shù)據(jù)被放在第一位,然后再考慮操作數(shù)據(jù)的算法。
??? 面向過程適合規(guī)模較小的問題,而面向?qū)ο蟾舆m合用于解決規(guī)模較大的問題。
2、類
??? 封裝:封裝是與對象有關(guān)的一個重要概念。從形式上看,封裝是將數(shù)據(jù)和行為組合在一個包中,并對對象的使用者隱藏了數(shù)據(jù)的實(shí)現(xiàn)方式。對象中的數(shù)據(jù)稱為實(shí)例域,操縱數(shù)據(jù)的過程稱為方法。對于每個特定的類實(shí)例(對象)都有一組特定的實(shí)例域值,這些值的集合就是這個對象的當(dāng)前狀態(tài)(state)。無論何時,只要對象發(fā)送一個消息,它的狀態(tài)就有可能改變。
??? 實(shí)現(xiàn)封裝的關(guān)鍵在于絕對不能讓類中的方法直接訪問其他類的實(shí)例域。程序僅通過對象的方法與對象的數(shù)據(jù)進(jìn)行交互。封裝給予對象了“黑盒”特征,這是提高重用性和可靠性的關(guān)鍵。這意味著一個類可以全面的改變存儲數(shù)據(jù)的方式,只要仍然使用同樣的方法操縱數(shù)據(jù),其他對象就不會知道或介意所發(fā)生的變化。
3、對象:
對象的三個主要特性:
- 對象的行為——可以對對象施加哪些操作,或可以對對象施加哪些方法?
- 對象的狀態(tài)——當(dāng)施加那些方法時,對象如何響應(yīng)?
- 對象的標(biāo)識——如何辨別具有相同行為與狀態(tài)的不同對象;
??? 封裝:就是把數(shù)據(jù)和行為隱藏起來,其他的類不能直接訪問,只能通過對象的方法來訪問。
??? 對象:對象是對實(shí)際事物的抽象概括。
4、類之間的關(guān)系
在類之間常見的關(guān)系有:
> 依賴(“use-a”)
> 聚合(“has-a”)
> 繼承(“is-a”)
??? 依賴:即“use-a”關(guān)系,最常見的關(guān)系,例如,Order類依賴Accout類是因?yàn)镺der對象需要訪問Acount對象查看信用狀態(tài)。如果一個類的方法操縱另一個類的對象,就說這個類依賴于于另一個類。
??? 聚合:即“has-a”關(guān)系,例如:一個Order類對象包含一些Item對象。聚合關(guān)系就是A的對象包含B的對象。
??? 繼承:即“is-a”關(guān)系,是一種表示特殊與一般的關(guān)系。一般而言,如果類A繼承類B,類A不但包含從類B繼承的方法,還會擁有額外的功能。
二、使用現(xiàn)有類
1、對象與對象變量
??? 要想構(gòu)造一個Date對象需要在構(gòu)造器前面加上new操作符,如下:
new Date( )
??? 這個表達(dá)式構(gòu)造了一個新對象。這個對象被初始化為當(dāng)前的日期和時間。
??? 如果需要的話,也可以將這個對象傳遞給一個方法:
System.out.println( new Date( ) );
??? 相反,也可以將方法應(yīng)用于剛剛創(chuàng)建的對象上。Date類中有一個toString方法,這個方法將返回日期的字符串描述。如下:
String s = new Date( ).toString( );
??? 在這兩個例子中,構(gòu)造的對象僅使用了一次。通常希望構(gòu)造的對象可以多次使用,因此可以將對象存放在一個變量中:
Date birthday = new Date( );