第 1 章(C)- 面向?qū)ο蠓治龊驮O(shè)計初步2011(2h)_第1頁
第 1 章(C)- 面向?qū)ο蠓治龊驮O(shè)計初步2011(2h)_第2頁
第 1 章(C)- 面向?qū)ο蠓治龊驮O(shè)計初步2011(2h)_第3頁
第 1 章(C)- 面向?qū)ο蠓治龊驮O(shè)計初步2011(2h)_第4頁
第 1 章(C)- 面向?qū)ο蠓治龊驮O(shè)計初步2011(2h)_第5頁
已閱讀5頁,還剩97頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第一章 從過程抽象到數(shù)據(jù)抽象1.3 面向?qū)ο蠓治龊驮O(shè)計 主要內(nèi)容面向?qū)ο蠼ο竽P蚒ML建模技術(shù)面向?qū)ο蠓治雒嫦驅(qū)ο笤O(shè)計面向?qū)ο髮崿F(xiàn)1.3.1 面向?qū)ο蠼?在創(chuàng)建系統(tǒng)之前必須對問題有一個透徹的了解。為了更好的理解問題和描述問題,人們常常采用“建立問題模型”技術(shù)。如:建造一座大廈(圖紙),拍電影(劇本) 模型由一組圖示符號和組織這些符號的規(guī)則組成,利用它們來定義和描述問題域中的術(shù)語和概念。 模型是一種思考工具,利用這種工具可以把知識規(guī)范地?zé)o歧義地表示出來。1. 建模的目的: (1)模型幫助我們將系統(tǒng)可視化,可以更好地理解系統(tǒng)。 (2)模型可以讓我們直觀、詳細(xì)描述系統(tǒng)的結(jié)構(gòu)和行為,并利用它和同

2、事容易溝通。 (3)模型提供了指導(dǎo)我們創(chuàng)建系統(tǒng)的模板,我們可以用它為使用系統(tǒng)的人提供幫助。(4)模型對我們所做的決策進(jìn)行文檔化。系統(tǒng)越大越需要建立問題模型。為了開發(fā)復(fù)雜的軟件系統(tǒng),系統(tǒng)分析員應(yīng)該抽象出目標(biāo)系統(tǒng)的特性,使用精確的表示方法構(gòu)造系統(tǒng)的模型,并在設(shè)計過程中逐漸把和實現(xiàn)有關(guān)的細(xì)節(jié)加進(jìn)模型中,直至最終用程序?qū)崿F(xiàn)模型。2.建立問題模型方法從算法的角度建立問題模型:所有的問題都用過程/函數(shù)作為主要構(gòu)造塊面向?qū)ο蟮慕?所有的問題都用對象/類作為主要構(gòu)造塊面向?qū)ο蟮慕5姆椒ê芏?Rumbaugh-OMTBooch Yourdon - OOA&DJacobson - OOSEMartin - O

3、OD每種方法都有自己的建模內(nèi)容和圖形化工具。目前最好最流行的圖形化工具是UML。UML的軟件:Rational Rose; Visio OMT建模OMT是著名的對象模型化技術(shù)OMT。OMT認(rèn)為用面向?qū)ο蠓椒ㄩ_發(fā)軟件,通常需要建立三種形式的模型,它們分別是:1.描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的對象模型(基本、核心)2.描述系統(tǒng)控制結(jié)構(gòu)的動態(tài)模型3.描述系統(tǒng)功能的功能模型這三個模型從3個不同但又密切相關(guān)的角度模擬目標(biāo)系統(tǒng)。一個典型的軟件系統(tǒng)組合了上述三方面內(nèi)容:它使用數(shù)據(jù)結(jié)構(gòu)(對象模型),執(zhí)行操作(動態(tài)模型),并且完成數(shù)據(jù)值的變化(功能模型)。分析:對象模型是三個模型中最關(guān)鍵的一個模型。它的作用是描述系統(tǒng)的靜態(tài)

4、結(jié)構(gòu),包括構(gòu)成系統(tǒng)的類和對象,它們的屬性和操作,及它們之間的關(guān)系。(定義“對誰做”)動態(tài)模型著重于系統(tǒng)的控制邏輯。要想對一個系統(tǒng)了解得比較清楚,還應(yīng)當(dāng)考察在任何時刻對象及其關(guān)系的改變。系統(tǒng)的這些涉及時序和改變狀況用動態(tài)模型來描述。(定義“何時做”)功能模型著重于系統(tǒng)內(nèi)部數(shù)據(jù)的傳送和處理。功能模型表明,通過計算,從輸入數(shù)據(jù)能得到什么樣的輸出數(shù)據(jù),不考慮參加計算的數(shù)據(jù)按什么時序執(zhí)行。(定義“做什么”)最核心的模型-對象模型 面向?qū)ο蠓椒◤娬{(diào)圍繞對象而不是圍繞功能來構(gòu)造系統(tǒng)。對于大系統(tǒng):3個模型必不可少.對于小系統(tǒng):對象模型必不可少。對象模型是上述三種模型中最重要、最基本、最核心的模型。 對象模型表

5、示靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)的“數(shù)據(jù)”性質(zhì)。它是對模擬客觀世界實體的對象以及對象彼此間的關(guān)系的映射,描述了系統(tǒng)的靜態(tài)結(jié)構(gòu)。 OMT對象模型化技術(shù)把分析時收集的信息構(gòu)造在三類模型中,即對象模型、動態(tài)模型和功能模型。動態(tài)模型對象模型功能模型 這個模型化的過程是一個迭代過程。通過不斷更新、細(xì)化,直到切合系統(tǒng)的真正需求為止。 為了建立系統(tǒng)模型,需要定義一組圖形符號,并且規(guī)定一組組織這些符號以表示特定語義的規(guī)則。如對象模型,需要包含下列符號:表示類的符號(應(yīng)該既能表示屬性又能表示服務(wù));表示對象(類實例)的符號;表示繼承關(guān)系的符號;表示類和(或)對象 間其他關(guān)系的符號。統(tǒng)一建模語言(UML)為建立系統(tǒng)模型提供

6、了一個圖形化的表示手段UML建模技術(shù)1. UML(Unified Modeling Language, 統(tǒng)一建模語言) UML是軟件和系統(tǒng)開發(fā)的標(biāo)準(zhǔn)建模語言。它主要以圖形的方式對系統(tǒng)進(jìn)行分析、設(shè)計。 UML是在多種面向?qū)ο蠓治雠c設(shè)計方法相互融合的基礎(chǔ)上形成的,是一種專用于系統(tǒng)建模的語言。它為開發(fā)人員與客戶之間,以及開發(fā)人員之間的溝通與理解架起了“橋梁”。2.UML系統(tǒng)視圖UML 是用來描述模型的,它用模型來描述系統(tǒng)的結(jié)構(gòu)、或靜態(tài)特征、以及行為或動態(tài)特征它從不同的視角為系統(tǒng)的架構(gòu)建模,形成系統(tǒng)的不同視圖(view)每一種UML 的視圖都是由一個或多個圖(diagram )組成的,一個圖就是系統(tǒng)架

7、構(gòu)在某個側(cè)面的表示,它與其它圖是一致的,所有的圖一起組成了系統(tǒng)的完整視圖。UML 提供了九種不同的圖描述系統(tǒng)模型。可以分成兩大類:一類是靜態(tài)圖。包括用例圖、類圖、對象圖、組件圖、配置圖另一類是動態(tài)圖。包括序列圖、協(xié)作圖、狀態(tài)圖和活動圖UML圖(preview)1) 用例圖2) 時序圖:打印3) 時序圖:打電話4) 協(xié)同圖:打印5) 狀態(tài)圖:電梯6) 封包7) 活動圖:磁盤8) 構(gòu)件分布圖9) 構(gòu)件圖的組合10) 配置圖:主機(jī)與外圍設(shè)備11)類圖類圖用于表示類的存在和類與類之間的相互關(guān)系,是從系統(tǒng)構(gòu)成的角度來描述正在開發(fā)的系統(tǒng)。類的表示:類的名稱屬性屬性 :數(shù)據(jù)類型屬性 :數(shù)據(jù)類型 = 初值操作

8、操作(參數(shù)表):結(jié)果類型類圖12)對象圖類圖表示類和類與類之間的關(guān)系,對象圖則表示在某一時刻這些類的具體實例和這些實例之間的具體連接關(guān)系。由于對象是類的實例,所以UML 對象圖中的概念與類圖中的概念完全一致。對象圖可以看作類圖的示例,幫助人們理解一個比較復(fù)雜的類圖。對象圖也可用于顯示類圖中的對象在某一點的連接關(guān)系。對象的圖示方式與類的圖示方式幾乎是一樣的,主要差別在于對象的名字下面要加下劃線。對象名有下列三種表示格式:13)關(guān)系類圖由類和它們之間的關(guān)系,組成類與類之間通常有四種關(guān)系:泛化關(guān)系(Generalization)關(guān)聯(lián)關(guān)系(Association)聚合關(guān)系(Aggregation)合成

9、關(guān)系(Composition)依賴關(guān)系(Dependency)其中,聚合關(guān)系(Aggregation),合成關(guān)系(Composition)屬于關(guān)聯(lián)關(guān)系(Association)。泛化關(guān)系表現(xiàn)為繼承或?qū)崿F(xiàn)關(guān)系(is a),關(guān)聯(lián)關(guān)系表現(xiàn)為變量(has a ),依賴關(guān)系表現(xiàn)為函數(shù)中的參數(shù)(use a)。泛化關(guān)系:表示為類與類之間的繼承關(guān)系,接口與接口之間的繼承,類對接口的實現(xiàn)關(guān)系。表示方法: 用一個空心箭頭實線,箭頭指向父類?;蚩招募^虛線,如果父類是接口。關(guān)聯(lián)關(guān)系:類與類之間的聯(lián)接,它使一個類知道另一個類的屬性和方法。表示方法:用 實線箭頭, 箭頭指向被使用的類。在示范代碼中,Employee可以

10、有0個或更多的TimeCard對象。但是,每個TimeCard只從屬于單獨一個Employee。聚合關(guān)系:是關(guān)聯(lián)關(guān)系的一種,是強的關(guān)聯(lián)關(guān)系。聚合關(guān)系是整體和個體的關(guān)系。關(guān)聯(lián)關(guān)系的兩個類處于同一層次上,啊聚合關(guān)系兩個類處于不同的層次,一個是整體,一個是部分。表示方法:空心菱形實線箭頭,箭頭指向部分。合成關(guān)系:是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系強的關(guān)系。它要求普通的聚合關(guān)系中代表整體的對象負(fù)責(zé)代表部分的對象的生命周期,合成關(guān)系不能共享。表示方法:實心菱形實線箭頭,Employee和TimeCard的關(guān)系或許更適合表示成“合成”,而不是表示成“關(guān)聯(lián)”。 依賴關(guān)系:是類與類之間的連接,表示一個類依賴于另一

11、個類的定義。例如如果A依賴于B,則B體現(xiàn)為局部變量,方法的參數(shù)、或靜態(tài)方法的調(diào)用。表示方法:虛線箭頭UML開發(fā)工具IBM Rational RoseMicrosoft Visio-UML 模型圖Borland TogetherJude (Java and UML Developers Environment),一個小巧實用的UML建模軟件,是一個中日合作采用XP開發(fā)方式純JAVA開發(fā)的軟件,也可以說是半個國產(chǎn)軟件EclipseUMLRoseStarUML:一款開放源碼的UML開發(fā)工具,是由韓國公司主導(dǎo)開發(fā)出來的產(chǎn)品。1.3.2 面向?qū)ο蠓治?OOA)1. 基本內(nèi)涵 面向?qū)ο蟮姆治鼍褪沁\用面向?qū)?/p>

12、象方法進(jìn)行系統(tǒng)分析,抽取和整理用戶需求并建立問題域精確模型的過程。 它強調(diào)運用面向?qū)ο蠓椒ㄟM(jìn)行分析,用面向?qū)ο蟮母拍詈捅硎痉ū磉_(dá)、分析結(jié)果。2. 基本任務(wù)OOA分析工作主要包含3項內(nèi)容:理解用戶需求;表達(dá)用戶需求;驗證用戶需求。3. 基本步驟 面向?qū)ο蠓治龉ぷ鞔篌w上按照下列順序進(jìn)行:第一步,尋找類&對象;第二步,確定對象之間的關(guān)聯(lián);第三步,定義對象的屬性;第四步,定義對象的服務(wù)。 事實上,分析工作不可能嚴(yán)格地按照預(yù)定順序進(jìn)行,系統(tǒng)的模型往往需要反復(fù)構(gòu)造多遍才能建成。 通常,先構(gòu)造出模型的子集,然后再逐漸擴(kuò)充,直到完全、充分地理解整個問題,才能最終把模型建立起來。1) 確定類&對象步驟:找出侯選

13、的類&對象。 對象是對問題域中有意義的事物的抽象,它們既可能是物理實體,也可能是抽象概念。 通常,將需求陳述中的名詞 或名詞短語作為類&對象的候選者。篩選出正確的類&對象。 找出候選的類&對象之后,還應(yīng)該嚴(yán)格考察每個候選者,從中去掉不正確的或不必要的。 刪除的依據(jù)如下:冗余的:兩個類名表示了相同的信息,應(yīng)該保留較全面的類&對象。無關(guān)的:與目標(biāo)系統(tǒng)無關(guān)的類&對象。籠統(tǒng)的:用精確的代替模糊、籠統(tǒng)的類&對象。無關(guān)的屬性:去掉類&對象中無關(guān)的屬性。操作:通常用動詞定義類中的操作。實現(xiàn):在系統(tǒng)分析階段應(yīng)該少考慮或不考慮怎樣實現(xiàn)目標(biāo)系統(tǒng)。2) 確定關(guān)聯(lián)在需求陳述中使用的描述性動詞或動詞詞組,通常表示關(guān)聯(lián)關(guān)

14、系。因此,在初步確定關(guān)聯(lián)時,大多數(shù)關(guān)聯(lián)可以通過直接提取需求陳述中的動詞詞組而得出。分析員還應(yīng)該與用戶及領(lǐng)域?qū)<矣懻搯栴}域?qū)嶓w間的相互依賴、相互作用關(guān)系,根據(jù)領(lǐng)域知識再進(jìn)一步補充一些關(guān)聯(lián)。最后,還需對初步確定的關(guān)聯(lián)進(jìn)行進(jìn)一步篩選,以去掉不正確的或不必要的關(guān)聯(lián)。三個或三個以上對象之間的關(guān)聯(lián),大多可以分解為二元關(guān)聯(lián)。3) 確定屬性 分析并確定每個對象有哪些特性。確定屬性的過程包括分析和選擇兩個步驟。通常,在需求陳述中用名詞詞組表示屬性。應(yīng)該僅考慮與具體應(yīng)用直接相關(guān)的屬性,不必考慮那些超出所要解決的問題范圍的屬性。4) 確定服務(wù)分析并確定每個對象有哪些對屬性的操作。在確定類中應(yīng)該有的服務(wù)時,既要考慮該

15、類實體的常規(guī)行為,又要考慮為完成本系統(tǒng)功能所需要提供的服務(wù)。5) 識別繼承關(guān)系 確定了類中應(yīng)該定義的屬性和服務(wù)之后,就可以利用繼承機(jī)制共享公共性質(zhì),并對系統(tǒng)中的類加以層次化組織。 一般說來,可以使用兩種方式建立繼承關(guān)系: 自底向上:抽象出現(xiàn)有類的共同性質(zhì)泛化出父類,這個過程實質(zhì)上模擬了人類歸納思維過程。自頂向下:把現(xiàn)有類細(xì)化成更具體的子類,這模似了人類的演繹思維過程。 關(guān)系層特征層對象層基本模型(類圖)交互圖主題圖詳 細(xì) 說 明給出所有與問題域和系統(tǒng)責(zé)任有關(guān)的對象,用對象類表示定義每個對象類的屬性與服務(wù)通過結(jié)構(gòu)與連接描述對象之間的關(guān)系對模型中的所有元素進(jìn)行詳細(xì)說明對關(guān)系密切的類打包,幫助理解類

16、圖一幅交互圖表現(xiàn)完成某一項特定功能的一組對象之間的詳細(xì)交互。每一項功能用一個 use case描述OOA模型(based on UML):1.3.3 面向?qū)ο笤O(shè)計(OOD) 面向?qū)ο蠓治鍪翘崛『驼碛脩粜枨?,并建立問題域精確模型的過程。面向?qū)ο笤O(shè)計則是把分析階段得到的需求轉(zhuǎn)變成符合成本和質(zhì)量要求的系統(tǒng)實現(xiàn)方案的過程。 從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計,是一個逐漸擴(kuò)充模型的過程?;蛘哒f,面向?qū)ο笤O(shè)計就是用面向?qū)ο笥^點建立求解域模型的過程。1. 發(fā)展過程_I1) 早期的OOD(80年代至90年代初)1982 年G. Booch發(fā)表“Object-Oriented Design” ,首次稱“面向?qū)ο蟮脑O(shè)

17、計”。1986 年發(fā)表“Object-Oriented Development”,較完整地闡述了OOD思想。 兩個術(shù)語都用OOD作為縮寫,內(nèi)容上也沒有根本區(qū)別。 1983年R. J. Abbott提出正文分析方法,用規(guī)范的英語描述對一個問題的解釋,然后從描述中提取對象及其特征。例:名詞對象,動詞操作。被后來的許多OOD方法所采用。1. 發(fā)展過程_II1986年后,相繼出現(xiàn)了一批(早期的)OOD方法。如:Booch86Object-Oriented Development(面向?qū)ο蟮拈_發(fā))GOODGeneral Object-Oriented Development(通用面向?qū)ο蟮拈_發(fā))HOOD

18、Hierarchical Object-Oriented Design(層次式面向?qū)ο蟮脑O(shè)計)OOSDObject-Oriented Structured Design(面向?qū)ο蟮慕Y(jié)構(gòu)設(shè)計)1. 發(fā)展過程_III2) 現(xiàn)今的OOD(90年代以后)特點:以面向?qū)ο蟮姆治鰹榛A(chǔ),一般不依賴結(jié)構(gòu)化分析。與相應(yīng)的OOA方法共同構(gòu)成一種OOA&D方法體系。OOA和OOD采用一致的概念與原則,但屬于軟件生命周期的不同階段,有不同的目標(biāo)及策略。較全面地體現(xiàn)面向?qū)ο蠓椒ǖ母拍钆c原則。大多數(shù)方法獨立于編程語言,通過面向?qū)ο蟮姆治雠c設(shè)計所得到的系統(tǒng)模型可以由不同的編程語言實現(xiàn)。2. 定義 面向?qū)ο蟮脑O(shè)計(OOD)

19、就在是OOA模型基礎(chǔ)上運用面向?qū)ο蠓椒ㄟM(jìn)行系統(tǒng)設(shè)計,目標(biāo)是產(chǎn)生一個符合具體實現(xiàn)條件的OOD模型。OOD與OOA、OOP關(guān)系: OOD是OO軟件工程中承前啟后的中間環(huán)節(jié)往前OOA(全部用OO概念建模)往后OOP(用OOPL支持的OO概念編程) OOD使用與OOA和OOP一致的概念建立完整的、可實現(xiàn)的系統(tǒng)設(shè)計模型。OOA與OOD的目標(biāo)、內(nèi)容OOA主要內(nèi)容是研究問題域和用戶需求,運用面向?qū)ο蟮挠^點和原則發(fā)現(xiàn)問題域中與系統(tǒng)責(zé)任有關(guān)的對象,以及對象的特征和相互關(guān)系。目標(biāo)是建立一個直接映射問題域,符合用戶需求的OOA模型。OOD主要內(nèi)容是以O(shè)OA模型為基礎(chǔ),按照實現(xiàn)的要求進(jìn)行設(shè)計決策,包括全局性的決策和局

20、部細(xì)節(jié)的設(shè)計。目標(biāo)是產(chǎn)生一個滿足用戶需求,并且完全可實現(xiàn)的OOD模型。全局性設(shè)計決策:體系結(jié)構(gòu)、分布方案、并發(fā)控制、人機(jī)交互、數(shù)據(jù)管理等。OOD方法應(yīng)支持用戶以O(shè)O概念表達(dá)對這些問題的設(shè)計。局部細(xì)節(jié)的設(shè)計:對每個對象類的每個屬性和每個服務(wù)給出詳細(xì)的定義。3. 設(shè)計內(nèi)容 通常,一個實用的軟件系統(tǒng)在邏輯上由問題域子系統(tǒng)、人機(jī)交互子系統(tǒng)、任務(wù)管理子系統(tǒng)和數(shù)據(jù)管理子系統(tǒng)等四大部分組成。針對上述四個部分,在OOD中進(jìn)行以下四個相應(yīng)的活動:設(shè)計問題域部分;設(shè)計人機(jī)交互部分的;設(shè)計任務(wù)管理部分;設(shè)計數(shù)據(jù)管理部分。4. 設(shè)計準(zhǔn)則_I模塊化 面向?qū)ο筌浖_發(fā)模式,很自然的支持了把系統(tǒng)分解成模塊的設(shè)計原則:對象就

21、是模塊。抽象 面向?qū)ο蠓椒ú粌H支持過程抽象,而且支持?jǐn)?shù)據(jù)抽象。類實際上是一種抽象數(shù)據(jù)數(shù)據(jù)類型。信息隱藏 在面向?qū)ο蠓椒ㄖ?,信息隱藏通過對象的封裝性實現(xiàn):類結(jié)構(gòu)分離了接口與實現(xiàn),從而支持了信息隱藏。弱耦合 在面向?qū)ο蠓椒ㄖ?,耦合主要指不同對象之間相互關(guān)聯(lián)的緊密程度。 一般說來,對象之間的耦合可分為以下兩類:交互耦合:對象之間的耦合通過消息來實現(xiàn),則這種耦合就是交互耦合。繼承耦合:繼承是一般化類與特殊類之間耦合的一種形式。 在面向?qū)ο笤O(shè)計時,應(yīng)盡量降低交互耦合的程度,提高繼承耦合程度。4. 設(shè)計準(zhǔn)則_II 為使交互耦合盡可能松散,應(yīng)該遵守下述準(zhǔn)則:1) 盡量降低消息連接的復(fù)雜程度。即減少消息中包含

22、的參數(shù)個數(shù),降低參數(shù)的復(fù)雜程度。2) 減少對象發(fā)送/接收的消息數(shù)。4. 設(shè)計準(zhǔn)則_III5) 強內(nèi)聚 在OOD中存在以下3種內(nèi)聚:服務(wù)內(nèi)聚:一個服務(wù)應(yīng)該完成一個且僅完成一個功能。類內(nèi)聚:一個類應(yīng)該只有一個用途。一般特殊內(nèi)聚:設(shè)計出的一般特殊結(jié)構(gòu)應(yīng)該是對相應(yīng)領(lǐng)域知識的正確抽取,應(yīng)該符合多數(shù)人的概念。 在設(shè)計時應(yīng)該力求做到高內(nèi)聚。4. 設(shè)計準(zhǔn)則_IV可重用 重用有兩方面的含義:一是盡量使用已有的類(包括開發(fā)環(huán)境提供的類庫,以及以往開發(fā)類似系統(tǒng)時創(chuàng)建的類);二是如果確實需要創(chuàng)建新類,則在設(shè)計這些新類的協(xié)議時,應(yīng)該考慮將來的重復(fù)使用性。OOD模型從兩個側(cè)面來描述人機(jī)交互部分?jǐn)?shù)據(jù)接口部分控制接口部分問題

23、域部分從一個側(cè)面觀察OOD模型包括:一個核心部分+幾個外圍部分交 互 圖主 題 圖類 圖詳 細(xì) 說 明從另一側(cè)面觀察OOD模型采用OOA的概念及 模型組織方式1.3.3 面向?qū)ο髮崿F(xiàn)1. 基本任務(wù)把面向?qū)ο笤O(shè)計的結(jié)果翻譯成用某種面 向?qū)ο蟪绦蛘Z言書寫的面向?qū)ο蟪绦?。測試和調(diào)試編寫出的面向?qū)ο蟪绦颉?程序的質(zhì)量主要由設(shè)計的質(zhì)量決定,應(yīng)該將大量的時間花在系統(tǒng)分析與設(shè)計上,但是所選用的程序語言的特點對程序質(zhì)量也有重要影響。2. 面向?qū)ο笳Z言的選擇面向?qū)ο笳Z言可以分為兩類:純面向?qū)ο笳Z言。例如:Java,C#,Smalltalk, Eiffel等。混合型面向?qū)ο笳Z言(即在過程語言的基礎(chǔ)上增加面向?qū)ο髾C(jī)

24、制)例如:C+。選擇面向?qū)ο笳Z言或工具的原則計算模式:C/S或B/S運行平臺:PC/嵌入式系統(tǒng)/SmartDevice/otherOS平臺:Windows/Linux/嵌入式OS/other時間、空間需求可參考的資源語言或工具的功能、類庫、配置、發(fā)布語言或工具未來的發(fā)展前景開發(fā)人員的基礎(chǔ)項目的未來前景等等 一個面向?qū)ο蟮腃+程序?qū)嵗?. 需求陳述(一個簡單圖形程序的需求): 在顯示器熒光屏上圓心坐標(biāo)為(100,100)的位置上,畫一個半徑為40的圓,在圓心坐標(biāo)為(200,300)的位置上,畫一個半徑為20的圓,在圓心坐標(biāo)為(400,150)的位置上,畫一條弧,弧的起始角度為30,結(jié)束角度為12

25、0,半徑為50。2. 面向?qū)ο蠓治龃_定對象 使用“語法分析”方法,在需求陳述中包含的名詞或名詞短語是對象的候選者,它們有下列一些: 顯示器熒光屏,圓心坐標(biāo),位置,半徑,圓,弧,起始角度,結(jié)束角度。分析:“顯示器熒光屏”是一種輸出設(shè)備,是運行程序的物質(zhì)基礎(chǔ)(硬件平臺),應(yīng)該從候選對象中刪去?!皥A心坐標(biāo)”和“半徑”實質(zhì)上是圓和弧的基本屬性,并不需要獨立存在,因此也應(yīng)該從候選者中刪去?!拔恢谩睂嶋H上是指圓心的位置,也就是圓心坐標(biāo),沒必要重復(fù)列出?!捌鹗冀嵌取焙汀敖Y(jié)束角度”實質(zhì)上是弧的屬性,也應(yīng)該從候選者中刪去。結(jié)論: 最后得出的是圓(Circle)和弧(Arc)兩類對象。圓的兩個基本屬性是圓心坐標(biāo)和

26、半徑?;〉幕緦傩杂袌A心坐標(biāo),半徑,起始角度和結(jié)束角度。分析: 由于不可能在需求陳述中找到所有屬性,還必須借助領(lǐng)域知識和常識,才能分析得出所需要的全部屬性。因此,圓和弧都應(yīng)該再增加一個屬性可見性。 確定屬性 確定服務(wù) 在分析階段可以認(rèn)為,每個屬性都是可以訪問的。所謂可以訪問是指提供了訪問對象屬性的對外接口。(由對象主動地向外界提供服務(wù))分析: 由這個程序應(yīng)完成的功能可知,圓和弧都應(yīng)該提供在熒光屏上“畫自己”的服務(wù)。相應(yīng)地也應(yīng)該提供“隱藏自己”這樣一個服務(wù)。 結(jié)論: 圓和弧分別有各自的屬性和服務(wù),如下圖所示。圓心坐標(biāo)半徑可見性讀/寫圓心坐標(biāo)讀/寫半徑讀/寫可見性顯示隱藏圓圓心坐標(biāo)半徑起始角度結(jié)束

27、角度可見性讀/寫圓心坐標(biāo)讀/寫半徑讀/寫起始角度讀/寫結(jié)束角度讀/寫可見性顯示隱藏弧3. 面向?qū)ο笤O(shè)計_I建立類等級 面向?qū)ο蟪绦虻囊粋€突出優(yōu)點來源于繼承性。應(yīng)該盡量抽取出相似類的公共屬性和公共服務(wù),以建立這些相似類的父類,并在類等級的適當(dāng)層次中正確地定義各個屬性和服務(wù)。簡單圖形程序的對象模型如下圖(為簡明起見,圖中沒有列出讀寫屬性值的常規(guī)服務(wù))。位置坐標(biāo)點可見性顯示隱藏圓半徑顯示隱藏弧起始角度結(jié)束角度顯示隱藏3. 面向?qū)ο笤O(shè)計_II定義屬性 所謂定義屬性就是要確定每個屬性的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu),同時還要確定每個屬性的訪問權(quán)限(通常被定義在保護(hù)部分或私有部分)。定義服務(wù) 實現(xiàn)“顯示”服務(wù)的算法概

28、括來說就是,把“可見性”屬性設(shè)置為true,然后調(diào)用相應(yīng)的庫函數(shù)用當(dāng)前的前景顏色畫出所要的圖形。4. 面向?qū)ο髮崿F(xiàn)_I圓類的定義class Circle :public Point protected: int Radius; public: Circle (int InitX,int InitY,int InitRadius); void Show( ); void Hide( ); int GetRadius( );Circle:Circle(int InitX,int InitY, int InitRadius):Point(InitX,InitY)Radius = InitRadius

29、;void Circle:Show()Visible = true;circle(X,Y,Radius);4. 面向?qū)ο髮崿F(xiàn)_II4. 面向?qū)ο髮崿F(xiàn)_IIIvoid Circle:Hide()int TempColor;TempColor = getcolor();setcolor(getbkcolor();Visible = false;circle(X,Y,Radius);setcolor(Tempcolor);int Circle:GetRadius()return Radius; 5. 小結(jié) 用面向?qū)ο蟪绦蛟O(shè)計方法,解決一個簡單的實際工程的基本步驟如下:1) 面向?qū)ο蠓治觯?通過對用戶

30、需求的分析,合理地提取問題域中所涉及到類-&-對象。包括:這些類-&-對象中應(yīng)該包括哪些屬性和方法。2) 面向?qū)ο笤O(shè)計: 對分析中得到的準(zhǔn)確結(jié)果,設(shè)計出實現(xiàn)程序的方案。包括:建立類之間的繼承關(guān)系:根據(jù)對系統(tǒng)中共性和個性的劃分建立類等級即類之間的繼承關(guān)系(提取公共的屬性和服務(wù)以建立父類)定義屬性:確定屬性的數(shù)據(jù)類型及訪問權(quán)限。定義服務(wù):確定實現(xiàn)服務(wù)的準(zhǔn)確算法以及清晰的接口。3)面向?qū)ο髮崿F(xiàn):選擇一種合適的編程語言,實現(xiàn)上述設(shè)計。1.3.4 Form C - C+C+是C語言的超集,增加了面向?qū)ο蟛糠郑荗OP的第一個大眾化版本。C+語言具有下列主要特點: C+完全兼容C。大多數(shù)的C語言代碼略作修

31、改或不修改就可在C+的集成環(huán)境下運行。 C+作為一種面向?qū)ο蟮某绦蛟O(shè)計語言。 用C+設(shè)計的程序擴(kuò)充性強。C+在面向?qū)ο蟮某绦蛟O(shè)計語言方面獲得主導(dǎo)地位,很大程度上是由于它繼承了C語言的主要特征,再加上它加強了數(shù)據(jù)類型的檢查機(jī)制,引入了類的概念等。從C+的名字可以看出它是C的超集。C+既可用于面向過程的結(jié)構(gòu)化程序設(shè)計,又可用于面向?qū)ο蟮某绦蛟O(shè)計,是一種功能強大的混合型的程序設(shè)計語言。1 C+程序的基本框架/ This is a simple C+ program.#include using namespace std;int main()coutThis is a simple C+ progr

32、am.endl; return 0;2 C+數(shù)據(jù)類型 C+的基本數(shù)據(jù)類型有整型(int)、字符型(char)、浮點型(float、double)、布爾型(bool)、空類型(void)等類型。void為無值型 : void show(); int show (void)C+的構(gòu)造數(shù)據(jù)類型是由基本數(shù)據(jù)類型構(gòu)造而成的。C+語言中的構(gòu)造數(shù)據(jù)類型有:數(shù)組、指針、枚舉、引用、結(jié)構(gòu)體、聯(lián)合、類。2.1指針變量的指針就是變量的地址。存放變量地址的變量是指針變量,用來指向另一個變量。為了表示指針變量和它所指向的變量之間的聯(lián)系,在程序中用“*”符號表示“指向”。符號“*”稱為指針運算符。定義指針變量的一般形式為

33、:基類型 * 指針變量名例如:int *i_pointer;float *f_pointer;在使用指針之前,一定要先使指針有明確的指向。那么,怎樣使一個指針變量指向另一個變量呢?可以使用如下的賦值語句。例如:int * i_pointer1,* i_pointer2;int i,j;i_pointer1=&i;i_pointer2=&j;其中,“&”是地址運算符,&i就是取變量i在內(nèi)存中的地址。指針變量的引用在定義了指針變量并明確了它的指向后,就可以使用指針變量了。利用指針變量,提供了一種對變量的間接訪問形式。對指針變量的引用形式為:*指針變量其含義是指針變量所指向的值。指針變量作函數(shù)的參數(shù)

34、函數(shù)的參數(shù)不僅可以是整型、實型、字符型等數(shù)據(jù),還可以是指針類型。它的作用是將個變量的地址傳送到另一個函數(shù)中。由于被調(diào)用函數(shù)中獲得了所傳遞變量的地址,因此在該地址空間的數(shù)據(jù)當(dāng)函數(shù)調(diào)用結(jié)束后被物理地保留下來。2.2引用引用是C+語言中對一個變量或常量標(biāo)識符起的別名。例如,已經(jīng)定義了一個變量val,然后再建立一個對這個變量的引用rval,就為變量val起了一個別名,val和rval就是指的同一個變量,它們的使用方式也完全一樣。說明一個引用的方式如下:int val; / 定義vaL是整型變量int &rval= val; /聲明rvaL是val的引用說明一個引用時,在引用標(biāo)識符的前面加上“&”,后面

35、跟上它所引用的標(biāo)識符的名字。當(dāng)編譯程序看到時,就不為其后面的標(biāo)識符分配內(nèi)存空間,而只是簡單地將它所引用的那個標(biāo)識符所具有的內(nèi)存空間賦給它。 引用的作用:1-引用作函數(shù)參數(shù)引用在一般場合是沒有什么用途的,單純?yōu)橐粋€變量取個別名也沒有什么意義。引用最大的用途是作為函數(shù)的參數(shù)或返回值類型,從而擴(kuò)充函數(shù)傳遞數(shù)據(jù)的功能。我們知道,引用是它所引用的變量的一個別名,它們實際上是同一回事。因此,當(dāng)函數(shù)的形參是引用類型時,它實際上是對實參所代表的變量的引用,它自己不具有獨立的內(nèi)存空間。這種實參傳遞給形參的方式稱為按引用傳遞。例6-16 利用“引用形參”實現(xiàn)兩個變量的值的互換2-引用返回值返回引用值的函數(shù)在一般情

36、形下并不多見,但是如果需要讓函數(shù)調(diào)用作為左值時,就需要將函數(shù)返回值設(shè)計為是引用類型。函數(shù)的返回值為引用類型表示該函數(shù)的返回值是一個內(nèi)存變量的別名??梢詫⒑瘮?shù)調(diào)用作為一個變量來使用,可以為其賦值。例6-18 定義了一個求兩個數(shù)中最小值的函數(shù),函數(shù)的參數(shù)是兩個整型變量返回值是對這兩個數(shù)中值較小的那個變量的引用。2.3常變量(const變量)C+中使用const修飾符來定義常量。const可以與指針一起使用,它們的組合情況較復(fù)雜,可歸納為三種:指向常量的指針、常指針和指向常量的常指針。1指向常量的指針指向常量的指針是指一個指向常量的指針變量。在指針定義語句的類型前加const修飾符,表示指向的對象是

37、常量。例如: const char *namechen; / 聲明指向常量的指針這個語句的含義為:聲明一個名為name的指針變量,它指向一個字符型常量,初始化name為指向字符串“chen”。2常指針常指針是指把指針本身是聲明為常量,而不是將它指向的對象聲明為常量。在指針定義語句的指針名前加const修飾符,表示指針本身是常量。例如: char * const name=chen; / 常指針這個語句的含義為:聲明一個名為name的指針常量,該指針是指向字符型數(shù)據(jù)的常指針,用字符串常量“chen”的地址初始化該常指針。3指向常量的常指針指向常量的常指針是指這個指針本身不能改變,它所指向的值也不

38、能改變。要聲明個指向常量的常指針,二者都要聲明為const,并且必須在定義時進(jìn)行初始化。例如: const char * const namechen; /指向常量的常指針這個語句的含義是:聲明了一個名為name的指針常量,它是一個指向字符型常量的常指針,用字符串常量chen的地址初始化該指針。 2.4定義變量初值定義變量的一般形式為:變量類型 變量名表列;變量賦初值C+語言允許在定義變量的同時使變量初始化。如:int a=1; / 指定 a為整型變量,初值為 1float pi=3.1415; / 指定 pi為單精度浮點型變量,初值為 3.1415也可以使被定義的變量的一部分賦初值。如int

39、 a,b,c1; / 表示指定a、b、c為整型變量,只對c初始化,c的初值為1如果對幾個變量賦予同一個初值,不能寫成int a=b=c=1; 而應(yīng)寫成int a=1,b=1,c=1;可在程序中隨意定義變量char *name(“Smith”)for(int i(0); i6; i+);2.5 C+的運算符new 動態(tài)內(nèi)存分配delete 回收new分配的內(nèi)存動態(tài):域作用符: 對數(shù)據(jù)成員和成員函數(shù)的限定3. c+中的new/delete取代 malloc/free new/delete有什么好處?malloc/free只是對內(nèi)存進(jìn)行分配和釋放; new/delete還負(fù)責(zé)完成了創(chuàng)建和銷毀對象的任

40、務(wù)。另外,new的安全性要高一些,因為new返回的就是一個所創(chuàng)建的對象的指針,對于malloc來說返回的則是void*,還要進(jìn)行強制類型轉(zhuǎn)換,這是一個危險的漏洞。最后,我們可以對new/delete重載,使內(nèi)存分配按照我們的意愿進(jìn)行,這樣更具有靈活性,malloc則不行。new的使用:type * p = new typetype * p = new type(初值)type * p = new type數(shù)組大小int *p=new int;int *p=new int(50);int *p=new int10;std:string *stringPtr1 = new std:string;

41、std:string *stringPtr2 = new std:string100; delete的使用:delete stringPtr1; / 刪除一個對象 delete stringPtr2; / 刪除一個對象數(shù)組NOTEnew創(chuàng)建的內(nèi)存空間必須由delete回收new創(chuàng)建內(nèi)存空間不成功返回NULL指針(0)int *p=new int10;if (p=0) cout “Run out of memory”c+標(biāo)準(zhǔn)庫與Namespace C+標(biāo)準(zhǔn)庫很大:在C+標(biāo)準(zhǔn)中,關(guān)于標(biāo)準(zhǔn)庫的規(guī)格說明占了密密麻麻300多頁,這還不包括標(biāo)準(zhǔn)C庫,后者只是 作為參考包含在C+庫中。C+庫并非提供了一切(

42、很明顯的是,沒有提供并發(fā)和圖形用戶接口的支持),但確實提供了很多。幾乎任何事你都可以求助于它。標(biāo)準(zhǔn)庫組織因為標(biāo)準(zhǔn)庫中東西如此之多,你所選擇的類名或函數(shù)名就很有可能和標(biāo)準(zhǔn)庫中的某個名字相同。為了避免這種情況所造成的名字沖突,實際上標(biāo)準(zhǔn)庫中的一切都被放在名字空間std中。 具體組織情況:1-文件名稱:早期C+標(biāo)準(zhǔn)庫放在,等頭文件中后來的C+標(biāo)準(zhǔn)庫引入namespace:為包裝在std的那部分標(biāo)準(zhǔn)庫創(chuàng)建新的頭文件名。生成新頭文件的方法僅僅是將現(xiàn)有C+頭文件名中的 .h 去掉。所以變成了,變成了,等等。對于C頭文件,采用同樣的方法,但在每個名字前還要添加一個c。所以C的變成了,變成了,等等。實際來說,下面是C+頭文件的現(xiàn)狀: 舊的C+頭文件名如將會繼續(xù)被支持,盡管它們不在官方標(biāo)準(zhǔn)中。這些頭文件的內(nèi)容不在名字空間std中。 新的C+頭文件如包含的基本功能和對應(yīng)的舊頭文件相同,但頭文件的內(nèi)容在名字空間std中。(在標(biāo)準(zhǔn)化的過程中,庫中有些部分的細(xì)節(jié)被修改了,所以舊頭文件和新頭文件中的實體不一定完全對應(yīng)。) 標(biāo)準(zhǔn)C頭文件如繼續(xù)被支持。頭文件的內(nèi)容不在std中。 具有

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論