版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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開(kāi)發(fā)了一種稱作Simula67的語(yǔ)言。Simula67首次引入了類(lèi)、協(xié)同程序和子類(lèi)的概念,這很象今天的面向?qū)ο笳Z(yǔ)言。 70年代中期,Xerox Palo Alto研究中心的研究人員設(shè)計(jì)了Smalltalk語(yǔ)言,該語(yǔ)言的每個(gè)元素都被當(dāng)作一個(gè)對(duì)象來(lái)實(shí)現(xiàn),其程序設(shè)計(jì)環(huán)境及相關(guān)的各個(gè)方面都是面向?qū)ο蟮摹?但是,面向?qū)ο蟮耐茝V很慢。例如:Samlltalk的成果直到1981年8
2、月因Byte雜志的介紹才為外界所知,許多軟件開(kāi)發(fā)人員了解Samlltalk時(shí),都把它看作是一個(gè)窗口系統(tǒng),而不是程序設(shè)計(jì)技術(shù)的一次革命。 80年代,C成為很受歡迎的程序設(shè)計(jì)語(yǔ)言,它不僅可用在微機(jī)上,還可用在多種結(jié)構(gòu)的系統(tǒng)和環(huán)境中。80年代早期,AT&T貝爾實(shí)驗(yàn)室的Bjarne Stroustrup把C語(yǔ)言擴(kuò)展為支持面向?qū)ο蟪绦蛟O(shè)計(jì)的C+。在C+中,程序員可以在其熟悉的語(yǔ)言環(huán)境下學(xué)習(xí)掌握面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù),而不必去探究一種新的語(yǔ)言和環(huán)境。,自90年代以來(lái),軟件與硬件之間的差距至少有兩代處理器之多,并且這種差距還在增大。當(dāng)軟件系統(tǒng)變得更加復(fù)雜時(shí),常規(guī)軟件工具、技術(shù)和概念已不足以應(yīng)付,從而使軟件開(kāi)
3、發(fā)者陷入了困境。但面向?qū)ο蟮姆椒軌蚩刂栖浖膹?fù)雜性,從而促進(jìn)了面向?qū)ο蟮陌l(fā)展,掀起了一股“面向?qū)ο蟆睙帷?9.1.1 面向?qū)ο蠓椒▽W(xué)的要點(diǎn),OOM的出發(fā)點(diǎn)和基本原則: 盡可能模擬人類(lèi)習(xí)慣的思維方式,使描述問(wèn)題的問(wèn)題空間與實(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),解空間與問(wèn)題空間的“語(yǔ)義斷層” 對(duì)象 解空間對(duì)象和問(wèn)題空間對(duì)象 解空間對(duì)象的呆板 問(wèn)題空間對(duì)象具有靜態(tài)屬性又具有動(dòng)態(tài)行為,OOM的4個(gè)要素,(1)對(duì)象(object):
4、世界由對(duì)象組成。 (2)類(lèi)(class) :具有相同屬性和操作的對(duì)象可劃分為類(lèi); 單個(gè)對(duì)象可視為某一類(lèi)的實(shí)例(instance) (3)繼承(inheritance):類(lèi)可分層下層子類(lèi)與上層父類(lèi)有相同特征,稱為繼承 (4)消息(message):對(duì)象間只能通過(guò)發(fā)送消息進(jìn)行聯(lián)系, 外界不能處理對(duì)象的內(nèi)部數(shù)據(jù),只能通過(guò)消息,基于對(duì)象(objectsbased)方法 使用對(duì)象-消息 基于類(lèi)(class-based)方法 使用類(lèi)-對(duì)象-消息 面向?qū)ο螅╫bjects-based)方法 使用類(lèi)-對(duì)象-消息-繼承,9.1.2 面向?qū)ο蠓椒▽W(xué)的優(yōu)點(diǎn),與人類(lèi)習(xí)慣的思維方式一致 穩(wěn)定性好 可重用性好 可維護(hù)性好
5、 注意:OOM并不是減少了開(kāi)發(fā)時(shí)間,而是通過(guò)提高可重用性、可維護(hù)性,進(jìn)行擴(kuò)充和修改的容易程度等,從長(zhǎng)遠(yuǎn)角度改進(jìn)了軟件的質(zhì)量。,1 與人類(lèi)習(xí)慣的思維方式一致,傳統(tǒng)方法:面向過(guò)程設(shè)計(jì),以計(jì)算為核心,數(shù)據(jù)與操作分離,不易理解。 OOM:以object 為核心, 基本原理:使用現(xiàn)實(shí)世界的概念抽象地思考問(wèn)題從而自然地解決問(wèn)題,強(qiáng)調(diào)對(duì)現(xiàn)實(shí)概念的模擬而不強(qiáng)調(diào)算法。 面向?qū)ο蠓椒▽W(xué)的基本原則,是按照人們習(xí)慣的思維方式建立問(wèn)題域的模型,開(kāi)發(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)系刻畫(huà)實(shí)體間的聯(lián)系。需求變化不會(huì)引起結(jié)構(gòu)的整體變化,只需做一些局部修改。因?yàn)閷?shí)體相對(duì)穩(wěn)定,故系統(tǒng)也相應(yīng)穩(wěn)定。,3 可重用性好,傳統(tǒng)方法:通過(guò)建立標(biāo)準(zhǔn)函數(shù)庫(kù)來(lái)重用軟構(gòu)件。但標(biāo) 準(zhǔn)函數(shù)缺少必要的“柔性”,難以適應(yīng)不同場(chǎng)合的不同需要。 OOM:封裝性,信息隱蔽,獨(dú)立性 靈活性:一個(gè)class所有的instances 都可重用它的代碼;由派生出的新的class 可重用其父類(lèi)的代碼,并且可以修改、擴(kuò)充而不影響其父類(lèi)的使用。,4 較易開(kāi)發(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ù)性是最令人頭痛的問(wèn)題。 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)與問(wèn)題空間的結(jié)構(gòu)基本一致,便于理解 派生類(lèi)只要理解新生部分,理解量少 (4)
8、容易測(cè)試、調(diào)試 調(diào)試只對(duì)新派生類(lèi)進(jìn)行,類(lèi)獨(dú)立性強(qiáng),只對(duì)類(lèi)內(nèi)部進(jìn)行調(diào)試,比較容易。,9.2 面向?qū)ο蟮母拍?9.2.1 對(duì)象 在應(yīng)用領(lǐng)域中有意義的、與所要解決的問(wèn)題有關(guān)系的任何事物都可以作為對(duì)象,對(duì)象既可以是具體的物理實(shí)體的抽象,也可以是人為的 概念,或者是任何有明確邊界和意義的東西。 例如,一名職工、一家公司、一個(gè)窗口、一座圖書(shū)館、一本圖書(shū)、貸款、借款等等,都可以作為一個(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ì)問(wèn)題域中某個(gè)東西的抽象,這種抽象反映了系統(tǒng)保存有關(guān)這個(gè)東西的信息或與它交互的 能力 定義3:對(duì)象:=,依次表示名字操作集合數(shù)據(jù)結(jié)構(gòu) 對(duì)外接口,3對(duì)象特點(diǎn),以數(shù)據(jù)為中心,不設(shè)與數(shù)據(jù)無(wú)關(guān)的操作; Object主動(dòng)處理而不被動(dòng)地等待被處理,外部只能通過(guò)message請(qǐng)求操作; 具有封裝性:外部操作時(shí),無(wú)須知道該object 內(nèi)部的數(shù)據(jù)結(jié)構(gòu)及算法; 具有并行性:不同o
10、bject各自獨(dú)立地處理自身數(shù)據(jù),彼此間僅通過(guò)傳遞message完成通信; 模塊獨(dú)立性好:內(nèi)聚強(qiáng)、耦合松,9.2.2其他概念,1 類(lèi):是對(duì)具有相同數(shù)據(jù)和相同操作的一組相似對(duì)象的定義。 例 人、圓 是對(duì)象的抽象,是一種對(duì)象模型 2 實(shí)例:是由某個(gè)特定的類(lèi)所描述的一個(gè)具體對(duì)象。 類(lèi)是建立對(duì)象時(shí)使用的模板,用這個(gè)模板建立的一個(gè)具體對(duì)象,就是類(lèi)的實(shí)例。 對(duì)象既可以是一個(gè)具體的對(duì)象,也可以泛指一般的對(duì)象;而實(shí)例只能是一個(gè)具體的對(duì)象。,3消息:是要求某個(gè)對(duì)象執(zhí)行在定義它的那個(gè)類(lèi)中所定義的某個(gè)操作的規(guī)格說(shuō)明。由3部分組成:接受消息的對(duì)象、消息選擇符(名)、零個(gè)和多個(gè)變?cè)?4方法:是對(duì)象所能執(zhí)行的操作;即類(lèi)
11、中所定義的服務(wù)。方法描述了對(duì)象執(zhí)行操作的算法,響應(yīng)消息的方法。 5 屬性:是類(lèi)中所定義的數(shù)據(jù),是對(duì)客觀實(shí)體所具有的性質(zhì)的抽象,6封裝:是把某個(gè)事務(wù)包起來(lái),使外界不知道該事物的具體內(nèi)容。 封裝的條件: (1)有一個(gè)清晰的邊界 (2)有確定的接口。接口就是對(duì)象可以接受的消息。 (3)受保護(hù)的內(nèi)部實(shí)現(xiàn),繼承繼繼承繼7 繼承,繼承是子類(lèi)自動(dòng)地共享基類(lèi)中定義的數(shù)據(jù)和方法的機(jī)制,其特性是:一個(gè)類(lèi)的上層可以有父類(lèi),下層可以有子類(lèi)。 繼承具有傳遞性,如果類(lèi)C繼承類(lèi)B,類(lèi)B繼承類(lèi)A,則類(lèi)C繼承類(lèi)A。 當(dāng)類(lèi)等級(jí)為樹(shù)形結(jié)構(gòu)時(shí),類(lèi)的繼承是單繼承;當(dāng)允許一個(gè)類(lèi)有多個(gè)父親時(shí),類(lèi)的繼承是多重繼承。,繼承性的優(yōu)點(diǎn),共享程序代
12、碼和數(shù)據(jù)結(jié)構(gòu),大大減少程序中的冗余信息,提高軟件的可重用性。 便于軟件修改維護(hù)。當(dāng)需要擴(kuò)充原有的功能時(shí),派生類(lèi)的方法可以調(diào)用其基類(lèi)的方法,并在此基礎(chǔ)上增加必要的程序代碼;當(dāng)需要完全改變?cè)械乃惴〞r(shí),可以在派生類(lèi)中實(shí)現(xiàn)一個(gè)與基類(lèi)方法同名而算法不同的方法;當(dāng)需要增加新的功能時(shí),可以在派生類(lèi)中實(shí)現(xiàn)一個(gè)新的方法。 “站在巨人的肩頭上”。用戶在開(kāi)發(fā)新系統(tǒng)時(shí)不必從零開(kāi)始,可以繼承原有相似功能或者從類(lèi)庫(kù)中選取需要的類(lèi),再派生新類(lèi)。,8 多態(tài)性,多態(tài)性是指子類(lèi)對(duì)象可以像父類(lèi)對(duì)象那樣使用,同樣的消息既可以發(fā)送給父類(lèi)對(duì)象也可以發(fā)送給子類(lèi)對(duì)象。 在C+語(yǔ)言中,多態(tài)性是通過(guò)虛函數(shù)來(lái)實(shí)現(xiàn)的。虛函數(shù)機(jī)制使得程序員能在一個(gè)
13、類(lèi)等級(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)算符可以施加與不同類(lèi)型的 操作數(shù)上面,當(dāng)參數(shù)類(lèi)型不同或被操作數(shù)的類(lèi)型不同 時(shí),實(shí)現(xiàn)函數(shù)的算法或運(yùn)算符的語(yǔ)義是不相同的 在C+語(yǔ)言中函數(shù)重載是通過(guò)靜態(tài)聯(lián)編(也叫先前聯(lián)編)實(shí)現(xiàn)的,也就是在編譯時(shí)根據(jù)函數(shù)變?cè)膫€(gè)數(shù)和 類(lèi)型,決定到底使用函數(shù)的哪個(gè)實(shí)現(xiàn)代碼;對(duì)于重載 的運(yùn)算符,同樣是在編譯時(shí)根據(jù)被操作數(shù)的類(lèi)型,決 定使用
14、該運(yùn)算符的哪種語(yǔ)義,9.3 面向?qū)ο蠼?為了更好地理解問(wèn)題,采用建立模型的方法 模型是為了理解事物而對(duì)事物作的一種抽象,是對(duì)事物的一種無(wú)歧義的書(shū)面描述。 模型是一種把知識(shí)規(guī)范地表示出來(lái)的工具, 用面向?qū)ο蟮姆椒ń⒛P?9.3 面向?qū)ο蠼?用面向?qū)ο蠓椒ㄩ_(kāi)發(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)于建模語(yǔ)言 模型通常由一組圖示符號(hào)和組成這些符號(hào)的規(guī)則組成, 定義和描述問(wèn)題域的術(shù)語(yǔ)和概念 為建立模型,需
15、要用適當(dāng)?shù)恼Z(yǔ)言來(lái)表達(dá)模型 建模語(yǔ)言由記號(hào)(即模型中使用的符號(hào))和使用這些記號(hào)的規(guī)則(語(yǔ)法、語(yǔ)義)組成,9.4.1 類(lèi)圖的基本符號(hào),類(lèi)圖描述類(lèi)、類(lèi)與類(lèi)之間的靜態(tài)關(guān)系,是一種靜態(tài)模型,是創(chuàng)建其他UML圖的基礎(chǔ) 一個(gè)系統(tǒng)由多張類(lèi)圖來(lái)描述,一個(gè)類(lèi)也可以出現(xiàn)在幾張類(lèi)圖中,1 定義類(lèi),UML中類(lèi)的圖形符號(hào)為長(zhǎng)方形,用兩條橫線把長(zhǎng)方形分成上、中、下3個(gè)區(qū)域(下面兩個(gè)區(qū)域可以省略) 為類(lèi)命名時(shí)應(yīng)該遵守以下幾條準(zhǔn)則: (1)使用標(biāo)準(zhǔn)術(shù)語(yǔ) (2)使用具有確切含義的名詞 (3)必要時(shí)用名詞短語(yǔ)作為名字,2 定義屬性,UML描述屬性的語(yǔ)法如下: 可見(jiàn)性 屬性名:類(lèi)型名=初值性質(zhì)串 屬性的可見(jiàn)性(即可訪問(wèn)性)通常有下述
16、3種: 公有的(public) (+) 私有的(private) (-) 保護(hù)的(protected)(#) 類(lèi)型名表示該屬性的數(shù)據(jù)類(lèi)型,它可以是基本數(shù)據(jù)類(lèi)型,也可以是用戶自定義的類(lèi)型 用花括號(hào)括起來(lái)的性質(zhì)串明列出該屬性所有可能的取值 例:-管理員:String“未定”,3 定義服務(wù),UML描述操作的語(yǔ)法格式如下: 可見(jiàn)性 操作名(參數(shù)表):返回值類(lèi)型性質(zhì)串 操作可見(jiàn)性的定義方法與屬性相同。 參數(shù)表是用逗號(hào)分隔的形式參數(shù)的序列。描述一個(gè)參數(shù)的語(yǔ)法如下: 參數(shù)名:類(lèi)型名默認(rèn)值 當(dāng)操作的調(diào)用者未提供實(shí)在參數(shù)時(shí),該參數(shù)就使用默認(rèn)值。,9.4.2 表示關(guān)系的符號(hào),類(lèi)與類(lèi)之間通常有關(guān)聯(lián)、泛化(繼承)、依賴和細(xì)化等4種關(guān)系 1 關(guān)聯(lián) 關(guān)聯(lián)表示兩個(gè)類(lèi)的對(duì)象之間存在某種語(yǔ)義上的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 玉溪師范學(xué)院《高等幾何》2021-2022學(xué)年第一學(xué)期期末試卷
- 玉溪師范學(xué)院《地理信息系統(tǒng)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年油氣儲(chǔ)層保護(hù)劑合作協(xié)議書(shū)
- 鹽城師范學(xué)院《中學(xué)數(shù)學(xué)案例分析》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024個(gè)人財(cái)產(chǎn)合同范文
- 2024新版建筑安裝工程施工合同
- 2024年玻璃保溫容器及其玻璃膽項(xiàng)目建議書(shū)
- 2024勞務(wù)合同范本樣本員工勞務(wù)合同范本
- 北京版四年級(jí)上冊(cè)數(shù)學(xué)第一單元 大數(shù)的認(rèn)識(shí) 測(cè)試卷(輕巧奪冠)
- 2024家族墓地買(mǎi)賣(mài)合同
- 用電安全檢查記錄表
- DB11T 2000-2022建筑工程消防施工質(zhì)量驗(yàn)收規(guī)范
- 部編版語(yǔ)文六年級(jí)上冊(cè)《口語(yǔ)交際》專(zhuān)項(xiàng)練習(xí)
- 人教人音版八年級(jí)音樂(lè)上冊(cè)《青藏高原》課件(精選)
- 淚道阻塞課件
- 弱電智能化專(zhuān)業(yè)考試題庫(kù)
- LED電子顯示屏投標(biāo)書(shū)技術(shù)標(biāo)
- 小學(xué)生心理健康主題班會(huì)PPT
- 40篇英語(yǔ)短文搞定高考3500個(gè)單詞(全部含翻譯-重點(diǎn)解析)
- 企業(yè)基本情況調(diào)查表模板
評(píng)論
0/150
提交評(píng)論