PBL的改进及在“软件设计模式”课程教学中的应用研究

时间:2022-04-30 12:20:13

PBL的改进及在“软件设计模式”课程教学中的应用研究

文章编号:1672-5913(2008)08-0056-02

摘要:本文讨论了软件设计模式课程教学中的几个问题,介绍了经典的pbl教学法及其不足,对其教学过程设计进行了改进并给出了一个教学案例,另外本文还就应用PBL教学法的注意事项进行了讨论。

关键词:PBL;软件设计模式;计算机教学;面向对象;教学方法

中图分类号:G642

献标识码:B

“软件设计模式”是一门理论性和实践性都非常强的课程,内容抽象难懂,目前的大部分教材仅仅在一般意义上给出了各种模式的定义、结构、代码框架,授课时容易出现内容空泛、言之无物的情形,学生感觉这门课程比较困难。如何根据学生的特点,选用合适的教材,采用适当的教学方法是提高软件设计模式教学效果所必须要解决的问题。本科学生的特点我们很难改变,教材问题可以通过授课教师的主观努力,以讲义和补充材料的方式加以解决,而本文则主要讨论软件设计模式的教学方法问题,即在软件设计模式课程的教学中如何使用PBL教学方法来提高教学效果。

1PBL及改进的教学过程设计

PBL(Problem-based Learning)是一种行之有效的“做中学”教学方法,最初是由Barrows在加拿大McMaster大学提出来的一种教学策略和课程设计思想,符合以学生为中心的自我引导学习的建构主义学习理论。有效的PBL可以提高学生下面这几方面的能力和素质:解决问题的技能;思维能力;团队合作能力,包括赏识和包容异类学习同伴的精神;组织利用时间的技能;获取和评价信息的能力;传播信息的技能;计算机运用能力等。

在教学中引进PBL教学法后我们发现该方法的不足之处,主要问题是:时间消耗量大,学生学习的效率不高;在班级规模较大时,教师对教学的组织和教学过程的控制也存在很大的困难;以小组为单位,容易造成学生能力发展不均衡,出现小组内某些学生成为主导,另一些学生则滥竽充数的情况。为此我们对PBL方法作了一些修改,教学过程设计如下:

(1) 提出一个与本次课程要学习的设计模式相关的设计问题。这一步非常关键,提出的设计问题必须与学生已有的基础较接近,规模适中,是学生可能完成的任务。这样可以激发学生的学习兴趣。

(2) 讲授与该设计模式相关的面向对象的设计原则。对这些原则的讲授可以贯穿在该门课程的整个教学过程中,适当的重复和强调可以加深学生的印象,促使学生在其今后的设计中自觉运用设计原则,即使不套用设计模式,也能产生良好的设计方案。

(3) 给学生留出时间,让学生设计前面问题的解决方案。要求每个学生自己进行设计,但允许和同学讨论。

(4) 抽取并公布学生的设计方案,组织同学讨论其优劣,对比与事先提出的设计目标的差距并分析原因。

(5) 以相应设计模式的思路,对学生的方案进行改进,并给出其简单实现。

(6) 从上述实例中提炼出要讲授的设计模式,总结其意图、结构、角色、示意性代码,分析其可能的变化。

(7) 布置一个类似的设计问题作为课偶作业,要求学生给出完整的设计和实现。

我校“软件设计模式”课程只有32个学时,在这么短的学时内让学生完整深入地掌握23个设计模式是不现实的。

我们在制定教学大纲时充分考虑到了这个问题,选取了其中一部分作为课堂教学的内容,选取的准则是:①是常用模式;②在模式分类中具有代表性。其余的设计模式则留给学生课后自学。

2一个基于PBL的设计模式教学案例

Strategy Pattern(策略模式)是一种常用的重要的设计模式,下面以该设计模式的教学为例,说明PBL教学方法的应用。

(1) 提出问题。某公司销售打印机时有一定的折扣让利给顾客,但折扣计算的方法有很多种,如不打折、每台减扣固定的金额、按售价的5%打折等。现在要为该公司开发销售系统,实现打印机销售时的折扣计算,要能够灵活地选用折扣计算方法,并且可以很容易地增加或修改折扣计算方法,而不至于对整个系统的维护造成困难。

(2) 相关设计原则的讲授。本设计模式主要涉及三个面向对象的设计原则:针对接口编程,而不是针对实现编程;优先选用对象组合,而不是类继承的软件复用方式;分离变化,并对变化进行单独封装以使得今后对软件的维护局部化。在讲授这三个原则时,各举简单的例子加以说明。

(3) 让学生解决第一步提出的问题,给出设计方案。设计时尽量运用前面讲授的三个设计原则。要求每个学生自己动手,但鼓励讨论。

(4) 抽取学生的设计方案,并比照第一步提出的设计目标进行分析讨论。由于时间关系,不可能对每个学生的方案进行讨论,一般鼓励学生主动提交,主动提交的学生一般认为自己的设计方案较好,此外也可以选一个不理想的设计方案进行讨论。

学生的设计方案五花八门,图1是其中的一种。

图1 学生的一个设计方案

该设计方案部分运用了讲授的设计原则,如PrinterSaler使用抽象类Printer而不是直接使用具体类HPPrinter等,这体现出学生试图运用针对接口编程的原则;该方案将计算折扣的方法单独抽象成一个接口,但却是用打印机的具体类来实现该接口的,说明了设计者意识到计算折扣是变化的部分,试图将其分离出来,但却没有将它进行独立的封装,因此对改善系统的可维护性和折扣方法的灵活选用并无多大帮助,而且由于抽象类Printer没有实现该接口,使得PrinterSaler通过使用Prinetr来计算折扣难以实现。

通过分析和讨论(这一过程要鼓励学生参与发言,而不是教师唱独角戏)学生的方案,指出其不足,并一步步加以优化,最后可以得到基于Strategey模式的设计方案,如图2所示。

图2 基于Strategy Pattern的设计方案

在此强调由于折扣计算方法的分离和单独封装,就可以通过实例化不同的具体折扣计算类ConcreteDiscount并赋值给Printer的引用变量(假定为Discount),然后通过调用discount.calcDiscount()灵活选用相应的折扣计算方法;折扣计算方法可以被所有打印机类复用,甚至可以被其他类复用;而且修改或增加新的折扣计算方法也不会影响其他打印机类的代码。

(5) 为了使学生有更为切身的体验,给出上述设计方案的实现代码,编译并演示运行结果。

(6) 从上述实例中提炼出要讲授的设计模式,总结其意图、结构、角色、示意性代码,分析其可能的变化。

(7) 布置一个类似的设计问题,作为作业,要求学生给出完整的设计和实现,提交实验报告。

参考文献

[1] 张屹,祝智庭. 建构主义理论指导下的信息化教育[J]. 电化教育研究,2002,(1).

上一篇:编译原理课程实践改革探索 下一篇:计算机专业认证实践与思考