VFP第七章課件(面向對象程序設計).ppt_第1頁
VFP第七章課件(面向對象程序設計).ppt_第2頁
VFP第七章課件(面向對象程序設計).ppt_第3頁
VFP第七章課件(面向對象程序設計).ppt_第4頁
VFP第七章課件(面向對象程序設計).ppt_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、,面向對象的程序設計,第七章,Visual FoxPro,第七章 面向對象的程序設計,面向對象程序設計(簡稱OOP)技術最近幾年在計算機領域得到了迅猛發(fā)展,它是程序設計方法的一場革命。 與傳統(tǒng)的結構化程序設計(面向過程程序設計)相比,它具有許多優(yōu)點,其中最主要的是,面向對象程序設計是按照人類認識世界的方法和思路方式來解決問題。 面向對象程序設計試圖使程序設計環(huán)境適合于現實世界的問題,而不是象過程程序設計所要求的使現實世界的問題適合于程序設計語言。,. 面向對象程序設計與過程化程序設計的比較,. 過程化(結構化)程序設計及其優(yōu)缺點 結構化程序設計的設計方法,是將程序結構按功能劃分成若干基本模塊,

2、這些模塊形成一個樹形結構,自頂向下,逐步求精。程序設計時,使各模塊之間的關系相對緊密。 每一模塊內部均由順序、選擇、和循環(huán)三種基本結構組成,其模塊化實現的具體方法是使用了過程(子程序)。 這樣,一個較復雜的系統(tǒng)按功能分解成許多易于控制和處理的子系統(tǒng)、子任務,這些子系統(tǒng)、子任務都是可獨立編程實現的子程序模塊,而這些子程序均由分級的用戶界面菜單實現調用。,結構化程序設計的優(yōu)缺點,在大型軟件系統(tǒng)設計中,由于軟件系統(tǒng)本身的復雜性,要求必須許多人通力合作,采用工程化的方法進行開發(fā)和管理,這也對程序設計語言和程序設計方法提出了更高的要求。 通過使用結構化程序設計方法,可以對整個任務進行清晰嚴格的劃分,使每

3、個程序員能明確了解自己的工作任務以及與他人的接口。 每個程序員可以獨立地設計調試自己負責的模塊,最終各模塊也能夠順利地集成到整個系統(tǒng)中去。 結構化程序設計方法,由于模塊之間邏輯結構清晰,功能相對獨立,滿足了大型軟件系統(tǒng)易維護性和可讀性的要求。 因此,結構化程序設計能夠較好地滿足大型軟件系統(tǒng)的設計要求,是現代軟件工程的基礎。,結構化程序設計的優(yōu)缺點,盡管結構化程序設計具有許多優(yōu)點,但它仍然是一種面向數據和過程的設計方法,它把數據和過程分離為相互獨立的實體。 程序員在編程時必須要時刻考慮所要處理的數據格式,對于不同的數據格式,即使要做同樣的處理或對相同的數據格式要做不同的處理,都需要編寫不同的程序

4、,因此重用性不夠好。 另一方面,當數據和過程相互獨立時,總存在用錯誤的數據調用正確程序模塊,或用正確的數據調用錯誤程序模塊的可能性。 因此,要使數據與程序始終保持相容等問題,結構化程序設計方法本身是無法解決的,這可借助于新一代設計方法面向對象的程序設計方法。,. 面向對象程序設計及其優(yōu)越性,面向對象程序設計將數據及對數據的操作融為一體,作為一個相互依存、不可分割的整體來處理。它采用數據抽象和信息隱藏技術,將對象及對象的操作抽象成一種新的數據類型類,并且考慮到不同對象之間的聯(lián)系和對象類的重用性。 面向對象程序設計所追求的目標是將現實世界的問題求解盡可能簡單化,采用符合人類處理問題的思維方式。 它

5、用“對象”表現事物,用“事件”表示處理事物的動作,用“方法”表現處理事物的過程,用“消息”傳遞對象與對象之間的相互聯(lián)系。,. 面向對象程序設計及其優(yōu)越性,面向對象程序設計時,不再是單純地從代碼的第一行一直編寫到最后一行,而是考慮如何創(chuàng)建對象,利用對象來簡化程序設計,并提供代碼的可重用性。同時面向對象程序設計也吸取了結構化程序設計的優(yōu)點。 面向對象程序設計,可以支持先進的軟件開發(fā)策略:編寫可重用代碼,編寫可維護的代碼,共享代碼,優(yōu)化已有的代碼等。 有了高質量的可重用代碼就能有效地降低軟件的復雜性,提高軟件開發(fā)效率。開發(fā)者在設計軟件時可以利用一些已經精心設計好并且經過測試的代碼,這些可重用的代碼被

6、組織和存放在程序設計環(huán)境的類庫中,使以后程序設計過程變得更簡單。,. 面向對象程序設計及其優(yōu)越性,面向對象程序設計方法具有模塊化、信息封裝與隱藏、抽象性、繼承性、多態(tài)性等特點,它又解決了大型軟件系統(tǒng)設計與管理中所需的軟件可靠性、可重用性、可擴充性、可維護性及提高開發(fā)效率等問題。因此,面向對象程序設計能夠更好地支持大型軟件系統(tǒng)的開發(fā)。 Visual FoxPro不但仍然支持標準的結構化程序設計,而且在語言上還進行了擴展,提供了面向對象程序設計的強大功能和更大靈活性。,面向對象程序設計的概念,. 面向對象程序設計的基本概念,面向對象技術為軟件開發(fā)提供了一種新的思想,引入了許多新的概念,這些概念是理

7、解和使用面向對象技術的基礎和關鍵。 . 對象(Object) 現實世界的實體事、物、概念等,都統(tǒng)稱為對象。在面向對象系統(tǒng)中一切成分都是對象,大到整個系統(tǒng)、項目、數據庫、表、表單,小到窗口、控件都被視為對象。 對象是一個邏輯實體,它包括數據和完成處理所需要的程序代碼,是數據和代碼的組合。,. 對象,在VFP中稱對象的特征和數據為“屬性”,稱由對象識別的一個動作為“事件”,稱在對象上完成的操作過程為“方法”。 定義了對象的屬性、事件和方法就決定對象的外觀和它的動作。因此,對象是屬性、事件和方法的集合體,用戶通過屬性、事件和方法來處理對象。 例如,一個按鈕就是一個對象。按鈕的名稱、位置、大小、和顏色

8、都是按鈕對象的“屬性”;用鼠標點擊按鈕就產生按鈕的Click(單擊對象)“事件”,并驅動該事件的代碼程序。如果程序中關閉數據表,并調用Release“方法”程序,該方法將關閉釋放當前表單。,. 對象,綜上所述,我們可以把對象理解為: 對象是一個封裝了屬性、事件和方法的實體,對對象的操作是通過對象的屬性、事件和方法來完成。 屬性描述了對象的狀態(tài)、特征; 事件是由對象識別的動作,一個事件產生后會觸發(fā)相關聯(lián)的代碼,每個對象都有特定的事件; 在事件代碼中可以調用方法程序,方法程序也可以被別的方法程序調用。,. 類,“類”源于日常生活中類別、分類概念。同類實體具有相同的屬性和行為特征。類是對一組相似對象

9、的共同抽象描述,它將該組對象所具有的共同特征集中起來,用于說明該組對象的性質和能力。 可以看出,“類”是將相同屬性和行為特征的對象,提取共同屬性和特征而產生的,是對象抽象化的結果,是對象的蘭圖和框架。 而“對象”是類的具體實例,它是將類所描述的共同特征賦予具體實體而形成的。因此,類與對象既有區(qū)別,又有聯(lián)系,兩者關系十分緊密。 所有對象的屬性、事件和方法都是在定義類時被指定,由于類是定義了對象特征、外觀和行為的模板,所以對象由類生成,生成的對象也自然具有相同的屬性、事件和方法。例如,由復選框類、單選按鈕類可以生成各種形式的復選框、單選按鈕。,. 面向對象程序設計的特性,與結構化程序設計相比,面向

10、對象程序設計有許多突出特性,即抽象性、封裝性、繼承性和多態(tài)性。 抽象性 一般而言,抽象是對復雜的實體的簡明表示,它強調了我們所關心的或認為重要的信息,而將不重要的信息予以忽略。 例,我們對電話的認識已經抽象化了,撥號、講話、聽音這就是我們印象中的電話,而不關心和了解電話內部的線路和工作原理。,面向對象程序設計的特性 抽象性,面向對象程序設計利用抽象性,提取一個類或對象與眾不同的特征,而不對該類或對象的所有信息進行類和容器的層次結構處理,抽象性能夠忽略對象的內部細節(jié),隱藏不必要的復雜性。 例如,在創(chuàng)建一個表瀏覽窗口類時,窗口中有一系列定位表記錄指針的按鈕,我們可以把這些按鈕作為一個整體進行抽象,

11、而不必關心其中的單個組件,以及它們相互之間是如何作用的。,面向對象程序設計的特性 封裝性,封裝實際上是一種信息隱藏技術,抽象性通過封裝得以實現。 封裝就是指將對象的方法程序和屬性代碼包裝在一起。封裝將操作對象的內部復雜性與應用程序的其它部分隔離開來。 例如,我們將電話的零部件和線路封裝在電話的外殼里,這樣使用戶看不到電話內部線路的復雜性,只專心撥號、講話、聽音,從而也產生用戶對電話具有撥號、講話、聽音功能這種抽象化的認識。,面向對象程序設計的特性 繼承性,例如,由基本類型的電話(撥號、講話、聽音功能),可以派生出電話傳真機、移動電話、公用投幣電話等,這些電話都繼承了電話基本類型的撥號、講話、聽

12、音功能,又添加了各自的獨特功能。 由于有了繼承性,當我們把基本類型的電話由撥號改為按鍵,其它類型的電話都可以改為按鍵,繼承性使我們不必研究每種電話如何實現按鍵。 繼承性即子類延用父類特征的能力。一個子類可以擁有其父類的全部功能,然后在此基礎上,可以添加其他控件或功能。繼承性體現了類層次中的“共享”機制。,面向對象程序設計的特性 繼承性,由于有繼承性,就可以使得在一個類上所做的改動反映到它的所有子類當中,若發(fā)現類中有一個小錯誤,用戶不必逐一修改各子類的代碼,只需要在父類中改動,然后這個變動將會體現在全部子類中。這種自動更新可節(jié)省用戶的時間和精力。 若類的層次具有多層,則這種繼承性還具有傳遞作用,

13、即下層的子類可繼承其以上各層父類的全部功能。,面向對象程序設計的特性 多態(tài)性,例:F1 F12功能鍵,不同的軟件環(huán)境對每一功能鍵有不同的功能定義。同是一鍵在不同的軟件中就會產生不同的操作,這就是多態(tài)性。 每個對象不可能只是單獨工作,完成某一任務可能要某些對象通過協(xié)同工作來完成,一個對象可以請求或命令另一個對象完成某一操作。 對象之間是通過“消息”傳遞實現相互聯(lián)系。向某個對象發(fā)送消息,就是要求該對象執(zhí)行一個操作。 一個消息只說明接受者應該執(zhí)行哪種操作,而不說明怎樣去執(zhí)行這個操作,操作的具體執(zhí)行由消息接受者確定。,面向對象程序設計的特性 多態(tài)性,所謂多態(tài)性是指同一個消息可以根據接收消息的對象不同采

14、用不同的操作。 也就說,當不同的對象收到相同的消息時將產生不同的操作。 例如VFP中的加“+”運算符,不僅可以進行數值相加,而且可以進行字符串相加。這完全取決于表達式中加法運算符“+”所操作的對象的數據類型。,. VFP中的基類,基類是系統(tǒng)內部已定義好的基本類,用戶可以利用這些基類創(chuàng)建自己的對象,或派生出子類。 下面給出VFP的基類: 復選框、組合框、命令按鈕、控件、自定義、編輯框、表頭、圖象、標簽、線條、列表框、綁定型控件、容器控件、形狀、微調、文本框、容器、表單集、表單、表格、列、頁框、頁面、工具欄、選項按鈕組、命令按鈕組、選項組、分隔符等。,VFP 中的基類,由基類可以創(chuàng)建對象,對象將繼

15、承該類的功能。每一個對象都會對特定事件作出響應,對一些最小事件(基本事件)的響應,各類是共同的。 事件 是一種預先定義好的特定動作,它由對象來識別。 用戶可以編寫程序碼對相應的動作進行響應。 事件可以由操作者的一個動作產生,如單擊鼠標或按下一個鍵;也可以由程序代碼或系統(tǒng)產生。,VFP基類的最小事件集,每個基類都可能有各自的區(qū)別于其它基類的屬性、事件或方法,但VFP基類都至少包含以下三個事件和四個屬性。 VFP的基類有以下最小事件集所有基類都具有的事件組成的集合,包含這三個事件: Init (初始): 當對象創(chuàng)建時激活。 Destroy(破壞): 當對象從內存中釋放時激活。 Error (錯誤)

16、: 當類中的事件或方法發(fā)生錯誤時激活。,VFP基類的最小屬性,VFP的基類都有各自屬性,但還有最小屬性(最基本屬性),所有基類至少包含以下四個屬性: Class(類): 該類對象屬于何類,返回派生對象的類名稱。 BaseClass(基類): 該類是由何基類派生而來,指定被引用對象的基類的類名。例如Form(表單),CommandButton(命令按鈕)或TextBox(文本框)。 ClassLibrary(類庫): 該類從屬于哪個類庫,指定用戶自定義類庫的文件名。 ParentClass(父類): 返回對象所屬于的父類名。 若該類直接由VFP基類派生而來,則ParentClass屬性值與Bas

17、eClass屬性值相同,即父類為基類。,. 容器類和控件類,VFP的基類有兩大主要類型,容器類和控件類。因此VFP的對象也可分為這兩大類型。 容器類 容器類中可以包含其他對象,這些對象可以是容器類對象,也可以是控制類對象,并允許訪問這些對象。 例如,若創(chuàng)建一個含有兩個列表框和兩個命令按鈕對象的容器類,而后將該類作為一個對象加入到表單中。這樣在設計時還可以對其中的任何一個列表框或命令按鈕對象進行調整,如可以改變列表框的位置,可以給命令按鈕加注標題。 此外,還可以在容器中添加新的對象,如可以給列表框加標簽來標明列表框。 容器類提供了一種將多個對象按需要進行組合的功能。容器類中的對象還可以是容器類的

18、,這就形成了容器類對象的嵌套,因此容器類是允許有層次的。,容器類,VFP每個容器類所能包含的對象種類是有一定限制:(容器所能夠包含的對象) 命令按鈕組:命令按鈕 容器:任意控件 控件:任意控件 自定義:任意控件、頁框、容器和自定義對象 表單集:表單、工具欄 表單:頁框、任意控件、容器或自定義對象 表格列:表頭和除表單集、表單、工具欄、計時 器和其他列以外的其余任一對象。 表格:表格列 選項按鈕組:選項按鈕 項目:文件、服務程序 頁框:頁面 頁面:任意控件、容器和自定義對象 工具欄:任意控件、頁框和容器,控制類,控制類也可以包含其他對象,這些對象在設計和運行時是作為一個整體對待進行修改或操作,而

19、不能單獨對其中的個別對象進行修改或操作。 也就是說,控制類中的對象不能是容器類對象,只能是最基本的對象,不能再分隔為幾個其它對象。 容器類與控制類的根本區(qū)別在于,容器類可以按層次訪問容器類中的對象;而控制類的對象都是同一層的對象,不能再包含下一層對象。,. 擴展基類,用戶可以對VFP的基類進行擴展,創(chuàng)建派生出滿足自己需要的子類。 在創(chuàng)建子類后,可以設置自己的默認控件屬性(如顯示的標題、文本顏色、背景顏色等) 例如,我們可以由表單或表單集基類,創(chuàng)建具有自定義外觀和方法的表單類,用它作為創(chuàng)建所有表單的模板。,擴展基類,除了由基類派生子類以外,還可以在基類的基礎上,創(chuàng)建具有封裝功能的控件。 例如,假

20、設需要一個按鈕,在單擊該鈕時釋放退出該表單。 可以在命令按鈕類的基礎上創(chuàng)建一個類,將它的Caption 標題屬性設置為 “退出”; 并在按鈕的Click事件(鼠標指針點擊控件,此事件發(fā)生)的過程代碼中添加 “THISFORM.Release” 方法(從內存中釋放表單), 這樣就可以將這個新按鈕作為控件對象添加到應用程序的任何表單中。 另外,子類可以不限于由單個基類派生,可以基于多個基類創(chuàng)建新子類,可以在一個類的定義中添加多個控件類。,. 處理類和對象,我們知道“類”是將相同屬性和行為特征的對象,提取共同屬性和特征而產生的;“對象”是類的具體實例。 同一類對象的屬性、事件和方法都在定義類時被確定

21、,而每一個由具體類創(chuàng)建的對象,除了繼承了類的屬性、事件和方法外,還需要定義自己獨特的屬性、事件和方法。 在類設計器中創(chuàng)建類時,可以設置類的屬性、事件和方法。在表單設計器設計表單時引用類創(chuàng)建表單中的對象時,同時設置對象的屬性、事件和方法。 對類和對象設置屬性、事件和方法是類似的。,.類和容器的層次結構,類分為容器類和控制類,對象分為容器對象和控制對象。容器類和容器對象(容器)都可以包含容器類對象和控制類對象。 由此看來容器類和容器(對象)都具有嵌套層次,具有層次結構。 但是類的層次結構和容器的層次結構是VFP中兩個獨立的范疇,因此他們的性質不盡相同。而它們在事件處理機制方面是完全不同的。,類和容

22、器的層次結構,由于類具有繼承性,在類層次結構中,若設有與控制相關聯(lián)的事件、方法代碼(程序),會按子類、父類逐層向上查找與事件相關聯(lián)的事件方法代碼,找到后則執(zhí)行。 在容器層次結構中,各對象在創(chuàng)建時來自不同的類,而這些類之間不存在“子類”與“父類”之間的繼承關系。因此容器的事件方法代碼與他所包含的對象事件代碼是相互獨立無關的。 所以在容器層次結構中,不具有逐層向上查找相關聯(lián)事件方法代碼的事件處理機制。,. 在容器層次結構中引用對象,對于容器中的對象,要處理它需要知道它相對于容器層次結構中的層次關系。 在引用某個對象時,就需要標識出該對象在容器層次結構中的層次。 如同在文件目錄結構中,要訪問一個文件

23、就要標識出訪問該文件的路徑。 VFP中引用對象可以有兩種方式:絕對引用和相對引用。,在容器層次結構中引用對象,對象絕對引用 對象絕對引用是通過提供對象完整的容器層次來引用對象。 例如:在嵌套的容器中,使命令按鈕1(Command1)可用,使命令按鈕2(Command2)禁用,可以通過設置命令按鈕的Enabled屬性來實現。 FormsetFormPageFrame. Page .Command1. Enabled=.T. (表單集表單頁框頁. 命令按鈕Enabled=.T.) FormsetFormPageFrame. Page .Command2. Enabled=.F. (Enabled屬

24、性指定對象能否響應用戶引發(fā)的事件,允許在運行時將對象設置啟用(.T.)或被禁止(.F.)狀態(tài)),對象相對引用,對象相對引用是通過使用一些屬性和關鍵字,可以直接從對象某層次中引用對象。 對象相對引用時,要表示出從哪一級對象開始引用對象,使用的屬性和關鍵字含義如下: Parent(父屬性):引用該對象的所在直接容器的屬性、方法或控制。 THIS : 引用該對象本身(直接由對象本身開始引用)。 THISFORM : 引用包含該對象的表單(由包含該對象的表單開始引用)。 THISFORMSET : 引用包含該對象的表單集(由由包含該對象的表單集開始引用)。,對象相對引用,用于相對引用的屬性和關鍵字,在

25、容器層次結構中表示某個層次,其引用關系為: THISFORMSETTHISFORMTHISProperty (表單集表單對象屬性) ParentObjectProperty (Parent對象屬性) 例如: THISFORMCommand1. Caption=”確定” 通過Caption屬性設置命令按鈕Command1的標題。而Command1是包含在表單中。 THISFORMSET.Form1.Command1. Caption=”確定” 設置表單集中Form1表單里的Command1命令按鈕的標題屬性。,. 設置屬性,對象的屬性既可以在設計對象時設置,也可以在程序運行時重新設置。 在設計對

26、象時,通過屬性窗口可以直接設置屬性值,并且立即作用于對象。 在設計對象時可以設計對象某事件的代碼程序,并在代碼程序中也可以設置對象屬性的代碼。這樣在運行時,當該事件發(fā)生后觸發(fā)其代碼程序,將對對象屬性重新設置。 在運行時可以設置并可讀取屬性值的屬性稱“讀寫屬性”;而在運行時只能讀取屬性值的屬性稱“只讀屬性”。用戶在編程時可以將屬性值賦給變量,也可以直接參與表達式運算等。,設置屬性,設置屬性值的語法是: ContainerObjectProperty=Value (即:容器對象屬性值) 例:(見:演示圖片表單.SCX) THISFORMImage1Visible=.T. & 設置表單中的圖像1可見

27、 THISFORMImage2Visible=.F. & 設置表單中的圖像2不可見 THISFORMBackcolor=7388700 &設置表單的背景顏色,設置屬性,在屬性設置時,可能要為一個對象設置多個屬性,或者為同一容器中的多個對象設置屬性,都要給出相同的層次結構中的從屬關系(類似路徑)。為此VFP 提供了WITH ENDWITH,結構語句,簡化了設置多個對象、多個屬性的過程。例: WITH THISFORMSETForm1 .Image1Visible=.T. .Image2Visible=.F. .Backcolor=RGB(255,255,0) ENDWITH,. 調用對象方法,一

28、個對象當識別到一個事件發(fā)生后,會對該事件作出響應,通過執(zhí)行該事件的代碼程序或調用方法程序實現某種操作。 例如,當用鼠標單擊命令按鈕時,觸發(fā)命令按鈕的Click事件,隨即執(zhí)行Click事件對應的代碼程序。 一個對象有各種屬性、事件和方法,VFP為各種對象的各種屬性、事件和方法定義了默認的屬性和代碼程序(過程),用戶不需要再一一全部進行定義。 但是對象的關鍵屬性、事件和方法需要用戶根據需要在設計時定義它的屬性值和過程,如果沒有指定相關事件的屬性值和處理程序,當事件發(fā)生時,該對象并不對事件產生反應。,調用對象方法,調用對象方法的語法: Object.Method 即, 這里對象引用同樣可以絕對引用或

29、相對引用。 例:THISFORMBox(100,150) & Box方法在表單中畫一個矩形 THISFORMRefresh & Refresh方法刷新表單 有些方法可以返回值,方法名后要有園括號。如果方法要使用多個參數,要把這些參放到方法名后的園括號內,并用逗號將它們分開。 語法是:Parent. Object.Method( ),. 響應事件,當事件發(fā)生時,該事件的代碼程序(過程代碼)就將被執(zhí)行,這是對事件的響應。 對于控件類對象,它們能夠識別的事件是固定的,用戶不能用程序設計方法再產生其它事件,但是可以設計和調用與這些事件相關的過程代碼。,響應事件,例如:對表單中標題為“確認”的命令按鈕為

30、其Click事件添加如下過程代碼: SELECT RSDA APPENA BLANK REPLACE RSDA.姓名 WITH THISFORM. TxtName.Vaule THISFORM.Release & 調用從內存中釋放表單方法程序 這樣,當用戶單擊該“確認”命令按鈕時,將用TxtName文本框的Vaule屬性值替換表的姓名字段,然后釋放表單。,響應事件,事件的觸發(fā)方式 事件有兩種觸發(fā)方式 第一種,是用戶的干預觸發(fā)事件,如點擊鼠標,可以產生Click(單擊)、DoubleClick(雙擊)、MouseMove(移動到)、DragDrop(托放)等事件,按鍵可以產生KeyPress(按

31、鍵)事件,這是用戶實際操作的情況。 另外,用戶還可以通過MOUSE、KEYBOARD和ERROR命令來模擬鼠標、鍵盤操作和模擬錯誤,產生相應的事件。,事件的觸發(fā)方式,MOUSE命令產生Click(單擊)、DoubleClick(雙擊)、MouseMove(移動到)、DragDrop(按鍵)事件, KEYBOARD命令產生KeyPress(按鍵)事件, ERROR 命令產生Error(錯誤)事件。 第二種事件觸發(fā)方式是VFP系統(tǒng)自動產生事件,這類事件占VFP事件的絕大部分。 例如,當創(chuàng)建對象時,都會自動產生Init(初始)事件;釋放對象時,都會自動產生Destroy (釋放)事件等。,響應事件,

32、事件觸發(fā)順序 對于一個對象可以觸發(fā)多個事件,而且事件觸發(fā)也有先后順序。了解事件的觸發(fā)順序,并為不同事件編寫出相應的關聯(lián)代碼,是很重要的。 對于表單事件的順序是Load(裝載)、Init(初始)、Show(顯示)、Activate(激活)、GotFocus(得到焦點)。 表單被釋放時的事件順序是LostFocus(失去焦點)、Dcactivate(失去活動)、Destroy(破壞)、Unload(卸載)。,響應事件,容器層次中的事件處理 在容器層次中,容器不處理所包含的控件相關聯(lián)的事件,也就是容器事件的過程代碼與控件過程代碼相互獨立。 例如,當用戶單擊表單上的命令按鈕時,表單的Click事件不會

33、發(fā)生,只有命令按鈕的Click事件發(fā)生。 當事件發(fā)生時,只有與事件相關聯(lián)的最里層對象識別事件,較高層的容器不識別該事件。容器事件與控制事件是相互獨立的。,響應事件,類層次中的事件處理 當表單的控制對象(控件)基于用戶自定義類,在控件的一個事件發(fā)生時,若此事件有相關聯(lián)的代碼,則立即執(zhí)行;否則在類層次中向上一層搜索事件代碼,找到了就執(zhí)行。 若在類層次中一直未找到,即使在容器層次中有相關事件的過程代碼,但是不屬于該對象所屬類鏈上的事件代碼,也不會執(zhí)行。 在一個對象或子類的事件過程代碼中,可以使用作用域操作符(:)調用一個父類的方法。,類層次中的事件處理,語法: : 即, : “:”操作符用來從子類方

34、法內部執(zhí)行父類方法。在創(chuàng)建子類時,由于類的繼承性使子類自動從父類那里繼承方法。 在使用“:”操作符時,既能運行子類中的附加代碼,又可執(zhí)行父類的過程代碼。 否則,若沒有使用“:”操作符調用父類代碼,只會執(zhí)行子類中定義的過程代碼。它阻止了父類屬性、事件、方法繼承性的傳遞。,響應事件,設計調試中對事件過程跟蹤 VFP為面向對象設計提供了方便的調試手段。在對象的運行過程中,通過對事件的跟蹤,為設計和調試事件過程代碼提供了依據。 在VFP工具菜單中的調試器項里,可以通過事件跟蹤來實現。每當類及對象相關聯(lián)的事件發(fā)生時,事件跟蹤都會把它們記錄下來,幫助用戶調試過程代碼。 在事件跟蹤對話框中,選擇開啟事件跟蹤

35、選項,當事件追蹤表中所列出的事件發(fā)生時,將記錄在調試器輸出窗口或指定文件中。,. 類的設計和使用,.類的創(chuàng)建 創(chuàng)建類可以有三種方法: ()在項目管理器中選擇類選項頁,并選擇項目管理器的新建按鈕; ()從系統(tǒng)文件菜單中選擇新建命令,再選擇“類”,然后單擊新建文件按鈕; ()在命令方式中使用CREATE CLASS命令。,類的創(chuàng)建,以上三種方式均彈出新建類對話框,在“類名”中輸入新建類的名稱; 在“派生于”中選擇新建的類派生于哪個基類或自定義類; 在“存儲于”文本框中輸入一個文件名,表示將該類存儲于哪個類庫文件中(.VCX及.VCT) (和其它VFP文件一樣,VFP的類庫文件也是以.DBF文件格式

36、存放信息)。 可以將新建的類存儲在已存在的類庫文件中。最后按確定按鈕進入類設計器進行類的設計。,類的創(chuàng)建,設計類時還可以為該類新建多個屬性和新建方法程序。這些屬性和方法屬于類,而不屬于類中的單個組件。 在系統(tǒng)的類菜單中選擇新建屬性項,為該類新建屬性。 在新建屬性對話框中,從“名稱”文本框中輸入新屬性的名稱;在“可視性”列表框中選擇屬性的類型。 其中“公共”選項表示屬性既可以被子類繼承,也可以被對象實例訪問;“保護”選項表示屬性不能被對象實例訪問,只能被該類定義的方法程序或該類的子類所訪問;“隱藏”表示屬性只能被該類定義的成員(對象)訪問,該類的子類也無法訪問。 按添加按鈕就將新屬性加到當前類中

37、。,類的創(chuàng)建,在系統(tǒng)類菜單選擇新建方法程序選項后,可以在新建方法程序對話框中為類創(chuàng)建新的方法程序,同時可以指定該方法的“可視性”。 在系統(tǒng)類菜單選擇編輯屬性/方法程序選項后,可以編輯該類所有屬性和方法程序。,. 類的修改,在創(chuàng)建類之后,可以對類進行修改,可以增加類的功能或修改類的錯誤。 對類的修改將被所派生的子類繼承,并將影響基于該類的所有對象。 在項目管理器中選中要修改的類,然扣單擊修改按鈕,將打開類設計器進行修改 。也可以用MODIFY CLASS命令打開類設計器。 注意,如果類已經被其它方法程序使用,不應該修改類的Name屬性,否則可能找不到這個類。,. 使用自定義類,當要使用用戶自定義

38、類時,可以從項目管理器中將該類拖到類設計器或表單設計器中,可像使用標準操作一樣地使用它們。 如果將一個表單類拖到表單設計器創(chuàng)建新表單時,這就形成在表單中創(chuàng)建表單,這是不允許的,將提示是否建一個表單集存放這兩個表單。 這時可以先建表單集,再把原表單刪除。,. 創(chuàng)建可視類,如果用戶所創(chuàng)建的新類基于控件類或容器類,則可以向它添加控件成為可視類。 在類設計器中可以創(chuàng)建容器類和控制類,并添加多個控件來定義該類。 在類設計器中可以設計調整每個對象的外觀,使得類的組件很容易設計和維護。 可視類用在表單中可以實現各種操作,以及輸入、輸出的作用。 在類設計器還可以創(chuàng)建非可視類。,. 類瀏覽器,類是面向對象程序設

39、計的基礎,VFP除了提供了類設計器以外,還提供了另一個類的輔助設計工具類瀏覽器。 使用類瀏覽器可以幫助我們完成以下工作: (1) 瀏覽類庫。顯示類庫或表單中的類和表,顯示類屬性和方法。查看、 使用和管理類及其用戶定義的組件。 (2) 設計和管理應用程序組件。 (3) 打開一個或多個類庫文件,并在類庫文件中查看類之間的層次關系。 類瀏覽器是一個可獨立運行的程序,它有自己的窗口、界面、工具欄和快捷菜單,可以輔助用戶完成類的查看和編輯等多種功能。,. 類瀏覽器簡介,啟動類瀏覽器 啟動類瀏覽器的方法: ()單擊工具菜單中的類瀏覽器項。 ()單擊程序菜單中的運行菜單項,然后在打開對話框中選擇“Browser”程序,并單擊“運行”按鈕。 ()在命令方式中使用 DO BROWESER

溫馨提示

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

評論

0/150

提交評論