版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、讀書(shū)破萬(wàn)卷 下筆如有神 Otcl 語(yǔ)法總結(jié) 以下主要是在網(wǎng)上下載的高手總結(jié)的基礎(chǔ)上,添加了一點(diǎn)自己的補(bǔ)充; Otcl 稱(chēng)為 Object Tcl ,它是在 Tcl 的基礎(chǔ)上做了一個(gè)面對(duì)對(duì)象的封裝,是 一種面對(duì)對(duì)象的腳本語(yǔ)言; 在 Tcl 中引入面對(duì)對(duì)象的機(jī)制, 使得 Tcl 功能更加強(qiáng) 大和便利使用;在 Otcl 中,支持繼承,封裝和多態(tài)性等面對(duì)對(duì)象的概念,這點(diǎn) 與 C+,smallTalk 等面對(duì)對(duì)象的語(yǔ)言類(lèi)似,但編程的風(fēng)格跟 C+有很大的不同, 這可能使 C+程序員最開(kāi)頭感到并不習(xí)慣; 1, 類(lèi)的定義 類(lèi)的定義和創(chuàng)建一個(gè)實(shí)例: %Class Fruits ; # 創(chuàng)建一個(gè)類(lèi) =Fruits
2、 %Fruits fruit ; # 創(chuàng)建一個(gè)對(duì)象的實(shí)例 查看實(shí)例屬于哪一個(gè)類(lèi) 查看對(duì)象擁有實(shí)例 =fruit %fruit info class ; # =Fruits %Fruits info instances ; # =fruit 關(guān)鍵字 Class 用來(lái)創(chuàng)建一個(gè) 名后面加實(shí)例變量名; OTcl 對(duì)象;假如想定義一個(gè)類(lèi)實(shí)例,就在對(duì)象 info 命令可以單看類(lèi)與對(duì)象之間的從屬關(guān)系; 2, 構(gòu)造函數(shù)與析構(gòu)函數(shù) OTcl 同樣供應(yīng)構(gòu)造函數(shù)和析構(gòu)函數(shù), 使類(lèi)對(duì)象能夠輕巧地被創(chuàng)建和撤銷(xiāo); 構(gòu) 造函數(shù)的主要功能是創(chuàng)建類(lèi)對(duì)象,初始化其成員變量,析構(gòu)函數(shù)撤銷(xiāo)對(duì)象;在 OTcl 中,析構(gòu)函數(shù)名并不需要同
3、類(lèi)名相同,一般通過(guò)調(diào)用 init 過(guò)程來(lái)實(shí)現(xiàn)類(lèi)的 構(gòu)造函數(shù),調(diào)用的 destory 過(guò)程完成類(lèi)的析構(gòu); Safety instproc init ; # 構(gòu)造函數(shù) $self next ; # 顯式調(diào)用父類(lèi)的構(gòu)造函數(shù) $self set count 0 Safety instproc destroy ; # 析構(gòu)函數(shù) $self next 在 OTcl 中,構(gòu)造函數(shù)和析構(gòu)函數(shù)不會(huì)自動(dòng)調(diào)用父類(lèi)的構(gòu)造函數(shù),必需顯式 調(diào)用父類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù);上例中命令 $self next 就是顯式調(diào)用父類(lèi)的 構(gòu)造函數(shù),所以 $self next 也是這樣; 就調(diào)用父類(lèi)的構(gòu)造函數(shù);同理,析構(gòu)函數(shù)工作過(guò)程 第
4、1 頁(yè),共 6 頁(yè)讀書(shū)破萬(wàn)卷 下筆如有神 3, 成員函數(shù)和成員函數(shù)的定義 在 OTcl 中,成員變量比不需要事先定義,因此在成員函數(shù)需要使用它的時(shí) 候,就可以在函數(shù)體內(nèi)定義;定義成員變量使用關(guān)鍵字 instvar ;在全部的成員 函數(shù)中要使用已經(jīng)聲明白的成員變量必需使用 instvar 來(lái)重新聲明,否就變量只 是當(dāng)作函數(shù)內(nèi)局部變量;成員函數(shù)全部的成員變量都是基于 public 的;在 OTcl 中,接受關(guān)鍵字 instproc 來(lái)定義一個(gè)成員函數(shù),成員函數(shù)的定義和參數(shù)的定義 與 Tcl 中相同,只需要在前面指定類(lèi)名表示這個(gè)成員函數(shù)屬于哪一個(gè)類(lèi); 全部成 員函數(shù)也是基于 public 的; %F
5、ruits instproc init args $self set instvar color 0;# 初始化成員變量為 0 eval $self next $args 上例中,定義了類(lèi) Fruits 的一個(gè) init 成員函數(shù), 變量$self 表示對(duì)象本 身,有點(diǎn)像 C+中的 this 指針; next 是指父類(lèi)的同名方法,類(lèi)似于 C+中的函 數(shù)掩蓋; %Fruits instproc show_color set color green puts “the color of fruit is $color ” %Fruits fruit %fruit set color ; # 查看成
6、員變量 color 的值 =0 %fruit show_color ; # 調(diào)用 Fruits 的 show_color 方法 the color of fruit is green %fruit set color =0 ; # 仍然是 0,由于在 show_color 中定義的 color 只#是局部變量;在類(lèi)的成員函數(shù)中也可以使用局部變量,作用 域僅僅在成員函數(shù)中; 4, 繼承 在 OTcl 中全部成員函數(shù)和成員變量都是基于 public 屬性的,這點(diǎn)并不像 C+ 等面對(duì)對(duì)象的程序設(shè)計(jì)語(yǔ)言的多重屬性機(jī)制, 減小了編程的難度; 子類(lèi)的對(duì)象可 以繼承和使用基類(lèi)的全部成員函數(shù)和方法, 類(lèi)的繼承
7、; 在 OTcl 中,關(guān)鍵字 superclass 表示 %Class Fruits ; # 定義父類(lèi) Fruits Fruits instproc grow $self instvar weight incr weight 第 2 頁(yè),共 6 頁(yè)讀書(shū)破萬(wàn)卷 if $weight 10 then 下筆如有神 ” pu ts stderr “it is mature. return %Class Apple %Apple apple ; # 這里留意 return 的用法與 C 語(yǔ)言中的區(qū)分 superclass Fruits ; # 類(lèi) Apple 繼承自 Fruits Apple instp
8、roc init args eval $self next $args ; # 調(diào)用父類(lèi)的構(gòu)造函數(shù) ; # 實(shí)際調(diào)用的是父類(lèi)的 show_color 函數(shù) %apple show_color =the color of fruit is green 在 OTcl 中,也同樣支持多重繼承機(jī)制,繼承關(guān)系中意有向無(wú)環(huán)圖; Class Safety ; # ; # 定義類(lèi) Safety Safety instproc init 構(gòu)造函數(shù) $self next $self set count 0 Safety instproc put thing ; # 定義成員函數(shù) $self instvar cou
9、ntincr count $self next $thing ; # 顯式調(diào)用父類(lèi)的 put 函數(shù) Safety instproc get ; # 定義成員函數(shù) $self instvar count if $count = 0 then return empty. incr count -1 ; # 顯式調(diào)用父類(lèi)的 get 函數(shù) $self next Class Stack ; # ; # ; # 定義類(lèi) Stack Stack instproc init 構(gòu)造函數(shù) 調(diào)$self next ; # ; # 用父類(lèi)的構(gòu)造函數(shù) 顯式調(diào)用父類(lèi)的 set 函數(shù) $self set things ;
10、# 定義成員函數(shù) Stack instproc put thing $self instvar things 定義成員變量 set things concat list $thing $things return $thing Stack instproc get ; # 定義成員函數(shù) get $self instvar things set top lindex $things 0 set things lrange $things 1 end 第 3 頁(yè),共 6 頁(yè)讀書(shū)破萬(wàn)卷 下筆如有神 return $top Class SafeStack superclass Safety Stack
11、 ; # 繼承 SafeStack s ; # 生成對(duì)象 s put toast =toast ; # 調(diào)用成員函數(shù) put s get =toast ; # 調(diào)用成員函數(shù) get s get =empty. s destroy ; # 析構(gòu)函數(shù) = 上面的例子中,類(lèi) SafetyStack 從類(lèi) Safety 和類(lèi) Stack 多重派生而來(lái),繼 承次序是依據(jù)關(guān)鍵字 superclass 后的類(lèi)名排列次序,從左到右,即最左邊最先 繼承;類(lèi) SafeStack 第一繼承了父類(lèi) Safety ,從而語(yǔ)句 s get 第一調(diào)用了 Safety 的 get 函數(shù),由于 Safety 中的 get 函數(shù)
12、調(diào)用了 self next ,也就是調(diào)用了更高 一個(gè)類(lèi) Stack 的 get 函數(shù);可以用 info 命令查看類(lèi)的繼承關(guān)系: %SafeStack info heritage ; # 差看類(lèi) SsfeStack 的繼承關(guān)系 =Safety Stack Object 在 OTcl 中,子類(lèi)可以重寫(xiě)父類(lèi)的成員函數(shù),在成員函數(shù)中使用 next 命令來(lái) 掩蓋父類(lèi)中同名的成員函數(shù); %Fruits instproc grow $self instvar weight if $weight = 5 & $weight in_apple %in_apple grow %in_apple rename ap
13、ple =apple %in_apple grow =infantility apple 上例中,%in_apple rename 返回傳進(jìn)來(lái)的參 grow,第一把父類(lèi)中返回來(lái)的參數(shù) 數(shù) infantility 然后把整個(gè)字符串返回; apple ;當(dāng)再次調(diào)用 %in_apple 賦值給 t ,并在 t 后串接上 apple, OTCL 是 ObjectTCL,引入了類(lèi)和對(duì)象的概 念; 1 類(lèi)和對(duì)象的定義:關(guān)鍵字 Class ;如 Class Animal;Animal animal_1; 可以通過(guò) info 命令查看類(lèi)和對(duì)象之間的關(guān)系;例如: info+class 查看 類(lèi) ,+instan
14、ce 查看對(duì)象 ,+superclass 查看父類(lèi) ,+heritage 查看繼承樹(shù) 2 成員變量和函數(shù)的定義: Otcl 中定義成員函數(shù)接受關(guān)鍵字 instproc ,定 義成員變量接受關(guān)鍵字 instvar ;Otcl 中成員變量并不預(yù)先定義, 在成員函數(shù)中 定義再使用,因此,當(dāng)其他成員函數(shù)使用該變量時(shí)需重新申明;如 Animal instproc run speed $self instvar speed_ set speed_ $speed puts Animal run with speed $speed_ 其中 $self 的含義和 C+中的 this 類(lèi)似 3 對(duì)象的初始化和銷(xiāo)毀:接受 init 成析構(gòu)過(guò)程;如 Animal instproc init args $self set speed_ 0 eval $self next $args Animal instproc destroy puts zap. 函數(shù)來(lái)進(jìn)行初始化, destroy 函數(shù)來(lái)完 4 pub
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技驅(qū)動(dòng)的工業(yè)互聯(lián)網(wǎng)創(chuàng)新生態(tài)構(gòu)建研究
- 課題申報(bào)參考:賈湖骨笛的實(shí)驗(yàn)音樂(lè)考古學(xué)研究
- 2025年度個(gè)人消費(fèi)借款信用保證合同范本4篇
- 2025版挖掘機(jī)買(mǎi)賣(mài)合同及挖掘機(jī)操作人員培訓(xùn)協(xié)議3篇
- 2025版新媒體人工智能助手研發(fā)與運(yùn)營(yíng)合同2篇
- 2025版小程序技術(shù)支持授權(quán)協(xié)議范本2篇
- 2025年福州貨車(chē)資格證答案
- 2025年度知識(shí)產(chǎn)權(quán)代理服務(wù)合同樣本8篇
- 二零二五版毛竹砍伐與林業(yè)碳排放權(quán)交易合同3篇
- 二零二五年度出納風(fēng)險(xiǎn)控制擔(dān)保及咨詢(xún)合同4篇
- 二零二五年度無(wú)人駕駛車(chē)輛測(cè)試合同免責(zé)協(xié)議書(shū)
- 2025年湖北華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員52名歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 高三日語(yǔ)一輪復(fù)習(xí)助詞「と」的用法課件
- 毛渣采購(gòu)合同范例
- 無(wú)子女離婚協(xié)議書(shū)范文百度網(wǎng)盤(pán)
- 2023中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)-注射相關(guān)感染預(yù)防與控制
- 五年級(jí)上冊(cè)小數(shù)遞等式計(jì)算200道及答案
- 2024年廣東高考政治真題考點(diǎn)分布匯 總- 高考政治一輪復(fù)習(xí)
- 燃?xì)夤艿滥甓葯z驗(yàn)報(bào)告
- GB/T 44052-2024液壓傳動(dòng)過(guò)濾器性能特性的標(biāo)識(shí)
- 國(guó)際市場(chǎng)營(yíng)銷(xiāo)環(huán)境案例分析
評(píng)論
0/150
提交評(píng)論