張亞紅
程序設(shè)計(jì)中函數(shù)模塊設(shè)計(jì)的三步曲方法
張亞紅
針對(duì)C/C++程序設(shè)計(jì)課程函數(shù)部分的教學(xué)中學(xué)生存在函數(shù)模塊設(shè)計(jì)能力較差的問題,根據(jù)多年的程序設(shè)計(jì)教學(xué)實(shí)踐,總結(jié)出基于工程化思想的函數(shù)模塊設(shè)計(jì)的“三步曲”教學(xué)方法,即確定函數(shù)功能、分析模塊接口并確定函數(shù)原型、函數(shù)實(shí)現(xiàn),使學(xué)生對(duì)函數(shù)模塊的設(shè)計(jì)有法可循,提高了學(xué)生模塊化程序設(shè)計(jì)能力,收到很好的教學(xué)效果。
要設(shè)計(jì)一個(gè)函數(shù)模塊,可以用以下三個(gè)步驟來很好地完成。
第一步:確定函數(shù)的功能。為了與后續(xù)的軟件工程模塊功能單一的思想保持一致,這里的函數(shù)功能應(yīng)該用一句陳述句來表達(dá),其中盡量不要含有“和”、“與”等字來描述,當(dāng)然這里也可以同時(shí)給出函數(shù)模塊的名字。
界定好函數(shù)模塊的功能,學(xué)生設(shè)計(jì)函數(shù)的目的性就很明確了,心中就不會(huì)模糊不清,特別是遇到比較復(fù)雜的問題時(shí),能夠思路清晰。
第二步:分析模塊接口,確定函數(shù)原型。模塊接口是模塊與調(diào)用者之間的信息傳遞,就是指模塊的輸入信息和輸出信息,或者說是模塊的傳入信息和返回信息。然后由函數(shù)接口來設(shè)計(jì)函數(shù)原型。
根據(jù)模塊功能,首先分析要做這件事需要哪些原始數(shù)據(jù)?這些原始數(shù)據(jù)就是模塊的傳入信息。
分析經(jīng)過本模塊的處理獲得了哪些結(jié)果數(shù)據(jù),即返回信息。為便于學(xué)生理解掌握,可用圖1形象化地表達(dá)這兩個(gè)步驟。
最后根據(jù)函數(shù)模塊的傳入信息和返回信息,來確定函數(shù)模塊的原型。所有的傳入信息在形參列表中表示,而返回信息可以在形參列表中表示,也可以通過函數(shù)名來返回,而其它的中間變量不要在形參列表中出現(xiàn)。
2016年10月,國際海事組織(IMO)海上環(huán)境保護(hù)委員會(huì)(MEPC)第70屆會(huì)議確定于2020年1月1日起全球船舶燃油硫含量不應(yīng)超過0.5% m/m。這一決定在航運(yùn)界反響巨大,業(yè)內(nèi)普遍認(rèn)為,國際海事組織限硫政策不但將增加船東的運(yùn)營成本,還將對(duì)世界經(jīng)濟(jì)和全球貿(mào)易帶來巨大影響。2018年10月召開的國際海事組織海上環(huán)境保護(hù)委員會(huì)第73屆會(huì)議決定,在2020年全球限硫令生效后,所有未安裝脫硫設(shè)備的船舶,將禁止攜帶硫含量超標(biāo)的燃油。全球航運(yùn)業(yè)、石油公司、船供油企業(yè)均將在不到13個(gè)月的時(shí)間里面臨巨大挑戰(zhàn)。
本步驟是函數(shù)模塊設(shè)計(jì)的關(guān)鍵和難點(diǎn),也是我們教學(xué)過程中容易疏忽,造成學(xué)生能聽懂但做不了、做不好的地方。
第三步:函數(shù)實(shí)現(xiàn)。考慮怎樣把傳入的原始數(shù)據(jù)轉(zhuǎn)換成結(jié)果數(shù)據(jù)?即處理過程。該步驟的實(shí)現(xiàn)與學(xué)生前面學(xué)習(xí)的知識(shí)和方法相關(guān)聯(lián),在此不多贅述。
下面以實(shí)例來說明該三步曲的應(yīng)用。
例1 設(shè)計(jì)函數(shù)判斷一個(gè)數(shù)是否是素?cái)?shù)。
第一步:確定函數(shù)的功能。判斷一個(gè)數(shù)是否是素?cái)?shù),函數(shù)模塊名為isPrime。
第二步:分析模塊接口,確定函數(shù)的原型。
1)輸入信息:一個(gè)數(shù)num
2)返回信息:是否是素?cái)?shù)。
如圖2所示。
3)確定函數(shù)模塊isPrime的原型。傳入信息有一個(gè),即數(shù)num,用形參表示,而返回信息是否是素?cái)?shù),可以通過函數(shù)名來返回布爾數(shù)據(jù),故有方案:
圖1
圖2
圖3
bool isPrime ( int num);
第三步:函數(shù)實(shí)現(xiàn)。給定一個(gè)數(shù)num判斷其是否是素?cái)?shù)的方法學(xué)生早已掌握,實(shí)現(xiàn)如下:
例2 設(shè)計(jì)函數(shù)求n個(gè)數(shù)中的最大值。
該函數(shù)設(shè)計(jì)步驟:
第一步:確定函數(shù)的功能。求n個(gè)數(shù)中的最大值,函數(shù)模塊名為maximun。
第二步:分析模塊接口,確定函數(shù)的原型。
1)輸入信息:個(gè)數(shù)n和n個(gè)數(shù)(用數(shù)組表示)
2)返回信息:最大值。
如圖3所示。
3)確定函數(shù)模塊maximun的原型。傳入信息有兩個(gè),即個(gè)數(shù)n和n個(gè)數(shù),用形參表示,而返回信息最大值,可以在形參列表中表示,也可以通過函數(shù)名來返回,故有兩種方案:
第三步:函數(shù)實(shí)現(xiàn)。給定n個(gè)數(shù)如何來求其最大值?該方法學(xué)生已掌握,就很容易實(shí)現(xiàn)了。
這樣設(shè)計(jì)出的函數(shù)具有很強(qiáng)的模塊獨(dú)立性,符合軟件工程方法對(duì)模塊設(shè)計(jì)的要求,使學(xué)生在潛移默化中理解并接受軟件工程的思想,盡管還沒有學(xué)習(xí)軟件工程課程。
根據(jù)多年教學(xué)實(shí)踐,總結(jié)出的函數(shù)模塊設(shè)計(jì)的三步曲方法,即確定函數(shù)功能、分析模塊接口并確定函數(shù)原型、函數(shù)內(nèi)部實(shí)現(xiàn),能很好地體現(xiàn)函數(shù)模塊設(shè)計(jì)的工程化思想,使學(xué)生在進(jìn)行函數(shù)模塊設(shè)計(jì)時(shí)有章可循,易于理解和掌握,收到很好的教學(xué)效果。
10.3969/j.issn.1001-8972.2015.21.018