版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 面向對象程序設計實例面向對象程序設計實例6.1面向對象方法學概述面向對象方法學概述6.2面向對象方法學的主要優(yōu)點面向對象方法學的主要優(yōu)點6.3面向對象的概念面向對象的概念6.4面向對象模型面向對象模型6.5對象模型對象模型6.6動態(tài)模型動態(tài)模型6.7功能模型功能模型6.8三種模型之間的關系三種模型之間的關系6.9小小 結結6.106.1 6.1 面向對象程序設計實例面向對象程序設計實例 6.1.1 6.1.1 用對象分解取代功能分用對象分解取代功能分解解 傳統(tǒng)的程序設計方法把精力集中于設傳統(tǒng)的程序設計方法把精力集中于設計解題算法(即處理數(shù)據的過程),因此計解題算法(即處理數(shù)據的過程),因此也
2、稱為面向過程的程序設計方法。這樣做也稱為面向過程的程序設計方法。這樣做實質上也是在用計算機的觀點進行程序設實質上也是在用計算機的觀點進行程序設計工作。計工作。 但是,計算機觀點與人類觀點終究有但是,計算機觀點與人類觀點終究有很大區(qū)別,面向過程的思維方式也并不符很大區(qū)別,面向過程的思維方式也并不符合人類習慣的思維方式。合人類習慣的思維方式。 由于用面向過程方法開發(fā)軟件的方法由于用面向過程方法開發(fā)軟件的方法與過程,不同于人類認識世界解決問題時與過程,不同于人類認識世界解決問題時習慣采用的方法與過程,因此使得實現(xiàn)解習慣采用的方法與過程,因此使得實現(xiàn)解法的解空間與描述問題的問題空間在結構法的解空間與描
3、述問題的問題空間在結構上明顯不同,這不僅增加了開發(fā)軟件的難上明顯不同,這不僅增加了開發(fā)軟件的難度,也使得所開發(fā)出的軟件難于理解。度,也使得所開發(fā)出的軟件難于理解。 面向對象的程序設計技術以對象面向對象的程序設計技術以對象(Object)(Object)為核心,用這種技術開發(fā)出的程為核心,用這種技術開發(fā)出的程序由一系列對象組成。序由一系列對象組成。 對象是對現(xiàn)實世界實體的正確抽象,對象是對現(xiàn)實世界實體的正確抽象,它是由描述內部狀態(tài)、表示靜態(tài)屬性的數(shù)它是由描述內部狀態(tài)、表示靜態(tài)屬性的數(shù)據,以及可以對這些數(shù)據施加的操作據,以及可以對這些數(shù)據施加的操作( (實現(xiàn)實現(xiàn)對象的動態(tài)行為對象的動態(tài)行為) ),
4、封裝在一起所構成的統(tǒng),封裝在一起所構成的統(tǒng)一體。對象之間通過傳遞消息互相通信,一體。對象之間通過傳遞消息互相通信,以模擬現(xiàn)實世界中不同實體彼此之間的聯(lián)以模擬現(xiàn)實世界中不同實體彼此之間的聯(lián)系。系。 人類習慣的解決問題的方法是使用人類習慣的解決問題的方法是使用“顧客顧客服務員服務員”的工作模式。的工作模式。 面向對象程序設計方法模仿人類習慣面向對象程序設計方法模仿人類習慣的解題方法,用對象分解取代功能分解,的解題方法,用對象分解取代功能分解,也就是把程序分解成一系列對象,每個對也就是把程序分解成一系列對象,每個對象都既有自己的數(shù)據(描述該對象所代表象都既有自己的數(shù)據(描述該對象所代表的實體的屬性)
5、,又有處理這些數(shù)據的函的實體的屬性),又有處理這些數(shù)據的函數(shù)(通常稱為服務或方法,它們實現(xiàn)該對數(shù)(通常稱為服務或方法,它們實現(xiàn)該對象應有的行為)。象應有的行為)。 不同對象之間通過發(fā)送消息向對方提不同對象之間通過發(fā)送消息向對方提出服務要求,接受消息的對象主動完成指出服務要求,接受消息的對象主動完成指定功能提供所要求的服務。程序中所有對定功能提供所要求的服務。程序中所有對象分工協(xié)作,共同完成整個程序的功能。象分工協(xié)作,共同完成整個程序的功能。事實上,對象是組成面向對象程序的基本事實上,對象是組成面向對象程序的基本模塊。模塊。 面向對象程序設計方法的提出,是軟面向對象程序設計方法的提出,是軟件開發(fā)
6、方法的一次革命,它代表了計算機件開發(fā)方法的一次革命,它代表了計算機程序設計的一種新穎的思維方法,是解決程序設計的一種新穎的思維方法,是解決軟件開發(fā)所面臨的困難的最有希望的方法軟件開發(fā)所面臨的困難的最有希望的方法之一。之一。 6.1.2 6.1.2 設計類等級設計類等級 這個簡單的圖形程序需要使用圓類和這個簡單的圖形程序需要使用圓類和弧類這兩類對象,也就是說,我們把該程弧類這兩類對象,也就是說,我們把該程序中的對象劃分成兩類。序中的對象劃分成兩類。圖圖6.1 6.1 圓類和弧類圓類和弧類 得到圖得到圖6.26.2所示的類等級所示的類等級圖圖6.2 6.2 簡單圖形程序的類等級簡單圖形程序的類等級
7、 6.1.3 6.1.3 定義屬性和服務定義屬性和服務 1. 1.定義屬性定義屬性 所謂定義屬性就是確定每個屬性的數(shù)所謂定義屬性就是確定每個屬性的數(shù)據類型和數(shù)據結構,同時還要確定每個屬據類型和數(shù)據結構,同時還要確定每個屬性的訪問權限。性的訪問權限。 2. 2. 定義服務定義服務 定義服務的主要任務就是設計完成每定義服務的主要任務就是設計完成每項服務功能的算法。項服務功能的算法。 6.1.4 6.1.4 用用C+C+語言實現(xiàn)語言實現(xiàn) #include #include graphics.hgraphics.h #include #include conio.hconio.h enum Boole
8、anfalse,trueenum Booleanfalse,true; class Locationclass Location protected: int X: int Y: phblic: Location(int IntiX,int InitY); int GetX( ); int GetY( ); ; class Point:public Location protected: Boolean Visible; public: Point(int InitX,int InitY); void Show( ); void Hide( ); Boolean Is Visible( );
9、; class Circle:public Point protected: int Radius; pubic; Circle(int InitX;int InitY,int InitRadius); void Show( ); void Hide( ); int GetRadius( ); ; class Arc:public Circle private: int StartAngle; int EndAngle; public: Arc(int InitX,int InitY,int InitRadius,int InitStartAngle,int InitEndAngle); vo
10、id Show( ); void Hide( ); int GetStartAngle( ); int GetEndAngle( ); ; /下面是成員函數(shù)的定義下面是成員函數(shù)的定義 Location Location(int InitX,int InitY) X=InitX; Y=InitY; int Location GetX( ) return X; int Location GetY( ) return Y; Point Point(int InitX,int IntiY):Location(InitX,InitY) Visible=false; void Point Show( )
11、Visible=true; putpixel(X,Y,getcolor( ); void Point Hide( ) Visible=false; putpixel(X,Y,getbkcolor( ); Boolean Point IsVisible( ) return Visible; Gircle Circle(int InitX,int InitY,int InitRadius):Point(InitX,InitY) Radius=InitRadius; void Circle Show( ) Visible=true; circle(X,Y,Radius); void Circle H
12、ide( ) int TempColor; TempColor=getcolor( ); Setcolor(getbkcolor( ); Visible=false; circle(X,Y,Radius); setcolor(TempColor); int Circle GetRadius( ) return Radins; Arc Arc(int InitX,int InitY,int InitRadius,int InitStartAngle,int InitEndAngle); Circle(InitX,InitY,InitRadius) StartAngle=InitStartAngl
13、e; EndAngle=InitEndAngle; void Arc Show( ) Visible=true; arc(X,Y,StartAngle,EndAngle,Radius); void Arc Hide( ) Visible=false; int TempColor; TempColor=getcolor( ); 6.2.1 6.2.1 面向對象方法學的要面向對象方法學的要點點 概括地說,面向對象方法具有下述概括地說,面向對象方法具有下述4 4個要點。個要點。(1 1) 認為客觀世界是由各種對象組認為客觀世界是由各種對象組成的,任何事物都是對象,復雜的對成的,任何事物都是對象,復雜
14、的對象可以由比較簡單的對象以某種方式象可以由比較簡單的對象以某種方式組合而成。組合而成。 按照這種觀點,可以認為整個世按照這種觀點,可以認為整個世界就是一個最復雜的對象。因此,面界就是一個最復雜的對象。因此,面向對象的軟件系統(tǒng)是由對象組成的,向對象的軟件系統(tǒng)是由對象組成的,軟件中的任何元素都是對象,復雜的軟件中的任何元素都是對象,復雜的軟件對象由比較簡單的對象組合而成。軟件對象由比較簡單的對象組合而成。 由此可見,面向對象方法用對象由此可見,面向對象方法用對象分解取代了傳統(tǒng)方法的功能分解。分解取代了傳統(tǒng)方法的功能分解。 (2 2) 把所有對象都劃分成各種把所有對象都劃分成各種對象類對象類( (
15、簡稱為類,簡稱為類,Class)Class),每個對,每個對象類都定義了一組數(shù)據和一組方法。象類都定義了一組數(shù)據和一組方法。數(shù)據用于表示對象的靜態(tài)屬性,是對數(shù)據用于表示對象的靜態(tài)屬性,是對象的狀態(tài)信息。因此,每當建立該對象的狀態(tài)信息。因此,每當建立該對象類的一個新實例時,就按照類中對象類的一個新實例時,就按照類中對數(shù)據的定義為這個新對象生成一組專數(shù)據的定義為這個新對象生成一組專用的數(shù)據,以便描述該對象用的數(shù)據,以便描述該對象 獨特的屬性值。例如,熒光屏上獨特的屬性值。例如,熒光屏上不同位置顯示的半徑不同的幾個圓,不同位置顯示的半徑不同的幾個圓,雖然都是雖然都是CircleCircle類的對象,
16、但是,各類的對象,但是,各自都有自己專用的數(shù)據,以便記錄各自都有自己專用的數(shù)據,以便記錄各自的圓心位置、半徑等等。自的圓心位置、半徑等等。 類中定義的方法,是允許施加于類中定義的方法,是允許施加于該類對象上的操作,是該類所有對象該類對象上的操作,是該類所有對象共享的,并不需要為每個對象都復制共享的,并不需要為每個對象都復制操作的代碼。操作的代碼。 6.2.2 6.2.2 面向對象的軟件過程面向對象的軟件過程 一般說來,使用面向對象方法學開發(fā)一般說來,使用面向對象方法學開發(fā)軟件時,工作重點應該放在生命周期中的軟件時,工作重點應該放在生命周期中的分析階段。這種方法在開發(fā)的早期階段定分析階段。這種方
17、法在開發(fā)的早期階段定義了一系列面向問題的對象,并且在整個義了一系列面向問題的對象,并且在整個開發(fā)過程中不斷充實和擴充這些對象。開發(fā)過程中不斷充實和擴充這些對象。 迭代是軟件開發(fā)過程中普遍存在的一迭代是軟件開發(fā)過程中普遍存在的一種內在屬性。經驗表明,軟件過程各個階種內在屬性。經驗表明,軟件過程各個階段之間的迭代或一個階段內各個工作步驟段之間的迭代或一個階段內各個工作步驟之間的迭代,在面向對象范型中比在結構之間的迭代,在面向對象范型中比在結構化范型中更常見,也更容易實現(xiàn)?;缎椭懈R?,也更容易實現(xiàn)。 圖圖6.36.3所示的噴泉模型是典型的面向對所示的噴泉模型是典型的面向對象生命周期模型。象生命周
18、期模型。圖圖6.3 6.3 噴泉模型噴泉模型 1. 1. 與人類習慣的思維方法一致與人類習慣的思維方法一致 面向對象的軟件技術以對象面向對象的軟件技術以對象(Object)(Object)為核心,用這種技術開發(fā)出的軟件系統(tǒng)由為核心,用這種技術開發(fā)出的軟件系統(tǒng)由對象組成。對象組成。 對象是對現(xiàn)實世界實體的正確抽象,對象是對現(xiàn)實世界實體的正確抽象,它是由描述內部狀態(tài)表示靜態(tài)屬性的數(shù)據,它是由描述內部狀態(tài)表示靜態(tài)屬性的數(shù)據,以及可以對這些數(shù)據施加的操作以及可以對這些數(shù)據施加的操作( (表示對象表示對象的動態(tài)行為的動態(tài)行為) ),封裝在一起所構成的統(tǒng)一體。,封裝在一起所構成的統(tǒng)一體。對象之間通過傳遞消
19、息互相聯(lián)系,以模擬對象之間通過傳遞消息互相聯(lián)系,以模擬現(xiàn)實世界中不同事物彼此之間的聯(lián)系?,F(xiàn)實世界中不同事物彼此之間的聯(lián)系。 面向對象的設計方法與傳統(tǒng)的面向過面向對象的設計方法與傳統(tǒng)的面向過程的方法有本質不同,這種方法的基本原程的方法有本質不同,這種方法的基本原理是,使用現(xiàn)實世界的概念抽象地思考問理是,使用現(xiàn)實世界的概念抽象地思考問題從而自然地解決問題。題從而自然地解決問題。 它強調模擬現(xiàn)實世界中的概念而不強它強調模擬現(xiàn)實世界中的概念而不強調算法,它鼓勵開發(fā)者在軟件開發(fā)的絕大調算法,它鼓勵開發(fā)者在軟件開發(fā)的絕大部分過程中都用應用領域的概念去思考。部分過程中都用應用領域的概念去思考。在面向對象的設
20、計方法中,計算機的觀點在面向對象的設計方法中,計算機的觀點是不重要的,現(xiàn)實世界的模型才是最重要是不重要的,現(xiàn)實世界的模型才是最重要的。的。 面向對象的軟件開發(fā)過程從始至終都面向對象的軟件開發(fā)過程從始至終都圍繞著建立問題領域的對象模型來進行:圍繞著建立問題領域的對象模型來進行:對問題領域進行自然的分解,確定需要使對問題領域進行自然的分解,確定需要使用的對象和類,建立適當?shù)念惖燃?,在對用的對象和類,建立適當?shù)念惖燃?,在對象之間傳遞消息實現(xiàn)必要的聯(lián)系,從而按象之間傳遞消息實現(xiàn)必要的聯(lián)系,從而按照人們習慣的思維方式建立起問題領域的照人們習慣的思維方式建立起問題領域的模型,模擬客觀世界。模型,模擬客觀世
21、界。 2. 2. 穩(wěn)定性好穩(wěn)定性好 面向對象方法基于構造問題領域的對面向對象方法基于構造問題領域的對象模型,以對象為中心構造軟件系統(tǒng)。它象模型,以對象為中心構造軟件系統(tǒng)。它的基本作法是用對象模擬問題領域中的實的基本作法是用對象模擬問題領域中的實體,以對象間的聯(lián)系刻畫實體間的聯(lián)系。體,以對象間的聯(lián)系刻畫實體間的聯(lián)系。 因為面向對象的軟件系統(tǒng)的結構是根因為面向對象的軟件系統(tǒng)的結構是根據問題領域的模型建立起來的,而不是基據問題領域的模型建立起來的,而不是基于對系統(tǒng)應完成的功能的分解,所以,當于對系統(tǒng)應完成的功能的分解,所以,當對系統(tǒng)的功能需求變化時并不會引起軟件對系統(tǒng)的功能需求變化時并不會引起軟件結
22、構的整體變化,往往僅需要作一些局部結構的整體變化,往往僅需要作一些局部性的修改。性的修改。 例如,從已有類派生出一些新的子類例如,從已有類派生出一些新的子類以實現(xiàn)功能擴充或修改,增加或刪除某些以實現(xiàn)功能擴充或修改,增加或刪除某些對象等??傊?,由于現(xiàn)實世界中的實體是對象等??傊?,由于現(xiàn)實世界中的實體是相對穩(wěn)定的,因此,以對象為中心構造的相對穩(wěn)定的,因此,以對象為中心構造的軟件系統(tǒng)也是比較穩(wěn)定的。軟件系統(tǒng)也是比較穩(wěn)定的。 3. 3. 可重用性好可重用性好 事實上,離開了操作數(shù)據便無法處理,事實上,離開了操作數(shù)據便無法處理,而脫離了數(shù)據的操作也是毫無意義的,我而脫離了數(shù)據的操作也是毫無意義的,我們應
23、該對數(shù)據和操作同樣重視。在面向對們應該對數(shù)據和操作同樣重視。在面向對象方法所使用的對象中,數(shù)據和操作正是象方法所使用的對象中,數(shù)據和操作正是作為平等伙伴出現(xiàn)的。作為平等伙伴出現(xiàn)的。 因此,對象具有很強的自含性,此外,因此,對象具有很強的自含性,此外,對象所固有的封裝性和信息隱藏機理,使對象所固有的封裝性和信息隱藏機理,使得對象的內部實現(xiàn)與外界隔離,具有較強得對象的內部實現(xiàn)與外界隔離,具有較強的獨立性。由此可見,對象類提供了比較的獨立性。由此可見,對象類提供了比較理想的模塊化機制和比較理想的可重用的理想的模塊化機制和比較理想的可重用的軟件成分。軟件成分。 面向對象的軟件技術在利用可重用的面向對象
24、的軟件技術在利用可重用的軟件成分構造新的軟件系統(tǒng)時,有很大的軟件成分構造新的軟件系統(tǒng)時,有很大的靈活性。靈活性。 有兩種方法可以重復使用一個對象類:有兩種方法可以重復使用一個對象類:一種方法是創(chuàng)建該類的實例,從而直接使一種方法是創(chuàng)建該類的實例,從而直接使用它;另一種方法是從它派生出一個滿足用它;另一種方法是從它派生出一個滿足當前需要的新類。當前需要的新類。 繼承性機制使得子類不僅可以重用其繼承性機制使得子類不僅可以重用其父類的數(shù)據結構和程序代碼,而且可以在父類的數(shù)據結構和程序代碼,而且可以在父類代碼的基礎上方便地修改和擴充,這父類代碼的基礎上方便地修改和擴充,這種修改并不影響對原有類的使用。種
25、修改并不影響對原有類的使用。class Apublic:void Func1(void);void Func2(void);class B : public Apublic:void Func3(void);void Func4(void);/ Examplemain()B b; / B的一個對象b.Func1(); / B 從A 繼承了函數(shù)Func1b.Func2(); / B 從A 繼承了函數(shù)Func2b.Func3();b.Func4(); 由于可以像使用集成電路由于可以像使用集成電路(IC)(IC)構造計構造計算機硬件那樣,比較方便地重用對象類來算機硬件那樣,比較方便地重用對象類來構造
26、軟件系統(tǒng),因此,有人把對象類稱為構造軟件系統(tǒng),因此,有人把對象類稱為“軟件軟件IC”IC”。 面向對象的軟件技術所實現(xiàn)的可重用面向對象的軟件技術所實現(xiàn)的可重用性是自然的和準確的,在軟件重用技術中性是自然的和準確的,在軟件重用技術中它是最成功的一個。它是最成功的一個。 4. 4. 較易開發(fā)大型軟件產品較易開發(fā)大型軟件產品 當開發(fā)大型軟件產品時,組織開發(fā)人當開發(fā)大型軟件產品時,組織開發(fā)人員的方法不恰當往往是出現(xiàn)問題的主要原員的方法不恰當往往是出現(xiàn)問題的主要原因。因。 用面向對象范型開發(fā)軟件時,可以把用面向對象范型開發(fā)軟件時,可以把一個大型產品看作是一系列本質上相互獨一個大型產品看作是一系列本質上相
27、互獨立的小產品來處理,這就不僅降低了開發(fā)立的小產品來處理,這就不僅降低了開發(fā)的技術難度,而且也使得對開發(fā)工作的管的技術難度,而且也使得對開發(fā)工作的管理變得容易多了。理變得容易多了。 這就是為什么對于大型軟件產品來說,這就是為什么對于大型軟件產品來說,面向對象范型優(yōu)于結構化范型的原因之一。面向對象范型優(yōu)于結構化范型的原因之一。許多軟件開發(fā)公司的經驗都表明,當把面許多軟件開發(fā)公司的經驗都表明,當把面向對象技術用于大型軟件開發(fā)時,軟件成向對象技術用于大型軟件開發(fā)時,軟件成本明顯地降低了,軟件的整體質量也提高本明顯地降低了,軟件的整體質量也提高了。了。 5. 5. 可維護性好可維護性好 由于下述因素的
28、存在,使得用面向對由于下述因素的存在,使得用面向對象方法所開發(fā)的軟件可維護性好。象方法所開發(fā)的軟件可維護性好。 面向對象的軟件穩(wěn)定性比較好。面向對象的軟件穩(wěn)定性比較好。 面向對象的軟件比較容易修改。面向對象的軟件比較容易修改。 面向對象的軟件比較容易理解。面向對象的軟件比較容易理解。 易于測試和調試。易于測試和調試。 6.4.1 6.4.1 對象對象 在應用領域中有意義的、與所要解決在應用領域中有意義的、與所要解決的問題有關系的任何事物都可以作為對象的問題有關系的任何事物都可以作為對象(Object)(Object),它既可以是具體的物理實體的,它既可以是具體的物理實體的抽象,也可以是人為的概
29、念,或者是任何抽象,也可以是人為的概念,或者是任何有明確邊界和意義的東西。有明確邊界和意義的東西。 例如,一名職工、一家公司、一個窗例如,一名職工、一家公司、一個窗口、一座圖書館、一本圖書、貸款和借款口、一座圖書館、一本圖書、貸款和借款等,都可以作為一個對象??傊?,對象是等,都可以作為一個對象??傊瑢ο笫菍栴}域中某個實體的抽象,設立某個對對問題域中某個實體的抽象,設立某個對象就反映了軟件系統(tǒng)保存有關它的信息并象就反映了軟件系統(tǒng)保存有關它的信息并具與它進行交互的能力。具與它進行交互的能力。圖圖6.4 6.4 對象的形象表示對象的形象表示 1. 1. 對象的形象表示對象的形象表示 2. 2.
30、對象的定義對象的定義 (1) (1) 定義定義1 1 對象是具有相同狀態(tài)的一組操作的集對象是具有相同狀態(tài)的一組操作的集合。合。 這個定義主要是從面向對象程序設計這個定義主要是從面向對象程序設計的角度看的角度看“對象對象”。 (2) (2) 定義定義2 2 對象是對問題域中某個東西的抽象,對象是對問題域中某個東西的抽象,這種抽象反映了系統(tǒng)保存有關這個東西的這種抽象反映了系統(tǒng)保存有關這個東西的信息或與它交互的能力。也就是說,對象信息或與它交互的能力。也就是說,對象是對屬性值和操作的封裝。是對屬性值和操作的封裝。 這個定義著重從信息模擬的角度看待這個定義著重從信息模擬的角度看待“對象對象”。 (3)
31、 (3) 定義定義3 3 對象對象=ID=MI 其中,其中,IDID是對象的標識或名字是對象的標識或名字 MSMS是對象中的操作集合是對象中的操作集合 DS DS是對象的數(shù)據結構是對象的數(shù)據結構 MIMI是對象受理的消息名集合是對象受理的消息名集合( (即對外接即對外接口口) ) 這個定義是一個形式化的定義。這個定義是一個形式化的定義。 總之,對象是封裝了數(shù)據結構及可以總之,對象是封裝了數(shù)據結構及可以施加在這些數(shù)據結構上的操作的封裝體,施加在這些數(shù)據結構上的操作的封裝體,這個封裝體有可以唯一地標識它的名字,這個封裝體有可以唯一地標識它的名字,而且向外界提供一組服務而且向外界提供一組服務( (即
32、公有的操作即公有的操作) )。 對象中的數(shù)據表示對象的狀態(tài),一個對象中的數(shù)據表示對象的狀態(tài),一個對象的狀態(tài)只能由該對象的操作來改變。對象的狀態(tài)只能由該對象的操作來改變。每當需要改變對象的狀態(tài)時,只能由其他每當需要改變對象的狀態(tài)時,只能由其他對象向該對象發(fā)送消息。對象響應消息時,對象向該對象發(fā)送消息。對象響應消息時,按照消息模式找出與之匹配的方法,并執(zhí)按照消息模式找出與之匹配的方法,并執(zhí)行該方法。行該方法。 從動態(tài)角度或對象的實現(xiàn)機制來看,從動態(tài)角度或對象的實現(xiàn)機制來看,對象是一臺自動機。具有內部狀態(tài)對象是一臺自動機。具有內部狀態(tài)S S,操作,操作f fi i(i(i=1,2,=1,2,n),n
33、),且與操作,且與操作f fi i對應的狀態(tài)轉對應的狀態(tài)轉換函數(shù)為換函數(shù)為g gi i(i(i=1,2,=1,2,n),n)的一個對象,可以的一個對象,可以用圖用圖6.26.2所示的自動機來模擬。所示的自動機來模擬。圖圖6.5 6.5 用自動機模擬對象用自動機模擬對象 3. 3.對象的特點對象的特點 以數(shù)據為中心。以數(shù)據為中心。 對象是主動的。對象是主動的。 實現(xiàn)了數(shù)據封裝。實現(xiàn)了數(shù)據封裝。 本質上具有并行性。本質上具有并行性。 模塊獨立性好。模塊獨立性好。 6.4.2 6.4.2 其他概念其他概念 1. 1. 類類(Class)(Class) 在面向對象的軟件技術中,在面向對象的軟件技術中,
34、“類類”就就是對具有相同數(shù)據和相同操作的一組相似是對具有相同數(shù)據和相同操作的一組相似對象的定義。對象的定義。 也就是說,類是對具有相同屬性和行也就是說,類是對具有相同屬性和行為的一個或多個對象的描述,通常在這種為的一個或多個對象的描述,通常在這種描述中也包括對怎樣創(chuàng)建該類的新對象的描述中也包括對怎樣創(chuàng)建該類的新對象的說明。說明。 2. 2. 實例實例(Instance)(Instance) 實例就是由某個特定的類所描述的一實例就是由某個特定的類所描述的一個具體的對象。個具體的對象。3. 3. 消息消息(Message)(Message) 消息,就是要求某個對象執(zhí)行在定義消息,就是要求某個對象執(zhí)
35、行在定義它的那個類中所定義的某個操作的規(guī)格說它的那個類中所定義的某個操作的規(guī)格說明。通常,一個消息由下述三部分組成:明。通常,一個消息由下述三部分組成: 接收消息的對象;接收消息的對象; 消息選擇符消息選擇符( (也稱為消息名也稱為消息名) ); 零個或多個變元。零個或多個變元。4. 4. 方法方法(Method)(Method) 方法,就是對象所能執(zhí)行的操作,也方法,就是對象所能執(zhí)行的操作,也就是類中所定義的服務。方法描述了對象就是類中所定義的服務。方法描述了對象執(zhí)行操作的算執(zhí)行操作的算法,響應消息的方法。法,響應消息的方法。 5. 5. 屬性屬性(Attribute)(Attribute)
36、 屬性,就是類中所定義的數(shù)據,它是屬性,就是類中所定義的數(shù)據,它是對客觀世界實體所具有的性質的抽象。類對客觀世界實體所具有的性質的抽象。類的每個實例都的每個實例都有自己特有的屬性值。有自己特有的屬性值。 6. 6. 封裝封裝(Encapsulation)(Encapsulation) 從字面上理解,所謂封裝就是把某個從字面上理解,所謂封裝就是把某個事物包起來,使外界不知道該事物的具體事物包起來,使外界不知道該事物的具體內容。內容。 綜上所述,具有封裝性的條件如下。綜上所述,具有封裝性的條件如下。 有一有一個清晰的邊界。所有私有數(shù)據個清晰的邊界。所有私有數(shù)據和實現(xiàn)操作的代碼都被封裝在這個邊界內,
37、和實現(xiàn)操作的代碼都被封裝在這個邊界內,從外面看不見更不能直接訪問。從外面看不見更不能直接訪問。 有有確定的接口確定的接口( (即協(xié)議即協(xié)議) )。這些接口。這些接口就是對象可以接受的消息,只能通過向對就是對象可以接受的消息,只能通過向對象發(fā)送消息來使用它。象發(fā)送消息來使用它。 受受保護的內部實現(xiàn)。實現(xiàn)對象功能保護的內部實現(xiàn)。實現(xiàn)對象功能的細節(jié)的細節(jié)( (私有數(shù)據和代碼私有數(shù)據和代碼) )不能在定義該對不能在定義該對象的類的范圍外進行訪問。象的類的范圍外進行訪問。 封裝性也就是信息隱藏,通過封裝把封裝性也就是信息隱藏,通過封裝把對象的實現(xiàn)細節(jié)對外界隱藏起來了。對象的實現(xiàn)細節(jié)對外界隱藏起來了。 7
38、. 7. 繼承繼承(Inheritance)(Inheritance) 廣義地說,繼承是指能夠直接獲得已廣義地說,繼承是指能夠直接獲得已有的性質和特征,而不必重復定義它們。有的性質和特征,而不必重復定義它們。在面向對象的軟件技術中,繼承是子類自在面向對象的軟件技術中,繼承是子類自動地共享基類中定義的數(shù)據和方法的機制。動地共享基類中定義的數(shù)據和方法的機制。 當一個類只允許有一個父類時,也就當一個類只允許有一個父類時,也就是說,當類等級為樹形結構時,類的繼承是說,當類等級為樹形結構時,類的繼承是單繼承;當是單繼承;當允許一個類有多個父類時,允許一個類有多個父類時,類的繼承是多重繼承。類的繼承是多重
39、繼承。圖圖6.6 6.6 實現(xiàn)繼承機制的原理實現(xiàn)繼承機制的原理 8. 8. 多態(tài)性多態(tài)性(Polymorphism)(Polymorphism) 多態(tài)性一詞來源于希臘語,意思是多態(tài)性一詞來源于希臘語,意思是“有許多形態(tài)有許多形態(tài)”。 在面向對象的軟件技術中,多態(tài)性是在面向對象的軟件技術中,多態(tài)性是指子類對象可以像父類對象那樣使用,同指子類對象可以像父類對象那樣使用,同樣的消息既可以發(fā)送給父類對象也可以發(fā)樣的消息既可以發(fā)送給父類對象也可以發(fā)送給子類對象。送給子類對象。 也就是說,在類等級的不同層次中可也就是說,在類等級的不同層次中可以共享以共享( (公用公用) )一個行為一個行為( (方法方法)
40、 )的名字,然的名字,然而不同層次中的每個類卻各自按自己的需而不同層次中的每個類卻各自按自己的需要來實現(xiàn)這個行為。當對象接收到發(fā)送給要來實現(xiàn)這個行為。當對象接收到發(fā)送給它的消息時,根據該對象所屬于的類動態(tài)它的消息時,根據該對象所屬于的類動態(tài)選用在該類中定義的實現(xiàn)算法。選用在該類中定義的實現(xiàn)算法。 9. 9. 重載重載(Overloading)(Overloading) 有兩種重載:函數(shù)重載是指在同一作有兩種重載:函數(shù)重載是指在同一作用域內的若干個參數(shù)特征不同的函數(shù)可以用域內的若干個參數(shù)特征不同的函數(shù)可以使用相同的函數(shù)名字;運算符重載是指同使用相同的函數(shù)名字;運算符重載是指同一個運算符可以施加于
41、不同類型的操作數(shù)一個運算符可以施加于不同類型的操作數(shù)上面。上面。 當然,當參數(shù)特征不同或被操作數(shù)的當然,當參數(shù)特征不同或被操作數(shù)的類型不同時,實現(xiàn)函數(shù)的算法或運算符的類型不同時,實現(xiàn)函數(shù)的算法或運算符的語義是不相同的。語義是不相同的。 為了更好地理解問題,人們常常采用為了更好地理解問題,人們常常采用建立問題模型的方法。所謂模型,就是為建立問題模型的方法。所謂模型,就是為了理解事物而對事物作出的一種抽象,是了理解事物而對事物作出的一種抽象,是對事物的一種無歧義的書面描述。對事物的一種無歧義的書面描述。 通常,模型由一組圖示符號和組織這通常,模型由一組圖示符號和組織這些符號的規(guī)則組成,利用它們來定
42、義和描些符號的規(guī)則組成,利用它們來定義和描述問題域中的術語和概念。更進一步講,述問題域中的術語和概念。更進一步講,模型是一種思考工具,利用這種工具可以模型是一種思考工具,利用這種工具可以把知識規(guī)范地表示出來。把知識規(guī)范地表示出來。 用面向對象方法開發(fā)軟件,通常需要用面向對象方法開發(fā)軟件,通常需要建立三種形式的模型,它們分別是描述系建立三種形式的模型,它們分別是描述系統(tǒng)數(shù)據結構的對象模型,描述系統(tǒng)控制結統(tǒng)數(shù)據結構的對象模型,描述系統(tǒng)控制結構的動態(tài)模型和描述系統(tǒng)功能的功能模型。構的動態(tài)模型和描述系統(tǒng)功能的功能模型。 這三種模型都涉及到數(shù)據、控制和操這三種模型都涉及到數(shù)據、控制和操作等共同的概念,只
43、不過每種模型描述的作等共同的概念,只不過每種模型描述的側重點不同。這三種模型從三個不同但又側重點不同。這三種模型從三個不同但又密切相關的角度模擬目標系統(tǒng),它們各自密切相關的角度模擬目標系統(tǒng),它們各自從不同側面反映了系統(tǒng)的實質性內容,綜從不同側面反映了系統(tǒng)的實質性內容,綜合起來則全面地反映了對目標系統(tǒng)的需求。合起來則全面地反映了對目標系統(tǒng)的需求。 一個典型的軟件系統(tǒng)組合了上述三方一個典型的軟件系統(tǒng)組合了上述三方面內容:它使用數(shù)據結構面內容:它使用數(shù)據結構( (對象模型對象模型) ),執(zhí),執(zhí)行操作行操作( (動態(tài)模型動態(tài)模型) ),并且完成數(shù)據值的變,并且完成數(shù)據值的變化化( (功能模型功能模型)
44、 )。 對象模型表示靜態(tài)的、結構化的系統(tǒng)對象模型表示靜態(tài)的、結構化的系統(tǒng)的的“數(shù)據數(shù)據”性質。它是對模擬客觀世界實性質。它是對模擬客觀世界實體的對象以及對象彼此間的關系的映射,體的對象以及對象彼此間的關系的映射,描述了系統(tǒng)的靜態(tài)結構。描述了系統(tǒng)的靜態(tài)結構。 正如正如6.2.1節(jié)所述,面向對象方法強調節(jié)所述,面向對象方法強調圍繞對象而不是圍繞功能來構造系統(tǒng)。對圍繞對象而不是圍繞功能來構造系統(tǒng)。對象模型為建立動態(tài)模型和功能模型,提供象模型為建立動態(tài)模型和功能模型,提供了實質性的框架。了實質性的框架。 在建立對象模型時,我們的目標是從在建立對象模型時,我們的目標是從客觀世界中提煉出對具體應用有價值的
45、概客觀世界中提煉出對具體應用有價值的概念。念。 6.6.1 6.6.1 表示類的符號表示類的符號 類圖描述類及類與類之間的靜態(tài)關系。類圖描述類及類與類之間的靜態(tài)關系。類圖是一種靜態(tài)模型,它是創(chuàng)建其他類圖是一種靜態(tài)模型,它是創(chuàng)建其他UMLUML圖圖的基礎。一個系統(tǒng)可以由多張類圖來描述,的基礎。一個系統(tǒng)可以由多張類圖來描述,一個類也可以出現(xiàn)在幾張類圖中。一個類也可以出現(xiàn)在幾張類圖中。 1. 1.定義類定義類 UML中類的圖形符號為長方形,用兩中類的圖形符號為長方形,用兩條橫線把長方形分成上、中、下條橫線把長方形分成上、中、下3個區(qū)域個區(qū)域(下面兩個區(qū)域可省略),(下面兩個區(qū)域可省略),3個區(qū)域分別
46、放個區(qū)域分別放類的名字、屬性和服務類的名字、屬性和服務。 2. 2. 定義屬性定義屬性 UML描述屬性的語法格式如下:描述屬性的語法格式如下: 可見性可見性 屬性名:類型名屬性名:類型名=初值初值性質串性質串 3. 3. 定義服務定義服務 服務也就是操作,服務也就是操作,UMLUML描述操作的語法描述操作的語法格式如下:格式如下: 可見性可見性 操作名(參數(shù)表):返回值操作名(參數(shù)表):返回值類型類型 性質串性質串 6.6.2 6.6.2 表示關系的符號表示關系的符號 1. 1. 關聯(lián)關聯(lián) 關聯(lián)表示兩個類的對象之間存在某種關聯(lián)表示兩個類的對象之間存在某種語義上的聯(lián)系。語義上的聯(lián)系。 (1 1)
47、 普通關聯(lián)普通關聯(lián) 普通關聯(lián)是最常見的關聯(lián)關系,只要普通關聯(lián)是最常見的關聯(lián)關系,只要在類與類之間存在連接關系就可以用普通在類與類之間存在連接關系就可以用普通關聯(lián)表示。普通關聯(lián)的圖示符號是連接兩關聯(lián)表示。普通關聯(lián)的圖示符號是連接兩個類之間的直線,如圖個類之間的直線,如圖6.76.7所示。所示。 圖圖6.7 6.7 普通關聯(lián)示例普通關聯(lián)示例(2 2) 限定關聯(lián)限定關聯(lián) 限定關聯(lián)通常用在一對多或多對多的限定關聯(lián)通常用在一對多或多對多的關聯(lián)關系中,可以把模型中的重數(shù)從一對關聯(lián)關系中,可以把模型中的重數(shù)從一對多變成一對一,或從多對多簡化成多對一。多變成一對一,或從多對多簡化成多對一。在類圖中把限定詞放在
48、關聯(lián)關系末端的一在類圖中把限定詞放在關聯(lián)關系末端的一個小方框內。個小方框內。 (3 3) 關聯(lián)類關聯(lián)類 為了說明關聯(lián)的性質可能需要一些附為了說明關聯(lián)的性質可能需要一些附加信息。可以引入一個關聯(lián)類來記錄這些加信息。可以引入一個關聯(lián)類來記錄這些信息。關聯(lián)中的每個連接與關聯(lián)類的一個信息。關聯(lián)中的每個連接與關聯(lián)類的一個對象相聯(lián)系。對象相聯(lián)系。 2. 2. 聚集聚集 聚集也稱為聚合,是關聯(lián)的特例。聚聚集也稱為聚合,是關聯(lián)的特例。聚集表示類與類之間的關系是整體與部分的集表示類與類之間的關系是整體與部分的關系。關系。 (1 1) 共享聚集共享聚集 如果在聚集關系中處于部分方的對象如果在聚集關系中處于部分方的
49、對象可同時參與多個處于整體方對象的構成,可同時參與多個處于整體方對象的構成,則該聚集稱為共享聚集。則該聚集稱為共享聚集。 圖圖6.10 6.10 共享聚集示例共享聚集示例(2 2) 組合聚集組合聚集 如果部分類完全隸屬于整體類,部分如果部分類完全隸屬于整體類,部分與整體共存,整體不存在了部分也會隨之與整體共存,整體不存在了部分也會隨之消失(或失去存在價值了),則該聚集稱消失(或失去存在價值了),則該聚集稱為組合聚集(簡稱為組成)。為組合聚集(簡稱為組成)。圖圖6.11 6.11 組合聚集示例組合聚集示例 3. 3.泛化泛化 UML中的泛化關系就是通常所說的繼中的泛化關系就是通常所說的繼承關系,
50、它是通用元素和具體元素之間的承關系,它是通用元素和具體元素之間的一種分類關系。一種分類關系。 在在UML中,用一端為空心三角形的連中,用一端為空心三角形的連線表示泛化關系,三角形的頂角緊挨著通線表示泛化關系,三角形的頂角緊挨著通用元素。注意,泛化針對類型而不針對實用元素。注意,泛化針對類型而不針對實例,一個類可以繼承另一個類,但一個對例,一個類可以繼承另一個類,但一個對象不能繼承另一個對象。實際上,泛化關象不能繼承另一個對象。實際上,泛化關系指出在類與類之間存在系指出在類與類之間存在“一般一般特殊特殊”關系。關系。圖圖6.12 6.12 抽象類示例抽象類示例 動態(tài)模型表示瞬時的、行為化的系統(tǒng)動
51、態(tài)模型表示瞬時的、行為化的系統(tǒng)的的“控制控制”性質,它規(guī)定了對象模型中的性質,它規(guī)定了對象模型中的對象的合法變化序列。對象的合法變化序列。 對一個對象來說,生命周期由許多階對一個對象來說,生命周期由許多階段組成,在每個特定階段中,都有適合該段組成,在每個特定階段中,都有適合該對象的一組運行規(guī)律和行為規(guī)則,用以規(guī)對象的一組運行規(guī)律和行為規(guī)則,用以規(guī)范該對象的行為。生命周期中的階段也就范該對象的行為。生命周期中的階段也就是對象的狀態(tài)。所謂狀態(tài),是對對象屬性是對象的狀態(tài)。所謂狀態(tài),是對對象屬性值的一種抽象。值的一種抽象。 各對象之間相互觸發(fā)(即作用)就形各對象之間相互觸發(fā)(即作用)就形成了一系列的狀
52、態(tài)變化。我們把一個觸發(fā)成了一系列的狀態(tài)變化。我們把一個觸發(fā)行為稱作一個事件。對象對事件的響應,行為稱作一個事件。對象對事件的響應,取決于接受該觸發(fā)的對象當時所處的狀態(tài),取決于接受該觸發(fā)的對象當時所處的狀態(tài),響應包括改變自己的狀態(tài)或者又形成一個響應包括改變自己的狀態(tài)或者又形成一個新的觸發(fā)行為。新的觸發(fā)行為。 狀態(tài)有持續(xù)性,它占用一段時間間隔。狀態(tài)有持續(xù)性,它占用一段時間間隔。狀態(tài)與事件密不可分,一個事件分開兩個狀態(tài)與事件密不可分,一個事件分開兩個狀態(tài),一個狀態(tài)隔開兩個事件。事件表示狀態(tài),一個狀態(tài)隔開兩個事件。事件表示時刻,狀態(tài)代表時間間隔。時刻,狀態(tài)代表時間間隔。 每個類的動態(tài)行為用一張狀態(tài)圖來
53、描每個類的動態(tài)行為用一張狀態(tài)圖來描繪,各個類的狀態(tài)圖通過共享事件合并起繪,各個類的狀態(tài)圖通過共享事件合并起來,從而構成系統(tǒng)的動態(tài)模型。來,從而構成系統(tǒng)的動態(tài)模型。 功能模型表示變化的系統(tǒng)的功能模型表示變化的系統(tǒng)的“功能功能”性質,它指明了系統(tǒng)應該性質,它指明了系統(tǒng)應該“做什么做什么”,因,因此更直接地反映了用戶對目標系統(tǒng)的需求。此更直接地反映了用戶對目標系統(tǒng)的需求。 通常,功能模型由一組數(shù)據流圖組成。通常,功能模型由一組數(shù)據流圖組成。UML提供的用例圖也是進行需求分析和建提供的用例圖也是進行需求分析和建立功能模型的強有力工具。立功能模型的強有力工具。 面向對象建模技術所建立的三種模型,面向對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度智能手車交易過戶標準化合同范本2篇
- 二零二五年度專業(yè)打印機租賃及耗材供應合同3篇
- 2025版安全生產事故調查處理合同范本3篇
- 2025版綠色節(jié)能舊房改造服務合同
- 2024年股權投資代持協(xié)議書
- 2025年度淀粉類產品研發(fā)生產與技術轉移合同2篇
- 2024水電站水電租賃服務合同與水電發(fā)電量銷售協(xié)議3篇
- 商是兩位數(shù)的筆算除法(說課稿)-2024-2025學年四年級上冊數(shù)學人教版
- 2025年小學語文四年級下冊名師教案習作:我的動物朋友
- 2024版小學教育設備采購與維護合同
- 高標準農田建設項目安全文明施工方案
- 2024-2025學年一年級上冊數(shù)學北師大版4.6《挖紅薯》(教學設計)
- 糖尿病患者體重管理專家共識(2024年版)解讀
- 中國融通集團招聘筆試題庫2024
- 2023年國家衛(wèi)生健康委項目資金監(jiān)管服務中心招聘考試試題及答案
- 2023-2024學年北京市海淀區(qū)八年級上學期期末考試物理試卷含詳解
- 新人教版七年級上冊初中數(shù)學全冊教材習題課件
- 2024智慧水廠建設標準化規(guī)范
- 2024年(全國教材培訓專題系列)素養(yǎng)導向初中地理大單元教學課件
- 摔箱測試報告
- 四川省遂寧市城區(qū)遂寧市市城區(qū)初中2024年第一學期期末教學水平監(jiān)測七年級歷史試題(無答案)
評論
0/150
提交評論