工程认证背景下程序设计课程实验设计与实践
——以“面向对象程序设计”课程为例

2022-08-11 05:34俞文昌章哲庆
池州学院学报 2022年3期
关键词:面向对象复杂度程序设计

俞文昌,章哲庆

(池州学院 大数据与人工智能学院,安徽 池州 247000)

工程教育专业认证以国际上最具影响力的工程教育学位互认协议《华盛顿协议》为基础,我国于2016年6月成为《华盛顿协议》的正式成员。从某种程度上说,工科专业通过了工程教育认证,相当于得到了其他加入《华盛顿协议》的地区或织的认可,为工科毕业生走向世界打下了基础[1]。

工程教育专业认证标准第三节毕业要求[2]中有九条提到了“复杂工程问题”。要求毕业生能够对“复杂工程问题”进行分析研究、提出方案、解决问题和评价过程。标准明确指出“复杂工程问题”是指必须运用深入的工程原理,经过分析才可能得到解决;同时还应具备涉及多方面的技术、工程和其它因素,并可能相互有一定冲突;需要通过建立合适的抽象模型才能解决,在建模过程中需要体现出创造性,不是仅靠常用方法就可以完全解决的问题。

“面向对象程序设计”课程是专业基础课,作为程序设计类课程对程序设计实践能力提出很高要求。课程以面向对象语言(Java,C#,C++等)学习为主,训练学生使用面向对象思想分析、设计和解决问题的能力。当前“面向对象程序设计”课程教学存在实验考察知识点相互割裂、考核手段单一、学生代码量不足的问题,导致学生程序实践能力差,解决复杂工程问题的能力弱。本文将结合工程教育专业认证标准和当前“面向对象程序设计”实践课程在教学实践中存在的问题探讨“面向对象程序设计”实践课程教学方法改革中的一些思考。

1 实践课程现状

“面向对象程序设计”课程目前以“理论讲授+实践教学”的教学模式,很多的专家和老师对本课程教学进行了广泛的研究与改革。但是结合教学实践和工程教育专业认证的要求,笔者认为“面向对象程序设计”实践课程存在以下问题。

1.1 知识点割裂

当前课程教学实践中以理论教学为中心,实验课程往往作为理论知识点巩固的辅助。实验设计的指导思想是为巩固对应章节知识点,因此实验考察知识点之间相互独立。这种实验有利于学生加深对所学各章节知识点的理解,但会造成学生学习和掌握的不同知识点之间相互割裂,无法有效地组织在一起[3]。当面临一个复杂工程问题时,由于缺乏对综合问题求解的训练,学生难以将学习的知识点相互融合。造成学生在毕业设计中接触相对复杂工程问题时无从下手,结果不理想的情况。

1.2 考核手段单一

“面向对象程序设计”课程教材一般都配有相应的实验指导书。以耿祥义等主编的Java“面向对象程序设计”(第三版)为例,该教材配有Java“面向对象程序设计”实验指导。实验指导书上实验形式为程序填空,学生需要在程序模板的空白位置按照实验要求填上对应代码。实验考核手段则是查看学生填写的代码是否正确。这种实验形式和考核手段比较单一,出现学生直接抄袭答案的情况。这种实验形式和考核手段既不利于准确掌握学生的学习情况,也难以激发学生的学习热情。

1.3 代码量不饱和

当前实验教学设计的目的往往是巩固所学知识点,要求学生能正确运用所学知识点写出关键部分代码,而对学生代码量并没有明确要求。统计前文提到的实验指导书上24个实验,平均每个实验需要学生独立编写的代码仅有4.4行,甚至部分实验只需要学生阅读代码。这样实验课程导致学生一个学期独立编写的代码甚至不超过200行,代码量严重不饱和。这将不利于学生编程能力的锻炼,更不用说锻炼学生解决复杂工程问题的能力。

2 实践课程设计应具备的特点

结合工程教育认证标准中毕业要求对“复杂工程问题”的解释和人才培养方案中本课程的培养目标,笔者认为“面向对象程序设计”课程设计应该具备以下特点:

2.1 复杂度可量化

工程教育专业认证对学生应对复杂工程的能力提出明确要求,实验复杂度可量化分析是合理安排实验复杂度,训练学生应对复杂工程问题的基础。“面向对象程序设计”实验的量化分析可从基础语法、面向对象、高级语法、复杂逻辑和代码量五个维度来量化衡量。分析结果可用如图1雷达图可视化表示。

图1 问题复杂度雷达图

表1展示了一种“面向对象程序设计”实验复杂度量化评分细则,五个维度满分均为10分,各维度按照考察重点和知识点难易程度确定分值。评分细则可在教学实践中不断调优。对课程实验复杂度的量化分析,为合理实验规划和实验设计提供数据支撑。

表1 问题复杂度评分细则

2.2 合理规划实验

基于实验复杂度量化分析,课程实验对实验复杂度的规划可更合理和灵活。实验安排应兼顾教学阶段和具体学情,既要促进学生对所学知识点的理解,也要注重对学生程序设计和应对复杂工程问题能力的锻炼。实验大纲可设定课程实验总体复杂度标准,同时还可设定单个维度复杂度最低标准。以代码量复杂度为例,程序设计类课程代码饱和度达成,显著提高学生的编码能力[4],课程实验大纲可设置“代码量”单项复杂度最低标准。中等复杂问题的代码量一般在300-500行代码,代码量复杂度应该在6-8分。整个课程学生的平均代码量应该在1000行以上,则可要求整个课程代码量复杂度不低于20分。

2.3 多维度考核

考核标准会直接影响学生的实验过程和试验方法,在很大程度上决定实验效果。面向对象课程实验考核标准分为三个维度:功能完整、面向对象和编程风格。功能完整维度重点检查程序是否完整实现实验要求的功能;面向对象维度要求学生使用面向对象的思想来分析归纳问题涉及的各个类型对象,正确归纳对象的属性和方法,正确处理对象之间的关系,尤其考察对于继承和多态的应用能力;编程风格维度重点考察程序的可读性、扩展性和可维护性。好的编程风格是合格程序设计人员必备素质,在平时的实践课程中需要对学生严格要求。

3 案例分析

本节以笔者在计算机科学与技术专业18级和19级面向对象课程教学中使用到的案例《画板应用程序》说明在教学实践中对实验复杂度量化分析、实验设计思路、实验考核标准和结果分析。实验题目要求如下。

设计实现画板应用程序,程序可以画出矩形、椭圆和线段,坐标的精确度为整型,左上角像素编号为(0,0),形状可设置填充色。按照下列要求完成实验:

(1)设计形状的类Shape,形状类包含两个坐标点,颜色属性,抽象函数draw();设计形状矩形Rect、椭圆Ellipse类继承自形状类,实现形状类的抽象函数draw(具体实现可在控制体打印文字)。实现各形状的equal,hashCode,toString函数。

(2)从文件加载形状信息并保存在ArrayList中,绘制在用户图形界面。

(3)使用鼠标事件绘制出几何形状,通过鼠标可拖动和改变几何形状大小,可以双击删除几何形状,可将绘制的图片保存在文件中,且可以再次打开文件编辑

3.1 复杂度分析

参考表1问题复杂度评分细则对本题复杂度量化分析:基础语法,各细则项都有涉及得10/10分;面向对象,static和final两个关键词未考察得9/10分;高级语法,只考察了用户图形界面得3/10分;逻辑复杂度,性能优化未考察得8/10分;代码量,预估代码量在300~400行得7/10分。本实验总体复杂度得分37/50,图2是实验问题复杂度雷达图。基于以上分析和可视化可知本实验是具有一定综合要求的中等复杂问题,重点考察程序设计基础和面向对象编程。

图2 问题复杂度雷达图

3.2 设计思路

实验案例设计以巩固知识点,锻炼学生程序设计能力和解决复杂工程能力为目标。在教学中首先引导学生将较为复杂的实验分解成多个知识点,然后逐个知识点突破,最后将这些知识点融合以实现对复杂问题的求解。

本实验案例可分解为:面向对象编程、继承与多态、用户图形界面和事件处理四个知识点。教学过程不同阶段重点考察对应知识点而弱化其他知识点要求。随着教学阶段推进,知识点逐个突破,最后要求学生能够实现功能完整具有一定工程复杂度的画板应用程序。

3.3 考核标准

本实验案例在功能完整性、面向对象编程、代码风格三个方面的具体考核细则如表3所示:

表3 画板程序评分细则表

3.4 结果分析

18、19计算机科学与技术专业206位同学的得分统计如图3。功能完整整体平均分为32/40,基本能实现题目要求功能,失分主要是没有实现可保,存可重复编辑功能。面向对象得分25/40,失分多为没有使用多态特征和abstract关键词,说明学生对于面向对象核心思想掌握和灵活运用的能力有待提高。编程风格部分得分12/20,这部分各考核项都有失分,尤其代码缩进和合理注释。通过本实验得失分分析发现学生在完成实验时注重功能要求,而忽略了代码风格的要求,面向对象的编程思维比较薄弱。

图3 学生得分分布直方图

代码饱和度分析部分统计了206位学生提交的最终实验代码,代码行数的中位数457行,均值为420行,代码行数分布直方图如图4。本实验的代码饱和度略高于问题复杂度量化分析部分预期,相较于传统实验代码量有着明显增加。

图4 学生代码行数分布直方图

4 面临的困难

4.1 上手难度大

为了培养学生应对复杂工程问题的能力,实验案例设计较以往复杂度有所增加。在教学实践中部分同学感觉无从着手。应对方案有两个:第一,合理设置实践题目的复杂度。实践题目复杂度并不是越大越好,需要循序渐进。第二,在实践教学过程中引导学生拆解问题,并针对重难点问题可带着学生做。应该认识到学生发现上手难度大,并引导学生克服困难的过程正是训练学生应对复杂问题能力的过程。

4.2 前置课程不满足要求

实践案例设计中有时会出现知识点交叉部分,前置课程不满足要求。比如数据库技术、Web前端技术等出现在目前的课程设置中,而这些内容在后续课程才会学习。这是教学改革中常见的问题,解决方案可从短期和长期两个维度来思考。短期引导学生课后借助在线课程自学相关知识点,也可在教学过程中简单介绍相关内容,主要介绍使用方法弱化原理介绍。长期解决方案则是参考专业教育认证标准更合理制定人才培养方案,优化课程设置。

4.3 考核工作量大

新的实验案例设计思路和考核标准对学生提出了更高的要求,同时对于授课老师评阅考核也提出了更高的要求。不能简单认字符串匹配查看答案是否正确或查看功能是否正确。需要从面向对象编程和编程风格等对维度检查,这将大大增大了授课老师的实验考核工作量。解决方案有两个方面:一方面考虑从学生中选拔程度较好的学生作为助教,协助老师考核。另一方面,部分评分标准可标准化,比如编程风格,可通过自动化评测系统协助考核。

5 结论

工程教育专业认证视角下教学实践中应训练学生理解、分析、研究和解决复杂工程问题的能力。结合工程认证标准和程序设计实验课程当前存在的问题,提出全新的实验教学方法:量化实验复杂度,基于量化分析合理设置实验复杂度和多维度考核。以实际教学案例说明了新的教学方法的可行性和对后续教学改进的指导作用。该教学方法在实践中出现一些困难,需要在不断教学实践中对实验方案、课程设计和教学方法进行优化。新的教学方法通过对具有一定工程复杂度问题的求解提高学生程序设计和应对复杂工程问题的能力。

猜你喜欢
面向对象复杂度程序设计
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
一种低复杂度的惯性/GNSS矢量深组合方法
求图上广探树的时间复杂度
高职高专院校C语言程序设计教学改革探索
面向对象Web开发编程语言的的评估方法
某雷达导51 头中心控制软件圈复杂度分析与改进
峰丛洼地农作物面向对象信息提取规则集
基于面向对象的车辆管理软件的研制与开发
PLC梯形图程序设计技巧及应用