VFP-第5章-(下)-面向?qū)ο蟪绦蛟O(shè)計(jì)_第1頁
VFP-第5章-(下)-面向?qū)ο蟪绦蛟O(shè)計(jì)_第2頁
VFP-第5章-(下)-面向?qū)ο蟪绦蛟O(shè)計(jì)_第3頁
VFP-第5章-(下)-面向?qū)ο蟪绦蛟O(shè)計(jì)_第4頁
VFP-第5章-(下)-面向?qū)ο蟪绦蛟O(shè)計(jì)_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、VFP-第5章-(下)-面向?qū)ο蟪绦蛟O(shè)計(jì)第一頁,共50頁。VFP支持兩種開發(fā)模型:面向過程和面向?qū)ο蠼Y(jié)構(gòu)化程序設(shè)計(jì)(面向過程)本質(zhì):功能設(shè)計(jì)(以功能為主進(jìn)行設(shè)計(jì))方法:自頂向下、功能分解。優(yōu)點(diǎn):系統(tǒng)結(jié)構(gòu)性強(qiáng)、便于設(shè)計(jì)和理解缺點(diǎn):但各模塊間關(guān)系緊密,一旦功能需求變動(dòng)導(dǎo)致維護(hù)困難6.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)概述2第二頁,共50頁。6.1.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法(OOP)方法:把世間萬物都看成對(duì)象。從內(nèi)部結(jié)構(gòu)上模擬客觀世界。每個(gè)對(duì)象都有自己的屬性和方法。能對(duì)消息做出反應(yīng)。程序就是一組對(duì)象,對(duì)象之間通過發(fā)送消息互相通知做什么。6.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)概述3第三頁,共50頁。面向過程和面向?qū)ο蟮膮^(qū)別

2、:以計(jì)算機(jī)模擬貓捉老鼠的過程為例。面向過程的做法: 程序員必須通過編程告訴計(jì)算機(jī)貓抓老鼠的每一個(gè)具體動(dòng)作,如匍匐,加速,咬住等動(dòng)作。面向?qū)ο蟮淖龇ǎ?程序員給貓發(fā)一個(gè)消息“老鼠出現(xiàn)了” 。貓就會(huì)自動(dòng)去抓老鼠。貓如何抓老鼠的動(dòng)作還是得由程序員編碼來實(shí)現(xiàn),只不過代碼的組織方式大不相同。面向?qū)ο蟮姆椒ǜ先说乃季S習(xí)慣。6.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)概述4第四頁,共50頁。6.1.2 類和對(duì)象6.1.2 類和對(duì)象的區(qū)別類(CLASS,類型):定義了對(duì)象特征以及對(duì)象外觀和行為的模板,它刻劃了一組具有共同特性的對(duì)象。對(duì)象:是類的一個(gè)實(shí)例OOP中,程序由一個(gè)或多個(gè)類組成,在程序運(yùn)行時(shí)視需要?jiǎng)?chuàng)建該類的各個(gè)對(duì)象(

3、實(shí)例)類是靜態(tài)概念,對(duì)象是動(dòng)態(tài)概念對(duì)象是基于某種類所創(chuàng)建的實(shí)例,包括了數(shù)據(jù)和過程。例:貓可以定義為一個(gè)類,具有顏色,品種屬性,具有 抓老鼠的方法。 某個(gè)貓對(duì)象:白色波斯貓。6.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)概述5第五頁,共50頁。1. 類基類:VFP系統(tǒng)提供的內(nèi)部定義的類,可提供給用戶用于自定義類的基礎(chǔ)(例如:表單、控件)子類:是以其它類定義為起點(diǎn),為某一種對(duì)象所建立的新類。子類將繼承任何對(duì)父類所做的修改6.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)概述6第六頁,共50頁。對(duì)象(Object)每個(gè)對(duì)象都具有屬性及與之相關(guān)的事件和方法6.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)概述7第七頁,共50頁。屬性(Property) : 定義對(duì)象的

4、特征對(duì)象的屬性由對(duì)象所基于的類決定如貓的顏色,品種方法(Method) :是對(duì)象能夠執(zhí)行的一個(gè)操作方法是與對(duì)象相關(guān)聯(lián)的過程,也稱方法程序方法可由用戶自己創(chuàng)建例:SetColor()設(shè)置貓的顏色。(主人將它染發(fā)了)事件(Event) :對(duì)象可對(duì)該事件做出反應(yīng)可編寫相應(yīng)的代碼,對(duì)動(dòng)作進(jìn)行響應(yīng)事件可由用戶的動(dòng)作、程序代碼或系統(tǒng)產(chǎn)生例:對(duì)于老鼠出現(xiàn)這個(gè)事件,貓能做出反應(yīng)。6.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)概述8第八頁,共50頁。6.2 基 類VFP基類派生子類子類子類9第九頁,共50頁。6.2.1 VFP的基類VFP提供的所有基類見p151 表5-1說明:該表中加*部分的類,只能使用,不能為它們創(chuàng)建子類。基類

5、可以分為容器類和控件類兩種類型。容器類,見表5-2,其余的都是控件類。10第十頁,共50頁?;惖淖钚∈录ㄖ匾┦?件說 明Init當(dāng)對(duì)象創(chuàng)建時(shí)激活Destroy當(dāng)對(duì)象從內(nèi)存中釋放時(shí)激活Error當(dāng)類中的事件或方法程序運(yùn)行中發(fā)生錯(cuò)誤時(shí)激活激發(fā)順序一般為:Init Error Destroy11第十一頁,共50頁?;惖淖钚傩约瘜傩哉f明Class該類屬于何種類型Baseclass該類由何種基類派生而來(Form,commandbutton或custom等)Classlibrary該類從屬于何種類庫parentclass對(duì)象所基于的類。若該類直接由VFP基類派生而來,則Parentclass

6、屬性值與baseclass屬性值相同12第十二頁,共50頁。 容器類(Container classes)是包容其他類的基類容器可以包含其它對(duì)象容器可以作為所包含的對(duì)象的父對(duì)象允許訪問包含的對(duì)象 控件類(Control classes)是可以包含在容器類中的基類控件對(duì)象可以包含在容器中不能作為其它對(duì)象的父對(duì)象 VFP的對(duì)象可分為容器對(duì)象和控件對(duì)象6.2.2 容器類與控件類13第十三頁,共50頁。6.3.1 引用對(duì)象6.3.2 設(shè)置對(duì)象的屬性6.3.3 調(diào)用對(duì)象的方法程序6.3.4 對(duì)象對(duì)事件的響應(yīng)6.3 處理對(duì)象14第十四頁,共50頁。6.3.1 引用對(duì)象何時(shí)要引用對(duì)象當(dāng)要設(shè)置或取得對(duì)象的某個(gè)

7、屬性的值時(shí)當(dāng)要執(zhí)行對(duì)象的某個(gè)方法事件時(shí)容器層次體系容器與容器中的控件是上下層次的關(guān)系一個(gè)應(yīng)用程序的最高層次是 _screen或_VFP,最低層次是一個(gè)非容器類控件或是一個(gè)不包含任何控件的容器類控件例如:_screen.caption=“我的表單”6.3 處理對(duì)象15第十五頁,共50頁。層次體系示意圖表單集表單容器控件16第十六頁,共50頁。表單集“表單集1”(該對(duì)象的Name屬性為FormSet1)中包含2個(gè)表單“Form1”和“Form2”;表單“Form1”中包含2個(gè)文本框、1個(gè)選項(xiàng)按鈕組、1個(gè)頁框;頁框中包含2個(gè)選項(xiàng)卡式頁面Page1和Page2;頁面“Page1”中包含1個(gè)表格“Gri

8、d1”;表格中包含2個(gè)列控件對(duì)象;列控件又包括標(biāo)頭和文本框控件。17第十七頁,共50頁。絕對(duì)引用從容器的最高層次引用對(duì)象,給出對(duì)象的絕對(duì)地址例:引用表單Form1對(duì)象:FormSet1.Form1 引用表格的第一列中的文本框Text1對(duì)象: 相對(duì)引用在容器層次中相對(duì)于某個(gè)容器層次的引用相對(duì)引用通常運(yùn)用于某個(gè)對(duì)象的事件處理代碼或方法程序代碼中,即在某個(gè)容器對(duì)象的事件處理代碼或方法程序中對(duì)所包容的對(duì)象的引用,引用時(shí)可以直接使用其對(duì)象名相對(duì)引用時(shí),所涉及到的一些關(guān)鍵字(P153表5-5)類似于文件系統(tǒng)中的絕對(duì)路徑和相對(duì)路徑18第十八頁,共50頁。關(guān) 鍵 字含 義ActiveForm當(dāng)前活動(dòng)表單Act

9、ivePage當(dāng)前活動(dòng)表單中的活動(dòng)頁面ActiveControl當(dāng)前活動(dòng)表單中具有焦點(diǎn)的控件PARENT當(dāng)前對(duì)象的直接容器THIS當(dāng)前對(duì)象THISFORM包含當(dāng)前對(duì)象的表單THISFORMSET包含當(dāng)前對(duì)象的表單集相對(duì)引用對(duì)象時(shí)所用的關(guān)鍵字(重要) 19第十九頁,共50頁。6.3.2 設(shè)置對(duì)象屬性每個(gè)對(duì)象都有屬性,可以為對(duì)象設(shè)置屬性屬性可以在設(shè)計(jì)時(shí)設(shè)置也可在運(yùn)行時(shí)設(shè)置(如caption)設(shè)計(jì)時(shí)修改屬性在“屬性”窗口中進(jìn)行程序代碼中,用以下語法進(jìn)行設(shè)置 對(duì)象名稱 . 屬性 = 值例:絕對(duì)引用FormSet1.Form1.Text1.Value=DATE()FormSet1.Form1.Text1

10、.ForeColor=RGB(0,0,0)黑FormSet1.Form1.Text1.FontName=“黑體”20第二十頁,共50頁。引用一個(gè)對(duì)象的多個(gè)屬性和方法(重要)如:with .Value=DATE() .ForeColor=RGB(0,0,0) .BackColor=RGB(192,192,192) .FontName=“黑體”endwith引用容器中的多個(gè)對(duì)象如:With Thisform.txtXh.backcolor=rgb(128,0,0).txtXm.backcolor=rgb(0,128,0)Endwith21第二十一頁,共50頁。6.3.3 調(diào)用對(duì)象的方法程序方法程序

11、是對(duì)象能夠執(zhí)行的一個(gè)操作,是和對(duì)象相聯(lián)系的過程調(diào)用語法.例1.釋放表單:Thisform.release例2.顯示表單Form1,并將焦點(diǎn)設(shè)置在文本框Text2上: 有返回值的方法程序以圓括號(hào)結(jié)尾22第二十二頁,共50頁。6.3.4 對(duì)象對(duì)事件的響應(yīng)事件是對(duì)對(duì)象識(shí)別的一個(gè)動(dòng)作,可以編寫相應(yīng)的代碼對(duì)此動(dòng)作進(jìn)行響應(yīng)用戶不能用其他的程序設(shè)計(jì)方法產(chǎn)生其事件,但可以調(diào)用與這些事件相關(guān)的過程常用的事件類鼠標(biāo)事件鍵盤事件表單事件控件焦點(diǎn)事件數(shù)據(jù)環(huán)境事件常用事件和方法的詳細(xì)講解留到設(shè)計(jì)表單時(shí)再講。23第二十三頁,共50頁。6.4 相關(guān)事件核心事件集(表5-6)6.4.1 核心事件這些事件適用于大多數(shù)的對(duì)象(控

12、件) 24第二十四頁,共50頁。表6-6 核心事件集事件事件被激發(fā)后的動(dòng)作Load表單或表單集被加載到內(nèi)存中 Unload從內(nèi)存中釋放表單或表單集 Init創(chuàng)建對(duì)象Destroy從內(nèi)存中釋放對(duì)象 Click用戶使用主鼠標(biāo)按鈕單擊對(duì)象 Dblclick用戶使用主鼠標(biāo)按鈕雙擊對(duì)象 Rightclick用戶使用輔鼠標(biāo)按鈕單擊對(duì)象 Gotfocus對(duì)象接收焦點(diǎn),由用戶動(dòng)作引起Lostfocus對(duì)象失去焦點(diǎn),由用戶動(dòng)作引起Keypress用戶按下或釋放鍵 Mousedown當(dāng)鼠標(biāo)指針停在一個(gè)對(duì)象上時(shí),用戶按下鼠標(biāo)按鈕 Mousemove用戶在對(duì)象上移動(dòng)鼠標(biāo) Mouseup當(dāng)鼠標(biāo)指針停在一個(gè)對(duì)象上時(shí),用戶

13、釋放鼠標(biāo)按鈕 interactivechange以交互方式改變對(duì)象值 programmaticchange以編程方式改變對(duì)象值 25第二十五頁,共50頁。6.4 相關(guān)事件問題:容器和它包含的控件都設(shè)置了某事件的響應(yīng)代碼,系統(tǒng)如何處理這個(gè)事件。為控件編寫事件的處理代碼時(shí),應(yīng)注意兩條原則: (1)容器不處理與所包含的控件相關(guān)聯(lián)的事件 (2)如果沒有與控件相關(guān)聯(lián)的事件代碼,Visual FoxPro將在類層次的更高層上檢查是否有與此事件相關(guān)聯(lián)的控件代碼 6.4. 2 容器層次事件和類層次中的事件26第二十六頁,共50頁。6.4 相關(guān)事件6.4. 2 容器層次事件和類層次中的事件例外:對(duì)于選項(xiàng)按鈕組與

14、命令按鈕組來說,組中個(gè)別按鈕如果沒有編寫事件處理代碼,則當(dāng)事件發(fā)生時(shí)將執(zhí)行組事件的處理代碼。例如,在如圖6-4所示的表單中有一個(gè)選項(xiàng)按鈕組(設(shè)置Click事件處理代碼),該選項(xiàng)按鈕組中有二個(gè)選項(xiàng)按鈕(選項(xiàng)按鈕Option1有Click事件處理代碼而選項(xiàng)按鈕Option2無Click事件處理代碼),則當(dāng)用戶單擊Option1時(shí)執(zhí)行與之相關(guān)聯(lián)的事件代碼,不執(zhí)行按鈕組的Click事件處理代碼,但當(dāng)用戶單擊Option2時(shí)執(zhí)行按鈕組的Click事件處理代碼。(p128 圖6-4 按鈕組中的事件代碼.scx) 27第二十七頁,共50頁。6.4 相關(guān)事件問題:程序的運(yùn)行伴隨著一系列的事件的產(chǎn)生。如何查看這

15、些事件的發(fā)生順序。P156 表5-7 vfp中事件順序,交互事件未列出*對(duì)于表單,事件的激發(fā)順序?yàn)椋?Load Init Activate Destroy Unload *對(duì)于表單上的某個(gè)控件,激發(fā)順序?yàn)椋?InitWhenGotFocusValidLostFocusDestroy 6.4. 3 事件激發(fā)的順序28第二十八頁,共50頁。6.4.4 常用的事件鼠標(biāo)事件MouseMove事件Click事件RightClick事件DblClick事件29第二十九頁,共50頁。2. 鍵盤事件KeyPress事件30第三十頁,共50頁。3. 改變控件內(nèi)容的事件InteractiveChange事件在使用

16、鼠標(biāo)或鍵盤更改控件的值時(shí)發(fā)生31第三十一頁,共50頁。4. 焦點(diǎn)事件焦點(diǎn)(Focus)用以指出當(dāng)前被操作的對(duì)象GotFocus事件用任何方法使對(duì)象接受到焦點(diǎn)時(shí)發(fā)生PROCEDURE Object.GotFocus LPARAMETERS nIndexLostFocus事件當(dāng)某個(gè)對(duì)象失去焦點(diǎn)時(shí)發(fā)生32第三十二頁,共50頁。5. 表單事件Load事件(表單和表單集)創(chuàng)建對(duì)象之前發(fā)生Load事件發(fā)生在Activate和GotFocus事件之前UnLoad事件(表單和表單集)在對(duì)象被釋放時(shí)發(fā)生Unload事件發(fā)生在Destroy事件和所有包含的對(duì)象被釋放之后33第三十三頁,共50頁。7. 其他事件Ti

17、mer事件 (用于計(jì)時(shí)器控件)當(dāng)經(jīng)過Interval屬性中指定的毫秒數(shù)時(shí)發(fā)生Init事件 在創(chuàng)建對(duì)象時(shí)發(fā)生Destroy事件在釋放一個(gè)對(duì)象實(shí)例時(shí)發(fā)生Error事件當(dāng)某方法運(yùn)行出錯(cuò)時(shí)發(fā)生34第三十四頁,共50頁。6.4.5 事件驅(qū)動(dòng)和事件循環(huán)事件驅(qū)動(dòng)程序代碼的執(zhí)行總是由某個(gè)事件的發(fā)生而引發(fā),執(zhí)行順序無法預(yù)料,而面向過程則是順序執(zhí)行。Message-based,event-driven,也是面向?qū)ο缶幊棠P筒捎玫姆椒ā?利用VFP進(jìn)行應(yīng)用程序設(shè)計(jì)時(shí),必須創(chuàng)建事件循環(huán)(event loop)READ EVENTS命令建立事件循環(huán)CLEAR EVENTS命令終止事件循環(huán)若陷入了死循環(huán),可以按ESC鍵強(qiáng)

18、制中斷程序的運(yùn)行。35第三十五頁,共50頁。6.5 方法方法(程序)是對(duì)象能夠執(zhí)行的一個(gè)操作,由系統(tǒng)提供默認(rèn)的實(shí)現(xiàn)代碼。用戶可以調(diào)用這些方法程序。也可以為這些方法編寫自己的實(shí)現(xiàn)代碼。使用方法程序可以減少我們寫代碼的數(shù)量。36第三十六頁,共50頁。常用的方法1. AddItem方法在組合框或列表框中添加一個(gè)新數(shù)據(jù)項(xiàng),并且可以指定數(shù)據(jù)項(xiàng)索引2. RemoveItem方法從組合框或列表框中移去一項(xiàng)3. Release方法Release 方法是從內(nèi)存中釋放表單集或表單。其調(diào)用語法為:thisform.Release37第三十七頁,共50頁。常用的方法4. Hide/Show方法Hide 方法是通過把

19、Visible 屬性設(shè)置為“假”(.F.),隱藏表單、表單集或工具欄。其調(diào)用語法為:Object.Hide表單被隱藏后,用戶不可訪問它的控件,但是這些控件仍然可用,并且可以在代碼中訪問它們。雖然這些控件是不可見的,但這些保存在不可見表單中的控件仍然保留自己的 Visible 屬性設(shè)置值。5. Quit方法Quit方法是結(jié)束一個(gè)VFP 實(shí)例,返回到創(chuàng)建VFP實(shí)例的應(yīng)用程序。其調(diào)用語法為:ApplicationObject.Quit( )38第三十八頁,共50頁。常用的方法6. SetALL方法SetAll 方法是為容器對(duì)象中的所有控件或某類控件指定一個(gè)屬性設(shè)置。其調(diào)用語法為:Container.

20、SetAll(cProperty, Value , cClass)參數(shù)cProperty要設(shè)置的屬性。Value屬性的新值,Value 的數(shù)據(jù)類型取決于要設(shè)置的屬性。cClass指定類名 39第三十九頁,共50頁。小結(jié)OOP的意思:面向?qū)ο蟪绦蛟O(shè)計(jì)類和對(duì)象的區(qū)別:對(duì)象具有:屬性、方法、事件?;惙譃閮煞N類型:容器類和控件類基類的最小事件集和最小屬性集相對(duì)引用時(shí)常用的關(guān)鍵字事件激發(fā)的順序建立事件循環(huán)和中止事件循環(huán) 的命令40第四十頁,共50頁。作業(yè)P163 填空題 全部,直接寫答案即可選擇題自己做在書上!41第四十一頁,共50頁。考過的等級(jí)考試考題1. 類( class )是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心。類具有許多特點(diǎn),如抽象性、封裝性、繼承性等,其中 _ 是指包含和隱藏對(duì)象信息(如內(nèi)部數(shù)據(jù)結(jié)構(gòu)和代碼)的能力,使操作對(duì)象的內(nèi)部復(fù)雜性與應(yīng)用程序隔離開來。42第四十二頁,共50頁。2. Visual FoxPro系統(tǒng)提供的基類都有最小事件集(Destroy 、Error、 Init)。從事件的激發(fā)順序看, 最小事件集中 事件是最后激發(fā)的。3. 在事件代碼中相對(duì)引用當(dāng)前表單集的關(guān)鍵字是 _ 。 。 43第四十三頁,共50頁。4. 假定表單(frm2)上有一個(gè)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論