版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軟件工程導(dǎo)論第13課,第 9 章 面向?qū)ο蠓椒▽W(xué)引論,發(fā)展概述,面向?qū)ο蟛⒎鞘且粋€(gè)新的概念,實(shí)際上它已有30多年的歷史。尋其根源可追溯到60年代的挪威,當(dāng)時(shí)挪威計(jì)算中心的Kristen Nygaard和Ole-Johan Dahl開發(fā)了一種稱作Simula67的語言。Simula67首次引入了類、協(xié)同程序和子類的概念,這很象今天的面向?qū)ο笳Z言。 70年代中期,Xerox Palo Alto研究中心的研究人員設(shè)計(jì)了Smalltalk語言,該語言的每個(gè)元素都被當(dāng)作一個(gè)對(duì)象來實(shí)現(xiàn),其程序設(shè)計(jì)環(huán)境及相關(guān)的各個(gè)方面都是面向?qū)ο蟮摹?但是,面向?qū)ο蟮耐茝V很慢。例如:Samlltalk的成果直到1981年8
2、月因Byte雜志的介紹才為外界所知,許多軟件開發(fā)人員了解Samlltalk時(shí),都把它看作是一個(gè)窗口系統(tǒng),而不是程序設(shè)計(jì)技術(shù)的一次革命。 80年代,C成為很受歡迎的程序設(shè)計(jì)語言,它不僅可用在微機(jī)上,還可用在多種結(jié)構(gòu)的系統(tǒng)和環(huán)境中。80年代早期,AT&T貝爾實(shí)驗(yàn)室的Bjarne Stroustrup把C語言擴(kuò)展為支持面向?qū)ο蟪绦蛟O(shè)計(jì)的C+。在C+中,程序員可以在其熟悉的語言環(huán)境下學(xué)習(xí)掌握面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù),而不必去探究一種新的語言和環(huán)境。,自90年代以來,軟件與硬件之間的差距至少有兩代處理器之多,并且這種差距還在增大。當(dāng)軟件系統(tǒng)變得更加復(fù)雜時(shí),常規(guī)軟件工具、技術(shù)和概念已不足以應(yīng)付,從而使軟件開
3、發(fā)者陷入了困境。但面向?qū)ο蟮姆椒軌蚩刂栖浖膹?fù)雜性,從而促進(jìn)了面向?qū)ο蟮陌l(fā)展,掀起了一股“面向?qū)ο蟆睙帷?9.1.1 面向?qū)ο蠓椒▽W(xué)的要點(diǎn),OOM的出發(fā)點(diǎn)和基本原則: 盡可能模擬人類習(xí)慣的思維方式,使描述問題的問題空間與實(shí)現(xiàn)解法的解空間在結(jié)構(gòu)上盡可能一致。 面向?qū)ο蠓椒ㄊ且环N以數(shù)據(jù)和信息為主線,把數(shù)據(jù)和處理相結(jié)合的方法: 面向?qū)ο蠓椒ò褜?duì)象作為由數(shù)據(jù)及可以施加在這些數(shù)據(jù)上的操作所構(gòu)成的統(tǒng)一體,9.1.1 面向?qū)ο蠓椒▽W(xué)的要點(diǎn),解空間與問題空間的“語義斷層” 對(duì)象 解空間對(duì)象和問題空間對(duì)象 解空間對(duì)象的呆板 問題空間對(duì)象具有靜態(tài)屬性又具有動(dòng)態(tài)行為,OOM的4個(gè)要素,(1)對(duì)象(object):
4、世界由對(duì)象組成。 (2)類(class) :具有相同屬性和操作的對(duì)象可劃分為類; 單個(gè)對(duì)象可視為某一類的實(shí)例(instance) (3)繼承(inheritance):類可分層下層子類與上層父類有相同特征,稱為繼承 (4)消息(message):對(duì)象間只能通過發(fā)送消息進(jìn)行聯(lián)系, 外界不能處理對(duì)象的內(nèi)部數(shù)據(jù),只能通過消息,基于對(duì)象(objectsbased)方法 使用對(duì)象-消息 基于類(class-based)方法 使用類-對(duì)象-消息 面向?qū)ο螅╫bjects-based)方法 使用類-對(duì)象-消息-繼承,9.1.2 面向?qū)ο蠓椒▽W(xué)的優(yōu)點(diǎn),與人類習(xí)慣的思維方式一致 穩(wěn)定性好 可重用性好 可維護(hù)性好
5、 注意:OOM并不是減少了開發(fā)時(shí)間,而是通過提高可重用性、可維護(hù)性,進(jìn)行擴(kuò)充和修改的容易程度等,從長(zhǎng)遠(yuǎn)角度改進(jìn)了軟件的質(zhì)量。,1 與人類習(xí)慣的思維方式一致,傳統(tǒng)方法:面向過程設(shè)計(jì),以計(jì)算為核心,數(shù)據(jù)與操作分離,不易理解。 OOM:以object 為核心, 基本原理:使用現(xiàn)實(shí)世界的概念抽象地思考問題從而自然地解決問題,強(qiáng)調(diào)對(duì)現(xiàn)實(shí)概念的模擬而不強(qiáng)調(diào)算法。 面向?qū)ο蠓椒▽W(xué)的基本原則,是按照人們習(xí)慣的思維方式建立問題域的模型,開發(fā)出盡可 能直觀、自然地表現(xiàn)求解方法的軟件系統(tǒng)。 Class:由特殊到一般的歸納(induction) Inheritance:由一般到特殊的演繹(deduction),2 穩(wěn)
6、定性好,傳統(tǒng)方法:結(jié)構(gòu)依賴于功能,不穩(wěn)定。 OOM:以object模擬實(shí)體,以對(duì)象間的聯(lián)系刻畫實(shí)體間的聯(lián)系。需求變化不會(huì)引起結(jié)構(gòu)的整體變化,只需做一些局部修改。因?yàn)閷?shí)體相對(duì)穩(wěn)定,故系統(tǒng)也相應(yīng)穩(wěn)定。,3 可重用性好,傳統(tǒng)方法:通過建立標(biāo)準(zhǔn)函數(shù)庫來重用軟構(gòu)件。但標(biāo) 準(zhǔn)函數(shù)缺少必要的“柔性”,難以適應(yīng)不同場(chǎng)合的不同需要。 OOM:封裝性,信息隱蔽,獨(dú)立性 靈活性:一個(gè)class所有的instances 都可重用它的代碼;由派生出的新的class 可重用其父類的代碼,并且可以修改、擴(kuò)充而不影響其父類的使用。,4 較易開發(fā)大型軟件產(chǎn)品,構(gòu)成軟件系統(tǒng)的每個(gè)對(duì)象就象一個(gè)微型程序,有自己的數(shù)據(jù)、操作、功能、用
7、途。把一個(gè)大型軟件產(chǎn)品分解成一系列本質(zhì)上相互獨(dú)立的小產(chǎn)品處理,降低了技術(shù)難度。 便于管理,5 可維護(hù)性好,傳統(tǒng)方法:可維護(hù)性是最令人頭痛的問題。 OOM:從以下幾方面改善了可維護(hù)性 (1)穩(wěn)定性好:需求的變化不牽動(dòng)全局,只需局部修改; (2)容易修改:Class 獨(dú)立性強(qiáng):只要修改不涉及class的對(duì)外接口,則內(nèi)部修改完全不影響外部調(diào)用; 繼承(Inheritance)和多態(tài)性(polymorphism)使其易被修改和擴(kuò)充; (3)容易理解、容易測(cè)試、調(diào)試,5 可維護(hù)性好,(3)容易理解 符合人的思維習(xí)慣,軟件系統(tǒng)結(jié)構(gòu)與問題空間的結(jié)構(gòu)基本一致,便于理解 派生類只要理解新生部分,理解量少 (4)
8、容易測(cè)試、調(diào)試 調(diào)試只對(duì)新派生類進(jìn)行,類獨(dú)立性強(qiáng),只對(duì)類內(nèi)部進(jìn)行調(diào)試,比較容易。,9.2 面向?qū)ο蟮母拍?9.2.1 對(duì)象 在應(yīng)用領(lǐng)域中有意義的、與所要解決的問題有關(guān)系的任何事物都可以作為對(duì)象,對(duì)象既可以是具體的物理實(shí)體的抽象,也可以是人為的 概念,或者是任何有明確邊界和意義的東西。 例如,一名職工、一家公司、一個(gè)窗口、一座圖書館、一本圖書、貸款、借款等等,都可以作為一個(gè)對(duì)象。,9.2.1 對(duì)象,由于客觀世界中的實(shí)體通常都具有靜態(tài)的屬性,又具有動(dòng)態(tài)的行為 面向?qū)ο蠓椒▽W(xué)中的對(duì)象是由描述該對(duì)象屬性數(shù)據(jù)以及可以對(duì)這些數(shù)據(jù)施加的所有操作封裝在一起的統(tǒng)一體。 從形式化角度看: 對(duì)象:= 其中:ID是對(duì)
9、象的標(biāo)識(shí)或名字,MS是對(duì)象中的數(shù)據(jù)集合,DS是對(duì)象中的數(shù)據(jù)結(jié)構(gòu),MI是對(duì)象受理的消息名集合。,1 對(duì)象的形象表示 對(duì)象很像錄音機(jī),2 對(duì)象的定義,從不同的角度給對(duì)象不同的定義 定義1:對(duì)象是具有相同狀態(tài)的一組操作的集合。 定義2:對(duì)象是對(duì)問題域中某個(gè)東西的抽象,這種抽象反映了系統(tǒng)保存有關(guān)這個(gè)東西的信息或與它交互的 能力 定義3:對(duì)象:=,依次表示名字操作集合數(shù)據(jù)結(jié)構(gòu) 對(duì)外接口,3對(duì)象特點(diǎn),以數(shù)據(jù)為中心,不設(shè)與數(shù)據(jù)無關(guān)的操作; Object主動(dòng)處理而不被動(dòng)地等待被處理,外部只能通過message請(qǐng)求操作; 具有封裝性:外部操作時(shí),無須知道該object 內(nèi)部的數(shù)據(jù)結(jié)構(gòu)及算法; 具有并行性:不同o
10、bject各自獨(dú)立地處理自身數(shù)據(jù),彼此間僅通過傳遞message完成通信; 模塊獨(dú)立性好:內(nèi)聚強(qiáng)、耦合松,9.2.2其他概念,1 類:是對(duì)具有相同數(shù)據(jù)和相同操作的一組相似對(duì)象的定義。 例 人、圓 是對(duì)象的抽象,是一種對(duì)象模型 2 實(shí)例:是由某個(gè)特定的類所描述的一個(gè)具體對(duì)象。 類是建立對(duì)象時(shí)使用的模板,用這個(gè)模板建立的一個(gè)具體對(duì)象,就是類的實(shí)例。 對(duì)象既可以是一個(gè)具體的對(duì)象,也可以泛指一般的對(duì)象;而實(shí)例只能是一個(gè)具體的對(duì)象。,3消息:是要求某個(gè)對(duì)象執(zhí)行在定義它的那個(gè)類中所定義的某個(gè)操作的規(guī)格說明。由3部分組成:接受消息的對(duì)象、消息選擇符(名)、零個(gè)和多個(gè)變?cè)?4方法:是對(duì)象所能執(zhí)行的操作;即類
11、中所定義的服務(wù)。方法描述了對(duì)象執(zhí)行操作的算法,響應(yīng)消息的方法。 5 屬性:是類中所定義的數(shù)據(jù),是對(duì)客觀實(shí)體所具有的性質(zhì)的抽象,6封裝:是把某個(gè)事務(wù)包起來,使外界不知道該事物的具體內(nèi)容。 封裝的條件: (1)有一個(gè)清晰的邊界 (2)有確定的接口。接口就是對(duì)象可以接受的消息。 (3)受保護(hù)的內(nèi)部實(shí)現(xiàn),繼承繼繼承繼7 繼承,繼承是子類自動(dòng)地共享基類中定義的數(shù)據(jù)和方法的機(jī)制,其特性是:一個(gè)類的上層可以有父類,下層可以有子類。 繼承具有傳遞性,如果類C繼承類B,類B繼承類A,則類C繼承類A。 當(dāng)類等級(jí)為樹形結(jié)構(gòu)時(shí),類的繼承是單繼承;當(dāng)允許一個(gè)類有多個(gè)父親時(shí),類的繼承是多重繼承。,繼承性的優(yōu)點(diǎn),共享程序代
12、碼和數(shù)據(jù)結(jié)構(gòu),大大減少程序中的冗余信息,提高軟件的可重用性。 便于軟件修改維護(hù)。當(dāng)需要擴(kuò)充原有的功能時(shí),派生類的方法可以調(diào)用其基類的方法,并在此基礎(chǔ)上增加必要的程序代碼;當(dāng)需要完全改變?cè)械乃惴〞r(shí),可以在派生類中實(shí)現(xiàn)一個(gè)與基類方法同名而算法不同的方法;當(dāng)需要增加新的功能時(shí),可以在派生類中實(shí)現(xiàn)一個(gè)新的方法。 “站在巨人的肩頭上”。用戶在開發(fā)新系統(tǒng)時(shí)不必從零開始,可以繼承原有相似功能或者從類庫中選取需要的類,再派生新類。,8 多態(tài)性,多態(tài)性是指子類對(duì)象可以像父類對(duì)象那樣使用,同樣的消息既可以發(fā)送給父類對(duì)象也可以發(fā)送給子類對(duì)象。 在C+語言中,多態(tài)性是通過虛函數(shù)來實(shí)現(xiàn)的。虛函數(shù)機(jī)制使得程序員能在一個(gè)
13、類等級(jí)中使用相同函數(shù)的 多個(gè)不同版本,稱為動(dòng)態(tài)聯(lián)遍,也叫滯后聯(lián)編。 多態(tài)性機(jī)制不僅增加了面向?qū)ο筌浖撵`活性,進(jìn)一 步減少了信息冗余,而且顯著提高了軟件可重用性和 可擴(kuò)充性。,9 重載,函數(shù)重載是指在同一作用域內(nèi)的若干個(gè)參數(shù)特征不同 的函數(shù)可以使用相同的函數(shù)名字 運(yùn)算符重載是指同一個(gè)運(yùn)算符可以施加與不同類型的 操作數(shù)上面,當(dāng)參數(shù)類型不同或被操作數(shù)的類型不同 時(shí),實(shí)現(xiàn)函數(shù)的算法或運(yùn)算符的語義是不相同的 在C+語言中函數(shù)重載是通過靜態(tài)聯(lián)編(也叫先前聯(lián)編)實(shí)現(xiàn)的,也就是在編譯時(shí)根據(jù)函數(shù)變?cè)膫€(gè)數(shù)和 類型,決定到底使用函數(shù)的哪個(gè)實(shí)現(xiàn)代碼;對(duì)于重載 的運(yùn)算符,同樣是在編譯時(shí)根據(jù)被操作數(shù)的類型,決 定使用
14、該運(yùn)算符的哪種語義,9.3 面向?qū)ο蠼?為了更好地理解問題,采用建立模型的方法 模型是為了理解事物而對(duì)事物作的一種抽象,是對(duì)事物的一種無歧義的書面描述。 模型是一種把知識(shí)規(guī)范地表示出來的工具, 用面向?qū)ο蟮姆椒ń⒛P?9.3 面向?qū)ο蠼?用面向?qū)ο蠓椒ㄩ_發(fā)軟件,通常要建立3種形式的模型: 描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的對(duì)象模型 描述系統(tǒng)控制結(jié)構(gòu)的動(dòng)態(tài)模型 描述系統(tǒng)功能的功能模型 一個(gè)典型的軟件系統(tǒng)使用數(shù)據(jù)結(jié)構(gòu)(對(duì)象模型),執(zhí)行操作(動(dòng)態(tài)模型),并完成數(shù)據(jù)值的變化(功能模型),9.4 對(duì)象模型,關(guān)于建模語言 模型通常由一組圖示符號(hào)和組成這些符號(hào)的規(guī)則組成, 定義和描述問題域的術(shù)語和概念 為建立模型,需
15、要用適當(dāng)?shù)恼Z言來表達(dá)模型 建模語言由記號(hào)(即模型中使用的符號(hào))和使用這些記號(hào)的規(guī)則(語法、語義)組成,9.4.1 類圖的基本符號(hào),類圖描述類、類與類之間的靜態(tài)關(guān)系,是一種靜態(tài)模型,是創(chuàng)建其他UML圖的基礎(chǔ) 一個(gè)系統(tǒng)由多張類圖來描述,一個(gè)類也可以出現(xiàn)在幾張類圖中,1 定義類,UML中類的圖形符號(hào)為長(zhǎng)方形,用兩條橫線把長(zhǎng)方形分成上、中、下3個(gè)區(qū)域(下面兩個(gè)區(qū)域可以省略) 為類命名時(shí)應(yīng)該遵守以下幾條準(zhǔn)則: (1)使用標(biāo)準(zhǔn)術(shù)語 (2)使用具有確切含義的名詞 (3)必要時(shí)用名詞短語作為名字,2 定義屬性,UML描述屬性的語法如下: 可見性 屬性名:類型名=初值性質(zhì)串 屬性的可見性(即可訪問性)通常有下述
16、3種: 公有的(public) (+) 私有的(private) (-) 保護(hù)的(protected)(#) 類型名表示該屬性的數(shù)據(jù)類型,它可以是基本數(shù)據(jù)類型,也可以是用戶自定義的類型 用花括號(hào)括起來的性質(zhì)串明列出該屬性所有可能的取值 例:-管理員:String“未定”,3 定義服務(wù),UML描述操作的語法格式如下: 可見性 操作名(參數(shù)表):返回值類型性質(zhì)串 操作可見性的定義方法與屬性相同。 參數(shù)表是用逗號(hào)分隔的形式參數(shù)的序列。描述一個(gè)參數(shù)的語法如下: 參數(shù)名:類型名默認(rèn)值 當(dāng)操作的調(diào)用者未提供實(shí)在參數(shù)時(shí),該參數(shù)就使用默認(rèn)值。,9.4.2 表示關(guān)系的符號(hào),類與類之間通常有關(guān)聯(lián)、泛化(繼承)、依賴和細(xì)化等4種關(guān)系 1 關(guān)聯(lián) 關(guān)聯(lián)表示兩個(gè)類的對(duì)象之間存在某種語義上的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 質(zhì)量體系監(jiān)視和測(cè)量資源培訓(xùn)課件
- 繪畫廚具課件教學(xué)課件
- 就餐服務(wù)課件教學(xué)課件
- 美術(shù)蜘蛛課件教學(xué)課件
- 高三化學(xué)一輪復(fù)習(xí) 氮及其化合物說播課課件
- 膝關(guān)節(jié)保膝治療
- 車輪滾滾中班教案反思
- 鞭炮與安全教案反思
- 好玩的空氣說課稿
- 物聯(lián)網(wǎng)燃?xì)鈭?bào)警器
- 2024江蘇省沿海開發(fā)集團(tuán)限公司招聘23人(高頻重點(diǎn)提升專題訓(xùn)練)共500題附帶答案詳解
- 2024年初級(jí)社會(huì)體育指導(dǎo)員(游泳)技能鑒定考試題庫(含答案)
- 湖北省危險(xiǎn)廢物監(jiān)管物聯(lián)網(wǎng)系統(tǒng)管理計(jì)劃填報(bào)說明
- Unit6ADayintheLife教學(xué)設(shè)計(jì)2024-2025學(xué)年人教版(2024)英語七年級(jí)上冊(cè)
- 蘇教版三年級(jí)上冊(cè)數(shù)學(xué)期末考試試卷及解析答案
- 2024年個(gè)人勞務(wù)承包合同書
- 知道網(wǎng)課智慧《睡眠醫(yī)學(xué)(廣州醫(yī)科大學(xué))》測(cè)試答案
- 如果歷史是一群喵課件
- 危大工程以及超過一定規(guī)模的危大工程范圍
- 門診導(dǎo)診課件
- 網(wǎng)架吊裝施工專項(xiàng)方案(技術(shù)方案)
評(píng)論
0/150
提交評(píng)論