面向对象程序设计(C++)教学方法探讨

2017-05-31 09:21尹鸿峰
计算机教育 2017年5期
关键词:面向对象

尹鸿峰

摘 要:面向对象程序设计是计算机专业的一门重要专业基础课程,让学生正确理解类的概念是掌握面向对象程序设计方法的关键一步。文章提出通过使用结构体和类两种方式实现相同功能,让学生通过对照理解类的使用方法及其与结构体的区别,从中体会面向对象与面向过程两种编程方式的差异,从而引申出类的访问控制方式等方面内容。

关键词:面向对象;类;结构体;面向过程

文章编号:1672-5913(2017)05-0082-03

中图分类号:G642

0 引 言

面向对象程序设计(C++)是计算机专业的一门重要专业基础课程,很多院校一般将其安排在C语言程序设计课程之后,并作为C/C++程序高级开发及Java语言程序设计的先修课程进行设置,因此该课程在程序设计课程中起着承上启下的作用,其重要地位不言而喻,但是在教学过程中,由于学生在先期的C语言程序设计课程中已经基本确立了面向过程的程序设计思想,面对新的程序设计思想,很多学生难以适应新的编程方式,尤其是在入门过程中对类的概念及应用的理解。

1 面向对象与面向过程的区别

面向过程是以函数为单位实现的[1],每个函数代表一个独立的动作,完成一个独立的功能,而完成动作的实体都是被动地在函数间传递,实体和动作之间没有紧密联系,实体只是像提线木偶一样被动地接受加工,目标的实现完全由动作的代表——若干个函数贯穿完成;而面向对象是以实体,即对象为单位实现的[1],每个动作完全由明确的实体执行,实体贯穿于程序的整个执行过程,目标的实现则是由多个实体相互协作完成,因此面向对象这种设计方式更加符合人们的思维方式。

2 类的引入

在课堂讲授过程中,如果直接引入类的概念及应用方法,难免会导致部分学生在理解上与面向过程产生混淆,从而出现概念上的偏差,影响对后面内容的进一步学习,因此在引入类的概念时,可以结合面向过程程序设计方法中学生熟识的内容进行讲解。

C语言程序设计是C++语言的先期课程,在学习课程时,学生已经对结构体的使用有了一定了解,而结构体与类之间的区别仅体现在访问控制方式及行为,即成员函数的引入方面。因此,引入类的概念就可以借助于结构体来实现,这样可以让学生通过对日常生活中的一些普通事件进行编程处理,来观察两者之间的区别,如待处理的学生信息包括姓名、年龄和成绩(包括数学、语文和英语3门课程)3种,要求对每位学生的总成绩和平均成绩进行计算统计,试通过使用结构体和类两种方式对学生进行成绩分析,并观察两者之间的区别。

1)使用结构体方式。

(1)声明结构体类型。

struct stud {char name[10]; int age; float score[3];};

(2)定义计算函数,以计算每位学生的总成绩和平均成绩并输出。

void CalSum_Avg( struct Stud *s){ …… //中间过程略 }

(3)在主函数中定义学生结构体数组并赋值。

struct stud s[N];

……//赋值过程略

(4)对每位学生分别进行函数调用计算结果。

for( int i=0; i

CalSum_Avg( &s[i] );

2)使用类方式。

(1)声明学生类。

class stud {

protected:

char name[10];

int age;

float score[3];

public:

void InitStud();//为成员赋值

void CalSum(); //计算自己的总成绩

void CalAvg(); //计算自己的平均成绩

};

……//成员函数实现部分略

(2)在主函数中定义学生对象数组并赋值。

stud s[N];

for( int i=0; i

s[i]. InitStud ();

(3)让每位学生分别调用相应成员函数计算结果。

for( int i=0; i

s[i].CalSum();

s[i].CalAvg();

教师可让学生观察上述两种程序设计方法在思路上的区别,体会面向过程与面向对象两种程序设计思想的不同之处,并讨论这两种设计思想中哪种方法更接近人们的行为方式,理解类的定义及使用方法,解释类的访问控制方式;此外,还可以融入以下示例作为过渡。

3 用结构体实现类的概念的過渡

在C++编译器中,使用结构体代替类,以实现上述类的功能,让学生在应用中体会从结构体向类的过渡过程。

(1)依照类的定义格式,使用结构体方式定义上述学生类。

struct stud {

char name[10];

int age;

float score[3];

void InitStud(){ …… }//为成员赋值

void CalSum(){…… } //计算自己的总成绩

void CalAvg(){…… } //计算自己的平均成绩

};

(2)在主函数中定义学生结构体数组并赋值。

struct stud s[N];

for( int i=0; i

s[i]. InitStud ();

(3)让每位学生分别调用相应成员函数计算结果。

for( int i=0; i

s[i].CalSum();

s[i].CalAvg();

}

教师可让学生观察这种实现方法并对比以上3种实现方式的区别,分析哪些行为应该是公开展现的,哪些是应该隐藏的,由此确定哪些属性或行为应该公开,哪些是不能公开的,从而进一步解释为什么需要设置数据访问控制方式;并理解私有、保护与公有的区别,阐述类的封装与隐藏的意义所在,同时分析并介绍类与结构体在使用上的区别。

4 概念的强化

经过上述讲解,学生对类的使用及类与结构体在应用中的区别有了一定了解,初步确立了面向对象的编程思想。为了进一步巩固学习效果,需要在此基础上对上述内容进行强化练习,如可以布置下一个任务,要求学生尝试在学生类中增加实现以下相关内容。

(1)增加分数统计功能,要求对每位学生的最高成绩及最低成绩进行统计。

(2)增加对数据成员进行修改赋值的成员函数。

(3)尝试对学生的年龄进行比较,找出年龄最大的学生,体会保护或私有成员的使用方法,掌握如何对保护或私有成员进行读、写等基本操作。

5 结 语

类的概念是面向对象程序设计方法中最基础也是最重要的概念,关系着学生能否进一步理解和运用面向对象程序设计课程的后续内容,因此,讲好类的入门这一节课对于学生能否顺利掌握C++编程语言是相当重要的。我们对面向对象程序设计教学过程中类的概念及应用的引入、比较和强化进行了一定的探索,并在实践教学过程中取得了比较满意的效果,加深了学生对类的理解,为学生学习后续课程知识奠定了良好的基础。

参考文献:

[1] 谭浩强. C++程序设计[M]. 2版. 北京: 清华大学出版社, 2011: 223.

(编辑:宋文婷)

猜你喜欢
面向对象
面向对象数据库教学方法的探讨
基于案例的面向对象程序实践教学模式探索
面向对象的计算机导论课程教学
基于Web的科研项目管理系统的设计与实现
应力波反射法测锚索长度的数据处理软件设计与实现
关于计算机语言面向对象开发的发展研究
面向对象技术中数据访问方法研究
IEC61850在电能量管理系统通信中的应用
基于遥感技术的植被信息提取方法研究
高职计算机专业的一次信息化教学单元设计