第三章 面向對象技術_第1頁
第三章 面向對象技術_第2頁
第三章 面向對象技術_第3頁
第三章 面向對象技術_第4頁
第三章 面向對象技術_第5頁
已閱讀5頁,還剩64頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第三章面向對象技術第1頁,共69頁,2023年,2月20日,星期三面向對象(ObjectOriented)的基本概念什么是對象(Object)?什么是類(Class)類和對象區別與聯系第2頁,共69頁,2023年,2月20日,星期三什么是對象?“對象”是事物對象有一個身份,該身份用屬性定義對象還可以做事情,對象所能做的事情稱為對象的行為對象可以是真實世界的事物,也可以是概念性的事物第3頁,共69頁,2023年,2月20日,星期三什么是類將事物分類進行研究,是人類常用的一種思維方式。類通過設定該類中每個對象將具有的屬性和行為來提供對象的定義。第4頁,共69頁,2023年,2月20日,星期三類和對象區別與聯系第5頁,共69頁,2023年,2月20日,星期三對象之間的關系對象的三種基本關系(relationship)

依賴(dependency)關系

泛化(generalization繼承、父子)關系

關聯(association)關系

第6頁,共69頁,2023年,2月20日,星期三依賴關系依賴(Dependency)是一種使用關系,它描述了一個對象的規格說明的變化可能會影響到使用它的另一個對象,但反之不然。

第7頁,共69頁,2023年,2月20日,星期三泛化關系天花病毒流感病毒SARS病毒病毒RNA復制侵害肌體傳染性疫苗泛化(Generalization)描述了一般對象和較特殊的對象之間的關系。第8頁,共69頁,2023年,2月20日,星期三關聯關系關聯(Dependency)是一種結構關系,它描述了一個對象與另一個對象相聯系

第9頁,共69頁,2023年,2月20日,星期三面向對象系統的基本元素抽象(Abstraction)封裝(Encapsulation)繼承(Inheritance)多態(Polymorphism)第10頁,共69頁,2023年,2月20日,星期三抽象(Abstraction)

過濾掉對象的一部分特性和操作直到只剩下你所需要的屬性和操作。

通過抽象,可以將精力集中在應用程序對象上而不是實現上。使用戶和領域專家能夠真正參與到設計中來——關注重點第11頁,共69頁,2023年,2月20日,星期三封裝(Encapsulation)當一個對象執行自己的操作時,它對外界隱藏了操作的細節。接口(Interface)對象總要提供一個“接口”與外部世界建立聯系封裝通過隱藏對象的內部實現來幫助抽象,即可以使用一個對象而不必理解對象類是如何實現的——隱藏私有第12頁,共69頁,2023年,2月20日,星期三繼承(Inheritance)通過使用繼承性可以消除冗余屬性和行為并獲得再利用。兩類基本的繼承:

實現繼承,屬于子類的任意對象自動再利用父類的全部屬性和行為(VB6.0以下版本不支持)

接口繼承,提供了一個接口(屬性、行為)的再利用,允許這些屬性和行為以不同的方式實現(VB6.0支持)

——再利用第13頁,共69頁,2023年,2月20日,星期三多態(Polymorphism) 兩個或多個類可以有名字相同、基本目的相同但實現方式不同的行為 VB6利用公共接口來實現多態——同名行為,不同實現第14頁,共69頁,2023年,2月20日,星期三思考對汽車思考面向對象的概念 (抽象、封裝、繼承、多態各舉一例)考慮過去是如何分析和設計程序的,試著用對象和類去具體化你的一個應用程序考察在食堂打飯的過程(用飯卡),描述相關對象的屬性和行為,以及這些對象之間的關系第15頁,共69頁,2023年,2月20日,星期三VB6語言面向對象的特征(一)在類模塊中定義類用Property過程提供公共訪問定義多態性方法生成事件封裝類常量用Object

Browser瀏覽類創建對象第16頁,共69頁,2023年,2月20日,星期三VB6語言面向對象的特征(二)將窗體用作對象使用多組對象定義多個接口用ActiveX組件說明對象開發基于Web的應用程序創建C/S應用程序第17頁,共69頁,2023年,2月20日,星期三VB6中類與集合的應用創建一個類使用一個類的實例窗體類的使用定義類中的常量生成和響應事件定義集合使用集合第18頁,共69頁,2023年,2月20日,星期三創建一個類插入一個類模塊定義類的屬性創建類的方法響應類事件文檔化類第19頁,共69頁,2023年,2月20日,星期三插入一個類模塊啟動一個新的工程從工程菜單選擇添加類模塊設定類名稱窗體也是一個類工具箱中的控件也是一個類第20頁,共69頁,2023年,2月20日,星期三定義類的屬性

類屬性定義由一個類創建的全部對象的屬性聲明一個公共變量 簡單數據類型(Integer、String)

抽象類型(Object)

用戶定義的類型(UDT)不能定義為公共變量 最簡單,不推薦使用先聲明一個私有變量,然后創建Property過程以顯露屬性

Property過程允許一個類中的屬性被聲明為私有變量并由公共過程顯露第21頁,共69頁,2023年,2月20日,星期三創建Property(一)聲明一個私有變量

Privatemvar*

注意是Private而不是Dim

只有類內部的過程可以更改變量值,對應用程序的其它部分隱藏創建Property過程

PropertyGet

獲取或讀入屬性值

PropertyLet設置String、Integer等簡單數據類型的屬性值

PropertySet

設置對象數據類型的屬性值第22頁,共69頁,2023年,2月20日,星期三創建Property(二)多數情況下,類的每個屬性有一對Property過程PrivatemvarDescriptionAsStringPublicPropertyLetDescription(ByValvDataAsString) '向屬性指派值時使用,位于賦值語句的左邊。 'Syntax:X.Description=5 mvarDescription=vDataEndPropertyPublicPropertyGetDescription()AsString '檢索屬性值時使用,位于賦值語句的右邊。 'Syntax:Debug.PrintX.Description Description=mvarDescriptionEndProperty第23頁,共69頁,2023年,2月20日,星期三創建Property(二)只使用PropertyGet限制屬性為只讀只使用PropertyLet或PropertySet限制屬性為只寫Property過程可以包含有效性驗證、格式化或其它處理過程FriendPropertyLetPriority(ByValvDataAsInteger) ifvData<0orvData>4then vData=0

endif mvarPriority=vDataEndPropertyFriendPropertyGetPriority()AsInteger Priority=mvarPriorityEndProperty第24頁,共69頁,2023年,2月20日,星期三使用Property的益處封裝 格式化、數據有效性或其它處理過程只讀維護

可以只更改Property過程的代碼而不更改使用該屬性的代碼第25頁,共69頁,2023年,2月20日,星期三創建方法

類方法定義由一個類創建的全部對象的方法Private方法

在類的內部訪問Public方法

在類的外部訪問 返回值Function

不返回值Sub類方法按正常的Sub或Function過程實現第26頁,共69頁,2023年,2月20日,星期三響應事件兩個內置響應事件Initialize

提供了執行由類創建的對象初始化的機會Terminate

提供了執行任何清除處理的場所第27頁,共69頁,2023年,2月20日,星期三Initialize當由一個類創建對象時,就觸發了Initialize事件,所以可用于是首批代碼的執行PrivateSubClass_Initialize() ‘InitA為只讀屬性,將初始值設為1 mvarInitA=1 MsgBox"A的初始值"&InitAEndSub第28頁,共69頁,2023年,2月20日,星期三Terminate當釋放一個對象時,觸發Terminate事件

可以向Terminate事件中添加代碼以解除與此對象相關聯的相關對象,或在對象被破壞時應該執行的過程PrivateSubClass_Terminate() MsgBox"對象被釋放"EndSub第29頁,共69頁,2023年,2月20日,星期三文檔化類從“工具”菜單中選擇“過程屬性”從“工程”菜單中選擇“添加文件”第30頁,共69頁,2023年,2月20日,星期三使用對象瀏覽器第31頁,共69頁,2023年,2月20日,星期三創建和使用一個類實例(對象)聲明對象變量創建對象使用對象屬性和方法釋放對象第32頁,共69頁,2023年,2月20日,星期三聲明對象變量聲明一個數據類型為對象類的變量

Privatem_XqasCStudent使用New關鍵字聲明一個數據類型為對象類的變量

Privatem_XqasnewCStudent利用定義為對象的數據類型去聲明一個變量

Privatem_XqasObject第33頁,共69頁,2023年,2月20日,星期三創建對象通過使用帶有New關鍵字的Set語句顯式地創建對象

setm_Xq=newCStudent通過使用對象而隱式地創建對象

m_Xq.Study通過使用CreateObject函數創建對象第34頁,共69頁,2023年,2月20日,星期三設定、獲取對象屬性舉例說明第35頁,共69頁,2023年,2月20日,星期三釋放對象的引用SetXobject=Nothing第36頁,共69頁,2023年,2月20日,星期三定義類中的常量避免幻數定義局部常量(Const)使用Enum語句(枚舉變量)定義全局長整型常量定義字符串常量第37頁,共69頁,2023年,2月20日,星期三集合集合提供了一種把一組相關的對象和一個“包含”它們的對象連接起來的方法集合本身是一個對象,并由類來創建,該類稱為集合類通過將私有的集合對象包裝到類模塊中,可實現部件的對象模型的集合,這樣就定義了一個集合類第38頁,共69頁,2023年,2月20日,星期三Collection

對象示例

聲明Collection對象Count屬性Add方法添加成員Remove方法刪除成員Item方法返回特定成員ForEach...Next枚舉集合舉例第39頁,共69頁,2023年,2月20日,星期三在VB6.0中創建集合類在類模塊中定義類(CStudents)創建集合對象實例向集合類中添加屬性和方法使用集合類第40頁,共69頁,2023年,2月20日,星期三創建集合對象實例PrivatemColStudentsAsCollectionPrivateSubClass_Initialize()'創建集合對象

SetmColStudents=NewCollectionEndSubPrivateSubClass_Terminate()SetmColStudents=NothingEndSub第41頁,共69頁,2023年,2月20日,星期三集合類中添加屬性和方法與Collection類似,集合類必須提供添加(Add)、刪除(Remove)成員以及返回(Item)特定成員的功能第42頁,共69頁,2023年,2月20日,星期三Add方法PublicFunctionAdd(StudentNameAsString,SexAsInteger,OptionalsKeyAsString)AsStudent'創建新對象

DimobjNewMemberAsStudentSetobjNewMember=NewStudent'設置傳入方法的屬性

objNewMember.StudentName=StudentNameobjNewMember.Sex=SexIfLen(sKey)=0ThenmColStudents.AddobjNewMemberElsemColStudents.AddobjNewMember,sKeyEndIf'返回已創建的對象

SetAdd=objNewMemberSetobjNewMember=NothingEndFunction第43頁,共69頁,2023年,2月20日,星期三Remove方法PublicSubRemove(vntIndexKeyAsVariant)'刪除集合中的元素時使用。

'vntIndexKey包含索引或關鍵字,這是為什么要聲明為

Variant的原因

'語法:x.Remove(xyz)mColStudents.RemovevntIndexKeyEndSub第44頁,共69頁,2023年,2月20日,星期三Item方法PublicPropertyGetItem(vntIndexKeyAsVariant)AsCStudent'引用集合中的一個元素時使用。

'vntIndexKey

包含集合的索引或關鍵字,

'這是為什么要聲明為

Variant

的原因

'語法:Setfoo=x.Item(xyz)orSetfoo=x.Item(5)SetItem=mColStudents(vntIndexKey)EndProperty第45頁,共69頁,2023年,2月20日,星期三使ForEach...Next

有效

‘NewEnum必須返回一個集合的枚舉算子的IUnknown接口。 PublicFunctionNewEnum()AsIUnknown SetNewEnum=mcolEmployees.[_NewEnum]EndFunction委派給Collection對象的最重要的東西是它的枚舉算子。枚舉算子是一個小對象,該對象知道如何遍歷集合中的各項。不能用VisualBasic來書寫枚舉算子對象,因為Employees類是基于Collection對象的,可以返回Collection對象的枚舉算子—它自然知道如何枚舉Collection對象所保存的各項。包圍Collection對象的_NewEnum方法的方括號是必要的,這是因為方法名前面的下劃線。前面的這個下劃線是一個約定,它指明該方法是隱藏在類型庫中的。不能把自己的方法命名為_NewEnum,但是可以把它隱藏在類型庫中,并將ForEach...Next所需要的過程ID賦給它。第46頁,共69頁,2023年,2月20日,星期三隱藏

NewEnum在“工具”菜單上,單擊“過程屬性”,打開“過程屬性”對話框,在“名稱”框中,選擇NewEnum方法。

單擊“高級”,顯示一些高級功能。選中“隱藏該成員”,使NewEnum隱藏在類型庫中。

在“過程標識符”框中,鍵入-4,將ForEach...Next

所需要的過程標識符賦給NewEnum。單擊“確定”。第47頁,共69頁,2023年,2月20日,星期三其它PublicPropertyGetCount()AsLong'檢索集合中的元素數時使用。語法:Debug.Printx.CountCount=mColStudents.CountEndPropertyPublicSubClear()SetmColStudents=NewCollectionEndSub第48頁,共69頁,2023年,2月20日,星期三利用類生成器構建集合類手工建立繁瑣首先利用類生成器構建類然后利用類生成器構建集合類第49頁,共69頁,2023年,2月20日,星期三作業利用集合類創建學生成績信息輸入程序,并成批保存到數據庫中第50頁,共69頁,2023年,2月20日,星期三接口接口就是一些屬性、方法和事件的集合單獨的Customer類可以定義公共屬性和方法(復雜)將對象的功能分為被稱為接口的邏輯集一個例程隨后可以使用這些接口并確保它只使用該接口正確的屬性和方法SendToSendFromMessageSendDeleteFaxNumberTransmitPhoneNumberCallNameAddressBuyIDefaultIPhoneIFaxIEmailCustomerNameAddressBuyPhoneNumberCallFaxNumberTransmitSendToSendFromMessageSendDelete第51頁,共69頁,2023年,2月20日,星期三使用接口的益處簡化開發

在一個大型程序中,一個類可以有很多不同的屬性和方法以提供特定類型的功能。如果屬性和方法組合到接口中,類的開發就被簡化了。一組類中的標準功能

一個接口提供了一組預定義的屬性和方法簡化的再利用

可以在任意數量的類中實現一個接口,如果以后想在不同的類中定義同一組屬性和方法,可以通過在其它類中實現接口來再利用第52頁,共69頁,2023年,2月20日,星期三使用接口的益處添加了新功能但不影響已有的接口

如何向Customer中增加Mobile功能?

1、更改IPhone接口2、添加新接口IMobile

思考:軟件是如何升級的?改善的多態性

實現統一接口的多重類一般可以通過使用多態性的接口進行訪問獲得實現繼承性

為了防止多個類中代碼的重復,可以在單個類中開發公共的代碼,該類稱為基類,可通過引用每個類中的基類的接口實現繼承第53頁,共69頁,2023年,2月20日,星期三創建并實現接口使用VB6創建接口使用新的Implements關鍵字實現接口使用替代接口第54頁,共69頁,2023年,2月20日,星期三VB6創建接口添加一個類(Isave)添加空的方法(Save)模塊級變量聲明和過程代碼?

在一個用作接口的類模塊中的代碼,包括定義的私有變量和事件,當實現接口時將被忽略接口就是代表接口封裝的成員(方法以及屬性)的原型集合;也就是說,它只包含成員過程的聲明部分。第55頁,共69頁,2023年,2月20日,星期三Implements語句指定要在包含該語句的類模塊中實現的接口或類Implements[InterfaceName|Class]Implements語句不能在標準模塊中使用

第56頁,共69頁,2023年,2月20日,星期三實現接口同一接口可以在應用程序中的任意數量的窗體或類模塊(不含標準模塊)中實現用Implements語句聲明接口從”對象”框中選擇接口,從“過程/事件”框中選擇屬性和方法添加代碼以實現接口第57頁,共69頁,2023年,2月20日,星期三使用接口將對象分配給接口聲明帶有接口變量的過程第58頁,共69頁,2023年,2月20日,星期三將對象分配給接口聲明對象變量

PrivatemCustomerasCCustomer聲明接口類型變量

PrivatemIsaveasIsave將接口對象賦給對象變量

setmCustomer=NewCCustomer

setmIsave=mCustomer‘不要New使用接口變量引發屬性或方法

mIsave.save第59頁,共69頁,2023年,2月20日,星期三聲明帶有接口變量的過程聲明對象變量

PrivatemCustomerasCCustomer創建過程以實現該操作

publicsubsave(ObjasIsave) ifobj.isdirtythen obj.save endif endsub調用過程并將對象作為變量傳遞

savemCustomer第60頁,共69頁,2023年,2月20日,星期三用接口實現多態性多態性就是利用公共接口與來自不同類的對象交流的能力實現多態性

多重類可以實現同一接口,該接口中所定義的屬性和方法隨后可以被引發,以作用于由實現接口的類所創建的任意對象。

PrivatemCustomerasCCustomer

PrivatemStudent

asCStudent

savemStudent

savemCustomer第61頁,共69頁,2023年,2月20日,星期三集合多態性的實現可以使用同集合相

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論