高永丽
(楚雄师范学院信息科学与技术学院,云南 楚雄 675000)
面向对象技术 (OOT)是一种软件开发和程序设计技术,是建立在“对象”概念基础上的方法学。面向对象技术的运用使程序更安全、可靠、易重用、易维护。在硬件、数据库、人工智能技术、分布式计算、网络、操作系统等应用中都显示出其良好的优越性。因而,该项技术成为当今主流的计算机编程技术。面向对象程序设计课程自然成为高校计算机专业的一门重要的基础课,在整个专业的知识体系中占有非常重要的地位。
由于面向对象的设计思想是在原来结构化程序设计方法基础上的一个发展和质的飞跃,因此内容繁多,兼具抽象性和复杂性。面向对象程序设计课程也成为目前公认的比较难学的课程。而且学习材料 (教材)往往面面俱到,知识点广,如果不考虑整个学习的主线结构 (包括实验)和方法,对每一章节都通学一遍,势必变成“拉完”式学习,不能真正意义上掌握好这门编程技术及应用。
笔者长期从事C++语言、JAVA语言、VB语言等“面向对象程序设计”类课程的教学,总结教学上存在的一些主要问题,归纳面向对象程序设计课程的学习策略如下:
程序代码设计最基本的结构无外乎就是顺序结构、选择结构、循环结构。“输入输出语句”、“赋值语句”、“条件语句”、“循环语句”这些老一代程序员耳熟能详的东西,依然是面向对象编程最基础的编程因子,即使是发展到了如今的面向对象技术,动辄把“面向过程”视作淘汰的东西,也显然是错误的。这就有如建房子,不论多宏大的工程,还是少不了“砌砖”这个基本功。掌握好这些基本的语句语法,依然是学好程序设计的基础。为了提高学习兴趣,可辅予可视化设计。
大家都知道操作系统是硬件之上的第一层软件系统,无疑我们编写的程序都将依托于某个操作系统来运行。作为编程者,就应该对操作系统有一个更专业的理解。以目前两大主流操作系统(Windows和Linux)之一的Windows为例,学习者应该了解Windows操作系统的基本内核是怎么组成和运行的;了解硬件驱动的机制、注册表的作用和原理;各种DLL程序的作用;Windows的消息机制;最重要的是了解Windows给外部提供的编程接口,即常说的Windows API,了解API函数组成,记住一些常用的API函数。Windows的编程模式是事件驱动的,这使得它与用户之间的交互更友好,而这种Windows特有的“消息”激励机制正是学习者在学习面向对象编程前应该先行理解的。这是我们深入掌握面向对象编程的保障。
很多学习者往往在学习了一个知识点以后就会被要求进行实践性编程。通常的情况是老师给个任务,要求学生设计完成其功能。学生恰恰就是在这里出现卡壳。认为困难度较大。其实对初学者而言,要求其去写程序不如叫他先多读懂一些经典的程序段。以一个VC++程序为例:
这是一个用CRect类定位鼠标的例子,虽然短短一段程序,却包含面向对象中一些基本的概念,包括对象引用作为参数、指针调用、方法调用等。大量的读代码,学习者会渐渐熟悉一些基本技术应用方法,理解一些课堂上或教材上晦涩难懂的概念。编程就像写文章,每个概念都有前因后果,试想一下,当你毫不费力地读懂大段的原代码,离你自己动手编程还会远吗?
数据是所有计算机系统要处理的对象。数据库是计算机应用系统中的一种专门管理数据资源的系统。数据库系统不从具体的应用程序出发,而是立足于数据本身的管理,它将所有数据保存在数据库中,进行科学的组织,并借助于数据库管理系统,以它为中介,与各种应用程序或应用系统接口相接合使之能方便地使用数据库中的数据。所以对于编程来说,数据库语言就是基础,无论你用JAVA、C++还是C#,程序最终要操作的都是数据库中的数据,要操作这些数据就得懂点基本的sql语言。会设计基本的数据库表。记住,任何时候都不要把所学的知识孤立起来,在计算机学科的广阔领域里,知识都是融会贯通相辅相成的。
基于课程体系的面向对象程序设计,其实践教学内容仅仅是针对教学环节进行设定,不同教师不同教材的实验内容和重点大相径庭,但大多数都未能很好地使用其中主流的图形化的面向对象的操作界面平台、达不到一定规模的综合性实验,所以不能很好地体现面向对象程序设计的架构层次。因此,对于学习者,要想全面而实质性了解面向对象编程,还须上升到工程的角度来完成一个简单的系统设计,这应该是掌握面向对象技术的宏观有效方法。
以设计一个“学生管理系统”为例,问题看似简单,但学习者不仅要运用面向对象的方法分析抽象出包括“学生类”在内的各种类体,分析它们之间复杂的继承、派生、多态性,还要通过系统的需求分析把它们架构在不同的层次上,配以设计恰当的数据库系统,才能完成学生管理的基本功能。真正体验到程序员要面临的问题和面向对象技术的优点。
学生对程序设计成就感的期望值很高,但对学习将遇到的困难心理准备不足,容易产生畏难与逃避情绪,不利于知识和技术的掌握。由于面向对象技术是一门新兴的技术,所以目前大多数高校在教学体系中,仍然将“面向过程”程序设计 (如C语言)作为学生接触程序设计的起点和基础,这样,学生往往有了先入为主的“面向过程”概念,接下来才接触面向对象程序设计,虽然能比较轻松地掌握一些面向对象的基本概念以及简单的程序编写方法,但在开发实际系统时,却容易受过程化语言的影响,往往还是从非面向对象的角度去分析、设计并实现系统。人为地增加了从过程化程序设计到面向对象程序设计思想的转化成本,这也是导致面向对象技术学习质量不高的原因之一。针对基于面向对象技术的程序设计类课程知识面广、语法复杂、面向对象思想难以形成和应用等问题,总结学生学习的一些对策和方法,以期提升学习者的学习效果,构建更为完善的学习质量保障机制。
[1]谭浩强.C++程序设计 [M].北京:清华大学出版社,2004.
[2]侯俊杰.深入浅出MFC[M].武汉:华中科技大学出版社,2000.
[3]颜志军.Visual C++数据库开发:典型模块与实例精讲 [M].北京:电子工业出版社,2007.