程序設(shè)計(jì)思想與方法——第五章_第1頁
程序設(shè)計(jì)思想與方法——第五章_第2頁
程序設(shè)計(jì)思想與方法——第五章_第3頁
程序設(shè)計(jì)思想與方法——第五章_第4頁
程序設(shè)計(jì)思想與方法——第五章_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、模塊化編程模塊化編程模塊化設(shè)計(jì)和建造模塊化設(shè)計(jì)和建造 在對(duì)產(chǎn)品進(jìn)行功能分析的基礎(chǔ)上在對(duì)產(chǎn)品進(jìn)行功能分析的基礎(chǔ)上,將產(chǎn)品將產(chǎn)品分解成若干個(gè)功能模塊分解成若干個(gè)功能模塊,預(yù)制好的模塊再預(yù)制好的模塊再進(jìn)行組裝進(jìn)行組裝,形成最終產(chǎn)品形成最終產(chǎn)品. 模塊模塊:提供特定功能的相對(duì)獨(dú)立的單元提供特定功能的相對(duì)獨(dú)立的單元. 標(biāo)準(zhǔn)化標(biāo)準(zhǔn)化:標(biāo)準(zhǔn)尺寸和標(biāo)準(zhǔn)接口標(biāo)準(zhǔn)尺寸和標(biāo)準(zhǔn)接口 可組裝可組裝:多個(gè)模塊可以方便靈活地組合多個(gè)模塊可以方便靈活地組合 可替換可替換:改變系統(tǒng)的局部功能改變系統(tǒng)的局部功能 可維護(hù)可維護(hù):對(duì)模塊進(jìn)行局部修改或設(shè)置對(duì)模塊進(jìn)行局部修改或設(shè)置Lu Chaojun, SJTU 2模塊化編程模塊化編程

2、 將程序分解為獨(dú)立的、可替換的、具有將程序分解為獨(dú)立的、可替換的、具有預(yù)定功能的模塊預(yù)定功能的模塊,每個(gè)模塊實(shí)現(xiàn)一個(gè)功能每個(gè)模塊實(shí)現(xiàn)一個(gè)功能.各模塊組合在一起形成最終程序各模塊組合在一起形成最終程序. 好處好處: 易設(shè)計(jì)易設(shè)計(jì):復(fù)雜問題化成簡(jiǎn)單問題復(fù)雜問題化成簡(jiǎn)單問題 易實(shí)現(xiàn)易實(shí)現(xiàn):可以團(tuán)隊(duì)開發(fā)可以團(tuán)隊(duì)開發(fā) 易測(cè)試易測(cè)試:可各自測(cè)試可各自測(cè)試 易維護(hù)易維護(hù):增加模塊增加模塊 可重用可重用:一個(gè)模塊可參與組合不同程序一個(gè)模塊可參與組合不同程序Lu Chaojun, SJTU 3分離關(guān)注點(diǎn)分離關(guān)注點(diǎn) 關(guān)注點(diǎn)關(guān)注點(diǎn):是指設(shè)計(jì)者關(guān)心的某個(gè)系統(tǒng)特性是指設(shè)計(jì)者關(guān)心的某個(gè)系統(tǒng)特性或行為或行為 分離關(guān)注點(diǎn)分離

3、關(guān)注點(diǎn)(SoC):將系統(tǒng)分解為互不重將系統(tǒng)分解為互不重疊的若干部分疊的若干部分,每個(gè)部分對(duì)應(yīng)于一個(gè)關(guān)注每個(gè)部分對(duì)應(yīng)于一個(gè)關(guān)注點(diǎn)點(diǎn). 在模塊化編程中在模塊化編程中,以程序的各個(gè)功能作為以程序的各個(gè)功能作為關(guān)注點(diǎn)關(guān)注點(diǎn),模塊劃分就是分離關(guān)注點(diǎn)的結(jié)果模塊劃分就是分離關(guān)注點(diǎn)的結(jié)果.Lu Chaojun, SJTU 4編程語言中的模塊化構(gòu)造編程語言中的模塊化構(gòu)造 匯編語言匯編語言:子例程子例程,宏宏 高級(jí)語言高級(jí)語言:函數(shù)函數(shù),過程過程 有的語言不加區(qū)分有的語言不加區(qū)分,統(tǒng)稱為函數(shù)統(tǒng)稱為函數(shù). 包包,模塊模塊,函數(shù)庫函數(shù)庫,類庫類庫Lu Chaojun, SJTU 5Python函數(shù)函數(shù) 函數(shù)是一種程序

4、構(gòu)件函數(shù)是一種程序構(gòu)件,是構(gòu)成大程序的小是構(gòu)成大程序的小功能部件功能部件 function一詞本身就有一詞本身就有功能功能的含義的含義 我們已經(jīng)熟悉的函數(shù)我們已經(jīng)熟悉的函數(shù):Python內(nèi)建函數(shù)內(nèi)建函數(shù),如如abs()Python庫函數(shù)庫函數(shù),如如math.sqrt() 模塊化的程序是由許多函數(shù)組合而成的模塊化的程序是由許多函數(shù)組合而成的.Lu Chaojun, SJTU 6為什么需要函數(shù)為什么需要函數(shù)? 編程更容易把握編程更容易把握 大程序分解成小功能部件大程序分解成小功能部件 代碼重用代碼重用,避免重復(fù)相同避免重復(fù)相同/相似代碼相似代碼 提高開發(fā)效率提高開發(fā)效率 更易維護(hù)更易維護(hù) 程序更可

5、讀程序更可讀,更易理解更易理解 代碼簡(jiǎn)潔美觀代碼簡(jiǎn)潔美觀Lu Chaojun, SJTU 7函數(shù)用途函數(shù)用途:減少重復(fù)代碼減少重復(fù)代碼 編程實(shí)例編程實(shí)例:畫一棵樹畫一棵樹print *print *print *print *print *print *print *print *print #print #print # def treetop(): print * print * print * print *def tree(): treetop() treetop() print # print # print # tree()重復(fù)代碼的弊端重復(fù)代碼的弊端 程序不必要地冗長程序不必要地

6、冗長 代碼一致性維護(hù)麻煩代碼一致性維護(hù)麻煩:若修改一處代碼若修改一處代碼,則則所有重復(fù)的地方都要一致地修改所有重復(fù)的地方都要一致地修改 程序看上去累贅不美觀程序看上去累贅不美觀 輸入大量重復(fù)代碼很單調(diào)乏味輸入大量重復(fù)代碼很單調(diào)乏味函數(shù)用途函數(shù)用途:改善程序結(jié)構(gòu)改善程序結(jié)構(gòu)(1) 模塊化模塊化:將程序分解成多個(gè)較小的相對(duì)獨(dú)將程序分解成多個(gè)較小的相對(duì)獨(dú)立的函數(shù)立的函數(shù),可使程序結(jié)構(gòu)清晰可使程序結(jié)構(gòu)清晰,容易理解容易理解.def treetop(): print * print * print * print *def tree(): treetop() treetop() print # prin

7、t # print # tree()def treetop(): print * print * print * print *def treetrunk(): print # print # print # def main(): treetop() treetop() treetrunk()main()函數(shù)用途函數(shù)用途:改善程序結(jié)構(gòu)改善程序結(jié)構(gòu)(2)def treetop(): print * print * print * print *def treetrunk(): print # print # print # def main(): treetop() treetop() tre

8、etrunk()main()def treetop1(): print * print * print * print *def treetop(): treetop1() treetop1()def treetrunk(): print # print # print # def main(): treetop() treetrunk()main()主程序結(jié)構(gòu)清晰主程序結(jié)構(gòu)清晰函數(shù)用途函數(shù)用途:提高程序通用性提高程序通用性 換用換用字符來畫樹字符來畫樹,以便比較美觀度以便比較美觀度.def treetop1(): print * print * print * print *def tree

9、top2(): print print print print def star_treetop(): treetop1() treetop1()def caret_treetop(): treetop2() treetop2().def treetop(ch): print %s % (ch) print %s % (3*ch) print %s % (5*ch) print %s % (7*ch)def star_treetop(): treetop(*) treetop(*)def caret_treetop(): treetop() treetop().利用函數(shù)參數(shù)利用函數(shù)參數(shù)提高通用

10、性提高通用性小結(jié)小結(jié):函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用 先定義先定義(define) 再通過函數(shù)名調(diào)用再通過函數(shù)名調(diào)用 調(diào)用時(shí)傳遞參數(shù)調(diào)用時(shí)傳遞參數(shù) 調(diào)用執(zhí)行的是函數(shù)體調(diào)用執(zhí)行的是函數(shù)體(語句序列語句序列) 調(diào)用產(chǎn)生返回值調(diào)用產(chǎn)生返回值 函數(shù)定義可置于程序中任何地方函數(shù)定義可置于程序中任何地方,但必須但必須在調(diào)用之前在調(diào)用之前Lu Chaojun, SJTU 13def func(x): y = x * x return ya = func(2)函數(shù)調(diào)用過程函數(shù)調(diào)用過程 函數(shù)定義函數(shù)定義def (): 函數(shù)調(diào)用函數(shù)調(diào)用() 調(diào)用者暫停調(diào)用者暫停 函數(shù)形參被賦值為實(shí)參函數(shù)形參被賦值為實(shí)參 執(zhí)行函

11、數(shù)體執(zhí)行函數(shù)體 控制返回調(diào)用者控制返回調(diào)用者(調(diào)用點(diǎn)的下一條語句調(diào)用點(diǎn)的下一條語句)函數(shù)調(diào)用過程圖解函數(shù)調(diào)用過程圖解(1)函數(shù)調(diào)用過程圖解函數(shù)調(diào)用過程圖解(2)函數(shù)調(diào)用過程圖解函數(shù)調(diào)用過程圖解(3)參數(shù)傳遞參數(shù)傳遞 對(duì)于函數(shù)定義對(duì)于函數(shù)定義def f(x,y,z): . 按位置傳遞按位置傳遞f(1,2,3) 按名傳遞按名傳遞:形參形參=實(shí)參實(shí)參f(x=1,z=3,y=2) 實(shí)參可以是字面值實(shí)參可以是字面值,也可以是已賦值的變也可以是已賦值的變量量f(1,a,b)變量的作用域變量的作用域 變量具有變量具有作用域作用域(scope):即可以引用該變量的程序區(qū)域即可以引用該變量的程序區(qū)域. 不同作用

12、域中的變量不同作用域中的變量,即使同名即使同名,也是不同的變量也是不同的變量! 作用域可以是局部作用域可以是局部,也可以是全局也可以是全局 函數(shù)中定義的變量是函數(shù)中定義的變量是局部的局部的:即作用域是函數(shù)體即作用域是函數(shù)體. 函數(shù)的形參可視為局部變量函數(shù)的形參可視為局部變量,只不過是在調(diào)用時(shí)才賦值只不過是在調(diào)用時(shí)才賦值.x,y = 0,0def f(x): y = 1 print x,yf(x)print x,y函數(shù)如何使用外部數(shù)據(jù)函數(shù)如何使用外部數(shù)據(jù) Python中中,函數(shù)體可直接引用外部的變量函數(shù)體可直接引用外部的變量.x = 0def f(y): z = 1 print x,y,zf(1

13、0) 但這用法很不好但這用法很不好!不符合模塊化要求不符合模塊化要求. 應(yīng)當(dāng)通過參數(shù)向函數(shù)傳遞數(shù)據(jù)應(yīng)當(dāng)通過參數(shù)向函數(shù)傳遞數(shù)據(jù)x = 0def f(p,y): z = 1 print p,y,zf(x,10)f() xy,zx全局變量全局變量 函數(shù)若需引用并修改外部變量函數(shù)若需引用并修改外部變量,可聲明可聲明全局變量全局變量 x = 1 def f(): print x #未定義變量視為全局變量未定義變量視為全局變量 x = 2 #賦值引入局部變量賦值引入局部變量,則前行出錯(cuò)則前行出錯(cuò)! f() def h(): global x print x x = 2 #此賦值是針對(duì)全局變量的此賦值是針對(duì)

14、全局變量的 print x h()f() xh() xx全局變量的用途全局變量的用途 多個(gè)函數(shù)處理共享數(shù)據(jù)多個(gè)函數(shù)處理共享數(shù)據(jù)def f(): global x x = x + 1 print xdef g(): global x x = x 1 print xx = 0f()g() 函數(shù)的返回值函數(shù)的返回值 函數(shù)與調(diào)用者之間的信息交互函數(shù)與調(diào)用者之間的信息交互: 通過形參從調(diào)用者輸入值通過形參從調(diào)用者輸入值 通過通過返回值返回值向調(diào)用者輸出值向調(diào)用者輸出值 定義定義def (): return return計(jì)算各表達(dá)式計(jì)算各表達(dá)式,將結(jié)果返回調(diào)用者將結(jié)果返回調(diào)用者,退退出函數(shù)出函數(shù)函數(shù)返回值

15、的使用函數(shù)返回值的使用 如果沒有或者用不上函數(shù)返回值如果沒有或者用不上函數(shù)返回值,則函數(shù)調(diào)用可則函數(shù)調(diào)用可以直接當(dāng)成一條語句以直接當(dāng)成一條語句f(3) 相當(dāng)于某些語言中的相當(dāng)于某些語言中的過程調(diào)用過程調(diào)用 如果想使用函數(shù)返回值如果想使用函數(shù)返回值,則有兩種用法則有兩種用法 用變量接收返回值用變量接收返回值,如如x = f(3)print 2 + x * 4 直接用在表達(dá)式中直接用在表達(dá)式中,如如print 2 + f(3) * 4 忘記接收函數(shù)返回值是忘記接收函數(shù)返回值是Python初學(xué)者的常見錯(cuò)初學(xué)者的常見錯(cuò)誤誤函數(shù)返回值使用例函數(shù)返回值使用例(1) def sq(x): return x

16、* x sq(2)4 print sq(3) + 110 a = 4 b = sq(a) print b16 函數(shù)返回值使用例函數(shù)返回值使用例(2) 求兩點(diǎn)距離的函數(shù)求兩點(diǎn)距離的函數(shù)from math import sqrtdef sq(x): return x * xdef dist(u,v): d = sqrt(sq(v0-u0)+sq(v1-u1) return d 用一個(gè)函數(shù)輔助定義另一個(gè)函數(shù)用一個(gè)函數(shù)輔助定義另一個(gè)函數(shù),這是化繁為這是化繁為簡(jiǎn)的常用做法簡(jiǎn)的常用做法.函數(shù)返回值使用例函數(shù)返回值使用例(3) 多個(gè)返回值的接收多個(gè)返回值的接收 def headtail(list): ret

17、urn list0,listlen(list)-1 用多個(gè)變量用多個(gè)變量 h,t = headtail(1,2,3,4,5) print h,t1 5 用一個(gè)變量用一個(gè)變量,接受的值是元組接受的值是元組. v = headtail(1,2,3,4,5) v(1, 5) 關(guān)于關(guān)于return return通常出現(xiàn)在函數(shù)末尾通常出現(xiàn)在函數(shù)末尾,因?yàn)楹瘮?shù)一般都是因?yàn)楹瘮?shù)一般都是執(zhí)行完所有步驟之后才能得出計(jì)算結(jié)果并返回執(zhí)行完所有步驟之后才能得出計(jì)算結(jié)果并返回. 有時(shí)在函數(shù)到達(dá)末尾之前就終止執(zhí)行并返回有時(shí)在函數(shù)到達(dá)末尾之前就終止執(zhí)行并返回.def f(x): if x from moduletest import days days(1

溫馨提示

  • 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)論