C 面向对象程序设计课程教学大纲

2024-05-29

C 面向对象程序设计课程教学大纲(通用11篇)

C 面向对象程序设计课程教学大纲 篇1

《C++面向对象程序设计》课程教学大纲

C++ Object Oriented Programming

课程代码:

课程性质:专业基础理论课/必修

适用专业:信息计算、信息安全、统计

开课学期:

2、3 总学时数:10

4总学分数:6.5

编写年月:2000年3月

修订年月:2007年7月 执

笔:刘伟、高学军

一、课程的性质和目的

《面向对象程序设计》是信息与计算科学专业本科生的一门必修课程。面向对象软件开发方法是吸收了软件工程领域有益的概念和有效的方法而发展起来的一种软件开发方法。它集抽象性、封装性、继承性和多态性于一体,可以帮助人们开发出模块化的程序数据抽象程度高的,体现信息隐蔽、可复用、易修改、易扩充等特性。本课程主要介绍面向对象程序设计的方法和C++语言的基本概念。以C++语言中的面向对象机制为主。学习者在学习过程中可以通过大量的程序实例和相关练习,逐步掌握C++的面向过程和面向对象的功能,从而掌握面向对象程序设计的基本知识和基本技能。

二、课程教学内容及学时分配

第一章 面向对象的程序设计方法和C++简介(6学时)

了解面向对象程序设计的基本思想及基本概念;了解面向对象语言的分类和C++中支持面向对象的特点;了解面向对象的软件开发环境;了解Visual C++开发工作台的主要功能。

主要内容:面向对象程序设计的基本思想及基本概念:对程序的的质量要求;程序的模块化和结构化;为什么要面向对象:从面向过程到面向对象C++语言发展的历史:面向对象语言分类;C++中支持面向对象的特点面向对象的软件开发环境与Visual C++。

第二章 程序设计基础(8学时)

通过实例掌握C++程序的程序结构和执行机制;掌握简单的终端输入输出方法;掌握:C++的数据类型、常量和变量的概念;掌握数组类型及数组类型与指针类型的 1 关系;掌握用typedef自定义类型的方法;了解表达式的构成、求值顺序和表达式中的类型转换;掌握常用运算符的使用;了解程序设计风格并在试验中运用。

主要内容:C++的程序结构;C++的数据类型:基本数据类型、复合数据类型和引申数据类型;常量和变量;表达式与操作符;程序设计风格。

第三章 语句与程序流程(1

2掌握程序执行的流程;掌握C++语句结构,包括复合语句、分支语句、迭代语句和转移语句;了解各种迭代语句之间的关系和相互转换的方法;了解转移语句对程序结构的影响。

主要内容:模块化程序设计介绍;函数的一般形式;函数的参数;函数的返回值;递归函数;内联函数;函数和变量作用域;函数重载;函数指针;函数原型与强类型检查。

第四章 类与对象(10学时)

掌握类定义的方法和存取级别;了解结构的概念和结构作为类的定义的方法;了解联合与位域的概念和联合作为类的定义的方法;掌握类的成员变量和成员函数的定义和使用,以及对象的定义;了解友元函数和友元类;掌握构造函数和析构函数;掌握静态类成员变量和成员函数的定义和使用方法;掌握内联函数的定义和使用方法;了解嵌套类与局部类的定义;掌握在函数中对象传递的机制。

主要内容:复合数据类型;类的定义、类的成员变量和成员函数,存取级别,作用域分辨符;对象和类的关系;类的构造函数和析构函数;构造函数的定义;析构函数;类/对象数组;静态类成员:静态成员变量;静态成员函数;内联函数;友元类;this指针;嵌套类与局部类;在函数中对象传递的机制。第五章 数组、指针和引用(10学时)

掌握对象数组及创建初始化和未初始化的数组的方法;掌握指针的概念,包括指针变量、指针表达式、指针数组;掌握指向对象的指针;了解指向函数的指针;掌握引用的概念,包括引用参数、向对象传递引用、返回引用等;了解有关C++的动态存储分配的机制;掌握利用new和delete进行动态空间的申请和释放。

主要内容:对象数组的初始化;数组与指针;数组赋值;对象数组指针的定义、初始化;指针运算;指针数组;指向对象的指针;字符串指针引用;向对象传递引用;返回引用;引用与指针的关系;引用的常用方法;C++的动态存储分配:动态空间的申请与释放。

第六章 继承性与派生类(8学时)

了解类层次的概念及如何将概念和实现转变为类的层次的方法;掌握单继承的 2 定义格式、成员存取控制和向基类构造函数传递参数的方法;了解多继承的定义方式、虚基类和二义性问题。

主要内容:类的层次概念;成员的继承;将概念和实现转变为类的层次;单继承;成员存取控制;受保护基类的继承;向基类构造函数传递参数;多继承;虚基类;二义性问题;多继承的应用。

第七章 多态性和虚函数(8

掌握函数重载的概念;掌握运算符重载的概念;掌握使用friend重载运算符的方法;定义重载某些特殊的运算符的方法;掌握虚函数和纯虚函数的概念;了解抽象类的概念;了解早期和后期联编的概念;

主要内容:函数重载与二义性;重载构造函数;求重载函数的地址;运算符重载;引用在运算符重载中的应用;运算符重载的限制;使用friend重载运算符;虚函数

第八章 C++的I/O系统(8

了解C++的流;掌握格式化I/O的定义格式和定义方法;了解一般I/O流和文件流的关系;了解文件与文件流的关系;了解文件系统的概念;掌握文件类的定义和相关操作的定义、使用方法;掌握利用常用函数进行文件的打开、关闭、读写、定位等操作。

主要内容:流的定义;C++的预定义流;格式化的I/O;创建自己的提取符;创建无参数的操纵符;创建带参数的操纵符;文件与文件流;文件打开和关闭、文件的定位与随机存取、文件的读写。

第九章 面向对象的程序设计环境(6应用程序框架及交互界面的开发。

主要内容:面向对象的软件开发环境;Visual C++开发工作台简述;MFC的结构层次;MFC分层概述

应用程序框架及交互界面的开发;控制类及其编程实现;实现菜单和对话框控制;文档和视;单文档界面;多文档界面。

第十章 用面向对象方法设计应用程序(4学时)

掌握根据给定应用系统的设计要求用面向对象的方法设计实现应用系统;掌握利用Visual C++的界面生成器生成应用程序界面;掌握利用消息机制实现对象之间的交互。

主要内容:综合利用前面所学的内容设计两个具体的应用程序。

了解Visual C++的消息机制;了解Visual C++的基本类库MFC;掌握Visual C++ 3

学时分配:第二学期:72学时,理论课56学时,实验课16学时;

第三学期:32学时,理论课24学时,实验课8学时。

三、课程教学的基本要求

1.了解面向对象的基本概念和使用面向对象技术进行程序设计的基本思想; 2.能比较熟练地用C++语言进行一般面向对象的程序设计; 3.初步掌握面向对象编程环境Visual C++的使用。

该课程实践性较强,需要学员多作练习;主持教师需要有比较熟练的编程经验,对Visual C++环境比较熟悉;针对所留习题,可以组织两到三次讨论,以便学员掌握面向对象设计思想。

总评成绩:平时作业占30%,闭卷考试占70%。

四、本课程与其它课程的联系与分工先修课程:计算机基础训练 后续课程:软件工程

五、建议教材及教学参考书

[1]郑莉、傅仕星编,《C++面向对象程序设计》,清华大学出版社,2003年9月出版 [2]谭浩强编,《C++面向对象程序设计》,清华大学出版社,2005年7月出版 [3]李师贤等译,《C++精髓》,机械工业出版社,2002年8月出版

[4]Davis Chapman,《学用Visual c++ 6.0》,清华大学出版社,2001年7月出版

C 面向对象程序设计课程教学大纲 篇2

存在着两种生源, 分别是五年制与三年制学生, 学生的数学知识的不健全, 理解能力比较差, 学生的对这门课程的兴趣比较少, 上课没有预习, 还停留在初中阶段的, 等老师的喂食。喜欢跟着老师做, 自己不怎么动脑思考, 尤其是要自己去举一反三能力没有。学院开的课程不够科学, 上课的安排不合理。学生上完了课程, 回宿舍基本就不去看, 所定制的教程很不合理的, 不能够让学生容易的学习, 学生遇到问题马上就问老师的坏习惯, 老师变成了现成的字典。上完课程的任务不够, 学生容易偷懒, 作业大部分存在抄袭复制现象。

为了很好的解决这些问题, 提出了自己对于《面向对象程序设计》课程教学改革方法。

第一, 根据学院的实际情况修改不同生源的教学大纲。

五年制的学生的教学大纲容易一点, 三年制的学生的教学大纲难一点。

第二, 选择适当的教材。

不能与本科教材, 中专教材类同, 要根据当前计算机发展选适当的面向对象教材, 我选择的是 (vb2005) , 本课程是基础的程序设计, 现在还使用vb6.0太落后, 如有使用新的vb2005学生更难接受, 因为很多新的概念, 别的课程跟不上, 使用多媒体教师, 使用案例演示+任务驱动, 教师讲解, 学生跟学项目, 学生修改项目, 学生独立完成项目作业, 教师针对性指导, 学生互相讨论学习, 挑选出较好的学生做学习辅导。

第三, 激发学生兴趣。

《面向对象程序设计》课程难度大, 被学生列为最难学的课程之一, 建立学生的学习信心很重要。要使学生感觉不太难, 树立他们的学习信心, 讲课时一定要抓重点, 因此在教学中不是泛泛介绍描述工具的语法和框架, 而是突出关键技术“精讲多练”, 学生可花较少的精力获得较强的编程能力。

第四, 注重学生能力培养。

“面向对象程序设计”课程应采用多媒体课堂授课的方式进行教学, 必须借助一定的工具, 网络教学软件如 (红蜘蛛) 是首选工具, 它能够很好的宏观展示程序整体结构, 又能够很好地微观剖析局部算法, 让每个学生都能清晰的显示教学内容, 比投影仪器效果要好的多, 这对课堂教学中发挥教师的主导作用是非常有利的。培养学生做学习笔记的良好习惯。

第五, 优化多媒体资源。

多媒体课件做的一定要简洁, 不要用一些非必要元素干扰了主题, 程序代码要采用链接的方式去完成, 用记事本打开即可。这样就保证了幻灯片页数少, 讲课时切换少, 减少学生对堂课的主题的理解偏差, 提高课堂效率和效果。

第六, 以问题驱动课堂。

在教学中将问题有目的、有组织地提出, 启发、引导学生的思维方向, 迫使学生动脑思考解决办法, 使他们逐渐习惯以专业的思维思考问题和解决问题。

第七, 作业内容要慎重。

作业在上课前先布置, 让学生带着问题去学习, 让学生去完成作业不是目的, 也不是完成教学环节的任务。作业内容要考究, 一定要留那种教材能够看到影子, 可又看不到全部面目的题材, 要迫使学生去图书馆或者到互联网上查阅资料, 要求必须在作业上体现出查阅资料的特征。这样可以减少作业的抄袭, 促进学生学习能力的提高。作业的公开演示, 防止学生的抄袭。创建一学习的网络 (创建一学习的网站, 教学的视频, 作品的实例) 。

学生先预习, 找出不懂的问题, 听完讲解后, 在询问老师或同学, 事先准备好教学的案例 (以案例应用突出教学重点与难点, 案例要实用简单难度适中) , 教师自己编写一些项目, 在教学前给学生演示, 只给项目的基本框架内容, 要求学生在基本框架里进行修改或是创新, 根据布置的作业可把学生分成3-5人一组完成项目。

第八, 掌控实验进程, 实现因材施教。

实验教学中应逐步提高设计类和综合类实验的比例, 以“任务”和“课题”的形式提出实验要求和具体的实验成果, 事先没有参考答案可供借鉴, 要求学生通过阅读教材和相关资料, 掌握实验所涉及到的知识, 通过综合利用这些知识来设计、开发并最终完成实验项目。

第九, 让学生做好笔记。

教学重点内容要做笔记, 我们的生源情况, 大多学生的记忆能力较差, 五年制的学生更加要求做笔记, 不要让学生把重点内容写在课本里, 最好是拿一本专门学习的笔记本。

第十, 教师与学生的互动体现。

教师采取的做法应该是鼓励表达观点的, 而不论你支持哪种观点, 施压于无观点的学生。促使学生思考问题, 培养学生求真到底的科学精神。通过这样的方式, 师生之间确立了良好的学术关系, 也会使学生相信这个老师有着严肃的做人做事原则, 学生就会对老师逐渐地建立信任感, 进而愿意学习老师教授的知识。

第十一, 培养学生的自学能力。

计算机是一个发展, 每隔一段时间就会推出新的概念与新的面向对象程序设计的产品, 我们学校所教的面向对象程序设计课程的内容也应跟上计算机的发展。

第十二, 科学设置课程设计, 提高应用能力。

课程设计为学生提供一个既动手又动脑的独立实践机会, 使学生将课本上的理论知识和实际有机地结合起来。根据我们的生源情况, 最好是把这门课程开设为两学期, 第一学期为基础内容, 第二学期为项目的开发与提高。课程的安排最好不要一天连上四节, 让学生有时间消化内容。

第十三, 题目难度适中。

由于教学目标和设计时间的限制, 题目规模要保持在300—500行手工代码能够解决的范围内, 难度要稍偏低, 使学生能够有思路解决问题, 能够在规定的时间内完成代码编制、输入、调试和形成相关文档, 树立学生独立开发项目的信心。

在今后的教学中不断改进教学方法, 总结教学经验, 找出一套更适合我们高职高专院校, 《面向对象程序设计》课程最佳教学方法与教学效果。提高我们高职高专院校学生的计算机专业应用人才的知识架构和较强应用能力, 让学生用面向对象的程序设计语言编程来解决具体问题。

摘要:在几年的《面向对象程序设计》课程教学过程中存在着一些问题, 本文对这些教学问题提出解决了方法与对策, 找出一套更适合我们高职高专院校的《面向对象程序设计》课程最佳教学方法, 提高我们高职高专院校学生的计算机专业应用人才的知识架构和较强应用能力。

关键词:面向对象程序,课程改革,任务驱动,项目

参考文献

[1]靳广斌.Visual Basic2005程序设计案例教程.北京大学出版社, 2009.

[2]孔长征.VB.NET编程实例教程.北京希望电子出版社, 2002.

[3]蒋明亮.面向对象程序设计课程实践教学改革研究[J].教学园地.2009, 1.

C 面向对象程序设计课程教学大纲 篇3

【关键词】C++教学方法;案例引入;任务驱动;项目开发;课外延伸

计算机专业是我国高等教育最为普及的专业之一,在三本院校中也广泛开设,而C++面向对象程序设计课程在三本院校的计算机专业中属于基础必修课程。该课程的主要任务是引导学生从面向过程的程序设计思维向面向对象的程序设计思维进行转变,培养学生利用面向对象的方法分析问题和解决实际问题的能力,并为以后进一步学习和应用高级语言程序设计打下良好基础,因此,学好该课程对于三本院校计算机专业培养优秀的高水平人才起着举足轻重的作用。

一、三本院校C++课程教学的背景

三本院校计算机专业传统的C++面向对象程序设计课程在教学过程中存在着严重的问题:

1.沿袭一本二本院校的教学方法,教学内容面面俱到,课堂教学就是罗列知识点,偏重基础语法知识的学习。2.采纳高职高专计算机专业的机械式教学方法,轻视语法,套用现有的程序案例,反复上机练习,直到熟练为止,以技术熟练为宗旨不求深入理解。

这两种“拿来主义”的教学方法,在三本院校中广为流行,但是这种不结合三本院校学生实际状况的教学方法,使三本院校在计算机专业培养人才方面存在着严重的劣势。对于三本院校计算机专业的学生,要想学生很好地学习和掌握C++面向对象的程序设计方法,需要根据他们的实际状况制定一个科学合理地教学思路。

二、C++面向对象程序设计教学方法的改进

1.课堂教学,以“案例引入、任务驱动”的方式进行教学。“案例引入、任务驱动”的教学方式主要应用在理论教学中,通过设计实际的案例要与课程相关知识进行对应;案例设计好之后,使用任务驱动的方式,发动学生运用课程内容,一起完成案例的每个功能。

案例引入主要在于案例的设计,不能过于简单或复杂。首先,学生在学习C语言的过程中已经接触过很多简单的解决数学问题的案例(数字排序等),而C++面向对象程序设计中主要是解决现实应用问题的,数学案例不太适合。其次,对于三本院校计算机专业的学生来说数学案例过于枯燥无味,很难引起学生兴趣。而且,复杂案例在教学过程中教师不容易分解知识点。那么如何设计适中的案例呢?以实际应用为目标去设计案例是一个很好的方法。比如:销售管理系统、信用卡管理系统等。这些系统基本功能并不多,在日常生活中经常会应用,学生很容易产生兴趣。当然,教师也比较容易分解案例,与C++课程中的知识相对应。

引起了学生兴趣之后,教师要以“任务驱动”的方式对学生进行相关知识与技能的学习与训练。以信用卡系统应用在课堂教学中为例:首先,设计信用卡用户类的信息,这个任务中,驱动学生掌握课程中的类与对象方面的知识;其次,进行存款、取款、查询等功能的实现,在这个任务中,驱动学生掌握对象函数方面的知识;然后,设计贵宾信用卡等,在这个任务中,驱动学生学会继承与派生方面的知识等。每个小任务将知识点融入其中,学生在学习知识的时候就乐在其中,自然提高了理论课堂学习效果。

2.实践教学,以“项目开发、课外延伸”的方式进行教学。“项目开发、课外延伸”的教学方式主要应用在实践教学方面,在课程实习中要求学生进行实际项目的开发,并鼓励学生课外时间为项目的需求到社会中进行实际的调研。

实践教学目的是提高学生的实践动手能力。如果在实践教学过程中使用项目开发的方式,能够使学生从低年级的学习就融入软件工程的思想,学习和掌握软件开发的流程,对于后续课程的学习有很大帮助。比如:给学生一个综合设计性的项目题目(模拟学生成绩管理系统),这个项目涉及到C++数据类型、程序控制语句、函数、数组、类与对象等知识,能够使学生在项目开发的过程中巩固和加深知识的理解。

“课外延伸”就是在实践教学中,鼓励学生进行实际需求调研,自主学习和设计项目,并通过模拟实际工作场景达到培养学生进入社会前的职业素养,如在项目开发中将学生3-5人分组,每组中选知识技能掌握较好者为项目经理,每个学生独立完成功能模块。这样,学生通过分工合作、互相交流和帮助,能够促进共同提高,也能达到培养学生职业素养的目的。

三、 小结

三本院校C++面向对象程序设计的教学方法的改革是势在必行,本文从理论教学和实践教学两个方面进行了探索和研究,也进行了实际的尝试,实践证明能够提高学生学习的兴趣和积极性,增加低年级学生学习语言课程后的成就感,为后续课程的学习打下良好的基础。

参考文献:

[1]陈帼鸾.项目驱动教学法在C++教学中的应用[J].中国科技信息,2009(7):200-201.

[2]王世东.C/C++教学改革的探索研究[J].福建电脑,2011(2):48-49.

[3]谭浩强.C++面向对象程序设计[M].清华大学出版社,2006-1等.

C 面向对象程序设计课程教学大纲 篇4

面向对象程序设计(ObjectOrientedProgramming,OOP)是信息管理与信息系统专业学生必修的专业基础课,在整个教学体系中的地位非常重要,学生在学习该课程后能充分掌握面向对象程序设计思想和方法,是该课程教学改革的理想目标。

一、相关概念

(一)面向对象程序设计

OOP 是一种计算机编程架构,它具备软件工程的灵活性、重用性和扩展性。OOP 不仅具有丰富的理论知识,同时具有很强的实践性,坚持在真实的项目中锻炼编程能力,才能理解其精髓,进而活学活用。

(二)项目教学法

项目教学法以学生为教学中心,是学生在教师的指导下处理项目,提高自身能力的教学方法。其优势在实践性较强的 OOP 课程中体现得淋漓尽致。具体实施时,教师化身为顾问,主要的作用是引导学生把课堂所学用在实践过程中,理论联系实际,进而提高动手能力 ;学生是项目的具体操作者,知识水平和发现问题、解决问题能力均能得到提高。

二、改革的必要性

OOP 是一门实践性很强的课程,如果不进行实践教学,学生不能全面掌握其核心思想。原因主要有以下两方面 :

(一)难理解

由于面向对象概念较抽象,是基于现实世界的特点,对系统的复杂性进行概括、抽象和分类,对象是 OOP 的核心,是将代码和数据封装起来的具有某些特性的具体事物的抽象。从学生角度来看,以知识点为中心的讲解教学方式理论性太强,不好理解,甚至有部分学生自始至终也无法掌握OOP 的重要概念,不能满足课程考核要求。

(二)理论教学多

教师上课采用多媒体教学,这种方式基本上是教师在课堂上唱独角戏,把理论和方法灌输给学生,学生被动地学习,只是把教师讲的内容在大脑中形成记忆,没有自己独立思考的过程,不利于培养学生的创造能力。

三、项目教学法的改革要点

项目教学法设计了完整的软件项目教学背景,克服了传统教学中注重理论知识忽视应用实践的缺点。学生在慢慢了解、逐渐熟悉软件项目开发的过程中,能够理解应用,学习和掌握各种知识并训练相关技能。

(一)项目题目的设定

教师在进行项目教学引导时需要策略,创设学习的资源,协调学习合作环境。教学项目题目的选取是其中的关键问题,选题最好能与软件公司进行交流或合作,应具备针对性和实用性,能体现出学生综合能力的运用,并且可以进行客观评价。首先,项目题目应尽可能覆盖教学大纲的多项知识点 ;其次,应该构建具有完整项目的项目案例库,项目题目应有不同的难易度和适当的工程工作量,适应所教班级的不同学生的实际水平;最后,项目题目应尽量贴近大学生的生活,并可以用一些标准,如软件是否易用、是否有良好的用户交互性等进行公平、准确的评价。

(二)互动增强

传统的教学环节中,老师和同学的交流仅限于课间十分钟或者课下较短时间的交流,交流时间少,沟通的`问题也只是教学内容中个别的知识点。而在项目教学法中,沟通渠道是多向的,老师与学生之间沟通的宽度和广度都加大了。另外,即使在同一课堂上听讲,不同的学生在学习动机、学习心理、学习兴趣和学习能力等方面仍然会有一些差别。

(三)角色换位

在项目教学法中,学生居于教学活动中的主要地位,应该是项目的积极参与者,首先要认真阅读选定的真实项目材料,和同一个项目的同学讨论,甚至就项目问题的不同理解与同组同学展开争辩。其次在真实项目实战场景下,经过认真的独立思考和判断动手编写程序。学生的自学能力和实践能力得到提升,并主动构建自己的知识体系。居于教学活动中从属地位的是教师,教师不再是整个课程的中心。教师对整个教学活动按照工程项目的需要加以指导,做适当的示范,只是项目的指导者或者说是项目进度的推动者,引导学生进行深入学习。

C 面向对象程序设计课程教学大纲 篇5

一、设计要求

1、设计的题目要求达到一定工作量,并具有一定的深度和难度,程序代码不得少于200行。

2、按面向对象的程序设计思想对问题进行抽象,并有相应文档产生。

3、要求设计的软件能够正确运行,达到题目要求。

4、编写出课程设计说明书(并附程序源代码),以电子文档方式上交教师批阅。设计说明书主要包括以下内容:

(1)对所设计的问题进行详细描述。

(2)系统所完成的功能描述。

(3)论述所设计的问题抽象方法及设计方法。

(4)所设计软件的测试方法、测试数据及测试结果。

(5)对所设计的软件进行自我评价,如创新点、未解决的问题等情况说明。

(6)附程序源代码。

二、进度安排

正确理解所设计的题目并进行问题抽象,确定设计方案2天

编代码3天

调试和测试3天

编写设计说明书1天

系统验收及成绩评定1天

三、设计成绩评定

评定依据:

1.问题的理解及抽象能力。

2.设计过程中独立工作能力。

2.设计说明书﹑程序清单﹑开发的程序质量与工作量。

4.设计题目的先进性和实用价值。

5.创新能力。

评定等级:

百分制

四、设计成绩评定办法

90及以上:按时完成设计题目的全部内容,程序结构设计合理,功能完善,有一定的创造性,表现了较强的独立工作能力。说明书文字通顺准确,层次清楚。

80~89:按时完成设计题目的全部内容,程序结构设计合理,功能较完善,有一定能力。说明书基本正确,文字通顺。

70~79:按时完成设计题目的全部内容,程序结构设计基本合理,在解决实际问题上有一定的工作能力。说明书内容基本正确,文字通顺。

60~69:基本完成设计题目的全部内容,程序结构设计基本合理,功能不太完善,依靠指导人的帮助。独立工作能力较差,设计中有明显的缺点或错误,说明书基本齐全,但质量较差。

60以下:有下列情况之一者成绩为不及格:

(1)独立工作能力很差;没有完成设计的基本要求的内容;程序结构不合理。

(2)在设计中有严重的违反纪律或抄袭他人设计和成果。

(3)无故不提交设计。

(4)设计期间有三分之一以上时间缺席者。

重庆工商大学派斯学院计算机系

C++面向对象程序设计教学大纲 篇6

课程编号:

课程中文名称:面向对象程序设计

课程英文名称:Object-Oriented Programming 总学时: 40

实验学时: 0

上机学时:学分:

2.5 适用专业:软件工程专业

一、课程性质、目的和任务(300字内)

《面向对象程序设计基础》是计算机软件工程专业本科生的一门专业基础课。面向对象软件开发方法是吸收了软件工程领域有益的概念和有效的方法而发展起来的一种软件开发方法。它集抽象性、封装性、继承性和多态性于一体,可以帮助人们开发出模块化的程序,并体现信息隐蔽、可复用、易修改、易扩充等特性。本课程主要介绍面向对象程序设计的方法和C++语言的基本概念及C++语言中的面向对象机制。通过本课程的学习,应使学生能够较好地理解和掌握面向对象程序设计技术的基本概念,掌握面向对象程序的设计方法,并能够在C++环境下(如VC++)开发较大型的应用程序。从而为以后的工作和学习打下基础。

二、课程教学内容及学时分配

第一章、面向对象程序设计概述(3学时)

1.教学内容

1.1面向对象程序设计方法的产生和发展

1.2面向过程和面向对象程序设计方法概述 1.3 面向对象程序设计的基本术语 1.4 面向对象程序设计的基本特征 1.5面向对象程序设计语言

1.6基于Visual Studio 2010的C++应用程序的开发 2.基本要求

了解面向对象技术的发展历程;了解面向过程和面向对象程序设计两种程序设计方法 优缺点;掌握面向对象程序设计的特点;掌握面向对象程序设计的相关术语和基本特征;了解目前常用的面向对象程序设计语言。了解Visual Studio环境下,C++应用程序的开发过程。3.重点、难点

重点:面向对象程序设计的特点(数据的抽象与封装、继承性、多态性)及面向对象的基本术语;C++应用程序的开发环境。

难点:面向对象程序设计的特点(数据的抽象与封装、继承性、多态性)和面向对象的基本术语。

第二章、C++基础(6学时)

1.教学内容

2.1C++程序的组成部分 2.2 命名空间

2.3 C++数据的输入输出 2.4引用 2.5函数

2.6 变量的的作用域与可见性 2.7对象的生存期 2.8 const常量

2.9动态内存分配和释放 2.10编译预处理

2.11文件的输入和输出 2.基本要求

了解C++程序的组成部分;掌握命名空间、变量的的作用域与可见性及生存期的概念;掌握引用及函数的引用参数和返回引用的概念和使用;掌握带有默认参数的函数的使用;掌握内联函数和重载函数的使用;掌握动态内存分配和释放的方法;掌握磁盘文件的输入输出操作方法。3.重点、难点

重点:引用及函数的引用参数和返回引用的概念和使用;动态内存分配和释放的方法;默认参数的函数的使用;内联函数和重载函数的使用。

难点:函数的引用参数和返回引用的使用;掌握磁盘文件的输入输出操作方法。

第三章 类和对象(6学时)

1.教学内容

3.1类和对象的概念 3.2类的定义

3.3对象的创建与使用

3.4构造函数 3.5析构函数

3.6构造函数和析构函数的调用顺序 3.7 对象数组与对象指针 3.8向函数传递对象 3.9对象的赋值和复制 3.10类的组合 2.基本要求

理解类的概念,掌握类的定义方法;理解对象与类的关系,掌握对象的创建和使用方法;掌握构造函数、析构函数的概念和使用方法;掌握拷贝构造函数的使用方法;掌握对象数组和对象指针的特点和使用方法;掌握函数调用中参数的传递方式;理解类的组合的特点。3.重点、难点

重点:构造函数、析构函数的使用方法;对象数组和对象指针的特点和使用方法;函数调用中参数的传递方式。

难点:拷贝构造函数的使用方法;对象数组和对象指针的特点和使用方法;类的组合使用。

第四章、类与对象的其他特性(4学时)

1.教学内容

4.1类的静态成员 4.2友元

4.3类的作用域和对象的生存期 4.4常量类型 2.基本要求

掌握类的静态成员(静态数据成员和静态成员函数)的定义和使用方法;掌握友元函数、友元类的作用、定义和使用方法;了解类的作用域,理解对象的类型和生存期;掌握各种常量的特点、定义和使用方法。3.重点、难点

重点:静态数据成员和静态成员函数的使用方法;友元函数、友元类的使用方法。难点:静态数据成员和静态成员函数的使用方法;类的作用域、对象的作用域及生存周期。

第五章、继承与派生(6学时)

1.教学内容

5.1类的继承与派生概念 5.2基类与派生类

5.3派生类的构造函数和析构函数 5.4多重继承

5.5子类型与赋值兼容规则

5.6程序实例 2.基本要求

理解基类和派生类的概念;掌握派生类的声明、生成过程、继承方式和访问权限;掌握派生类的构造函数和析构函数;掌握多重继承的构造函数和析构函数、构造顺序和析构顺序及多重继承中的二义性;掌握虚基类的概念;理解子类型和赋值兼容规则; 3.重点、难点

重点:派生类的继承方式和访问权限;派生类的构造函数和析构函数的定义;多重继承构造函数和析构函数的构造顺序和析构顺序;多重继承中的二义性;虚基类的定义。

难点:多重继承中的二义性;虚基类的定义;理解子类型和赋值兼容规则。

第六章、多态性(5学时)

1.教学内容

6.1运算符重载 6.2多态性的概念 6.3虚函数

6.4纯虚函数与抽象类 6.5面向对象程序设计 2.基本要求

掌握重载运算符的定义方法;了解运算符重载为成员函数与友元函数的区别;掌握不同类型数据间的转换方法;掌握多态性的概念;掌握虚函数的定义和使用方法;掌握纯虚函数和抽象类的定义;了解面向对象程序设计的基本思想。3.重点、难点

重点:成员函数和友元函数重载运算符;虚函数的使用方法。难点:虚函数的使用方法;纯虚函数和抽象类的定义和使用。

第七章、模板(2学时)

1.教学内容

7.1模板的概念

7.2 函数模板与模板函数 7.3类模板与模板类 2.基本要求

了解模板的概念;掌握函数模板的定义和使用,理解函数模板与模板函数的关系;掌握模板函数显式具体化;掌握类模板的定义和使用,理解类模板与模板类的关系;掌握类模板的派生;掌握类模板的显式具体化。3.重点、难点

重点:函数模板与类模板的使用。难点:类模板的使用。

第八章 文件和流

1.教学内容

8.1 C++的输入/输出 8.2 标准输入流 8.3 标准输出流

8.4 文件的输入和输出 2.基本要求

了解C++的输入/输出的概念;掌握使用cin进行输入;掌握istream类的方法进行输入。掌握使用cout进行输出;掌握格式化输出;掌握ostream类的方法进行输出;掌握文件的输入和输出。3.重点、难点

重点:掌握istream类和ostream类的输入和输出方法;掌握文件的输入和输出。

C 面向对象程序设计课程教学大纲 篇7

关键词:项目驱动,面向对象分析与设计,实践教学

面向对象分析与设计 (OOA/D) 课程主要任务是在学生已掌握的面向对象程序设计语言的基础之上, 使学生们能够深入理解面向对象方法的精髓和实质, 全面了解面向对象分析与设计相关领域的主要研究内容及关键技术, 包括面向对象的需求建模、面向对象的系统分析、面向对象的系统设计及设计模式、软件架构和软件构件技术等内容。面向对象分析与设计方法是目前软件开发的主流方法, 它是软件工程人才必须掌握的基础知识和必备的能力[1]。

可以说OOA/D是软件系统开发中最能体现从业人员创新思维以及其技术精髓闪光点之处, 而与这门课程在软件行业的重要性形成鲜明对比的是, 目前OOA/D课程教学模式已然落后, 偏重理论讲授而脱离项目实践, 学生的学习兴趣和积极性大打折扣, 教学改革迫在眉睫。

1 教学现状分析

当前我们在此门课程的讲授不能满足教学大纲培养需求, 经分析现行的课程教学模式主要存在以下问题。

(1) 理论知识传授过程中某些知识点的讲授无法切实让学生清晰的领会教学内容, 因本门课程对项目实践能力要求较高以及对学生抽象思维能力要求较高, 即便是在结合案例的讲授方式下, 学生仍然对主要内容的把握上表现出不知所措, 学习兴趣及积极性自然大打折扣。

(2) 实验体系也演化为为了机械的“做”而做, 而不是为了“学”而做, 课堂教学与实验教学互相脱钩, 学生将软件建模的过程当成了UML的画图过程, 违背了“做中学”的思想[2], 因此无法在实践中去领会教学内容, 也无法更清晰更形象的体会知识点。

(3) 课程的评价考核也与此门课程的教学目标相脱离, 考核内容大多演化成机械的文字背诵, 因在教学过程中项目实践引入较少, 使得考核过程中对分析与设计环节的考查变成了形式上的空洞。

2 基于项目驱动的课程体系结构的改革

2.1 课程实践体系结构的搭建

本课程教学的关键在于以实践为导向, 以项目为驱动, 这也是该课程教学的中心环节[3], 为此我们首先需要搭建能够承载本课程知识点的实践体系结构。

在搭建项目体系的过程中, 我们利用学院现已结题的横纵向软件项目, 对其中的面向对象分析与设计结果摘取其中要点与课程理论知识点对接, 进一步在分析与设计的各个阶段, 将项目的面向对象设计文档和课程的各个UML图形成对接, 这样由点即线, 形成了完备的课程实践体系结构, 学生在这样的结构环境下实践能更准确更清晰的理解实践要点及理论要点, 并重现了真实的分析与设计过程, 达到了良好的教学效果。

在此过程中, 摈弃了以往单纯使用没有实践积累的纸面案例进行建模画图的思路, 搭建了全新的面向对方分析与设计的实践体系结构, 从而在实践中讲授知识, 将理论知识的关键点转化为实践的关键点来传授。

2.2 课程知识体系结构的改革

我们发现本课程现行的知识体系结构存在着先期准备知识的不完备性以及知识点之间的衔接不连续性, 这些断层导致学生对知识的理解模糊以及对知识的掌握找不到切入点。因此有必要对知识体系结构进行改革和完善。

面向对象分析与设计课程要求学生具备良好的抽象能力, 软件过程重要的第一步便是利用抽象将软件需求转化为分析结果;而第二步考虑具体的软件可扩展性、可维护性、高效的灵活性, 对分析结果给出优化的设计方案。这两个关键的步骤是开发出高质量软件系统的关键, 也是本门课程对学生先期素质的准备需要。而当前我们软件工程专业的教学计划中其他课程的知识传授不能满足面向对象分析与设计学习的先期需要, 导致课程授课难度加大以及学生对知识的理解模糊。

因此整个知识体系结构有必要将《需求工程》及《设计模式》纳入到教学计划中, 《需求工程》是上述第一步从抽象中得到分析结果的能力培养, 《设计模式》是第二步优化设计思维的培养, 这样它们二者便与现有的面向对象分析与设计及软件工程共同构成了软件工程专业分析与设计能力培养课程群[4]。接下来, 我们要将这几门课程内容进行整合, 求同存异, 形成统一的面向对象分析与设计知识体系结构, 在内容选择以及实验配备上统一步调, 在课程之间的连贯性以及知识点的衔接性方面进一步优化体系结构。

3 基于项目驱动的教学方法改革

3.1 案例辅助教学

该课程讲授的原理、技术、方法都很抽象, 容易产生枯燥乏味的感觉。为了激发学生的学习热情, 培养学生分析解决问题的能力, 在教学过程中可设计若干可操作和难度适中的实际案例, 将复杂抽象、枯燥的概念融于具体生动的案例中进行讲解, 能够收到事半功倍的效果。

例如在讲需求建模、类图、用例图等需求分析建模工具时, 可以引入ATM储蓄系统、图书管理系统等学生熟知的案例辅助教学, 学生独立分析、思考, 然后教师再进行讲解, 指出不足。

这种方法不但给学生提供了充分的思考、探究和创新的空间而且学生边学边做, 会对所学的知识理解得更深, 对其应用场合更明确。

3.2 基于项目驱动的教学

在成功搭建课程的实践体系结构之后, 我们便可在教学过程中以项目实践为主线, 使之成为驱动其他教学环节的有效手段。随着课程进展布置任务, 从项目开发的准备工作、系统分析过程、系统设计过程、项目实施, 结合所学习的理论知识, 逐步完成项目的分析与设计。具体的实施过程如下。

(1) 设计多个典型的、完整的、难度适中的、实际的软件项目, 由学生分组完成。

选择项目时应尽量面向社会、面向应用, 反映新技术, 以获得更好的工程设计实践训练。项目最好来源于授课教师直接参与的软件项目, 以便授课教师对其全部细节能够准确掌握。

项目设计好之后, 将学生分成5~6人的小组, 然后为每个小组分配一个项目。小组成员分工合作, 明确项目开发各阶段的任务, 将每项任务落实到个人, 由学生独立完成。

(2) 即学即练。

在讲授一个软件项目分析与设计过程后, 安排一到两节的讨论课, 由学生自由发言。小组可以集思广益, 派一个代表讲解小组对本组项目的理解、分析和设计的过程, 说明运用所学的知识解决问题的方案。其他小组人员可以提出疑问, 最后由教师给出评价, 确定最终的实施方案, 这样项目开发的每个阶段都在教师的正确指导下进行。

在项目开发过程中, 教师要经常了解每组的进展情况, 解决学生遇到的实际问题, 给予正确的引导, 确保项目能够按部就班地、有条不紊地顺利完成。

(3) 统一答辩和验收。

在课程结束时, 每个小组的项目也接近尾声, 然后要统一组织答辩, 上交文档。这时可以让小组代表对其项目的功能、采用的技术等做总结陈述, 然后让每个小组成员说明在整个项目开发过程中所完成的任务, 并一一进行演示。教师针对每个学生实际负责的部分进行提问, 最后根据系统完成的功能、文档的质量、开发技术的难易程度、工作量等给出每个小组及组内每个成员的成绩。

通过面向对象分析与设计课程的学习, 学生的系统分析与设计能力以及开发的规范程度都有一定程度的提高, 具备一定的独立分析、解决问题能力、团队合作能力和有效沟通的技能。

4 考核方式改革

考核方式应尽量做到多样化, 以达到全面客观地衡量学生真实水平的目的。

考核方式有别于其他课程。我们提出的方案是:总成绩为100分, 平时成绩 (其中包括出勤和作业) 占总成绩的10%, 科技小论文占10%项目成绩占40%, 期末考试占40%。

期末时, 学生提交一篇科技小论文。主要考查学生对此门课程新思想、新理论、新技术等的了解程度, 同时也为学生以后继续深造打好基础。

项目成绩, 是指学生开发贯穿教学始终的那个项目的成绩, 主要考查学生的实践动手能力以及分析设计能力。

另外, 由于此门课程的理论性强, 一些原理、方法、规范要求学生牢固掌握, 对于这部分内容以闭卷方式考核。同时笔试反对死记硬背, 重点考查学生综合运用理论知识的能力和方法, 考核学生对面向对象分析与设计思想和软件开发方法的实际掌握程度。

5 结语

本文阐述的教学改革中, 提出了“以分析设计能力培养为核心、以项目实践为驱动”的教学模式。课程安排分为课堂理论教学和实践教学两大部分:课堂理论教学的目的是使学生掌握基本概念、原理和方法, 在此我们重点进行了此门课程的知识体系结构改革, 优化了知识体系结构;实践教学的目的是在搭建好的软件项目体系结构的实践平台上培养学生综合运用所学知识的能力。在此教学模式下, 能够很好的培养学生系统分析设计的能力, 培养他们严谨、求实的科学态度和团队精神, 激发他们的创新意识和实践精神。

参考文献

[1]梁金昆.面向对象的系统分析与设计[M].北京:清华大学出版社, 2004.

[2]樊永华.实践以学生为主体的信息技术课堂教学模式[EB/OL].www.cytaoyuan.qdedu.net.2008.

[3]严琼“.以学生为中心”的教学模式的探讨[J].华中师范大学学报, 2006, 8.

C 面向对象程序设计课程教学大纲 篇8

关键词:面向对象程序设计;案例驱动;教学方法

中图分类号:G642.3 文献标识码:A 文章编号:1007-9599 (2013) 01-0278-02

1 引言

《面向对象程序设计》是信息与计算科学专业本科生的一门必修课程,是一门与实际结合非常紧密、实用性非常强的课程。面向对象软件开发方法集抽象性、封装性、继承性和多态性于一体,面向对象思想是基于抽象数据类型的,在编程过程中将数据类型和结构与其操作绑定成模块,该思想已经应用到程序设计和软件开发、数据库系统、人工智能等很多领域。程序设计的核心是数据结构和算法,面向对象方法的核心是封装、继承和多态,学生需要掌握用面向对象方法定义类,然后定义必要的数据成员,然后再定义成员函数来实现一个软件系统的可维护性和可复用性。通过解决面向对象的核心问题,数据的抽象化和继承关系使得概念和定义可以复用,多态性使得实现和应用可以复用,抽象化合封装可以保持和促进系统的可维护性。面向对象程序设计是把一个复杂的问题分解成多个能够独立的功能对象,然后通过提供了封装、继承和多态等特性,使得一个系统可以在更高的层次上提供可复用性。C++既是设计工具,又是实现工具;既可抽象概念,描述实际问题,又兼顾效率,能很好地实现底层的系统软件。由于概念比较抽象,多数学生感到上课似乎听懂了,但编程应用起来有很大困难,普遍缺乏综合应用所学知识解决实际问题的能力,影响了整体的教学效果。迫切需要找到一种既能变学生的被动学习为参与性和主动性学习,又能切实提高学生学习兴趣和能力的教学方法。

2 案例驱动教学思想的引入

应用面向对象的方法有助于提升认识问题的能力,可以很快地洞察问题的实质,建立起问题域的逻辑模型,并以此为依据解决一些看似复杂的问题。

面向对象程序设计课程引入案例驱动教学法,以学生为主体、案例为主线,教师主导课堂,对案例所提供的材料和问题进行分析,学习案例所涉及的相关知识点,针对问题需求相互探讨提出见解,做出决策相互合作进行上机实践。

3 案例驱动教学内容的实施

3.1 案例的选取

面向对象的编程语言最大的特色就是能让程序更容易的应对需求变化,用哪种语言来编写程序不重要,要考虑的是如何针对抽象编程。结合C++语言的特点,教师选取的案例要是学生在编程工作中学会如何去设计和考虑问题,更好的应用面向对象技术来创建可维护、可扩展、可复用并灵活性好的程序,学生与教师的关系要从师生关系演变为项目负责人与程序员的关系。

案例的选取首先应结合讲授,覆盖多个相关知识点。第二,案例应具有实践性,是学生熟悉的题材,能够在日常生活中反应。第三,案例难度适中,循序渐进,具有一定的综合性。

3.2 案例的实施

面向对象程序设计语言很多,C++语言兼容C语言,并且具备C语言的性能。如在讲授类与对象章节,选用的是学生管理系统,结合这个案例,首先讲解目必须的知识点——类的定义,将数据的操作归入数据结构中,数据内部结构的改变不会影响使用数据包的程序部分,用类来实现封装机制,共有成员和私有成员;然后分析学生管理系统,假设实现如果发现某班级中的一位同学犯错误,则全班同学都扣除一分的需求;根据案例先识别出类,在识别出类的属性、方法、关系;根据不同的业务规则,结合设计模式设计实体类,设计客户端,设计业务类。将学生合理的划分为5至6人一组,提供案例后指导学生分工合作完成学习任务。A组学生设计实体类,完成学生与班级的定义,如图1所示;B组学生设计客户端,需要一个公开的惩罚方法;CDE组学生实现惩罚方法的算法,通过某个学生得到该学生所在的班级,通过班级得到该班级的全部学生,循环所有学生扣除每个学生一个小红花如图2所示;FG组学生设计业务类,业务中有两个方法需要学生业务类去实现如图3所示,一个方法需要班级业务类去实现如图4所示。

案例驱动法改变了以往教师讲、学生听的学习习惯,通过案例的选取以及对案例的分析与讨论,学生真正参与到互动学习中,理解案例所涉及的知识;通过教师的指导学生能建立正确的编程思想,有效完成各自小组上机实践任务,最后进行分析讲述,形成创造型学习形式。

3.3 案例驱动教学法的推动

首先,理解面向对象程序设计基础概念:类与对象、继承与组合、虚函数与多态,有助于案例驱动教学法的推动。面向对象程序设计的重点是类的设计,而不是对象的设计。设计孤立的类是比较容易的,难的是正确设计基类及其派生类。在设计类时“以行为为中心”,即首先考虑类应该提供什么样的函数。C++的“继承”特性可以提高程序的可复用性。除了继承外,C++的另一个优良特性是支持多态,即允许将派生类的对象当作基类的对象使用。C++用关键字virtual来声明一个函数为虚函数,派生类的虚函数将(override)基类对应的虚函数的功能。

其次,良好的编程风格是产生高质量程序的前提。学生划分为5至6人的“学习小组”,根据案例需求分工合作进行上机实践。指导学生不要编写过分复杂的语句,不要编写集多种功能于一身的函数,不要将BOOL值TRUE和FALSE对应1和0进行编程。

再次,将案例驱动教学的上机实践引入学生成绩考核。

4 案例驱动教学成果的展示

在将案例驱动教学思想引入面向对象程序设计的调查问卷中,82%以上的同学认为通过小组合作学习提高了自我课堂参与性,41%的同学对整体程序设计具备了一定的分析与处理能力,89%的同学认为掌握章节中的基本概念及其应用,93%的同学感到小组成员对他学习的帮助。

5 结束语

面向对象是一组思维方法、分析方法和编程方法的集合,可以将一个复杂问题迅速简化,第一步解决最小的简单模型;第二步解决复合的常规模型;第三步解决扩展的推广模型。把案例驱动的教学思想引入面向对象程序设计课堂,选取有代表性的案例,切实提高学生的程序设计水平显得尤为重要。

参考文献:

[1]陈帼鸾.“项目驱动”教学法在C++教学中的应用[J].中国科技信息,2009,7:200-201.

[2]肖明.案例教学法在“C++语言程序设计”教学中的应用[J].计算机教育,2010,6:83-86.

[3]丁智国,钱婕.面向对象程序设计课程教学改革[J].计算机教育,2011,9:9-12.

面向对象程序设计感想 篇9

本课程主要讲解了控件,资源管理器,文件流,线程等等,通过这门课的学习,我学到了一些应用性的知识,比如如何设计控件,对文件流进行程序的代码编写,还有就是多线程编程技术,在此我想主要谈谈基本控件的学习和感想

学习控件,使我了解了基本控件的使用方法。在原先学习过c#的基础上,通过将窗体和控件联系起来,使得编写代码不再枯燥,反而能编写出更好玩的东西,比如《贪吃蛇》《拼图》这样的小游戏(界面有点死板哈,但是基本可以看出来的,还有待改善),在这其中确实增加了学习的兴趣,更深刻得理解了程序的编写,提高了编程的能力。

当然,到现在仍然有一些问题,比如timer,picturebox之类的,老师在教的时候,听课是没有一点困难的,难的是课堂上记住操作步骤,即使上课记下一点,但是只要有一处漏记了就有可能出现问题,课后自己再去搞,难免会出现一些差错,尤其是自己设计的控件的软件嵌入,以及下次想使用的调用,这里都有一定的空白…,我希望老师在教的时候,每讲完一个知识点,就停下来,让我们好再理解一下

C 面向对象程序设计课程教学大纲 篇10

实验一 Visual C++ 6.0开发环境应用入门(2学时)

一、实验目的和要求

1.了解Visual C++ 6.0的特点。2.熟悉Visual C++ 6.0的开发环境。

3.学习用Visual C++ 6.0编写标准的C++控制台程序。

二、实验任务

1.使用Visual C++来建立一个非图形化的标准C++程序,编译、运行以下程序:

#include using namespace std;int main(){ cout<<“Hello!n”;cout<<“Welcome to c++!n”;} 2.计算1-1/2+1/3-1/4+„1/100的值.3.假设现在同时打开程序1和程序2,是否能够分别同时运行程序1和程序2得出结果,如果不行,请说明原因.三、实验步骤

1.启动Visual C++6.0开发环境

※ 从“开始”菜单中选择“程序”│Microsoft Visual Studio 6.0│Microsoft Visual C++ 6.0,显示Visual C++ 6.0开发环境主窗口。

2.创建一个项目

※ 单击File菜单中的New选项,显示New(新建)对话框(如图1—1所示)。

图1-1 New对话框

※ 单击Projects标签,在Projects(项目)选项卡中,选择Win32 Console Application(Win32控制台应用程序)。在Location(位置)文本框中指定一个路径,在Project Name(项目名称)文本框中为项目输入一个名字“lab1_1”,单击OK(确定)按钮。

※ 在弹出的Win32 Console Application—Step l of 1对话框中选择An Empty project单选项,然后单击Finish(完成)按钮(如图1-2所示)。

图1—2 创建控制台应用程序第一步

※ 最后在New Project Information对话框中单击OK按钮,完成项目的建立。3.建立C++源程序文件

※ 选择菜单命令Project│Add to Project │New,弹出New对话框,如图1-3所示。※ 在New对话框的Files选项卡中选择C++ Source File,并填入文件名称“1abl_1”,单击OK按钮,完成新建C++源程序文件。

图1-3 添加新的源程序文件

4.编辑C++源程序文件内容

※ 在文件编辑窗口中输入代码(如图1—4所示)。

图1-4 在文件编辑窗口中输入代码

※ 选择菜单命令File │Save保存这个文件。5.建立并运行可执行程序

※ 选择菜单命令Build │Build labl_1.exe,建立可执行程序。

如果你正确输入了源程序,此时便成功地生成了可执行程序labl_1.exe。如果程序有语法错误,则屏幕下方的状态窗口中会显示错误信息,根据这些错误信息对源程序进行修改后,重新选择菜单命令Build │Build labl_1.exe,建立可执行程序。

※ 选择菜单命令Build │Execute labl_1.exe运行程序,观察屏幕的显示内容。6.关闭工作空间

※ 选择菜单命令File │Close Workspace关闭工作空间。实验二 函数的应用(2学时)

一、实验目的

1.掌握函数的定义和调用方法。2.练习重载函数的使用。3.练习使用系统函数。

4.学习使用VC++的Debug调试功能,使用Step Into追踪到函数内部。

二、实验任务

1.编写一个函数把华氏温度转换为摄氏温度,转换公式为:C=(F-32)*5/9。

2.编写重载函数Max1可分别求取2个整数,3个整数,2个双精度数,3个双精度数的最大值。

3.使用系统函数pow(x,y)计算x的值,注意包含头文件cmath。4.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。

y

三、实验步骤

1.编写函数float Convert({float TempFer},参数和返回值都为float类型,实现算法C=(F-32)* 5/9,在main()函数中实现输入、输出。程序名:lab3-1.cpp。

2.分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。程序名:1ab3-2.cpp。

3.在main()函数中提示输入两个整数x、y,使用cin语句得到x、y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。程序名:1ab3-4.cpp。

4.编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。公式为fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if语句判断函数的出口,在程序中用cout语句输出提示信息。程序名:lab3-5.cpp。

5.使用Debug中的Step Into追踪到函数内部,观察函数的调用过程,参考程序如下:

//1ab3_5.cpp #include using namespace std;int fib(int n); int main(){ int n,answer;

cout<<”Enter number:”; cin>>n; cout<<”nn”;answer=fib(n);

cout<

int fib(int n){ cout<<”Processing fib(“<

6.调试操作步骤如下:

(1)选择菜单命令Build │ Start Debug│Step In,或按下快捷键F11,系统进入单步执行状态,程序开始运行,并出现一个DOS窗口,此时Visual Studio中光标停在main()函数的入口处。

(2)把光标移到语句“answer=fib(n)”前,从Debug菜单或Debug工具栏中单击Run to Cursor,在程序运行的DOS窗口中按提示输入数字10,这时回到Visual Studio中,光标停在第11行,观察一下n的值(观察方法见实验2)。

(3)从Debug菜单或Debug工具栏中单击Step Into,程序进入fib函数,观察一下n的值,把光标移到语句“return(fib(n-2)+fib(n-1))”前,从Debug菜单或Debug工具栏中单击Run to Cursor,再单击Step Into,程序递归调用fib函数,再进入fib函数,观察一下n的值。

(4)继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递归调用的理解。

(5)再试试Debug菜单栏中别的菜单项,熟悉Debug的各种方法。实验三 继承与派生(2学时)

一、实验目的

1.学习定义和使用类的继承关系,定义派生类。2.熟悉不同继承方式下对基类成员的访问控制。3.学习利用虚基类解决二义性问题。

二、实验任务

1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。

2.定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

3.定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。

4.(选做)从实验6中的people(人员)类派生出student(学生)类,添加属性:班号char classNO[7];从people类派生出teacher(教师)类,添加属性:职务char principalship[11]、部门char department[21]。从student类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacheradviser;从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。重载相应的成员函数,测试这些类。

三、实验步骤

1.编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:

error C2248:’age’:cannot access private member declared in class ’Animal’ 把age改为公有成员变量后重新编译就可以了。程序名:lab7_1.cpp。

2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析 构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名:lab7_2.cpp。

3.用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。

4.编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。程序名:lab7_3.cpp。

C 面向对象程序设计课程教学大纲 篇11

关键词:中断;Linux;面向对象思想

中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)12-21356-02

Research of Interrupt Design Based On Object-Oriented Thinking In Linux Kernel

FANG Hong,LV Tai-zhi

(Department of Information Engineering,JiangSu Marine Institute,Nanjing 211170,China)

Abstract:This paper introduced the problem of interrupt design and the basic solution under Linux.By applying object-oriented thinking and design model,Top Half and Bottom Half of interrupt mechanism were analyzed on structure and action, Finally,the paper pointed out that the highly performable and flexible framework of interrupt handling was realized in Linux kernel.

Key words:interrupt;Linux;object-oriented thinking

1 引言

中断是计算机系统中不可缺少的工作机制,对系统性能有重要影响。但其与硬件密切相关,作为支持多种硬件平台的Linux操作系统,在中断机制设计方面必须权衡性能和可移植、可扩展性等方面的矛盾。运用面向对象的技术构建高质量的软件体系结构,用高效的c语言来编程实现,将二者的优点有机结合起来,已成为Linux内核设计中的发展趋势。在Linux内核中,出于性能的考虑,将中断的处理分成上半部分[1](Top Half)和下半部分(Bottom Half),因此內核的中断处理机制也被分成两部分,本文基于Linux内核2.6.20,运用面向对象的方法及相关设计模式,对这两部分进行了深入分析。

2 Top Half分析

Top Half已被设计成一个独立的中断处理层。设备驱动通过使用该层提供的接口,使中断处理部分完全独立于硬件,从而大大提高了代码的可移植性;中断硬件驱动则可以实现和使用该层定义的中断硬件接口和中断处理回调接口,对中断处理层提供支持,同时也可以利用该层提供的标准中断处理流程,简化设计和实现。

2.1结构分析

通过分析中断相关内核源代码[2],抽象出Top Half的类图(图1)。类的提取主要来源于相关头文件中的struct结构,也有一些是直接从代码中抽象而来,并没有相应的struct。为了取得一定的对应关系,类的命名尽量采用了与之对应的struct结构的命名。对于包含函数指针的struct,可以有两种观点:第一种将其视为定义了抽象方法的抽象类,第二种将其视为包含了预定义接口的类。本文采用第二种观点,因为它更能体现面向对象设计的基本原则(编程中使用接口,而不是接口实现;优先使用组合而不是继承)。manager主要定义实现上层接口,设备驱动可以进行请求、禁能、释放中断等操作,无需知道中断硬件的细节,从而使设备驱动中断处理相关的代码无需改变就可以方便地移植到不同平台。manager内含一个包含irq_des的线性数组,以此实现全局管理。irq_des与中断号一一对应,是将底层硬件隔离及实现中断处理流程的关键。它包含的irq_chip通过定义一组接口方法,将不同的中断硬件行为统一进行了封装。一方面底层中断硬件驱动只要根据自身功能部分或全部实现这组方法,就可以向上提供满足需要的中断处理功能,方便了底层的设计;另一方面负责中断处理流程的handle_irq,通过使用chip的方法与硬件交互,从而将中断流程处理与硬件细节处理分离。由于不同类型的中断,其中断处理流程不尽相同,不同于以前的在一个函数中处理各种类型中断的方法,內核目前将其细分成6种类型(edge level simple percpu bad fasteoi),并分别提供了标准的实现,这样可以针对特定类型,优化代码,提高处理性能。虽然有多种类型的处理方法可供使用,但内核仍抽象出单一的中断处理接口handle_irq供底层调用,在这里,使用了策略(Strategy Pattern)设计模式[3],6种类型的中断处理方法(具体策略)是handle_irq(策略接口)的不同实现,而irq_des则提供了策略赖以存在的上下文(Context)。策略模式使中断处理更具灵活性、可扩展性。例如可以方便地增加新的中断处理类型以及根据需要重新实现特定类型的中断处理方法,却对使用者没有影响。chip和handle_irq相结合一方面屏蔽了底层中断硬件的变化对上层的影响,另一方面给中断硬件驱动的设计实现带来了便利;而性能却因为优化了不同中断类型的处理代码而得到提高。

图1 Top Half类图

为了有效利用紧缺的中断资源,内核支持中断共享,这主要通过irqaction来实现。irqaction的设计使用了职责链(Chain of Responsibility)模式[3],该模式的设计意图在于使多个对象都有机会处理请求,通过将这些对象连成一条链,并沿着这条链传递该请求来实现,它降低了请求的发送者和接收者之间的耦合。由于中断共享时,有多个中断处理函数,但只有具体的中断处理程序知道是否要处理中断,且要求支持中断处理函数的动态增减,所以非常适合运用职责链模式。action包含一个handler,它定义了处理中断请求的接口,具体的中断处理则由使用中断的设备驱动程序以中断处理函数的方式来实现。在handle_irq的具体实现中,均会调用handle_IRQ_event方法,该方法遍历irqaction链,并依次调用handler接口方法,最终实现中断的处理。职责链模式虽然有诸多优点,但也有缺点:主要是处理效率偏低,因为处理一个请求可能要遍历到最后才能完成,这就要求共享同一中断的设备不能太多,同时要求中断处理程序尽快判断出中断是否需要处理,若不需要应及时返回。

2.2行为分析

中断的实际处理过程是一个软硬件相结合的、异步和并发的复杂过程,虽然内核中断处理层屏蔽了中断处理的细节,但使用中断的设备驱动编写者仍需要理解中断处理的主要过程,特别是中断处理函数被调用的上下文环境,作为一个较高层次的抽象,下面描述了一个中断被处理的基本过程。首先设备驱动使用request_irq申请登记中断处理函数,相应设备触发了一个中断,经过底层软硬件的一系列处理,最终会调用irq_desc的handle_irq方法,该方法又会调用handle_IRQ_event,它遍历irqaction链,调用中断处理函数,中断处理函数在进行必要的处理后,一般会在标识出要延迟处理的工作后返回,最后在判断出没有硬软中断嵌套及有软中断需要处理的情况下,调do_softirq进行下半部分的处理。

3 Bottom Half分析

在内核中,Bottom Half的实现机制主要有软中断(softirq)和任务片(tasklet)[4],tasklet是基于softirq的,二者的主要区别是同一软中断处理函数可以同时运行在多个CPU上,而同一任务片同时只能运行在一个CPU上,不同的任务片可以同时运行在不同的CPU上。因此需要软中断实现者自己处理因多CPU 存取共享数据产生的同步问题,在获得高性能的同时,增大了编程难度。而任务片则在性能和编程难度间找到了一个合理的平衡点,被大多数设备驱动所采用。

3.1结构分析

通过分析与tasklet和softirq相关的源代码,可以抽象出两者的类图(图2),smanager负责提供初始化、请求、触发、处理软中断的方法,其中do_softirq负责实际处理软中断,该方法在软中断层有标准实现,但在某些平台上(如i386平台)则由体系相关部分实现以支持软中断栈,但系统运行时只能使用一种实现,为此内核使用条件编译,在编译时确定使用哪一种实现,这实现了一种编译时的“多态”。smanager内含一个包含32个softirq_action的线性数组,以此实现对软中断的全局管理,数组下标隐含了软中断的优先级,下标越小,优先级越高。softirq_action实际上是软中断相量,设计的相当简单,它包含一个action接口由具体的软中断来实现。内核已实现并装入了几种软中断,这些软中断一经装入就不会被卸下,所以内核目前没有提供释放软中断的方法。一般推荐由内核开发者来实现软中断,而不是设备驱动的编写者。

tmanager通过tasklet_action实现action接口方法成为一种软中断,tmanager负责对外提供创建、调度、禁能tasklet的方法,它内含几个与CPU个数相等的数组,每个数组包含一个tasklet相量链(与CPU一一對应),在这里,再次采用了职责链设计模式,因为与中断共享类似,多个tasklet实际上共用了一个软中断触发标志位,且要求支持tasklet的动态增减,但tasklet的动态性更强,仅执行一次就被从链表中删除。在内核中实现了两类不同优先级的tasklet,其结构和行为基本一致,本文以普通优先级的tasklet为主进行论述。

3.2行为分析

软中断的运行可分为触发和执行两步。触发机制类似于内核中的信号机制,raise_softirq方法设置触发标志位(每个CPU均有一个整型标志字,每位依次与软中断号相对应,置1表示该软中断需要处理);软中断的实际执行由do_softirq方法完成,该方法可以在多CPU上同时执行,首先判断当前CPU是否已运行软中断,若是则退出,以避免重入可能导致的死锁;然后依次遍历软中断数组,对于标志位置1的软中断则调用其action方法,进行实际的软中断处理。

图2 softirq和tasklet类图

tasklet的运行也分为提交和执行两步,提交由tasklet_schedule完成,它会把tasklet插入到与当前CPU所对应的tasklet链中,在插入前会判断tasklet是否已被调度到其它CPU上(通过成员state判断),若是则返回,以此保证某个tasklet在多个tasklet链表中的唯一性,然后调raise_softirq触发软中断;执行由tasklet_action(被do_softirq调用)完成,它遍历与当前CPU对应的tasklet链表,调用func接口方法实现处理,并将处理过的tasklet从队列中删除。在tasklet处于运行状态时,该tasklet可以再次被调度到tasklet链表中,但不能被运行,直到前一tasklet运行完毕。提交和执行机制共同保证了同一tasklet在多CPU上的串行执行以及不同tasklet在多CPU上的并行执行。

4 结论

通过充分运用面向对象的基本设计原则(封装变化;编程中使用接口,而不是接口实现;优先使用组合而不是继承)以及设计模式,Top Half 和Bottom Half被设计实现成了一个中断处理的框架结构,融高效与灵活为一体,本身也可以被抽象提炼出一种设计模式。其设计思想和方法值得学习和借鉴。

参考文献:

[1]陈莉君.Linux操作系统内核分析[M].北京:人民邮电出版社,2000.102-125.

[2]Linux2.6.20内核源码[EB/OL].http://www.kernel.org.

[3]Erich Gamma.等.著.李英军.等.译.设计模式:可复用面向对象软件的基础[M].北京:机械工业出版社,2000.9:147-218.

[4]毛德操,胡希明.Linux 内核源代码情景分析[M].杭州:浙江大学出版社,2001.222-333.

上一篇:脱贫攻坚乡村振兴心得体会作文下一篇:五年级上册语文积累