Java與UML面向?qū)ο蟪绦蛟O(shè)計(jì) TP312JA316
Bruce E.Wampler
Chapter 2 對(duì)象的精髓object(對(duì)象)
面向?qū)ο蟮幕締挝弧?duì)象是一個(gè)擁有屬性、行為和標(biāo)識(shí)符的實(shí)體。
對(duì)象是類(lèi)的實(shí)例,對(duì)象的屬性和行為在類(lèi)定義中定義。
class(類(lèi))
類(lèi)是一組對(duì)象的描述,這一組對(duì)象有共同的屬性和行為。在概念上,類(lèi)和非面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中的抽象數(shù)據(jù)類(lèi)型比較相似,但是由于類(lèi)同時(shí)包括數(shù)據(jù)結(jié)構(gòu)和行為,所以它更為全面。
類(lèi)的定義描述了這個(gè)類(lèi)的所有對(duì)象的屬性,也描述了實(shí)現(xiàn)該類(lèi)對(duì)象的行為的類(lèi)的方法。
面向?qū)ο蠹夹g(shù)是使用對(duì)象將真實(shí)世界的系統(tǒng)在軟件中建模的技巧,對(duì)象是核心概念,它是真實(shí)世界的實(shí)體或概念的軟件模型。
類(lèi)是對(duì)所有該類(lèi)的對(duì)象的特征的描述或定義;對(duì)象是類(lèi)的一個(gè)實(shí)例或成員,當(dāng)程序運(yùn)行時(shí),對(duì)象被創(chuàng)建并存在。
編寫(xiě)成功的OO程序,必須堅(jiān)持以對(duì)象的觀點(diǎn)思考!!!
2.1 什么是面向?qū)ο笙到y(tǒng)
object orientation(面向?qū)ο蠹夹g(shù))
一種軟件開(kāi)發(fā)方法,包括利用對(duì)象進(jìn)行抽象、封裝的類(lèi)、通過(guò)消息進(jìn)行通信、對(duì)象生命周期、類(lèi)層次結(jié)構(gòu)和多態(tài)等技術(shù)。
2.1.1 面向?qū)ο笙到y(tǒng)的基本特性1. 利用對(duì)象進(jìn)行抽象
abstraction(抽象) 真實(shí)世界的對(duì)象或概念的模型。
2. 封裝的類(lèi)
Encapsulation(封裝) 向外界隱藏對(duì)象的所有內(nèi)部細(xì)節(jié)的過(guò)程。在Java中,通過(guò)在類(lèi)定義里面來(lái)定義屬性和方法的方式,強(qiáng)制實(shí)現(xiàn)封裝過(guò)程。
attribute(屬性) 用于保持對(duì)象的狀態(tài)信息。屬性可以很簡(jiǎn)單,只是一個(gè)布爾型變量記錄開(kāi)或關(guān);也可以是一個(gè)復(fù)雜的結(jié)構(gòu),比如說(shuō)另一個(gè)對(duì)象。類(lèi)的定義描述了類(lèi)的屬性和操作(方法)。
behavior(行為) 外界可見(jiàn)的對(duì)象活動(dòng)。它包括對(duì)象如何通過(guò)改變內(nèi)部狀態(tài),或向其它對(duì)象返回狀態(tài)信息來(lái)響應(yīng)消息。
method(方法) 針對(duì)對(duì)象實(shí)施的操作或服務(wù),作為類(lèi)定義的一部分來(lái)定義。方法用來(lái)實(shí)現(xiàn)對(duì)象的行為。方法的同義詞包括成員函數(shù)、操作和服務(wù)等。
state(狀態(tài)) 狀態(tài)反映了給定對(duì)象所有屬性的當(dāng)前值,是經(jīng)過(guò)一段時(shí)間的對(duì)象行為積累的結(jié)果。
3. 通過(guò)消息進(jìn)行通信
消息是指對(duì)象是如何進(jìn)行通信的。
用程序設(shè)計(jì)術(shù)語(yǔ)來(lái)說(shuō),發(fā)送消息是通過(guò)調(diào)用某個(gè)類(lèi)的方法來(lái)實(shí)現(xiàn)的;收到消息是通過(guò)其它對(duì)象調(diào)用本對(duì)象的類(lèi)的方法來(lái)實(shí)現(xiàn)的。
消息驅(qū)動(dòng)的程序執(zhí)行流。
4. 對(duì)象生命周期
對(duì)象是動(dòng)態(tài)的實(shí)體。一個(gè)對(duì)象(在程序運(yùn)行過(guò)程中)被創(chuàng)建就稱為它被實(shí)例化,或受到類(lèi)定義的約束。經(jīng)過(guò)實(shí)例化的類(lèi)的成員稱為對(duì)象,或等價(jià)的稱為實(shí)例。
instantiation(實(shí)例化) 創(chuàng)建一個(gè)給定類(lèi)的對(duì)象實(shí)例。實(shí)例化一個(gè)實(shí)例使它從沒(méi)有變?yōu)榇嬖凇?br />instance(實(shí)例) 某個(gè)特定的對(duì)象是一個(gè)類(lèi)的實(shí)例。一個(gè)實(shí)例擁有特定的屬性、行為以及唯一的標(biāo)識(shí)符。實(shí)例和對(duì)象這兩個(gè)詞經(jīng)常互換使用。
constructor(構(gòu)造方法) 創(chuàng)建對(duì)象并定義其初始狀態(tài)的操作。對(duì)于復(fù)雜對(duì)象來(lái)說(shuō),構(gòu)造方法可能是重要的活動(dòng),也可能去調(diào)用其它對(duì)象的構(gòu)造方法。
object lifetime(對(duì)象生存期) 對(duì)象存在的時(shí)間,從調(diào)用構(gòu)造方法實(shí)例化開(kāi)始,直到對(duì)象不復(fù)存在,被Java垃圾收集器終結(jié)為止。對(duì)象何時(shí)被創(chuàng)建是由程序控制的,但是由于Java垃圾收集器工作的方式,應(yīng)用程序是不能確定對(duì)象何時(shí)不復(fù)存在的。
identity(標(biāo)識(shí)符) 對(duì)象具有的能將它與其它對(duì)象區(qū)分開(kāi)來(lái)的特征或狀態(tài)。
reference(引用) 其值是一個(gè)地址的數(shù)據(jù)元素。在Java中,所有的對(duì)象都是通過(guò)引用來(lái)訪問(wèn)的。任何對(duì)象變量都是對(duì)一個(gè)真實(shí)對(duì)象的引用,而非對(duì)象本身。
garbage collection(垃圾收集) 對(duì)不再使用的內(nèi)存的自動(dòng)檢測(cè)和釋放。Java使用垃圾收集器,而不是像C++那樣使用顯式的析構(gòu)方法。
5. 類(lèi)層次結(jié)構(gòu)
創(chuàng)建面向?qū)ο蟪绦蜃钪匾姆矫嬷皇菍㈩?lèi)安排到多個(gè)層次結(jié)構(gòu)中去。
association(關(guān)聯(lián)) 兩個(gè)類(lèi)之間的一種關(guān)系。關(guān)聯(lián)表明類(lèi)的對(duì)象之間的相互關(guān)系。
hierarchy(層次結(jié)構(gòu)) 類(lèi)的一種次序。最常見(jiàn)的面向?qū)ο髮哟谓Y(jié)構(gòu)是繼承關(guān)系和聚合關(guān)系。
multiplicity(多重性) 確定對(duì)象間關(guān)聯(lián)數(shù)量的屬性。
第一種:整體/部分層次結(jié)構(gòu)
whole/part(整體/部分) 類(lèi)之間的一種關(guān)系,一個(gè)類(lèi)由其它類(lèi)的對(duì)象組成或容納了其它類(lèi)的對(duì)象。
has-a(擁有) 一種說(shuō)明整體/部分關(guān)系的方式。整個(gè)對(duì)象擁有部分。
part-of(部分) 與has-a相反。組件是整體的一部分。
聚合關(guān)系中,部分一方的對(duì)象可以來(lái)去自由;組合關(guān)系中,對(duì)象是整體的不可缺少的部分。
aggregation(聚合) 一種整合/部分層次關(guān)系。一個(gè)聚合對(duì)象包括(擁有)其它對(duì)象,每個(gè)被包括的對(duì)象被認(rèn)為是聚合對(duì)象的一部分。
composition(組合) 組合是聚合的一種形式,在這種情況下,沒(méi)有其它組成部分,整體就不能存在。
第二種:泛化/特殊化
實(shí)現(xiàn)泛/ 特層次結(jié)構(gòu)的主要機(jī)制稱為繼承。
generalization/specialization(泛化/特殊化) 一種繼承層次關(guān)系。對(duì)于更泛化的超類(lèi)來(lái)說(shuō),每個(gè)子類(lèi)都是它的特殊化的類(lèi)。
is-a(是) 繼承層次結(jié)構(gòu)中使用的一個(gè)術(shù)語(yǔ)。總的來(lái)說(shuō),子類(lèi)是(is a)更通用的超類(lèi)的一種特殊化情況。
overriding(重載) 當(dāng)子類(lèi)為其超類(lèi)的屬性和方法指定了新的定義時(shí),它就重載了超類(lèi)中的定義。重載有時(shí)也被稱為overloading。在Java中只能重載方法。
default behaviors(缺省行為) 在一個(gè)繼承層次結(jié)構(gòu)中,超類(lèi)所定義的行為將缺省的被子類(lèi)所使用,除非子類(lèi)對(duì)這個(gè)行為進(jìn)行了重載。
inheritance,single(單繼承) 當(dāng)一個(gè)子類(lèi)從單一超類(lèi)派生而來(lái)時(shí),稱為單繼承。
inheritance,multiple(多繼承) 當(dāng)一個(gè)子類(lèi)從多個(gè)超類(lèi)派生而來(lái)時(shí),稱為多重繼承。Java不支持多重繼承,作為替代方式,它提供了接口。
interface(接口) 在Java中,接口規(guī)定了一些方法,使用這個(gè)接口的類(lèi)必須實(shí)現(xiàn)這些方法。接口只是一個(gè)規(guī)范,不定義任何實(shí)際代碼。
implements(實(shí)現(xiàn)) 在Java中,類(lèi)實(shí)現(xiàn)接口所要求的代碼的一個(gè)明確化的過(guò)程。
is-a test(是測(cè)試) 一種簡(jiǎn)單的測(cè)試,以確定繼承關(guān)系設(shè)計(jì)是正確的。如果你不能說(shuō)子類(lèi)是(is a)超類(lèi)的一種,那么這種繼承關(guān)系可能是不正確的。
6. 多態(tài)性
多態(tài)是繼承關(guān)系的特點(diǎn),它確保這種子類(lèi)的實(shí)例執(zhí)行正確的行為。
Polymorphism(多態(tài)) 多態(tài)使得對(duì)任何對(duì)象自動(dòng)調(diào)用其恰當(dāng)?shù)姆椒ǔ蔀榭赡堋?br />
允許多態(tài)現(xiàn)象發(fā)生的機(jī)制稱為動(dòng)態(tài)綁定。對(duì)一個(gè)指定的方法調(diào)用的綁定被推遲到運(yùn)行時(shí)刻完成。
dynamic binding(動(dòng)態(tài)綁定) 在運(yùn)行時(shí)刻綁定定義。
posted on 2006-05-29 16:45
夜舞重金屬 閱讀(451)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
面向?qū)ο蟪绦蛟O(shè)計(jì)