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

圖1

圖2

圖3
bool isPrime ( int num);
第三步:函數實現。給定一個數num判斷其是否是素數的方法學生早已掌握,實現如下:

例2 設計函數求n個數中的最大值。
該函數設計步驟:
第一步:確定函數的功能。求n個數中的最大值,函數模塊名為maximun。
第二步:分析模塊接口,確定函數的原型。
1)輸入信息:個數n和n個數(用數組表示)
2)返回信息:最大值。
如圖3所示。
3)確定函數模塊maximun的原型。傳入信息有兩個,即個數n和n個數,用形參表示,而返回信息最大值,可以在形參列表中表示,也可以通過函數名來返回,故有兩種方案:

第三步:函數實現。給定n個數如何來求其最大值?該方法學生已掌握,就很容易實現了。

這樣設計出的函數具有很強的模塊獨立性,符合軟件工程方法對模塊設計的要求,使學生在潛移默化中理解并接受軟件工程的思想,盡管還沒有學習軟件工程課程。
根據多年教學實踐,總結出的函數模塊設計的三步曲方法,即確定函數功能、分析模塊接口并確定函數原型、函數內部實現,能很好地體現函數模塊設計的工程化思想,使學生在進行函數模塊設計時有章可循,易于理解和掌握,收到很好的教學效果。
10.3969/j.issn.1001-8972.2015.21.018