![研究生課程程序語言設(shè)計(jì)原理教程第08章_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/4/ef989995-f640-45b2-b16c-34ba9606b450/ef989995-f640-45b2-b16c-34ba9606b4501.gif)
![研究生課程程序語言設(shè)計(jì)原理教程第08章_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/4/ef989995-f640-45b2-b16c-34ba9606b450/ef989995-f640-45b2-b16c-34ba9606b4502.gif)
![研究生課程程序語言設(shè)計(jì)原理教程第08章_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/4/ef989995-f640-45b2-b16c-34ba9606b450/ef989995-f640-45b2-b16c-34ba9606b4503.gif)
![研究生課程程序語言設(shè)計(jì)原理教程第08章_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/4/ef989995-f640-45b2-b16c-34ba9606b450/ef989995-f640-45b2-b16c-34ba9606b4504.gif)
![研究生課程程序語言設(shè)計(jì)原理教程第08章_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/4/ef989995-f640-45b2-b16c-34ba9606b450/ef989995-f640-45b2-b16c-34ba9606b4505.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 第第8 8章章 抽象與封裝抽象與封裝 函數(shù)和過程是封裝的程序?qū)嶓w,它有數(shù)據(jù)和操作,規(guī)格說明(型構(gòu))和過程體,一體使于人們控制復(fù)雜性 pascal統(tǒng)一的嵌套結(jié)構(gòu)不造于大型程序main代 碼sub2數(shù) 據(jù) 代 碼sub1數(shù) 據(jù) 代 碼main數(shù)據(jù)main數(shù)據(jù)mainsub110sub1115sub1621sub22284321小程序結(jié)構(gòu)小程序結(jié)構(gòu)大程序結(jié)構(gòu)大程序結(jié)構(gòu)數(shù)據(jù)2sub1-sub10數(shù)據(jù)4sub22-sub28數(shù)據(jù)1sub11-sub15數(shù)據(jù)3sub16-sub21main續(xù) 將相關(guān)的數(shù)據(jù)和操作封裝成大模塊(若干類型,若干過程/函數(shù)) 結(jié)構(gòu)上形成包package或模塊 modula包是可
2、分別編譯。隨時連接軟件資源,是解決復(fù)雜系統(tǒng)的有力手段包的規(guī)格說明和包體顯式分開。語義上正好是“作什麼”,“怎麼做”數(shù)據(jù)對象和類型子程序規(guī)格(操作)(操作)私有數(shù)據(jù)子程序體子程序體子程序體私有操作程序包體規(guī)格說明外界可見 8.1 模塊和包 規(guī)格說明和體在表示結(jié)構(gòu)上的分離。有利于修改,維護(hù) 封裝實(shí)現(xiàn)數(shù)據(jù)隱藏,有利于安全 規(guī)格說明是程序包的抽象,有利于復(fù)雜系統(tǒng)簡化 模塊模塊(包包)封裝數(shù)據(jù)與操作,它有可控界面,外界不封裝數(shù)據(jù)與操作,它有可控界面,外界不能操縱私有數(shù)據(jù)引出公有能操縱私有數(shù)據(jù)引出公有(publicpublic包的使用者可見)包的使用者可見)、私、私有有(privateprivate本包所
3、有操作可訪問,包外不可見)本包所有操作可訪問,包外不可見)、保護(hù)、保護(hù)(protected,protected,包外不可見,但本包的子包可見)包外不可見,但本包的子包可見)概念概念 包只是包只是以封裝手段以封裝手段, ,可可有有/ /可沒有可沒有邏輯邏輯語語義義-只有數(shù)據(jù)無操作,數(shù)據(jù)塊只有數(shù)據(jù)無操作,數(shù)據(jù)塊block datablock data(fortranfortran)-只有操作無共享數(shù)據(jù)如函數(shù)包,數(shù)學(xué)庫只有操作無共享數(shù)據(jù)如函數(shù)包,數(shù)學(xué)庫-有數(shù)據(jù)有操作有數(shù)據(jù)有操作,一口對外可模擬自動機(jī)一口對外可模擬自動機(jī)-有數(shù)據(jù)有操作有數(shù)據(jù)有操作,模擬客觀世界對象模擬客觀世界對象增加程序表達(dá)能力增加程
4、序表達(dá)能力-封裝的包可實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)類型封裝的包可實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)類型adtadt ada 的復(fù)數(shù)程序包 package complex is type number is record real_part:float; imag_part:float; end record; function +(a,b: in number) return number; function -(a,b: in number) return number; function *(a,b: in number) return number; end complex; package body complex i
5、s endcomplex; 有了這個程序包我們可以編出復(fù)數(shù)應(yīng)用程序: with complex; use complex; procedure main is comp_1: number = (1.0,2.0);-1+2i comp_2: number : =(3.0,4.0); - 3+4i w, x,z: number; begin w = comp_1 + comp_2; -w = 4+6i x = comp_2 - comp_1; -x = 2+6i z = comp_1 * comp_2; -z = -5+10i end main;8.2 8.2 抽象數(shù)據(jù)類型抽象數(shù)據(jù)類型 數(shù)據(jù)抽象
6、數(shù)據(jù)抽象數(shù)據(jù)抽象是抽象數(shù)據(jù)類型的方法學(xué)數(shù)據(jù)抽象是抽象數(shù)據(jù)類型的方法學(xué)定義一組數(shù)據(jù)集定義一組數(shù)據(jù)集v v,以及其上的操作集以及其上的操作集opop,構(gòu)成構(gòu)成adtadt(a abstract data type) t=( v , op )t=( v , op )-什么和怎么做分開什么和怎么做分開(規(guī)格說明和體規(guī)格說明和體)-實(shí)現(xiàn)數(shù)據(jù)隱藏(體中聲明的數(shù)據(jù)和操作外界不可見)實(shí)現(xiàn)數(shù)據(jù)隱藏(體中聲明的數(shù)據(jù)和操作外界不可見)-分別開發(fā)分別編譯(可做大程序)分別開發(fā)分別編譯(可做大程序)-簡化復(fù)雜性便于調(diào)試(利用抽象實(shí)現(xiàn)分治)簡化復(fù)雜性便于調(diào)試(利用抽象實(shí)現(xiàn)分治)-構(gòu)造新類型,計(jì)算直觀方便(面向?qū)ο蟮幕A(chǔ))
7、構(gòu)造新類型,計(jì)算直觀方便(面向?qū)ο蟮幕A(chǔ))構(gòu)造新類型構(gòu)造新類型swith compley use compley;procedure main is c1:number is =(1.0,2.0); c2:number is =(3.0,4.0); w ,x, z :number;begin w:=c1+c2; x :=c2-c1; z :=c1*c2;end main-*+numberlexcomp 構(gòu)造函數(shù)和析構(gòu)函數(shù)變量類型 v : integer;以類型指明程序?qū)ο笞兞砍橄髷?shù)據(jù)類型, 聲明時要指明如何構(gòu)造c:number:=(1.0,2.0) 較簡單可用賦初值辦法,復(fù)雜在運(yùn)行中由構(gòu)造函數(shù)
8、(constructor)完成 c = adt_name() 構(gòu)造函數(shù)(constructor) 和adt同名不再使用的程序?qū)ο螅梦鰳?gòu)函數(shù)(destructor)顯式刪除一般形式是:adt_name() 和adt同名 adt_name( ) c c語言以文件實(shí)現(xiàn)抽象數(shù)據(jù)類型語言以文件實(shí)現(xiàn)抽象數(shù)據(jù)類型 c c語言語言4 4種文件種文件 -頭文件頭文件“modules.h” modules.h” 定義宏和類型聲明定義宏和類型聲明 -主模塊主模塊“name.c” name.c” 給出新類型的數(shù)據(jù)和操作定義給出新類型的數(shù)據(jù)和操作定義 -其它模塊其它模塊“other.c” other.c” 實(shí)現(xiàn)頭文件
9、中聲明實(shí)現(xiàn)頭文件中聲明 -通過通過makefilemakefile指明各文件關(guān)系指明各文件關(guān)系 make sometypemake sometype sometype sometype:name.o other.o /name.o other.o /連續(xù)兩模塊的目標(biāo)碼連續(xù)兩模塊的目標(biāo)碼 文件取名文件取名sometypesometype cc_o sometype name.o other.o / cc_o sometype name.o other.o /編譯并連成為編譯并連成為 sometypesometype的目標(biāo)文件的目標(biāo)文件 name.o : name.c modules.h /nam
10、e.o : name.c modules.h /兩源文件連成為兩源文件連成為name.oname.o cc_o name.o name.c / cc_o name.o name.c /源文件編譯后形成目標(biāo)文件源文件編譯后形成目標(biāo)文件 other.o : other.c modules.hother.o : other.c modules.h cc_o other.o other.c /sometype cc_o other.o other.c /sometype 如預(yù)定義的了如預(yù)定義的了8.3 8.3 類屬類屬 函數(shù)是表達(dá)式集的抽象、過程是命令集的抽象,類屬(generic)是聲明集的抽象。
11、即聲明的變量、類型、子程序都是參數(shù)化的。 ada類屬子程序: generic type element is pravite; -類屬類型參數(shù) procedure exchange (first, second:in out element); temp:element; -程序中用類屬形參 begin temp = first; first = second; second = first; end exchange; 關(guān)鍵字procedure換成package即為類屬包 參數(shù)化類型與實(shí)際類型結(jié)合。由類屬設(shè)例指明:procedure int_exchange is new exchange
12、(integer);實(shí)在的integer與element匹配, 即在procedure中任何出現(xiàn)element的地方以integer代,等于有了整數(shù)的 exchange 如同樣板,可以寫出多個過程: procedure char_exchange is new exchange ( character); procedure smallint_exchange is new exchange (my_int);8.3.1 8.3.1 類屬定義一般形式類屬定義一般形式 generic | | | package generic_pkg is -用類屬參數(shù)的包 . . . end generic_
13、pkg; 類屬實(shí)例化是在有了實(shí)在參數(shù)以后作實(shí)例聲明: package ins_pkg is new generic_pkg(); 類屬形實(shí)參數(shù)的個數(shù)、 次序要匹配。類屬參數(shù)類屬參數(shù) 原則上聲明中的所有程序?qū)ο蠖伎梢詤?shù)化,其實(shí)現(xiàn)機(jī)原則上聲明中的所有程序?qū)ο蠖伎梢詤?shù)化,其實(shí)現(xiàn)機(jī)制如同子程序中參數(shù)結(jié)合,制如同子程序中參數(shù)結(jié)合, 類屬值一般是復(fù)制機(jī)制,類屬值一般是復(fù)制機(jī)制, 類屬類屬對象對象( (變量變量) )、類型、子程序用引用機(jī)制。、類型、子程序用引用機(jī)制。 取決于實(shí)現(xiàn)。取決于實(shí)現(xiàn)。類屬聲明是類屬聲明是 in in 模式模式變量變量 可換值可換值 inoutinout模式模式變量變量 可換變量
14、可換變量類屬類型類屬類型private private 私有私有 可以和任何類型匹配可以和任何類型匹配 () () 枚舉枚舉 可以和任何枚舉類型匹配可以和任何枚舉類型匹配 range range 整整 可以和任何整型匹配可以和任何整型匹配 delta delta 定點(diǎn)定點(diǎn) 可以和任何定點(diǎn)類型匹配可以和任何定點(diǎn)類型匹配 digits digits 浮點(diǎn)浮點(diǎn) 可以和任何浮點(diǎn)類型匹配可以和任何浮點(diǎn)類型匹配類屬子程序類屬子程序with procedure(with procedure() 可以和任何過程匹配,同時類型參數(shù)例化可以和任何過程匹配,同時類型參數(shù)例化 ada的類屬程序包的例子 程序包中封裝一
15、分類和歸并程序。被分?jǐn)?shù)據(jù)按數(shù)組類型設(shè)計(jì),它的元素類型,按升序還是降序,數(shù)組下標(biāo),都參數(shù)化: generic type item is private -數(shù)組元素類型參數(shù)化 type sequence is array (integer range ) of item; -數(shù)組類型參數(shù)化。item馬上就用了 with function precedes (x,y:item ) return boolean; -參數(shù)化操作未定升降序 package sorting is procedure sort (s: in sequence); procedure merge (s1, s2: in seq
16、uence; s: out sequence); end sorting;有兩個實(shí)在函數(shù): function = (x,y: float) return boolean; 那么就可以作以下設(shè)例聲明: type flpat_sequence is array (integer range ) of float; package ascending is new sorting(float,float_sequence,=); 這樣, 就有了一個升序, 一個降序的兩個程序包。續(xù)類屬類屬動態(tài)實(shí)現(xiàn)問題動態(tài)實(shí)現(xiàn)問題類屬程序是抽象程序可以編譯,但不可執(zhí)行,類屬程序是抽象程序可以編譯,但不可執(zhí)行,每次執(zhí)行的
17、是實(shí)例程序每次執(zhí)行的是實(shí)例程序。其編譯執(zhí)行如同其編譯執(zhí)行如同c c語言語言之宏替換,也就是參數(shù)靜態(tài)束定于實(shí)參,強(qiáng)類之宏替換,也就是參數(shù)靜態(tài)束定于實(shí)參,強(qiáng)類型語言可以做到。型語言可以做到。類屬程序只有一個類屬程序只有一個,運(yùn)行時動態(tài)束定就不需要運(yùn)行時動態(tài)束定就不需要顯式顯式設(shè)例設(shè)例。 因此因此,動態(tài)設(shè)例的程序表達(dá)能力更動態(tài)設(shè)例的程序表達(dá)能力更強(qiáng)強(qiáng),程序易于擴(kuò)充。,程序易于擴(kuò)充。8.4 8.4 類和對象類和對象包充作程序?qū)ο蟀渥鞒绦驅(qū)ο體ith systemwith system; package stack is package stack is function push (k:intege
18、r) return boolean function push (k:integer) return boolean; function pop return integer function pop return integer; function top return integer function top return integer;-返回棧頂元素返回棧頂元素end stackend stack; package body stack is package body stack is stklen : constant:=10 stklen : constant:=10; - -堆棧
19、有十元素堆棧有十元素 stk:array (1.stklen) of integerstk:array (1.stklen) of integer; - -整數(shù)堆棧體整數(shù)堆棧體 tos: integer range 1.stklentos: integer range 1.stklen; function push (k:integer) is function push (k:integer) is begin begin if tos stklen then if tos 0 then if tos 0 then return stk(tos) return stk(tos); else
20、else return system.min_int return system.min_int; - -交交systemsystem包處理包處理 endifendif; end top end topfunction pop return integer is function pop return integer is ans:integer ans:integer; - -工作變量局部量工作變量局部量 beginbegin ans:= tos ans:= tos; tos:= tos - 1 tos:= tos - 1; return ans return ans; end pop en
21、d pop;begin -begin -程序包是資源,以下執(zhí)行代碼在裝入后,程序包是資源,以下執(zhí)行代碼在裝入后, tos:=0 -tos:=0 -程序運(yùn)行時首先執(zhí)行,為了初始化。程序運(yùn)行時首先執(zhí)行,為了初始化。end stackend stack; 這個對象是實(shí)例對象,可以對它施行堆棧操作這個對象是實(shí)例對象,可以對它施行堆棧操作 stack.push(n);stack.push(n); stack.pop; stack.pop; stack.top; stack.top;包名充作實(shí)例對象名。包名充作實(shí)例對象名。類類對象生成對象生成實(shí)例對象實(shí)例對象 c+的類定義 class char_stack /以下是該類的私有部分 int size; char * tos, *end; char * s; public: /以下是該類公共部分 char_stack(int sz) s = new char size = sz; tos = s; end
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年分體式超聲波塑料焊接機(jī)項(xiàng)目可行性研究報告
- 2025至2030年軸式傳感器項(xiàng)目投資價值分析報告
- 湖北省某休閑度假苑項(xiàng)目可行性研究報告
- 2025年大螺旋節(jié)能燈項(xiàng)目投資可行性研究分析報告
- 2025年TUC片材項(xiàng)目可行性研究報告
- 廣東省某公司網(wǎng)絡(luò)系統(tǒng)集成項(xiàng)目可行性研究報告
- 代課教師聘用合同標(biāo)準(zhǔn)合同
- 附條件借款合同樣本
- 度教育培養(yǎng)合同
- 爆款加盟合同模板大全
- 月球基地建設(shè)與運(yùn)行管理模式
- 32軟件測試報告GJB438C模板
- 長期處方管理規(guī)范
- 汽車電氣設(shè)備檢測與維修中職全套教學(xué)課件
- 幼兒園大班數(shù)學(xué)PPT課件2、3、4的分解與組成
- 遙感圖像的分析解譯(共34張PPT)
- API682機(jī)械密封沖洗方案(中文)課件
- 七年級上冊英語完形填空、閱讀理解綜合訓(xùn)練100題(含參考答案)
- DB35T 1345-2013蘭壽系列金魚養(yǎng)殖技術(shù)規(guī)范
- 祛痘產(chǎn)品原料配方與消費(fèi)者祛痘方案選擇建議
- 年產(chǎn)一萬噸蓖麻項(xiàng)目可行性論證報告
評論
0/150
提交評論