杨元维 谭美淋 刘少华
(1.长江大学地球科学学院,湖北 武汉 430100;2.内蒙古自治区测绘地理信息中心,内蒙古 呼和浩特 010050)
组件式GIS应用软件开发是一门本科专业地理信息科学(Geography Information Science,GIS)第六学期开设的必修课。在制定该课程教学大纲时,充分顾及专业特色、技术发展趋势,运用理论与实践并重培养模式,要求学生熟练掌握某一GIS开发组件库,对培养和锻炼学生桌面端GIS开发实践能力具有重要的价值与意义[1,2],同时也奠定掌握全栈开发的基础。
本课程的先修课程包括C程序设计、数据结构、C#程序设计、数据库原理与方法和地理信息系统原理等一系列计算机与GIS相关课程[3-6]。本课程设置48个总学时,结合课程特点突出实践教学的重要地位[7],将该课程的理论与实践教学占比调整为2:1,其中理论32学时与实践16学时。本课程选用李崇贵等所著的《ArcGIS Engine组件式开发及应用(第二版)》作为教材[8],ArcGIS Engine基于微软COM技术构建成21个GIS开发组件库,在.NET开发环境下,这些组件库被组织到不同的命名空间中。
(1)GIS组件库庞大,组织结构复杂
本课程中所涉及的GIS组件库庞大,不同的组件库功能各异,且组织结构复杂,学习与熟悉这些组件库比较困难[9]。如何使学生掌握这些组件库及之间的关联关系,并且能运用常见的组件完成GIS二次开发工作,是一个亟待解决的问题。
(2)面向对象基础薄弱,知识点层次性难以建立
由于授课对象是GIS专业学生,并未类似于计算机科学与技术专业的学生那样接受完整的面向对象程序设计课程,仅在C#程序设计课程中包含基本的面向对象知识点的引入与介绍[10,11]。因此,在本课程教学中,以面型对象思想构建的COM组件库,在调用库中的类、接口等时,需要较强面向对象基础支撑。此外,组件库存在大量的类与类之间的多层级继承关系,如形状(Geometry)父类,该类派生出多个子类如曲线(Curve)、矩形(Rectangle)、点(Point)、多点(MultiPoint)等。然后曲线(Curve)父类可以分为线段(Segment)与路径(Path)、多义线(PolyCurve)等子类。如何使学生有效掌握各组件类之间的层级性,是另一个亟待解决的问题。
(3)考核方式较为单一,无法有效促进学生掌握知识点
以往本课程采取开卷考试的形式考核学生对知识点的掌握情况,该形式考察存在着整体区分性差、考察力度不够的问题,且学生无法重视与掌握课程大纲中的知识点。如何改进考核方式,促进学生对本课程知识点的深刻理解与运用,是一个值得研究和讨论的问题。
在教学中需要梳理每个章节每个知识点的主线,厘清每章的教学任务与重点内容,重新梳理本课程教学安排,使教学内容完全达到教学所要求的各项目标任务,如表1所示。
表1 本课程教学内容设计
可以看出,本课程的教学内容完全覆盖组件式GIS二次开发的所有知识点,学时安排方面重点突出,对于重点知识点的阐述有重要篇幅,并安排对应的上机实训,通过上机作业检测学生掌握的情况。根据理论教学与实践教学结合完成教学目标。
针对组件库之间关系复杂的问题,重新编绘了21个组件库之间的对象模型图(Object Model Diagram,OMD),如图1所示。
图1 组件库之间的关系图
面向对象思想是贯穿计算机程序设计的一种重要思想。面向对象程序设计具有封装、继承、多态三大特征[6]。面向对象作为组件式GIS应用开发课程的重点基础内容,需要在授课时,重拾这部分知识点,类、抽象类、字段、属性、方法、静态成员、构造函数、方法重载、方法覆盖、接口、事件与委托等基础内容。因此在讲授该部分内容时,就需要将此部分内容进行强化。引入面向对象的思想至组件类知识点的讲解中,以Geometry类为例,首先构建该类的所有子类信息,如图2所示。
图2 形状相关对象结构图
通过图2可以看出,Line类、CircularArc类、EllipticArc类、BezierCurve类均继承于Segments类(图中的有向箭头表示子类指向父类),Rings类至Geometry类存在着5层继承关系。如表2所示为图2中涉及的类的定义。通过这样的结构图与表可以使学生更好地掌握组件类之间的层级关系。
表2 Geometry类及相关对象定义
对以往本课程成绩为平时成绩(20%)与开卷考试成绩(80%)相加进行改进,提高平时成绩的占比,采取平时成绩(50%)与考试成绩(50%)的课程考核方法,具体措施如下:
(1)让学生主动参与到教学过程中,充分利用现代教学手段和工具,借助雨课堂的辅助教学功能,每章设计若干难易适中的习题进行在线练习,及时了解学生对相关知识点的掌握情况,从而对教学过程和方法调整;
(2)设计两次课堂测验,阶段性了解学生学习效果,评定相应成绩,设置课堂测试2次,每次占总成绩10%;
(3)重点培养学生上机实践编程能力,每次上机编写若干编程题,提升学生对理论知识的运用能力,设置上机考试2次,每次占总成绩10%;
(4)降低期末考试占总成绩的比例,加大平时成绩占总成绩的比例。
针对组件式GIS应用软件开发课程教学中存在组件库庞大、组织结构复杂、学生面向对象基础薄弱、知识点层级性难以建立和考核方式单一等问题,构建GIS组件库知识点结构关联关系,并采用面向对象的思想,对组件类知识点进行梳理,重新组织教学思路与结构,重构组件类知识点之间的层级关系。对考核方式进行改革,加大平时成绩及上机占比,取得良好的教学效果。