![面向?qū)ο蠓治雠c設(shè)計(jì)_第1頁](http://file4.renrendoc.com/view/bd54e5f0c2ad66c5283467bbc7b6252a/bd54e5f0c2ad66c5283467bbc7b6252a1.gif)
![面向?qū)ο蠓治雠c設(shè)計(jì)_第2頁](http://file4.renrendoc.com/view/bd54e5f0c2ad66c5283467bbc7b6252a/bd54e5f0c2ad66c5283467bbc7b6252a2.gif)
![面向?qū)ο蠓治雠c設(shè)計(jì)_第3頁](http://file4.renrendoc.com/view/bd54e5f0c2ad66c5283467bbc7b6252a/bd54e5f0c2ad66c5283467bbc7b6252a3.gif)
![面向?qū)ο蠓治雠c設(shè)計(jì)_第4頁](http://file4.renrendoc.com/view/bd54e5f0c2ad66c5283467bbc7b6252a/bd54e5f0c2ad66c5283467bbc7b6252a4.gif)
![面向?qū)ο蠓治雠c設(shè)計(jì)_第5頁](http://file4.renrendoc.com/view/bd54e5f0c2ad66c5283467bbc7b6252a/bd54e5f0c2ad66c5283467bbc7b6252a5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο蠓治雠c設(shè)計(jì)第一頁,共七十一頁,編輯于2023年,星期二二課程總學(xué)時(shí)本課程開設(shè)一學(xué)期。課堂教學(xué):64學(xué)時(shí)(16周,每周4學(xué)時(shí))
上機(jī)實(shí)驗(yàn):32學(xué)時(shí)(16周,每周1次2學(xué)時(shí))三教材和參考書教材:《面向?qū)ο蠓治鲈O(shè)計(jì)與編程OOA/OOD/OOP/AOP》(吳煒煜編著清華大學(xué)出版社)參考書:UML與系統(tǒng)分析設(shè)計(jì)
(張龍祥編著人民郵電出版社)
UML基礎(chǔ)與Rose建模實(shí)用教程(謝星星等編
清華大學(xué)出版社)第二頁,共七十一頁,編輯于2023年,星期二四課堂教學(xué)內(nèi)容和進(jìn)度計(jì)劃第1章面向?qū)ο蠹夹g(shù)概述12學(xué)時(shí)第2章C++語言基礎(chǔ)
4學(xué)時(shí)第3章類與對(duì)象的構(gòu)造設(shè)計(jì)4學(xué)時(shí)第4章繼承性與派生類4學(xué)時(shí)第5章多態(tài)性與虛函數(shù)4學(xué)時(shí)第6章文件的輸入與輸出
8學(xué)時(shí)第7章統(tǒng)一建模語言UML及其在系統(tǒng)分析與設(shè)計(jì)中的應(yīng)用16學(xué)時(shí)第8章UML在數(shù)據(jù)庫分析與設(shè)計(jì)中的應(yīng)用12學(xué)時(shí)
第三頁,共七十一頁,編輯于2023年,星期二五實(shí)驗(yàn)安排安排16次實(shí)驗(yàn),每次2學(xué)時(shí),大約每周進(jìn)行一次實(shí)驗(yàn)。六成績考核學(xué)完本課的成績計(jì)算方法:平時(shí)占50%,期末閉卷考試50%。平時(shí)成績計(jì)算方法:平時(shí)考勤、課堂紀(jì)律、課堂表現(xiàn)、上機(jī)實(shí)驗(yàn)、練習(xí)等。七教學(xué)方法采用理論聯(lián)系實(shí)際的方法,把課堂理論講授和上機(jī)實(shí)驗(yàn)相結(jié)合。理論學(xué)習(xí):課前預(yù)習(xí)、上課認(rèn)真聽講、保質(zhì)保量完成作業(yè)。上機(jī)實(shí)驗(yàn):上機(jī)前弄清實(shí)驗(yàn)規(guī)程,嚴(yán)格按實(shí)驗(yàn)指導(dǎo)進(jìn)行操作,保質(zhì)保量完成實(shí)驗(yàn)任務(wù)。第四頁,共七十一頁,編輯于2023年,星期二八上課時(shí)間和地點(diǎn)
理論課:
1班星期三上午第1、2大節(jié)W34082班星期一下午第3、4大節(jié)W3406實(shí)驗(yàn)課:
1班星期三下午第3大節(jié)X2407c2班星期一上午第2大節(jié)X2507
九教學(xué)反饋
E-mail:cuixiang_zhong@
電話:2759253第五頁,共七十一頁,編輯于2023年,星期二第1章面向?qū)ο蠹夹g(shù)概論本章的學(xué)習(xí)目的由于面向?qū)ο蠹夹g(shù)比傳統(tǒng)的軟件開發(fā)技術(shù)能更自然和有效地開發(fā)軟件,解決軟件危機(jī),因此它已成為現(xiàn)代軟件企業(yè)廣為采用的一項(xiàng)有效技術(shù),所以當(dāng)今學(xué)習(xí)面向?qū)ο蠹夹g(shù)具有非常重要的意義。
教學(xué)目的是使學(xué)生通過本章的學(xué)習(xí)能夠理解和掌握面向?qū)ο蠹夹g(shù)的基本概念和基本知識(shí)以及基本思想方法,為后續(xù)進(jìn)一步學(xué)習(xí)面向?qū)ο蟮姆治?、設(shè)計(jì)和編程奠定良好的基礎(chǔ)。第六頁,共七十一頁,編輯于2023年,星期二本章的學(xué)習(xí)內(nèi)容了解面向?qū)ο筌浖_發(fā)方法的發(fā)展歷程及其重要意義了解面向?qū)ο蠹夹g(shù)的基本概念了解面向?qū)ο蠹夹g(shù)的特點(diǎn)和優(yōu)點(diǎn)初步了解面向?qū)ο蠓治雠c設(shè)計(jì)的一般方法第七頁,共七十一頁,編輯于2023年,星期二
1.1面向?qū)ο蠓椒ǖ奶岢觯?)軟件概念的提出
二十世紀(jì)四十年代誕生了世界上第一臺(tái)電子計(jì)算機(jī)—ENIAC,至今才半個(gè)來世紀(jì),聚然間發(fā)生了巨大而深刻的計(jì)算機(jī)革命。計(jì)算機(jī)科學(xué)技術(shù)已經(jīng)成為一門系統(tǒng)完善、復(fù)雜深刻的工程技術(shù)學(xué)科,它的應(yīng)用已從國防、科技、工業(yè)、農(nóng)業(yè)滲透到人類生活的各個(gè)方面,無處不在。出現(xiàn)了各種各樣的計(jì)算機(jī),包括巨型機(jī)、大型機(jī)、小型機(jī)、個(gè)人電腦、工作站和網(wǎng)絡(luò)等等,五花八門,應(yīng)有盡有。但是,無論怎樣尖端,怎樣高深,一個(gè)計(jì)算機(jī)系統(tǒng)都是由硬件和軟件兩部分構(gòu)成。人們?cè)诘谝慌_(tái)電子計(jì)算機(jī)上就已實(shí)現(xiàn)了馮.諾依曼提出的存儲(chǔ)程序思想,即將程序和數(shù)據(jù)存儲(chǔ)在計(jì)算機(jī)內(nèi)存中,用程序來控制計(jì)算機(jī)的運(yùn)行。這種程序、數(shù)據(jù)及相關(guān)文檔統(tǒng)稱為軟件(software)。由于計(jì)算機(jī)是在程序的控制下運(yùn)行,所以軟件成為了計(jì)算機(jī)的靈魂,是組成計(jì)算機(jī)系統(tǒng)不可缺少的部分。第八頁,共七十一頁,編輯于2023年,星期二(2)軟件開發(fā)方法的發(fā)展計(jì)算機(jī)誕生之后,計(jì)算機(jī)技術(shù)一直處于高速發(fā)展?fàn)顟B(tài),計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展由原來只依靠硬件的發(fā)展逐漸變?yōu)楦嗟匾揽寇浖陌l(fā)展。事實(shí)上,軟件技術(shù)的發(fā)展經(jīng)歷了多代歷程。第一代(20世紀(jì)50-60年代),是以FORTRAN和ALGOL等編程語言為標(biāo)志的算法技術(shù)時(shí)代。那時(shí),程序設(shè)計(jì)全靠人們發(fā)揮創(chuàng)造才能,全靠技巧和竅門。基于這種算法技術(shù)的軟件生產(chǎn)率非常低,程序很難看懂,甚至程序員自己寫的程序過一段時(shí)間后自己也看不懂,這給軟件的修改、維護(hù)帶來極大的困難。于是60年代末出現(xiàn)了“軟件危機(jī)”。第九頁,共七十一頁,編輯于2023年,星期二第二代(20世紀(jì)70年代末開始到80年代盛行的),以PASCAL、COBOL等編程語言和關(guān)系數(shù)據(jù)庫管理系統(tǒng)為標(biāo)志的結(jié)構(gòu)化系統(tǒng)分析和設(shè)計(jì)技術(shù)。
由于早期的軟件比較簡單,開發(fā)一個(gè)軟件就等同于編一個(gè)程序,算法設(shè)計(jì)出來了就解決了問題。那時(shí)程序處理的數(shù)據(jù)也很雜亂,數(shù)據(jù)結(jié)構(gòu)不統(tǒng)一,實(shí)現(xiàn)相同功能的不同程序處理的數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)模型可能相差很大,這對(duì)于軟件的統(tǒng)一化和標(biāo)準(zhǔn)化以及軟件的集成和推廣應(yīng)用很不利。當(dāng)軟件變得很大很復(fù)雜時(shí),開發(fā)一個(gè)軟件只編一個(gè)程序的方法就不適應(yīng)了。于是人們提出了結(jié)構(gòu)化軟件開發(fā)方法。這種方法提倡通過系統(tǒng)分析和設(shè)計(jì)將該大的系統(tǒng)劃分為多個(gè)功能模塊,每個(gè)功能塊又可以進(jìn)一步劃分為更小的功能子模塊,直到各個(gè)子模塊容易編程實(shí)現(xiàn)為止。在編程實(shí)現(xiàn)了各個(gè)模塊之后,將這些模塊組裝起來就構(gòu)成了完整的應(yīng)用系統(tǒng)。這種技術(shù)主要強(qiáng)調(diào)程序模塊化結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),采用自頂向下逐步求精的設(shè)計(jì)方法和單入口單出口的控制結(jié)構(gòu),從而大大改善了程序的可讀性。第十頁,共七十一頁,編輯于2023年,星期二伴隨著結(jié)構(gòu)化軟件開發(fā)技術(shù)的出現(xiàn),人們還提出了軟件工程方法,使軟件開發(fā)工作從以前只考慮程序的編寫技巧轉(zhuǎn)變到利用軟件工程的方法,使軟件系統(tǒng)的生產(chǎn)過程遵循一系列的規(guī)范化步驟,包括需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編程實(shí)現(xiàn)、軟件測試、軟件維護(hù)等。從而大大改善了軟件的質(zhì)量與可維護(hù)性,但軟件開發(fā)的成本卻大大增加了,未能完全克服軟件危機(jī)。第十一頁,共七十一頁,編輯于2023年,星期二第三代(上個(gè)世紀(jì)80年代開始至今還盛行的)以Smalltalk、C++等為代表的面向?qū)ο筌浖_發(fā)方法(OO)。
傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)以算法為核心,把本來密切相關(guān)的數(shù)據(jù)和對(duì)數(shù)據(jù)的操作分離開來,很難保持?jǐn)?shù)據(jù)和操作的一致性,其軟件開發(fā)方法也不符合人們的自然思維習(xí)慣,設(shè)計(jì)出來的軟件系統(tǒng)其解空間與問題空間不一致,致使程序難以理解、修改和擴(kuò)充,最終導(dǎo)致程序復(fù)雜性問題和軟件危機(jī)。
為了超越程序復(fù)雜性障礙,克服軟件危機(jī),人們提出了面向?qū)ο筌浖_發(fā)方法。面向?qū)ο箝_發(fā)方法一改過去傳統(tǒng)的以功能分析和功能分解為基礎(chǔ)的面向過程的結(jié)構(gòu)化分析與設(shè)計(jì)方法,第十二頁,共七十一頁,編輯于2023年,星期二
面向?qū)ο箝_發(fā)方法模擬人們理解和處理客觀世界的方式來分析問題,把系統(tǒng)視為一系列對(duì)象的集合,其面向?qū)ο蟮脑O(shè)計(jì)又將分析的結(jié)果映射到某種面向?qū)ο髮?shí)現(xiàn)工具的結(jié)構(gòu)上,使映射過程有著比較直接的對(duì)應(yīng)關(guān)系,使分析者、設(shè)計(jì)者和編程者都可使用相同的概念,從而使面向?qū)ο蟮能浖_發(fā)能比較自然地模擬客觀世界的活動(dòng),使問題描述空間與解空間在結(jié)構(gòu)上盡可能一致。因此,采用面向?qū)ο蠓椒梢愿行У亻_發(fā)大型軟件系統(tǒng)。面向?qū)ο蠓椒ǖ姆庋b、繼承、多態(tài)等機(jī)制不僅支持軟件復(fù)用,而且使軟件維護(hù)工作可靠有效,可實(shí)現(xiàn)軟件系統(tǒng)的柔性制造,更好地克服軟件危機(jī)。因此,它已成為成熟的廣為采用的軟件開發(fā)方法。
到20世紀(jì)末,面向?qū)ο筌浖こ讨饾u發(fā)展成熟,特別是統(tǒng)一建模語言(UML)標(biāo)準(zhǔn)的形成和廣泛使用,使面向?qū)ο筌浖_發(fā)方法已成為軟件開發(fā)的主流技術(shù)。第十三頁,共七十一頁,編輯于2023年,星期二(3)面向?qū)ο筌浖_發(fā)方法的發(fā)展面向?qū)ο筌浖_發(fā)方法始于面向?qū)ο笳Z言的研究和發(fā)展。面向?qū)ο笳Z言的發(fā)展有三個(gè)重要的里程碑:20世紀(jì)70年代的Simula-67是第一個(gè)面向?qū)ο蟮恼Z言,對(duì)后來的許多面向?qū)ο笳Z言的出現(xiàn)產(chǎn)生了很大的影響。它首次提出了對(duì)象和類的概念和方法,啟示了一種嶄新軟件思維方法的出現(xiàn)。80年代初的Smalltalk語言,它的廣泛使用掀起了一場“面向?qū)ο筮\(yùn)動(dòng)”,隨之誕生了多種面向?qū)ο蟮恼Z言,可分為幾類。對(duì)流行的語言進(jìn)行面向?qū)ο蟮臄U(kuò)充得到的語言,如混合性語言C++和純面向?qū)ο笳Z言Java.第十四頁,共七十一頁,編輯于2023年,星期二
自80年代末期到90年代
,面向?qū)ο蠹夹g(shù)的研究和應(yīng)用不再局限于編程階段,而是向著系統(tǒng)分析和系統(tǒng)設(shè)計(jì)階段發(fā)展,即系統(tǒng)分析和系統(tǒng)設(shè)計(jì)階段也開始采用面向?qū)ο蠓椒?。這標(biāo)志著面向?qū)ο蠓椒ㄒ呀?jīng)發(fā)展成一種完整的方法論和系統(tǒng)化的技術(shù)體系—面向?qū)ο筌浖こ獭?/p>
我們用面向?qū)ο笳Z言編程求解問題之前需要先按面向?qū)ο蟮姆椒ㄟM(jìn)行分析和設(shè)計(jì),然后才能根據(jù)設(shè)計(jì)模型進(jìn)行有效編程。所以我們?cè)趯W(xué)習(xí)用面向?qū)ο蠹夹g(shù)求解實(shí)際問題之前應(yīng)該先學(xué)習(xí)面向?qū)ο蟮幕靖拍睿賹W(xué)習(xí)面向?qū)ο蟮姆治龊驮O(shè)計(jì),然后再學(xué)習(xí)面向?qū)ο蟮木幊虒?shí)現(xiàn),這樣才能全面掌握用面向?qū)ο蠹夹g(shù)求解問題的方法。第十五頁,共七十一頁,編輯于2023年,星期二
1.2面向?qū)ο蟮幕靖拍?/p>
為了更好地理解面向?qū)ο蟮乃枷牒头椒?有必要先介紹一些面向?qū)ο蟮幕靖拍睢?/p>
與人們認(rèn)識(shí)客觀世界一樣,面向?qū)ο蠹夹g(shù)認(rèn)為客觀世界是由各種各樣的事物或?qū)嶓w組成,每個(gè)事物或?qū)嶓w都可用一個(gè)對(duì)象來表示。因此,客觀世界可看成是由各種各樣的對(duì)象組成,每個(gè)對(duì)象都有各自的內(nèi)部狀態(tài)和行為操作,不同對(duì)象間相互作用和聯(lián)系就構(gòu)成了各種不同的系統(tǒng),從而形成了客觀世界。因此,在面向?qū)ο蟮某绦蛑校陀^系統(tǒng)自然被描繪成一系列完全自治、封裝的對(duì)象,因此對(duì)象是組成面向?qū)ο蟪绦虻幕締挝?。第十六頁,共七十一頁,編輯?023年,星期二(1)對(duì)象(Object)對(duì)象是客觀實(shí)體的抽象表示,是由描述對(duì)象的屬性的數(shù)據(jù)和對(duì)這些數(shù)據(jù)進(jìn)行的操作行為兩部分組成。屬性是用來描述對(duì)象靜態(tài)特征的數(shù)據(jù)項(xiàng)。行為是用來描述對(duì)象動(dòng)態(tài)特征的操作方法或算法。第十七頁,共七十一頁,編輯于2023年,星期二(2)對(duì)象的特征具有一個(gè)狀態(tài),由與其相關(guān)聯(lián)的屬性值集合所表征。具有唯一的標(biāo)識(shí)名,可以區(qū)別于其他對(duì)象。有一組操作方法,每個(gè)操作方法決定對(duì)象的一種行為。對(duì)象的狀態(tài)一般只能被自身的行為所改變。對(duì)象的操作包括自操作(施于自身)和它操作(施于其他對(duì)象)。對(duì)象之間以消息傳遞的方式進(jìn)行通信。一個(gè)對(duì)象的成員仍可以是一個(gè)對(duì)象。voiddisplay(){PersonA;cout<<學(xué)號(hào)<<endl;cout<<姓名<<endl;cout<<性別<<endl;cout<<成績<<endl;A.print();}
第十八頁,共七十一頁,編輯于2023年,星期二(3)類(Class)
在面向?qū)ο蟪绦蛑?,一般不?huì)逐個(gè)描述具體對(duì)象,而是將注意力集中于一類具有相同特性的對(duì)象,抽象出這類對(duì)象的共同特性和行為,用“類”進(jìn)行一般性描述。類
類是具有相同屬性和行為的對(duì)象集合的抽象描述;
類的內(nèi)部包括屬性和行為兩個(gè)主要部分。第十九頁,共七十一頁,編輯于2023年,星期二(4)實(shí)例(instance)
類是對(duì)具有相同屬性和行為的一組對(duì)象的抽象描述。因此,類可作為一種用戶自定義類型和創(chuàng)建對(duì)象的樣板,而按照這種樣板所創(chuàng)建的一個(gè)個(gè)具體對(duì)象就是類的實(shí)際例子,通常稱為實(shí)例。例如,studentS1(051001,李明,男,90)第二十頁,共七十一頁,編輯于2023年,星期二(5)屬性(attribute)
屬性就是類中所定義的數(shù)據(jù)成員,是對(duì)客觀實(shí)體的性質(zhì)的抽象表示
。例如,學(xué)生類中有屬性:學(xué)號(hào)、姓名、性別、成績等。第二十一頁,共七十一頁,編輯于2023年,星期二(6)方法(method)
方法就是對(duì)象所能執(zhí)行的某項(xiàng)操作,也就是類中定義的服務(wù)函數(shù)。方法描述了對(duì)象執(zhí)行操作的算法。在C++中把類中定義的方法稱為成員函數(shù)。例如,學(xué)生類中用于顯示學(xué)生屬性數(shù)據(jù)的成員函數(shù)display()就是一個(gè)方法。第二十二頁,共七十一頁,編輯于2023年,星期二(7)消息(message)消息就是請(qǐng)求某個(gè)對(duì)象執(zhí)行它所包含的某項(xiàng)處理操作的指令信息。實(shí)質(zhì)是對(duì)某個(gè)類對(duì)象的操作函數(shù)的調(diào)用。例如,studentS1;
S1.display()是一個(gè)消息。一個(gè)消息一般由三部分組成:接收消息的對(duì)象名、操作函數(shù)名、函數(shù)的參數(shù)。消息是對(duì)象之間的通信機(jī)制。一個(gè)對(duì)象可以同時(shí)向多個(gè)對(duì)象發(fā)送消息,也可以接受多個(gè)對(duì)象發(fā)來的消息。第二十三頁,共七十一頁,編輯于2023年,星期二(8)封裝性(encapsulation)所謂封裝就是把對(duì)象的屬性和操作結(jié)合成一個(gè)獨(dú)立的單位,使外界不能直接訪問或修改這些屬性數(shù)據(jù)和操作代碼,外界只能通過對(duì)象提供的接口函數(shù)來改變或獲取對(duì)象的屬性數(shù)據(jù),這就實(shí)現(xiàn)了消息隱蔽。封裝是面向?qū)ο蠹夹g(shù)的一個(gè)基本特征。封裝的目的是實(shí)現(xiàn)信息的有效隱蔽。例如,classStudent
{private:
char*id;
//學(xué)號(hào)
char*name;
//姓名
intage;
//年齡
public:
voidmodify()
{age=age+1;}
voiddisplay(){······}
}第二十四頁,共七十一頁,編輯于2023年,星期二
封裝的優(yōu)點(diǎn):(a)封裝起了信息隱蔽作用,增強(qiáng)了對(duì)象的獨(dú)立性,使外界只關(guān)心對(duì)象對(duì)外所提供的接口,忽略其內(nèi)部細(xì)節(jié)。
(b)封裝使外界不能隨意存取對(duì)象的內(nèi)部屬性,從而有效地避免外部錯(cuò)誤對(duì)它的影響,提高了系統(tǒng)的安全性和可靠性。
(c)封裝的結(jié)果隱蔽了程序的復(fù)雜性,提供了代碼的重用性,降低了軟件開發(fā)的難度。例如,classStudent{private:char*id;//學(xué)號(hào)
char*name;//姓名
intage;//年齡
public:
voidmodify()
{age=age+1;}
voidprint(){···}
}main(){StudentS1;S1.modify();
S1.print();}第二十五頁,共七十一頁,編輯于2023年,星期二(9)繼承性(inheritance)如果在一個(gè)已定義的類上,增加一些特殊屬性或操作,可以形成一個(gè)新的類,這個(gè)類不僅繼承了前一個(gè)類的全部特征,而且具有新的特性,因此可看作前一個(gè)類的特例,是對(duì)前一個(gè)類的繼承。前一個(gè)類稱為父類,新產(chǎn)生的類叫做子類。通過繼承關(guān)系可形成一種類層次結(jié)構(gòu),叫做繼承結(jié)構(gòu)。第二十六頁,共七十一頁,編輯于2023年,星期二
繼承關(guān)系可以分為如下幾種:一代繼承:從父類到子類只延伸一次。如圖(a)所示。多代繼承:從父類到子類延伸多次。如圖(b)所示。單繼承:如果在一個(gè)繼承層次結(jié)構(gòu)中,每個(gè)子類只有一個(gè)直接父類,則這種繼承稱為單繼承。如圖(a)和(b)所示。多繼承:如果在一個(gè)繼承層次結(jié)構(gòu)中,每個(gè)子類可有不止一個(gè)直接父類,則這種繼承稱為多繼承。如圖(c)所示。第二十七頁,共七十一頁,編輯于2023年,星期二(10)多態(tài)性(polymorphism)
為了正確反映客觀世界的多態(tài)性,面向?qū)ο蟪绦蛟O(shè)計(jì)中也采用了多態(tài)性,即在不同類中,可用相同的函數(shù)名實(shí)現(xiàn)功能不同的函數(shù)。如下圖所示。多態(tài)性的優(yōu)點(diǎn):高層代碼(算法)只需寫一次,低層便可多次復(fù)用,可提高程序設(shè)計(jì)的靈活性和效率。第二十八頁,共七十一頁,編輯于2023年,星期二(11)抽象性
抽象就是忽略事物中與當(dāng)前目標(biāo)無關(guān)的非本質(zhì)特征,更充分地注意與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出事物的共性,把具有共性的事物劃分為一類。類的定義明確指出類是一組具有相同屬性和行為的對(duì)象集合的抽象描述。將客觀事物抽象成對(duì)象和類是面向?qū)ο蟮牡谝徊?。因此,抽象性是面向?qū)ο蟮牡幕咎卣鳌?12)分類性
分類性是指將具有相同的數(shù)據(jù)(屬性)和行為(操作)的對(duì)象抽象成一類。
第二十九頁,共七十一頁,編輯于2023年,星期二
1.3面向?qū)ο蟮姆治龇椒嫦驅(qū)ο蟮姆治?object-orientedanalysis,OOA)是面向?qū)ο筌浖こ谭椒ǖ牡谝粋€(gè)環(huán)節(jié),包括一套概念原則、過程步驟、表示方法、提交文檔等規(guī)范要求。OOA的基本任務(wù)是:運(yùn)用面向?qū)ο蠓椒?,?duì)問題域和系統(tǒng)責(zé)任展開分析,正確認(rèn)識(shí)其中事物和它們之間的關(guān)系,發(fā)現(xiàn)描述問題域和系統(tǒng)責(zé)任所需要的對(duì)象和類,并定義類的屬性和服務(wù),以及它們之間所形成的結(jié)構(gòu)和連接,最終的目的是產(chǎn)生一個(gè)符合用戶需求,并能直接反映問題域和系統(tǒng)責(zé)任的OOA模型及其詳細(xì)說明,為后續(xù)的面向?qū)ο笤O(shè)計(jì)object_orienteddesign,OOD)和面向?qū)ο缶幊虒?shí)現(xiàn)(object_orientedprogramming,OOP)提供指導(dǎo)。OOA與OOD能夠自然地過渡和結(jié)合,這是面向?qū)ο蠓椒ǖ囊粋€(gè)優(yōu)點(diǎn)。第三十頁,共七十一頁,編輯于2023年,星期二
1.3.1OOA方法評(píng)價(jià)
由于面向?qū)ο蠓椒ǜm應(yīng)于解決當(dāng)今的龐大、復(fù)雜和易變的系統(tǒng)開發(fā)問題,更易于設(shè)計(jì)模型,因此它已成為當(dāng)前比較流行的軟件開發(fā)方法。自20世紀(jì)80年代后期以來,相繼出現(xiàn)了許多OOA和OOD方法,例如:Booch方法(OOD)Cood-Yourdon方法(OOAD)Jacobson方法(OOSE)Rumbaugh方法(OMT)Wassman-Pircher(OOSD)等。
第三十一頁,共七十一頁,編輯于2023年,星期二評(píng)價(jià)一個(gè)分析方法的優(yōu)劣主要看它是否具有OOA的如下優(yōu)點(diǎn):(1)面向?qū)ο蠓治龇椒☉?yīng)該能夠自然地模擬人們理解和處理客觀事物的方式來分析問題,表達(dá)需求,直觀性較好。OOA應(yīng)該便于與分析有關(guān)的人員之間的交流。(2)有利于對(duì)問題域和系統(tǒng)責(zé)任的理解和分析,有利于克服系統(tǒng)的復(fù)雜性困難。所建立的系統(tǒng)模型清晰,與程序中的類層次結(jié)構(gòu)保持對(duì)應(yīng),便于系統(tǒng)擴(kuò)充和改造。(3)把屬性數(shù)據(jù)和操作服務(wù)作為對(duì)象整體來看待,比較自然地描述客觀實(shí)體。對(duì)象在問題域中比較穩(wěn)定,當(dāng)需求變化時(shí),只需增加新的對(duì)象,而原有的對(duì)象可以保留使用。第三十二頁,共七十一頁,編輯于2023年,星期二(4)根據(jù)對(duì)象間的相關(guān)性最小原則來分析和說明問題,從而有利于實(shí)行封裝性原則,更好地適應(yīng)系統(tǒng)需求的變化、制作和提取可復(fù)用部件,支持軟件復(fù)用。(5)可用類這樣的有效機(jī)制來顯式地表示對(duì)象集合的共性;抽象得到的類層次結(jié)構(gòu)又可以比較直接地轉(zhuǎn)化為OOP的程序結(jié)構(gòu),使得編程思路清晰,編程效率較高。(6)分析方法與設(shè)計(jì)方法比較一致,從而便于建造一個(gè)問題域模型。(7)適合開發(fā)一大類系統(tǒng),實(shí)用性較強(qiáng);開發(fā)出來的系統(tǒng)可擴(kuò)展性強(qiáng)。第三十三頁,共七十一頁,編輯于2023年,星期二1.3.2OOA步驟面向?qū)ο蠓治龅年P(guān)鍵是對(duì)問題域中的事物進(jìn)行識(shí)別,確定必要的類及其相互關(guān)系。根據(jù)分析問題的繁簡程度和設(shè)計(jì)進(jìn)程的需要,把問題域分解成一些類和對(duì)象,并以消息的形式建立各對(duì)象之間的聯(lián)系。面向?qū)ο蠓治龅拇笾虏襟E如下:(1)分析問題域,明確用戶需求了解與問題相關(guān)的業(yè)務(wù)領(lǐng)域知識(shí),明確用戶對(duì)系統(tǒng)的需求,定義系統(tǒng)的職責(zé)范圍和邊界,探討問題的初步解決方案。
例如,題庫管理系統(tǒng)的用戶需求可以從如下三個(gè)方面描述:系統(tǒng)問題域說明:應(yīng)用系統(tǒng)的業(yè)務(wù)范圍系統(tǒng)邊界說明:確定系統(tǒng)與用戶之間接口系統(tǒng)功能說明:系統(tǒng)需要實(shí)現(xiàn)的功能第三十四頁,共七十一頁,編輯于2023年,星期二系統(tǒng)問題域說明:
在公共題庫的支持下每個(gè)教師:輸入習(xí)題:可用系統(tǒng)編寫習(xí)題及答案,并存入習(xí)題庫;組成作業(yè):從習(xí)題庫中選擇一組習(xí)題來組成作業(yè),并在要求時(shí)間公布習(xí)題答案;從習(xí)題庫中選擇一組習(xí)題組成考試試卷,并公布試題;可以批改學(xué)生的作業(yè);學(xué)生答題后可收卷,閱卷評(píng)分。每個(gè)學(xué)生:用系統(tǒng)完成作業(yè)或答題并提交給系統(tǒng);可在習(xí)題庫中選擇習(xí)題自己練習(xí);可以在公布答案后核對(duì)自己的作業(yè);系統(tǒng)管理員:負(fù)責(zé)習(xí)題、編班和權(quán)限管理,維護(hù)習(xí)題庫。第三十五頁,共七十一頁,編輯于2023年,星期二系統(tǒng)邊界說明:系統(tǒng)的用戶有本校教師、學(xué)生、系統(tǒng)管理員。學(xué)校以班組織學(xué)生,每班每學(xué)期有若干課程。每門課的習(xí)題由一位教師負(fù)責(zé)。只有本科教師可提交或修改習(xí)題。系統(tǒng)功能說明:教師編寫習(xí)題及答案入庫。教師選擇作業(yè)題公布于習(xí)題板上,向?qū)W生布置作業(yè);教師選擇試題公布于考試板上(有考題,時(shí)間和評(píng)分要求).每個(gè)學(xué)生每門課程都有一個(gè)練習(xí)本。記錄學(xué)生對(duì)每道習(xí)題(或試題)的解答。教師通過練習(xí)本批改習(xí)題(或試題)。習(xí)題庫提供入庫,提取,權(quán)限,查詢等管理。第三十六頁,共七十一頁,編輯于2023年,星期二(2)確定對(duì)象和類。即分析確定并標(biāo)識(shí)構(gòu)成系統(tǒng)的對(duì)象,再對(duì)對(duì)象進(jìn)行抽象分類。先把系統(tǒng)看成由一些子系統(tǒng)組成,把每個(gè)子系統(tǒng)劃分成一個(gè)主題,主題是由一組類和對(duì)象組成。
例如,對(duì)于題庫管理系統(tǒng),發(fā)現(xiàn)對(duì)象的出發(fā)點(diǎn):問題域、系統(tǒng)功能和邊界説明從需求中找出關(guān)鍵名詞或名詞短語作為侯選對(duì)象:
教師,系統(tǒng),習(xí)題,答案,作業(yè),時(shí)間,學(xué)生,試題,系統(tǒng)管理員,權(quán)限,學(xué)校,班,學(xué)期,課程,習(xí)題板,考試板,練習(xí)本,習(xí)題庫。分析和篩選對(duì)象:教師,學(xué)生,習(xí)題板,練習(xí)本班,課程習(xí)題,考試板,習(xí)題答案習(xí)題庫服務(wù)第三十七頁,共七十一頁,編輯于2023年,星期二確定類:對(duì)具有相同屬性和操作集合的各組對(duì)象進(jìn)行抽象描述,得到組成系統(tǒng)的類。第三十八頁,共七十一頁,編輯于2023年,星期二(3)確定系統(tǒng)各部分的分類和組成結(jié)構(gòu)第一是按照一般—特殊關(guān)系,標(biāo)識(shí)類間的繼承關(guān)系,確定分類結(jié)構(gòu);第二是按照整體—部分關(guān)系,標(biāo)識(shí)一個(gè)對(duì)象是有哪些對(duì)象組成,確定組裝結(jié)構(gòu)。
例如,對(duì)于題庫管理系統(tǒng),分類結(jié)構(gòu)可如下確定:習(xí)題板與考試板是父子關(guān)系—考試板可看作為特殊的習(xí)題板,除習(xí)題板的共性外,增加了評(píng)分標(biāo)準(zhǔn).第三十九頁,共七十一頁,編輯于2023年,星期二對(duì)于題庫管理系統(tǒng),組成關(guān)系可如下確定:班與學(xué)生是組成的關(guān)系(1對(duì)n)習(xí)題板與習(xí)題是組成的關(guān)系(1,0對(duì)n)練習(xí)本與習(xí)題答案是組成關(guān)系(1對(duì)n)第四十頁,共七十一頁,編輯于2023年,星期二(4)找出并建立每個(gè)對(duì)象及其相互之間的聯(lián)系。即以應(yīng)用為基礎(chǔ)來標(biāo)識(shí)對(duì)象,定義對(duì)象的內(nèi)部特征(屬性和方法),建立實(shí)例連接和消息連接。消息連接體現(xiàn)了對(duì)象間的通信關(guān)系和接口協(xié)議形式。例如,對(duì)于題庫管理系統(tǒng),實(shí)例連接關(guān)系如下:練習(xí)本與學(xué)生對(duì)象之間存在一對(duì)多的實(shí)例連接關(guān)系。由練習(xí)本中的學(xué)生ID屬性體現(xiàn)。練習(xí)本與考試板對(duì)象之間存在一對(duì)多的實(shí)例連接關(guān)系。練習(xí)本用快照復(fù)制答案作為考試板中答卷屬性的體現(xiàn)。課程與教師對(duì)象之間存在一對(duì)多的實(shí)例連接關(guān)系。由課程中負(fù)責(zé)教師ID屬性體現(xiàn)。
班教師習(xí)題板練習(xí)本學(xué)生考試板習(xí)題課程習(xí)題解答1nnnnnnn11110,10,1第四十一頁,共七十一頁,編輯于2023年,星期二
對(duì)于題庫管理系統(tǒng),對(duì)象之間消息連接可以如下確定:
教師向習(xí)題發(fā)消息:調(diào)用編寫習(xí)題,編寫答案,習(xí)題入庫等方法。教師向習(xí)題板發(fā)消息,可調(diào)用選題,公布答案,查詢答案,查詢習(xí)題等方法。例如:習(xí)題板.select(),習(xí)題板.answer(),…教師向考試板發(fā)消息可調(diào)用收卷,閱卷方法。學(xué)生向練習(xí)本發(fā)消息,可調(diào)用提取作業(yè),核對(duì)答案,自選習(xí)題等方法。學(xué)生向習(xí)題解答發(fā)消息,可調(diào)用答題方法。教師向練習(xí)本發(fā)消息,可調(diào)用檢查作業(yè)方法。練習(xí)本向習(xí)題板發(fā)消息,可調(diào)用查詢習(xí)題,查詢答案方法。練習(xí)本調(diào)用自選習(xí)題時(shí),要向習(xí)題庫發(fā)消息去提取習(xí)題。習(xí)題對(duì)象向習(xí)題庫發(fā)消息可調(diào)用習(xí)題入庫,提取習(xí)題方法。習(xí)題板對(duì)象向習(xí)題庫發(fā)消息可調(diào)用習(xí)題入庫,提取習(xí)題方法。第四十二頁,共七十一頁,編輯于2023年,星期二類圖:
班教師習(xí)題板練習(xí)本學(xué)生考試板習(xí)題庫系統(tǒng)管理員習(xí)題課程習(xí)題解答1nn1nnnn1n110,10,1第四十三頁,共七十一頁,編輯于2023年,星期二(5)進(jìn)一步協(xié)調(diào)和優(yōu)化模型中各個(gè)組成部分(包括類/對(duì)象)的性能和相互關(guān)系,精煉侯選的類/對(duì)象,使系統(tǒng)成為由不同部分組成的最小集合。(6)分析和設(shè)計(jì)模型中每個(gè)組成部分(包括類/對(duì)象)的功能實(shí)現(xiàn)細(xì)節(jié),檢查分析模型的一致性和完整性。
總之,OOA模型描述了表示某個(gè)特定論域中的對(duì)象以及它們的結(jié)構(gòu)關(guān)系和通信關(guān)系。OOA模型有兩個(gè)用途。首先,OOA模型是將現(xiàn)實(shí)世界形式化的“視圖”。它用一系列對(duì)象表示軟件系統(tǒng)主要的組織結(jié)構(gòu)以及現(xiàn)實(shí)世界強(qiáng)加給軟件系統(tǒng)的各種規(guī)則和約束條件。其次,OOA模型規(guī)定了對(duì)象間如何協(xié)同才能完成軟件系統(tǒng)所指定的工作。這種協(xié)同在模型中是以表明對(duì)象之間通信方式的一組消息連接來表示的。OOA模型為后續(xù)的OOD和OOP提供指導(dǎo)。第四十四頁,共七十一頁,編輯于2023年,星期二1.3.3OOA模型的建立過程OOA過程就是分析和確定用戶需求并建立問題域精確模型(OOA模型)的過程。在建立OOA模型時(shí),我們將選用PeterCoad和EdYourdon在1991年提出的一種循序漸進(jìn)的面向?qū)ο蠓治龇椒ā?/p>
OOA模型的建立過程可以劃分為五個(gè)層次,它們分別是:(1)對(duì)象-類層
劃分待開發(fā)系統(tǒng)及其環(huán)境信息的基本構(gòu)造單位,標(biāo)出反映問題域的對(duì)象和類,并用符號(hào)進(jìn)行規(guī)范的描述,用信息提供者熟悉的術(shù)語為對(duì)象和類命名。
例如,對(duì)于題庫管理系統(tǒng),我們抽出了如下對(duì)象/類:教師,學(xué)生,習(xí)題板,練習(xí)本班,課程習(xí)題,考試板,習(xí)題答案習(xí)題庫服務(wù)第四十五頁,共七十一頁,編輯于2023年,星期二(2)屬性層
定義對(duì)象類和某些結(jié)構(gòu)中的數(shù)據(jù)屬性
。繼承結(jié)構(gòu)中所有類的公共屬性可放于通用類中。標(biāo)識(shí)對(duì)象必需的屬性并放在合適的繼承層次上,屬性的特殊限制和實(shí)例連接關(guān)系也應(yīng)標(biāo)識(shí)出來。第四十六頁,共七十一頁,編輯于2023年,星期二(3)服務(wù)層
要表示對(duì)象的服務(wù)或行為,就是要定義類上的操作。列出對(duì)象需要做什么(即方法),也給出對(duì)象間的消息連接(并應(yīng)以箭頭指示消息從發(fā)送者到接受者)。第四十七頁,共七十一頁,編輯于2023年,星期二(4)結(jié)構(gòu)層
識(shí)別現(xiàn)實(shí)世界中對(duì)象之間的結(jié)構(gòu)關(guān)系。當(dāng)一種對(duì)象是另一種對(duì)象的一部分時(shí),用整體-部分關(guān)系表示;當(dāng)一個(gè)類屬于另一個(gè)類時(shí),用類之間繼承關(guān)系表示。
班教師習(xí)題板練習(xí)本學(xué)生考試板習(xí)題庫系統(tǒng)管理員習(xí)題課程習(xí)題解答1nn1nnnn1n110,10,1第四十八頁,共七十一頁,編輯于2023年,星期二(5)主題層
將復(fù)雜的系統(tǒng)劃分為更小的主題,是管理大系統(tǒng)的一個(gè)方法,這里所說的“主題”可以看成是子模型或子系統(tǒng),可將相關(guān)類或?qū)ο髣澐譃橐粋€(gè)主題。
班教師習(xí)題板練習(xí)本學(xué)生考試板習(xí)題庫系統(tǒng)管理員習(xí)題課程習(xí)題解答1nn1nnnn1n110,10,1第四十九頁,共七十一頁,編輯于2023年,星期二1.3.4OOA視圖面向?qū)ο蠹夹g(shù)專家提出了多種表示OOA模型的標(biāo)記,其中下列標(biāo)記是比較簡明和常用的標(biāo)記。第五十頁,共七十一頁,編輯于2023年,星期二圖1.4顯示了OOA模型的符號(hào)表示及其說明。第五十一頁,共七十一頁,編輯于2023年,星期二第五十二頁,共七十一頁,編輯于2023年,星期二1.3.5OOA提交在正式完成OOA之后,應(yīng)該提交面向?qū)ο蠓治瞿P图捌渌嫦驅(qū)ο蠓治鑫臋n,包括:用于指導(dǎo)設(shè)計(jì)和實(shí)現(xiàn)的分析方案說明。精選的候選類清單。提交數(shù)據(jù)字典(定義數(shù)據(jù)流圖中的各個(gè)基本成分的具體含義的文檔)。使用OOA模型符號(hào)或者UML圖示,繪制的類圖、主題圖等,包括對(duì)類間繼承關(guān)系、整體-部分關(guān)系的描述。類定義模板(一些類的抽象描述
,包括屬性說明,方法和消息說明)。類的描述可按OOA工具和CASE工具的要求,通過填寫對(duì)話框中的表格來完成。OOA方案的優(yōu)化規(guī)則。第五十三頁,共七十一頁,編輯于2023年,星期二1.4面向?qū)ο蟮脑O(shè)計(jì)初步
雖然OOA與OOD分兩個(gè)階段進(jìn)行,但它們是緊密結(jié)合的,可以很自然地從OOA過渡到OOD,這正是面向?qū)ο蠓椒ǖ囊粋€(gè)重要優(yōu)點(diǎn)。OOA與OOD的主要區(qū)別是:OOA與問題域更接近,OOD與系統(tǒng)的實(shí)現(xiàn)更接近。下面介紹面向?qū)ο笤O(shè)計(jì)(OOD)的基本策略。1.4.1OOD模型獲得OOD模型有多種方法,這里介紹有代表性的OOAD方法,它采用擴(kuò)展OOA模型來得到OOD模型,即在OOA模型橫向劃分5個(gè)層次的基礎(chǔ)上,將目標(biāo)系統(tǒng)縱向劃分成4個(gè)部分:問題域部分、人機(jī)交互部分、任務(wù)管理部分、數(shù)據(jù)管理部分,如下圖所示。第五十四頁,共七十一頁,編輯于2023年,星期二第五十五頁,共七十一頁,編輯于2023年,星期二建立OOD模型包括4個(gè)部分的工作:(1)問題論域部分:在OOA模型的基礎(chǔ)上,細(xì)化和優(yōu)化分析結(jié)果。主要根據(jù)需求的變化,對(duì)面向?qū)ο蟮姆治鲭A段產(chǎn)生的模型中的類和對(duì)象(包括屬性,操作和類之間的結(jié)構(gòu)關(guān)系)進(jìn)行重新組合和分解;根據(jù)面向?qū)ο蟮脑O(shè)計(jì)原則,增加必要的類,屬性、操作和關(guān)系。
設(shè)計(jì)包括:復(fù)用設(shè)計(jì);把問題論域相關(guān)的類關(guān)聯(lián)起來;加入一般化的類以建立類間協(xié)議;調(diào)整繼承支持級(jí)別;改進(jìn)性能;加入較低層的構(gòu)件(即增設(shè)一組構(gòu)成底層應(yīng)用模型的類和對(duì)象),以實(shí)現(xiàn)更細(xì)或更特殊的操作。第五十六頁,共七十一頁,編輯于2023年,星期二(2)人機(jī)交互部分:設(shè)計(jì)用戶界面模型,該用戶界面模型中的類和對(duì)象提供實(shí)現(xiàn)人機(jī)交互操作的接口函數(shù)。用戶界面設(shè)計(jì)包括菜單設(shè)計(jì)、窗口設(shè)計(jì)、輸入/輸出界面設(shè)計(jì)等等。(3)任務(wù)管理部分:建立一些類,用于處理有關(guān)的并發(fā)問題以及其它與特定平臺(tái)有關(guān)的問題。例如,在多用戶交互系統(tǒng)中,幾個(gè)用戶同時(shí)與系統(tǒng)進(jìn)行交互,無法預(yù)知哪一個(gè)用戶是下一個(gè)輸入者,這些交互活動(dòng)是并行發(fā)生的,需要建立一些專門的類對(duì)象來處理;在空中交通控制系統(tǒng)中,系統(tǒng)同時(shí)監(jiān)控著數(shù)架飛機(jī),有許多活動(dòng)在同時(shí)發(fā)生。對(duì)于諸如此類的并發(fā)問題,需要建立一些專門的類對(duì)象來處理。第五十七頁,共七十一頁,編輯于2023年,星期二(4)數(shù)據(jù)管理部分:數(shù)據(jù)管理設(shè)計(jì)包括:—數(shù)據(jù)存放方式設(shè)計(jì):數(shù)據(jù)存放設(shè)計(jì)選擇數(shù)據(jù)存放的方式(文件存放、關(guān)系數(shù)據(jù)庫表格存放或其他存放方式)。—數(shù)據(jù)操作的設(shè)計(jì)。為每個(gè)需要存儲(chǔ)的對(duì)象和類增加用于存儲(chǔ)管理的屬性和操作,在類和對(duì)象的定義中加以描述。第五十八頁,共七十一頁,編輯于2023年,星期二上述OOD總體結(jié)構(gòu)的基本思路是簡單的,但是我們應(yīng)當(dāng)重視并理解它,對(duì)于學(xué)習(xí)和應(yīng)用面向?qū)ο笤O(shè)計(jì),養(yǎng)成良好的規(guī)范化設(shè)計(jì)風(fēng)格,提高設(shè)計(jì)質(zhì)量都有重要意義。詳細(xì)地確定對(duì)象和類,是OOD的關(guān)鍵工作。一種有效的啟發(fā)式方法是,對(duì)需要提供的服務(wù)和問題陳述作語法分析,其中,名詞和名詞短語可作為候選對(duì)象,動(dòng)詞可作為候選對(duì)象的服務(wù),形容詞可能表示子類關(guān)系。尋找對(duì)象的策略和方法不少,但設(shè)計(jì)經(jīng)驗(yàn)和技巧是非常重要的。
在分析和設(shè)計(jì)中,我們要注意遵循這樣的原則:把由基本對(duì)象組裝復(fù)雜對(duì)象的過程與分解大粒度對(duì)象使系統(tǒng)細(xì)化過程相結(jié)合;把抽象化與具體化結(jié)合起來;把獨(dú)立封裝與繼承關(guān)系結(jié)合起來等。第五十九頁,共七十一頁,編輯于2023年,星期二1.4.2什么是優(yōu)良的OOD
OOD的關(guān)鍵工作是進(jìn)一步確定對(duì)象、類及其聯(lián)系。一個(gè)優(yōu)良的OOD設(shè)計(jì)方法應(yīng)具備如下基本條件:(1)繼承耦合應(yīng)盡可能緊密
耦合指一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連的緊密程度。繼承是一般化類與特殊類之間關(guān)聯(lián)耦合的一種形式。在設(shè)計(jì)時(shí)應(yīng)該使特殊類盡量多地繼承其父類的數(shù)據(jù)屬性和服務(wù)函數(shù),即應(yīng)該提高繼承耦合的程度,而不是摒棄父類的許多數(shù)據(jù)屬性和服務(wù)函數(shù)去另外定義許多新的數(shù)據(jù)屬性和服務(wù)函數(shù),這樣就可以節(jié)省軟件開發(fā)工作量,而且使程序更簡潔,編程更高效。因此,繼承耦合應(yīng)該盡可能緊密。第六十頁,共七十一頁,編輯于2023年,星期二(2)無繼承關(guān)系的類與類之間的耦合應(yīng)該很松散。如果一個(gè)軟件系統(tǒng)內(nèi)不同模塊之間的耦合很松散,則系統(tǒng)中某一部分的變化對(duì)其他部分的影響會(huì)降到最低程度。在理想情況下,對(duì)某一部分的理解、測試或修改,無須涉及系統(tǒng)的其他部分。在面向?qū)ο蠓椒ㄖ?,?對(duì)象是最基本的模塊,因此類與類之間的耦合應(yīng)該很松散。一般說來,類/對(duì)象之間的耦合可分為兩大類:(i)交互耦合應(yīng)該盡可能松散對(duì)象之間的交互耦合是通過消息連接來實(shí)現(xiàn)的。為使交互耦合盡可能松散,應(yīng)該遵守下述準(zhǔn)則:a)盡量降低消息連接的復(fù)雜程度。即應(yīng)該盡量減少消息中包含的參數(shù)個(gè)數(shù),降低參數(shù)的復(fù)雜程度。b)減少對(duì)象發(fā)送(或接收)的消息數(shù)。(ii)繼承耦合應(yīng)該盡可能緊密第六十一頁,共七十一頁,編輯于2023年,星期二(ii)繼承耦合盡可能緊密只有一個(gè)例外,類的繼承關(guān)系必須是緊密聯(lián)系的,因而子類與父類要緊密耦合。
(3)信息隱藏某個(gè)類的數(shù)據(jù)實(shí)現(xiàn)細(xì)節(jié)對(duì)于別的類來說應(yīng)該是隱藏的。(4)設(shè)計(jì)應(yīng)該具有最優(yōu)的可重用性
軟件重用是提高軟件開發(fā)生產(chǎn)率和目標(biāo)系統(tǒng)質(zhì)量的重要途徑。重用的實(shí)現(xiàn)基本上從設(shè)計(jì)階段開始。最優(yōu)的可重用性有兩方面的含義:一是盡量使用已有的類(包括開發(fā)環(huán)境提供的類庫,及以往開發(fā)類似系統(tǒng)時(shí)創(chuàng)建的類);二是如果確實(shí)需要?jiǎng)?chuàng)建新類,則在設(shè)計(jì)這些新類的協(xié)議或接口函數(shù)時(shí),應(yīng)該考慮將來的可重復(fù)使用性。第六十二頁,共七十一頁,編輯于2023年,星期二(5)盡力使類、對(duì)象和方法的定義具有簡單性;(6)對(duì)所設(shè)計(jì)的類和類族,應(yīng)注意保持其協(xié)議或接口的穩(wěn)定性;(7)類的層次結(jié)構(gòu)設(shè)計(jì)規(guī)模適度,不要太深或太淺;(8)系統(tǒng)整體規(guī)模
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 京能集寧二期擴(kuò)建2×660MW熱電聯(lián)產(chǎn)工程節(jié)能報(bào)告的審查意見
- 淮安磁性金屬材料項(xiàng)目可行性研究報(bào)告
- 養(yǎng)殖鵝合同范本
- 農(nóng)業(yè)水果收購合同范例
- 主播發(fā)貨合同范本
- 保底銷量合同范本
- PP凈化塔工程合同范例
- 倉庫經(jīng)營餐飲合同范例
- 2024年安全準(zhǔn)入考試復(fù)習(xí)試題含答案
- 養(yǎng)牛銷售合同范本
- 中醫(yī)睡眠養(yǎng)生中心方案
- 生活中的邏輯學(xué)
- 大學(xué)生返家鄉(xiāng)社會(huì)實(shí)踐報(bào)告
- 免疫學(xué)基礎(chǔ)與病原生物學(xué)課件
- 初中生物中考真題(合集)含答案
- 《醫(yī)學(xué)免疫學(xué)實(shí)驗(yàn)》課件
- C139客戶開發(fā)管理模型
- 中考英語閱讀理解(含答案)30篇
- GB/T 5019.5-2023以云母為基的絕緣材料第5部分:電熱設(shè)備用硬質(zhì)云母板
- 《工傷保險(xiǎn)專題》課件
- 2024年農(nóng)發(fā)集團(tuán)招聘筆試參考題庫含答案解析
評(píng)論
0/150
提交評(píng)論