面向?qū)ο笈cUML-第四章-面向?qū)ο蠹夹g(shù)-基本特性_第1頁(yè)
面向?qū)ο笈cUML-第四章-面向?qū)ο蠹夹g(shù)-基本特性_第2頁(yè)
面向?qū)ο笈cUML-第四章-面向?qū)ο蠹夹g(shù)-基本特性_第3頁(yè)
面向?qū)ο笈cUML-第四章-面向?qū)ο蠹夹g(shù)-基本特性_第4頁(yè)
面向?qū)ο笈cUML-第四章-面向?qū)ο蠹夹g(shù)-基本特性_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、面向?qū)ο笈cUML第四章 面向?qū)ο蠹夹g(shù)基本特性接口和多態(tài)類(lèi)圖描述建立類(lèi)圖封裝繼承面向?qū)ο蠹夹g(shù)三個(gè)重要特點(diǎn)封裝 (Encapsulation)繼承 (Inheritance)多態(tài) (Polymorphism)4.1 封裝(Encapsulation)一種信息隱蔽技術(shù),就是利用抽象數(shù)據(jù)類(lèi)型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起。 用戶(hù)只能看到對(duì)象的封裝界面信息,對(duì)象的內(nèi)部細(xì)節(jié)對(duì)用戶(hù)是隱藏的。封裝的目的在于將對(duì)象的設(shè)計(jì)者和使用者分開(kāi),使用者不必知道行為實(shí)現(xiàn)的細(xì)節(jié),只需使用設(shè)計(jì)者提供的消息來(lái)訪(fǎng)問(wèn)對(duì)象。4.1 封裝(Encapsulation)對(duì)象是數(shù)據(jù)(屬性)和方法(行為)的封裝。封裝是面向?qū)ο蟮囊粋€(gè)重要原則

2、。在面向?qū)ο蟮某绦蜷_(kāi)發(fā)中,每個(gè)類(lèi)中都封裝了相關(guān)的數(shù)據(jù)和操作。特點(diǎn):清楚的邊界,內(nèi)部信息限定在邊界之內(nèi);其他對(duì)象僅僅需要知道對(duì)該對(duì)象的訪(fǎng)問(wèn)方法(接口/interface)即可;對(duì)象本身的數(shù)據(jù)得到保護(hù)/隱藏;受保護(hù)的內(nèi)部實(shí)現(xiàn),軟件對(duì)象的功能實(shí)現(xiàn)細(xì)節(jié);使用者和設(shè)計(jì)者分開(kāi)。4.1 封裝(Encapsulation)優(yōu)點(diǎn)模塊化-每個(gè)對(duì)象的源文件可以是相互獨(dú)立的,可以被不同的程序調(diào)用,每個(gè)對(duì)象是一塊積木,可以搭建不同的形狀。信息隱藏-通常定義一個(gè)公共接口/方法實(shí)現(xiàn)對(duì)對(duì)象的訪(fǎng)問(wèn),可以調(diào)整對(duì)象的私有信息和方法,而不會(huì)對(duì)其他調(diào)用它的對(duì)象產(chǎn)生影響??芍赜眯?。4.2 繼承(Inheritance)一個(gè)新類(lèi)可以從現(xiàn)有

3、的類(lèi)派生,這個(gè)過(guò)程稱(chēng)之為類(lèi)的繼承。繼承是存在于面向?qū)ο蟪绦虻膬蓚€(gè)或多個(gè)類(lèi)之間的一種關(guān)系。被繼承的類(lèi)稱(chēng)為父類(lèi)、基類(lèi)或超類(lèi)。屬于子類(lèi)的上層類(lèi)。繼承了父類(lèi)或基類(lèi)的類(lèi)稱(chēng)為子類(lèi)。4.2 繼承(Inheritance)子類(lèi)繼承(擁有)父類(lèi)所有的屬性和方法,同時(shí)子類(lèi)可以有新的屬性和方法。子類(lèi)可以重新定義父類(lèi)中已有的屬性和方法。一個(gè)類(lèi)如果沒(méi)有顯示指定父類(lèi),這個(gè)類(lèi)將隱含繼承java.lang.Object類(lèi)。Java只支持單繼承,C+支持單繼承和多繼承。樹(shù)型結(jié)構(gòu),Object類(lèi)為樹(shù)的根節(jié)點(diǎn)。例子4.2 繼承(Inheritance)Object類(lèi)Object類(lèi)是Java中所有類(lèi)的直接或間接父類(lèi),處于類(lèi)的最高點(diǎn),

4、所有其他類(lèi)都是從Object類(lèi)派生出來(lái)的,Object類(lèi)包含了所有Java類(lèi)的公共屬性和方法equals()toString();4.2 繼承(Inheritance)繼承的語(yǔ)法 publicabstract | final class 類(lèi)名extends 父類(lèi)名implements 接口名列表類(lèi)成員變量聲明及初始化; 構(gòu)造方法聲明及方法體; 類(lèi)方法聲明及方法體;4.2 繼承(Inheritance)子類(lèi)對(duì)象的構(gòu)造子類(lèi)不能從父類(lèi)繼承構(gòu)造方法Java在調(diào)用子類(lèi)的構(gòu)造方法前,會(huì)調(diào)用父類(lèi)的構(gòu)造方法。 在子類(lèi)的構(gòu)造方法中,可以使用super關(guān)鍵字調(diào)用父類(lèi)的構(gòu)造方法,且該語(yǔ)句必須作為子類(lèi)構(gòu)造方法的第一個(gè)

5、語(yǔ)句。 4.2 繼承(Inheritance)成員變量的隱藏:當(dāng)在子類(lèi)中定義和父類(lèi)中同名的成員變量時(shí),子類(lèi)就隱藏了繼承的成員變量。方法重寫(xiě):子類(lèi)也可以通過(guò)方法重寫(xiě)來(lái)隱藏繼承的方法。子類(lèi)中定義一個(gè)方法,并且這個(gè)方法的名字、返回類(lèi)型、參數(shù)個(gè)數(shù)和類(lèi)型與從父類(lèi)繼承的方法完全相同。這時(shí),如果子類(lèi)想使用被隱藏的方法,必須使用關(guān)鍵字super。4.2 繼承(Inheritance)Final關(guān)鍵字Final修飾的類(lèi),表示類(lèi)不能被繼承 例子Java中僅僅支持單一繼承,同時(shí)Java采用Interface(接口) 實(shí)現(xiàn)多重繼承4.3 接口和多態(tài)接口(interface)多態(tài)(Polymorphism)接口(int

6、erface)Java不支持多繼承,即一個(gè)類(lèi)只能有一個(gè)父類(lèi)。單繼承性使得Java簡(jiǎn)單,易于管理程序。為了克服單繼承的缺點(diǎn),Java使用了接口,一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。沒(méi)有繼承關(guān)系的類(lèi)之間也會(huì)存在相同的屬性和方法,可以將這些屬性和方法組織成接口,需要這些屬性和方法的類(lèi)可以實(shí)現(xiàn)這個(gè)接口。 “接口”是抽象類(lèi)的概念。接口中的方法都是沒(méi)有方法體的抽象方法。接口中只能定義 public、static、 final 屬性 。接口的作用是定義了一組接口協(xié)議。接口好像一堵墻,將功能與實(shí)現(xiàn)徹底分隔開(kāi)。接口接口(interface)接口是若干抽象方法和常量的集合接口僅提供了方法協(xié)議的封裝使用類(lèi)來(lái)繼承接口,以實(shí)現(xiàn)接口

7、功能由這些類(lèi)來(lái)具體定義接口中所有抽象方法的方法體。通常把對(duì)接口的“繼承”稱(chēng)為“實(shí)現(xiàn)”接口的聲明使用關(guān)鍵字interface來(lái)聲明接口,格式:接口修飾符 interface 接口名稱(chēng) extends 父接口 /方法的原形聲明和常量 接口(interface)接口體接口體中包含常量定義和方法定義兩部分。接口體中只進(jìn)行方法的聲明,不許提供方法的實(shí)現(xiàn),所以,方法的定義沒(méi)有方法體,且用分號(hào)“;”結(jié)尾 。public interface 接口名 extends 父接口名列表 / 常量域聲明 public 、static、 final 域類(lèi)型 域名 = 常量值; / 抽象方法聲明 public abstra

8、ct 返回值類(lèi)型 方法名( 參數(shù)列表 ) ; 接口(interface)實(shí)現(xiàn)接口接口中只有抽象方法,接口不能實(shí)例化必須利用接口的特性來(lái)構(gòu)造新的類(lèi),再用它來(lái)創(chuàng)建對(duì)象,這稱(chēng)為接口的實(shí)現(xiàn)使用implements關(guān)鍵字來(lái)實(shí)現(xiàn)接口實(shí)現(xiàn)接口的類(lèi)必須實(shí)現(xiàn)接口中的所有方法接口實(shí)現(xiàn)接口一個(gè)類(lèi)通過(guò)使用關(guān)鍵字implements 聲明自己實(shí)現(xiàn)一個(gè)或多個(gè)接口。如果實(shí)現(xiàn)多個(gè)接口,用逗號(hào)隔開(kāi)接口名,如:類(lèi)修飾符 class 類(lèi)名稱(chēng) implements 接口名稱(chēng)列表 接口方法的實(shí)現(xiàn); 變量成員聲明及初始化; 方法聲明及方法體; 接口調(diào)用接口函數(shù)時(shí)不需要知道它是怎么實(shí)現(xiàn)的,也不需要知道它是由哪個(gè)類(lèi)實(shí)現(xiàn)的。接口接口思考為什么

9、會(huì)有繼承?代碼復(fù)用繼承在代碼復(fù)用方面不如其它方式靈活有效比如函數(shù)庫(kù)、平面類(lèi)庫(kù)和Little Language代碼只是細(xì)節(jié),系統(tǒng)由接口定義。另外軟件開(kāi)發(fā)的人力資源越來(lái)越豐富,開(kāi)發(fā)難度大幅降低。今天繼承的主要意義在于為實(shí)現(xiàn)多態(tài)鋪平了道路。多態(tài)(Polymorphism)和繼承有關(guān)的多態(tài)性是指父類(lèi)的某個(gè)方法被其子類(lèi)重寫(xiě)時(shí),可以產(chǎn)生自己的功能行為,即同一個(gè)操作被不同類(lèi)型對(duì)象調(diào)用時(shí)可能產(chǎn)生不同的行為。4.3 多態(tài)(Polymorphism)表現(xiàn)在繼承中方法的覆蓋子類(lèi)從父類(lèi)繼承(extends擴(kuò)展)而來(lái)繼承父類(lèi)的方法在不同的子類(lèi)中有不同的表現(xiàn)形式表現(xiàn)在同一個(gè)類(lèi)中方法的重載統(tǒng)一的接口,不同的實(shí)現(xiàn)例:Shap

10、es.java三個(gè)類(lèi)Circle、Square、Triangle均有draw( )方法和erase( )方法,但不同類(lèi)的方法的具體操作其實(shí)并不相同,實(shí)現(xiàn)了多態(tài)。draw()erase()draw()erase()draw()erase()4.4 類(lèi)圖描述類(lèi)圖中類(lèi)之間的關(guān)系描述了類(lèi)之間的語(yǔ)義關(guān)系,類(lèi)圖就是由多個(gè)類(lèi)及這些類(lèi)之間的關(guān)系組成的。類(lèi)之間的關(guān)系可以分為4類(lèi):關(guān)聯(lián)(association)泛化(generation)依賴(lài)(dependency)實(shí)現(xiàn)(realization)關(guān)聯(lián)關(guān)聯(lián)表示類(lèi)的實(shí)例之間存在的某種關(guān)系。關(guān)聯(lián)有名稱(chēng)、角色、多重性和導(dǎo)航性等語(yǔ)法。名稱(chēng):說(shuō)明類(lèi)之間的引用關(guān)系角色:明確類(lèi)之

11、間的關(guān)系多重性:表示可以有多個(gè)對(duì)象參與該關(guān)聯(lián)導(dǎo)航性:將關(guān)聯(lián)分為單向關(guān)聯(lián)和多向關(guān)聯(lián)關(guān)聯(lián)自反關(guān)聯(lián)(reflexive association):是一個(gè)類(lèi)與其自身的關(guān)聯(lián)。它反映的是同一個(gè)類(lèi)的兩個(gè)不同對(duì)象實(shí)例間的關(guān)系。N元關(guān)聯(lián)(N-ary association):指的是三個(gè)或三個(gè)以上類(lèi)之間的關(guān)聯(lián)。限定關(guān)聯(lián)(qualified association):用于將一個(gè)多對(duì)多關(guān)聯(lián)轉(zhuǎn)化為一個(gè)多對(duì)一關(guān)聯(lián),即將關(guān)聯(lián)一端的多個(gè)對(duì)象的集合限定為一個(gè)單一的對(duì)象。關(guān)聯(lián)關(guān)聯(lián)的約束:在一個(gè)模型中,并不是所有的關(guān)聯(lián)都同時(shí)有效。有時(shí)可以在關(guān)聯(lián)間加上約束條件來(lái)明確語(yǔ)義。關(guān)聯(lián)類(lèi):關(guān)聯(lián)類(lèi)既是一個(gè)關(guān)聯(lián)也是一個(gè)類(lèi),它可以有自己的屬性、操作

12、和其他信息。聚合:表達(dá)在一個(gè)二元關(guān)聯(lián)中兩個(gè)類(lèi)之間的“整體-部分”的關(guān)系,描述的是has a關(guān)系。組合:是一種特殊形式的聚合。組合關(guān)系的整體與部分具有相同的生命期。泛化泛化(generalization):表示兩個(gè)類(lèi)元間“一般”與“特殊”的關(guān)系,對(duì)應(yīng)于面向?qū)ο缶幊陶Z(yǔ)言中的繼承關(guān)系。依賴(lài)依賴(lài)(dependency):描述的是兩個(gè)元素之間語(yǔ)義上的聯(lián)系,如果其中一個(gè)元素的變化將影響另一個(gè)元素,則稱(chēng)后者依賴(lài)于前者。實(shí)現(xiàn)實(shí)現(xiàn)(realization):表達(dá)的是一種說(shuō)明元素和實(shí)現(xiàn)元素之間的關(guān)系。說(shuō)明元素只說(shuō)明事物的行為或結(jié)構(gòu),但不確定這些行為如何實(shí)現(xiàn),而實(shí)現(xiàn)元素則提供了實(shí)現(xiàn)這些行為的細(xì)節(jié)。4.5 建立類(lèi)圖確定類(lèi)確定關(guān)系確定類(lèi)名詞/動(dòng)詞識(shí)別法CRC分析法構(gòu)造型確定法領(lǐng)域分析法確定類(lèi)名詞/動(dòng)詞識(shí)別法:試圖從問(wèn)題領(lǐng)域描述的名詞或名詞短語(yǔ)中找出類(lèi)或?qū)傩?,從?dòng)詞或動(dòng)詞短語(yǔ)中找出類(lèi)的操作。CRC分析法:類(lèi)(class)、職責(zé)(responsibility)和協(xié)作者(collaborator)。是一種角色扮演方式。確定類(lèi)構(gòu)造型確定法:邊界類(lèi)、實(shí)體類(lèi)和控制類(lèi)。實(shí)體類(lèi)保存要放進(jìn)永久存儲(chǔ)體的信息。邊界類(lèi)位于系統(tǒng)與外界的交接處,包括所有窗體、報(bào)表、打印機(jī)和掃描儀等硬件的接口以及與其他系統(tǒng)的接口

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論