第十章 面向對象程序基礎_第1頁
第十章 面向對象程序基礎_第2頁
第十章 面向對象程序基礎_第3頁
第十章 面向對象程序基礎_第4頁
第十章 面向對象程序基礎_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十章面向對象程序設計基礎章目錄10.1面向對象的概念10.2VisualFoxPro的面向對象支持10.3面向對象的程序設計方法10.1.1對象與類在面向對象程序設計(ObjectOrientedProgramming,簡稱為OOP)中,對象(Object)是組成程序的構件,就好象在面向過程的結構化程序設計方法(StructuredProgramming)中的子程序和函數(shù)的作用一樣。在結構化程序設計方法中,程序設計人員把一個待求解的問題自頂向下進行分解,以便形成一個個相對簡單獨立的子問題,然后用子程序或函數(shù)來解決這些子問題,用子程序或函數(shù)之間的數(shù)據通信來模擬這些子問題間的聯(lián)系,最后把這些子程序或函數(shù)裝配起來以形成解決問題的完整程序。10.1面向對象的概念在面向對象的程序設計方法中,程序設計人員不是完全按過程對求解問題進行分解,而是按照面向對象的觀點來描述問題、分解問題,最后選擇一種支持面向對象方法的程序語言來解決問題。在這種方法中,設計人員直接用一種稱之為“對象”的程序構件來描述客觀問題中“實體”,并用“對象”間的消息來模擬實體間的聯(lián)系,用“類”來模擬這些實體間的共性。1.對象(Object)在OOP方法中,作為程序構件的“對象”是對現(xiàn)實世界中一個實體的一種模擬工具。例如如要設計一個某高校學生學籍管理軟件,所涉及到的實體包括“學生”、“課程”、“專業(yè)”等等。要模擬一個活生生的學生,需要使用一組特征數(shù)據(如姓名、籍貫、性別、身高、年齡等等)和一組行為規(guī)則(如該生對待某些外部事件的反映:受到表彰會怎樣反映、受到批評會怎樣反映、受到屈辱會怎樣反映、遇到同學的困難時會怎樣反映等)來模擬其靜態(tài)特征和動態(tài)特征。OOP方法正是用一組稱為“屬性”的數(shù)據模擬所描述實體(如學生)的靜態(tài)特征、而用一組稱為“方法程序”的程序過程模擬該實體對一些“事件”(如受到學校嘉獎)的反映。把模擬一個實體的“屬性”數(shù)據和“方法程序”通過一定的形式進行“封裝”就建立起了一個OOP方法中的對象。當然,如果對被管理的成千上萬個學生都這樣一個個完全獨立地設計“程序對象”,其工作量將會大得驚人,這實際上是不可能的。OOP方法中,通過另一種稱為“類”的工具對這一問題給出了一個巧妙的解決辦法。2.類(Class)“類”是具有相同屬性特征和行為規(guī)則的多個“對象”的一種統(tǒng)一描述。對于一個學校的全體學生,描述其特征的數(shù)據模式是相同的(當然不同“對象”的特征值會有不同)。行為規(guī)則有不同的地方,也有相同的地方。如果我們側重于描述每個個體對一些諸如觀看球賽、對待他人遇到意外事件的反映等等,不同個體間的反映可能很不相同,描述其反映的“方法程序”也許無法共享。但如果將行為的選擇加以一些限制,將引起學生反映的外部事件歸納為:(1)一個新學年度到來時,學生的整體反映應該是繳費報導。(2)當一個學年度不及格科目超過學校規(guī)定時,這一部分學生應該留級或退學。(3)完成規(guī)定科目的學習并考試合格者,學生的整體反映是畢業(yè)離校。在一般管理信息系統(tǒng)中,系統(tǒng)的使用者和設計者所關心的問題正是這樣一些共性問題而并非一些很個體的問題,這樣設計者就可以對個體的行為進行分析、歸納、抽象,形成整個群體的共同行為規(guī)范,并把這種共同的行為規(guī)范用程序設計語言描述成程序過程,和描述該群體的特征數(shù)據模式一起進行封裝,這樣就完成了OOP方法中一個“類”的設計。在OOP方法中,“類”是對現(xiàn)實世界的一種高度抽象與概括,而“對象”則是“類”的一個實例,“對象”一定具有其屬“類”的共同特征與行為規(guī)則,當然一個“對象”還可以具有其屬“類”未曾規(guī)定的特征和行為規(guī)則。這一點和現(xiàn)實生活是非常相同的,這樣的模擬和抽象比較符合人們的思維習慣,這也正是OOP方法具有強大生命力,能夠獲得越來越多的軟件工作者歡迎并得到眾多計算機開發(fā)商支持的一個基本原因??傊瑥某绦蛟O計者的角度觀察,“類”是一個數(shù)據模式和若干個程序過程(稱為“方法程序”、一般一種行為用一個程序過程描述)經封裝而形成的一個整體,它是使用信息技術對現(xiàn)實世界的一種模擬與抽象,而“對象”則是“類”的一個實例,用程序設計語言來說,“對象”可以不精確的理解為對一個“類”賦值的結果?!皩ο蟆笔荗OP方法中組成程序一種構件。3.事件與響應“事件”是由外部實體作用在“對象”上的一個動作。在現(xiàn)實生活中,某人出生、死亡、其電話震鈴、設定的鬧鐘響了以及過生日又長了一歲等等都稱為一個事件,人們都會對這些事件做出一定的反映:如電話震鈴就要接聽電話、設定的鬧鐘響了可能就要去干一件什么事情,而過生日后可能要入學了等等。在OOP方法中,作用在“對象”上的事件包括對象的創(chuàng)立、釋放、收到其他對象發(fā)來的“消息”等,對于一些可視對象,如命令按鈕等,其最常見的“事件”往往是一些鼠標動作,如“單擊”、“雙擊”、“拖放”或修改對象數(shù)據等等。當作用在對象上的某個設定“事件”發(fā)生時,與該事件相聯(lián)系的“方法程序”(當然假設對象的設計者設計了該程序并與對象一同封裝)就運行并完成該程序的功能。OOP就用這種機制來模擬對象對外部事件的反映并進而完成由外部事件序列所規(guī)定的功能。4.事件代碼與方法代碼事件代碼與方法代碼都是定義在某個對象中的一個程序過程,有時也把兩者統(tǒng)稱為方法代碼。但狹義地說:事件代碼可以由一個“事件”觸發(fā)運行,其過程名與事件名相同,而一般方法程序沒有一個與之對應的事件觸發(fā),必須靠其他程序調用才能得以運行。因為不能為對象建立新的事件,所以一個對象包含的事件代碼是一定的,不能增加,而一個對象中所包含的方法代碼是可以任意增加的,就象在一個程序中可以使用任意多個過程和函數(shù)一樣。10.1.2子類與繼承既然“類”是OOP方法中對現(xiàn)實世界進行模擬與抽象的一種工具,而現(xiàn)實世界中的類是分層次的,有大類、中類、小類之分,如人類是地球上所有人的總屬類,在這個大的屬類中,按膚色可進一步分為黃種人、白種人、黑種人等,不同膚色的人除具有人類這樣一些共同的特征外,還具有某個膚色的人種所獨有的特征,在對人類進行研究時,如果不注意這些不同的特征,研究就難以深入。OOP方法中,用“子類”來模擬現(xiàn)實世界中的類的層次問題。如果設計一個“類”CLASS_STUDENT來模擬華中大學全體學生組成的集合后,還可以以CLASS_STUDENT類為基礎來設計一個“子類”CLASS_STUDENT_COMPUTER來模擬華中大學計算機系的學生。從現(xiàn)實生活中說,華中大學計算機系的學生應該具有其屬類華中大學的學生的全部特征和行為規(guī)則,同時還具有這個系的學生獨有的東西。在OOP方法中正是完全模擬了這一點,以CLASS_STUDENT“類”為基礎建立的“子類”CLASS_STUDENT_COMPUTER會完全繼承CLASS_STUDENT“類”的全部數(shù)據模式和“方法程序”,并且可以對這些數(shù)據模式和方法程序進行修改。這里,“類”STUDENT_COMPUTER稱為“類”CLASS_COMPUTER的“子類”,而CLASS_COMPUTER稱為CLASS_STUDENT_COMPUTER“父類”。在OOP方法中,“子類”將繼承其“父類”的全部特征和方法程序,當然,在“子類”中可以對這些繼承的特征和方法程序進行修改以對該“子類”進行更準確的模擬。注意,在上面反復說“子類”繼承其“父類”的全部特征模式和方法程序而不說成拷貝其“父類”的特征和方法程序是因為這樣一個事實,當對“父類”進行修改后,這種修改會立即反映到所有以該“父類”為基礎而建立的全部“子類”中,不管這些“子類”是在“父類”修改前還是修改后建立的。“子類”對“父類”的繼承如此,以一個“類”為基礎建立的“對象”對所屬“類”的繼承也是如此。如前所述,當建立了“父類”CLASS_STUDENT和其“子類”CLASS_STUDENT_COMPUTER后,如果要建立一個“對象”O(jiān)bject_Student來模擬計算機系的某個學生,可以用兩種不同的方法來實現(xiàn):(1)以CLASS_STUDEN“類”為基礎建立“對象”O(jiān)bject_Student。(2)以CLASS_STUDENT_COMPUTER“類”為基礎建立“對象”O(jiān)bject_Student。從前面的分析中讀者很容易判斷,第二種方法建立的對象Object_Student應該對計算機系的學生有更準確更完整的模擬。10.2.1VisualFoxPro6.0的類如前所述,組成OOP程序的基本構件是“對象”,而對象是由“類”派生的,因此,把一個待求解問題進行分析、歸納、抽象,進而用“類”這種工具對問題模擬,并采用程序設計語言來完成“類”的設計就是OOP方法的一項重要工作。為方便從事應用開發(fā)的軟件設計人員,一般支持OOP方法的計算機語言都提供了豐富的基本類(稱為基類)供用戶直接使用。開發(fā)人員可以根據這些基類而派生自己的子類以對具體問題進行更準確的模擬,也可以直接根據基類而派生“對象”。圖10.1給出了VisualFoxPro6.0中為用戶提供的基類。在第11章會詳細說明這些“基類”的作用和用法。10.2VisualFoxPro6.0對面向對象方法的支持圖10.1現(xiàn)代應用系統(tǒng)一般都采用微軟公司推薦的Windows界面,界面上面是菜單欄,用戶可以方便地選擇所需要的功能;主窗口是數(shù)據交互窗口,用來輸入問題的狀態(tài)信息,報告問題的處理結果;而在主窗口下面或右側一般是一組命令按鈕,供用戶指示應用系統(tǒng)的操作步驟;為方便用戶的數(shù)據錄入,有時還有一些單選按鈕、復選框、微調按鈕等等。在OOP方法中,這些都被稱為“對象”,而VisualFoxPro6.0為這些應用系統(tǒng)常用的對象提供了相應的模板——“基類”,當應用系統(tǒng)的開發(fā)者對于這些“基類”進行了足夠的了解后,就能在自己的開發(fā)工作中方便自如地使用它們,根據應用需求對它們進行改造(這里的“改造”并不是修改VisualFoxPro6.0系統(tǒng)中所帶的這些“基類”,而是根據這些“基類”派生“子類”,即進行“子類”的設計工作)后形成“子類”或直接形成“對象”,可以極大地提高開發(fā)工作效率,增加系統(tǒng)的可靠性。也許覺得應用這些“基類”難于模擬現(xiàn)實生活中的一些客觀事物的狀態(tài)與行為特征,如怎樣模擬一個學生的基本狀態(tài)(如姓名、年齡、專業(yè)等)和其主要行為特征(注冊、登錄課程成績、畢業(yè)離校等)。實際上,進行這些具體事物的模擬是要用VisualFoxPro6.0所提供的“基類”進行有效地組合才能實現(xiàn)的,學生的基本狀態(tài)是用一組數(shù)據來描述的,設計者可以使用VisualFoxPro6.0中所提供的表格“類”或一組文本框“類”來模擬這組狀態(tài),而針對學生的“注冊”、“成績登錄”和“畢業(yè)離校”的每項工作可以用命令按鈕類來模擬,把這些文本框(或表格)和一組命令按鈕包裝到一個根據VisualFoxPro6.0的“基類”表單或容器而派生的“子類”中,就完成了模擬學生這一群體的子類設計工作。10.2.2容器與控件1.容器類容器類可以包含其他對象,并且允許訪問這些對象。例如,若創(chuàng)建一個含有兩個列表框和兩個命令按鈕的容器類,而后將該類的一個對象加入表單中,那么無論在設計時刻還是在運行時刻,都可以對該容器中任何一個對象進行單獨操作。不僅可以改變列表框的位置和命令按鈕的標題,也可以在設計階段給這個容器添加新對象。例如,可以給列表框加標簽,來標明該列表框。2.控件類控件類的封裝比容器類更為嚴密,但也因此喪失了一些靈活性??丶悰]有AddObject方法程序。在該“類”中不能包含其他類,最典型的控件類就是命令按鈕。容器類雖然在引用時可以視為一個整體,但無論是在設計階段還是在運行階段,其所包含的對象都是可以識別并可以單獨操作的。容器類和控件類的比較3.容器中各對象的調用在進行容器類“子類”或“對象”的設計時,往往要調用容器中某一特定對象,這就要掌握OOP方法中對象的標識方法。首先要明確下面幾個問題:(1)容器類中對象的層次容器中的對象仍然可以是一個容器,一般把一個“對象”的直接容器稱為“父容器”,在調用特定的對象時,搞清該對象的“父容器”是至關重要的,不能把一個對象的間接容器錯誤地視為其“父容器”。(2)對象使用局域名每個對象都有一個名字。在給對象命名時,只要保證同一個“父容器”下的各對象不重名即可,換句話說,對象使用的是局域名,因此不能單獨使用對象名來調用對象,對象調用的一般格式是:Object1.Object2......Object1、Object2是對象名字,其中Object1是Object2的“父容器”,這種格式所表示的是Object2而非Object1,“對象”與其“父容器”間用一個小數(shù)點(.)分隔。(3)幾個代詞的用法在進行對象調用時,有幾個經常使用的代詞,應理解其含義并能熟練應用。This表示對象本身Parent表示對象的“父容器”對象ThisForm表示對象所在的表單ThisFormSet表示對象所在的表單所屬的表單集10.2.3事件與方法1.OOP方法中的事件如前所述,在OOP方法中,“事件”是驅動蘊涵在對象中的程序的的引擎,一個事件有一個事件名,一個事件與一個事件響應程序(方法程序)相關聯(lián),當作用在一個對象上的事件發(fā)生時,與這個事件相關聯(lián)的程序就獲得一次運行。在一種程序設計語言中,每種對象所能識別的事件是固定的,也就是說,開發(fā)者不能自己規(guī)定一個對象不能識別的事件并設計一段與該事件相聯(lián)系的程序,這樣即算該事件發(fā)生了,由于對象不能識別,因而也就無法觸發(fā)程序并使之運行。2.OOP方法中對象對事件的反映當作用在對象上的一個事件發(fā)生時,若沒有與之相關聯(lián)的代碼,則不會發(fā)生任何操作。對于絕大多數(shù)事件,開發(fā)者都不必編寫代碼,實際上只需對少數(shù)幾個系統(tǒng)中要用到的事件設計響應程序即可。事件的響應程序過程一般是一個過程,用事件的名稱來命名。一段事件響應代碼應置于何處,是由事件發(fā)生的順序決定的。請注意:表單中所有對象的Init事件將在表單的Init事件之前執(zhí)行,所以在表單顯示以前,就可在表單的Init事件代碼中處理表單上的任意一個對象。若要在列表框、組合框或復選框的值改變時執(zhí)行某代碼,可將它編寫在InteractiveChange事件(不是Click事件)中,因為一般而言,對象的值的改變并不觸發(fā)對象的Click事件,有時對象的值沒改變,而Click事件卻會發(fā)生。當拖動一對象時,系統(tǒng)將忽略其他鼠標事件。例如,在拖放操作中MouseUp和MouseMove

事件不會發(fā)生。Valid和When事件有返回值,默認為“真”(.T.)。若從When事件返回“假”(.F.)或0,對象將不能被激活。若從Valid事件返回“假”(.F.)或0,不能將焦點從對象上移走。3.方法程序的層次(1)容器事件和對象事件為對象編寫事件代碼時,應注意以下兩條基本規(guī)則:①容器不處理與所包含的對象相關聯(lián)的事件。②若沒有與某對象相關聯(lián)的事件代碼,則VisualFoxPro在該對象所在類的層次結構中逐層向上檢查是否有與此事件相關聯(lián)的代碼。當用戶以任意一種方式(使用Tab鍵、單擊鼠標、將鼠標指針移至對象上等)與對象交互時,對象事件被觸發(fā)。每個對象只接收自己的事件。例如,盡管命令按鈕位于表單上,當用戶單擊命令按鈕時,不會觸發(fā)表單的Click事件,只觸發(fā)命令按鈕的Click事件。容器事件代碼與其所包含的對象事件代碼相互獨立。若沒有與命令按鈕相關聯(lián)的Click事件代碼,盡管有與表單相關聯(lián)的Click事件代碼,當用戶單擊按鈕時,也不會執(zhí)行與表單相關聯(lián)的Click事件代碼。這條規(guī)則也適用于表格控件。表格包含列,列又包含標頭和文本框。當事件發(fā)生時,只有與事件相關聯(lián)的最底層對象識別該事件,高層的容器不識別這個事件。圖10.6說明當用戶在表格上移動鼠標時,哪個對象處理這個MouseMove事件表格對象上的事件這條規(guī)則對于按鈕組對象或命令組對象有一個例外。如果為選項按鈕組或命令按鈕組編寫了某事件代碼,而組中個別對象沒有與該事件相關聯(lián)的代碼,當這個對象上的事件發(fā)生時,將執(zhí)行容器組的事件代碼。例如,有一個選項按鈕組,在它的Click事件中包含了相關的代碼,而在選項按鈕組的兩個選項按鈕中只有Option1按鈕擁有與

Click事件相關聯(lián)的代碼。當用戶單擊Option1時,與其相關聯(lián)的Click事件代碼被執(zhí)行,不執(zhí)行與按鈕組相關聯(lián)的Click事件代碼。而用戶單擊Option2,因為沒有與其相關聯(lián)的Click事件代碼,系統(tǒng)將執(zhí)行選項按鈕組的事件代碼。包含兩個對象的選項按鈕組當連續(xù)發(fā)生一系列事件時(比如MouseDown事件后面接著發(fā)生MouseUp事件),若起始事件與某個控件相關聯(lián),那么整個事件隊列都將屬于這個控件。例如,在一個命令按鈕上,按下鼠標主按扭并拖動鼠標指針離開命令按鈕,盡管鼠標指針可能已在表單上,這個命令按鈕的MouseMove事件還是不斷產生。當在表單上而不是在命令按鈕上釋放鼠標主按扭時,發(fā)生的

MouseUp事件是與命令按鈕相關聯(lián),而不是與表單相關聯(lián)。(2)對象方法的繼承層次前面所講的編寫事件代碼的第二條原則實際上是講的對象對其“父類”或“父類”的“父類”的事件代碼繼承問題,基本規(guī)則是:若某個對象基于一個用戶子類(同樣地,這個類本身也可能基于其他用戶子類),當一個事件在該對象上發(fā)生時,VisualFoxPro首先在該對象中查看是否有與此事件相關聯(lián)的代碼。若找到,則執(zhí)行它;否則,VisualFoxPro將在類層次中向上逐層檢查。無論VisualFoxPro在類層次的哪個地方找到該事件代碼,都執(zhí)行它,而該層以上的代碼將不會被執(zhí)行。按繼承關系尋找對象的事件代碼應該清楚:當某事件在一個對象上發(fā)生后,VisualFoxPro只是從該對象開始向上尋找到與該對象的繼承關系最近的類的事件代碼執(zhí)行,這意味著,當為某一個子類或對象設計一個事件響應程序后,該對象(或子類)的“父類”上原來定義的相應代碼將變得無效,永遠沒有執(zhí)行機會。如果只希望在原來的代碼中增加一些功能,則必須在自定義代碼中插入一個語句:DODEFAULT()該語句表示執(zhí)行執(zhí)行原代碼功能。10.3.1類的設計1.用程序方法設計類可以象設計其他程序一樣在。prg程序文件中設計開發(fā)者自己的“子類”,設計類的語句格式是:DEFINECLASSClassName1ASParentClass\[OLEPUBLIC\]\[\[PROTECTED|HIDDENPropertyName1,PropertyName2...\]\[Object.\]PropertyName=eExpression...\]\[ADDOBJECT\[PROTECTED\]ObjectNameASClassName2\[NOINIT\]\[WITHcPropertylist\]\]...\[\[PROTECTED|HIDDEN\]FUNCTION|PROCEDUREName\[_ACCESS|_ASSIGN\]\[NODEFAULT\]cStatements\[ENDFUNC|ENDPROC\]\]...ENDDEFINE10.3面向對象的程序設計方法其中,用大寫字母組成的單詞是保留字,而用小寫字母組成的是參數(shù)。格式語句中各參數(shù)的含義如下:ClassName1:要創(chuàng)建的“類”名稱。ParentClass

:要創(chuàng)建的“類”的“父類”,即要創(chuàng)建的類是由哪個“類”派生的,ParentClass既可以是VisuanFoxPro中的一個“基類”,也可以是開發(fā)者自己創(chuàng)建的其他“子類”。PropertyName1,PropertyName2:列舉該類中要保護或隱含的屬性名稱。ObjectName:如果創(chuàng)建的是一個容器對象,這個子句指出該容器中所含的其他對象,該參數(shù)即是所加入的對象名。ClassName2:加入的對象ObjectName的“父類”名稱。CPropertylist:創(chuàng)建類的屬性名。Name:創(chuàng)建的類中的過程或函數(shù)名CStatements:類中響應各種事件的方法程序或函數(shù)。下面的程序定義了一個表單類test,并在test中加入了一個文本框對象text1,為text1定義了一個響應按鍵事件的方法程序text1.KeyPress,為表單test定義了一個響應釋放事件的程序Destroy。在該程序過程中,沒有描述表單test和其中的文本框text1的屬性,也沒有說明這兩個對象響應其他事件的方法,由于“子類”對其“父類”的繼承性,實際上,表單類test具有一般表單的全部屬性,其中的文本框對象也具有一般文本框的全部屬性,而且,對于沒有定義響應程序的事件,它們的反映方法和一般的表單及文本框完全相同。這正是OOP方法帶給設計者的好處,只需要描述自己的不同之處,一般的相同之處全部由繼承性獲得。DEFINECLASStestASFORM&&定義Form類的一個子類TestADDOBJECTtext1ASTEXTBOX&&為Test加入一個文本框對象Text1PROCEDUREtext1.KeyPressKG*2PARAMETERSnKeyCode,nShiftAltCtrlKG*2NODEFAULTKG*2IFBETWEEN(nKeyCode,65,122)&&在′A′和′z′之間

This.Value=ALLTRIM(This.Value)+″*″ACTIVATESCREEN&&將輸出發(fā)送到VisualFoxPro主窗口中

??CHR(nKeyCode)KG*2ENDIFENDPROCKG*2PROCEDUREDestroyKG*2CLEAREVENTSKG*2ENDPROCENDDEFINE2.用可視法方法設計類用可視法方法設計類的步驟是:(1)進入VisualFoxPro所提供的類設計器有兩種方法可以進入類設計器。第一種方法:直接在菜單欄中進行操作,點擊“文件”菜單中的“新建”,指定文件類型為“類”。第二種方法需要使用VisualFoxPro提供的另一個工具“項目管理器”,如果已經進入了項目管理器并建立了一個項目文件后,就可在項目管理器中,選擇“類”選項卡,并單擊“新建”命令按鈕。指定子類的有關信息為子類選擇“父類”新設計的類(2)指定子類的名稱和存儲類的文件名(3)屬性設計①設置屬性值②添加新的屬性有時需要添加新的屬性,方法是,在VisualFoxPro的菜單欄中,選擇“類”菜單中“新建屬性”選項,在出現(xiàn)的中,指定要添加的屬性名稱,并單擊“添加”按鈕,就完成的新屬性的添加工作,往后就可以如前面說明的一樣設置該屬性了。選擇要設置屬性的類在這里設置屬性值在這里選擇屬性屬性選項卡,下面只出現(xiàn)與選項相關的屬性屬性意義說明設置類的屬性(4)代碼設計代碼設計是類設計工作的關鍵,進入類的代碼設計窗口的方法有兩種:①雙擊類的圖形②在類上單擊鼠標輔按扭,在彈出窗口選擇“代碼”為類添加新屬性10.3.2對象的設計對象是類的一個實例,這種實例在不同位置含義不完全相同,所賦予的操作命令也有所不同,例如在一般程序中的對象,實際上是某個類的一個變量,而在容器類中添加的對象則是這個類的一個成員對象,雖然都稱為“對象”,但添加這兩種不同含義的“對象”的命令有所不同,但其含義又有很多相似之處。下面主要說明在程序中設計和使用對象的方法,至于用可視化的方法設計對象過程,和類的設計過程基本相同,在下一章的表單設計與應用,還會重點介紹,本章對此從略。1.創(chuàng)建與釋放對象(1)對象的創(chuàng)建所謂創(chuàng)建對象,就是在內存中建立一個內存變量。對象只有創(chuàng)建后才能使用,使用命令創(chuàng)建對象的一般格式是:<對象名>=CreateObject(″類名″)功能:在內存中建立一個對象。參數(shù)說明:對象名:要建立的對象的名字。類名:要建立的對象的父類。(2)對象變量的分類和普通變量一樣,對象變量也有全局變量、局部變量和私有變量之分,其對應的說明符是:PUBLIC、LOCAL、PRIVATE。局部變量和私有變量都隨著創(chuàng)建對象的程序的結束而自動釋放,而全局變量則會留存在內存中直到用顯式的命令清除對象。私有類型是對象變量的默認類型。(3)對象變量的釋放從內存中清除指定對象的語句是:Release<對象名>2.對象的屬性設置對象的屬性可以在對象設計階段設置,也可以在對象運行過程中進行修改。設置對象屬性的語句格式是:<對象名.屬性名>=<屬性值>或:WITH<對象名>

屬性名1=屬性值1..............

屬性名n=屬性值nENDWITH例10.3HTST用面向對象的方法設計一個程序,計算:(1)S=1+2+3+4+....+100

(2)S=1+1/2+1/3+....+1/100這個問題因為非常簡單,無需使用這里所講的OOP方法就可以很快設計出傳統(tǒng)的結構化程序,而且,就本例而言,OOP方法比結構化設計方法要麻煩很多。這里只是希望通過一個簡單的例子,建立一個用OOP方法設計程序的完整實例。為解決這個問題,本例中設計了一個子類Myadd_Class,它包含3個屬性和兩個方法程序,說明如下:3個屬性:S:存放結果和N:存放求和項數(shù)R1:求和方法標志,當R1=1時,求整數(shù)和,為其他值,求分數(shù)和兩個方法:S_sum:求和過程S_show:顯示屬性S,即顯示求和結果。程序如下:LocalMyaddMyadd_Object=CreateObject(′Myadd_Class′)&&根據Myadd_Class派生一個對象Myadd_Object.r1=1&&設置Madd_Object對象的屬性Myadd_Object.n=100Myadd_Object.S_sum&&調用方法S_sum求和

溫馨提示

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

評論

0/150

提交評論