3面向?qū)ο蟪绦蛟O(shè)計概述_第1頁
3面向?qū)ο蟪绦蛟O(shè)計概述_第2頁
3面向?qū)ο蟪绦蛟O(shè)計概述_第3頁
3面向?qū)ο蟪绦蛟O(shè)計概述_第4頁
3面向?qū)ο蟪绦蛟O(shè)計概述_第5頁
已閱讀5頁,還剩114頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章面向?qū)ο蟪绦蛟O(shè)計概述3.1類與對象3.2消息和方法3.3什么是面向?qū)ο蟪绦蛟O(shè)計3.4數(shù)據(jù)抽象3.5封裝性和信息隱藏3.6繼承性與軟件重用3.7多態(tài)性3.8面向?qū)ο蟮某绦蛟O(shè)計語言3.9面向?qū)ο蟮能浖こ?.1類與對象3.1.1對象3.1.2類3.1.3對象與類的關(guān)系對象什么是對象(object)?現(xiàn)實世界中的任何一個事物都可以看成是一個對象。自然的實體:一個人,一輛汽車,一個教師抽象的邏輯結(jié)構(gòu):一個銀行帳號,一個學生的學籍檔案一條客戶通信錄對象的廣義定義和特性對象是人們要研究的任何事物,其特性是:1、每一個對象必須有一個名字以區(qū)別于其它對象;2、用屬性(或叫狀態(tài))來描述它的某些特征;3、有一組操作,每一個操作決定對象的一種行為。舉例例如,教師張三是一個對象。對象名是:張三對象的屬性:職稱:副教授;學位:博士;專業(yè):微生物;出生日期:1963年10月1日;對象的操作:授課;做實驗;報出自己的名字;面向?qū)ο蟮南到y(tǒng)中的對象對象是基本的運行時實體,它既包含數(shù)據(jù)(屬性),也包括作用于數(shù)據(jù)的操作(行為)。一個對象把屬性和行為封裝成一個整體。從程序設(shè)計者來看,對象是一個程序模塊;從用戶來看,對象為他們提供了所希望的行為。例如,圖形用戶界面上的一個按鈕或一個文本框就是一個對象。什么是類?人類水果類魚類“類”是對一組具有共同屬性特征和行為特征的對象的抽象。什么是類?在C++語言中,一個類是一個新的數(shù)據(jù)類型。在新的數(shù)據(jù)類型中,既包含數(shù)據(jù)又包含對數(shù)據(jù)的操作。一個類所包含的操作和數(shù)據(jù)描述一組對象的共同行為和屬性。OOP中類的例子classStudent{

intnumber; char*name; floatscore;public:

Student(intnumber1,char*name1,floatscore1); ~Student(); voidmodify(floatscore1); voidprint();};屬性操作

類的確定和劃分

類的確定與劃分非常重要,是軟件開發(fā)中的關(guān)鍵環(huán)節(jié),科學合理地劃分將有效提高程序質(zhì)量和代碼的可重用性?;驹瓌t

將系統(tǒng)中具有共性的部分確定為一個類。分類所依據(jù)的基本原則是抽象,即忽略事物的非本質(zhì)特征,只注意那些與當前目標有關(guān)的本質(zhì)特征,從而找出同類事物的共性,把具有共同性質(zhì)的事物劃分為一類。類的確定和劃分另外,還要知道什么事物不能被劃分為類。不能把一組函數(shù)組合在一起構(gòu)成類,也就是說,不能把面向過程的若干個函數(shù)簡單組合變成類,類不是函數(shù)的集合。對象與類的關(guān)系類是對一組性質(zhì)相同的對象的描述。對象則是類的具體化,是類的實例。例如:“學生”是一個類,是對所有學生個體的共同特征的描述,張三、李四等學生個體則是學生類的實例。第3章面向?qū)ο蟪绦蛟O(shè)計概述3.1類與對象3.2消息和方法3.3什么是面向?qū)ο蟪绦蛟O(shè)計3.4數(shù)據(jù)抽象3.5封裝性和信息隱藏3.6繼承性與軟件重用3.7多態(tài)性3.8面向?qū)ο蟮某绦蛟O(shè)計語言3.9面向?qū)ο蟮能浖こ滔essage對象之間通過消息進行交互。消息是要求某個對象執(zhí)行某個功能操作的規(guī)格說明。OOP中的一條消息由消息名(“消息操作”或“消息選擇器”)及若干個參數(shù)和接受消息的對象三部分組成,例如:Studentstudent1;student1.modify(score1);消息的例子接受消息的對象參數(shù)↓↓student1.modify(score1);

消息名消息的性質(zhì)同一對象可接收不同形式的多個消息,產(chǎn)生的響應(yīng)各不相同;相同形式的消息可以送給不同的對象,產(chǎn)生的響應(yīng)各不相同;一個對象可以立即響應(yīng)發(fā)送給它的消息,也可以暫時不響應(yīng)消息。消息的分類:要求返回對象內(nèi)部屬性(狀態(tài))的消息;要求改變對象內(nèi)部屬性(狀態(tài))的消息;要求改變系統(tǒng)狀態(tài)的消息,或產(chǎn)生特定結(jié)果的消息。

面向?qū)ο筌浖到y(tǒng)中,程序的執(zhí)行取決于事件發(fā)生的順序,完全由所產(chǎn)生的消息來驅(qū)動程序的執(zhí)行,無須預(yù)先確定消息產(chǎn)生的順序,因而更符合客觀世界的實際情況。發(fā)送消息與函數(shù)調(diào)用的比較1)消息中必須包含接收消息的對象,而一般的函數(shù)調(diào)用不需要指明對象。2) 消息名告訴對象應(yīng)做些什么,類似于函數(shù)名,但二者之間的本質(zhì)差別在于:函數(shù)名僅僅代表一段可執(zhí)行的代碼,其功能是固定的;而消息名對應(yīng)的具體功能的實現(xiàn)取決于所接收消息的對象。盡管消息名相同,如果接收消息的對象不同,可能有不同的響應(yīng)。方法(method)“方法”對應(yīng)于對象的行為(能力),它是實現(xiàn)對象所具有的功能操作的代碼段。在C++程序中,方法即是類中定義的成員函數(shù),它是該類對象所能執(zhí)行的操作的算法實現(xiàn)。通常每個類中包含多個方法(即成員函數(shù)),每個方法由方法名(函數(shù)名+參數(shù)表)和說明該成員函數(shù)的算法實現(xiàn)的一段代碼所組成。方法的例子voidStudent::print(){

cout<<”number:”<<number<<”name:”<<name<<”score:”<<score<<’\n’;}消息通過調(diào)用對象的方法來完成其功能,例如:student1.print();第3章面向?qū)ο蟪绦蛟O(shè)計概述3.1類與對象3.2消息和方法3.3什么是面向?qū)ο蟪绦蛟O(shè)計3.4數(shù)據(jù)抽象3.5封裝性和信息隱藏3.6繼承性與軟件重用3.7多態(tài)性3.8面向?qū)ο蟮某绦蛟O(shè)計語言3.9面向?qū)ο蟮能浖こ坛绦蛟O(shè)計方法的發(fā)展過程1946~1957:面向機器的程序設(shè)計1957~1972:面向過程的程序設(shè)計1968~1990:面向過程的結(jié)構(gòu)化程序設(shè)計1984~今:面向?qū)ο蟮某绦蛟O(shè)計程序設(shè)計方法的發(fā)展過程(續(xù))1990~今:面向組件的程序設(shè)計(component-orientedprogramming,COP,例如DCOM,CORBA,andJavaBeans)1994~今:面向服務(wù)的程序設(shè)計(serviceorientationprogramming)COP大型軟件系統(tǒng)是由許多組件(Component)構(gòu)成的,每個組件實現(xiàn)一組功能,對外提供一組服務(wù)接口。組件的粒度可大可小,可以只包含一個類,也可以由多個類組成。組件通常運行在容器中,容器負責組件的初始化、配置和銷毀等。組件符合一定的通用規(guī)范,例如EJB,DCOM,CORBA。面向服務(wù)的程序設(shè)計軟件由一組可互操作的服務(wù)組合而成。這些服務(wù)既可以靈活組合在一起,也可以單獨運行。服務(wù)之間通過定義良好的接口和契約聯(lián)系起來。接口是采用中立的方式進行定義的,它應(yīng)該獨立于實現(xiàn)服務(wù)的操作系統(tǒng)和編程語言。服務(wù)的使用者通常使用一種代理機制來找到服務(wù)提供者,因此它們之間是松耦合的。面向服務(wù)的程序設(shè)計主要是考慮如何把服務(wù)拆分開發(fā),如何把服務(wù)組合運行。選擇目的地:天氣預(yù)報:匯率:飛機票價:雨Redmond$1.56$1,999.98Northwind

商務(wù)旅游網(wǎng)XMLWebService應(yīng)用案例Internet天氣預(yù)報

XMLWebService匯率XMLWebService飛機票價數(shù)據(jù)庫飛機票價XMLWebService結(jié)構(gòu)化程序設(shè)計的基本思想按功能劃分模塊,分而治之。分解系統(tǒng)時按照自頂向下的順序,逐步求精。設(shè)計時使各模塊間的關(guān)系盡可能簡單,功能上相對獨立,從而可單獨驗證模塊的正確性。

結(jié)構(gòu)化程序的組成

主控模塊功能模塊1功能模塊7功能模塊2功能模塊3功能模塊6功能模塊5功能模塊4圖3.3結(jié)構(gòu)化程序的組成結(jié)構(gòu)化程序設(shè)計方法的基本特點把數(shù)據(jù)結(jié)構(gòu)和處理數(shù)據(jù)的操作過程分離為相互獨立的實體。用數(shù)據(jù)表達實際問題中的信息;程序代碼則實現(xiàn)用于處理加工這些數(shù)據(jù)的算法。簡而言之,就是數(shù)據(jù)和操作代碼分離。

數(shù)據(jù)和操作代碼分離產(chǎn)生的問題給程序員增加了負擔:必須確保數(shù)據(jù)和代碼匹配。當數(shù)據(jù)結(jié)構(gòu)改變時,所有相關(guān)的處理過程都要進行相應(yīng)的修改??删S護性差。沒有數(shù)據(jù)保護機制,所以在程序中常常由于某些數(shù)據(jù)被無意中修改而造成一些十分隱蔽的錯誤。面向?qū)ο蟪绦蛟O(shè)計用程序中的對象直接模擬現(xiàn)實世界中的對象,將問題空間直接映射到軟件空間。從而設(shè)計出盡可能直接、自然地表示問題求解方法的軟件。它把求解問題中客觀存在的事物看作各自不同的對象,再把具有相同特性的一些對象歸屬為一個類。面向?qū)ο蟮倪@種設(shè)計方式符合人類的自然思維習慣,使我們能夠在程序中自然地描述現(xiàn)實世界的實體和問題,增強了程序代碼的可讀性,有利于控制軟件的復(fù)雜性。模塊化將一個復(fù)雜的大規(guī)模軟件系統(tǒng)劃分成若干個規(guī)模較小、相對簡單的模塊,即分而治之。面向?qū)ο蟪绦蛟O(shè)計方法是按對象來劃分,對象是基本的軟件模塊。面向?qū)ο蟮能浖到y(tǒng)由對象組成,對象之間通過消息傳遞互相聯(lián)系。面向?qū)ο蟮能浖到y(tǒng)的組成

對象1對象2對象3對象4圖中箭頭表示對象之間的消息傳遞對象作為程序模塊對象是由數(shù)據(jù)和對數(shù)據(jù)的操作(代碼)形成的一個整體。對象具有封裝性,使對象的內(nèi)部實現(xiàn)與外界隔離,實現(xiàn)了信息隱藏,從而提供了更理想的模塊化機制,顯著地減少了程序模塊間的相互干擾和依賴性。每一個模塊都是高度獨立的對象,使模塊間的關(guān)系更為簡潔清晰,有效降低了系統(tǒng)的復(fù)雜性,有利于大型復(fù)雜軟件的開發(fā)。數(shù)據(jù)抽象技術(shù)

面向?qū)ο蟪绦蛟O(shè)計采用數(shù)據(jù)抽象技術(shù),將具有相同特征的對象抽象成一個新的抽象數(shù)據(jù)類型——類。并且考慮不同對象之間的聯(lián)系,引入了類之間的繼承機制,為我們提供了十分理想的可重用性的軟件成分。面向?qū)ο蟪绦虻闹饕Y(jié)構(gòu)特點是:第一,程序一般由類的定義和類的使用兩部分組成,在主程序中定義各對象并規(guī)定它們之間傳遞消息的規(guī)律;第二,程序中的一切操作都是通過向?qū)ο蟀l(fā)送消息來實現(xiàn)的,對象接收到消息后,啟動有關(guān)方法完成相應(yīng)的操作。第3章面向?qū)ο蟪绦蛟O(shè)計概述3.1類與對象3.2消息和方法3.3什么是面向?qū)ο蟪绦蛟O(shè)計3.4數(shù)據(jù)抽象3.5封裝性和信息隱藏3.6繼承性與軟件重用3.7多態(tài)性3.8面向?qū)ο蟮某绦蛟O(shè)計語言3.9面向?qū)ο蟮能浖こ?抽象(Abstract)

抽象是指從具體的例子中抽出共同的性質(zhì),強調(diào)與目標系統(tǒng)有關(guān)的某些本質(zhì)特性,忽略與目標無關(guān)的非本質(zhì)特征,進行簡化描述的過程。簡單的說就是對實例進行分析,抽取出共同性質(zhì)。抽象包括兩個方面:數(shù)據(jù)抽象(對象屬性的描述)行為抽象(對象行為的描述)例:

學生對象的屬性和行為抽象性的例子classstudent{

intnumber; char*name; floatscore;public: student(intnumber1,char*name1,floatscore1); ~student(); voidmodify(floatscore1); voidprint();};抽象是有選擇地忽略。抽象性(Abstraction)抽象是對復(fù)雜的現(xiàn)實世界的簡明的表示。抽象強調(diào)了我們所關(guān)心的(感興趣)的信息,而將我們不關(guān)心的其他信息忽略。通過抽象,可形成抽象數(shù)據(jù)類型。抽象數(shù)據(jù)類型一個值集和作用在值集上的操作集

C++語言中的一個類就是一個抽象數(shù)據(jù)類型每個抽象數(shù)據(jù)類型自成一個模塊,模塊的接口和內(nèi)部實現(xiàn)分離開來,使用模塊的應(yīng)用程序員只需要知道如何使用該模塊,而不必知道模塊內(nèi)部是如何實現(xiàn)的,也就是說,可以忽略模塊內(nèi)部的實現(xiàn)細節(jié)。這樣就降低了軟件開發(fā)的復(fù)雜性。

第3章面向?qū)ο蟪绦蛟O(shè)計概述3.1類與對象3.2消息和方法3.3什么是面向?qū)ο蟪绦蛟O(shè)計3.4數(shù)據(jù)抽象3.5封裝性和信息隱藏3.6繼承性與軟件重用3.7多態(tài)性3.8面向?qū)ο蟮某绦蛟O(shè)計語言3.9面向?qū)ο蟮能浖こ?.5封裝性和信息隱藏所謂封裝(encapsulation)

,就是包含和隱藏對象信息,如內(nèi)部數(shù)據(jù)結(jié)構(gòu)和代碼的能力。在面向?qū)ο蟮某绦蛑校瑢ο笫侵С址庋b的元素。對象把一個實體的屬性和行為封裝成一個整體。從外部只能看到它提供的接口,而看不到其內(nèi)部的實現(xiàn)細節(jié)。類的封裝性類成員的存取權(quán)限分為:

private(私有的)protected(受保護的)public(公有的)private和protected的成員構(gòu)成了類的私有部分,實現(xiàn)了封裝。public的成員構(gòu)成了類的接口。信息隱藏(informationhiding)

信息隱藏(InformationHiding)的含義:有效的模塊化可以通過定義一組獨立模塊來實現(xiàn),這些模塊相互之間只交流軟件功能必需的信息。換句話說:

模塊所包含的信息,不允許其它不需要這些信息的模塊訪問,獨立的模塊間僅僅交換為完成系統(tǒng)功能而必須交換的信息。封裝的好處封裝性降低了程序設(shè)計的復(fù)雜度。

封裝將操作對象的內(nèi)部復(fù)雜性與應(yīng)用程序的其他部分隔離開來。應(yīng)用程序員只需要通過對象的接口來操作對象完成特定的任務(wù),而不需要知道對象內(nèi)部復(fù)雜的細節(jié)。

封裝的好處(續(xù))提高了代碼的安全性和可靠性;外部代碼不能訪問對象內(nèi)部的私有數(shù)據(jù),避免了對這些數(shù)據(jù)的非法操作。通過類實現(xiàn)封裝,集中和統(tǒng)一了對類中數(shù)據(jù)成員的所有操作,從而可避免因分散操作造成的錯誤。封裝的好處(續(xù))能有效提高軟件的可維護性;由于封裝,對象作為一個程序模塊,其內(nèi)部狀態(tài)不受外界干擾,也不會影響其它模塊。即模塊獨立性強,模塊間依賴性極小或者沒有。這樣,當修改軟件模塊時,大部分改動將局限在模塊內(nèi)部,不影響軟件的其他部分。同時,還可以大大縮短我們查找程序錯誤的時間。封裝的好處(續(xù))封裝也改善了程序模塊可重用性。封裝隱藏了模塊內(nèi)部的復(fù)雜性,提供給使用者一個簡單的接口。使得重用一個模塊變成一件相當容易的事情。面向?qū)ο蟪绦蛟O(shè)計的主要特征抽象性封裝性繼承性多態(tài)性第3章面向?qū)ο蟪绦蛟O(shè)計概述3.1類與對象3.2消息和方法3.3什么是面向?qū)ο蟪绦蛟O(shè)計3.4數(shù)據(jù)抽象3.5封裝性和信息隱藏3.6繼承性與軟件重用3.7多態(tài)性3.8面向?qū)ο蟮某绦蛟O(shè)計語言3.9面向?qū)ο蟮能浖こ?.6繼承性與軟件重用繼承性是面向?qū)ο蟪绦蛟O(shè)計的主要特征之一,繼承的目的就是為了重用(reuse)。

繼承,就是在一個已有的類的基礎(chǔ)上創(chuàng)建一個新類

,這個新類獲得了已有類的數(shù)據(jù)和操作代碼,并且新類可以增加新的數(shù)據(jù)和操作代碼。

繼承與派生問題舉例繼承繼承與派生的目的繼承實現(xiàn)了對父類的代碼重用,同時子類可以擴充新的屬性和功能,解決新的問題。繼承的好處(1)繼承性很好地實現(xiàn)了代碼的重用。(2)能改進軟件系統(tǒng)的可維護性。C++中類的繼承層次自然地表達了人們分析問題時所用的分類結(jié)構(gòu)。大大改善了軟件系統(tǒng)的可理解性和可維護性。

(3)繼承性使已有的程序庫具有清晰的層次結(jié)構(gòu)關(guān)系。便于程序代碼的管理和使用。第3章面向?qū)ο蟪绦蛟O(shè)計概述3.1類與對象3.2消息和方法3.3什么是面向?qū)ο蟪绦蛟O(shè)計3.4數(shù)據(jù)抽象3.5封裝性和信息隱藏3.6繼承性與軟件重用3.7多態(tài)性3.8面向?qū)ο蟮某绦蛟O(shè)計語言3.9面向?qū)ο蟮能浖こ?.7多態(tài)性廣義多態(tài)性:自然語言中的多態(tài)性;面向?qū)ο蟪绦蛟O(shè)計中的多態(tài)性什么是多態(tài)性?(廣義)polymorphism,“manyforms”:即多種形態(tài)在自然語言中,多態(tài)性即是“一詞多義”;更準確地說,多態(tài)性是指相同的動詞作用到不同類型的對象上,例如:

駕駛摩托車 駕駛汽車 駕駛飛機 駕駛輪船駕駛宇宙飛船什么是多態(tài)性?(OOP)當不同對象接收到相同的消息產(chǎn)生不同的動作,這種性質(zhì)稱為多態(tài)性。通俗地說,多態(tài)性是指用一個名字定義不同的函數(shù),這些函數(shù)執(zhí)行不同但又類似的操作,即用同樣的接口訪問功能不同的函數(shù),從而實現(xiàn)“一個接口,多種方法”。多態(tài)性的例子在C語言中,由于不支持多態(tài),求絕對值的動作要求三個不同的函數(shù)名字:

abs(),labs(),fabs()分別用來求整數(shù),長整數(shù)、浮點數(shù)的絕對值。在C++語言中,由于支持多態(tài),求絕對值的動作可以只用一個函數(shù)名:abs()多態(tài)性由重載(編譯時)或虛函數(shù)(運行時)來實現(xiàn)重載包括函數(shù)重載和運算符重載因此:多態(tài)分為兩類:編譯時的多態(tài):編譯時確定消息的具體操作對象,如函數(shù)重載和運算符重載。運行時的多態(tài):運行時才具體確定對象所屬類層次中的具體類,從而確定外部程序所發(fā)消息的匹配對象和匹配方法,如虛函數(shù)。應(yīng)用多態(tài)性的好處多態(tài)應(yīng)用于OOP的目的是允許用一個名字來指定一類動作(即邏輯上相似的動作)。從而帶來以下的好處:提高了處理問題的抽象級別;降低了程序設(shè)計時的復(fù)雜性;增強了軟件的靈活性。

多態(tài)性使得同一個屬性或行為在父類及其各派生類中具有不同的語義。從同一基類派生出的多個對象具有同一接口,因此能響應(yīng)同一格式的消息,但是響應(yīng)的方式可以因?qū)ο缶唧w類型的不同而不同,也就是說,每個對象可用適合自身的方式去響應(yīng)共同的消息。由此而帶來的好處是,使用這類對象提供的服務(wù)時,不必區(qū)分具體是哪種對象類型,只要發(fā)送相同的消息就可以了。

繼承性和多態(tài)性的組合,可以輕易生成一系列雖類似但獨一無二的對象。由于繼承性,這些對象共享許多相似的特征。但由于多態(tài)性,一個對象可以有獨特的表現(xiàn)方式,相對另一個對象有另一個表現(xiàn)方式。面向?qū)ο蟪绦蛟O(shè)計的優(yōu)越性重用性好:有利于軟件生產(chǎn)率的提高;符合人類的自然思維習慣,能夠自然地描述現(xiàn)實世界的實體和問題:有利于控制軟件的復(fù)雜性;更好的模塊化,便于多人分工和合作開發(fā)軟件;編寫的代碼有更好的可維護性;第3章面向?qū)ο蟪绦蛟O(shè)計概述3.1類與對象3.2消息和方法3.3什么是面向?qū)ο蟪绦蛟O(shè)計3.4數(shù)據(jù)抽象3.5封裝性和信息隱藏3.6繼承性與軟件重用3.7多態(tài)性3.8面向?qū)ο蟮某绦蛟O(shè)計語言3.9面向?qū)ο蟮能浖こ堂嫦驅(qū)ο蟪绦蛟O(shè)計語言應(yīng)該具備下述特征:支持對象的概念(包括對象所有的特性,如封裝等);要求對象屬于類;提供繼承機制非面向?qū)ο笳Z言

Fortran(50年代中期)

Algol(60年代)Pascal(68年

)Basic(64年)C語言(72年

DennisRitchie創(chuàng)建〕面向?qū)ο笳Z言Smalltalk(72年開始)C++(80年由Bell公司Stroustrup

創(chuàng)建)Java(95年由SUN

公司創(chuàng)建)

C#(2000年由微軟推出)面向?qū)ο蟮某绦蛟O(shè)計語言Smalltalk是第一個真正的面向?qū)ο蟪绦蛟O(shè)計語言,它是由美國的Xerox公司于1970年代初研制的。被認為是最純正最具代表性的面向?qū)ο蟪绦蛟O(shè)計語言。由于Smalltalk是基于Xerox的特定硬件平臺開發(fā)的,再加上它的動態(tài)聯(lián)編的解釋執(zhí)行機制而導(dǎo)致的低運行效率,使得該語言并沒有得到廣泛的應(yīng)用。面向?qū)ο蟪绦蛟O(shè)計語言的分類純面向?qū)ο蟪绦蛟O(shè)計語言:僅支持面向?qū)ο蠓椒ǖ能浖_發(fā),其中最具有代表性的語言是Java、Smalltalk和Eiffel?;旌闲兔嫦?qū)ο蟪绦蛟O(shè)計語言:對傳統(tǒng)語言進行面向?qū)ο蟪绦蛟O(shè)計的擴展,既支持面向?qū)ο蠓椒ǖ能浖_發(fā),也支持面向過程方法的軟件開發(fā),其最典型的代表是C++。C++語言允許使用類和對象。類是支持數(shù)據(jù)封裝的工具,對象是數(shù)據(jù)封裝的實現(xiàn)。類中成員有不同的訪問權(quán)限。C++語言對面向?qū)ο蟪绦蛟O(shè)計的支持1.支持封裝性C++語言支持面向?qū)ο蠓椒ㄖ械睦^承性,它不僅支持單繼承,而且支持多重繼承。繼承和封裝是衡量一種語言是否是面向?qū)ο蟮某绦蛟O(shè)計語言的兩個重要標準。2.支持繼承性

多態(tài)性是在繼承性基礎(chǔ)上的面向?qū)ο蠓椒ㄖ械闹匾匦灾?。①支持函?shù)重載和運算符重載。②支持虛函數(shù)和動態(tài)聯(lián)編。3.支持多態(tài)性C++、Java和C#C++是Java和C#的父語言。三者的語法幾乎是一樣的。C++適合在特定的操作系統(tǒng)上編寫高性能的程序。Java適合創(chuàng)建分布式網(wǎng)絡(luò)環(huán)境下跨平臺的可移植性的程序。C#是為微軟的.Net框架設(shè)計的,適合在.NET框架支持的網(wǎng)絡(luò)環(huán)境下編寫基于組件的代碼。第3章面向?qū)ο蟪绦蛟O(shè)計概述3.1類與對象3.2消息和方法3.3什么是面向?qū)ο蟪绦蛟O(shè)計3.4數(shù)據(jù)抽象3.5封裝性和信息隱藏3.6繼承性與軟件重用3.7多態(tài)性3.8面向?qū)ο蟮某绦蛟O(shè)計語言3.9面向?qū)ο蟮能浖こ?.9面向?qū)ο蟮能浖こ堂嫦驅(qū)ο蟮姆治觯∣bject-OrientedAnalysis,簡稱OOA)面向?qū)ο蟮脑O(shè)計(Object-OrientedDesign,簡稱OOD)面向?qū)ο蟮木幊蹋∣bject-OrientedProgramming,簡稱OOP)面向?qū)ο蟮臏y試(Object-OrientedTest,簡稱OOT)面向?qū)ο蟮能浖S護(Object-OrientedSoftwareMaintain,簡稱OOSM)面向?qū)ο蠓治鯫OA在采用面向?qū)ο蠓椒ㄩ_發(fā)軟件的過程中,抽取和整理用戶需求并建立問題域精確模型的過程叫面向?qū)ο蠓治觥7治鲭A段建立的模型叫做“分析模型”。1面向?qū)ο蠓治霾襟E確定類確定類屬性確定類方法確定對象模型(1)確定類 確定如何將現(xiàn)實世界的對象關(guān)系映射到計算機的虛擬世界中去,對于現(xiàn)實世界來說,對象可分為三類:實體和概念、人或角色、事件

需求分析得到的類包括可感知的實體和抽象的概念。可感知的實體如電腦、防盜門、出租車、茶杯、臺燈等,抽象的概念如學校校規(guī)、交通法規(guī)等。一個類主要包括類名、屬性和方法三部分。類可分為兩種:對象類(可創(chuàng)建對象實例的類)抽象類(不可創(chuàng)建對象實例的類)主要在繼承中使用,為子類定義統(tǒng)一的接口,使得不同的對象類統(tǒng)一在一個類族中。例如,圓、三角形、矩形等類繼承了“圖形”類。對于圓類來說,它的一個對象就是一個圓心明確,半徑固定,顏色清晰的圓。對于一個“圖形”類。如果產(chǎn)生它的一個實例,即用圖形類產(chǎn)生一個圖形,則我們無法準確描述具體它的特征,也就是說,不可能創(chuàng)建出沒有具體形狀的圖形對象,因此圖形類是抽象類。圓圓心位置半徑顏色移動選擇旋轉(zhuǎn)打印幾何圖形位置顏色移動選擇旋轉(zhuǎn)打印對象類抽象類(2)確定類的屬性類的屬性是類所具有的性質(zhì)、特征或狀態(tài)。通常,在分析階段不可能確定類的所有屬性,但在分析階段要確定每個類的基本屬性。類的屬性可分為兩種:一種稱做實例屬性,它是類中各對象實例具有不同屬性值的屬性項;另一種稱做類屬性,它是類的所有對象實例都具有相同屬性值的屬性項。(3)確定類的方法類的方法分為兩種:一種稱做常規(guī)性方法(或輔助性方法),主要包括設(shè)置對象屬性值方法和獲取對象屬性值方法等;另一種稱做功能性方法(或需求性方法),功能性方法反映了該類對象實例所具有的功能。確定類的方法主要是確定類的功能性方法。常規(guī)性方法通常在實現(xiàn)階段才具體考慮。(4)確定對象模型就是建立起對象之間的聯(lián)系方式。模型人們對現(xiàn)實世界中復(fù)雜事物以及這些事物之間關(guān)系的抽象的、可視化的表示。人們把握復(fù)雜事物及事物之間關(guān)系本質(zhì)、并進行分析和交流的工具。由一組圖示符號、圖示符號規(guī)則以及必要的文字說明組成。利用模型把問題規(guī)范地表示出來,并可以作為下一步構(gòu)造實際系統(tǒng)的設(shè)計依據(jù)。對象模型整體-部分模式(組成、聚集關(guān)系)表示一個整體對象概念由若干個部分對象概念合成構(gòu)成。具有傳遞性例如計算機由機箱、主板、鍵盤和顯示器等部件構(gòu)成一般-特殊模式(分類關(guān)系)表示一個對象是另一個對象的特例用繼承關(guān)系來反映對象一般-特殊聯(lián)系方式例如工人和經(jīng)理類繼承了雇員類,工人和經(jīng)理類是特殊類,雇員類是一般類。連接模式(消息模式、關(guān)聯(lián)關(guān)系)一個對象與另一個對象有某種聯(lián)系,之間可以發(fā)送消息。用一條直線直接連接存在消息模式的兩個類。直線上方用文字表示連接的含義。

生產(chǎn)廠商……計算機商品生產(chǎn)廠商……制造1*2.面向?qū)ο蟮脑O(shè)計(OOD)面向?qū)ο蟮脑O(shè)計(OOD)的工作可以分為兩步:第一步是把OOA階段建立的分析模型直接作為初級的OOD模型;第二步是要對初級的OOD模型進行擴充,添加與編程細節(jié)有關(guān)的具體細節(jié)。面向?qū)ο笤O(shè)計的任務(wù)修改完善對象模型寫出所有類的定義構(gòu)造基于特定計算機環(huán)境的軟件系統(tǒng)所要求的額外的、與實現(xiàn)有關(guān)的類和對象模型。軟件系統(tǒng)要求的其它設(shè)計修改完善對象模型

主要包括對類做修改和補充,對對象模式做必要的調(diào)整,如重新設(shè)計類的繼承關(guān)系等。寫出所有類的定義

包括類名、屬性、方法(方法名、方法函數(shù)的數(shù)據(jù)類型、參數(shù)、參數(shù)類型)、繼承關(guān)系。還可在綜合分析的基礎(chǔ)上,對類的方法重新進行設(shè)計或劃分,達到功能單一、高度共享、可重復(fù)使用程度高等設(shè)計要求。構(gòu)造基于特定計算機環(huán)境的軟件系統(tǒng)所要求的額外的、與實現(xiàn)有關(guān)的類和對象模型

主要有人機接口部分、數(shù)據(jù)管理部分和系統(tǒng)接口部分對象及對象模型的補充。人機接口是實際使用的軟件系統(tǒng)中人與系統(tǒng)的交互接口。數(shù)據(jù)管理完成軟件系統(tǒng)中系統(tǒng)需要保存和維護的類。系統(tǒng)接口是本系統(tǒng)設(shè)備和其它系統(tǒng)設(shè)備的接口。目前市場上提供支持軟件和類庫包。軟件系統(tǒng)要求的其它設(shè)計

實際的軟件系統(tǒng)要求的其它設(shè)計。這主要包括系統(tǒng)分布模式設(shè)計和物理設(shè)計。系統(tǒng)的分布模式有五種:單機模式、集中模式、文件服務(wù)器模式、客戶/服務(wù)器模式和瀏覽器/服務(wù)器模式。物理設(shè)計一般包括網(wǎng)絡(luò)設(shè)計和軟件平臺設(shè)計。面向?qū)ο笤O(shè)計的基本準則模塊化抽象信息隱藏低耦合、高內(nèi)聚可擴充可重用

還要充分考慮具體實現(xiàn)中的基于特定計算機環(huán)境的人機接口、數(shù)據(jù)管理和系統(tǒng)接口等因素。設(shè)計模式DesignPatterns《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》(DesignPatterns:ElementsofReusableObject-OrientedSoftware,ISBN0-201-63361-2)August1994該書作者為:ErichGamma,RichardHelm,RalphJohnson,JohnVlissides,后以“四人幫”(GangofFour,GoF)著稱一個設(shè)計模式(designpattern)定義了一個通用的設(shè)計結(jié)構(gòu),這種設(shè)計結(jié)構(gòu)能夠用來解決特定的面向?qū)ο笤O(shè)計問題。設(shè)計模式的描述:(1)模式名稱。用一兩個詞作為模式的標記,簡略描述模式的問題、解決方案和效果。(2)問題。描述了在何時使用設(shè)計模式。它解釋了模式用來解決什么設(shè)計問題。(3)解決方案。描述了設(shè)計模式的組成成分,它們之間的關(guān)系及各自的職責和協(xié)作方式。(4)效果。描述了模式應(yīng)用的效果和使用模式應(yīng)權(quán)衡的問題。創(chuàng)建模式(范例)抽象工廠(AbstactFactory)構(gòu)造器(BuilderPattern)工廠方法(FactoryMethodpattern)原型(Prototypepattern)單例模式(Singletonpattern)結(jié)構(gòu)模式(范例)適配器(Adapterpattern)橋接(Bridgepattern)組合(Compositepattern)裝飾(Decoratorpattern)外觀(Fa?adepattern)享元(Flyweightpattern)代理(Proxypattern)行為模式(范例)職責鏈(Chain-of-responsibilitypattern)命令(Commandpattern)翻譯器(Interpreterpattern)迭代器(Iteratorpattern)仲裁器(Mediatorpattern)回憶(Mementopattern)觀察器(Observerpattern)狀態(tài)機(Statepattern)策略(Strategypattern)模板方法(Templatemethodpattern)參觀者(Visitor)UnifiedModelingLanguage(UML)UML即統(tǒng)一建模語言,它是一個支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言,為面向?qū)ο蠓治龊驮O(shè)計提供模型化和可視化支持。面向?qū)ο蟮姆治雠c設(shè)計(OOA&D,OOAD)方法的發(fā)展在80年代末至90年代中出現(xiàn)了一個高潮,UML是這個高潮的產(chǎn)物。它不僅統(tǒng)一了Booch、Rumbaugh和Jacobson的表示方法,而且對其作了進一步的發(fā)展,并最終統(tǒng)一為大眾所接受的標準建模語言。3.面向?qū)ο蟮木幊蹋∣OP)面向?qū)ο蟮木幊蹋∣OP),又叫做面向?qū)ο蟪绦蛟O(shè)計,或者編碼(coding),這是軟件工程的實現(xiàn)階段,相當于建筑工程的施工階段。OOP的工作就是用一種面向?qū)ο蟮木幊陶Z言把OOD模型中的每個成分書寫出來,是面向?qū)ο蟮能浖_發(fā)最終落實的重要階段。這一步實際上是將OOD模型轉(zhuǎn)換成可以運行的軟件系統(tǒng)。4面向?qū)ο鬁y試

軟件測試的目的是檢查和排除軟件中存在的各種隱含錯誤。任何一個軟件產(chǎn)品在交付使用之前都要經(jīng)過多次嚴格的測試。一般要經(jīng)過:面向?qū)ο蠓治龅臏y試(OOATest)、面向?qū)ο笤O(shè)計的測試(OODTest)、面向?qū)ο缶幊痰臏y試(OOPTest)、面向?qū)ο蟮膯卧獪y試(OOUnitTest)、面向?qū)ο蟮募蓽y試(OOIntegrateTest)、面向?qū)ο蟮南到y(tǒng)測試(OOSystemTest)

等環(huán)節(jié)。面向?qū)ο鬁y試以類做為基本測試單位,可以更準確地發(fā)現(xiàn)程序錯誤,提高測試效率。一般情況下,大型商用軟件項目需要經(jīng)過內(nèi)部反復(fù)測試、小范圍試用、大范圍試用和再測試等多個環(huán)節(jié),必要時上述過程需要反復(fù)進行。

由于軟件代碼的規(guī)模越來越龐大,無論經(jīng)過多少次測試,或經(jīng)過了多么嚴格的測試,軟件中依然難免存在各種各樣的隱含錯誤。而且用戶在使用軟件的過程中可能會提出修改和擴充軟件的要求。因此軟件在使用的過程中,需要開發(fā)人員或?qū)I(yè)軟件維護人員進行必要和合理的維護。維護人員在重構(gòu)“源設(shè)計圖”,并掌握原設(shè)計人的設(shè)計思想和方法、策略的前提下主要以類及對象為基本單位進行維護。一般情況下不應(yīng)改變類與對象的基本特性,同時不應(yīng)影響其他類。5.面向?qū)ο筌浖S護面向?qū)ο筌浖S護由于面向?qū)ο蟮能浖崿F(xiàn)方法的解空間與被解決問題的問題空間的結(jié)構(gòu)是一致的,軟件工程各個階段的分析、描述、表達和實現(xiàn)也是一致的,所以無論是發(fā)現(xiàn)了程序中的錯誤而追溯到問題本身,還是因需求發(fā)生變化而追蹤到程序代碼,解決起來都相對比較簡單和方便。另一方面,面向?qū)ο蟮姆庋b性可使一個對象的修改對其他對象的影響較少。因此,運用面向?qū)ο蟪绦蛟O(shè)計方法可以大大提高軟件維護的效率。第3章面向?qū)ο蟪绦蛟O(shè)計概述3.1類與對象3.2消息和方法3.3什么是面向?qū)ο蟪绦蛟O(shè)計3.4數(shù)據(jù)抽象3.5封裝性和信息隱藏3.6繼承性與軟件重用3.7多態(tài)性3.8面向?qū)ο蟮某绦蛟O(shè)計語言3.9面向?qū)ο蟮能浖こ?.10C++編程環(huán)境簡介1C++程序的開發(fā)過程2VisualC++6.0集成開發(fā)環(huán)境簡介常用的面向?qū)ο筌浖_發(fā)環(huán)境

PowerBuilder、C++Builder、VisualC++、Delphi、JavaBuilderVC++6.0是Microsoft公司1998年推出的功能強大的可視化編程環(huán)境,是流行的Windows應(yīng)用程序開發(fā)的集成開發(fā)環(huán)境(IDE)。項目與項目工作區(qū)所謂項目就是文件的集合,它包括了資源文件、頭文件、源代碼文件、程序結(jié)構(gòu)消息文件和系統(tǒng)參數(shù)設(shè)置文件。要編寫一個應(yīng)用程序,必須創(chuàng)建一個項目,項目文件的擴展名為.dsp。項目工作區(qū)文件(.dsw)含有工作區(qū)的定義和項目中所包含文件的所有信息。根據(jù)項目工作區(qū)文件,在工作區(qū)窗口中便可以打開相應(yīng)的文件進行編輯,大大方便了程序員多項目的管理。3控制臺應(yīng)用程序?qū)嵗椒?:啟動VisualC++6.0集成開發(fā)環(huán)境。建立新工程。添加源文件。編輯源程序。編譯、連接源程序。運行程序。

(1)啟動VisualC++,單擊“File/New”菜單項,打開新建窗口,如圖所示。

(2)在“Projects”選項卡中選擇“Win32ConsoleApplication”選項,在“Projectname”編輯框中輸入工程名稱,單擊“OK”按鈕進入向?qū)Т翱?,開始創(chuàng)建工程。

(3)在向?qū)Т翱谥羞x擇“A‘Hello,Word’Application”選項,單擊“Finish”按鈕完成工程的創(chuàng)建。這樣就完成了一個控制臺工程的創(chuàng)建。在工具欄中單擊按鈕,編譯并執(zhí)行應(yīng)用程序。

方法2:啟動VisualC++6.0集成開發(fā)環(huán)境。新建文件。編輯源程序。保存源程序。編譯、連接源程序。運行程序。

1.創(chuàng)建工作文件夾

創(chuàng)建VisualC++6.0的工作文件夾“D:\VisualC++應(yīng)用”,以后所有創(chuàng)建的C++程序都在此文件夾下,這樣既便于管理,又容易查找。在文件夾“D:\VisualC++應(yīng)用”下再創(chuàng)建一個子文件夾“第1章”用于存放第1章中的C++程序;對于第2章程序就存放在子文件夾“第2章”中,依此類推。2.啟動VisualC++6.0圖1.3“每日提示”對話框

選擇“開始”→“程序”→“MicrosoftVisualStudio6.0”→“MicrosoftVisualC++6.0”,運行VisualC++6.0。第一次運行時,將顯示“每日提示”對話框。單擊[下一條]按鈕,可看到有關(guān)各種操作的提示。如果在[啟動時顯示提示]復(fù)選框中單擊鼠標,去除復(fù)選框的選中標記,那么下一次運行VisualC++6.0,將不再出現(xiàn)此對話框。單擊[關(guān)閉]按鈕關(guān)閉此對話框,進入VisualC++6.0開發(fā)環(huán)境。3.添加C++程序

(1)單擊標準工具欄上的“新建”()按鈕,打開一個新的文檔窗口,在這個窗口中輸入下列C++代碼。

(2)選擇“文件”→“保存”菜單或按快捷鍵Ctrl+S或單擊標準工具欄的保存按鈕,彈出“保存為”文件對話框。將文件定位到“D:\VisualC++應(yīng)用\第1章”文件夾中,文件名指定為“Ex_Simple.cpp”(注意擴展名.cpp不能省略,cpp是CPlusPlus的縮寫,即“C++”的意思)。[例Ex_Simple]一個簡單的C++程序/*第一個簡單的C++程序*/#include<iostream.h>

intmain(){ doubler,area; //定義變量

cout<<"輸入圓的半徑:"; //顯示提示信息

cin>>r; //從鍵盤上輸入變量r的值

area=3.14159*r*r; //計算面積

cout<

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論