《面向对象程序设计方法》实验教学大纲

2024-06-12

《面向对象程序设计方法》实验教学大纲(精选8篇)

篇1:《面向对象程序设计方法》实验教学大纲

《面向对象程序设计方法》实验教学大纲

(计算机科学与技术本科专业使用)

一、教学目标

通过该实验课,学生应在熟练掌握过程化程序设计方法的基础上,领会面向对象程序设计及类的封装、数据隐藏、继承及多态等特性,逐步掌握面向对象程序设计方法,培养一定的程序设计能力,为以后各专业课程的学习打下良好的程序设计基础。

二、实验教学时数

三、实验内容

实验一 图形打印

1、实验目的:练习for循环

2、实验技能培训内容:打印几种特殊图形,如菱形和Z字形

3、主要仪器:计算机

4、实验方法:上机编程

实验二 判素数

1、实验目的:练习函数

2、实验技能培训内容:判断101-200之间有多少个素数,并输出所有素数。

3、主要仪器:计算机

4、实验方法:上机编程

实验三 递归函数练习

1、实验目的:练习递归函数

2、实验技能培训内容:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 兔子的规律为数列1,1,2,3,5,8,13,21....3、主要仪器:计算机

4、实验方法:上机编程

实验四 数列排序

1、实验目的:练习数组及几种基本排序方法

2、实验技能培训内容:用选择、插入、冒泡、快速等几种基本的排序方法对数列进行排序。

3、主要仪器:计算机

4、实验方法:上机编程

实验五 矩阵乘积

1、实验目的:练习数组

20学时

2、实验技能培训内容:用数组存储两个矩阵,求两个矩阵的乘积。

3、主要仪器:计算机

4、实验方法:上机编程

实验六 设计时间日期类

1、实验目的:掌握简单类的设计方法

2、实验技能培训内容:构造一个TimeDate类,类中包含一个成员函数,用来在屏幕上显示时间与日期(采用建立在标准库time.h中的标准时间与日期来寻找与显示日期)。

3、主要仪器:计算机

4、实验方法:上机编程

实验七 设计计时类

1、实验目的:掌握简单类的设计方法

2、实验技能培训内容:建立Watch类,用来仿效秒表跟踪消逝的时间。用构造函数将消逝时间的初值置为零。提供两个成员函数Start()与Stop(),分别打开与关闭计时器。

3、主要仪器:计算机

4、实验方法:上机编程

实验八 设计字符栈类

1、实验目的:掌握简单类的设计方法

2、实验技能培训内容:用Stack类,写一个函数LoadStack(),用来返回已经将字母表(a-z)入栈的堆栈。在调用函数中,将这个堆栈赋值给另一个对象,并证明它包含字母表。可以改变堆栈的尺寸,以便它大得足以支持字母表。

3、主要仪器:计算机

4、实验方法:上机编程

实验九 友元的使用方法

1、实验目的:掌握友元的使用方法

2、实验技能培训内容:求两数的平方差(友元函数说明)

3、主要仪器:计算机

4、实验方法:上机编程

实验十 访问权限

1、实验目的:掌握类成员的各种访问权限

2、实验技能培训内容:类成员的各种访问权限

3、主要仪器:计算机

4、实验方法:上机编程

实验十一 类的派生

1、实验目的: 掌握类的派生

2、实验技能培训内容:给出基类AreaClass(形状类),建立两个派生类Box(方形类)与Isosceles(等腰三角形类),让每个派生类包含一个函数Area(),分别用来返回方形与等腰三角形的面积。

3、主要仪器:计算机

4、实验方法:上机编程

实验十二 用类方法求解一元二次方程

1、实验目的: 掌握类的派生

2、实验技能培训内容:实现一个Complex类和一个Real类。将Real类定义为Complex类的子类。然后设计一个求解一元二次实系数方程的根的类Root。

3、主要仪器:计算机

4、实验方法:上机编程

实验十三 类继承中的构造

1、实验目的: 掌握类继承中的构造

2、实验技能培训内容:类继承中的构造方法

3、主要仪器:计算机

4、实验方法:上机编程

实验十四 类继承中的构造

1、实验目的: 掌握类继承中的构造

2、实验技能培训内容:类继承中的构造方法

3、主要仪器:计算机

4、实验方法:上机编程

实验十五 大学生类

1、实验目的: 掌握虚函数的使用

2、实验技能培训内容:设计一个大学的类系统,包括Student(学生),Professor(教师),Staff(职员)。另有一个类既作为学生又兼作助教的可作为派生类StudentStaff,它是由Student类和Staff类派生而来,另外定义一个父类DataRec作为上述类(子类)的基类。

3、主要仪器:计算机

4、实验方法:上机编程

责任撰写人:陈桂芬

篇2:《面向对象程序设计方法》实验教学大纲

第六次实验: 友元的使用方式

1.学时:2课时; 2.实验类型:验证性实验 3.实验目的:

(1)了解友元机制的由来和本质;(2)理解友元机制的主要作用;

(3)掌握友元函数、友元成员和友元类的声明、定义和使用方法,并注意友元机制的安全风险问题。

4.实验内容:

实验题目1:友元函数的声明、定义和使用(1)程序功能简介

编程实现一个类的友元函数的声明、定义和使用代码。(2)程序设计要求

① 采用声明和定义分开的方式实现一个类的友元函数;

② 通过调用友元函数,实现对一个类内所有访问权限的成员进行访问,验证友元机制。(3)程序设计说明

① 参考教材例4.2(见P86)、例4.3(见P86)、例4.4(见P87)。(4)撰写实验报告

参考实验报告模板。

实验题目2:友元成员和友元类的声明、定义和使用(1)程序功能简介

编程实现一个类的友元成员和友元类的声明、定义和使用代码。(2)程序设计要求

① 采用声明和定义分开的方式实现一个类的友元成员和友元类; ② 通过调用友元成员以及友元类的对象,实现对一个类内所有访问权限的成员进行访问,验证友元机制。(3)程序设计说明

① 参考教材例4.5(见P91)、例4.6(见P92)、例4.7(见P93)。(4)撰写实验报告

参考实验报告模板。实验题目3:利用友元机制计算两点之间的距离(1)程序功能简介

设计一个点(Point)类,其中包括一对坐标数据成员、一个求两点之间距离的友元接口和显示坐标点的成员函数,并用数据进行测试。(2)程序设计要求

① 首先,采用友元函数distance()的方式实现友元接口; ② 其次,采用友元成员distance()的方式实现友元接口; ③ 最后,尝试采用友元类的方式实现友元接口。(3)程序设计说明

① 在头文件中声明类,在程序文件中定义类的成员函数; ② 采用构造函数进行对象的初始化;

③ 对于友元成员和友元类两种实现方式,可以另外定义一个求解两点距离的ComputeDistance类,将distance()作为该类的成员函数。(4)撰写实验报告

篇3:《面向对象程序设计方法》实验教学大纲

面和物为中心 (OOP) 强, 调按事物本质特性以问题域中的事向对把它们抽象为对象。类通过对象海间通过消息进行通信○接口与外界发生关系, , 程序对象象教南省模块间关系简单, 模块的独程学口好的保障海立性和数。据的安全性有了良序方经济面向对象的软件开发是学计算机技术发展的重要成果设法院和趋势, 主流的语言有计的C++龙C#语、言C#。、Java等, 本文采用中探军一、类和对象教学方法类讨问题的提出类是抽象对象, 是具体,

教学中, 由于多数教材先讲

类和对象再讲图形化应用, 实验大都以数字或文字体现, 学生没有直观地感受。

类和对象是面向对象程序设计中最重要的概念, 对两者关系的模糊不清势必影响对知识的掌握。

二、针对问题进行教学设计的总体思路

高职高专学生通常对图形化的东西有兴趣、易理解, 教学中笔者将可视化应用程序、控件先讲授, 再基于可视化按知识点依次完成类、对象、构造函数、属性、方法、事件、方法重载、对象数组、派生和继承等的学习和实验, 最终完成一个小的游戏程序。

在教学中, 设计了我方飞机、我方子弹、敌方飞机 (多架) 、敌方子弹等对象。这些对象有定位、显示、图片等共同点, 也有不同点, 如我方飞机通过键盘控制移动、敌方飞机自主行走且能追踪我方飞机、子弹只能朝着发射方向向前行走等, 根据共同点和差异抽象出基类 (fj) 和子类 (fj_zdxz) , 由简至繁来设计教学内容。

三、教学中知识点的组织

1. 类和对象。

对象 (Object) 是类 (Class) 的一个实例, 面向对象程序设计的重点是类的设计。目前类的设计有“以数据为中心”和“以行为为中心”两种思路, 微软公司的COM规范的核心是接口设计, 笔者依此采用“以行为为中心”来设计类。

先在窗体代码中创建一个fj类:class fj{}, 从上述4种对象中提取出共性:坐标 (X、Y) 、是否可见 (visible) 、生命力 (sml) 、图片 (fjtp) 作为类成员。在同一名称空间中有两个类:窗体类和飞机类, 即可从结构上分析类之间的平行关系及类的声明格式及作用域的含意。

接着在窗体类中用飞机类声明了我方飞机:“f my_fj;”, 再在窗体提取事件中创建我方飞机的实例:“my_fj=new fj () ;”, 引入构造函数的概念。构造函数主要用于为对象分配空间、完成初始化工作, 函数的名字必须与类名相同, 在对象定义时被自动调用。通过在构造函数中设置成员的初始值, 并在提取事件中用my_fj.X等代码显示出, 体现了类和对象的关系。

2. 属性。

封装是面向对象的特点, 即通过访问器 (get和set) 进行属性访问。上述代码中变量定义为public权限, 在类外已经可以直接修改或获得, 为什么还定义属性成员呢?因为public成员没有任何安全措施, 如飞出了允许区域、生命力小于0等, 通过属性, 可以在访问器中加以判断。

3. 方法。

方法是类中用于执行计算或进行其他操作的函数成员。如对象图片体现、刷新、可见与不可见、自动行走等就可使用方法来完成, 再在另一个类中调用。

通过用飞机类生成敌人飞机、敌人子弹、子弹等对象, 学生掌握用一个类生成多个对象, 并通过坐标、图片等属性使对象拥有不同的特征。

4. 事件。

事件是对象发送消息、信号通知客户发生了操作。高职高专学生在做程序时很少需要去做委托和事件, 重点是已有对象、控件的事件使用, 了解“方法是必须是通过写代码来调用, 而事件是自己触发的”的基础原理。

在本程序中我方飞机就是通过键盘事件控制动作行为的。

5. 方法重载。

子弹和敌人飞机自动行走的功能相同, 但方式、速度不同, 就采用相同的方法名称和不同的参数来区分, 即方法重载, 这样完成同一功能的方法名称相同, 简化了程序设计。

6. 对象数组。

对象数组将对象和数组结合到一起, 用一个类同时生成多个独立的对象。在本程序中敌人飞机有多架且分布不同位置, 每架又能产生多颗子弹, 管理飞机和子弹的位置、行走、是否击中我方飞机、是否被击中等就成了一个问题, 采用对象数组, 在一个for循环语句中就可实现。

用类生成数组实例确定长度:fj drfj[]=new fj[16], 再用构造函数生成数组中每个元素实例:drfj[i]=new f () , 通过下标使用对象数组中的元素。

7. 派生和继承。

篇4:《面向对象程序设计方法》实验教学大纲

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

中图分类号: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.

篇5:《面向对象程序设计方法》实验教学大纲

一、课程设计实验的基本内容和要求

1.选题范围

所选题目必须能够实现一个完整意义上的应用系统,但题目名称与具体功能不限,学生可根据自身的兴趣、特点等进行选题或由指导教师提供指导性选题。

2.选题要求

系统功能应较为多样化,具有一定的实用性或趣味性。同时要求所选题目在实现上必须运用以下知识点:菜单、工具栏、多重窗体、文件操作(可选)、图形操作(可选)、多媒体技术(可选)、数据库操作(可选)等。题目规模、难度适当。

3.参考选题

(1)设计一个五子棋游戏。

游戏说明:棋盘分为阴线和阳线,阳线为棋盘上的可见的横纵直线,阴线为棋盘上无实线相连的隐型斜线。在棋阳线和阴线的任意一条线上形成的有5个或5个以上的同色棋子不间隔地紧紧相连者为胜方。

基本要求:

 在开始编写程序以前,要完成对系统的分析,给出系统类和对象模型。 用C++的OO技术完成系统程序的设计,给出类成员的详细描述。

 程序中至少要定义两个类(例如:坐标position类,棋子chess类等),类中要有多个属性和方法。

 完成的程序界面要美观,能够完成五子棋的基本游戏功能(两人对战)。创新要求:在基本要求达到后,进行创新设计,完善与增加游戏的功能,例如悔棋功能。

(2)设计一个2维图形绘制程序。

说明:从点类开始构建几种图源(如直线、折线、圆、三角形、矩形),并能初步实现简单图形的组合,如构建一个五角星。

基本要求:

 用C++类的思想来完成程序的设计。

 在设计的过程中,建立清晰的类层次;

创新要求:在基本要求达到后,进行创新设计,如实现多种图形的组合。

(3)设计一个windows附件中所示的计算器。

基本要求:

 求利用面向对象的方法以及VC++的编程思想来完成系统的设计;

 要求在设计的过程中,对windows环境下的编程有一个基本的认识。

创新要求:在基本要求达到后,可进行创新设计,如增加计算器的函数功能。

(4)公司人事管理系统

基本要求:

 利用面向对象的编程思想以及C++的编程方法完成系统的设计;

 完成设计的具体内容:

某小公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。实现:(a)人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。(b)程序对所有人员有提升级别的功能

(c)月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销

员的报酬按该推销员当月销售额提成(d)销售经理既拿固定月薪也领取销售提成。

(e)能按姓名或者编号寻找、删除、更新、显示各类人员的信息

(5)模拟猜扑克牌大小游戏

基本要求:

 利用面向对象的编程思想以及C++的编程方法完成系统的设计;

该游戏的玩法和规则如下:玩法

②洗牌:每盘游戏开始之前,使扑克牌的排列顺序充分随机。

② 发牌:每局开始时,从未使用的扑克牌集合中顺序发给玩家5张扑克牌(明牌)。③ 猜点:从未使用的扑克牌集合中按顺序取出一张扑克牌(即庄家的暗牌),要求玩家将手中的第一张扑克牌和这张庄家的暗牌进行比较,确定哪张牌大?

④ 积分:玩家确定回答后,翻开被猜的扑克牌(暗牌变成明牌),同时根据玩家回答的正确与否显示相应的提示,并为玩家的游戏成绩积分。然后将这两张已经比较过的牌回收到已经使用过的扑克牌集合中,玩家手中的下一张扑克牌成为新的一张扑克牌。

⑤ 对玩家手中剩余的扑克牌顺序重复第③和④步操作,直至玩家手中不再有剩余的扑克牌时,一局游戏结束。

⑥ 如果未使用的扑克牌集合中的扑克牌数目多余10张,则从第②步自动开始进行本盘游戏的下一局。

⑦ 询问玩家是否继续进行下一盘游戏,如果继续,则从第①步开始进行新的一盘游戏。规则

① 积分规则:

• 猜中1次,积1分;猜错1次,不积分。

• 1局中连续猜中3次,除正常积分外奖励1分;连续猜错3次,罚1分。

• 1局全部猜中,除正常积分外奖励3分;1局全部猜错,罚3分。

• 玩家的最低积分为0,即不出现负分。

② 牌面大小比较规则:每张扑克牌的牌面由花色(梅花Club、方块Diamond、红心Heart和黑桃Spade)和牌点(A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K)组成。确定两张扑克牌牌面大小的规则有两条:

• 如果两张牌面的牌点不同,则牌面大小仅与牌点有关,而与牌面的花色无关。牌点的大小顺序为:2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K < A。• 如果两张牌面的牌点相同,则牌面大小仅与牌面的花色有关。花色的大小顺

序为:Club < Diamond < Heart < Spade。

(6)实现vector类和string类

基本要求:

vector和string均为c++标准库中的重要类,提供多个接口,请实现这些接口,其中vector请实现为模板类,两个类各自包含的接口如附件“string类vector类接口.doc” 4.课程设计报告要求

课程设计报告应包含以下八个内容。

1. 题目

课程设计题目。

2. 功能描述

对系统要实现的功能进行简明扼要的描述。

3. 概要设计

根据功能描述,建立系统的体系结构,即将整个系统分解成若干子功能模块,并用框图表示各功能模块之间的衔接关系,并简要说明各模块的功能。

4. 详细设计

详细说明各功能模块的实现过程,所用到的算法、技巧等。

5. 效果及存在问题

说明系统的运行效果(附上运行界面图片)、存在哪些不足以及预期的解决办法。

6. 心得体会

谈谈自己在课程设计过程中的心得体会。

7. 附录

附上各功能模块的主要代码。

8. 参考文献

列出各种参考文献,包括参考书目,论文和网址等。

二、课程设计的考核

根据系统设计和报告的质量评定成绩,系统设计占60%,报告占40%。优秀系统设计的标准如下:系统设计合理,有一定的实用性或趣味性,逻辑性强,界面友好;优秀报告的标准如下:层次清晰,文字流畅,重点突出。

四、其他

参考资料:

1.黄维通 等编著,《Visual c++ 面向对象与可视化程序设计》,清华大学出版社,2003.12

2.朱晴婷 等编著,《Visual c++ 程序设计—基础与实例分析》,清华大学出版社,2004.3

3.汪成为 等编著,《面向对象分析、设计与应用》,国防工业出版社

4.《面向对象程序设计》 刘振安主编 经济科学出版社

5.《Visual C++ 6.0实例教程》 门槛创作室 电子工业出版社

6.《Visual C++简明教程》 邓力编著 海洋出版社

7.《Visual C++ 6.0编程实例·技巧》 李国徽等编著 华中理工大学出版社

8.《深入浅出MFC》 侯俊杰著 电子版

9.http://.cn ── E海航标

10.http:// ── 程序家园

11.http://msdn.microsoft.com ── MSDN在线帮助

说明:

1. 根据各自的情况选择题目,单人完成。

2. 坚决禁止抄袭和从网上下载源代码,如有发现,一律不及格

篇6:《面向对象程序设计方法》实验教学大纲

教学目标:了解面向对象程序设计方法的基本原理及主要特点——抽象性、封装性、继承性、多态性。掌握类和对象的概念以及如何用类来解决具体问题并在类的基础上如何派生出新类,以及重载的概念和作用。

教学类型:在多媒体教室直观讲授,引导学生进行类的操作。教学内容:

复习上次课

5.5类的继承

Visual Basic.NET支持类的继承,允许用户定义一个类,作为其他类继承的依据,继承类能够继承,扩充基本类的属性和方法,继承类也可以重载基本类的一些方法。

例如,把窗体看成一个类,在Vissal Basic.NET中用户可以根据现有的窗体继承出一个新的窗体。其中已有类叫做基类(父类),继承的新类叫做派生类(子类)。

1、实现基本的继承

下面通过例子进一步说明为什么要使用继承。

要描述人和雇员,对于每一个人来说都有姓名、年龄、性别等信息,对于公司雇员有以上内容以外还有雇员的工作部门及薪水等信息。当分开来实现这两个类的时候,就会发现其实它们有许多相同之处。如果分开编写这两个类的代码,不仅编写效率低,而且程序代码也难以维护,所以最好的方法就是让它们使用一些相同的代码,此时继承就可以发挥作用了。使用继承,可以创建一个Person类(基类),它包含了name(姓名)、age(年龄)、sex(性别)等属性所有的共享代码。然后再创建employee派生类,这个类是由person类继承而来的,这样它们就可以自动地获得所有的公用代码了。

【例5.3】建立person类及它的派生类employee类。Public Class person

Public sname, Iage, ssex

Public Property name()As String

Get

Return sname

End Get

Set(ByVal value As String)

sname = value

End Set

End Property

Public Property age()As Integer

Get

Return Iage

End Get

Set(ByVal value As Integer)

Iage = value

End Set

呼伦贝尔学院—— 计算机科学与技术学院

End Property

Public Property sex()As String

Get

Return ssex

End Get

Set(ByVal value As String)

ssex = value

End Set

End Property End Class Public Class employee

Inherits person

Dim Ssalary As Single

Public Property salary()As Single

Get

Return Ssalary

End Get

Set(ByVal value As Single)

Ssalary = value

End Set

End Property

Sub Displayemployee()

Debug.WriteLine(“雇员的姓名:” & name)

Debug.WriteLine(“雇员的性别:” & sex)

Debug.WriteLine(“雇员的年龄:” & age)

Debug.WriteLine(“雇员的薪水:” & salary)

End Sub End Class Module Module1

Sub Main()

Dim aemployee As New employee()

aemployee.name = “王强”

aemployee.sex = “男”

aemployee.age = 25

aemployee.salary = 3600.0

aemployee.Displayemployee()

End Sub End Module

2、禁止继承

在默认状态下,创建的任何类都是可以用作基类,可由这个基类创建其他的类。但有时需要创建一个不被继承的类,这时可以在类的声明中使用NotInheritable关键字。

Public NotInheritable Class Class_name …… End Class

呼伦贝尔学院—— 计算机科学与技术学院

使用这个关键字后,其他代码都不能使用Inherits关键字来创建一个由这个基类继承二来的子类。

3、基类成员在派生类中的作用域

通过继承性创建子类时,新类将从父类获得所有Public 和 Friend方法、属性及变量。但在父类中声明的Private的任何内容都不能直接应用于新子类的代码中。

例如:可以在上例的person类中重写age方法,代码如下: Private Property age()As Integer

Get

Return Iage

End Get

Set(ByVal value As Integer)

Iage = value

End Set

End Property Age方法声明为private,所以employee类和其他代码都不能使用它。当然也有一个列外,就是New方法,构造函数方法必须在每一个子类中重新定义。

有时public和private并不够用,需要创建一个可以用于子类而不能用于客户代码的方法,此时就可以使用protected作用域。当某些内容声明为protected时,该元素就不能应用于类以外的代码,但可以应用于通过继承派生出的子类。

例如:若将person类当中的name、age、sex属性都声明为 Protected Property name()As String Protected Property age()As Integer Protected Property sex()As string 那么测试程序中的下列代码将不再有效: aemployee.name = “王强” aemployee.sex = “男” aemployee.age = 25 但示例中的name、age、sex属性可以应用于employee中的所有代码,因为它继承了父类。为设置属性,可以在employee中增加一个方法setperson():

Public Class employee

Inherits person

Dim Ssalary As Single Public Property salary()As Single

Get

Return Ssalary

End Get

Set(ByVal value As Single)

Ssalary = value

End Set End Property Sub setperson(ByVal n As String, ByVal a As Integer, ByVal s As String, ByVal c As Single)

name = n

age = a

sex = s

呼伦贝尔学院—— 计算机科学与技术学院

salary = c End Sub

Sub Displayemployee()

Debug.WriteLine(“雇员的姓名:” & name)

Debug.WriteLine(“雇员的性别:” & sex)

Debug.WriteLine(“雇员的年龄:” & age)

Debug.WriteLine(“雇员的薪水:” & salary)

End Sub End Class Module Module1

Sub Main()

Dim aemployee As New employee()

aemployee.setperson(“王强”, 25, “男”, 3600.0)

aemployee.Displayemployee()

End Sub End Module 5.6重载方法

VB.NET具有重载方法的功能,可以利用重载来实现多态性。重载是可以在一个类中可多次声明相同名称的一种方法,只要每个声明都有不同的参数列表即可。其中参数列表不同指的是参数的数据类型不同或参数的个数不同。例如:Public Sub show(ByVal x As Integer, ByVal y As Integer)。

上面show方法的参数列表的参数的类型为(Integer, Integer)。为了重载这个方法,必须使用不同的参数列表,例如(Double,Integer)或(Integer,Double)都可以。重载不能只是通过改变函数的返回值来实现,而是要求实际参数的数据类型不同。

Public Class sum

Public Function add(ByVal a As Integer, ByVal b As Integer)As Integer

Return a + b

End Function

Public Function add(ByVal a As Double, ByVal b As Double)As Double

Return a + b

End Function End Class Module Module1

Sub main()

Dim NO1, NO2 As New sum

Debug.WriteLine(NO1.add(5, 6))

Debug.WriteLine(NO2.add(2.5, 3.6))

End Sub End Module

学生练习:声明一个Shape(形状)基类,在此基础上派生出Rectangle和Circle类,(1)根据给出的矩形的左上角和右下角的坐标计算该矩形的面积;(2)根据给出的圆心坐标计算出圆的面积。

篇7:《面向对象程序设计方法》实验教学大纲

经过这几周对Java面向对象程序设计的学习,让我更加了解到Java学习的重要性。

在实验课上,我们完成多个实验,在这个阶段的学习中,我从认识到熟悉,而后到能够自主运用。通过对Java的了解,我发现它确实有很多方便之处,它集抽象性、封装性、继承性和多态性于一体,实现了代码重用和代码扩充,提高了软件开发的效率。对于我们这个专业来说学好Java语言是很重要的,所以在实验的过程中我都尽力理解java编程思想、掌握基本技巧,尽量学到最多的知识。

学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能,Java面向对象程序设计是一门实践性比较强的课程,在实际中,我们必须把理论和实践结合起来。在实验中,我们理解理论课上的知识,然后运用到实际的操作中,我们必须在现有的理论的基础上,进行实践。多次实验后,也让我看到了现在学习的一个很大弱点:只听不练,永远不会熟练运用;空记技巧,忽略思想,会在多变的习题中十分无奈。

Java思想:Java是一门面向对向语言,他定义一切都是对象

面向对象,就是面对现实;

现实中的一切都是对象,他们有分类,就产生了“类”;

他们有不同,类和类之间的不同,使用类来区分;

同一个类中不同的对象的区别,使用成员区分。所以,面向对象的内部逻辑是分类。

面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等

原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就变成为“类”。这种集合上定义了操作的东西利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性可事半功倍。

面向对象的编程思想就要想近世代数的分析思想,首先要确定“论域”,即工程所涉及到的所有的“对象”,然后要分类处理,把隶属同一类别的对象集合在一起(做成一个集合),定义他们之间的运算性质及可以进行的操作,这样就构建了一个类,当然以后用到这个类的对象时都要通过已经定义了的操作来完成各项功能,这就是常要求的类的“类的成员变量要通过共有函数来操作”。

我想真正的面向对象编程思想不应该是编程思想,应该是面向对象的分析方法才对!

我的理解:

1、将分析过程为抽象的过程:简言之:分成多个小问题(组成部分),直到无法再细;

2、对每个对象(小问题)进行分析,抽象,提取处共同的内容(数据成员和操作方法),3、有相似的对象的,构造基类;再有基类派生出各个确定的对象(小问题);

4、解决问题的过程就是操作这些对象的过程。

我的理解:

与实际生活联系起来。

将要处理的„问题‟抽象成一个或多个„事件‟

找一个地方使用我的智慧

1。了解系统的功能。列举出它的对外接口,即对于使用者来说它有什么功能。把这整个系统作为一个对象。

2。环境。系统不是运行在真空中的,操作系统等外部环境都可能会影响它。所以把环境也作为一个大的对象。

3。内部。在系统的内部,一般都比较复杂,一般的做法是规定一个粒度,枚举出该粒度上所有的物体。比如说人体,如果在器官的粒度上,就有心,肝,肺。而小于该粒度的物体(或称对象),比如血细胞,就忽略,作为其它物体(或称子系统的内部对象)。

4。子系统。不断缩小粒度,沿用步骤1~3,直到不能再抽象为止。

5。无形的物体。一个完整的互连的系统需要许多无形的物体,比如消息等了,一般这样的对象比较难发现。当你发现各个子系统无法正确合作或理顺关系时,试着加入一些辅助对象。一切都是为了让人明白,有能让机器理解的思想

我想分析和抽象能力的高低是个关键,首先要从问题域分析和抽象出准确的对象模型,再根据这些模型进行处理,当然在过程种少不了楼上前辈们说的一些思想和细节,但是别忘了,我们的目的是解决问题,不要为了面向对象而面向对象!

我想分析和抽象的能力对这个问题是个关键。首先要在问题域仔细分析、抽象得到相关的对象模型,然后才是相应的设计。可是面向对象只是我们解决问题一种思想,切不可忘了问题本身,弄成为了面向对象而面向对象了!当然过程种少不了楼上一些前辈说的思想和细节了。

耕具我多年的实践:面向对象包括两个思想:

从大往小想,从小往大做

从难往易想,从易往难做

同意一下观点-----能深入浅出,真高手也!

真正的面向对象编程思想就是忘掉一切关于计算机的东西,从问题领域考虑问题, :-)把问题从大到小都抽象成对象(指针只是对象的使用形式),在设计和编写程序的时候把你设计的对象合理的编排组合就是面向对象编程了。

面向对象,就是面对现实;

现实中的一切都是对象,他们有分类,就产生了“类”;

他们有不同,类和类之间的不同,使用类来区分; 同一个类中不同的对象的区别,使用成员区分。

所以,面向对象的内部逻辑是分类。

对象:

对象是人们要进行研究的任何事物,从简单的一个小分子到复杂的汽车飞机都可以看做对象,只是有时对象要根据人们研究问题的需要来确定,对象不一定是具体的,有时也可以表示抽象的规则或计划。

类:

篇8:《面向对象程序设计方法》实验教学大纲

目前,大部分高校资源环境类专业都开设了计算机程序设计课程,面向对象分析设计(OOA、OOP)是现代计算机程序设计的主流,但由于面向对象程序设计知识难点较多,直接开设则学生难以掌握,所以高校一般以一门面向过程程序设计语言作为入门,并进一步开设一门面向对象程序设计课程[3]。

根据笔者的实际教学经验,学生在学习面向对象程序设计(以C++作为程序设计语言,以VC6.0作为可视化编程环境)课程时主要存在以下问题:(1)对于指针的理解不够深入;(2)对于面向对象特性理解困难(如封装、继承、多态),无法进行面向对象分析和面向对象设计。对于面向对象特性理解困难,原因可能有2点:(1)资源环境类专业面向对象程序设计课程一般安排课时相对较少,由于学时的限制,教学时难以对课程内容进行全面深入地讲述,授课速度较快;面向对象程序设计课程涉及概念比较抽象、知识难点较多。(2)学生在学习了面向对象程序设计后,容易出现思维定势,在转向面向对象程序设计学习时,容易出现理解上的困难。该文提出基于程序结构演化的面象对象程序设计教学方法,探索易于学生深入理解面向对象程序设计的教学方法。

1 常规面向对象程序设计教学方法及其存在问题

目前,在常规的教学方法中,面向对象程序设计讲解过程如图1所示。

在介绍完C++语言语法之后,即开始面向对象机制和面向对象特性的介绍,一般先介绍概念,然后举现实世界中的例子来说明概念,最后用多个较为简单的示例代码来演示、讲解概念。这种教学方法存在以下问题:(1)学生对于概念的理解还存在于现实世界,无法将其抽象为面向对象程序设计方法;(2)由于课程演示的示例程序相对都非常简单,学生通过这些代码无法掌握针对具体问题的面向对象分析方法,在实际编程时,往往难以下手,无法将面向对象方法应用到软件设计中。这些问题导致学生难以继续深入学习和应用。

2 基于程序结构演化的面象对象程序设计教学方法

为了克服常规面各对象程序设计存在的问题,提出基于程序结构演化的面象对象程序设计教学方法,该方法包括以下几个要点。

(1)讲述面向对象的概念时,以代码的演化方式来逐渐推递出面向对象的概念。图2是一个课堂讲述类封装特性的程序代码演化实例。可以看到,程序的开发方式在于功能集成,由单一的数据和控制的独立,逐渐演变为将某些数据和控制按照功能实现过程化为某个函数[4]。随着功能化的进一步加强,于是又将某些相对联系比较紧密的函数集成到一类,这些联系紧密的变量和函数,恰恰可以程序化地描述现实世界具体对象的属性和功能。这种程序结构演化讲解方法非常符合人们记忆和认识客观世界的习惯和规律,从而在课程教学中具有很好的效果。

(2)在针对具体问题时,先介绍学生易于理解的面向过程方法,再介绍面向对象分析和设计方法,对比这些程序设计思路,并分析其优缺点。图3是一个面向过程与面向对象程序设计对比教学实例,以一个分数运算问题演示2种程序设计方法的异同。

在实际课堂教学时,可以先让学生对问题进行分析,让其思考以下问题:问题泛及那些数据?这些数据需要用什么数据结构存储比较合适?要解决问题,需要实现那些功能?这些功能之间是否有相同的操作?例如分类运算,需要存储分子、分母以及这个分数正负符号(也可以通过分子、分母的正负来存储)。分数与分数、浮点数、整数之间需要实现加、减、乘、除运算;在这些运算过程有一些相同的功能操作,比如通分、化简等。Á

然后用学生比较容易理解和熟悉的面向过程方法来求解问题。在求解完成后,学生对问题的理解也清晰起来。再分析面向过程方法的不足,例如分数运算面向过程方法没有办法进行“+”、“*”这样的运算符重载,运算不便;数据与功能分离,不清楚功能与数据之间的联系;内部函数没有办法限制访问[5]。

最后让学生用面向对象分析设计方法来求解问题;因为问题已经用面向过程方法求解完成,所以学生只需要将重点放在从面向过程方法向面向对象方法转换上来就可以了,在转换过程,学生加深了对面向对象特性的理解,对面向对象编程思想也会有很好的认识。

(3)选择几个相对较为复杂的实际工程贯穿整个课程教学,根据课程进度逐渐将工程问题复杂化。例如在讲授完C++语言语法之后就可以让学生思考一个小学的教学管理系统需要管理哪些数据,如何实现那些功能;在介绍类和对象时,让学生分析这个系统中的“小学生”、“教师”角色,并用类进行设计;在介绍继承时,可以多引入一些角色,分析这些角色之间的共性,确定继承关系;在介绍多态时,可以让学生实际编写程序,分析各类的函数是否需要实现重载或虚函数。这样学生学完这门课程等于做了一个小工程,面向对象分析和设计方法也在实践中掌握。

3 结论

资源环境类专业学生在学习面向对象程序设计课程时,对于面向对象特性理解困难,难于理解面向对象程序设计的思想,无法进行面向对象分析和面向对象设计。因此,提出了基于程序结构演化的面象对象程序设计教学方法,主要包括:讲述面向对象的概念时,以代码的演化方式来逐渐推递出面向对象的概念;选择几个相对较为复杂的实际工程贯穿整个课程教学,培养学生面向对象分析能力;在针对具体问题时,先介绍学生易于理解的面向过程方法,再介绍面向对象分析和设计方法,对比教学更利于学生理解面向对象程序设计思想。

参考文献

[1]李师贤,李文军,周晓聪,等.面向对象程序设计基础[M].2版.北京:高等教育出版社,2005.

[2]钱能.C++程序设计教程[M].北京:清华大学出版社,1999.

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

[4]MEYERS S.Effective c++中文版[M].2版.侯捷,译.武汉:华中科技大学出版社,2001.

上一篇:建筑公司会议管理办法下一篇:政治高考命题趋势