Python语言面向对象的教学研究
刘云霞

复制成功

导出题录

参考文献( GB/T 7714-2015 ) 复制

刘云霞,. Python语言面向对象的教学研究[J]. 国际科技论坛,202310. DOI:10.12721/ccn.2023.157281.
摘要: 面向对象是Python语言程序设计课程中的教学难点。在分析教学现状后,本文从多个方面进行教学探讨,主要包括:完善网络教学资源,注重课前预习和课后复习;注意Python和其他语言的差别,挖掘教学难点的本质;精选案例,层层铺垫,循序渐进;注重程序调试,认真观察和分析数据变化。通过这些改进措施打造积极的教学生态,营造良好的学习氛围,提升教学效果的同时也培养学生严谨治学的工匠精神。
关键词: Python语言程序设计;面向对象;类和实例;程序调试
DOI:10.12721/ccn.2023.157281
基金资助:

1 引言

Python设计于1990年代初,是支持面向对象的解释型高级程序设计语言,支持动态数据类型,语法简洁清晰,具有丰富的标准库和扩展库。由于易读易维护且功能强大,Python语言在大数据、数据分析和人工智能等领域得到广泛使用,成为最热门的语言之一,近年来作为专业课广泛开设于各大高校。

面向对象是一种软件开发方法,从现实问题中提取出客观存在的事物,将同类事物设计为类,并根据类创建出实例用以描述这些具体事物,类和实例构成面向对象软件系统的基础单位。面向对象强调的是以对象为核心,更符合人类认知物理世界的思维方式和解决问题的逻辑[1]。基于面向对象的软件系统具有易维护、易扩展、可重用性强的优点。

 基于学生岗位能力培养的需要,本学院计算机专业的学生在第一学期学习Python基础知识,在第二学期进行面向对象和运维相关模块的学习,前者主要包括面向对象的基本概念、类和实例、面向对象的三个原则(封装、继承和多态)等。通过该部分的学习,学生掌握面向对象的理念,能正确使用面向对象的思想设计和完成软件项目。

2 Python语言面向对象的教学现状

Python基础编程的学习以面向过程为主,面向过程是以函数为单位来实现代码,每个函数实现一个独立的功能[2]。面向过程和面向对象都是编写程序的思维方式,前者注重按流程完成任务,核心在于函数的设计;后者注重任务中对象之间的关系,核心在于对数据和函数的封装。小规模问题可以使用面向过程,按照步骤实现任务;复杂问题可以使用两者相结合,宏观上使用面向对象把握,微观处理上仍然是面向过程。

学生在学习面向对象时往往面临多方面的困难。前期Python基础内容不够熟练,编程速度提不上去,小bug不断,严重打击了学习的兴趣和积极性。虽然在第一学期的教学中已经强调“Python中一切皆对象”并不断地传递类和实例的概念,但是学生的抽象思维能力普遍较弱,难以接受面向对象的思维模式。面向对象涉及到的概念和语法点较多,授课时容易形成单一的讲授模式,课堂灌输为主,学生往往难以理解这些抽象概念,对于类的设计和编码更是经常无从下手。部分学生虽然能从现实问题中提取和设计类,但是难以捋顺类和类之间、类和实例之间、实例和实例之间的关系,将设计转换为代码的时候面临各类关系整理和语法的双重困难,思路不清晰、代码混乱,难以完成项目任务。

3 Python语言面向对象教学改革

如何提高学生的学习兴趣和自主学习积极性是本门课程亟待解决的难题。基于多年的教学经验以及对Python面向对象的理解,本文从如下几个方面进行教学研究,打造积极的教学生态,营造良好的学习氛围,在提升教学效果的同时激发学生的学习兴趣,培养学生严谨治学的工匠精神和爱国主义情怀。

1)完善网络教学资源,注重课前预习和课后复习

课前预习,意味着学生在上课之前先独立地学习新知识,独立阅读、独立思考。好的预习,意味着学生对于新知识有了初期的理解,能减少听课的困难,把精力集中到疑难点上,极大地提高了学习效率。为帮助学生更好的进行预习,本课程建设了充分的教学资源。除了自编教材之外,职教云平台的在线课程上提供完整的教学视频,包括新知识导引和课堂授课,并给出预习小测,帮学生检查预习效果。课后,针对课堂的疑问,可以再次翻看课堂教学视频,也可以通过职教云、QQ和微信等多种形式和教师以及其他同学进行探讨,在线作业和项目大作业也要求学生消化吸收课堂内容,做到“温故而知新”。

2)注意Python和其他语言的差别,挖掘教学难点的本质

部分同学在入学时已经接触过其他语言,如C++或Java,也都支持面向对象。但是每个语言对于面向对象的设计和实现都有各自的特点,彼此间的差异也很大。学习时学生容易产生一些概念上的混淆,这些核心的概念要特别进行区分。

大多语言中将class称为类,根据class创建出来的数据称之为对象。而Python中一切皆对象(object),class本身也是以对象的形式存储的。这很容易引起混乱。为作区分,根据class创建出来的数据,我们称之为实例(instance)。类和实例在Python中均以对象的形式存储。Python中的类和实例在创建之后还可以新增类属性和实例属性。这是其他语言没有的功能。

Python语言支持私有(private),但是它并没有真正的私有化支持,下划线得到的是伪私有。为了保证不能在类体之外访问私有变量,Python会在类的内部自动地把__spam私有变量的名字替换成为_classname__spam。用户在外部访问__spam的时候就会提示找不到相应的变量。例如,类A有个私有变量__s,那么__s在内部会被替换成_A__s。实际上,python中的私有变量和私有方法仍然是可以通过类名或实例._类名__成员名进行访问的。

Python语言支持多重继承,即允许子类同时继承自多个父类。定义类时,Python会为之创建一个MRO列表,用来管理类的继承顺序,Python通过这个列表从左到右查找继承的信息。使用类名.__mro__或者类名.mro()都可以获得该信息。多态分为静态模式和动态模式。静态多态指的是方法同名但是参数列表不同,也叫作重载(overload)。动态多态,指的是继承关系中的同名方法,也叫作方法重写(overwrite)。和其他语言不一样,Python语言只支持后者。动态多态中处理方法的解析时要注重MRO列表的分析,该机制用来保证多类继承的时候各父类被逐一调用并只被调用一次。因此MRO机制是理解多重继承和多态的核心,应该作为教学的一个重点进行讲解。

截图1741331659.png

截图1741331673.png

上述代码中,可以通过打印语句观察类A、B和C的mro链的情况。可以看到具体的

截图1741331689.png

3) 精选案例,层层铺垫,循序渐进

案例的挑选要能够涵盖面向对象的重要知识点,同时也贴合实际,能引起学生的兴趣[3]。 面向对象的授课教学中采用了模拟机房设备管理的项目。具体来说,学校现有多个机房,各机房的csv配置文件均在rooms_files目录下,以机房编号命名。机房可以电脑控制管理的包括所有电子门(带密码)和电脑,学生也可以新增其他设备,均有是否可运行和是否在运行的两个状态参数。设备若有故障,则可运行状态为否。所有设备都支持开启和关闭。电脑支持重启。门支持重设密码。

下图是机房初始状态。各行包括设备类型、设备编号、是否可用、当前是否运行中,如果是门,后面还有六位数字密码。

截图1741331698.png

下图是经过一系列操作之后机房的新状态。

截图1741331711.png

该项目能够完整地覆盖面向对象的各个特征(封装、继承和多态)。由于教学是在学院机房中展开,学生面对着自己所处的机房,能够有直观真切的感受。项目的教学采用循序渐进的方式,从简单到复杂,层层递进,在难度递增的同时将知识点细化并扩大知识面[4]。遵循认知规律,采用引导式教学并以小组模式开展实验。学生小组探讨项目中存在的事物,提取它们的共性,并使用UML的类图进行类的设计。UML是一种基于面向对象的可视化建模语言,是面向对象程序设计思想的有力表达和转化为实践的重要工作[5],本课程上使用类图进行类的设计即可,目的在于非常直观地展示类的设计。分组整理出设计报告后,学生即可逐层进行代码的编写和调试。

 除了初始设计中的电脑和门可以远程管理,学生还将分组探讨项目中还可以引入实验机房中的其他哪些设备,并分析这些设备的特性和功能,进行相应的类的设计和编写应用,从而实现项目拓展。

4) 注重程序调试,认真观察和分析数据变化

调试是编程的灵魂。调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。除了排错纠错,调试也可以帮我们观察程序运行过程中类和实例的创建、变化和消失。以下是课堂使用的圆类程序的一个调试截图。

Pycharm软件相对于Python IDLE,调试环境更加友好。因此,面向对象教学采用的Pycharm软件。Pycharm开发环境中可以方便地设置和取消断点。在程序调试的过程中可以跟踪数据的变化,也可以在观察窗口中输入表达式,查看计算结果。

下图是circle程序的调试截图。可以观察到当前Circle类的状态以及Circle实例c1的情况。Circle类的类变量cirCount的取值是1,而其实例c1的circleCount共享的是该类变量,因此值也是1。清晰直观的数据可以帮助学生更好地理解面向对象。

截图1741331726.png

4结语

面向对象是Python语言程序设计课程中的教学难点。本文从多个角度进行教学探讨,将这些改进措施应用到实际教学中,激发学生的学习积极性,提高学生的学习成效,同时也培养学生端正的学习态度和积极探索的思维方式。

参考文献:

[1] 陈泫文. 基于面向对象思想的软件系统分析与设计[J]. 计算机科学与技术. 2020.12,38(6):24-28.

[2] 尹鸿峰. 面向对象程序设计(C++)教学方法探讨—类的概念及应用的引入.计算机教育, 2017(5):82-84.

[3] 薛先贵. 基于Python语言的信息专业教学探讨[J].福建电脑,2019.4,35(4):134-135.

[4]朱立平,林志英. 从面向过程到面向对象思维方式的教学引导[J].计算机教育.2014(3): 59-63.

[5] 熊风光,张元,况立群. 面向对象程序设计课程教学改革[J]. 计算机教育. 2021(9):86-90.

作者简介: 刘云霞(1979- ),女,副教授,博士,主要研究方向为计算机软件与应用、网络控制系统、开源技术。