第8章vbnet面向?qū)ο蟪绦蛟O(shè)計.ppt_第1頁
第8章vbnet面向?qū)ο蟪绦蛟O(shè)計.ppt_第2頁
第8章vbnet面向?qū)ο蟪绦蛟O(shè)計.ppt_第3頁
第8章vbnet面向?qū)ο蟪绦蛟O(shè)計.ppt_第4頁
第8章vbnet面向?qū)ο蟪绦蛟O(shè)計.ppt_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第八章Visual Basic .NET面向?qū)ο蟪绦蛟O(shè)計,8.1 面向?qū)ο蟪绦蛟O(shè)計的基本特性,面向?qū)ο蟪绦蛟O(shè)計(Object Oriented Programming, 即OOP)是一種計算機編程架構(gòu),它將數(shù)據(jù)(即屬性)及對數(shù)據(jù)的操作(即方法)放在一起,作為相互依存、不可分割的整體來處理,它采用數(shù)據(jù)抽象和信息隱藏技術(shù),將對象及對象的操作抽象成一種新的數(shù)據(jù)類型-類,并且考慮不同對象之間的聯(lián)系和對象類的重用性。 一個對象的內(nèi)部結(jié)構(gòu)如圖10.1所示:,圖8.1對象的組成結(jié)構(gòu)示意圖,它具有以下3個基本特性: (1)封裝性(Encapsulation):在面向?qū)ο蟮某绦蛟O(shè)計方法中,封裝具有兩方面的含義。

2、一方面是指將對象的屬性和方法形成一個不可分割的整體。另一方面是指“數(shù)據(jù)隱藏”,即對象只應(yīng)保留有限的對外接口(即和外界聯(lián)系的方法),并盡可能隱藏對象內(nèi)部的具體細(xì)節(jié)。也就是說,通過封裝在對象和外界之間建立了一道屏障,使得外界只能通過對象所提供的接口(即對象的方法)與之發(fā)生聯(lián)系,而外界不能以其他方式直接修改對象的屬性值。從而增加了代碼的安全性。,(2)繼承性(Inheritance):在面向?qū)ο蟮某绦蛟O(shè)計中,允許在已有類的基礎(chǔ)上通過增加新特征而派生出新的類,這稱為繼承。其原有的類稱為基類(Base Class),而新建立的類稱為派生類。只要將新類說明為某個類的派生類,則該派生類會自動地繼承了這個基類

3、的屬性和方法,這些內(nèi)容在新類中可以直接使用而不必重新定義。這顯然減少了軟件開發(fā)的工作量,也實現(xiàn)了代碼的重用。 (3)多態(tài)性(Polymorphism):多態(tài)性是指基類中定義的屬性或行為,被派生類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為特征,使得同樣的消息可以根據(jù)發(fā)送消息對象的不同而采用多種不同的行為方式。,8.2 類和對象的定義,8.2.1 類定義的語法格式,1. 類定義的語法格式 在Visual Basic.NET中,類是通過ClassEnd Class語句來定義的。 類定義的語法格式如下: 類說明修飾符 Class 類名 數(shù)據(jù)成員的說明 屬性的定義 方法的定義 事件的定義 End

4、 Class,說明: (1)格式中的“類說明修飾符”可以是Public、Private、Protected、Friend等,用于表示類的訪問權(quán)限,默認(rèn)是Public。 (3)“類名”由用戶給定的類的名稱,其命名規(guī)則同變量的命名規(guī) 則,每個類都必須有類名。 (4)類內(nèi)部的成員有四種:數(shù)據(jù)成員、屬性、事件和方法。如何在 類中定義這些成員,將在后面的章節(jié)中詳細(xì)介紹。,2. 類定義的位置 類實質(zhì)上就是一個代碼塊,可以出現(xiàn)在程序的不同位置。比較常見的有以下幾個位置: (1)放在窗體的代碼窗口中,與窗體類并列定義。 Public Class Form1 窗體類定義開始 End Class 窗體類定義結(jié)束

5、Class Myclass 用戶自定義類開始 End Class 用戶自定義類結(jié)束 (2)在窗體類中定義類,新類嵌在原有的窗體類中。 Public Class Form1 窗體類定義開始 Class Myclass 用戶自定義類開 End Class 用戶自定義類結(jié)束 End Class 窗體類定義結(jié)束,(3)創(chuàng)建模塊(Module),在其中定義類 在Visual Basic.NET集成開發(fā)環(huán)境下,在菜單欄中,單擊“項目”菜單項,在出現(xiàn)的下拉菜單中,單擊“添加新項”或“添加模塊”菜單命令, 在模塊中定義類。 Module Module1 模塊定義開始 Class Myclass 用戶自定義類開

6、始 End Class 用戶自定義類結(jié)束 End Module 模塊定義結(jié)束 (4)創(chuàng)建類文件,在其中定義類。 在Visual Basic.NET集成開發(fā)環(huán)境下,在菜單欄中,單擊“項目”菜單項,在出現(xiàn)的下拉菜單中,單擊“添加類”,在對話框中選擇“類”,創(chuàng)建類文件(默認(rèn)文件名Class1.vb),單擊“添加”命令按鈕,這時系統(tǒng)就在類文件Class1.vb中生成了類Class1的模板,用戶可以在此基礎(chǔ)上進(jìn)一步完善該類。,8.2.2 在類中定義數(shù)據(jù)成員,類中的數(shù)據(jù)成員用于存儲有關(guān)的數(shù)據(jù),表示對象的狀態(tài)和特征,就像在一個 過程內(nèi)部可以定義該過程中的局部變量一樣。在類中定義數(shù)據(jù)成員的基本語 法格式如下:

7、 訪問修飾符 Shared 數(shù)據(jù)成員名 As 數(shù)據(jù)類型 =初始值 其中: (1)訪問修飾符可以是Private、Public、Protected等,以表示該成員的 作用范圍。 (2)在類中定義數(shù)據(jù)成員時,也可以在其后面加上“=初始值”的方法對該成 員進(jìn)行初始化,這種初始化方法與普通變量的初始化方法完全相同。 (3)關(guān)鍵字“Shared”:表示該數(shù)據(jù)成員是共享成員,類的所有實例共享該 數(shù)據(jù)成員,而不是在類的每個實例中各自含有該成員的一個拷貝,因此,類 的共享數(shù)據(jù)成員可以通過類或類的實例來訪問,訪問方式是“類名.數(shù)據(jù)成員名” 或“類的實例名.數(shù)據(jù)成員名”。,Public Class MyStude

8、nt 定義類MyStudent Public Count As Integer=0 定義成員Count并對其進(jìn)行初始化 Private Sno As String 學(xué)號 Private Sname As String 姓名 Private Score As Single 成績 End Class,8.2.3對象的定義及其成員的訪問,當(dāng)類定義完畢后,就可以用該類聲明(或定義)屬于該類的對象(或?qū)嵗?1. 定義類的對象的語法格式 用類聲明對象的方法,與前面所學(xué)習(xí)的定義普通變量的方法基本一 致,對象的聲明形式如下: Dim|Private|Public 對象變量名 As New 類名 說明: (

9、1)Dim、Private、Public的含義與普通變量聲明中的含義相同。 (2)類可以是Visual Basic.NET預(yù)定義的類(如Form、TextBox、 Label、Button等),也可以是用戶自己定義的類。 (3)New關(guān)鍵字用來創(chuàng)建類的實例。如果省略New關(guān)鍵字,則表示 只聲明了變量屬于某種類,而不創(chuàng)建類的實例。,(4)也可以定義對象數(shù)組。如:Dim s(5) As New Student,該數(shù)組中 的所有元素都是Student類型的對象實例,每個元素可分別作為一個對象來 使用。 2. 利用對象訪問成員 其一般形式為: 對象變量名.成員名 但是,需要注意的是,被訪問的成員必須在

10、類中被聲明為Public訪問權(quán) 限,因為只有這種類型的成員才能在類外被訪問。 例如,對于上面定義的MyStudent類來說,設(shè)有如下語句: Dim s3 As New MyStudent 這樣就定義了MyStudent類的一個對象s3,該對象就具有MyStudent類的 一套成員即Count、Sno、Sname和Score。要訪問其中的成員Count就 可以寫為s3.Count,但是,不能利用s3來訪問其他三個成員Sno、Sname 和Score,如:不能寫s3.Sno,因為,這三個成員在類中都是Private訪問 修飾。,8.2.4方法的定義及調(diào)用,1. 在類中定義方法 類的方法(也可稱為類

11、的成員函數(shù))就是指類中定義的那些Sub過程或 Function函數(shù) 對于沒有返回值的方法的定義格式是: 訪問修飾符過程修飾符Shared Sub 方法名(形式參數(shù)表) End Sub 對于有返回值的方法的定義格式是: 訪問修飾符過程修飾符SharedFunction 方法名(形式參數(shù)表) As 數(shù)據(jù)類型 End Sub,(1)“訪問修飾符”可以是Public、Private、Protected、Friend等用 于表示所定義的方法的訪問權(quán)限 (2)“過程修飾符”可以是Overloads、Overridable、Overrides、NotOverridable、MustOverride等 (3)

12、關(guān)系字“Shared”:表示該方法在類的所有實例中屬于共享方法, 共享方法的調(diào)用需要“類名.方法名”的形式,而不用“對象名.方法名”的形式。 【例8.1】定義用于讀取和設(shè)置數(shù)據(jù)成員值的方法。,2. 方法的調(diào)用 方法的調(diào)用需要利用類的對象來完成,當(dāng)定義了某類的一個對象后, 就可以利用該對象調(diào)用其中的方法,格式是: 對象名.方法名(實際參數(shù)表) 【例8.2】在例8.1的基礎(chǔ)上,利用已有的類myStudent定義對象,并通過調(diào)用類的方法對相關(guān)數(shù)據(jù)成員進(jìn)入輸入、輸出。,8.2.4 屬性的定義與使用,類的屬性用于描述相關(guān)對象的狀態(tài)特征。在類中定義屬性,可用PropertyEnd Property語句,該

13、語句的格式是: 訪問修飾符屬性修飾符ReadOnly|WriteOnly Property 屬性名(形參列表) As 數(shù)據(jù)類型 Get End Get Set(ByVal 形參名 As 數(shù)據(jù)類型) End Set End Property 說明: (1)“訪問修飾符”用來指定屬性的作用域,可以是Public(公有)、Private (私有)、Protected(保護(hù))、Friend等,含義同前。 (2)“屬性修飾符”用來Overloads、Overrides、Overridable、NotOverridable、MustOverride,(3)GetEnd Get部分用于定義獲取屬性值的操作。

14、如果沒有此部分,則該屬性為只寫屬性,這時屬性的定義格式中必須注明WriteOnly,格式如下: 訪問修飾符 WriteOnly Property 屬性名(形參列表) As 數(shù)據(jù)類型 Set(ByVal 形參名 As 數(shù)據(jù)類型) End Set End Property (4)SetEnd Set部分用于設(shè)置屬性值的操作。如果沒有此部分,則 該屬性為只讀屬性,這時屬性的定義格式中必須注明ReadOnly,格式如 下: 訪問修飾符 ReadOnly Property 屬性名(形參列表) As 數(shù)據(jù)類型 Get End Get End Property,【例8.3】在例8.2的基礎(chǔ)上,對已有的類my

15、Student進(jìn) 行修改,增加學(xué)號、姓名、成績?nèi)齻€屬性,并分別測試通過調(diào)用類的方法和新定義的屬性對相關(guān)數(shù)據(jù)成員進(jìn)行入輸入、輸出。,8.2.6事件的定義和使用,事件為類和類的實例(即對象)提供向外界發(fā)出通知的能力,通過事件,對象可以響應(yīng)用戶的操作,與用戶進(jìn)行交互。 事件與方法類似,在聲明方式上基本差不多,惟一的差別是在類的定義體中,必須寫明該類中方法的實現(xiàn)代碼,而事件則是在聲明對象后,由程序員針對自己的需要來編寫相應(yīng)該對象的事件過程實現(xiàn)代碼 。 事件定義與使用的過程是: (1)在類中用Event語句定義事件的名稱及其相關(guān)參數(shù),語法格式是:訪問修飾符 Event 事件名稱(形式參數(shù)表),(2)在類

16、中有關(guān)的程序代碼中用RaiseEvent語句引發(fā)事件,語法格式是:RaiseEvent 事件名稱(實際參數(shù)表) (3)在類的外部,程序代碼中所有過程的外部用帶有WithEvents關(guān)鍵 字的語句定義該類的對象,語法格式是: Dim|Private|Public WithEvents 對象名 As New 類名 (4)在代碼編輯窗口中編寫(3)中定義的對象發(fā)生了已定義的事件的 事件過程代碼,也就是編寫當(dāng)該對象發(fā)生了前面所定義的事件后應(yīng)該完 成的工作的程序代碼。此步與以前編寫窗體中的某個對象的事件過程代 碼的過程完全一致。,【例8.4】在例8.3的基礎(chǔ)上,對已有的類myStudent進(jìn)行修改,增加

17、一個事件“ChangeScore”的定義,當(dāng)對類中的成績成員的值進(jìn)行修改時,超出0100的范圍時引發(fā)該事件,對應(yīng)該事件的事件過程中,對超出值的范圍給出提示信息“成績必須在0100分之間”。,8.2.7構(gòu)造函數(shù)和析構(gòu)函數(shù),1.構(gòu)造函數(shù)的基本概念與定義格式 每個類必須有一個構(gòu)造函數(shù),沒有構(gòu)造函數(shù)就不能創(chuàng)建對象。構(gòu)造函數(shù)用來在創(chuàng)建對象是初始化對象,即為對象的成員變量賦初值。 在類中定義構(gòu)造函數(shù)的一般格式如下: Public Sub New(形式參數(shù)表) End Sub 構(gòu)造函數(shù)的特點如下: (1)構(gòu)造函數(shù)的名稱必須是New,且必須是一個訪問權(quán)限為Public的Sub過程。 (2)可以重載,即可以在類

18、中定義多個參數(shù)個數(shù)不同或參數(shù)類型不同而名稱都為New的構(gòu)造函數(shù),在定義對象時,系統(tǒng)會根據(jù)參數(shù)的類型及個數(shù)選擇調(diào)用某一種合適的構(gòu)造函數(shù)完成對象的構(gòu)造。 (3)構(gòu)造函數(shù)在創(chuàng)建對象時由系統(tǒng)自動調(diào)用,在程序中不能像調(diào)用普通函數(shù)那樣進(jìn)行顯式地直接調(diào)用。,2. 默認(rèn)構(gòu)造函數(shù) (1)如果在類中沒有顯式定義構(gòu)造函數(shù),則系統(tǒng)自動為該類生成一個默認(rèn)構(gòu)造函數(shù),其格式如下: Public Sub New() End Sub 可見,該默認(rèn)構(gòu)造函數(shù)是不帶參數(shù)的、函數(shù)體為空的函數(shù),它僅負(fù)責(zé)創(chuàng)建對象,而不做任何初始化工作。 (2)只要在類中已經(jīng)定義過任何形式的構(gòu)造函數(shù),則系統(tǒng)就不再生成默認(rèn)構(gòu)造函數(shù)。,3. 析構(gòu)函數(shù) 對象可以

19、被創(chuàng)建,也可以被銷毀,就像變量一樣,具有生存周期。創(chuàng)建一個對象,系統(tǒng)會自動為它分配一定的系統(tǒng)資源。當(dāng)銷毀對象,則系統(tǒng)會自動收回所分配資源,如關(guān)閉數(shù)據(jù)文件、釋放所配置的內(nèi)存空間等。 在對象的生存周期結(jié)束時,系統(tǒng)將自動調(diào)用析構(gòu)函數(shù)完成對象的銷毀,析構(gòu)函數(shù)是一個名稱為Finalize的Sub過程。,8.3 類的繼承與派生,8.3.1基類與派生類,1. 基類和派生類的基本概念 在繼承關(guān)系中,被繼承的類稱為基類(Base class)(或父類),而通過繼承關(guān)系定義出來的新類則被稱為派生類(Derived class)(子類)。 2. 派生類的定義格式 在Visual Basic.NET中使用Inheri

20、ts語句來指明派生類的基類,定義派生類的格式是: 訪問修飾符 Class 派生類名 Inherits 基類名 End Class,8.3.2派生類的構(gòu)造函數(shù),由于派生類繼承了基類中除構(gòu)造函數(shù)和析構(gòu)函數(shù)之外的全部成員,因此,若需要對派生類對象進(jìn)行初始化,則需要定義新的構(gòu)造函數(shù),并且該構(gòu)造函數(shù)負(fù)責(zé)調(diào)用基類的構(gòu)造函數(shù)以完成基類的有關(guān)成員的初始化工作,定義派生類的構(gòu)造函數(shù)的一般格式如下: Public Sub New(派生類構(gòu)造函數(shù)總參數(shù)表) MyBase.New(基類構(gòu)造函數(shù)參數(shù)表) 派生類數(shù)據(jù)成員的初始化 End Sub,【例10.5】定義一個表示點的類Point,然后在Point類的基礎(chǔ)上派生出一個新類圓類Circle,并編寫有關(guān)

溫馨提示

  • 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

提交評論