




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
關于面向對象分析與設計第1章面向對象技術概論本章的學習目的由于面向對象技術比傳統的軟件開發技術能更自然和有效地開發軟件,解決軟件危機,因此它已成為現代軟件企業廣為采用的一項有效技術,所以當今學習面向對象技術具有非常重要的意義。
教學目的是使學生通過本章的學習能夠理解和掌握面向對象技術的基本概念和基本知識以及基本思想方法,為后續進一步學習面向對象的分析、設計和編程奠定良好的基礎。第2頁,共70頁,星期六,2024年,5月本章的學習內容了解面向對象軟件開發方法的發展歷程及其重要意義了解面向對象技術的基本概念了解面向對象技術的特點和優點初步了解面向對象分析與設計的一般方法第3頁,共70頁,星期六,2024年,5月
1.1面向對象方法的提出(1)軟件概念的提出
二十世紀四十年代誕生了世界上第一臺電子計算機—ENIAC,至今才半個來世紀,聚然間發生了巨大而深刻的計算機革命。計算機科學技術已經成為一門系統完善、復雜深刻的工程技術學科,它的應用已從國防、科技、工業、農業滲透到人類生活的各個方面,無處不在。出現了各種各樣的計算機,包括巨型機、大型機、小型機、個人電腦、工作站和網絡等等,五花八門,應有盡有。但是,無論怎樣尖端,怎樣高深,一個計算機系統都是由硬件和軟件兩部分構成。人們在第一臺電子計算機上就已實現了馮.諾依曼提出的存儲程序思想,即將程序和數據存儲在計算機內存中,用程序來控制計算機的運行。這種程序、數據及相關文檔統稱為軟件(software)。由于計算機是在程序的控制下運行,所以軟件成為了計算機的靈魂,是組成計算機系統不可缺少的部分。第4頁,共70頁,星期六,2024年,5月(2)軟件開發方法的發展計算機誕生之后,計算機技術一直處于高速發展狀態,計算機科學技術的發展由原來只依靠硬件的發展逐漸變為更多地依靠軟件的發展。事實上,軟件技術的發展經歷了多代歷程。第一代(20世紀50-60年代),是以FORTRAN和ALGOL等編程語言為標志的算法技術時代。那時,程序設計全靠人們發揮創造才能,全靠技巧和竅門。基于這種算法技術的軟件生產率非常低,程序很難看懂,甚至程序員自己寫的程序過一段時間后自己也看不懂,這給軟件的修改、維護帶來極大的困難。于是60年代末出現了“軟件危機”。第5頁,共70頁,星期六,2024年,5月第二代(20世紀70年代末開始到80年代盛行的),以PASCAL、COBOL等編程語言和關系數據庫管理系統為標志的結構化系統分析和設計技術。
由于早期的軟件比較簡單,開發一個軟件就等同于編一個程序,算法設計出來了就解決了問題。那時程序處理的數據也很雜亂,數據結構不統一,實現相同功能的不同程序處理的數據結構或數據模型可能相差很大,這對于軟件的統一化和標準化以及軟件的集成和推廣應用很不利。當軟件變得很大很復雜時,開發一個軟件只編一個程序的方法就不適應了。于是人們提出了結構化軟件開發方法。這種方法提倡通過系統分析和設計將該大的系統劃分為多個功能模塊,每個功能塊又可以進一步劃分為更小的功能子模塊,直到各個子模塊容易編程實現為止。在編程實現了各個模塊之后,將這些模塊組裝起來就構成了完整的應用系統。這種技術主要強調程序模塊化結構和數據結構,采用自頂向下逐步求精的設計方法和單入口單出口的控制結構,從而大大改善了程序的可讀性。第6頁,共70頁,星期六,2024年,5月伴隨著結構化軟件開發技術的出現,人們還提出了軟件工程方法,使軟件開發工作從以前只考慮程序的編寫技巧轉變到利用軟件工程的方法,使軟件系統的生產過程遵循一系列的規范化步驟,包括需求分析、總體設計、詳細設計、編程實現、軟件測試、軟件維護等。從而大大改善了軟件的質量與可維護性,但軟件開發的成本卻大大增加了,未能完全克服軟件危機。第7頁,共70頁,星期六,2024年,5月第三代(上個世紀80年代開始至今還盛行的)以Smalltalk、C++等為代表的面向對象軟件開發方法(OO)。
傳統的結構化程序設計以算法為核心,把本來密切相關的數據和對數據的操作分離開來,很難保持數據和操作的一致性,其軟件開發方法也不符合人們的自然思維習慣,設計出來的軟件系統其解空間與問題空間不一致,致使程序難以理解、修改和擴充,最終導致程序復雜性問題和軟件危機。
為了超越程序復雜性障礙,克服軟件危機,人們提出了面向對象軟件開發方法。面向對象開發方法一改過去傳統的以功能分析和功能分解為基礎的面向過程的結構化分析與設計方法,第8頁,共70頁,星期六,2024年,5月
面向對象開發方法模擬人們理解和處理客觀世界的方式來分析問題,把系統視為一系列對象的集合,其面向對象的設計又將分析的結果映射到某種面向對象實現工具的結構上,使映射過程有著比較直接的對應關系,使分析者、設計者和編程者都可使用相同的概念,從而使面向對象的軟件開發能比較自然地模擬客觀世界的活動,使問題描述空間與解空間在結構上盡可能一致。因此,采用面向對象方法可以更有效地開發大型軟件系統。面向對象方法的封裝、繼承、多態等機制不僅支持軟件復用,而且使軟件維護工作可靠有效,可實現軟件系統的柔性制造,更好地克服軟件危機。因此,它已成為成熟的廣為采用的軟件開發方法。
到20世紀末,面向對象軟件工程逐漸發展成熟,特別是統一建模語言(UML)標準的形成和廣泛使用,使面向對象軟件開發方法已成為軟件開發的主流技術。第9頁,共70頁,星期六,2024年,5月(3)面向對象軟件開發方法的發展面向對象軟件開發方法始于面向對象語言的研究和發展。面向對象語言的發展有三個重要的里程碑:20世紀70年代的Simula-67是第一個面向對象的語言,對后來的許多面向對象語言的出現產生了很大的影響。它首次提出了對象和類的概念和方法,啟示了一種嶄新軟件思維方法的出現。80年代初的Smalltalk語言,它的廣泛使用掀起了一場“面向對象運動”,隨之誕生了多種面向對象的語言,可分為幾類。對流行的語言進行面向對象的擴充得到的語言,如混合性語言C++和純面向對象語言Java.第10頁,共70頁,星期六,2024年,5月
自80年代末期到90年代
,面向對象技術的研究和應用不再局限于編程階段,而是向著系統分析和系統設計階段發展,即系統分析和系統設計階段也開始采用面向對象方法。這標志著面向對象方法已經發展成一種完整的方法論和系統化的技術體系—面向對象軟件工程。
我們用面向對象語言編程求解問題之前需要先按面向對象的方法進行分析和設計,然后才能根據設計模型進行有效編程。所以我們在學習用面向對象技術求解實際問題之前應該先學習面向對象的基本概念,再學習面向對象的分析和設計,然后再學習面向對象的編程實現,這樣才能全面掌握用面向對象技術求解問題的方法。第11頁,共70頁,星期六,2024年,5月
1.2面向對象的基本概念
為了更好地理解面向對象的思想和方法,有必要先介紹一些面向對象的基本概念。
與人們認識客觀世界一樣,面向對象技術認為客觀世界是由各種各樣的事物或實體組成,每個事物或實體都可用一個對象來表示。因此,客觀世界可看成是由各種各樣的對象組成,每個對象都有各自的內部狀態和行為操作,不同對象間相互作用和聯系就構成了各種不同的系統,從而形成了客觀世界。因此,在面向對象的程序中,客觀系統自然被描繪成一系列完全自治、封裝的對象,因此對象是組成面向對象程序的基本單位。第12頁,共70頁,星期六,2024年,5月(1)對象(Object)對象是客觀實體的抽象表示,是由描述對象的屬性的數據和對這些數據進行的操作行為兩部分組成。屬性是用來描述對象靜態特征的數據項。行為是用來描述對象動態特征的操作方法或算法。第13頁,共70頁,星期六,2024年,5月(2)對象的特征具有一個狀態,由與其相關聯的屬性值集合所表征。具有唯一的標識名,可以區別于其他對象。有一組操作方法,每個操作方法決定對象的一種行為。對象的狀態一般只能被自身的行為所改變。對象的操作包括自操作(施于自身)和它操作(施于其他對象)。對象之間以消息傳遞的方式進行通信。一個對象的成員仍可以是一個對象。voiddisplay(){PersonA;cout<<學號<<endl;cout<<姓名<<endl;cout<<性別<<endl;cout<<成績<<endl;A.print();}
第14頁,共70頁,星期六,2024年,5月(3)類(Class)
在面向對象程序中,一般不會逐個描述具體對象,而是將注意力集中于一類具有相同特性的對象,抽象出這類對象的共同特性和行為,用“類”進行一般性描述。類
類是具有相同屬性和行為的對象集合的抽象描述;
類的內部包括屬性和行為兩個主要部分。第15頁,共70頁,星期六,2024年,5月(4)實例(instance)
類是對具有相同屬性和行為的一組對象的抽象描述。因此,類可作為一種用戶自定義類型和創建對象的樣板,而按照這種樣板所創建的一個個具體對象就是類的實際例子,通常稱為實例。例如,studentS1(051001,李明,男,90)第16頁,共70頁,星期六,2024年,5月(5)屬性(attribute)
屬性就是類中所定義的數據成員,是對客觀實體的性質的抽象表示
。例如,學生類中有屬性:學號、姓名、性別、成績等。第17頁,共70頁,星期六,2024年,5月(6)方法(method)
方法就是對象所能執行的某項操作,也就是類中定義的服務函數。方法描述了對象執行操作的算法。在C++中把類中定義的方法稱為成員函數。例如,學生類中用于顯示學生屬性數據的成員函數display()就是一個方法。第18頁,共70頁,星期六,2024年,5月(7)消息(message)消息就是請求某個對象執行它所包含的某項處理操作的指令信息。實質是對某個類對象的操作函數的調用。例如,studentS1;
S1.display()是一個消息。一個消息一般由三部分組成:接收消息的對象名、操作函數名、函數的參數。消息是對象之間的通信機制。一個對象可以同時向多個對象發送消息,也可以接受多個對象發來的消息。第19頁,共70頁,星期六,2024年,5月(8)封裝性(encapsulation)所謂封裝就是把對象的屬性和操作結合成一個獨立的單位,使外界不能直接訪問或修改這些屬性數據和操作代碼,外界只能通過對象提供的接口函數來改變或獲取對象的屬性數據,這就實現了消息隱蔽。封裝是面向對象技術的一個基本特征。封裝的目的是實現信息的有效隱蔽。例如,classStudent
{private:
char*id;
//學號
char*name;
//姓名
intage;
//年齡
public:
voidmodify()
{age=age+1;}
voiddisplay(){······}
}第20頁,共70頁,星期六,2024年,5月
封裝的優點:(a)封裝起了信息隱蔽作用,增強了對象的獨立性,使外界只關心對象對外所提供的接口,忽略其內部細節。
(b)封裝使外界不能隨意存取對象的內部屬性,從而有效地避免外部錯誤對它的影響,提高了系統的安全性和可靠性。
(c)封裝的結果隱蔽了程序的復雜性,提供了代碼的重用性,降低了軟件開發的難度。例如,classStudent{private:char*id;//學號
char*name;//姓名
intage;//年齡
public:
voidmodify()
{age=age+1;}
voidprint(){···}
}main(){StudentS1;S1.modify();
S1.print();}第21頁,共70頁,星期六,2024年,5月(9)繼承性(inheritance)如果在一個已定義的類上,增加一些特殊屬性或操作,可以形成一個新的類,這個類不僅繼承了前一個類的全部特征,而且具有新的特性,因此可看作前一個類的特例,是對前一個類的繼承。前一個類稱為父類,新產生的類叫做子類。通過繼承關系可形成一種類層次結構,叫做繼承結構。第22頁,共70頁,星期六,2024年,5月
繼承關系可以分為如下幾種:一代繼承:從父類到子類只延伸一次。如圖(a)所示。多代繼承:從父類到子類延伸多次。如圖(b)所示。單繼承:如果在一個繼承層次結構中,每個子類只有一個直接父類,則這種繼承稱為單繼承。如圖(a)和(b)所示。多繼承:如果在一個繼承層次結構中,每個子類可有不止一個直接父類,則這種繼承稱為多繼承。如圖(c)所示。第23頁,共70頁,星期六,2024年,5月(10)多態性(polymorphism)
為了正確反映客觀世界的多態性,面向對象程序設計中也采用了多態性,即在不同類中,可用相同的函數名實現功能不同的函數。如下圖所示。多態性的優點:高層代碼(算法)只需寫一次,低層便可多次復用,可提高程序設計的靈活性和效率。第24頁,共70頁,星期六,2024年,5月(11)抽象性
抽象就是忽略事物中與當前目標無關的非本質特征,更充分地注意與當前目標有關的本質特征,從而找出事物的共性,把具有共性的事物劃分為一類。類的定義明確指出類是一組具有相同屬性和行為的對象集合的抽象描述。將客觀事物抽象成對象和類是面向對象的第一步。因此,抽象性是面向對象的的基本特征。(12)分類性
分類性是指將具有相同的數據(屬性)和行為(操作)的對象抽象成一類。
第25頁,共70頁,星期六,2024年,5月
1.3面向對象的分析方法面向對象的分析(object-orientedanalysis,OOA)是面向對象軟件工程方法的第一個環節,包括一套概念原則、過程步驟、表示方法、提交文檔等規范要求。OOA的基本任務是:運用面向對象方法,對問題域和系統責任展開分析,正確認識其中事物和它們之間的關系,發現描述問題域和系統責任所需要的對象和類,并定義類的屬性和服務,以及它們之間所形成的結構和連接,最終的目的是產生一個符合用戶需求,并能直接反映問題域和系統責任的OOA模型及其詳細說明,為后續的面向對象設計object_orienteddesign,OOD)和面向對象編程實現(object_orientedprogramming,OOP)提供指導。OOA與OOD能夠自然地過渡和結合,這是面向對象方法的一個優點。第26頁,共70頁,星期六,2024年,5月
1.3.1OOA方法評價
由于面向對象方法更適應于解決當今的龐大、復雜和易變的系統開發問題,更易于設計模型,因此它已成為當前比較流行的軟件開發方法。自20世紀80年代后期以來,相繼出現了許多OOA和OOD方法,例如:Booch方法(OOD)Cood-Yourdon方法(OOAD)Jacobson方法(OOSE)Rumbaugh方法(OMT)Wassman-Pircher(OOSD)等。
第27頁,共70頁,星期六,2024年,5月評價一個分析方法的優劣主要看它是否具有OOA的如下優點:(1)面向對象分析方法應該能夠自然地模擬人們理解和處理客觀事物的方式來分析問題,表達需求,直觀性較好。OOA應該便于與分析有關的人員之間的交流。(2)有利于對問題域和系統責任的理解和分析,有利于克服系統的復雜性困難。所建立的系統模型清晰,與程序中的類層次結構保持對應,便于系統擴充和改造。(3)把屬性數據和操作服務作為對象整體來看待,比較自然地描述客觀實體。對象在問題域中比較穩定,當需求變化時,只需增加新的對象,而原有的對象可以保留使用。第28頁,共70頁,星期六,2024年,5月(4)根據對象間的相關性最小原則來分析和說明問題,從而有利于實行封裝性原則,更好地適應系統需求的變化、制作和提取可復用部件,支持軟件復用。(5)可用類這樣的有效機制來顯式地表示對象集合的共性;抽象得到的類層次結構又可以比較直接地轉化為OOP的程序結構,使得編程思路清晰,編程效率較高。(6)分析方法與設計方法比較一致,從而便于建造一個問題域模型。(7)適合開發一大類系統,實用性較強;開發出來的系統可擴展性強。第29頁,共70頁,星期六,2024年,5月1.3.2OOA步驟面向對象分析的關鍵是對問題域中的事物進行識別,確定必要的類及其相互關系。根據分析問題的繁簡程度和設計進程的需要,把問題域分解成一些類和對象,并以消息的形式建立各對象之間的聯系。面向對象分析的大致步驟如下:(1)分析問題域,明確用戶需求了解與問題相關的業務領域知識,明確用戶對系統的需求,定義系統的職責范圍和邊界,探討問題的初步解決方案。
例如,題庫管理系統的用戶需求可以從如下三個方面描述:系統問題域說明:應用系統的業務范圍系統邊界說明:確定系統與用戶之間接口系統功能說明:系統需要實現的功能第30頁,共70頁,星期六,2024年,5月系統問題域說明:
在公共題庫的支持下每個教師:輸入習題:可用系統編寫習題及答案,并存入習題庫;組成作業:從習題庫中選擇一組習題來組成作業,并在要求時間公布習題答案;從習題庫中選擇一組習題組成考試試卷,并公布試題;可以批改學生的作業;學生答題后可收卷,閱卷評分。每個學生:用系統完成作業或答題并提交給系統;可在習題庫中選擇習題自己練習;可以在公布答案后核對自己的作業;系統管理員:負責習題、編班和權限管理,維護習題庫。第31頁,共70頁,星期六,2024年,5月系統邊界說明:系統的用戶有本校教師、學生、系統管理員。學校以班組織學生,每班每學期有若干課程。每門課的習題由一位教師負責。只有本科教師可提交或修改習題。系統功能說明:教師編寫習題及答案入庫。教師選擇作業題公布于習題板上,向學生布置作業;教師選擇試題公布于考試板上(有考題,時間和評分要求).每個學生每門課程都有一個練習本。記錄學生對每道習題(或試題)的解答。教師通過練習本批改習題(或試題)。習題庫提供入庫,提取,權限,查詢等管理。第32頁,共70頁,星期六,2024年,5月(2)確定對象和類。即分析確定并標識構成系統的對象,再對對象進行抽象分類。先把系統看成由一些子系統組成,把每個子系統劃分成一個主題,主題是由一組類和對象組成。
例如,對于題庫管理系統,發現對象的出發點:問題域、系統功能和邊界説明從需求中找出關鍵名詞或名詞短語作為侯選對象:
教師,系統,習題,答案,作業,時間,學生,試題,系統管理員,權限,學校,班,學期,課程,習題板,考試板,練習本,習題庫。分析和篩選對象:教師,學生,習題板,練習本班,課程習題,考試板,習題答案習題庫服務第33頁,共70頁,星期六,2024年,5月確定類:對具有相同屬性和操作集合的各組對象進行抽象描述,得到組成系統的類。第34頁,共70頁,星期六,2024年,5月(3)確定系統各部分的分類和組成結構第一是按照一般—特殊關系,標識類間的繼承關系,確定分類結構;第二是按照整體—部分關系,標識一個對象是有哪些對象組成,確定組裝結構。
例如,對于題庫管理系統,分類結構可如下確定:習題板與考試板是父子關系—考試板可看作為特殊的習題板,除習題板的共性外,增加了評分標準.第35頁,共70頁,星期六,2024年,5月對于題庫管理系統,組成關系可如下確定:班與學生是組成的關系(1對n)習題板與習題是組成的關系(1,0對n)練習本與習題答案是組成關系(1對n)第36頁,共70頁,星期六,2024年,5月(4)找出并建立每個對象及其相互之間的聯系。即以應用為基礎來標識對象,定義對象的內部特征(屬性和方法),建立實例連接和消息連接。消息連接體現了對象間的通信關系和接口協議形式。例如,對于題庫管理系統,實例連接關系如下:練習本與學生對象之間存在一對多的實例連接關系。由練習本中的學生ID屬性體現。練習本與考試板對象之間存在一對多的實例連接關系。練習本用快照復制答案作為考試板中答卷屬性的體現。課程與教師對象之間存在一對多的實例連接關系。由課程中負責教師ID屬性體現。
班教師習題板練習本學生考試板習題課程習題解答1nnnnnnn11110,10,1第37頁,共70頁,星期六,2024年,5月
對于題庫管理系統,對象之間消息連接可以如下確定:
教師向習題發消息:調用編寫習題,編寫答案,習題入庫等方法。教師向習題板發消息,可調用選題,公布答案,查詢答案,查詢習題等方法。例如:習題板.select(),習題板.answer(),…教師向考試板發消息可調用收卷,閱卷方法。學生向練習本發消息,可調用提取作業,核對答案,自選習題等方法。學生向習題解答發消息,可調用答題方法。教師向練習本發消息,可調用檢查作業方法。練習本向習題板發消息,可調用查詢習題,查詢答案方法。練習本調用自選習題時,要向習題庫發消息去提取習題。習題對象向習題庫發消息可調用習題入庫,提取習題方法。習題板對象向習題庫發消息可調用習題入庫,提取習題方法。第38頁,共70頁,星期六,2024年,5月類圖:
班教師習題板練習本學生考試板習題庫系統管理員習題課程習題解答1nn1nnnn1n110,10,1第39頁,共70頁,星期六,2024年,5月(5)進一步協調和優化模型中各個組成部分(包括類/對象)的性能和相互關系,精煉侯選的類/對象,使系統成為由不同部分組成的最小集合。(6)分析和設計模型中每個組成部分(包括類/對象)的功能實現細節,檢查分析模型的一致性和完整性。
總之,OOA模型描述了表示某個特定論域中的對象以及它們的結構關系和通信關系。OOA模型有兩個用途。首先,OOA模型是將現實世界形式化的“視圖”。它用一系列對象表示軟件系統主要的組織結構以及現實世界強加給軟件系統的各種規則和約束條件。其次,OOA模型規定了對象間如何協同才能完成軟件系統所指定的工作。這種協同在模型中是以表明對象之間通信方式的一組消息連接來表示的。OOA模型為后續的OOD和OOP提供指導。第40頁,共70頁,星期六,2024年,5月1.3.3OOA模型的建立過程OOA過程就是分析和確定用戶需求并建立問題域精確模型(OOA模型)的過程。在建立OOA模型時,我們將選用PeterCoad和EdYourdon在1991年提出的一種循序漸進的面向對象分析方法。
OOA模型的建立過程可以劃分為五個層次,它們分別是:(1)對象-類層
劃分待開發系統及其環境信息的基本構造單位,標出反映問題域的對象和類,并用符號進行規范的描述,用信息提供者熟悉的術語為對象和類命名。
例如,對于題庫管理系統,我們抽出了如下對象/類:教師,學生,習題板,練習本班,課程習題,考試板,習題答案習題庫服務第41頁,共70頁,星期六,2024年,5月(2)屬性層
定義對象類和某些結構中的數據屬性
。繼承結構中所有類的公共屬性可放于通用類中。標識對象必需的屬性并放在合適的繼承層次上,屬性的特殊限制和實例連接關系也應標識出來。第42頁,共70頁,星期六,2024年,5月(3)服務層
要表示對象的服務或行為,就是要定義類上的操作。列出對象需要做什么(即方法),也給出對象間的消息連接(并應以箭頭指示消息從發送者到接受者)。第43頁,共70頁,星期六,2024年,5月(4)結構層
識別現實世界中對象之間的結構關系。當一種對象是另一種對象的一部分時,用整體-部分關系表示;當一個類屬于另一個類時,用類之間繼承關系表示。
班教師習題板練習本學生考試板習題庫系統管理員習題課程習題解答1nn1nnnn1n110,10,1第44頁,共70頁,星期六,2024年,5月(5)主題層
將復雜的系統劃分為更小的主題,是管理大系統的一個方法,這里所說的“主題”可以看成是子模型或子系統,可將相關類或對象劃分為一個主題。
班教師習題板練習本學生考試板習題庫系統管理員習題課程習題解答1nn1nnnn1n110,10,1第45頁,共70頁,星期六,2024年,5月1.3.4OOA視圖面向對象技術專家提出了多種表示OOA模型的標記,其中下列標記是比較簡明和常用的標記。第46頁,共70頁,星期六,2024年,5月圖1.4顯示了OOA模型的符號表示及其說明。第47頁,共70頁,星期六,2024年,5月第48頁,共70頁,星期六,2024年,5月1.3.5OOA提交在正式完成OOA之后,應該提交面向對象分析模型及其他面向對象分析文檔,包括:用于指導設計和實現的分析方案說明。精選的候選類清單。提交數據字典(定義數據流圖中的各個基本成分的具體含義的文檔)。使用OOA模型符號或者UML圖示,繪制的類圖、主題圖等,包括對類間繼承關系、整體-部分關系的描述。類定義模板(一些類的抽象描述
,包括屬性說明,方法和消息說明)。類的描述可按OOA工具和CASE工具的要求,通過填寫對話框中的表格來完成。OOA方案的優化規則。第49頁,共70頁,星期六,2024年,5月1.4面向對象的設計初步
雖然OOA與OOD分兩個階段進行,但它們是緊密結合的,可以很自然地從OOA過渡到OOD,這正是面向對象方法的一個重要優點。OOA與OOD的主要區別是:OOA與問題域更接近,OOD與系統的實現更接近。下面介紹面向對象設計(OOD)的基本策略。1.4.1OOD模型獲得OOD模型有多種方法,這里介紹有代表性的OOAD方法,它采用擴展OOA模型來得到OOD模型,即在OOA模型橫向劃分5個層次的基礎上,將目標系統縱向劃分成4個部分:問題域部分、人機交互部分、任務管理部分、數據管理部分,如下圖所示。第50頁,共70頁,星期六,2024年,5月第51頁,共70頁,星期六,2024年,5月建立OOD模型包括4個部分的工作:(1)問題論域部分:在OOA模型的基礎上,細化和優化分析結果。主要根據需求的變化,對面向對象的分析階段產生的模型中的類和對象(包括屬性,操作和類之間的結構關系)進行重新組合和分解;根據面向對象的設計原則,增加必要的類,屬性、操作和關系。
設計包括:復用設計;把問題論域相關的類關聯起來;加入一般化的類以建立類間協議;調整繼承支持級別;改進性能;加入較低層的構件(即增設一組構成底層應用模型的類和對象),以實現更細或更特殊的操作。第52頁,共70頁,星期六,2024年,5月(2)人機交互部分:設計用戶界面模型,該用戶界面模型中的類和對象提供實現人機交互操作的接口函數。用戶界面設計包括菜單設計、窗口設計、輸入/輸出界面設計等等。(3)任務管理部分:建立一些類,用于處理有關的并發問題以及其它與特定平臺有關的問題。例如,在多用戶交互系統中,幾個用戶同時與系統進行交互,無法預知哪一個用戶是下一個輸入者,這些交互活動是并行發生的,需要建立一些專門的類對象來處理;在空中交通控制系統中,系統同時監控著數架飛機,有許多活動在同時發生。對于諸如此類的并發問題,需要建立一些專門的類對象來處理。第53頁,共70頁,星期六,2024年,5月(4)數據管理部分:數據管理設計包括:—數據存放方式設計:數據存放設計選擇數據存放的方式(文件存放、關系數據庫表格存放或其他存放方式)?!獢祿僮鞯脑O計。為每個需要存儲的對象和類增加用于存儲管理的屬性和操作,在類和對象的定義中加以描述。第54頁,共70頁,星期六,2024年,5月上述OOD總體結構的基本思路是簡單的,但是我們應當重視并理解它,對于學習和應用面向對象設計,養成良好的規范化設計風格,提高設計質量都有重要意義。詳細地確定對象和類,是OOD的關鍵工作。一種有效的啟發式方法是,對需要提供的服務和問題陳述作語法分析,其中,名詞和名詞短語可作為候選對象,動詞可作為候選對象的服務,形容詞可能表示子類關系。尋找對象的策略和方法不少,但設計經驗和技巧是非常重要的。
在分析和設計中,我們要注意遵循這樣的原則:把由基本對象組裝復雜對象的過程與分解大粒度對象使系統細化過程相結合;把抽象化與具體化結合起來;把獨立封裝與繼承關系結合起來等。第55頁,共70頁,星期六,2024年,5月1.4.2什么是優良的OOD
OOD的關鍵工作是進一步確定對象、類及其聯系。一個優良的OOD設計方法應具備如下基本條件:(1)繼承耦合應盡可能緊密
耦合指一個軟件結構內不同模塊之間互連的緊密程度。繼承是一般化類與特殊類之間關聯耦合的一種形式。在設計時應該使特殊類盡量多地繼承其父類的數據屬性和服務函數,即應該提高繼承耦合的程度,而不是摒棄父類的許多數據屬性和服務函數去另外定義許多新的數據屬性和服務函數,這樣就可以節省軟件開發工作量,而且使程序更簡潔,編程更高效。因此,繼承耦合應該盡可能緊密。第56頁,共70頁,星期六,2024年,5月(2)無繼承關系的類與類之間的耦合應該很松散。如果一個軟件系統內不同模塊之間的耦合很松散,則系統中某一部分的變化對其他部分的影響會降到最低程度。在理想情況下,對某一部分的理解、測試或修改,無須涉及系統的其他部分。在面向對象方法中,類/對象是最基本的模塊,因此類與類之間的耦合應該很松散。一般說來,類/對象之間的耦合可分為兩大類:(i)交互耦合應該盡可能松散對象之間的交互耦合是通過消息連接來實現的。為使交互耦合盡可能松散,應該遵守下述準則:a)盡量降低消息連接的復雜程度。即應該盡量減少消息中包含的參數個數,降低參數的復雜程度。b)減少對象發送(或接收)的消息數。(ii)繼承耦合應該盡可能緊密第57頁,共70頁,星期六,2024年,5月(ii)繼承耦合盡可能緊密只有一個例外,類的繼承關系必須是緊密聯系的,因而子類與父類要緊密耦合。
(3)信息隱藏某個類的數據實現細節對于別的類來說應該是隱藏的。(4)設計應該具有最優的可重用性
軟件重用是提高軟件開發生產率和目標系統質量的重要途徑。重用的實現基本上從設計階段開始。最優的可重用性有兩方面的含義:一是盡量使用已有的類(包括開發環境提供的類庫,及以往開發類似系統時創建的類);二是如果確實需要創建新類,則在設計這些新類的協議或接口函數時,應該考慮將來的可重復使用性。第58頁,共70頁,星期六,2024年,5月(5)盡力使類、對象和方法的定義具有簡單性;(6)對所設計的類和類族,應注意保持其協議或接口的穩定性;(7)類的層次結構設計規模適度,不要太深或太淺;(8)系統整體規模的最小化。1.4.3對象標識設計在OOD中,另一個必做的工作是標識對象/類,即給對象一個代名詞,以明確地區別其他對象。為適應模擬對象的復雜性,便于對象的組織和使用,要求在一個系統中,對象標識具備唯一性、穩定性、一致性。
第59頁,共70頁,星期六,2024年,5月1.4.4復雜對象的設計在多媒體系統和工程系統的面向對象程序設計中,常常需要定義復雜對象及其聯系,對其描述往往導致多層次對象(類)的定義。在設計對象模型或類圖的結構時,要注意以對象本身的自然表達方式為出發點,將對象劃分成不同層次的類,建立由所有類構成的有向無環圖。一般地講,復雜對象具有多種數據結構,可分解為多層次低層對象,或者是不同層次的部件,每個部件對象又可參與其它對象的構成,為多方共享,還可按照各種特性定義相應地歸入不同的類。第60頁,共70頁,星期六,2024年,5月
OOD就是使用OO的概念進行設計,這種概念設計的目的就在于定義抽象對象之間的關系結構。常用的方法如下:分類
分類是見將具有相同屬性和行為的對象分成一組。如何選擇恰當的分類是設計中的一個焦點,這要同系統的總體規劃設計一起統籌安
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全知識法試題及答案
- 2025年電動汽車電池熱管理系統熱管理效率優化與創新研究報告
- 安全技能比武試題及答案
- 安全工作教育試題及答案
- 物業品質培訓課件目錄
- 魔鏡檢測皮膚培訓課件
- 重疾保險培訓課件
- 《編制說明蒙農1號蒙古冰草提純復壯技術規程》
- 中班家園共育課件
- 冬季生產安全培訓
- 《心血管病介入治療新技術》課件
- 風力發電運維值班員(技師)職業技能鑒定考試題(附答案)
- 物業管理定價策略與實施路徑
- 基于機器學習的網絡攻擊行為模式識別-洞察闡釋
- 出國培訓考試題庫及答案
- 《腎動脈解剖》課件
- 2024年湖南益陽事業單位招聘考試真題答案解析
- 國家開放大學《公共部門人力資源管理》形考任務1-4答案
- 寧德市霞浦縣2025年六年級下學期小升初數學考前押題卷含解析
- 汽車電泳工藝培訓
- 2024年陜西省中職高考對口升學財經商貿大類真題卷附參考答案
評論
0/150
提交評論