张亚红
程序设计中函数模块设计的三步曲方法
张亚红
针对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