修练8年C++面向对象程序设计之体会

2024-04-20

修练8年C++面向对象程序设计之体会(通用9篇)

篇1:修练8年C++面向对象程序设计之体会

《面向对象程序设计基础》教学大纲

课程编号:

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

课程英文名称: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类的输入和输出方法;掌握文件的输入和输出。

难点:掌握文件的输入和输出。

篇2:修练8年C++面向对象程序设计之体会

endl 换行并刷新输出流

setw(n)设置字段位数为n hex,oct,dec 十六进制,八进制,十进制表示 setfill 定义填充字符

setprecision 定义浮点数的精度 left,right 左对齐,右对齐

showpoint 强制显示小数点以及全部尾部0 C++通过给常量命名的方式定义常量:

const<数据类型名><常量名>=<表达式> 用const定义的标识符常量时,一定要对其初始化。在说明时进行初始化是对这种常量置值的唯一方法,不能用赋值运算符对这种常量进行赋值。函数声明的一般形式为

函数类型 函数名(参数表)函数模板的定义

template

函数定义

例子:template T max(T a,T b){ return(a>b)? a:b;} 定义函数模板时可以使用多个类型参数,每个类型参数前面只需加上关键字typename或class,用逗号分隔:

template 例子:template T1 max(T1 a,T2 b){ return(a>b)? a :(T1)b;} 有默认参数的函数:实参与形参的结合是从左至右进行的,因此指定默认值的参数必须放在形参列表中的最右端 引用

定义

对变量起另外一个名字(别名alias),这个名字称为该变量的引用。<类型>&<引用变量名> = <原变量名>;

其中原变量名必须是一个已定义过的变量。如:

int

max;

int &refmax=max;refmax并没有重新在内存中开辟单元,只是引用max的单元。max与refmax在内存中占用同一地址,即同一地址两个名字。对引用类型的变量,说明以下几点:

1、引用在定义的时候要初始化

2、对引用的操作就是对被引用的变量的操作。

3、引用类型变量的初始化值不能是一个常数。

4、一旦引用被声明,它就不能再指向其它的变量。

5、对引用的初始化,可以用一个变量名,也可以用另一个引用。

6、引用同变量一样有地址,可以对其地址进行操作,即将其地址赋给一指针。当&m的前面有类型符时(如int &m),它必然是对引用的声明;如果前面无类型符(如cout<<&m),则是取变量的地址。

7、对常量(用const声明)的引用使用如下方式: int i=5;const int &a=i;内联函数定义的一般格式为:

inline <函数值类型><函数名>(<参数表>){ <函数体> } 作用域运算符

::a表示全局作用域中的变量a。注意:不能用::访问函数中的局部变量

new运算从堆中分配一块与<类型>相适应的大小为<元素个数>的数组存储空间,若分配成功,将这块存储空间的起始地址存入<指针变量名>,否则置<指针变量名>的值为NULL(空指针值,即0)。new的使用格式为:

<指针变量名>=new <类型>[<元素个数>];delete运算符用来释放<指针变量名>指向的动态存储空间。使用格式如下:

delete <指针变量名> 或

delete[] <指针变量名>

第2章 面向对象基本概念

面向过程编程与面向对象编程的区别:

面向过程编程先确定算法,再确定数据结构; 面向对象编程先确定数据结构,再确定运算。类定义:

class <类名> { <访问控制符>: <成员函数的声明> <访问控制符>: <数据成员的声明> };<成员函数的实现> 若在类体外实现,则需要使用作用域运算符“::”,用它来标识某个成员函数是属于哪个类的,其定义格式如下:

<函数值类型><类名>::<成员函数名>(<参数表>){ <函数体> } 类外访问对象中的成员可以有3种方法: 通过对象名和成员运算符访问对象中的成员。<对象名>.<公有成员> 通过指向对象的指针变量访问对象中的成员。<对象指针名>-><公有成员> 通过对象的引用访问对象中的成员。析构函数其定义格式如下: <类名>::~<类名>(){

<函数体> } 在一般情况下,调用构造函数与声明对象的顺序相同,而调用析构函数的次序正好与创建对象的顺序相反。三种构造函数

Box();

//无参构造函数 Box(int h,int w ,int len):height(h),width(w),length(len){}

//带参构造函数 复制构造函数定义

<类名>(<参数表>);

<类名>(const <类名>&<对象名>)Box(const Box& b);//复制构造函数

复制构造函数只有一个参数,并且是对同类对象的引用。

静态成员是类的所有对象共享的成员,而不是某个对象的成员,它在对象中不占存储空间,是属于整个类的成员。静态成员定义格式如下: static <静态成员的定义>;不能用参数初始化表对静态数据成员初始化,也不能在构造函数体内初始化,静态数据成员只能在类体外进行初始化。静态数据成员初始化格式如下:

<数据类型><类名>::<静态数据成员名>=<值>;在类的成员函数中可以直接访问该类的静态数据成员,而不必使用成员访问运算符或类名限定修饰符。

在类外必须使用成员访问运算符或类名限定修饰符访问公共静态数据成员。<对象名>.<静态成员> <类名>::<静态成员> 静态成员函数就是使用static关键字声明的成员函数。

静态成员函数可以直接访问该类的静态成员,但不能直接访问类中的非静态成员。

第3章 详解对象

对象指针就是用于存放对象数据起始地址的变量。声明对象指针的一般格式为: <类名> *<对象指针名>;对象指针的初始化一般格式为: <数据类型> *<对象指针名>=&<对象名>;<对象指针名>=&<对象名>;通过指针访问对象成员一般格式如下: <对象指针名>-><公有成员>

boxp->volumn();(*<对象指针名>).<公有成员>

(*boxp).volumn();this指针是一个特殊的隐含指针,它隐含于每一个成员函数(静态成员函数除外)中,也就是说,每个成员函数都有一个this指针参数。

this指针指向调用该函数的对象,即this指针的值是当前被调用的成员函数所在的对象的起始地址。

复制构造函数中隐含使用this指针: TAdd(const TAdd& p){

this->x=p.x;this->y=p.y;

cout<<“copy constructor.”<

x

this->x

(*this).x this指针是一个const指针,成员函数不能对其进行赋值。

静态成员中不能访问this指针,因为静态成员函数不从属于任何对象。指向非静态数据成员的指针一般形式为:

数据类型名

*指针变量名;

定义指向公有成员函数的指针变量的一般形式为: 数据类型名(类名:: *指针变量名)(参数列表);

使指针变量指向一个公有成员函数的一般形式为:

指针变量名=&类名::成员函数名 常量定义格式如下: const <数据类型名><常量名>=<表达式>;常对象是其数据成员值在对象的整个生存期间内不能被改变的对象。const <类名> <对象名>(<初始化值>);<类名> const <对象名>(<初始化值>);常成员函数

通过常成员函数来引用本类中的常数据成员。<数据类型><函数名>(<参数表>)const;

声明一维对象数组的一般格式为: <类名><数组名>[<下标表达式>] 6 第4章 运算符重载

重载为类的成员函数格式如下: <类名> operator <运算符>(<参数表>){ 函数体 } A operator +(A &);++为前置运算符时,它的运算符重载函数的一般格式为: operator ++()++为后置运算符时,它的运算符重载函数的一般格式为: operator ++(int)

运算符重载函数不能定义为静态的成员函数,因为静态的成员函数中没有this指针。

友元声明以关键字friend开始,只能出现在被访问类的定义中。具体格式如下:

friend <函数值类型><函数名>(<参数表>);friend class <类名>;

友元函数可以访问该类中的所有成员(公有的、私有的和保护的)

通常使用友元函数来取对象中的数据成员值,而不修改对象中的成员值,保证数据安全。

重载为类的友元函数语法形式

friend <函数值类型> operator <运算符>(<参数表>){<函数体>;} ++为前置运算符时,它的运算符重载函数的一般格式为: A operator ++(A &a)++为后置运算符时,它的运算符重载函数的一般格式为: A operator ++(A &a, int)

重载提取运算符的一般格式为:

friend istream & operater >>(istream &, ClassName &);istream & operater >>(istream &is, ClassName &f){„} 重载输出(插入)运算符的一般格式为:

friend ostream & operater >>(ostream &, ClassName &);ostream & operater >>(ostream &is, ClassName &f){„} 重载类型转换运算符函数格式: operator〈返回基本类型名〉(){

„„

return 〈基本类型值〉 } 类类型转换函数只能是成员函数,不能是友元函数。转换函数的操作数是对象。8 第5章 继承与派生

派生是指由基类创建新类的过程。class A { int i;//基类成员};class B:public A //A派生了B,B继承了A,//B自动拥有A的成员 {int j;//定义派生类的新成员};派生类的定义格式如下:

class <派生类名>:<继承方式><基类名> { <派生类新定义成员>};派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数,它们在派生类中的访问属性由继承方式控制。三种继承方式下派生类中基类成员的访问控制权限

无论是哪种继承方式,基类的私有成员在派生类中都是不可被访问的。只能通过基类的成员函数访问基类的私有数据成员。

解决的办法是通过成员初始化表来完成,在成员初始化表中可以显式调用基类构造函数。

<派生类名>(<总参数表>):<基类名>(<参数表1>),<对象成员名>(<参数表2>){ <派生类数据成员的初始化> };构造函数调用顺序为:基类的构造函数→对象成员构造函数→派生类的构造函数。

析构函数调用顺序刚好相反。当基类中没有显式定义构造函数,或定义了无参构造函数时,派生类构造函数的初始化表可以省略对基类构造函数的调用,而采用隐含调用。当基类的构造函数使用一个或多个参数时,派生类必须定义构造函数,提供将参数传递给基类构造函数的途径。这时,派生类构造函数的函数体可能为空,仅起到参数传递作用。

如果在基类中既定义了无参构造函数,又定义了带参构造函数,则在定义派生类构造函数时,既可以包含基类构造函数和参数,也可以不包含基类构造函数。如果在一个派生类中要访问基类中的私有成员,可以将这个派生类声明为基类的友元。

友元关系是不能继承的。B类是A类的友元,C类是B类的派生类,则C类和A类之间没有任何友元关系,除非C类声明A类是友元。多继承派生类的定义

class <派生类名>:<继承方式><基类名1>,„,<继承方式><基类名n> {<派生类新定义成员>};多继承派生类的构造函数

<派生类名>(<总参数表>):<基类名1>(<参数表1>),„,< 基类名n>(<参数表n>){ <派生类数据成员的初始化> };<总参数表>必须包含完成所有基类初始化所需的参数 构造函数调用顺序是:先调用所有基类的构造函数,再调用对象成员类构造函数,最后调用派生类的构造函数。

处于同一层次的各基类构造函数的调用顺序取决于定义派生类时所指定的基类顺序,与派生类构造函数中所定义的成员初始化列表顺序无关。如果有多个成员类对象,则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始化表中的顺序。

析构函数的调用顺序与构造函数的调用顺序相反。虚基类

虚基类的定义格式为:

class <派生类名>:virtual <继承方式><共同基类名>;【说明】引进虚基类后,派生类对象中只存在一个虚基类成员的副本。虚基类的初始化与一般多继承的初始化在语法上相同,但构造函数的调用顺序有所不同,规则如下:

先调用虚基类的构造函数,再调用非虚基类的构造函数。若同一层次中包含多个虚基类,其调用顺序为定义时的顺序。若虚基类由非虚基类派生而来,则仍按先调用基类构造函数,再调用派生类构造函数的顺序。

如果在虚基类中定义了带参数的构造函数,则要在其所有派生类(包括直接派生类或间接派生类)中,通过构造函数的初始化表对虚基类进行初始化。

第6章 多态性与虚函数

类型兼容规则

类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。

类型兼容规则中所指的替代包括以下情况: 派生类的对象可以赋值给基类的对象。派生类的对象可以初始化基类的引用。

派生类的对象的地址可以赋值给基类的指针变量。在替代之后,派生类对象就可以作为基类的对象使用,但只能访问从基类继承的成员。

只能用派生类对象对其基类对象赋值,而不能用基类对象对其派生类对象赋值。同一基类的不同派生类对象之间也不能赋值。虚函数

虚函数就是在基类中被关键字virtual说明、并在一个或多个派生类中被重新定义的成员函数。

声明虚函数的格式如下:

virtual <函数值类型><函数名>(<参数表>);在派生类中重新定义虚函数时,其函数原型包括返回类型、函数名、参数个数、类型和顺序,都必须与基类中的原型相同。一个函数一旦被声明为虚函数,则无论声明它的类被继承了多少层,在每一层派生类中该函数都保持虚函数特性。因此,在派生类中重新定义该函数时,可以省略关键字virtual。实现动态的多态性时,必须使用基类类型的指针变量或对象引用,并使其指向不同的派生类对象,并通过调用指针或引用所指向的虚函数才能实现动态的多态性。可将类簇中具有共性的成员函数声明为虚函数,而具有个性的函数没有必要声明为虚函数。但是下面的情况例外: 静态成员函数不能声明为虚函数。构造函数不能是虚函数。

内联成员函数不能声明为虚函数。析构函数可以是虚函数。虚析构函数

虚析构函数的声明格式如下:

virtual ~<类名>();如果一个类的析构函数是虚函数,那么,由它派生的所有子类的析构函数也是虚函数。

纯虚函数用virtual声明,没有任何实现、必须由派生类覆盖该函数提供实现 纯虚函数的声明格式为:

virtual <函数值类型><函数名>(<参数表>)=0;包含一个或多个纯虚函数的类称为抽象类。

如果派生类没有实现基类中的所有纯虚函数,派生类也是抽象类。抽象类无法实例化,即不能创建抽象类的对象。第7章 输入输出

iostream:I/O流类库的最主要的头文件,包含了对输入输出流进行操作所需的基本信息,还包括cin、cout、cerr和clog共4个流对象。fstream:用于用户管理的文件的I/O操作。strstream:用于字符串流I/O。

stdiostream:用于混合使用C和C++的I/O操作。iomanip:使用格式化I/O时应包含此头文件。

用setf函数设置状态标志,其一般格式如下:

long ios::setf(long flags)清除状态标志

用unsetf函数清除状态标志,其一般格式如下: long ios::unsetf(long flags)用函数flags取状态标志有两种形式,其格式分别如下: long ios::flags()

//返回与流相关的当前状态标志值 long ios::flags(long flag)//将流的状态标志值设置为flag,并返回设置前的状态标志值。以上三组函数必须用流类对象(cin或cout)来调用,其格式如下: <流对象名>.<函数名>(ios::<状态标志>)cout.setf(ios::showpos);cout.setf(ios::scientific);cout.setf(ios::showpos| ios::scientific);设置输出宽度函数有两种形式,其格式分别如下:

int ios::width(int len)

int ios::width()第一种形式是设置输出宽度,并返回原来的输出宽度;

第二种形式是返回当前输出宽度,默认输出宽度为0。只对其后的第一个输出项有效。

填充字符的作用是当输出值不满输出宽度时用填充字符来填充,默认填充字符为空格。它与width()函数配合使用,否则没有意义。设置填充字符函数有两种形式,其格式分别如下:

char ios::fill(char ch)

char ios::fill()第一种形式是重新设置填充字符,并返回设置前的填充字符; 第二种形式是返回当前的填充字符。

设置浮点数输出精度有两种形式,其格式分别如下:

int ios::precision(int p)

int ios::precision()第一种形式是重新设置输出精度,并返回设置前的输出精度; 第二种形式是返回当前的输出精度。默认输出精度为6 用get函数读入一个字符(1)不带参数的get函数

cin.get()用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符。

若遇到输入流中的文件结束符,则函数返回文件结束标志EOF。(2)有一个参数的get函数

cin.get(ch)用来从输入流中读取一个字符,赋给字符变量ch。读取成功返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。3)有三个参数的get函数

cin.get(字符数组/字符指针,字符个数n,终止字符)从输入流中读取n-1个字符,赋给指定的字符数组(或字符指针指向的数组)。如果在读取n-1个字符之前遇到指定的终止字符,则提前读取结束。如果读取成功返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。用getline函数读入一行字符

cin.getline(字符数组(或字符指针),字符个数n,终止字符)从输入流中读取一行字符,其用法与带3个参数的get函数类似。eof函数

无参函数,表示文件结束。

从输入流读取数据,如果到达文件末尾(遇文件结束符),返回非零值(真),否则为0(假)。

while(!cin.eof())peek函数

无参函数,表示“观察”,观测下一个字符。

返回值是当前指针指向的当前字符,但只是观测,指针仍停留在当前位置,并不后移。

如果要访问的字符是文件结束符,则函数值是EOF。

c=cin.peek(); putback函数

将前面用get或getline函数从输入流中读取的字符ch返回到输入流,插入到当前指针位置,以供后面读取。

控制符不属于任何类成员,定义在iomanip头文件中 设置输入/输出宽度setw(int)用整型参数来制定输入/输出域的宽度。使用时只对其后一项输入/输出有效。当用于输出时,若实际宽度小于设置宽度时,数据向右对齐,反之则按数据的实际宽度输出。

当用于输入时,若输入的数据宽度超过设置宽度时,超出的数据部分被截断而被作为下一项输入内容。

设置输出填充字符setfill(char)与ios::fill相同,常与setw(int)联合使用,从而向不满设置输出宽度的空间填入指定的字符,不设置则填空格。设置后直至下一次设置前一直有效。参数可以是字符常量或字符变量。

设置输出精度setprecision(int)指明输出实数的有效位数。

参数为0时,按默认有效位数6输出。

在以fixed形式和scientific形式输出时参数为小数位数。

setiosflags(ios::fixed)用定点方式表示实数。

setiosflags(ios::scientific)用科学记数法方式表示实数。

如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。

如果setprecision(n)与setiosflags(ios::scientific)合用,可以控制科学记数法中尾数的小数位数。

setiosflags(ios::left)输出数据左对齐 setiosflags(ios::right)输出数据右对齐

设置输入/输出整型数数制dec、hex和oct。控制换行的控制符endl

代表输出单字符“”的控制符ends open()函数的原型在fstream中定义。其原型为:

void open(char *filename,int mod,int access);其中第一个参数是用来传递文件名;第二个参数的值决定文件的使用方式;第三个参数的值决定文件的访问方式。

篇3:修练8年C++面向对象程序设计之体会

会计成本核算是一种企业活动, 主要是指企业把生产或者服务的过程中产生的费用收集在一起, 按照企业的有关规定或者计算的方法对接下来企业的资金去向情况进行合理安排的一种活动。企业的会计成本核算如果没有问题, 有助于与企业资源的优化配置, 企业经营的好坏, 资金的去向, 今后发展的方向, 在一定程度上都由有企业的会计成本核算所反映出的。由于企业社会各方面的因素影响, 会计成本核算中存在着许多问题, 阻碍的企业的发展步伐。

2 会计成本核算的重要性

对企业的会计成本进行核算, 可以了解企业的发展运营的情况, 实现资源的优化配置, 保证生产经营的顺利进行, 降低资金的消耗, 使企业在激烈的竞争中取得更多的经济效益。

通过对企业会计成本的核算, 企业管理者可以更好地了解企业的发展情况, 从而根据实际情况对企业的生产经营结构进行调整, 降低生产成本, 促进企业战略的全面、有效实施, 保证企业在同类竞争中取得胜利。

企业的会计成本核算的情况会影响企业的经营成果的分配, 如果企业的会计成本核算存在问题, 企业的经营投入与成本投入都会受到影响, 这样企业的经济利益也会受到的影响, 对企业未来的发展产生负面作用。

3 会计成本核算中的问题

3.1 会计成本核算的内容不全面

企业在进行成本核算的过程中, 往往将固定有形资本进行核算, 而忽视其那些对企业有着极其重要影响的无形资本。随着经济的不断变化发展, 企业要想在竞争激烈的市场中得以长久生存, 就必须做好知识与信息资源的积累, 这些都将作为无形资本影响着企业的发展变化, 所以在进行成本核算的同时, 不仅仅要考虑固定有形的资本, 更不能忽视无形资本。与此同时, 还要注重企业在发展前期的经济资本投入, 总的来说, 企业在进行资本核算时, 必须考虑到多方面的影响因素, 及时发现核算中所存在的不足, 然后制定相应的解决措施, 以避免影响给企业带来不必要的损失与影响。

3.2 会计成本核算的方法不科学

会计人员在进行会计成本核算的同时, 大多数的会计人员都是凭借以往的经验进行成本计算, 或者是根据其他会计行业的成本计算方式进行核算, 并不能够真正意义上从客观实际的需要出发, 这样不仅仅导致计算出来的成本核算失去了原本的真实性, 更加影响企业的长久发展, 影响经济效益。

3.3 会计成本核算的相关制度落实不到位

每个企业内部都有其独特的管理方式与自我完整的一套成本核算理念, 但是往往在真正实施的过程中却不能有效的落实, 工作人员在进行核算时由于某种原因不能按照相应的制度去执行, 这就大大影响了企业的成本核算质量, 所以, 必须引起足够的重视, 保证在进行成本核算时, 一些相关的管理制度得到有用的发挥并落实到每一个成本核算中, 强有力的制度落实才是保证成本核算的根本。

3.4 对会计成本核算缺少监督和管理

会计成本核算时主要从三个方面进行核算, 事前, 事中, 事后三个阶段。每个阶段所产生的问题都必须认真的进行统计, 严格的按照国家规范, 方针政策进行核算, 在实际核算中, 必须采取一些强有力的管理措施, 完善监督管理体系, 在以往的成本核算过程中, 往往因为缺少有效的管理监督, 而导致成本核算与实际生产成本不符, 这就大大造成了严重的资金浪费等现象的出现, 对此, 必须加强核算的监督管理。

3.5 会计成本核算的工作人员素质较低

会计成本核算人员, 在进行企业成本核算时, 往往由于缺乏专业的理论基础知识, 或是素质相对较低, 从而给企业带来极其严重的恶劣影响, 进而失去了在竞争中的有利地位, 有的甚至将对公司造成无法弥补的损失, 领导者找不到可以依托的有利条件进行决策上的解决, 进而影响企业的发展。

4 会计成本核算的解决策略

4.1 对核算的内容作出全面的规定

企业在对会计成本核算时, 要明确规定核算的内容, 保证核算结果的准确、全面, 完善核算的内容, 是现代经济发展和全球化的需要, 改变传统的核算内容, 关注企业的长远利益。同时, 随着经济的发展, 企业要对核算的内容进行适当的整改, 企业要对有形资产和无形资产, 前期投入, 经营过程中以及后期全面进行核算, 保证企业的效益不受到影响, 能更好的在市场竞争中发展和立足。

4.2 采用创新的核算方法

企业在采用单一的核算方法时, 可以向其他企业借鉴经验, 学习别人的核算方式, 并根据自身的实际情况加以改进, 创造出适合自己的核算方法。会计成本的核算方法有很多种, 它们的使用方法不同, 所涉及的范围也不同, 这就需要企业管理者, 根据自己的产品、公司的服务发展等情况, 合理的做出选择, 选择那些稳定性高, 灵活可靠的会计成本核算方法, 保证核算工作的顺利开展, 有效进行。

4.3 进一步完善会计成本核算的相关制度

完善的会计成本核算制度, 需要有效的落实管理, 才能起到作用。在落实会计成本核算制度时, 要落实到每个人, 在核算过程中, 要求工作人员之间相互监督, 相互督促, 不能做形式工作, 落实责任制, 谁出问题, 谁负责, 并且严格执行惩罚措施, 只有这样, 工作人员才会更加尽心尽责, 做好会计成本核算工作, 并保证其准确性和可靠性, 为公司的管理人员提供科学的决策依据。

4.4 建立相应的会计成本核算监管部门

企业根据国家的规章制度, 制定完整的会计成本核算体系, 并下发到会计成本核算部门, 要求每一名工作人员认真学习, 同时, 要建立相应的监督管理部门, 对核算的过程和结果进行检查, 对于出现错误的人员要严格处理, 防治类似现象的发生, 保证企业资金的合理运行, 减少浪费情况的出现。

4.5 提高核算人员的专业素质

就我国目前现阶段而言, 我国大部分会计行业的从业人员相对素质都不高, 专业基础及其理论知识并不是很扎实, 大多数人员都是凭借经验进行成本核算, 有些人员甚至是为了从中获取利益, 而不惜做假, 扰乱企业的正常生产经营活动, 对此, 在进行企业成本核算的同时, 必须加强对从业人员专业知识, 职业道德等能力的测试, 以保证人员队伍的素质与质量, 为企业的发展积累有力的核心力量。

4.6 完善企业各项收支的项目管理工作

会计在进行成本核算的过程中, 往往得不到预期想要的核算效果, 其主要原因是企业没有独立完善的管理体系, 在核算中发挥不到应有的效果。对于大型的企业项目而言, 由于其项目种类繁多, 所以在进行成本核算的过程中, 必须将其进行有效的管理, 保证各项收支明细在有效的管理下进行成本核算, 这样不仅仅会提高各项成本核算的准确率, 就更提高会计成本核算的科学性与准确性, 促进其更好为企业服务。

5 结束语

在今天, 经济快速发展, 竞争日益激烈, 企业为了在激烈的竞争中保持有利的位置, 都在加大力度进行会计成本核算工作, 加强对它的改进和管理, 企业的会计成本核算对企业的发展和进步有着重要的作用, 就要求企业加强各个方面的管理和监督工作, 及时处理会计成本核算中出现的问题, 促进企业的长远发展, 实现企业效益的最大化。

参考文献

[1]杨金凤.谈事业单位会计的成本核算[J].商业经济, 2010 (21) .

[2]杜静.浅谈施工企业会计成本核算[J].财经界 (学术) , 2010 (23) .

篇4:修练8年C++面向对象程序设计之体会

【关键词】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等.

篇5:修练8年C++面向对象程序设计之体会

上一个教程我们简单说了关于类的一些基本内容,对于类对象成员的初始化我们始终是建立成员函数然后手工调用该函数对成员进行赋值的,那么在c++中对于类来说有没有更方便的方式能够在对象创建的时候就自动初始化成员变量呢,这一点对操作保护成员是至关重要的,答案是肯定的关于c++类成员的初始化,有专门的构造函数来进行自动操作而无需要手工调用,在正式讲解之前先看看c++对构造函数的一个基本定义,

1.C++规定,每个类必须有默认的构造函数,没有构造函数就不能创建对象。

2.若没有提供任何构造函数,那么c++提供自动提供一个默认的构造函数,该默认构造函数是一个没有参数的构造函数,它仅仅负责创建对象而不做任何赋值操作。

3.只要类中提供了任意一个构造函数,那么c++就不在自动提供默认构造函数。

4.类对象的定义和变量的定义类似,使用默认构造函数创建对象的时候,如果创建的是静态或者是全局对象,则对象的位模式全部为0,否则将会是随即的。

我们来看下面的代码:

//程序作者:管宁

//站点:www.cndev-lab.com

//所有稿件均有版权,如要,请务必著名出处和作者

#include

using namespace std;

class Student

{

public:

Student()//无参数构造函数

{

number = 1;

score = 100;

}

void show();

protected:

int number;

int score;

};

void Student::show()

{

cout<<<<

}

void main()

{

Student a;

a.show();

cin.get();

}

在类中的定义的和类名相同,并且没有任何返回类型的Student()就是构造函数,这是一个无参数的构造函数,他在对象创建的时候自动调用,如果去掉Student()函数体内的代码那么它和c++的默认提供的构造函数等价的,

构造函数可以带任意多个的形式参数,这一点和普通函数的特性是一样的!

下面我们来看一个带参数的构造函数是如何进行对象的始化操作的。

代码如下:

//程序作者:管宁

//站点:www.cndev-lab.com

//所有稿件均有版权,如要转载,请务必著名出处和作者

#include

using namespace std;

class Teacher

{

public:

Teacher(char *input_name)//有参数的构造函数

{

name=new char[10];

//name=input_name;//这样赋值是错误的

strcpy(name,input_name);

}

void show();

protected:

char *name;

};

void Teacher::show()

{

cout<<

}

void main()

{

//Teacher a;//这里是错误的,因为没有无参数的构造函数

Teacher a(“test”);

a.show();

cin.get();

}

我们创建了一个带有字符指针的带有形参的Teacher(char *input_name)的构造函数,调用它创建对象的使用类名加对象名称加扩号和扩号内参数的方式调用,这和调用函数有点类似,但意义也有所不同,因为构造函数是为创建对象而设立的,这里的意义不单纯是调用函数,而是创建一个类对象。

一旦类中有了一个带参数的构造函数而又没无参数构造函数的时候系统将无法创建不带参数的对象,所以上面的代码

Teacher a;

就是错误的!!!

这里还有一处也要注意:

//name=input_name;//这样赋值是错误的

因为name指是指向内存堆区的,如果使用name=input_name;会造成指针指向改变不是指向堆区而是指向栈区,导致在后面调用析构函数delete释放堆空间出错!(析构函数的内容我们后面将要介绍)

篇6:修练8年C++面向对象程序设计之体会

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

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

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

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

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

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

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

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

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

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

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

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

我的理解:

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

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

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

我的理解:

与实际生活联系起来。

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

找一个地方使用我的智慧

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

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

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

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

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

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

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

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

从大往小想,从小往大做

从难往易想,从易往难做

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

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

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

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

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

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

对象:

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

类:

篇7:修练8年C++面向对象程序设计之体会

为了在方法中强行引用成员变量,可以使用 self 关键字进行区分。

示例代码:

FKWolf.h文件

#import@interface FKWolf : NSObject{ NSString* _name; int _age;}// 定义一个setName:ageAge方法- (void) setName: (NSString*) _name andAge: (int) _age;// 定义一个info方法- (void) info;@end

FKWolf.m 文件

篇8:面向对象程序设计感想

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

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

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

篇9:修练8年C++面向对象程序设计之体会

目前,高等职业教育大多沿用传统的本科教育体系,具有高等职业教育特色、适用范围广、可操作性强的高职教学模式仍在探索之中。教学模式的内涵主要包括教学目标、教学思想、教学内容、教学内容的载体等(见图1)。笔者拟就“面向对象”教学模式的教学目标、教学思想、教学设计等几个方面进行探讨。

定位于“应用能力”的高职教育教学目标与培养思路

(一)高等职业教育教学目标

高等职业教育同普通高等教育一样,首要的教育目的是育人。这里的育人不仅仅是教会学生做人、完善人格,同时也包括将学生培养成为对国家、对社会有用的人才。社会分工不同,用工岗位不同,要求高等职业教育突破传统的本科或专科以理论教学体系为核心的模式,为社会培养一线的实用型、技能型、创新型人才。

传统教学模式的特点是理论基础深厚、课程系统性强,但不能完全满足岗位技术需要,因此,有必要在教学模式上进行改革,探索针对不同的教学内容,采用有特色的教学方法,以实现给予学生在整个职业生涯中谋求个性发展所需的知识、技术和能力的高等职业教育教学目标。

(二)应用能力的表现方式

在科技发展日新月异的当今社会,能力突出体现在岗位或技术领域的职业适应性和职业生涯的变动适应性上。尤其是高新技术领域,岗位或职业都具有能力、技术、知识需求的多样性、时效性和综合性的特点。因此,学生具备良好的知识整合能力、学习能力、迁移学习能力、交往与合作能力,能够适应职业及职业生涯的变动,有利于自身的终身学习和可持续发展。

笔者认为,高职教育宜采用理论教学与实践教学相互渗透、相互融合,以培养学生综合职业能力为主要目标的教学方式。可以组织学生通过观察、实验、操作、实习等教学环节学习和掌握相关的理论知识和专业知识,掌握从事本专业领域实际工作的基本技能。

(三)“面向对象”教学模式的能力培养思路

构建“面向对象”教学模式的整体思路是:根据具体产品或技术岗位的知识和功能(或能力)需要,设计包含有相应的知识内容、功能或能力的对象,学生通过主动学习,分析研究这些对象,将具体的知识点、相互关系以及对象所具有的功能(或能力)联系起来,从而激发学生的学习兴趣,培养学生的实践能力和知识整合能力。

“面向对象”教学模式需要整合专业,构建专业交叉对象,培养学生的迁移能力。职业是不具有专业确定性的,学生在学习期间可以个性化地选择学习项目,毕业时根据社会需求和专业特长获得相应的专业证书。

“面向对象”教学模式可以整合能力,通过建立学习研究小组,采用开放式教学和实验,综合采用讲授法、讨论法、自学法等教学方法,锻炼学生的学习能力和协作沟通能力。

在“面向对象”教学模式下,学生从一开始就接触有特定功能的对象,始终使学生保持好奇心和成功的满足感。工作和学习变成一种享受,在知识的获取过程中得到乐趣,心理素质得到培养。采用协作互助的学习方式,可以使学生建立正确的价值观和世界观,步入社会时即可成为完整的“社会人”。

“面向对象”教学模式的理论基础

(一)“面向对象”教学模式的指导思想

建构主义学习理论深入地说明了人类学习过程的认知规律,即说明了学习如何发生、意义如何建构、概念如何形成,以及理想的学习环境应包含哪些主要因素等。

现代建构主义认为:(1)知识是学生主动建构的,不是被动地接受或吸收的;(2)学习质量取决于学生根据自身经验去建构有关知识意义的能力,而不取决于学生记忆和背诵教师讲授内容的能力;(3)学习具有社会化属性,需要人与人之间互动。

图2为知识建构示意图。学生已经掌握的知识具有逻辑性和规律性,外部世界的未知知识对学生来说是纷繁复杂的,不经过学生分析整理的外部知识不会融入学生已有的知识体系中。

从建构主义基本原理和传统教学的利弊分析中,可以得出建构主义教学原理:(1)教学过程中学生是主体,教师的职责是组织教学活动和帮助学生。教学是引导学生主动建构知识,不是对学生灌输知识;教师的职责主要是对教学对象、教学过程的设计,学生是学习过程的主体。(2)教学过程是有意义的学习。教学设计不仅要考虑教学目标分析,还要考虑有利于学生知识建构的学习情境创设问题,并把学习情境创设看作是教学设计的最重要内容之一。(3)既要注重学习是个性化的行为,更要强调学习具有社会化的属性。人们是以自己的经验为基础来建构或者解释现实的,由于每个人的经验不同,因此对知识的理解必然存在个体差异,每个人都以自己的方式理解事物的某些方面,通过对话与协商,可使人们看到那些与自己不同的观点,对知识的理解才能更加丰富、全面。

(二)“面向对象”的内涵

对象,广义地说,即客观事物,可以是有形的,也可以是无形的。建构主义强调有意义的学习,注重学习环境设计的重要性。从计算机技术借鉴来的“面向对象”方法可以有助于科学地设计学习环境,科学地将知识点及其相互关系融于具体的客观事物(即对象)之中。

图3所示是面向对象程序设计将个别的对象抽象为综合了属性和方法的类,编程时将某个类应用于现实世界,得到整合了数据结构和实现过程的具体客观对象,这个具体的客观对象外部表象是其所具有的功能,使用时不会考虑对象的属性和实现过程。本例中的这个具体对象可以实现绘制、删除和移动具有特定属性多边形的功能。我们研究这个多边形具体对象的编程时,需要综合考虑其属性及实现过程;而当我们使用这个实例对象时,只会考虑其功能,不关心实现过程。传统的面向过程程序设计,数据结构的定义与实现过程的联系是松散的。编制绘制一个多边形的程序就是定义出数据结构,然后按照步骤依次实现。

传统的教学模式是将知识按学科、专业、课程、单元等分类细化,经过很长一段时间的学习,学生不知道所学知识点的应用场合和应用目的,不具有综合各门课程知识点用于完成某个过程从而实现特定功能的能力。在现实社会中,实现某个功能的产品,我们称之为对象,包含了相关的知识点以及综合运用知识点的过程(见图4)。因此,突破传统的以理论体系为核心的条块化教学模式,根据具体产品或技术岗位的知识和功能(或能力)需要,设计包含有相应的知识内容、功能或能力的对象,可以使学生易于直观地进行知识、能力建构,提高学习效率和学习兴趣。

(三)“面向对象”教学模式的教学设计

“面向对象”教学模式的教学实施过程包括从目标分析、教学对象选择到具体教学方式及实施效果评估等各个环节。其中,面向对象的思想贯穿于教学设计的始终。

教学目标分析根据具体产品或技术岗位的知识和功能(或能力)需要,确定学生所应掌握的知识点和能力。这个过程是教学设计的根本,因为既需要调查未来的行业素养需求,也需要探究岗位职业技能需要,同时要在学生掌握专门知识技能的水平和可持续发展能力之间进行平衡。

对象选择与设计教学对象的设计要求突破传统的以理论体系为核心的条块化教学模式,不强调知识的系统性和完整性,注重知识和能力的代表性、融合性及实用性。要求教师具有广博的知识、深厚的行业背景和举重若轻的整合能力,从而能将包含有相应知识内容、功能或能力的对象逐步分解,直至分解到最简单的可以在真实环境实现的对象。如此便可以使学生易于直观地进行知识建构,提高学习效率和学习兴趣。

学习过程设计根据学习对象和阶段的不同,设计学习方式;确定学习对象所需资源的种类和每种资源在学习过程中所起的作用,并设计出获取信息的方式;通过自主学习、问题讨论、报告撰写和实践等环节,实现和深化对对象的意义建构。

教学评价通过教学成果,包括设计报告、实践作品、竞赛成绩等,评价教学设计、学习能力、协作能力和知识获取的效果。

高等职业教育的目标是为社会生产一线培养实用型、技能型人才,所以教育内容应该立足于职业岗位的实际需求。“面向对象教学模式”可以整合知识,根据具体产品或技术岗位的知识和功能(或能力)需要,设计包含有相应知识内容、功能或能力的对象,通过建立学习研究小组,采用开放式教学和实验,综合采用研究法、自学法等教学方法,激发学生的学习兴趣,锻炼学生的学习能力和协作沟通能力,实现知识、能力的意义建构,进而实现高等职业教育的最终教学目标。

通过近几年的教学实践,我们在单片机及其相关课程教学中应用该教学方法,取得了良好教学效果,在近两届全国大学生电子设计竞赛广东赛区比赛中先后有二十余人获得二三等奖。特别是我校学生参加了第四届“西门子杯”大学生控制仿真挑战赛并获得三等奖,这是迄今为止五届比赛以来,在与清华大学、四川大学、哈尔滨科技大学、华中科技大学等众多名校的研究生、本科生同场竞技中,唯一一支进入决赛的专科学生队伍。因此,可以确信,设计包含知识和知识运用的学习对象,可使学生直观地进行知识、能力建构,增强学生的学习兴趣,提高学习效率,并改善学习效果。

参考文献:

[1]杨叔子.德治·育人·人格[J].高等教育研究,2002,23(3):7-9,50.

[2]何克抗.建构主义的教学模式、教学方法与教学设计[J].北京师范大学学报(社会科学版),1997,(5):74-81.

[3]C.Thoms wu.面向对象程序设计导论[M].侯国峰,等,译.北京:电子工业出版社,2001: 13-61.

上一篇:初中语文国培研修成果下一篇:写给父母的感恩信英文