第5章VFP語言基礎(chǔ)-面向?qū)ο蟪绦蛟O(shè)計_第1頁
第5章VFP語言基礎(chǔ)-面向?qū)ο蟪绦蛟O(shè)計_第2頁
第5章VFP語言基礎(chǔ)-面向?qū)ο蟪绦蛟O(shè)計_第3頁
第5章VFP語言基礎(chǔ)-面向?qū)ο蟪绦蛟O(shè)計_第4頁
第5章VFP語言基礎(chǔ)-面向?qū)ο蟪绦蛟O(shè)計_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第5章VFP語言基礎(chǔ)-面向?qū)ο蟪绦蛟O(shè)計第一頁,共44頁。 本 章 重 點結(jié)構(gòu)化程序設(shè)計順序、選擇、循環(huán)過程和函數(shù)面向?qū)ο蟮某绦蛟O(shè)計類和對象屬性、方法、事件2第二頁,共44頁。結(jié)構(gòu)化程序設(shè)計到面向?qū)ο蟪绦蛟O(shè)計OOP兩種程序設(shè)計方法 1本質(zhì):功能設(shè)計 2方法:自頂向下、功能分解,從外部功能上模擬客觀世界 3開發(fā)過程:從“做什么”到“如何做” 4優(yōu)點:系統(tǒng)結(jié)構(gòu)性強、便于設(shè)計和理解 5缺點:維護(hù)困難3第三頁,共44頁。面向?qū)ο蟮某绦蛟O(shè)計方法方法:基于問題對象的自底向上的功能綜合,從內(nèi)部結(jié)構(gòu)上模擬客觀世界開發(fā)過程:從“用什么做”到“要做什么”優(yōu)點以對象為中心的問題求解方法簡化程序設(shè)計,更接近現(xiàn)實世界,可

2、降低開發(fā)和維護(hù)的費用提高程序代碼的可重用性可以和各種模型自然的融合5.3 面向?qū)ο蟮某绦蛟O(shè)計基礎(chǔ)4第四頁,共44頁。一、類和對象概述1 類: 所謂類(Class),就是一組具有相同結(jié)構(gòu)、性質(zhì)、共同操作特點及遵守相同規(guī)則的對象的集合。 它是對某種具有共同屬性及其行為特征的對象群體的抽象描述。 對象:是類的一個實例(包含具體數(shù)據(jù)、過程定義)。5第五頁,共44頁。一、類和對象概述2類是靜態(tài)概念,對象是動態(tài)概念 “類”定義了某類對象特征以及對象外觀和行為的模板,它刻劃了一組具有共同特性的對象群體 “對象”則是基于某種類所創(chuàng)建的一個實例在OOP中,類就像是一個模板,對象都是基于這個模板生成的:類定義了對

3、象所具有的屬性、事件和方法,從而決定了該類對象的屬性和它的行為。Visual FoxPro系統(tǒng)為用戶提供29個基類6第六頁,共44頁?;?VFP系統(tǒng)提供的內(nèi)部定義的類,可用于用戶定義子類的基礎(chǔ)子類:是以其它類(已有的)定義為起點,為某一種對象所建立的新類。子類將繼承任何對父類所做的修改用戶自定義類:與基類相似,由用戶自己定義,也可用于派生子類,但無可視化表示形式類7第七頁,共44頁。繼承性(inheritance)子類沿用父類特征的能力如果父類特征發(fā)生改變,則子類將繼承這些新特征多態(tài)性(polymorphism)一些關(guān)聯(lián)的類包含同名的方法程序,但方法程序的內(nèi)容可以不同相同的操作作用于多種類型

4、的對象上獲得不同的結(jié)果,增強系統(tǒng)的靈活性、維護(hù)性和擴(kuò)充性特性8第八頁,共44頁。封裝性 (encapsulation)說明了包含和隱藏對象信息的能力高內(nèi)聚,低耦合抽象性(abstraction)提取一個類或?qū)ο笈c眾不同的特征,而不對該類或?qū)ο蟮乃行畔⑦M(jìn)行處理特性9第九頁,共44頁。對象(Object)是類的實例。每個對象都具有描述它特征的屬性,以及附屬于它的行為。對象把事物的屬性和行為封裝在一起,是一個動態(tài)的概念。對象是面向?qū)ο缶幊痰幕驹?,是“類”的具體實例。每個對象都具有屬性及與之相關(guān)的事件和方法 在VFP中,包含在應(yīng)用程序中的表單及各種控件都是對象。對象是包含數(shù)據(jù)和代碼的實體。在程序

5、設(shè)計中,用屬性、事件和方法來說明對象,屬性就是對象的數(shù)據(jù)內(nèi)容,事件和方法則是對象中包含的代碼。對象(Object)10第十頁,共44頁。屬性(Property) 用于定義對象的特征或某一方面的行為。每個對象都具有屬性,屬性表明了對象的一些基本特征,如大小、顏色、所處的位置等 屬性構(gòu)成: 一方面由對象所基于的類決定;另一方面也可為其定義新的屬性對象的每一種屬性,都是與其它對象加以區(qū)別的特性,都具有一定的含義,并可賦予一定的值。屬性值:對象各屬性的具體內(nèi)容指定可設(shè)置內(nèi)容:由用戶(設(shè)計者)設(shè)置不可設(shè)置內(nèi)容:只讀11第十一頁,共44頁。事件(Event) 事件(Event) 是每個對象可用以識別和響應(yīng)

6、的某些行為和動作??删帉懴鄳?yīng)的程序代碼對事件動作進(jìn)行響應(yīng)。事件是一種預(yù)先定義好的特定動作,被用戶行為或系統(tǒng)事件激活,每個對象都可以對相關(guān)事件的動作進(jìn)行識別和響應(yīng)。在多數(shù)情況下,事件是由用戶的交互行為產(chǎn)生的。不同對象能夠識別的事件內(nèi)容是不一致的,在VFP中,事件集合是固定的(由系統(tǒng)指定),用戶不能進(jìn)行擴(kuò)充。(即用戶不能自己創(chuàng)建新事件) 12第十二頁,共44頁。方法(Method) 是對象能夠執(zhí)行的一個操作流程方法是與對象相關(guān)聯(lián)的過程,也稱方法程序方法程序有系統(tǒng)提供的,也可由用戶根據(jù)需要自己創(chuàng)建VFP方法也均有名稱標(biāo)識,通過名稱使用例:release方法程序也往往與對象事件相關(guān)聯(lián)方法實際上就是對象

7、的內(nèi)部過程(函數(shù)),每個類型的對象都有它自己的方法集。例如在命令按鈕對象中,調(diào)用Move方法可以移動按鈕的位置。與事件不同的是,方法可以由用戶進(jìn)行擴(kuò)展。 13第十三頁,共44頁。二、基類基類:VFP系統(tǒng)提供的內(nèi)部定義的類子類:引用VFP基類或其他子類建立的新類用戶自定義類:與基類相似,由用戶自定義,但無可視的表示形式VFP基類派生子類子類子類14第十四頁,共44頁。 容器類(Container classes)是能夠包容其它類的基類容器類對象可以包含其它對象容器類對象可以作為所包含的對象的父對象 控件類(Control classes)不能夠包容其它類,但可以放在容器類中的基類控件類對象可以包

8、含在容器中不能作為其它對象的父對象容器類與控件類15第十五頁,共44頁。VFP的29個基類1標(biāo)簽9列表框17線條25自定義2文本框10微調(diào)框18形狀26控件3編輯框11表格19容器27工具欄4命令按鈕12圖像20分隔符*28表單5命令按鈕組13計時器21選項按鈕*29表單集6選項按鈕組14頁框22標(biāo)頭*7復(fù)選框15 OLE容器控件23表格列*8組合框16 OLE綁定型控件24頁面*1-20為標(biāo)準(zhǔn)類(控件)(控件箱中帶)蘭色字:容器類,其余為非容器類(控件類)16第十六頁,共44頁。容器類容器類能包含的對象容器任意控件類工具欄任意控件類、頁框、容器表單集表單、工具欄表單頁框、任意控件類、容器、自

9、定義對象表格表格列表格列標(biāo)頭以及除表單、表單集、工具欄、計時器和其它列以外的任意對象頁框頁面頁面任意控件類、容器和自定義對象命令按鈕組命令按鈕選項按鈕組選項按鈕17第十七頁,共44頁。基類的最小屬性集屬性說明Class該類屬于何種類型Baseclass該類由何種基類派生而來(Form,commandbutton或custom等)Classlibrary該類從屬于何種類庫parentclass對象所基于的類。若該類直接由VFP基類派生而來,則Parentclass屬性值與baseclass屬性值相同18第十八頁,共44頁?;惖淖钚∈录?件說 明Init當(dāng)對象創(chuàng)建時激活Destroy當(dāng)對象從

10、內(nèi)存中釋放時激活error當(dāng)類中的事件或方法程序運行中發(fā)生錯誤時激活19第十九頁,共44頁。三、處理對象創(chuàng)建對象: 基類 定義的子類 用戶子定義類方式: 編程 可視化開發(fā)工具設(shè)計 對象20第二十頁,共44頁。容器類:包含了一個“容器”基類控件類:包含了一個“控件”基類 基于它們均可生成對象 VFP中主要以表單(或表單集)為最高容器層,其它基類對象可以在其中生成,成為被表單(或表單集)包容的對象;層層相生,層層包容,最終形成表單(或表單集)的對象群體。 一個面向?qū)ο蟮某绦蚓褪怯梢唤M相關(guān)的對象群體以及它們的屬性、事件、方法集合而成的整體。21第二十一頁,共44頁。層次體系示意圖表單集表單容器控件2

11、2第二十二頁,共44頁。1.引用對象分類絕對引用和相對引用何時要引用對象當(dāng)要設(shè)置或取得對象的某個屬性的值時當(dāng)要執(zhí)行對象的某個方法事件時容器層次體系容器與容器中的控件是上下層次的關(guān)系一個應(yīng)用程序的最高層次是各種活動表單或表單集,最低層次是一個非容器類控件對象或是一個不包含任何控件的容器類對象23第二十三頁,共44頁。 表單集“表單集1”(該對象的Name屬性為FormSet1)中包含2個表單“Form1”和“Form2”;表單“Form1”中包含2個文本框、1個選項按鈕組、1個頁框;頁框中包含2個選項卡式頁面Page1和Page2;頁面“Page1”中包含1個表格“Grid1”;表格中包含2個列

12、控件對象;列控件又包括標(biāo)頭和文本框控件。24第二十四頁,共44頁。絕對引用:從容器的最高層次引用對象,給出對象的絕對地址例:表單Form1對象:FormSet1.Form1 表格的第一列中的文本框Text1對象: 注意!引用時按層次關(guān)系指明關(guān)聯(lián)對象名稱,并用“.”隔開絕對引用25第二十五頁,共44頁。相對引用:在容器層次中相對于某個容器層次的引用相對引用通常運用于某個具體對象的事件處理代碼或方法程序代碼中,即在某個容器對象的事件處理代碼或方法程序中對所包容的對象的引用,引用時可以直接使用其對象名相對引用時,所涉及到的一些關(guān)鍵字(表5-5)例:在文本框Text1中引用表單Form1: THISF

13、ORM 或 THIS.PARENT相對引用26第二十六頁,共44頁。關(guān)鍵字含義ActiveForm當(dāng)前活動表單ActivePage當(dāng)前活動表單中的活動頁面ActiveControl當(dāng)前活動表單中具有焦點的控件PARENT該對象的直接容器(父容器)THIS該對象THISFORM包含該對象的表單THISFORMSET包含該對象的表單集相對引用對象時所用的關(guān)鍵字 27第二十七頁,共44頁。 2.設(shè)置對象屬性每個對象都有屬性,可以對對象設(shè)置屬性屬性可以在設(shè)計時設(shè)置也可在運行時設(shè)置,但也有一些屬性是只讀的。設(shè)計時修改屬性在“屬性”窗口中進(jìn)行程序代碼中,用以下語法進(jìn)行設(shè)置 引用對象 . 屬性 = 值例:絕

14、對引用FormSet1.Form1.Text1.Value=DATE()FormSet1.Form1.Text1.ForeColor=RGB(0,0,0) FormSet1.Form1.Text1.BackColor=RGB(192,192,192)FormSet1.Form1.Text1.FontName=“黑體”28第二十八頁,共44頁。引用一個對象的多個屬性和方法(重要)如:with (點不能放在此處) .Value=DATE() .ForeColor=RGB(0,0,0) .BackColor=RGB(192,192,192) .FontName=“黑體”endwith引用容器中的多個

15、對象:如:With Thisform .txtXh.backcolor=rgb(128,0,0) .txtXm.backcolor=rgb(0,128,0)Endwith 29第二十九頁,共44頁。3. 調(diào)用對象的方法程序方法程序是對象能夠執(zhí)行的一個操作,是和對象相聯(lián)系的過程調(diào)用語法引用對象.方法程序1.釋放表單:Thisform.release2.顯示表單Form1,并將焦點設(shè)置在文本框Text2上: FormSet1.Form1.show FormSet1.Form1.Text2.SetFocus 3.有返回值的方法程序以圓括號結(jié)尾,如 ApplicationObject.Quit() 4

16、.如有參數(shù)傳遞給方法程序,該參數(shù)應(yīng)放在括號中.30第三十頁,共44頁。 方法實際上就是對象的內(nèi)部過程或函數(shù),每個類型的對象都有它自己的方法集。例如在命令按鈕對象中,調(diào)用Move方法可以移動按鈕的位置。與事件不同的是,方法可以由用戶進(jìn)行擴(kuò)展。 表單對象的常用方法 :Refresh重畫表單和控件,刷新表單中的所有值Show顯示表單Hide隱藏表單Release從內(nèi)存中釋放表單31第三十一頁,共44頁。4. 對象對事件的響應(yīng)事件是對象識別的一個動作,用戶可以編寫相應(yīng)的代碼對此動作進(jìn)行響應(yīng)若對象的某個事件沒有相關(guān)的程序代碼,則該事件發(fā)生時,對象不會發(fā)生任何操作.VFP對象事件集合是固定的用戶不能創(chuàng)建新

17、的VFP對象事件.事件一般是由用戶的交互方式觸發(fā)的,如單擊或雙擊鼠標(biāo),按下鍵盤上的鍵,也有些是被系統(tǒng)觸發(fā)的.在某事件沒有發(fā)生時,用戶可以顯式地調(diào)用與該事件相關(guān)的過程. 如語句: this.Pmand1.click32第三十二頁,共44頁。四、相關(guān)事件每個對象都有與之相關(guān)的事件集合。對于已創(chuàng)建的多個對象,用戶根據(jù)需要可以為某個或某些事件配置相應(yīng)的事件處理代碼,使得應(yīng)用程序在運行過程中根據(jù)所發(fā)生的事件作出相應(yīng)的處理33第三十三頁,共44頁。1. 核心事件核心事件集(表5-6) 基類的事件集合是固定的,不能進(jìn)行擴(kuò)充。每個類都可識別固定的默認(rèn)事件集合,它的最小事件集包括Init、Destroy和Err

18、or事件. 教材表5-6列出了Visual FoxPro中的核心事件集,這些事件適用于大多數(shù)的對象34第三十四頁,共44頁。表5-6 核心事件集事件事件被激發(fā)后的動作Load表單或表單集被加載到內(nèi)存中 Unload從內(nèi)存中釋放表單或表單集 Init創(chuàng)建對象Destroy從內(nèi)存中釋放對象 Click用戶使用主鼠標(biāo)按鈕單擊對象 Dblclick用戶使用主鼠標(biāo)按鈕雙擊對象 Rightclick用戶使用輔鼠標(biāo)按鈕單擊對象 Gotfocus對象接收焦點,由用戶動作引起Lostfocus對象失去焦點,由用戶動作引起Keypress用戶按下或釋放鍵 Mousedown當(dāng)鼠標(biāo)指針停在一個對象上時,用戶按下鼠標(biāo)

19、按鈕 Mousemove用戶在對象上移動鼠標(biāo) Mouseup當(dāng)鼠標(biāo)指針停在一個對象上時,用戶釋放鼠標(biāo)按鈕 interactivechange以交互方式改變對象值 programmaticchange以編程方式改變對象值 35第三十五頁,共44頁。 在實際應(yīng)用中,控件對象一般都被包含在容器對象中,如命令按鈕、文本框包含在表單中,頁面包含在頁框中等,那么當(dāng)用戶單擊命令按鈕時,是命令按鈕的Click事件被觸發(fā),還是表單的Click事件被觸發(fā),或者是兩個對象的Click事件都被觸發(fā)? 實際上,當(dāng)某事件發(fā)生時,只有與事件相關(guān)聯(lián)的最里層對象識別該事件,更高層的容器不識別這個事件。因此當(dāng)用戶單擊命令按鈕時,

20、只有該命令按鈕的Click事件被觸發(fā),而包含命令按鈕的容器表單,則不識別這個Click事件。即使該命令按鈕沒有與Click事件相關(guān)聯(lián)的事件代碼,而表單有自己的Click事件代碼,也不會執(zhí)行表單的事件代碼。2. 容器層次和類層次中的事件36第三十六頁,共44頁。 例如:在圖所示的表單中有一個命令按鈕,表單設(shè)置了Click事件和DblClick事件的處理代碼;命令按鈕僅設(shè)置了Click事件的處理代碼,那么當(dāng)用戶單擊命令按鈕時,不會觸發(fā)表單的Click事件37第三十七頁,共44頁。 對于表格控件來說,表格包含列控件,列控件又包含標(biāo)頭和文本框控件。當(dāng)事件發(fā)生時,只有與事件相關(guān)聯(lián)的最里層對象識別該事件,更高層的容器不識別該事件,如圖所示38第三十八頁,共44頁。例外:對于選項按鈕組與命令按鈕組來說,組中個別按鈕如果沒有編寫事件處理代碼,則當(dāng)事件發(fā)生時將執(zhí)行組事件的處理代碼。例如,在如圖所示的表單中有一個選項

溫馨提示

  • 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

提交評論