非计算机专业Qt程序设计教学探索与实践

2019-04-01 01:33仇国巍赵英良卫颜俊桂小林
计算机教育 2019年3期
关键词:编程技术程序设计编程

仇国巍,赵英良,卫颜俊,桂小林

(西安交通大学 电子与信息工程学院,陕西 西安 710049)

0 引言

目前,在高校面向非计算机专业的程序设计入门课程中,相当一部分学校讲授C/C++语言。由于C/C++语言标准中不包括图形界面等高级编程内容,导致学生学习了该课程之后,仅能编写控制台窗口的命令行程序。这在很大程度上限制了学生利用C/C++编程解决问题的能力。

Qt是基于C++的跨平台开发框架,更确切地说,Qt是一个庞大的C++类库。它出现于20世纪90年代,最初主要用于图形界面开发。经过多年发展,Qt已经成为几乎全能的开发框架,除了图形界面开发,在数据库、网络、多媒体、嵌入式软件开发等方面也常常见到Qt的身影。近年来,随着嵌入式技术的广泛应用,Qt作为Linux和嵌入式开发的重要工具受到了前所未有的关注。Qt框架设计优雅、功能强大、易于学习和使用,还兼容Windows、Linux、Mac等主流操作系统,这些优点使它成为C++语言后续课程的理想教学内容。

目前各高校在Qt教学方面所做的工作并不多。文献[1]提出将多维互动模式用于Qt教学;文献[2]提出在Qt教学中使用项目分解与整合的策略;文献[3]提出在面向嵌入式开发的Qt教学中采用边讲边练的教学模式。西安交通大学的Qt教学强化实验教学,引入课程大作业以提升学生的实践能力,实行多元化考核,进一步保证教学效果。

1 开设Qt程序设计课程的意义

对非计算机专业的学生而言,在学习了C/C++语言基础之后,进一步学习一些Qt程序设计的知识,可以补充编程语言学习的短板,理解消息机制和事件处理的概念,并深刻体会面向对象编程方法的强大。

1.1 补足C/C++语言教学短板

人们将图形界面和图形图像两方面的编程技术统称图形化编程。在C#、VB.NET、Java等语言中,图形化编程都是重要组成部分,而C/C++语言标准中却不包含这部分内容,不能不说是一种遗憾。开展Qt编程教学恰好可补充这方面的不足。事实上,Qt最强大、最完善的模块就是图形化编程模块,使用Qt开发界面的重要软件包括KDE(Linux窗体系统)、Maya(三维动画)、WPS(办公套件)、Skype(即时通讯)等。

1.2 理解窗体编程重要概念

窗口系统及窗体应用软件的运行依赖于消息机制和事件处理,这个概念在基础C/C++教学中无法涉及。Qt系统有完善的事件处理机制,还有其专有的信号/槽通信机制,通过学习这些内容,可以很好地理解窗口系统的运行原理,进而理解消息循环在操作系统中的重要作用。

1.3 深刻体会面向对象方法的作用

图形界面编程是C++最成功的领域之一,而Qt的图形界面类库更是这方面的优秀代表。学习Qt的图形化编程,了解各种控件类的继承关系及其成员函数的实现和重载,可以让学生深刻理解封装、继承、多态等面向对象的概念,体会面向对象编程方法带来的巨大便利。

2 优化Qt程序设计课程教学方案

Qt课程讲授C++的高级编程技术,一般要求学生有一定的C++语言基础。如果学生有较好的C语言基础,那么可以在后续课程中先用少量课时讲解C++语言面向对象的概念,然后再讲授Qt编程的内容。将C++全部的基础知识和Qt编程技术放到一门课中讲授是难以完成的任务,原因是内容过多。西安交通大学的教学方案主要通过优化教学内容、加强实践训练、改善考核方法3个方面的改革提升学生开发软件的能力,具体内容见图1。

图1 Qt程序设计教学方案概要

2.1 制订合适的教学内容

Qt编程技术的内容十分广泛,难以在一门课程中全部讲授,因此可将Qt编程技术总体上划分为两部分:一部分是核心教学内容,包括图形界面编程、图形图像编程、样式表应用;另一部分是灵活设置内容,包括算法设计、数据库、网络、嵌入式等方面的编程内容。核心教学内容是基础,是必选的教学内容;而灵活设置内容则是选择性的模块,可根据面向对象的不同、专业需求的差异,选择适当的模块作为教学内容。

在核心教学内容中,建议把图形界面、图形图像编程作为最基础的内容。掌握了图形化编程的知识,就具备了开发窗体应用的基本能力,也为学习其他编程技术打下基础。另外,可以将界面描述式编程工具——Qt样式表放入核心内容。样式表是Qt的特色,它通过QSS脚本语言描述窗体组件的颜色、形状、行为模式等属性,极大地方便了界面的美化工作。QSS脚本实质上就是CSS脚本功能的子集,学习和使用都相当容易。

在灵活设置的教学内容中,建议选择具有广泛应用价值的算法设计模块。算法当中比较简单的查找、排序、递推等这类内容在学习基础语言的时候就讲解过,因此可以补充数据结构相关算法。从实用角度出发,对于这些非计算机专业的学生,没有必要深入讲解数据结构本身的实现方法,而应在介绍基本概念的基础上,讲解利用Qt的集合类解决问题的方法。Qt集合类与STL容器类很相似,包含向量、链表、栈、队列等结构,是有力的开发工具。

2.2 强化实验和工程训练

与纯理论课程不同,任何一门程序设计课程都需要足够的上机练习,Qt程序设计也不例外。为了达到更好的教学效果,可以将实践环节分成3个层次:基础实验、项目重建和修改、课程大作业。

基础实验是课程学习的基本内容,主要在课程本身的实验学时内完成。这些实验涉及信号/槽、窗体控件、对话框、窗体布局、事件系统、二维绘图等方面的编程。Qt拥有功能强大的集成开发工具Qt Creator,其可视化窗体构建能力不逊于微软的Visual Studio开发工具。虽然不少基础实验都可以在Qt Creator中以可视化操作的方式完成,但对于初学者,仍应坚持先学会用代码实现,再用Qt Creator工具实现,这样学生对程序的理解更彻底。

项目重建和修改是让学生首先参考教师的样例程序实现一个大致相同的项目,然后对其中的部分内容进行修改或扩充,实现一些新的功能。这类实验由每个学生独立完成,难度中等。实验采用课堂讲解、课后实现、实验课答疑的模式完成。通过这些实验,学生可以了解一个小型软件设计、编码、调试、完善的整个过程。

课程大作业是以综合训练为主的实践环节,一般3~4人一组,完成一个小型软件项目。和项目重建实验不同,大作业没有教师提供的软件原型。每个小组都要完成选题、方案设计、编码实现、测试和改善的开发流程。选题类型由教师制订,比如实验模拟类、小型游戏类、算法演示类等。大作业的具体内容由学生在上述几个选题类型中自行确定,一般在课程进展到一半时大作业题目就要确定。每个小组的人员及项目一旦确定并上报后,就不宜轻易改变。通过课程大作业的训练,可以在很大程度上提升学生的软件开发能力。

2.3 改进课程考核方法

程序设计课程的考核方式一般是平时成绩和期末考试的加权平均,其中期末考试一般都是上机考试。由于Qt程序设计课程教学环节的多样性,建议为该课程设置多元化的考核方式,采用平时表现、期中考试、大作业考核、期末考试的综合考核方式。

平时表现包括出勤率、随堂作业、基础实验和项目重建实验的考查,这些考查主要用于督促学生的日常学习。期中考试采用闭卷形式的上机考试,以若干微型编程题目为主,题目可以是前半学期实验和作业内容的改版。课程大作业以小组为单位完成,最后由组长通过PPT的形式向全体师生汇报。由学生网络评分和教师评分综合评出每个小组的得分,再由教师根据组员表现和每个组员背对背的贡献率自评得出每个学生的大作业分数。学生评分过程可借助网络系统快速完成。期末考试采用开卷形式的上机考试,题目为两道综合型的编程题,主要考查学生的综合编程能力。

总之,本课程的目标是使学生具备一定的图形化编程以及算法设计的能力,所有考核环节都应体现这一目标。

3 Qt程序设计课程的教学效果

在西安交大新一轮培养方案修订过程中,机械学院部分专业要求修改可视化程序设计课程的教学内容。该课程原来是以VC++的MFC图形化编程为主要教学内容。随着微软公司的技术重心转向.NET,C#、VB.NET成为微软公司主推的编程语言,MFC类库的更新十分缓慢,且基于MFC的编程技术含有大量C语言的编程模式(比如宏定义等),编程难度较高。由于以上原因,非常有必要对该课程进行大刀阔斧的改革。经过认真调研,开课单位决定将Qt编程技术作为该课程的教学内容。经过3年实践,取得了较好的教学效果,改革所带来的教学质量提升总体上可归纳为以下3点。

1)提高学生编写程序的效率。

与MFC不同,Qt是纯粹的面向对象开发框架,学习和使用更加容易。例如编写一个简单的赛车游戏,涉及图形、位图、文字、算法以及事件方面的编程,一般情况下学生用MFC实现该游戏的时间接近两个小时,而使用Qt实现只需要不到一小时。

2)加强学生软件模块化设计及算法设计能力。

从软件的框架结构上看,Qt程序比MFC程序更清晰易懂,且Qt的信号/槽通信机制也较为简单易用。从学生上机实验的结果看,利用Qt编程,学生更容易写出模块结构合理、算法清晰的程序,编写程序时产生的错误也更少。

3)培养学生对于Qt编程技术的兴趣。

以前学习MFC编程时,很多学生对复杂难懂的MFC程序框架深感畏惧,而学习Qt编程的学生多数认为Qt程序并不是很难理解。同时,配合QSS脚本可以很容易作出类似360安全卫士、腾讯电脑管家那样漂亮的图形界面,感觉挺有成就感。

本课程的配套教材《Qt图形界面编程入门》由清华大学出版社出版之后,也得到了一些兄弟院校的关注,被选作对方院校相关课程的教材。

4 结语

对于非计算机专业而言,很多学生希望能够编写小型的窗口界面程序解决学习工作中的一些问题,但如果仅仅学习了C/C++语言,这种愿望难以实现。根据实践经验,在非计算机专业开设Qt程序设计课程作为C/C++的后续课程,能够较快提升学生的编程能力,满足学生开发图形化程序的愿望。在教学实践中,以实验为基础、以项目为导向,实行多元化考核,可以取得良好的效果。

猜你喜欢
编程技术程序设计编程
医学专业“Python程序设计”课程教学改革总结与思考
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
基于Visual Studio Code的C语言程序设计实践教学探索
纺织机上诞生的编程
从细节入手,谈PLC程序设计技巧
浅析PLC编程技术在电工电子实验中的应用
基于计算机软件工程的数据库编程技术
高职高专院校C语言程序设计教学改革探索