面向?qū)ο蠓治雠c設(shè)計_第1頁
面向?qū)ο蠓治雠c設(shè)計_第2頁
面向?qū)ο蠓治雠c設(shè)計_第3頁
面向?qū)ο蠓治雠c設(shè)計_第4頁
面向?qū)ο蠓治雠c設(shè)計_第5頁
已閱讀5頁,還剩65頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

二課程總學(xué)時本課程開設(shè)一學(xué)期。課堂教學(xué):64學(xué)時(16周,每周4學(xué)時)

上機實驗:32學(xué)時(16周,每周1次2學(xué)時)三教材和參考書教材:《面向?qū)ο蠓治鲈O(shè)計與編程OOA/OOD/OOP/AOP》(吳煒煜編著清華大學(xué)出版社)參考書:UML與系統(tǒng)分析設(shè)計

(張龍祥編著人民郵電出版社)

UML基礎(chǔ)與Rose建模實用教程(謝星星等編

清華大學(xué)出版社)第一頁,共七十頁。四課堂教學(xué)內(nèi)容和進度計劃第1章面向?qū)ο蠹夹g(shù)概述12學(xué)時第2章C++語言基礎(chǔ)

4學(xué)時第3章類與對象的構(gòu)造設(shè)計4學(xué)時第4章繼承性與派生類4學(xué)時第5章多態(tài)性與虛函數(shù)4學(xué)時第6章文件的輸入與輸出

8學(xué)時第7章統(tǒng)一建模語言UML及其在系統(tǒng)分析與設(shè)計中的應(yīng)用16學(xué)時第8章UML在數(shù)據(jù)庫分析與設(shè)計中的應(yīng)用12學(xué)時

第二頁,共七十頁。五實驗安排安排16次實驗,每次2學(xué)時,大約每周進行一次實驗。六成績考核學(xué)完本課的成績計算方法:平時占50%,期末閉卷考試50%。平時成績計算方法:平時考勤、課堂紀(jì)律、課堂表現(xiàn)、上機實驗、練習(xí)等。七教學(xué)方法采用理論聯(lián)系實際的方法,把課堂理論講授和上機實驗相結(jié)合。理論學(xué)習(xí):課前預(yù)習(xí)、上課認(rèn)真聽講、保質(zhì)保量完成作業(yè)。上機實驗:上機前弄清實驗規(guī)程,嚴(yán)格按實驗指導(dǎo)進行操作,保質(zhì)保量完成實驗任務(wù)。第三頁,共七十頁。八上課時間和地點

理論課:

1班星期三上午第1、2大節(jié)W34082班星期一下午第3、4大節(jié)W3406實驗課:

1班星期三下午第3大節(jié)X2407c2班星期一上午第2大節(jié)X2507

九教學(xué)反饋

電話:2759253第四頁,共七十頁。第1章面向?qū)ο蠹夹g(shù)概論本章的學(xué)習(xí)目的由于面向?qū)ο蠹夹g(shù)比傳統(tǒng)的軟件開發(fā)技術(shù)能更自然和有效地開發(fā)軟件,解決軟件危機,因此它已成為現(xiàn)代軟件企業(yè)廣為采用的一項有效技術(shù),所以當(dāng)今學(xué)習(xí)面向?qū)ο蠹夹g(shù)具有非常重要的意義。

教學(xué)目的是使學(xué)生通過本章的學(xué)習(xí)能夠理解和掌握面向?qū)ο蠹夹g(shù)的基本概念和基本知識以及基本思想方法,為后續(xù)進一步學(xué)習(xí)面向?qū)ο蟮姆治觥⒃O(shè)計和編程奠定良好的基礎(chǔ)。第五頁,共七十頁。本章的學(xué)習(xí)內(nèi)容了解面向?qū)ο筌浖_發(fā)方法的發(fā)展歷程及其重要意義了解面向?qū)ο蠹夹g(shù)的基本概念了解面向?qū)ο蠹夹g(shù)的特點和優(yōu)點初步了解面向?qū)ο蠓治雠c設(shè)計的一般方法第六頁,共七十頁。

1.1面向?qū)ο蠓椒ǖ奶岢觯?)軟件概念的提出

二十世紀(jì)四十年代誕生了世界上第一臺電子計算機—ENIAC,至今才半個來世紀(jì),聚然間發(fā)生了巨大而深刻的計算機革命。計算機科學(xué)技術(shù)已經(jīng)成為一門系統(tǒng)完善、復(fù)雜深刻的工程技術(shù)學(xué)科,它的應(yīng)用已從國防、科技、工業(yè)、農(nóng)業(yè)滲透到人類生活的各個方面,無處不在。出現(xiàn)了各種各樣的計算機,包括巨型機、大型機、小型機、個人電腦、工作站和網(wǎng)絡(luò)等等,五花八門,應(yīng)有盡有。但是,無論怎樣尖端,怎樣高深,一個計算機系統(tǒng)都是由硬件和軟件兩部分構(gòu)成。人們在第一臺電子計算機上就已實現(xiàn)了馮.諾依曼提出的存儲程序思想,即將程序和數(shù)據(jù)存儲在計算機內(nèi)存中,用程序來控制計算機的運行。這種程序、數(shù)據(jù)及相關(guān)文檔統(tǒng)稱為軟件(software)。由于計算機是在程序的控制下運行,所以軟件成為了計算機的靈魂,是組成計算機系統(tǒng)不可缺少的部分。第七頁,共七十頁。(2)軟件開發(fā)方法的發(fā)展計算機誕生之后,計算機技術(shù)一直處于高速發(fā)展?fàn)顟B(tài),計算機科學(xué)技術(shù)的發(fā)展由原來只依靠硬件的發(fā)展逐漸變?yōu)楦嗟匾揽寇浖陌l(fā)展。事實上,軟件技術(shù)的發(fā)展經(jīng)歷了多代歷程。第一代(20世紀(jì)50-60年代),是以FORTRAN和ALGOL等編程語言為標(biāo)志的算法技術(shù)時代。那時,程序設(shè)計全靠人們發(fā)揮創(chuàng)造才能,全靠技巧和竅門。基于這種算法技術(shù)的軟件生產(chǎn)率非常低,程序很難看懂,甚至程序員自己寫的程序過一段時間后自己也看不懂,這給軟件的修改、維護帶來極大的困難。于是60年代末出現(xiàn)了“軟件危機”。第八頁,共七十頁。第二代(20世紀(jì)70年代末開始到80年代盛行的),以PASCAL、COBOL等編程語言和關(guān)系數(shù)據(jù)庫管理系統(tǒng)為標(biāo)志的結(jié)構(gòu)化系統(tǒng)分析和設(shè)計技術(shù)。

由于早期的軟件比較簡單,開發(fā)一個軟件就等同于編一個程序,算法設(shè)計出來了就解決了問題。那時程序處理的數(shù)據(jù)也很雜亂,數(shù)據(jù)結(jié)構(gòu)不統(tǒng)一,實現(xiàn)相同功能的不同程序處理的數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)模型可能相差很大,這對于軟件的統(tǒng)一化和標(biāo)準(zhǔn)化以及軟件的集成和推廣應(yīng)用很不利。當(dāng)軟件變得很大很復(fù)雜時,開發(fā)一個軟件只編一個程序的方法就不適應(yīng)了。于是人們提出了結(jié)構(gòu)化軟件開發(fā)方法。這種方法提倡通過系統(tǒng)分析和設(shè)計將該大的系統(tǒng)劃分為多個功能模塊,每個功能塊又可以進一步劃分為更小的功能子模塊,直到各個子模塊容易編程實現(xiàn)為止。在編程實現(xiàn)了各個模塊之后,將這些模塊組裝起來就構(gòu)成了完整的應(yīng)用系統(tǒng)。這種技術(shù)主要強調(diào)程序模塊化結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),采用自頂向下逐步求精的設(shè)計方法和單入口單出口的控制結(jié)構(gòu),從而大大改善了程序的可讀性。第九頁,共七十頁。伴隨著結(jié)構(gòu)化軟件開發(fā)技術(shù)的出現(xiàn),人們還提出了軟件工程方法,使軟件開發(fā)工作從以前只考慮程序的編寫技巧轉(zhuǎn)變到利用軟件工程的方法,使軟件系統(tǒng)的生產(chǎn)過程遵循一系列的規(guī)范化步驟,包括需求分析、總體設(shè)計、詳細設(shè)計、編程實現(xiàn)、軟件測試、軟件維護等。從而大大改善了軟件的質(zhì)量與可維護性,但軟件開發(fā)的成本卻大大增加了,未能完全克服軟件危機。第十頁,共七十頁。第三代(上個世紀(jì)80年代開始至今還盛行的)以Smalltalk、C++等為代表的面向?qū)ο筌浖_發(fā)方法(OO)。

傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計以算法為核心,把本來密切相關(guān)的數(shù)據(jù)和對數(shù)據(jù)的操作分離開來,很難保持?jǐn)?shù)據(jù)和操作的一致性,其軟件開發(fā)方法也不符合人們的自然思維習(xí)慣,設(shè)計出來的軟件系統(tǒng)其解空間與問題空間不一致,致使程序難以理解、修改和擴充,最終導(dǎo)致程序復(fù)雜性問題和軟件危機。

為了超越程序復(fù)雜性障礙,克服軟件危機,人們提出了面向?qū)ο筌浖_發(fā)方法。面向?qū)ο箝_發(fā)方法一改過去傳統(tǒng)的以功能分析和功能分解為基礎(chǔ)的面向過程的結(jié)構(gòu)化分析與設(shè)計方法,第十一頁,共七十頁。

面向?qū)ο箝_發(fā)方法模擬人們理解和處理客觀世界的方式來分析問題,把系統(tǒng)視為一系列對象的集合,其面向?qū)ο蟮脑O(shè)計又將分析的結(jié)果映射到某種面向?qū)ο髮崿F(xiàn)工具的結(jié)構(gòu)上,使映射過程有著比較直接的對應(yīng)關(guān)系,使分析者、設(shè)計者和編程者都可使用相同的概念,從而使面向?qū)ο蟮能浖_發(fā)能比較自然地模擬客觀世界的活動,使問題描述空間與解空間在結(jié)構(gòu)上盡可能一致。因此,采用面向?qū)ο蠓椒梢愿行У亻_發(fā)大型軟件系統(tǒng)。面向?qū)ο蠓椒ǖ姆庋b、繼承、多態(tài)等機制不僅支持軟件復(fù)用,而且使軟件維護工作可靠有效,可實現(xiàn)軟件系統(tǒng)的柔性制造,更好地克服軟件危機。因此,它已成為成熟的廣為采用的軟件開發(fā)方法。

到20世紀(jì)末,面向?qū)ο筌浖こ讨饾u發(fā)展成熟,特別是統(tǒng)一建模語言(UML)標(biāo)準(zhǔn)的形成和廣泛使用,使面向?qū)ο筌浖_發(fā)方法已成為軟件開發(fā)的主流技術(shù)。第十二頁,共七十頁。(3)面向?qū)ο筌浖_發(fā)方法的發(fā)展面向?qū)ο筌浖_發(fā)方法始于面向?qū)ο笳Z言的研究和發(fā)展。面向?qū)ο笳Z言的發(fā)展有三個重要的里程碑:20世紀(jì)70年代的Simula-67是第一個面向?qū)ο蟮恼Z言,對后來的許多面向?qū)ο笳Z言的出現(xiàn)產(chǎn)生了很大的影響。它首次提出了對象和類的概念和方法,啟示了一種嶄新軟件思維方法的出現(xiàn)。80年代初的Smalltalk語言,它的廣泛使用掀起了一場“面向?qū)ο筮\動”,隨之誕生了多種面向?qū)ο蟮恼Z言,可分為幾類。對流行的語言進行面向?qū)ο蟮臄U充得到的語言,如混合性語言C++和純面向?qū)ο笳Z言Java.第十三頁,共七十頁。

自80年代末期到90年代

,面向?qū)ο蠹夹g(shù)的研究和應(yīng)用不再局限于編程階段,而是向著系統(tǒng)分析和系統(tǒng)設(shè)計階段發(fā)展,即系統(tǒng)分析和系統(tǒng)設(shè)計階段也開始采用面向?qū)ο蠓椒?。這標(biāo)志著面向?qū)ο蠓椒ㄒ呀?jīng)發(fā)展成一種完整的方法論和系統(tǒng)化的技術(shù)體系—面向?qū)ο筌浖こ獭?/p>

我們用面向?qū)ο笳Z言編程求解問題之前需要先按面向?qū)ο蟮姆椒ㄟM行分析和設(shè)計,然后才能根據(jù)設(shè)計模型進行有效編程。所以我們在學(xué)習(xí)用面向?qū)ο蠹夹g(shù)求解實際問題之前應(yīng)該先學(xué)習(xí)面向?qū)ο蟮幕靖拍?,再學(xué)習(xí)面向?qū)ο蟮姆治龊驮O(shè)計,然后再學(xué)習(xí)面向?qū)ο蟮木幊虒崿F(xiàn),這樣才能全面掌握用面向?qū)ο蠹夹g(shù)求解問題的方法。第十四頁,共七十頁。

1.2面向?qū)ο蟮幕靖拍?/p>

為了更好地理解面向?qū)ο蟮乃枷牒头椒?有必要先介紹一些面向?qū)ο蟮幕靖拍睢?/p>

與人們認(rèn)識客觀世界一樣,面向?qū)ο蠹夹g(shù)認(rèn)為客觀世界是由各種各樣的事物或?qū)嶓w組成,每個事物或?qū)嶓w都可用一個對象來表示。因此,客觀世界可看成是由各種各樣的對象組成,每個對象都有各自的內(nèi)部狀態(tài)和行為操作,不同對象間相互作用和聯(lián)系就構(gòu)成了各種不同的系統(tǒng),從而形成了客觀世界。因此,在面向?qū)ο蟮某绦蛑?,客觀系統(tǒng)自然被描繪成一系列完全自治、封裝的對象,因此對象是組成面向?qū)ο蟪绦虻幕締挝?。第十五頁,共七十頁。?)對象(Object)對象是客觀實體的抽象表示,是由描述對象的屬性的數(shù)據(jù)和對這些數(shù)據(jù)進行的操作行為兩部分組成。屬性是用來描述對象靜態(tài)特征的數(shù)據(jù)項。行為是用來描述對象動態(tài)特征的操作方法或算法。第十六頁,共七十頁。(2)對象的特征具有一個狀態(tài),由與其相關(guān)聯(lián)的屬性值集合所表征。具有唯一的標(biāo)識名,可以區(qū)別于其他對象。有一組操作方法,每個操作方法決定對象的一種行為。對象的狀態(tài)一般只能被自身的行為所改變。對象的操作包括自操作(施于自身)和它操作(施于其他對象)。對象之間以消息傳遞的方式進行通信。一個對象的成員仍可以是一個對象。voiddisplay(){PersonA;cout<<學(xué)號<<endl;cout<<姓名<<endl;cout<<性別<<endl;cout<<成績<<endl;A.print();}

第十七頁,共七十頁。(3)類(Class)

在面向?qū)ο蟪绦蛑校话悴粫饌€描述具體對象,而是將注意力集中于一類具有相同特性的對象,抽象出這類對象的共同特性和行為,用“類”進行一般性描述。類

類是具有相同屬性和行為的對象集合的抽象描述;

類的內(nèi)部包括屬性和行為兩個主要部分。第十八頁,共七十頁。(4)實例(instance)

類是對具有相同屬性和行為的一組對象的抽象描述。因此,類可作為一種用戶自定義類型和創(chuàng)建對象的樣板,而按照這種樣板所創(chuàng)建的一個個具體對象就是類的實際例子,通常稱為實例。例如,studentS1(051001,李明,男,90)第十九頁,共七十頁。(5)屬性(attribute)

屬性就是類中所定義的數(shù)據(jù)成員,是對客觀實體的性質(zhì)的抽象表示

。例如,學(xué)生類中有屬性:學(xué)號、姓名、性別、成績等。第二十頁,共七十頁。(6)方法(method)

方法就是對象所能執(zhí)行的某項操作,也就是類中定義的服務(wù)函數(shù)。方法描述了對象執(zhí)行操作的算法。在C++中把類中定義的方法稱為成員函數(shù)。例如,學(xué)生類中用于顯示學(xué)生屬性數(shù)據(jù)的成員函數(shù)display()就是一個方法。第二十一頁,共七十頁。(7)消息(message)消息就是請求某個對象執(zhí)行它所包含的某項處理操作的指令信息。實質(zhì)是對某個類對象的操作函數(shù)的調(diào)用。例如,studentS1;

S1.display()是一個消息。一個消息一般由三部分組成:接收消息的對象名、操作函數(shù)名、函數(shù)的參數(shù)。消息是對象之間的通信機制。一個對象可以同時向多個對象發(fā)送消息,也可以接受多個對象發(fā)來的消息。第二十二頁,共七十頁。(8)封裝性(encapsulation)所謂封裝就是把對象的屬性和操作結(jié)合成一個獨立的單位,使外界不能直接訪問或修改這些屬性數(shù)據(jù)和操作代碼,外界只能通過對象提供的接口函數(shù)來改變或獲取對象的屬性數(shù)據(jù),這就實現(xiàn)了消息隱蔽。封裝是面向?qū)ο蠹夹g(shù)的一個基本特征。封裝的目的是實現(xiàn)信息的有效隱蔽。例如,classStudent

{private:

char*id;

//學(xué)號

char*name;

//姓名

intage;

//年齡

public:

voidmodify()

{age=age+1;}

voiddisplay(){······}

}第二十三頁,共七十頁。

封裝的優(yōu)點:(a)封裝起了信息隱蔽作用,增強了對象的獨立性,使外界只關(guān)心對象對外所提供的接口,忽略其內(nèi)部細節(jié)。

(b)封裝使外界不能隨意存取對象的內(nèi)部屬性,從而有效地避免外部錯誤對它的影響,提高了系統(tǒng)的安全性和可靠性。

(c)封裝的結(jié)果隱蔽了程序的復(fù)雜性,提供了代碼的重用性,降低了軟件開發(fā)的難度。例如,classStudent{private:char*id;//學(xué)號

char*name;//姓名

intage;//年齡

public:

voidmodify()

{age=age+1;}

voidprint(){···}

}main(){StudentS1;S1.modify();

S1.print();}第二十四頁,共七十頁。(9)繼承性(inheritance)如果在一個已定義的類上,增加一些特殊屬性或操作,可以形成一個新的類,這個類不僅繼承了前一個類的全部特征,而且具有新的特性,因此可看作前一個類的特例,是對前一個類的繼承。前一個類稱為父類,新產(chǎn)生的類叫做子類。通過繼承關(guān)系可形成一種類層次結(jié)構(gòu),叫做繼承結(jié)構(gòu)。第二十五頁,共七十頁。

繼承關(guān)系可以分為如下幾種:一代繼承:從父類到子類只延伸一次。如圖(a)所示。多代繼承:從父類到子類延伸多次。如圖(b)所示。單繼承:如果在一個繼承層次結(jié)構(gòu)中,每個子類只有一個直接父類,則這種繼承稱為單繼承。如圖(a)和(b)所示。多繼承:如果在一個繼承層次結(jié)構(gòu)中,每個子類可有不止一個直接父類,則這種繼承稱為多繼承。如圖(c)所示。第二十六頁,共七十頁。(10)多態(tài)性(polymorphism)

為了正確反映客觀世界的多態(tài)性,面向?qū)ο蟪绦蛟O(shè)計中也采用了多態(tài)性,即在不同類中,可用相同的函數(shù)名實現(xiàn)功能不同的函數(shù)。如下圖所示。多態(tài)性的優(yōu)點:高層代碼(算法)只需寫一次,低層便可多次復(fù)用,可提高程序設(shè)計的靈活性和效率。第二十七頁,共七十頁。(11)抽象性

抽象就是忽略事物中與當(dāng)前目標(biāo)無關(guān)的非本質(zhì)特征,更充分地注意與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出事物的共性,把具有共性的事物劃分為一類。類的定義明確指出類是一組具有相同屬性和行為的對象集合的抽象描述。將客觀事物抽象成對象和類是面向?qū)ο蟮牡谝徊健R虼?,抽象性是面向?qū)ο蟮牡幕咎卣鳌?12)分類性

分類性是指將具有相同的數(shù)據(jù)(屬性)和行為(操作)的對象抽象成一類。

第二十八頁,共七十頁。

1.3面向?qū)ο蟮姆治龇椒嫦驅(qū)ο蟮姆治?object-orientedanalysis,OOA)是面向?qū)ο筌浖こ谭椒ǖ牡谝粋€環(huán)節(jié),包括一套概念原則、過程步驟、表示方法、提交文檔等規(guī)范要求。OOA的基本任務(wù)是:運用面向?qū)ο蠓椒?,對問題域和系統(tǒng)責(zé)任展開分析,正確認(rèn)識其中事物和它們之間的關(guān)系,發(fā)現(xiàn)描述問題域和系統(tǒng)責(zé)任所需要的對象和類,并定義類的屬性和服務(wù),以及它們之間所形成的結(jié)構(gòu)和連接,最終的目的是產(chǎn)生一個符合用戶需求,并能直接反映問題域和系統(tǒng)責(zé)任的OOA模型及其詳細說明,為后續(xù)的面向?qū)ο笤O(shè)計object_orienteddesign,OOD)和面向?qū)ο缶幊虒崿F(xiàn)(object_orientedprogramming,OOP)提供指導(dǎo)。OOA與OOD能夠自然地過渡和結(jié)合,這是面向?qū)ο蠓椒ǖ囊粋€優(yōu)點。第二十九頁,共七十頁。

1.3.1OOA方法評價

由于面向?qū)ο蠓椒ǜm應(yīng)于解決當(dāng)今的龐大、復(fù)雜和易變的系統(tǒng)開發(fā)問題,更易于設(shè)計模型,因此它已成為當(dāng)前比較流行的軟件開發(fā)方法。自20世紀(jì)80年代后期以來,相繼出現(xiàn)了許多OOA和OOD方法,例如:Booch方法(OOD)Cood-Yourdon方法(OOAD)Jacobson方法(OOSE)Rumbaugh方法(OMT)Wassman-Pircher(OOSD)等。

第三十頁,共七十頁。評價一個分析方法的優(yōu)劣主要看它是否具有OOA的如下優(yōu)點:(1)面向?qū)ο蠓治龇椒☉?yīng)該能夠自然地模擬人們理解和處理客觀事物的方式來分析問題,表達需求,直觀性較好。OOA應(yīng)該便于與分析有關(guān)的人員之間的交流。(2)有利于對問題域和系統(tǒng)責(zé)任的理解和分析,有利于克服系統(tǒng)的復(fù)雜性困難。所建立的系統(tǒng)模型清晰,與程序中的類層次結(jié)構(gòu)保持對應(yīng),便于系統(tǒng)擴充和改造。(3)把屬性數(shù)據(jù)和操作服務(wù)作為對象整體來看待,比較自然地描述客觀實體。對象在問題域中比較穩(wěn)定,當(dāng)需求變化時,只需增加新的對象,而原有的對象可以保留使用。第三十一頁,共七十頁。(4)根據(jù)對象間的相關(guān)性最小原則來分析和說明問題,從而有利于實行封裝性原則,更好地適應(yīng)系統(tǒng)需求的變化、制作和提取可復(fù)用部件,支持軟件復(fù)用。(5)可用類這樣的有效機制來顯式地表示對象集合的共性;抽象得到的類層次結(jié)構(gòu)又可以比較直接地轉(zhuǎn)化為OOP的程序結(jié)構(gòu),使得編程思路清晰,編程效率較高。(6)分析方法與設(shè)計方法比較一致,從而便于建造一個問題域模型。(7)適合開發(fā)一大類系統(tǒng),實用性較強;開發(fā)出來的系統(tǒng)可擴展性強。第三十二頁,共七十頁。1.3.2OOA步驟面向?qū)ο蠓治龅年P(guān)鍵是對問題域中的事物進行識別,確定必要的類及其相互關(guān)系。根據(jù)分析問題的繁簡程度和設(shè)計進程的需要,把問題域分解成一些類和對象,并以消息的形式建立各對象之間的聯(lián)系。面向?qū)ο蠓治龅拇笾虏襟E如下:(1)分析問題域,明確用戶需求了解與問題相關(guān)的業(yè)務(wù)領(lǐng)域知識,明確用戶對系統(tǒng)的需求,定義系統(tǒng)的職責(zé)范圍和邊界,探討問題的初步解決方案。

例如,題庫管理系統(tǒng)的用戶需求可以從如下三個方面描述:系統(tǒng)問題域說明:應(yīng)用系統(tǒng)的業(yè)務(wù)范圍系統(tǒng)邊界說明:確定系統(tǒng)與用戶之間接口系統(tǒng)功能說明:系統(tǒng)需要實現(xiàn)的功能第三十三頁,共七十頁。系統(tǒng)問題域說明:

在公共題庫的支持下每個教師:輸入習(xí)題:可用系統(tǒng)編寫習(xí)題及答案,并存入習(xí)題庫;組成作業(yè):從習(xí)題庫中選擇一組習(xí)題來組成作業(yè),并在要求時間公布習(xí)題答案;從習(xí)題庫中選擇一組習(xí)題組成考試試卷,并公布試題;可以批改學(xué)生的作業(yè);學(xué)生答題后可收卷,閱卷評分。每個學(xué)生:用系統(tǒng)完成作業(yè)或答題并提交給系統(tǒng);可在習(xí)題庫中選擇習(xí)題自己練習(xí);可以在公布答案后核對自己的作業(yè);系統(tǒng)管理員:負責(zé)習(xí)題、編班和權(quán)限管理,維護習(xí)題庫。第三十四頁,共七十頁。系統(tǒng)邊界說明:系統(tǒng)的用戶有本校教師、學(xué)生、系統(tǒng)管理員。學(xué)校以班組織學(xué)生,每班每學(xué)期有若干課程。每門課的習(xí)題由一位教師負責(zé)。只有本科教師可提交或修改習(xí)題。系統(tǒng)功能說明:教師編寫習(xí)題及答案入庫。教師選擇作業(yè)題公布于習(xí)題板上,向?qū)W生布置作業(yè);教師選擇試題公布于考試板上(有考題,時間和評分要求).每個學(xué)生每門課程都有一個練習(xí)本。記錄學(xué)生對每道習(xí)題(或試題)的解答。教師通過練習(xí)本批改習(xí)題(或試題)。習(xí)題庫提供入庫,提取,權(quán)限,查詢等管理。第三十五頁,共七十頁。(2)確定對象和類。即分析確定并標(biāo)識構(gòu)成系統(tǒng)的對象,再對對象進行抽象分類。先把系統(tǒng)看成由一些子系統(tǒng)組成,把每個子系統(tǒng)劃分成一個主題,主題是由一組類和對象組成。

例如,對于題庫管理系統(tǒng),發(fā)現(xiàn)對象的出發(fā)點:問題域、系統(tǒng)功能和邊界説明從需求中找出關(guān)鍵名詞或名詞短語作為侯選對象:

教師,系統(tǒng),習(xí)題,答案,作業(yè),時間,學(xué)生,試題,系統(tǒng)管理員,權(quán)限,學(xué)校,班,學(xué)期,課程,習(xí)題板,考試板,練習(xí)本,習(xí)題庫。分析和篩選對象:教師,學(xué)生,習(xí)題板,練習(xí)本班,課程習(xí)題,考試板,習(xí)題答案習(xí)題庫服務(wù)第三十六頁,共七十頁。確定類:對具有相同屬性和操作集合的各組對象進行抽象描述,得到組成系統(tǒng)的類。第三十七頁,共七十頁。(3)確定系統(tǒng)各部分的分類和組成結(jié)構(gòu)第一是按照一般—特殊關(guān)系,標(biāo)識類間的繼承關(guān)系,確定分類結(jié)構(gòu);第二是按照整體—部分關(guān)系,標(biāo)識一個對象是有哪些對象組成,確定組裝結(jié)構(gòu)。

例如,對于題庫管理系統(tǒng),分類結(jié)構(gòu)可如下確定:習(xí)題板與考試板是父子關(guān)系—考試板可看作為特殊的習(xí)題板,除習(xí)題板的共性外,增加了評分標(biāo)準(zhǔn).第三十八頁,共七十頁。對于題庫管理系統(tǒng),組成關(guān)系可如下確定:班與學(xué)生是組成的關(guān)系(1對n)習(xí)題板與習(xí)題是組成的關(guān)系(1,0對n)練習(xí)本與習(xí)題答案是組成關(guān)系(1對n)第三十九頁,共七十頁。(4)找出并建立每個對象及其相互之間的聯(lián)系。即以應(yīng)用為基礎(chǔ)來標(biāo)識對象,定義對象的內(nèi)部特征(屬性和方法),建立實例連接和消息連接。消息連接體現(xiàn)了對象間的通信關(guān)系和接口協(xié)議形式。例如,對于題庫管理系統(tǒng),實例連接關(guān)系如下:練習(xí)本與學(xué)生對象之間存在一對多的實例連接關(guān)系。由練習(xí)本中的學(xué)生ID屬性體現(xiàn)。練習(xí)本與考試板對象之間存在一對多的實例連接關(guān)系。練習(xí)本用快照復(fù)制答案作為考試板中答卷屬性的體現(xiàn)。課程與教師對象之間存在一對多的實例連接關(guān)系。由課程中負責(zé)教師ID屬性體現(xiàn)。

班教師習(xí)題板練習(xí)本學(xué)生考試板習(xí)題課程習(xí)題解答1nnnnnnn11110,10,1第四十頁,共七十頁。

對于題庫管理系統(tǒng),對象之間消息連接可以如下確定:

教師向習(xí)題發(fā)消息:調(diào)用編寫習(xí)題,編寫答案,習(xí)題入庫等方法。教師向習(xí)題板發(fā)消息,可調(diào)用選題,公布答案,查詢答案,查詢習(xí)題等方法。例如:習(xí)題板.select(),習(xí)題板.answer(),…教師向考試板發(fā)消息可調(diào)用收卷,閱卷方法。學(xué)生向練習(xí)本發(fā)消息,可調(diào)用提取作業(yè),核對答案,自選習(xí)題等方法。學(xué)生向習(xí)題解答發(fā)消息,可調(diào)用答題方法。教師向練習(xí)本發(fā)消息,可調(diào)用檢查作業(yè)方法。練習(xí)本向習(xí)題板發(fā)消息,可調(diào)用查詢習(xí)題,查詢答案方法。練習(xí)本調(diào)用自選習(xí)題時,要向習(xí)題庫發(fā)消息去提取習(xí)題。習(xí)題對象向習(xí)題庫發(fā)消息可調(diào)用習(xí)題入庫,提取習(xí)題方法。習(xí)題板對象向習(xí)題庫發(fā)消息可調(diào)用習(xí)題入庫,提取習(xí)題方法。第四十一頁,共七十頁。類圖:

班教師習(xí)題板練習(xí)本學(xué)生考試板習(xí)題庫系統(tǒng)管理員習(xí)題課程習(xí)題解答1nn1nnnn1n110,10,1第四十二頁,共七十頁。(5)進一步協(xié)調(diào)和優(yōu)化模型中各個組成部分(包括類/對象)的性能和相互關(guān)系,精煉侯選的類/對象,使系統(tǒng)成為由不同部分組成的最小集合。(6)分析和設(shè)計模型中每個組成部分(包括類/對象)的功能實現(xiàn)細節(jié),檢查分析模型的一致性和完整性。

總之,OOA模型描述了表示某個特定論域中的對象以及它們的結(jié)構(gòu)關(guān)系和通信關(guān)系。OOA模型有兩個用途。首先,OOA模型是將現(xiàn)實世界形式化的“視圖”。它用一系列對象表示軟件系統(tǒng)主要的組織結(jié)構(gòu)以及現(xiàn)實世界強加給軟件系統(tǒng)的各種規(guī)則和約束條件。其次,OOA模型規(guī)定了對象間如何協(xié)同才能完成軟件系統(tǒng)所指定的工作。這種協(xié)同在模型中是以表明對象之間通信方式的一組消息連接來表示的。OOA模型為后續(xù)的OOD和OOP提供指導(dǎo)。第四十三頁,共七十頁。1.3.3OOA模型的建立過程OOA過程就是分析和確定用戶需求并建立問題域精確模型(OOA模型)的過程。在建立OOA模型時,我們將選用PeterCoad和EdYourdon在1991年提出的一種循序漸進的面向?qū)ο蠓治龇椒ā?/p>

OOA模型的建立過程可以劃分為五個層次,它們分別是:(1)對象-類層

劃分待開發(fā)系統(tǒng)及其環(huán)境信息的基本構(gòu)造單位,標(biāo)出反映問題域的對象和類,并用符號進行規(guī)范的描述,用信息提供者熟悉的術(shù)語為對象和類命名。

例如,對于題庫管理系統(tǒng),我們抽出了如下對象/類:教師,學(xué)生,習(xí)題板,練習(xí)本班,課程習(xí)題,考試板,習(xí)題答案習(xí)題庫服務(wù)第四十四頁,共七十頁。(2)屬性層

定義對象類和某些結(jié)構(gòu)中的數(shù)據(jù)屬性

。繼承結(jié)構(gòu)中所有類的公共屬性可放于通用類中。標(biāo)識對象必需的屬性并放在合適的繼承層次上,屬性的特殊限制和實例連接關(guān)系也應(yīng)標(biāo)識出來。第四十五頁,共七十頁。(3)服務(wù)層

要表示對象的服務(wù)或行為,就是要定義類上的操作。列出對象需要做什么(即方法),也給出對象間的消息連接(并應(yīng)以箭頭指示消息從發(fā)送者到接受者)。第四十六頁,共七十頁。(4)結(jié)構(gòu)層

識別現(xiàn)實世界中對象之間的結(jié)構(gòu)關(guān)系。當(dāng)一種對象是另一種對象的一部分時,用整體-部分關(guān)系表示;當(dāng)一個類屬于另一個類時,用類之間繼承關(guān)系表示。

班教師習(xí)題板練習(xí)本學(xué)生考試板習(xí)題庫系統(tǒng)管理員習(xí)題課程習(xí)題解答1nn1nnnn1n110,10,1第四十七頁,共七十頁。(5)主題層

將復(fù)雜的系統(tǒng)劃分為更小的主題,是管理大系統(tǒng)的一個方法,這里所說的“主題”可以看成是子模型或子系統(tǒng),可將相關(guān)類或?qū)ο髣澐譃橐粋€主題。

班教師習(xí)題板練習(xí)本學(xué)生考試板習(xí)題庫系統(tǒng)管理員習(xí)題課程習(xí)題解答1nn1nnnn1n110,10,1第四十八頁,共七十頁。1.3.4OOA視圖面向?qū)ο蠹夹g(shù)專家提出了多種表示OOA模型的標(biāo)記,其中下列標(biāo)記是比較簡明和常用的標(biāo)記。第四十九頁,共七十頁。圖1.4顯示了OOA模型的符號表示及其說明。第五十頁,共七十頁。第五十一頁,共七十頁。1.3.5OOA提交在正式完成OOA之后,應(yīng)該提交面向?qū)ο蠓治瞿P图捌渌嫦驅(qū)ο蠓治鑫臋n,包括:用于指導(dǎo)設(shè)計和實現(xiàn)的分析方案說明。精選的候選類清單。提交數(shù)據(jù)字典(定義數(shù)據(jù)流圖中的各個基本成分的具體含義的文檔)。使用OOA模型符號或者UML圖示,繪制的類圖、主題圖等,包括對類間繼承關(guān)系、整體-部分關(guān)系的描述。類定義模板(一些類的抽象描述

,包括屬性說明,方法和消息說明)。類的描述可按OOA工具和CASE工具的要求,通過填寫對話框中的表格來完成。OOA方案的優(yōu)化規(guī)則。第五十二頁,共七十頁。1.4面向?qū)ο蟮脑O(shè)計初步

雖然OOA與OOD分兩個階段進行,但它們是緊密結(jié)合的,可以很自然地從OOA過渡到OOD,這正是面向?qū)ο蠓椒ǖ囊粋€重要優(yōu)點。OOA與OOD的主要區(qū)別是:OOA與問題域更接近,OOD與系統(tǒng)的實現(xiàn)更接近。下面介紹面向?qū)ο笤O(shè)計(OOD)的基本策略。1.4.1OOD模型獲得OOD模型有多種方法,這里介紹有代表性的OOAD方法,它采用擴展OOA模型來得到OOD模型,即在OOA模型橫向劃分5個層次的基礎(chǔ)上,將目標(biāo)系統(tǒng)縱向劃分成4個部分:問題域部分、人機交互部分、任務(wù)管理部分、數(shù)據(jù)管理部分,如下圖所示。第五十三頁,共七十頁。第五十四頁,共七十頁。建立OOD模型包括4個部分的工作:(1)問題論域部分:在OOA模型的基礎(chǔ)上,細化和優(yōu)化分析結(jié)果。主要根據(jù)需求的變化,對面向?qū)ο蟮姆治鲭A段產(chǎn)生的模型中的類和對象(包括屬性,操作和類之間的結(jié)構(gòu)關(guān)系)進行重新組合和分解;根據(jù)面向?qū)ο蟮脑O(shè)計原則,增加必要的類,屬性、操作和關(guān)系。

設(shè)計包括:復(fù)用設(shè)計;把問題論域相關(guān)的類關(guān)聯(lián)起來;加入一般化的類以建立類間協(xié)議;調(diào)整繼承支持級別;改進性能;加入較低層的構(gòu)件(即增設(shè)一組構(gòu)成底層應(yīng)用模型的類和對象),以實現(xiàn)更細或更特殊的操作。第五十五頁,共七十頁。(2)人機交互部分:設(shè)計用戶界面模型,該用戶界面模型中的類和對象提供實現(xiàn)人機交互操作的接口函數(shù)。用戶界面設(shè)計包括菜單設(shè)計、窗口設(shè)計、輸入/輸出界面設(shè)計等等。(3)任務(wù)管理部分:建立一些類,用于處理有關(guān)的并發(fā)問題以及其它與特定平臺有關(guān)的問題。例如,在多用戶交互系統(tǒng)中,幾個用戶同時與系統(tǒng)進行交互,無法預(yù)知哪一個用戶是下一個輸入者,這些交互活動是并行發(fā)生的,需要建立一些專門的類對象來處理;在空中交通控制系統(tǒng)中,系統(tǒng)同時監(jiān)控著數(shù)架飛機,有許多活動在同時發(fā)生。對于諸如此類的并發(fā)問題,需要建立一些專門的類對象來處理。第五十六頁,共七十頁。(4)數(shù)據(jù)管理部分:數(shù)據(jù)管理設(shè)計包括:—數(shù)據(jù)存放方式設(shè)計:數(shù)據(jù)存放設(shè)計選擇數(shù)據(jù)存放的方式(文件存放、關(guān)系數(shù)據(jù)庫表格存放或其他存放方式)。—數(shù)據(jù)操作的設(shè)計。為每個需要存儲的對象和類增加用于存儲管理的屬性和操作,在類和對象的定義中加以描述。第五十七頁,共七十頁。上述OOD總體結(jié)構(gòu)的基本思路是簡單的,但是我們應(yīng)當(dāng)重視并理解它,對于學(xué)習(xí)和應(yīng)用面向?qū)ο笤O(shè)計,養(yǎng)成良好的規(guī)范化設(shè)計風(fēng)格,提高設(shè)計質(zhì)量都有重要意義。詳細地確定對象和類,是OOD的關(guān)鍵工作。一種有效的啟發(fā)式方法是,對需要提供的服務(wù)和問題陳述作語法分析,其中,名詞和名詞短語可作為候選對象,動詞可作為候選對象的服務(wù),形容詞可能表示子類關(guān)系。尋找對象的策略和方法不少,但設(shè)計經(jīng)驗和技巧是非常重要的。

在分析和設(shè)計中,我們要注意遵循這樣的原則:把由基本對象組裝復(fù)雜對象的過程與分解大粒度對象使系統(tǒng)細化過程相結(jié)合;把抽象化與具體化結(jié)合起來;把獨立封裝與繼承關(guān)系結(jié)合起來等。第五十八頁,共七十頁。1.4.2什么是優(yōu)良的OOD

OOD的關(guān)鍵工作是進一步確定對象、類及其聯(lián)系。一個優(yōu)良的OOD設(shè)計方法應(yīng)具備如下基本條件:(1)繼承耦合應(yīng)盡可能緊密

耦合指一個軟件結(jié)構(gòu)內(nèi)不同模塊之間互連的緊密程度。繼承是一般化類與特殊類之間關(guān)聯(lián)耦合的一種形式。在設(shè)計時應(yīng)該使特殊類盡量多地繼承其父類的數(shù)據(jù)屬性和服務(wù)函數(shù),即應(yīng)該提高繼承耦合的程度,而不是摒棄父類的許多數(shù)據(jù)屬性和服務(wù)函數(shù)去另外定義許多新的數(shù)據(jù)屬性和服務(wù)函數(shù),這樣就可以節(jié)省軟件開發(fā)工作量,而且使程序更簡潔,編程更高效。因此,繼承耦合應(yīng)該盡可能緊密。第五十九頁,共七十頁。(2)無繼承關(guān)系的類與類之間的耦合應(yīng)該很松散。如果一個軟件系統(tǒng)內(nèi)不同模塊之間的耦合很松散,則系統(tǒng)中某一部分的變化對其他部分的影響會降到最低程度。在理想情況下,對某一部分的理解、測試或修改,無須涉及系統(tǒng)的其他部分。在面向?qū)ο蠓椒ㄖ?,?對象是最基本的模塊,因此類與類之間的耦合應(yīng)該很松散。一般說來,類/對象之間的耦合可分為兩大類:(i)交互耦合應(yīng)該盡可能松散對象之間的交互耦合是通過消息連接來實現(xiàn)的。為使交互耦合盡可能松散,應(yīng)該遵守下述準(zhǔn)則:a)盡量降低消息連接的復(fù)雜程度。即應(yīng)該盡量減少消息中包含的參數(shù)個數(shù),降低參數(shù)的復(fù)雜程度。b)減少對象發(fā)送(或接收)的消息數(shù)。(ii)繼承耦合應(yīng)該盡可能緊密第六十頁,共七十頁。(ii)繼承耦合盡可能緊密只有一個例外,類的繼承關(guān)系必須是緊密聯(lián)系的,因而子類與父類要緊密耦合。

(3)信息隱藏某個類的數(shù)據(jù)實現(xiàn)細節(jié)對于別的類來說應(yīng)該是隱藏的。(4)設(shè)計應(yīng)該具有最優(yōu)的可重用性

軟件重用是提高軟件開發(fā)生產(chǎn)率和目標(biāo)系統(tǒng)質(zhì)量的重要途徑。重用的實現(xiàn)基本上從設(shè)計階段開始。最優(yōu)的可重用性有兩方面的含義:一是盡量使用已有的類(包括開發(fā)環(huán)境提供的類庫,及以往開發(fā)類似系統(tǒng)時創(chuàng)建的類);二是如果確實需要創(chuàng)建新類,則在設(shè)計這些新類的協(xié)議或接口函數(shù)時,應(yīng)該考慮將來的可重復(fù)使用性。第六十一頁,共七十頁。(5)盡力使類、對象和方法的定義具有簡單性;(6)對所設(shè)計的類和類族,應(yīng)注意保持其協(xié)議或接口的穩(wěn)定性;(7)類的層次結(jié)構(gòu)設(shè)計規(guī)模適度,

溫馨提示

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

評論

0/150

提交評論