《軟件工程導論class13面向對象方法學引論》由會員分享,可在線閱讀,更多相關《軟件工程導論class13面向對象方法學引論(41頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、,,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,,,單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,,*,軟件工程導論第,13,課,第,9,章 面向對象方法學引論,發(fā)展概述,面向對象并非是一個新的概念,實際上它已有,30,多年的歷史。尋其根源可追溯到,60,年代的挪威,當時挪威計算中心的,Kristen Nygaard,和,Ole-Johan Dahl,開發(fā)了一種稱作,Simula67,的語言。,Simula67,首次引入了類、協(xié)同程序和子類的概念,這很象今天的面向對象語言。,,7
2、0,年代中期,,Xerox Palo Alto,研究中心的研究人員設計了,Smalltalk,語言,該語言的每個元素都被當作一個對象來實現(xiàn),其程序設計環(huán)境及相關的各個方面都是面向對象的。,,但是,面向對象的推廣很慢。例如:,Samlltalk,的成果直到,1981,年,8,月因,Byte,雜志的介紹才為外界所知,許多軟件開發(fā)人員了解,Samlltalk,時,都把它看作是一個窗口系統(tǒng),而不是程序設計技術的一次革命。,,80,年代,,C,成為很受歡迎的程序設計語言,它不僅可用在微機上,還可用在多種結構的系統(tǒng)和環(huán)境中。,80,年代早期,,AT&T,貝爾實驗室的,Bjarne Stroustrup,把
3、,C,語言擴展為支持面向對象程序設計的,C++,。在,C++,中,程序員可以在其熟悉的語言環(huán)境下學習掌握面向對象的程序設計技術,而不必去探究一種新的語言和環(huán)境。,,自,90,年代以來,軟件與硬件之間的差距至少有兩代處理器之多,并且這種差距還在增大。當軟件系統(tǒng)變得更加復雜時,常規(guī)軟件工具、技術和概念已不足以應付,從而使軟件開發(fā)者陷入了困境。但面向對象的方法能夠控制軟件的復雜性,從而促進了面向對象的發(fā)展,掀起了一股“面向對象”熱。,9.1.1,面向對象方法學的要點,OOM,的出發(fā)點和基本原則:,,盡可能,模擬人類習慣的思維方式,,使描述問題的,問題空間,與實現(xiàn)解法的,解空間,在結構上盡可能,一致,
4、。,,面向對象方法是一種以,數(shù)據(jù)和信息,為主線,把數(shù)據(jù)和處理相結合的方法:,,面向對象方法,把對象作為由數(shù)據(jù)及可以施加在這些數(shù)據(jù)上的操作所構成的統(tǒng)一體,9.1.1,面向對象方法學的要點,解空間與問題空間的,“,語義斷層,”,,對象,,解空間對象和問題空間對象,,解空間對象的呆板,,問題空間對象,具有,靜態(tài)屬性,又具有,動態(tài)行為,,OOM,的,4,個要素,(1),對象,(object),:世界由對象組成。,,(2),類,(class),:具有相同屬性和操作的對象可劃分為類; 單個對象可視為某一類的實例,(instance),,(3),繼承,(inheritance),:類可分層下層子類與上層父類
5、有相同特征,稱為繼承,,(4),消息,(message),:對象間只能通過發(fā)送消息進行聯(lián)系, 外界不能處理對象的內部數(shù)據(jù),只能通過消息,,基于對象(,objects,-,based,)方法,,使用對象,-,消息,,基于類(,class-based,)方法,,使用類,-,對象,-,消息,,面向對象(,objects-based,)方法,,使用類,-,對象,-,消息,-,繼承,,9.1.2,面向對象方法學的優(yōu)點,與人類習慣的思維方式一致,,穩(wěn)定性好,,可重用性好,,可維護性好,,注意,:,OOM,并不是減少了開發(fā)時間,而是通過提高可重用性、可維護性,進行擴充和修改的容易程度等,從長遠角度改進了軟件
6、的質量。,,1,與人類習慣的思維方式一致,傳統(tǒng)方法,:面向過程設計,以計算為核心,數(shù)據(jù)與操作分離,不易理解。,,②,OOM,:以,object,為核心,,,基本原理,:使用現(xiàn)實世界的概念抽象地思考問題從而自然地解決問題,強調對現(xiàn)實概念的模擬而不強調算法。,,面向對象方法學的,基本原則,,是按照人們習慣的思維方式建立問題域的模型,開發(fā)出盡可 能直觀、自然地表現(xiàn)求解方法的軟件系統(tǒng)。,,Class,:由特殊到一般的歸納,(induction),,Inheritance,:由一般到特殊的演繹,(deduction),,2,穩(wěn)定性好,傳統(tǒng)方法:結構依賴于功能,不穩(wěn)定。,,,OOM,:以,object,模
7、擬實體,以對象間的聯(lián)系刻畫實體間的聯(lián)系。需求變化不會引起結構的整體變化,只需做一些局部修改。因為實體相對穩(wěn)定,故系統(tǒng)也相應穩(wěn)定。,,,,3,可重用性好,傳統(tǒng)方法:通過建立標準函數(shù)庫來重用軟構件。但標 準函數(shù)缺少必要的,“,柔性,”,,難以適應不同場合的不同需要。,,OOM,:封裝性,信息隱蔽,獨立性,,靈活性:一個,class,所有的,instances,都可重用它的代碼;由派生出的新的,class,可重用其父類的代碼,并且可以修改、擴充而不影響其父類的使用。,4,較易開發(fā)大型軟件產(chǎn)品,構成軟件系統(tǒng)的每個對象就象一個微型程序,有自己的數(shù)據(jù)、操作、功能、用途。把一個大型軟件產(chǎn)品分解成一系列本質上
8、相互獨立的小產(chǎn)品處理,降低了技術難度。,,便于管理,5,可維護性好,傳統(tǒng)方法:可維護性是最令人頭痛的問題。,,OOM,:從以下幾方面改善了可維護性,,(1),穩(wěn)定性好,:需求的變化不牽動全局,只需局部修改;,,(2),容易修改,:,Class,獨立性強:只要修改不涉及,class,的對外接口,則內部修改完全不影響外部調用;,,繼承,(Inheritance),和多態(tài)性,(polymorphism),使其易被修改和擴充;,,(3),容易理解、容易測試、調試,5,可維護性好,(3),容易理解,,符合人的思維習慣,軟件系統(tǒng)結構與問題空間的結構基本一致,便于理解,,派生類只要理解新生部分,理解量少,,
9、(4),容易測試、調試,,調試只對新派生類進行,類獨立性強,只對類內部進行調試,比較容易。,,9.2,面向對象的概念,9.2.1,對象,,在應用領域中,有意義的、與所要解決的問題有關系的,任何事物,都可以作為對象,,對象既可以是具體的物理實體的抽象,也可以是人為的 概念,或者是任何有明確邊界和意義的東西。,,例如,一名職工、一家公司、一個窗口、一座圖書館、一本圖書、貸款、借款等等,都可以作為一個對象。,9.2.1,對象,由于客觀世界中的實體通常都具有靜態(tài)的屬性,又具有動態(tài)的行為,,面向對象方法學中,的對象是,由描述該對象屬性數(shù)據(jù)以及可以對這些數(shù)據(jù)施加的所有操作封裝在一起的統(tǒng)一體。,,從形式化角
10、度看:,,對象,::=,,其中:,ID,是對象的標識或名字,,MS,是對象中的數(shù)據(jù)集合,,DS,是對象中的數(shù)據(jù)結構,,MI,是對象受理的消息名集合。,,1,對象的形象表示,對象很像錄音機,,,2,對象的定義,從不同的角度給對象不同的定義,,定義,1,:對象是具有相同狀態(tài)的一組操作的集合。,,定義,2,:對象是對問題域中某個東西的抽象,這種抽象反映了系統(tǒng)保存有關這個東西的信息或與它交互的 能力,,,定義,3,:對象,::=,,依次表示名字操作集合數(shù)據(jù)結構 對外接口,,,,3,對象特點,①,以數(shù)據(jù)為中心,,不設與數(shù)據(jù)無關的操作;,,②,Object,主動處理而不被動地等待被處理,外部只能通過,me
11、ssage,請求操作;,,③,具有封裝性,:外部操作時,無須知道該,object,內部的數(shù)據(jù)結構及算法;,,④,具有并行性,:不同,object,各自獨立地處理自身數(shù)據(jù),彼此間僅通過傳遞,message,完成通信;,,⑤,模塊獨立性好,:內聚強、耦合松,,,,,其他概念,1,類,:是對具有相同數(shù)據(jù)和相同操作的一組相似對象的定義。 例 人、圓,,是對象的抽象,是一種對象模型,,2,,實例,:是由某個特定的類所描述的一個具體對象。,,類是建立對象時使用的模板,用這個模板建立的一個具體對象,就是類的實例。,,對象既可以是一個具體的對象,也可以泛指一般的對象;而實例只能是一個具體的對象,。,,,,,3
12、,消息,:是要求某個對象執(zhí)行在定義它的那個類中所定義的某個操作的規(guī)格說明。由,3,部分組成:接受消息的對象、消息選擇符,(,名,),、零個和多個變元。,,4,方法,:是對象所能執(zhí)行的操作;即類中所定義的服務。方法描述了對象執(zhí)行操作的算法,響應消息的方法。,,5,,屬性,:是類中所定義的數(shù)據(jù),是對客觀實體所具有的性質的抽象,,,,,6,封裝,:是把某個事務包起來,使外界不知道該事物的具體內容。,,封裝的條件:,,(1),有一個清晰的邊界,,(2),有確定的接口。接口就是對象可以接受的消息。,,(3),受保護的內部實現(xiàn),繼承繼繼承繼7 繼承,,繼承是子類自動地共享基類中定義的數(shù)
13、據(jù)和方法的機制,其特性是:一個類的上層可以有父類,下層可以有子類。,,繼承具有傳遞性,如果類,C,繼承類,B,,類,B,繼承類,A,,則類,C,繼承類,A,。,,當類等級為樹形結構時,類的繼承是單繼承;當允許一個類有多個父親時,類的繼承是多重繼承。,,,,繼承性的優(yōu)點,,共享程序代碼和數(shù)據(jù)結構,大大減少程序中的冗余信息,提高軟件的可重用性。,,便于軟件修改維護。當需要擴充原有的功能時,派生類的方法可以調用其基類的方法,并在此基礎上增加必要的程序代碼;當需要完全改變原有的算法時,可以在派生類中實現(xiàn)一個與基類方法同名而算法不同的方法;當需要增加新的功能時,可以在派生類中實現(xiàn)一個新的方法。,,“站在
14、巨人的肩頭上”。用戶在開發(fā)新系統(tǒng)時不必從零開始,可以繼承原有相似功能或者從類庫中選取需要的類,再派生新類。,,8 多態(tài)性,,多態(tài)性是指,子類對象可以像父類對象,那樣使用,同樣的消息既可以發(fā)送給父類對象也可以發(fā)送給子類對象,。,,在,C++,語言中,多態(tài)性是通過虛函數(shù)來實現(xiàn)的。虛函數(shù)機制使得程序員能在一個類等級中使用相同函數(shù)的 多個不同版本,稱為,動態(tài)聯(lián)遍,,也叫滯后聯(lián)編。,,多態(tài)性機制不僅增加了面向對象軟件的靈活性,進一 步減少了信息冗余,而且顯著提高了軟件可重用性和 可擴充性。,,,,,,9 重載,,函數(shù)重載是指在同一作用域內的若干個參數(shù)特征不同 的函數(shù)可以使用相同的函數(shù)名字,,運算符重載是
15、指同一個運算符可以施加與不同類型的 操作數(shù)上面,當參數(shù)類型不同或被操作數(shù)的類型不同 時,實現(xiàn)函數(shù)的算法或運算符的語義是不相同的,,在,C++,語言中函數(shù)重載是通過靜態(tài)聯(lián)編(也叫先前聯(lián)編)實現(xiàn)的,也就是在編譯時根據(jù)函數(shù)變元的個數(shù)和 類型,決定到底使用函數(shù)的哪個實現(xiàn)代碼;對于重載 的運算符,同樣是在編譯時根據(jù)被操作數(shù)的類型,決 定使用該運算符的哪種語義,,,,,,,,9.3,面向對象建模,為了更好地理解問題,采用建立模型的方法,,模型是為了理解事物而對事物作的一種抽象,是對事物的一種無歧義的書面描述。,,模型是一種,把知識規(guī)范地表示出來的,工具,,,,用面向對象的方法建立模型,,9.3,面向對象建
16、模,用面向對象方法開發(fā)軟件,通常要建立,3,種形式的模型:,,描述系統(tǒng),數(shù)據(jù),結構的,對象模型,,描述系統(tǒng),控制,結構的,動態(tài)模型,,描述系統(tǒng),功能,的,功能模型,,一個典型的軟件系統(tǒng)使用,數(shù)據(jù)結構,(對象模型),,執(zhí)行操作,(動態(tài)模型),并完成數(shù)據(jù)值的,變化,(功能模型),,,,9.4,對象模型,關于建模語言,,模型通常由一組,圖示符號,和組成這些符號的,規(guī)則,組成, 定義和描述問題域的術語和概念,,為建立模型,需要用適當?shù)?語言,來表達模型,,建模語言由,記號,(即模型中使用的符號)和使用這些記號的,規(guī)則,(語法、語義)組成,,,,,,,,,,9.4.1,類圖的基本符號,類圖描述類、類與類
17、之間的,靜態(tài)關系,,是一種靜態(tài)模型,是創(chuàng)建其他,UML,圖的基礎,,? 一個系統(tǒng)由多張類圖來描述,一個類也可以出現(xiàn)在幾張類圖中,,,,,,,,1,定義類,UML,中類的圖形符號為長方形,用兩條橫線把長方形分成上、中、下,3,個區(qū)域(下面兩個區(qū)域可以省略),,為類命名時應該遵守以下幾條,準則,:,,(1),使用標準術語,,(2),使用具有確切含義的名詞,,(3),必要時用名詞短語作為名字,,,,,,,,2,定義屬性,UML,描述屬性的語法如下:,,可見性 屬性名:類型名,=,初值,{,性質串,},,屬性的可見性(即可訪問性)通常有下述,3,種:,,–,公有的(,public,) (,+,),
18、,–,私有的(,private,) (,-,),,–,保護的(,protected,)(,#,),,類型名表示該屬性的數(shù)據(jù)類型,它可以是基本數(shù)據(jù)類型,也可以是用戶自定義的類型,,用花括號括起來的性質串明列出該屬性所有可能的取值,,例:,-,管理員:,String,=,“,未定”,,3,定義服務,UML,描述操作的語法格式如下:,,可見性 操作名,(,參數(shù)表,),:返回值類型,{,性質串,},,操作可見性的定義方法與屬性相同。,,參數(shù)表是用逗號分隔的形式參數(shù)的序列。描述一個參數(shù)的語法如下:,,參數(shù)名:類型名=默認值,,當操作的調用者未提供實在參數(shù)時,該參數(shù)就使用默認值。,,9.4.2,表示關系
19、的符號,類與類之間通常有,關聯(lián)、泛化(繼承)、依賴,和,細化,等,4,種關系,,1,關聯(lián),,關聯(lián)表示兩個類的對象之間存在某種語義上的聯(lián)系,,,,,,9.4.2,表示關系的符號,普通關聯(lián):,,最常見的關聯(lián)關系,只要在類與類之間存在連接關系就可以用普通關聯(lián)表示。,,例如,作家使用計算機,我們就認為在作家和計算機之間存在某種語義連接,因此在類圖中應該在作家類和計算機類之間建立關 聯(lián)關系,,,,,,,,,黑三角表示關聯(lián)方向,,,(2),關聯(lián)的角色,在任何關聯(lián)中都會涉及到參與此關聯(lián)的對象所扮演的角色, 在某些情況下,顯式標明角色,名有助于別人理解類圖,,例:一個人與另一個人結婚,必然一個人扮演丈夫的角色, 另一個人扮演妻子的角色。如果沒有顯式標出角色名,則意 味著用類名作為角色名。,,,,