面向对象语言

2024-09-20

面向对象语言(精选12篇)

面向对象语言 篇1

在Win32环境下,每一个进程拥有独立的,大小为4G(0x00000000~0xFFFFFFFF)的虚拟内存空间。其中0x00010000~0x7FFFFFFF是用户独享分区,进程只能读取或访问这个范围的虚拟地址,超越这个范围的行为都会产生违规退出。

对于一个由C++编译的程序进程的内存空间而言,可以在逻辑上大体分成4个部份:代码区、全局(静态)数据区、堆区和栈区。另外还有一个专门放常量的地方称为常量存储区。这些内存空间都被分配在用户独享分区。由于数据在堆区和栈区都是动态分配和释放,本文将堆区和栈区统称为动态数据区。

C++通过类和对象实现了面向对象的封装、继承和多态,本文以Visual C++6.0为编译环境从内存分配的角度对这三大机制进行了底层分析。

1 封装

在面向对象程序设计中,封装是指将一个数据与这个数据有关的操作集合放在一起,形成一个能动的实体———对象。封装保证了模块具有较好的独立性,使得程序维护修改较为容易。封装的对象是数据和方法,封装实际上把对象的数据和方法在逻辑上进行封装。从内存分配角度来看,C++程序里面定义的类将根据类成员不同的属性在不同的内存区域进行分配。

1)如果类成员不包括虚函数,对象存储空间由非静态数据成员构成。一般利用new申请的类对象内存空间分配在堆区上,其他的在栈区上。如果对象由new创建,程序里必须要用delete释放,否则容易发生内存泄露。

2)静态数据成员为该类的所有对象所共享,但不属于任何对象的存储空间。静态数据成员存储在全局数据区,逻辑上所有对象都共享这一存储单元,对静态数据成员的任何操作影响共享这一存储单元的所有对象。

3)类成员函数可以分为静态成员函数、非静态成员函数和虚函数。非静态成员函数在对象创建时第一个参数为this指针,为指向此类对象的const指针。调用时对象的地址作为函数的第一个实参首先压栈,通过压栈将实参传递给函数的隐含参数this。在实际处理过程中,非静态成员函数跟C里面的外部函数一样,但通过隐藏的this指针逻辑上被封装在类里面。静态成员函数不需要借助任何对象,没有隐含参数this指针。C++成员函数代码被分配到代码区。

4)如果类成员包括虚函数,则内存分配给对象的第一个单元为虚函数入口地址表首址,这个地址指针单元再加上非静态数据成员的内存单元便构成了一个具体的类对象的实际内存空间。虚函数入口地址表并不在类的存储空间内,具体的虚函数同样被分配在代码区。

下面是一个例子:

虚函数地址不能直接利用地址运算符获得,我们可以轻易从VC除错器上观察到a的成员变量和虚函数的地址,如图1所示。

通过上面的实验结果我们分析可以得到以下几点:

1)编译器事实上为类ClassA所生成的对象a分配了2个内存单元。由

于对象a的内存空间并不是由new申请所得,因此对象a的两个内存单元实际上是分配在了栈区上。如果我们利用new进行对象创建,将分配一个指向该对象的指针,对象的内存空间将被分配在堆区。

2)由于定义了虚函数,因此对象a内存空间的第一个单元是虚函数入口地址表首址,即图1所示的__vfptr,传统上我们把这个单元记作vptr,第二个单元是非静态数据成员a_data1。

3)静态数据成员a_data2的内存地址是0x0042AD50,很显然它没有跟对象a划分一起,而是存储在全局数据区。从图1可以看出,静态数据成员a_data2虽然不属于对象a的内存存储空间,但仍被对象a所拥有。

4)上面的结果只显示了对象a的数据成员,虚函数vfunc1和vfunc2以及成员函数func1代码存储在了代码区。在对象a调用成员函数时,第一个参数为this指针,因此成员函数func1(int n)在实际处理过程中被编译器处理为含有this指针的函数func1((ClassA*)this,int n)。

依据上面的分析并理清虚函数指针关系,我们可以有图2所示ClassA的实际内存分配图。

2 继承

面向对象方法中的继承机制使子类可以自动地拥有父类的全部属性和操作。派生类在继承已有类型的数据和函数成员的基础上只需定义原有类型没有的数据和函数成员。从内存分配角度来看,在创建派生类对象时,派生类的存储空间等于基类的存储空间与派生类新增成员的存储空间之和,但基类和派生类的所有静态数据成员必须除外。具体可以分为以下几种情况:

1)如果基类包含虚函数,派生类对象的第一个内存单元仍是虚函数入口地址表首址vptr,但这个地址指针指向的虚函数地址表与基类的虚函数地址表并不相同。派生类对象的剩余内存空间由基类和派生类的非静态数据成员构成。

2)如果基类没有定义虚函数,而派生类定义了虚函数,则派生类的对象存储空间由三部分构成:第一部分为继承于基类的非静态成员,第二部分为派生类虚函数入口地址表首址,第三部分为派生类新定义的非静态数据成员。

3)基类和派生类定义的静态数据成员被分配在全局数据区,其中基类定义的静态数据成员为基类和派生类所共享,但它们不属于任一类对象的内存空间。

4)派生类继承于基类的成员函数如果没有重载,则这些成员函数在内存中只创建一份,为基类和派生类所共享;如果成员函数被重载,则重载的函数在内存中另外分配空间。

5)上面分析的主要都是针对单继承类,对于多继承类还要考虑虚基类的问题。

创建派生类ClassB如下:

创建类ClassB的对象b,并对其数据成员进行初始化,在main函数里面输出对象a和对象b的地址信息进行比较,结果如表1所示:

同样利用VC除错器我们得到图3所示的对象a和b的成员变量和虚函数地址信息。

通过对上面的基类ClassA和派生类ClassB的地址信息和成员变量的比较,可以分析得到以下几点结论:

1)派生类对象内存空间包括三个内存单元:虚函数地址表首址单元vptr和继承于基类定义的非静态数据成员a_data1,并新增非静态数据成员b_data1。

2)基类定义的静态变量a_data2的内存地址始终是0x0042AD50,它不属于对象a的内存空间,也不属于对象b的内存空间,但在逻辑上它为基类ClassA和派生类ClassB所共享。

3)派生类继承了基类的成员函数func1(int)、vfunc1()、vfunc2(),并重载函数func1(int)、vfunc1(),这两个重载的函数在内存空间上另外分配,没有被重载的函数vfunc2()将被基类ClassA和派生类ClassB所共享。这些函数同样通过this指针区别不同的类对象。

实验结果显示基类ClassA的内存分配没有变,只是虚函数地址表地址发生变化,可以参考图2。图4是派生类ClassB的实际内存分配图。

3 多态

面向对象的多态性是指同一个消息被不同的对象接收时,可产生不同的动作或执行结果,即每个对象将根据自己所属类中定义的操作执行。C++支持编译时多态性和运行时多态性。编译时多态性通过重载(函数重载和运算符重载)来实现,运行时多态性通过继承和虚函数来实现。由于多重继承和虚拟继承对虚函数的支持比较复杂,而且有时效率较低,本文以单继承为例,从内存分配的角度探讨c++怎样利用虚函数实现多态的。

1)如果类成员包括虚函数,则虚函数地址表首址存放在对象的起始单元(不同的编译器可能有所不同)。对象调用虚函数时,虚函数地址表指针找到虚函数地址表,然后通过这个表找出虚函数的真正地址。这样对象便可以动态绑定相应的函数成员,从而使虚函数随调用对象的不同而表现出多态性。

2)派生类继承了基类的虚函数,并创建相同的虚函数地址表,如果派生类没有重写虚函数,派生类和基类的虚函数地址表将具有相同的地址值,而且虚函数将被基类和派生类所共享。

3)如果派生类重写了虚函数,虚函数地址表中元素所指的函数地址将不再是基类的函数地址,而是派生类的虚函数地址。

4)如果派生类增加基类里没有定义的虚函数,新增的虚函数地址将添加到派生类的虚函数地址表中。

我们同样以上面的例子进行分析,根据上面的实验结果,我们可以得出基类和派生类虚函数调用关系如图5和图6所示。

从图5和图6所示的内存分配我们可以得出以下结论:

1)派生类ClassB继承了基类ClassA的虚函数vfunc1和vfunc2,并重载了虚函数vfunc1,由于没有添加新的虚函数,因此派生类具有基类相同格式的虚函数地址表。

2)被重载的虚函数vfunc1()与基类定义的同名虚函数分布在不同的内存空间,当调用虚函数时编译器将根据对象所属的类别动态调用虚函数。这样对于一个指向基类ClassA所生的对象的指针,其调用的虚函数vfunc1是位于内存地址为0x0040100f的ClassA::vfunc1(),对于指向派生类ClassB所生的对象的指针,其调用的vfunc1是内存地址为0x0040103C的ClassB::vfunc1(),这样就实现了面向对象的多态性。

3)没有重写的虚函数vfunc2将被两个对象所共享。

4 结束语

面向对像的封装性实际上是一种对数据和方法逻辑上的封装,在实际内存管理上编译器将根据类成员的属性进行不同区域的内存分配。虽然类成员在内存中没有被封装在一起,但这并不影响类的逻辑封装性,类对象通过不同的方法可以访问不同内存区域的类成员。派生类在继承了基类的数据和方法后,通过新增类成员、重载函数等构造自己类的空间,基类的一些成员将在派生类的内存空间共享。派生类通过重写虚函数在内存代码区构建另一存储空间的虚函数,使得类对象指针在访问虚函数时做出正确的调用,实现了面向对象的多态性。

摘要:从内存分配角度分析了C++类成员在内存空间的实际分布,通过类存储空间的比较论述了面向对象的继承机制在内存上的实现情况,并着重探讨了利用虚函数内存地址调用实现面向对象的多态性。

关键词:面向对象,内存分配,封装,继承,多态

参考文献

[1]Stanley B.Lippman.Inside the C++object model:深度探索C++对象模型[M].侯捷,译.武汉:华中科技大学出版社,2001.

[2]Stephen Prata.C++Primer Plus[M].孙健春,韦强,译.5版.北京:人民邮电出版社,2005.

[3]蓝雯飞.C++面向对象编程思想探讨[J].计算机工程与应用,2004(22):104-106.

面向对象语言 篇2

1.Java中继承由关键字()实现,用此关键字指出超类。

interface implements class extends

本题分值: 5.0 用户得分: 5.0 用户解答: extends 知识点: 5.1 继承

2.继承是()之间的一种关系,当一个类获取另外一个类中所有非私有数据和操作的定义作为自己的部分或全部成分时,则称这两个类之间具有继承关系。

两个类 多个 集合 层次

本题分值: 5.0 用户得分: 5.0 用户解答: 两个类 知识点: 5.1 继承

3.下面不能用在类声明的修饰是:()。

implements private public 默认

本题分值: 5.0 用户得分: 5.0 用户解答: implements 知识点: 5.1 继承

4.super关键字表示超类的引用,可用super: ()。

 在子类构造方法使用超类构造方法。

访问超类成员 引用类自己 无用 定义父类

本题分值: 5.0 用户得分: 5.0 用户解答: 访问超类成员 知识点: 5.1 继承

5.子类继承父类所有的 public 和()成员,而无论这个类是否与父类在同一个包中。

private protected 公共 所有

本题分值: 5.0 用户得分: 5.0 用户解答: protected 知识点: 5.2 域的继承与隐藏

6.在子类中重新定义一个与从父类那里继承来的()的域,称为域的隐藏。

private protected public 名字完全相同

本题分值: 5.0 用户得分: 5.0 用户解答: 名字完全相同 知识点: 5.2 域的继承与隐藏

7.在子类中不能简单地通过变量名称引用父类中被隐藏的成员变量。要在子类访问被隐藏的父类中的域必须通过关键字()引用。

this super object 变量名

本题分值: 5.0 用户得分: 5.0 用户解答: super 知识点: 5.2 域的继承与隐藏

8.子类继承了父类中所有的非私有方法,允许在子类重新定义父类中的实例方法,()中的类方法。

定义类 对象 引用父类 隐藏父类

本题分值: 5.0 用户得分: 5.0 用户解答: 对象

知识点: 5.3 方法继承、覆盖、隐藏

9.“多态”是指一个程序中同名的不同方法共存。在面向对象程序中,多态的实现方式有:方法覆盖和()。

重载 继承 外联 限制

本题分值: 5.0 用户得分: 5.0 用户解答: 重载

知识点: 5.3 方法继承、覆盖、隐藏

10.在子类中可以通过成员的名称直接引用父类的方法或者用“()”引用父类的方法。

对象.方法名称 this.方法名称 super.方法名称 object.方法名称

本题分值: 5.0 用户得分: 5.0 用户解答: super.方法名称

知识点: 5.3 方法继承、覆盖、隐藏

11.在子类中的实例方法与在父类中的实例方法有相同的()时,称作覆盖父类的方法。

返回值 结构 语句

签名和返回类型

本题分值: 5.0 用户得分: 5.0 用户解答: 签名和返回类型

知识点: 5.3 方法继承、覆盖、隐藏

12.当在子类中的覆盖一个父类的方法时,用()注解符通知编译期在父类你想要覆盖的方法。

@author class @Override public

本题分值: 5.0 用户得分: 5.0 用户解答: @Override 知识点: 5.3 方法继承、覆盖、隐藏

13.在调用覆盖的方法时,被调用的覆盖方法的版本(),就是子类中的覆盖方法。只有一个 有多个 不是唯一的 与重载类似

本题分值: 5.0 用户得分: 5.0 用户解答: 只有一个

知识点: 5.3 方法继承、覆盖、隐藏

14.如果子类没有无参数构造方法,它将继承父类的()作为自己的构造方法。

this()指定方法 任何方法 无参数构造方法

本题分值: 5.0 用户得分: 5.0 用户解答: 无参数构造方法 知识点: 5.4 构造方法继承

15.public abstract class GraphicObject { abstract void draw();„„ } 是()类。

抽象 抽象方法 接口 未完成的类

本题分值: 5.0 用户得分: 5.0 用户解答: 抽象 知识点: 5.5 抽象类

16.声明抽象方法用下面的格式:()类型 方法名([参数表]);

static public final abstract

本题分值: 5.0 用户得分: 5.0 用户解答: abstract 知识点: 5.5 抽象类

17.Java语言中接口是像类一样的引用型类型,仅可包含()、嵌套类型。

private static 实例变量 方法

常量、方法签名

本题分值: 5.0 用户得分: 5.0 用户解答: 常量、方法签名 知识点: 5.6 接口

18.接口声明由修饰、interface、接口名称、()和接口体。

private

逗号隔开的父接口列表

static final 父类列表

本题分值: 5.0 用户得分: 5.0 用户解答: 逗号隔开的父接口列表 知识点: 5.6 接口

19.包(package)由一组()组成,是相关类型的组,提供访问保护和命名空间管理。

类和接口 方法 对象和类 静态变量

本题分值: 5.0 用户得分: 5.0 用户解答: 类和接口

知识点: 5.7 包(Packages)

20.引入整个包中所有成员,即“import 包名字.*”,例如:()

import java.io.*;import *.*;import java;import java.io;

面向不同对象的双语教学探索 篇3

摘 要: 文章结合电磁场与电磁波双语课程,论述了专业课程双语教学,在面向普通高等院校学生与中外合作项目学生时,其目标、性质、教学模式区别,以及在实施过程中遇到的问题和解决办法。

关键词: 双语教学 普通高等院校学生 中外合作 教学模式

引言

国家为了推动高等教育与国际接轨,鼓励高校开展双语课程教学历来已久。全国开设双语课程教学的高校非常多,研究双语课程教学模式的学者也很多。高校中双语课程实施的对象可分为两类,一类是普通高等院校学生,包括本科生与研究生;另一类为中外合作办学学生。面向这两类学生,在实施双语课程教学时,教学的性质、目标、教学方法都有所不同。

“电磁场与电磁波”是电子信息类专业和通信工程类专业一门重要的专业基础课程,也是“微波技术”和“光纤通信”等课程的基础。其内容在移动通信、微波通信、光纤通信、射频电路、高速集成电路等相关领域有着广泛而深入的应用。本文以“电磁场与电磁波”双语课程教学为例,分析普通双语课教学与中外合作中双语课程教学的区别。

1.普通班级专业双语课程教学

高校中普通专业双语教学的目标是在各专业领域培养既有较高的英文水平,又熟悉专业的人才。面向此类学生,多数高校采用的教学方法是汉语与外语混合授课模式,考虑到多数学生的外语口语和听力能力较弱,为了帮助学生掌握专业知识,往往先外语后汉语翻译。因为在制定该课程教学目标时把对专业知识的掌握放在首要位置,而外语能力的提高则放在其次。大多数学生在国内完成学业,双语课程仅仅使得学生在一定程度上提升了英语水平、扩大了英语词汇。因此,中外合作办学的双语课程与普通双语课程的性质是不一样的。

目前我们学校的“电磁场与电磁波”课程还没有在普通本科班级开设,但本课题组成员已经在积极准备中,对多个高等院校的双语教学进行了调研。对本校的通信工程专业本科生进行了“电磁场与电磁波”双语课程教学意愿调查,其中有调查项:92%的学生愿意实施双语教学;85%的学生认为自己的英语能力会妨碍对专业知识的理解,学生普遍认为自己的听力能力、口语能力较弱,专业词汇量较少。课题组成员针对这些问题提出了措施:听力能力与口语能力的提高是日积月累的事情,重在坚持锻炼。在初始阶段,教师的授课方式主要以混合模式为主,并录制相应教学视频,让学生能够课后进行相应复习,同时教师要制定合理的考核机制起到监督作用。其次,在教学过程中,对课程每一段落讲解结束后,把章节总结任务交给学生,鼓励学生积极参与并分组讨论,每组学生用英文提炼章节的重点和难点,再总结结论,从而提高学生口语能力;针对专业词汇量问题,课题组成员已经制定了专业词汇手册,按专业知识点类型分类,并非以往的按字母分类。在专业词汇教与学过程中,可将传统的大学公共英语教学手段与专业双语课程教学方法相结合。

2.中外合作项目中专业双语教学

目前国内高校的中外合作项目多数采用的是“3+1”或“2+2”模式,即前两年或三年在国内完成一定量的课程学习,成绩合格者可申请到国外完成剩余的学业。出国学习后,他们要面对的是纯外语的生活和学习环境,国内的双语课程教学可以使学生提前体验国外的语言环境、教学环境和教学模式,因此,在中外合作办学中,双语课程起到了过渡、引导的作用,同时为学生出国留学打下了坚实的基础。此时,专业双语课程授课目标应该是把专业知识的掌握与外语能力的提高放在同等位置。因为中外合作的学生多数已经进行过雅思培训或其他类出国外语培训,所以他们的外语能力相对普通学生较强,此时授课模式可由混合模式逐步向全外语模式过渡。

在我校的中外合作项目中,电磁场与电磁波双语课程已开设三届。该课程采用国外的原版教材,用外语完成作业,教学过程中采用外文课件,考核采用外文试卷,教学模式在一个学期中由混合模式逐步向全外语模式过渡。学生在潜移默化中习惯用外语思维组织语言、表达想法。这部分学出国后无论在专业知识方面还是语言能力方面,都受到外方的一致好评。但在该课程实施过程中,也存在一系列问题:(1)教学模式过渡到纯外语模式时,部分学生跟不上老师的节奏,甚至完全听不懂,再加上“电磁场与电磁波”课程是一门理论性抽象性非常强的专业课,学生就失去了学习兴趣。针对这一问题,在纯外语过程中可以将一些知识点的关键字进行反复强调,并在黑板上列出来;督促学生进行预习,提前了解老师讲解内容,有助于课堂上理解。(2)虽然大多数学生英语词汇量还可以,但因为没有接受过专业词汇的学习,所以在专业课程学习中,因专业词汇陌生或理解不准确而无法顺利掌握专业知识点。针对这一现象,在课堂教学中我们及时调整教学内容安排,花费一定的时间对专业词汇进行讲解。不论是面向院校普通学生还是中外合作学生,专业词汇的教与学都应该是基础,但在教学内容时间安排比例上应有相应区别。

结语

针对不同的授课对象,专业课程双语教学在教学目标、教学模式上都应该有所区别。目前随着教改课题的深入研究,结合近几年中外合作中“电磁场与电磁波”双语课程的实践,对教学模式探索,发现问题并提出相关措施,从而完善了双语教学,提高了教学质量。面向普通班级学生的该课程双语教学,课题组成员在积极准备探索中,明确授课对象的不同,在制定教学目标、采用教学方法都要因材施教。

参考文献:

[1]支绛.专业课程双语教学的思考与探讨[J].中国高等医学教育,2016,2:26-27.

[2]丁琪,张权.提高高校双语教学质量的对策[J].江苏高教[J].2013,5:90-91.

[3]许冬瑞,范东生.中外合作办学双语课堂教学模式的探究[J].教育艺术,2016,11:293-294.

[4]李强.卓越工程师培养背景下土木工程专业课程双语教学的实践与探索强[J].教育教学论坛,2016,6(25):169-170.

[5]王俊.探究式学习:改善高校双语教学实效的一个新思路[J].江苏高教,2013,2:68-69.

[6]蔡毓.关于高等学校通信电子及计算机工程类双语教学的思考[J].外语教学,2016,05:190.

面向对象语言 篇4

面向对象程序设计语言C#综合了VB简单的可视化操作和C++的高运行效率, 以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

现在各大高校都开始了各种形式的C#程序设计课程, 由于C#的独特性, 传统的教学方式与方法明显不能满足C#教学的需求, 笔者根据近几年C#教学的经验, 在C#教学上做了一些研究, 供大家参考。

2、教学内容

教学内容的选取对面向对象程序设计语言C#的教学是非常重要的, 因为它决定了教学的质量。由于C#的独特性, 在教学内容的选取上面, 采用分阶段教学的方式, 将C#的学习分为两个阶段, 第一阶段为基础知识学习阶段, 第二阶段为系统设计阶段, 课程采用4节课为一个单元的方式, 每周8节课, 总课时为128节。具体课时和内容安排如下表所示:

3、教学方法与手段

针对教学的不同内容, 设计不同的教学方法。

在第一阶段, 因为是介绍C#的基础知识, 所以采用任务驱动式教学, 每一基础知识都对应一个小的任务。第二阶段, 采用项目教学方法, 在项目中讲解相关的知识点。

在C#教学过程中, 积极采用多种现代化的教学手段是提高教学质量的有效途径, 主要的教学手段有:

(1) 设计生动的教学多媒体课件。生动的课件可以营造轻松活泼的课堂气氛, 将抽象化的问题融入到学生熟悉的生活情境, 并通过动画演示等手段, 让学生通过对熟悉事物的认知来理解理论知识。

(2) 充分利用机房控制软件。由于C#教学都是采用一人一台电脑的方式教学, 所以要充分利用机房控制软件的互动功能, 让学生和老师能进行交互教学。

(3) 互联网交互学习。将课堂的教学延伸到课外, 可以建立一个C#学习QQ群, 教师与同学可以在课外进行交流, 学生之间也可以随时进行交流。还有就是建立C#学习的网站, 将学习的相关资料都放在上面, 方便学生查找资料, 自我学习。

4、考核方式

考核只是一种手段, 不是目的, 考核就是要检验一下学生的掌握情况, 针对C#教学的特殊性, 我们采用过程化考核方式, 学生的最后成绩主要由平时的程序完成情况来决定, 即总成绩=平时表现+任务完成成绩+阶段项目一成绩+阶段项目二成绩+课程设计成绩。这样, 学生改变了考试前"临时抱佛脚"的心态, 重视实验、重视平时表现。事实证明, 这种考核结果很大程度上解决了"高分低能"的问题。可以说C#成绩高的学生, 也是真正理解C#编程的学生。

5、结束语

C#作为一门面向对象编程语言, 具有很强的特殊性, 因此在教学中不能按照传统的方式进行教学, 需要不停进行教学改革, 摸索适合学生的一种模式, 这样才能真正让学生学得轻松, 教师教的轻松。

摘要:在面向对象程序设计语言C#的教学过程中, 如何选取教学内容, 采用何种教学方法和手段是非常重要的, 本文结合学生学习程序语言的特点, 根据本学院的教学情况, 对C#教学进行探讨, 交流了教学经验。

关键词:C#教学,面向对象,教学方法

参考文献

[1]谭恒松.C#程序设计与开发[M].北京:清华大学出版社, 2010.

[2]沈蕴梅.《C#程序设计》教学改革之初探[J].科技信息, 2009, (33)

面向对象知识总结 篇5

1.类本身就是一个封装单元

2.实现:A属于私有化;B共有的方法提供给外界访问;C信息隐藏,安全,对外提供清晰的接口

二、继承

1.代码共有,方便维护扩展 2.更符合人类遇到的问题及处理的习惯 3.多重继承关系下构造函数的执行过程

三、多态

1.概念

2.好处

3.应用(生活,程序中的应用)

程序多态的应用

1.方法重载

2.重写父类的方法

3.重写父类的抽象方法

4.父类类型作为方法参数,实现

5.以父类的引用,接收不同子类返回的结果

6.用接口实现

四、面向接口编程

1.理解接口

1.1接口体现的是一种能力

体现在接口中的方法

1.2接口的体现是一种约定体现在注释和接口的名称 1.3面向接口编程程序设计时:

A关注实现类有那些功能,不需要关注实现细节

B面向接口的约定不考虑接口

具体的实现2.使用接口如何使用接口?A编写接口<-----根据需求设计接口的方法 B实现接口<-----实现接口里定义的所有方法 C使用接口<-----多态 3.特征1.多实现,弥补单一继承不足 2.项目初期,搭建系统时不需要考虑具体的实现自然使用接口:设计和显现分离 3.方便搭建整个应用系统,及系统设计

也方便搭建系统框架 4.多态应用的很好体现更自然的使用多态

重点:

1.掌握抽象类与接口不同之处 难点:

1.方法重载与重写 2.继承关系下,构造函数执行流程 知识体系:

面向对象软件测试方法研究 篇6

关键词:软件测试;面向对象;类测试

中图分类号:TP311 文献标识码:A 文章编号:1674-7712 (2013) 24-0000-01

面向对象软件测试技术是针对使用面向对象技术开发的软件而提出的一种测试技术。面向对象开发技术和传统开发技术相比有新的特点,使用面向对象技术开发的程序具有高质量、高效率、易扩展、易维护等优点,这也给它的测试技术带来新的挑战。面向对象软件测试与传统的软件测试相比,由于面向对象技术开发的软件会出现传统软件技术中不存在或者不突出的错误,使得传统的软件测试中次要方面成为了现在的主要问题,影响了软件测试的方法和内容,增加了软件测试的难度。

一、软件测试

(一)软件测试

软件测试是使用人工操作或者利用测试工具按照测试方案和流程对软件产品进行功能和性能方面的评估,检验软件产品是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程。

(二)面向对象对软件测试的影响

面向对象软件具有抽象性、封装性、继承性和多态性等特点,这些特点对软件测试产生了不同的影响。面向对象程序中子类可以继承父类的功能,父类进行了充分测试后,子类也要设计相应的测试用例进行充分测试,对子类进行测试时不仅要测试子类中的方法,还要重新测试与子类中重定义方法相关的类。面向对象软件测试时,对象的状态通常是信息隐蔽的,测试人员需要在测试类中添加适当的信息来表明对象的实现方法及其内部状态。对于面向对象软件的多态性形成的动态绑定的测试使用传统的静态分析策略是不合适的,需要使用动态的测试标准来解决这个问题。

二、面向对象软件测试方法

面向对象软件测试方法是从传统的软件测试方法中演化而来的,有与传统的软件测试相类似之处,但由于面向对象的软件开发具有继承性和多态性等特点,为了支持和加强数据隐藏的特性,面向对象的软件测试必须向一个类的接口添加操作,所以说面向对象的软件测试方法更复杂一些。

(一)面向对象软件单元测试

面向对象软件单元测试主要是类测试,包括方法测试和对象测试。类是面向对象程序设计的基本单位,对象是类的具体实例,类测试是来验证类的实现和类的说明是否完全一致,如果类的实现是正确的,那么类的每一个具体实例的行为也将是正确的。

面向对象的类测试首先要确定测试方法,通常可以通过代码检查和执行测试用例两种方法来测试类的代码。代码检查方法容易受人为错误的影响,在代码量很大的情况下也会加大它的工作量,而编写一个好的测试用例需要很丰富的经验和较高的技巧。通过类实现的功能来分析所要编写的测试用例,然后根据类的边界值来扩充测试用例。构建测试用例一般是基于前置条件或后置条件,为所有可能出现的情况及情况的组合确定测试用例的需求,在这些可能出现的情况组合下,根据这些需求来构建测试用例,而且还要针对实际情况创建特定输入值的测试用例,并确定它们的正确输出。

测试驱动程序是一个运行测试用例并能够收集运行结果的程序。在面向对象的软件测试中,设计核心类的测试驱动程序十分重要,要求该程序必须思路严谨、结构简单清晰并易于维护。当确定了类的可执行测试用例,测试驱动程序就要创建类的实例来运行该测试用例,并给出测试用例运行的测试结果。

(二)面向对象软件集成测试

面向对象软件集成测试主要是类簇测试。面向对象软件是由若干对象组成的,这些对象互相协调合作来实现软件的功能,在面向对象的软件开发中,对象间的相互协调即对象的交互对于程序的正确性来说是非常重要的,对象的交互方式决定了程序能做什么,从而也就决定了程序是否正确。对象的交互测试是在对类的单独测试的基础上实现的,它来确保对象之间相互传递消息的正确性,它一般执行测试的是嵌入到应用程序中的交互对象。

在面向对象的软件测试当中,除了要考虑对象交互特征面之外,还需要具体的测试技术去实现测试的要求,目前常用的面向对象软件集成测试的方法有抽样测试和正交阵列测试。抽样测试提供了一种运算法则,不需要首先明确测试用例的总体,从一组可能的测试用例中选择测试序列;正交阵列测试是一种特殊的抽样方法,它通过定义一组交互对象的配对方式组合来进行测试,同时要尽量限制测试组合的配置数目,正交阵列测试系统就是挑选某个样本的特定测试技术。

(三)面向对象软件系统测试

在对面向对象软件进行系统测试时,要保证被测系统的完整性,搭建与真实用户实际使用环境相同的测试平台,并且需要参考面向对象分析的结果,对软件的架构进行验证,确保软件可以完全再现问题空间以及完整实现用户需求。系统测试不仅是要检测软件的整体功能行为表现,也是对软件设计开发的再确认,它针对的是非功能需求的测试,包括功能需求以外的所有需求以及注意事项等。系统测试是针对完整软件产品的测试,包括软件、软件运行所依赖的硬件、外设、数据、支撑软件及接口等,确保开发的软件与其依赖的各种资源能够协调运行,形成完整的软件产品。系统测试是软件测试过程中非常重要的阶段,它对测试技术的要求也是最高的。在进行面向对象软件的系统测试时,测试技术人员需要与软件的用户进行交流,根据用户提出的需求给出系统的修改建议,结合用户需求对被测试软件进行测试分析,根据分析结果建立测试用例。

三、结束语

面向对象的软件测试技术是面向对象软件开发中的重要组成部分,本文从面向对象软件的特点出发,分析了面向对象软件测试对传统软件测试的影响,介绍了面向对象软件测试的方法。

参考文献:

[1]王艳丽.面向对象软件簇级测试用例自动生成方法研究与实现[D].长春工业大学,2011.

面向对象语言 篇7

计算机语言的发展经历了很长的阶段,主要有机器语言、汇编语言以及高级语言这三个阶段。面向对象语言主要在20世纪70年代成形,并且其发展方向主要有两个:一个是纯面向对象语言,如samlltalk;另外一种就是混合型的面向对象语言,例如应用十分广泛的C++,Objective—C等语言。面向对象语言有封装性、继承性以及多态性的特点,对于软件的扩充以及复用有着很好地适用性,因此得到了广泛的使用以及发展。其中,封装性指的是能够把功能封装成一个独立的单元,这样就能够减小耦合作用,由于面向对象语言具有这种特点因此对于程序的修改更加的方便,从而能够间接性的降低对于软件进行维护的成本。而继承性则指的是在基本的层次关系中,不同的类中可以对数据以及操作进行共享,这个特性也是面向对象的技术所具备的特色。多态性指的是对象具有唯一的静态类型,并且同时还具有多个可能的动态类型。这些特点使得面向对象的维护变得更加的简单,并且对其进行扩充变得相对容易,代码可以重复使用。近年来,面向对象技术得到了越来越广泛的应用,也因此发展的更加成熟。

二、语言开发

(一)核心思想

面向对象的语言的核心思想包括很多的方面,例如对象、类等。其中,对象指的是软件系统中对于真实的生活中的一种事物的一种较为抽象的模拟。每个对象都是唯一的,且都有自己的属性以及行为、状态等。而类则是由很多的对象构成的,是有着想用的属性的对象的集合,每个对象都是类的具体化的实例。但是每个类中的对象都是出于不同的状态的。我们可以将其这样进行类比,如果把狗定义为一个类,那么其中的哈士奇就是其中的一个对象,对象的属性就是哈士奇这一个品种,也就是对象的状态。

除此之外,接口、消息以及封装也是面向对象的语言的核心思想。其中,接口是系统对外提供的服务,也是一个边角抽象的概念,其中不包括具体的实现服务的细节。在使用者看来,对象中的声明构成了对象的结构,而消息就是参数。封装是面向对象中的一个比较重要的特点,通过封装能够把对象的一些属性以及细节隐藏起来,对象对外公开的只有接口,这样能够保证使用者更方便的对系统进行操作,而且可以防止系统中的一些参数被使用者错误的修改,保证系统的完整性与可用性。

(二)开发方法

在工作的过程中,软件的开发工程师可能会遇到这些问题:在软件的开发过程、或者在软件投入使用之后,还需要对软件进行修改,而在原来的语言使用的阶段,对其进行修改是十分困难的。如果没有在代码编写的阶段考虑的十分周全,就可能在修改的过程中导致旧的问题还没有解决,又进而产生了新的问题,并且如果代码的重用率比较低也会因此而使得程序员的工作效率变得很差。所以为了解决这些问题,人们逐渐的开发出来面向对象的语言。

面向对象程序设计中,是以对数据的处理作为重点的。在这一点上,和以功能为中心的面向过程语言有着本质性的区别。从功能和数据的比较上来看,数据比功能更加的稳定,可以以此为中心开发出更加稳定的、可重复的程序。面向对象是一种从结构组织来对客观世界进行模拟的方式,它能够区分对象以及属性,对对象的整体以及其组成的部分进行区分,不同的对象的类的形成也会进行区分,从而保证其稳定性。

在当前的计算机领域中,人们对于这种语言的重视主要集中表现在对于现代软件的开发商。对于面向对象技术的应用以及发展来看,这已经超过了对于软件开发以及程序的设计的本身的重视,随着人们的逐渐深入的研究,必然会渗入到更加广阔的应用中去,例如对于人工智能、以及分布式系统等方面的应用。对于大型软件的开发,目前也多采用面向对象的技术,再这样的开发背景之下,每一个子对象都能够构成整个软件的系统,并且这个小的程序自身具有一定的属性以及方法、用途等。因此,在对大型的软件进行开发的过程中,也可以把整个系统的软件分解成单一的产品来进行处理,通过分割单独的产品之间是相互独立的,但是他们之间又存在着一定的关系,尤其是每个功能模块之间具有相互之间配合的关系。

(三)发展现状

目前,面向对象的开发技术已经逐渐变得成熟,并且能够广泛的应用到很多的领域,近年来已经有很多面向对象的产品逐渐的问世。而且,有一些比较大型的软件的开发也逐渐的开始使用面向对象语言,使其向着更加高级的方向发展。从总体上来看,软件的发展方向已经成为了一种必然。在信息时代的今天,人们更加的追求计算机语言的高级化,从而满足人们逐渐增长的信息需求。因此,计算机软件技术的发展,从单一的事情的单独处理逐渐的转向目前的面向对象,正在逐渐的向着更高的层次发展。

随着信息的高速发展,计算机已经逐渐的成为了我们的生活中不可缺少的一部分,而计算机的逐渐发展必然会影响到计算机语言的更新。计算机语言经历了三个时期的发展之后,目前的面向对象语言是使用范围最广泛的一种语言,已经成为了计算机语言的一个重要的组成部分。在这样的情况下,本文在对其进行了介绍的基础上,主要对面向对象语言的开发进行了探究,并且分析了其发展的方向,希望能够起到一定的参考价值。

摘要:随着计算机近年来的快速发展,计算机语言也逐渐的在进行更新,为了满足人们的生产生活的需求,计算机语言正在向着更加高级的方向发展着。目前,面向对象已经成为了计算机语言中的主要内容,面向对象技术中所具有的封装性、继承性、以及多态性等主要的特点使其具有很大的优势,不仅容易进行维护,而且也很容易进行更新以及升级。在这样的背景下,本文主要对于计算机语言的面向对象技术的发展进行了研究。

关键词:计算机,面向对象,发展

参考文献

[1]兆翦.解析媒体矩阵(Media Matrix)(四十三)NWare软件介绍(5)[J].音响技术,2008(02).

[2]刘睿潇.计算机语言面向对象开发的发展探讨[J].电脑编程技巧与维护,2016,08:36-37.

面向对象语言 篇8

随着全球经济一体化进程的推进, 国际化已成为全球高等教育发展的趋势, 我国教育部曾多次下发文件要求全国各高校积极推广和推进双语教学工作, 培养具有国际交流和竞争能力的外向型人才。

随着改革的深入, 我校也积极鼓励各院系开展双语教学工作。相对其它领域, 计算机属于高新技术领域, 许多最新的思想、成果和技术资料都是来自于欧美等国家, 专业英文应用能力低下已经成为工制约从业者进一步发展的巨大障碍。在有些企业, 特别是外资、合资企业, 毕业后英语能力强的学生的知识更新快, 薪水比具有同等专业能力、但英文水平差的学生要高许多。因此, 作为专业能力, 有必要在教学中渗透双语教学, 培养出更符合国际社会需要的计算机专业人才。程序设计是计算机专业学生应具备的基本能力, 为了提高教学水平, 我们在面向对象程序设计课程中开展了双语教学活动。

2、面向对象程序设计语言的特点

面向对象程序设计语言具有大量的类, 每个类有众多的属性、方法和事件, 类与类之间还可能具有继承关系, 这些都加大了学习这门课的难度。对面向对象程序设计语言的掌握, 不是短期内可以达到的, 在授课一个学期下来, 我们只能把面向对象的思想和课程学习的方法传授给学生, 学生需要在学习和将来的工作中不断地探索, 逐渐掌握强大的类库。同时为了使语言的功能更强大, 开发厂商对类也在不断地更新, 从业者需要不断地汲取新的知识, 在学习和工作的过程中, 不可避免地要接触英文文档。在面向对象程序设计语言课程的教学过程中, 我们深深感到, 英文应用能力的低下, 制约了学生的自学和探索能力。我们希望通过实施双语教学, 增强学生阅读专业英文技术文档的能力并具备一定的英文交流水平, 增强学生对新知识的自学、探索能力。

3、面向对象程序设计语言课程实施双语教学的实践及思考

3.1 双语课程的确定

由于是初次进行双语教学的实践, 经过考查, 我们认为, 一开始最好选择学生易理解的、而且在学习过程中非常有开设双语教学必要性的课程, 让学生深刻认识到必须同时掌握好外语和专业知识才能做个好的计算机工作者, 增加学习主动性;课程开设的时机确定为高年级, 此时学生的英语能力比低年级时有很大提高, 专业知识也有了大量的储备, 为顺利实施双语教学提供了基本的保证;由于是首次开设双语教学, 经验不足, 确定首先选择选修课, 这样如果效果不好, 也不会影响学生考研, 以后随着经验的累积, 逐渐开设其它课程。

经过分析和比较, 我们认为可以把在高年级开设的《java语言程序设计》、《VC++》课程开设为双语教学课程, 最终决定首先在《java语言程序设计》课程开设双语教学。由于在低年级已经学习过高级语言程序设计, 并且相比较而言, java语言要简单一些, 开设双语教学不会给学生太大的压力。同时, 英语应用能力在java的学习和工作中都有重要的作用:在实际开发和应用中, 往往需要学生或者开发者自己去查技术文档, 而现有的技术文档都是英文文档。如果用汉语教学, 其中的专业术语和整篇的专业英文, 会使学生看到就觉得吃力、从而产生畏难情绪, 丧失了学习的兴趣;而如果不看文档, 就不能够真正地把语言学好、用好。如果用翻译软件翻译技术文档, 它的意思就会和英文表达的本意去之甚远, 甚至风马牛不相及, 不利于学生的学习, 学生在学习中有挫折感, 容易失去信心。通过对该课程开展双语教学, 就可以在课程中让学生很自然地掌握和理解常用的术语, 技术文档的书写、查看方法, 从而学生在学习过程中查资料的时候, 能够较快地看懂文档, 从而提高学习的积极性和学习兴趣, 反过来又可以促进课堂的授课效果, 起到事半功倍的效果。

3.2 科学选择原版教材

外文教材是双语教学的最基本条件, 教材的选取的原则是实用性强、形式生动、能够体现学科的经典内容和发展的最新内容, 最好是国外知名大学相关课程所用的优秀国外原版或影印版教材, 与国际接轨, 另外还要充分考虑学生的学科基础水平与外语接受能力。另外, 为弥补学生英文能力的不足, 在外文教材之外, 我们还指定了两本中文参考书籍。

3.3 合理分配英语、中文授课比例

遵循循序渐进的原则, 针对我校教师对外交流较少, 教师的英语口语水平有待提高, 学生的英文听说水平也普遍较差, 我们选择过渡型的授课方式, 采用英文教材、英文ppt讲稿、英语试卷, 以中文讲解为主。前半部分, 课程开始的介绍、课程中的术语、最后总结用英语, 其它地方用中文;到课程的后半部分随着学生专业能力和英语能力的提高, 逐步增加英语授课的比例, 细节、重点、难点部分用中文为主讲解, 较浅显的内容用英文讲解为主, 这样教师和学生都能够收放自如, 减少学生的抵触心理。

3.4 采用案例式教学

面向对象程序设计是一门实践性很强的专业, 采用案例式教学方式, 有利于机双语教学的开展, 这也是典型的西方教育方法。学生在上课之前就知道课堂要解决的问题和要完成的目标, 在教师的引导下一步一步地解决问题, 可以培养学生的创新能力、发散思维和创造思维能力。选编案例时我们选取高质量的案例, 兼顾案例的典型性和启发性。

3.5 充分利用软件的英文帮助功能、网络资源

学习计算机离不开各种软件, 软件的帮助文档、软件公司发布的网络资源是该软件使用过程中最权威的参考资料。虽然现在的很多计算机软件已经汉化了, 但大多数软件的帮助文档仍然是英文的, 这就对学生的英文能力和专业能力提出了很高的要求。在讲课的过程中, 充分利用软件的帮助功能, 在介绍某个功能的时候直接把帮助的页面调出来, 给学生讲解, 学生会更充分地认识到英文对计算机专业的必要性和重要性, 从而坚定学生学好通过掌握好英语来促进专业学习的信心。比如介绍一个类的时候, 可以把该类的帮助文档打开, 那么关于该类的所有的属性和方法会列出来, 通过查看名字可以大概猜测出来属性或方法的作用, 如果打开方法相应的链接, 就可以展开相应的帮助页面, 那么每个方法的作用、使用方法都会一清二楚地呈现给使用者。学生就会觉得学习起来有帮助可以参考, 逐步打消畏难情绪。在教学的过程中, 教师可以有意识地在课堂上查看需要的、而教材上又没有讲或者讲得不清楚的地方, 让学生对帮助文档的强大作用有深刻的认识, 并在使用的过程中潜移默化地提高阅读专业英文文档的能力。

3.6 开发形式活泼的多媒体课件

多媒体课件可以融入文字、声音、图像、动画等多种媒体, 使授课形式更直观活泼、生动。我们一方面收集资料, 充分利用多媒体丰富多彩的表现形式, 编制了活泼生动的多媒体课件, 另一方面在讲学过程中注意控制节奏和信息量防止学生疲劳, 充分利用多媒体的优点, 克服多媒体教学课堂环境的缺点, 提高课堂教学效果。

3.7 通过考核、大作业和讨论加强对学生的管理

课程考核可以督促学生对知识的掌握, 也便于教师掌握学生的学习情况, 及时调整教学方法。根据双语教学的特点, 我们对学生的考核综合期末考试和平常作业成绩、阶段考核的方式评定, 并且平时作业和阶段考核要占较高的比例, 把对学生的监督和引导工作做在日常的学习生活中。作业要求学生50%用英文形式完成, 锻炼学生英文写作科技短文的能力;并将学生分组, 阶段性地给学生布置大作业, 作业内容注重学生能力的培养, 要求学生在运用课堂知识的基础上, 必须通过查阅资料、实验、小组讨论等方法获取作业中所需要的资料, 大作业完成后, 开展展示课, 由小组代表上讲台用英语讲述作业, 对作业中的问题全班同学展开谈论。考试和阶段考核体现一定比例的外语应用能力。学期末, 依据学生完成作业的情况、阶段考核情况、期末的考试情况综合评定给出最终成绩。

3.8 双语教学网站的建设

为了提高教学效果和学生自学能力, 除了课堂授课外, 我们准备建设专门的学习网站, 把与课程有关的资料收集整理后在网上发布。在网站中, 增加国外知名大学和国际知名计算机公司网站的链接, 使学生能够紧跟世界最先进的计算机发展的步伐, 拓展思维。发布论坛, 便于师生交流。为了提高听说能力, 还在网站中放置英语音、视频资料或其链接, 使学生的计算机英语能力获得迅速的提升, 为双语教学向纵深发展创造条件。

3.9 教师能力的不断提升

高质量的师资, 才能培养出优秀的人才。教师英文能力和专业能力的高低是双语教学成败的基本条件。教师水平的提升, 一方面需要学校对双语教学的高度重视和大力支持, 加强对教师双语教学技能的培训, 另一方面教师自身也需要不断在专业领域提升自己。

3.1 0 改进基础英语教学, 营造浓厚的英语学习氛围

双语教学中最重要的因素是学生的外语应用能力低下, 所以学校一方面要改进基础英语教学, 在外语教学中加强外语应用方面的教学与训练;另一方面可以在学校或者系里开展英语的竞赛、表演活动、聘请外教、鼓励学生参加英语角等一系列活动培养学生的英语学习兴趣, 提高英语能力, 为推进双语教学奠定坚实的基础。

4、总结

开展双语教学对教师和学生来讲都是一种挑战, 教学效果表明, 学生的外语应用能力有了很大提高, 尤其是查阅英语资料的能力。要提高双语教学的效果, 还需要学校的大力支持、教师、学生的共同努力, 以培养出更高素质的学生。

摘要:计算机专业的面向对象程序设计语言课程中, 存在大量的类, 每个类有众多的属性、方法, 难度在于大量的类不好掌握。本文讨论了在面向对象程序设计语言课程教学中通过实施双语教学, 提高学生的学习主动性和积极性, 改进教学效果的手段和方法。

关键词:双语教学,面向对象程序设计,案例教学

参考文献

[1].Kenji Hakuta and Eugene E.Garcia, Bilingualism and Education, Febru-ary 1989 American Psychologist, Vol.44, No.2

[2].任向民.如何在高校开展计算机课程的双语教学.北京大学学报, 2007, (5) .

[3].张铭等.关于计算机专业"双语教学"的调查报告.《计算机教育》, 2004, (6) .

[4].张素群, 对我国大学双语教学的几点思考.药学教育, 2006年22卷2期

面向对象语言 篇9

本文是根据自己在教学过程中的经验对面向对象编程思想的教学进行了初探。

1 面向对象编程的教学中常见问题

1.1 学生更易于使用面向过程的方式进行思维

多数院校在讲授JAVA课程之前,都会在前一学期开设C语言课程,通常这也是学生接触的第一门编程语言,而C语言是典型的面向过程的编程语言,学生熟悉了面向过程的程序设计思想,现在突然要其转变思维方式,学生难以接受。

1.2 面向对象中的概念较为抽象

在进行面向对象教学时,一般先接触到的概念是类和对象,这两个概念在现实生活中也经常用到,相对好理解一些,再继续学习面向对象的基本特征时,接触到封装、继承和多态的概念,学生理解起来就比较困难了,还要通过代码把这几个概念表现出来,就更困难了。很多同学都是在这个时候打了退堂鼓,放弃了对JAVA的学习。

1.3 按知识点进行教学的方式不利于学生从整体上认识面向对象的思想

在讲授面向对象的基本特征时,通常都是先讲概念,然后举例进行代码验证,这样的方式第一学生会觉得枯燥,容易失去学习兴趣,第二代码验证通常都是比较单一的,前后例子没有必然的联系,学生没有获得综合性的体验,缺乏对知识点认识的统一。

2 教学目标和教学内容的确定

我们专业借鉴CDIO工程教育理念,提出了JAVA教学的新模式,在此基础上确定了注重实践能力培养的教学大纲,要求该课程紧紧围绕“熟练掌握基础知识和提升实践能力”目标展开教学,对每一单元都提出了知识目标、能力目标和情感目标,本单元的三个目标分别是:

知识目标:掌握类的定义与对象的创建,熟悉构造方法的作用及应用,深入理解面向对象三大特征:封装性、继承性和多态性的Java语言实现。

能力目标:培养学生面向对象的编程能力,培养学生良好的团队合作意识及沟通协调能力,接收新知识的能力,培养学生分析问题、解决问题的能力、创新能力以及逻辑思维能力

情感目标:培养学生学习的兴趣,积极探索未知,不惧失败的精神。

为了达成上述三个目标,确定了以计算图形面积为主的相应教学内容,共需22个学时。

3 教学方法的改进和探讨

3.1 任务驱动教学法

“任务驱动教学法”将以往以传授知识为主的传统教学理念转变为以解决问题、完成任务为主的多维互动式的教学理念,强调学习过程中学习者的主动性、构建性,支持学习者完成任务的自主权和中心地位。换言之,它的核心是让学生学会学习,能进行知识的迁移和运用[1]。

在教学中通过计算图形面积将面向对象的三大特征关联起来。具体教学过程为:先让学生用面向过程的方式求解圆的面积,再转换成面向对象的编程方式,加深对类和对象的理解。通过给半径赋一个负值,提出问题,引出解决方案:封装。当我们要求学生计算其它图形的面积时,又可以引入多态的概念。通过这些小小的任务,学生既理解了概念,又能把知识点贯穿在一起。

3.2 行动导向教学

高等职业教育行动导向教学法就是在基于高等职业环境条件下的行动导向教学法,其更强调职业情境要求突出职业教育专业课程知识的性质和表征适应职业教育学生的学习认知规律,能有效培养职业院校学生技能实践能力,并彰显职业教育魅力,提高职业教育的认可度。正逐步成为职业教育教学界的一种思潮,为国内外的职业教育研究人员和工作人员积极研究并积极推广应用[2]。

我院近几年一直在大力推广行动导向教学,从各系各专业推选出多门示范课,对老师的教学起到了很好的引领作用。我们根据学生情况推出了“快递打印系统”这个项目,并将项目分成6个情境,通过情境将知识点连接起来。通常实施会分为(1)确定项目任务、(2)制定项目计划、(3)实施和(4)检查评估四个步骤[3],在第一步中学生会积极查找熟读资料,了解项目内容和功能,第二步教师按照软件工程方法,要求学生制定项目计划书,教师需要在这个阶段帮助学生控制好进度和难度,第三步实施过程,教师要随时关注学生的困难,指导和鼓励学生自己解决问题,对共性问题进行集中讲解,第四步评价以鼓励和建议为主,提高学生的成就感。

3.3 改变按知识点顺序进行讲解的方式

对任何人而言,无论什么事情,有兴趣才有动力,才会主动去探求,去学习。对学生的学习而言,尤其是。一般Java教学都是按知识点的编排顺序进行讲解的,如讲授java基本数据类型,如果一个个地讲解它们的定义、特点和范围,学生是很难集中注意力的[4]。我们在讲授之前会先演示“快递打印系统”项目,让学生明确课程学习完后可以达到的目标,同时搜集并演示一些java编写的典型小案例,提高学生兴趣。讲解新知识点之前,会先设计好相应情境,并提出问题,学生在解答问题过程中逐步掌握新内容,而不会觉得枯燥。

4 考核评价的督导作用

为了能让学生配合好教学,我们尝试通过过程性评价来帮助督促学生的学习。我们采用了小组学习法,5至6人为一个学习小组,每个小模块完成之后,由一个小组成员代表进行讲解,其他成员可以补充回答,其他小组进行评价,最后老师再综合进行评价。每次评价都记录在册,期末进行综合统计,统计结果作为过程性评价的最终分数,占到该门课程总成绩的60%,由于占比较高,学生在平时也要努力认真才能取得好成绩。另外这种评价方式也锻炼了学生的表达能力和相互协作的能力。

5 结束语

通过教学方法和教学内容的改进尝试,我们取得了初步成效,学生的学习能力和学习兴趣都有了很大的提高,我们还要不断改革创新,提升教学理念,更新教学思路,以达到最佳的教学效果,这是我们努力的目标。

摘要:该文首先分析了在Java教学中遇到的问题,并通过教学方法的改进、考核评价方式的转变,来提高学生的学习效果。从而对提高学生的学习能力,提高学生的学习兴趣进行了有益的探讨。

关键词:JAVA,教学方法,考核评价

参考文献

[1]唐红杰.JAVA语言程序设计之基本语法的教学研究[J].软件,2014,35(6):23-25,29.

[2]江务学.行动导向教学法在java课程教学中的应用探讨[J].现代计算机,2011(4):37-39.

[3]尹元元.行为导向教学在高职java课程中的实践[J].科技教育创新,2008(8):232-233.

面向对象语言 篇10

关键词:面向对象的XML-RL,更新语言,逻辑操作符,物理操作符

0 引 言

XML正在迅速成为Internet上信息表示和数据交换的重要标准。随着XML的广泛应用,对XML数据管理的要求也越来越高,不但需要查询数据,也需要更新数据。如何高效、准确地完成对XML数据的更新成为当前研究的一个热点问题。

当前普遍的XML更新方法是通过XML编辑工具对XML文档进行手工修改,这种修改方法很费时,因此需要一种有效地进行大数据量修改的方法。近年很多XML更新语言被提出,但这些语言都采用低级的基于图或者基于树的数据模型,他们的描述能力也不够强大。

XML-RL查询语言是基于高级数据模型的以规则为基础的XML查询语言[1]。 XML-RL更新语言能表达复杂的多层次的更新[2]。面向对象的XML-RL更新语言具有面向对象的特征,支持多态元素、多态引用、 独占元素和独占引用。

1 面向对象的XML-RL更新语言

1.1 面向对象的XML-RL更新语言

XML-RL更新语言是唯一基于高级数据模型的更新语言,它能表达复杂的多层次的更新;XML-RL更新语言支持复杂对象的更新,其他的更新语言则不支持;XML-RL更新语言的名替换和值替换采用同一个操作[3]。

面向对象的方法具有很强的建模能力,例如继承、非单调继承、多态性、复杂数据结构等。我们扩展XML-RL更新语言以支持多态元素、多态引用、包含元素和包含引用。

面向对象XML-RL的更新语言表达式如下所示:

Querying qexp,…,qexp 1n

uexp,…,uexp 1n

qexp,…,qexp 是查询表达式,uexp1,…,uexp是更新表达式,它有如下5种基本形式:

1) Insert content into$v;

2) Insert content before$v;

3) Insert content after$v;

4) Delete$v;

5) Replace$v with content。

$v是一个出现在查询部分中的绑定变量。

1.2 面向对象的XML-RL更新语言的存储模式

下面以一个文档为例,简要说明该存储模型。本文讨论的XML文档是遵循扩展DTD[3]的良构XML文档。XML文档如下:

通过对扩展DTD和源XML文档的解析,产生路径仓和数据仓。

路径仓是用来描述XML文档中的层次信息。由于二叉树有统一的结构,并且具有多种遍历方法能有效地访问元素,因此采用二叉树实现路径仓。每个节点都是类节点,存储了类对应的层次路径和类名。类节点的左指针指向它在文档层次中的子节点,右指针指向它在文档层次中的兄弟。

数据仓中存储对应于路径仓中类名的节点被连接到根节点的左指针,节点的右指针指向对象的值节点,一个值节点的右指针指向下一个值节点。每个值节点的左指针指向嵌套层次的父亲节点。数据仓采用的也是二叉树结构。上述示例中,采用一个PERSON类结构存储整个继承层次,在PERSON类结构中存储PERSON、STUDENT、TEACHER和TA实例。

2 面向对象的XML-RL更新语言的实现

面向对象的XML-RL更新语言的设计包括两部分,逻辑操作符和物理操作符。更新语句用逻辑操作符表示,构成逻辑计划。通过逻辑操作符和物理操作符之间的映射关系把逻辑计划映射成物理计划,执行更新。

面向对象的XML-RL更新语言的逻辑计划分为两部分,查询部分和更新部分。用update操作符连接查询部分和更新部分,它的左子树是查询部分,右子树是更新部分。

在面向对象的XML-RL更新语言中,根据数据仓和路径仓的不同,逻辑操作符对应多个物理操作符。

2.1 逻辑操作符的实现

本文中提到的节点集都是包,或者称为多重集而不是集合。

· 连接操作(update)

Update(varlist,upvar)连接左右两个子树,左子树是查询部分,右子树执行更新操作。左右子树的执行顺序只能是先左后右,varlist是左子树中绑定的变量,upvar是在更新语句中指定的更新变量,upvar在varlist中完成更新。

· 更新连接操作(rank)

rank()操作用于连接多个更新操作。

· 删除操作(delete)

Delete($var)没有子操作,从文档中删除$var绑定的元素。

· 插入操作(insertinto)/ 插入前操作(insertbefore)/ 插入后操作(insertafter)

Insertinto(left,$var)/ Insertbefore(left,$var)/ Insertafter(left,$var)获得XML片断,并插入到$var绑定变量的最后/之前/之后。

· 名替换操作(replace)

Replace(newname,$var),$var绑定的元素名用newname替换。

· 替换操作(replace)

Replace(left,$var),将$var上绑定的元素用从子操作获得的xml片断替换。

· 值替换操作(replacevalue)

Replacevalue(left,$var),将$var上绑定的元素值用从子操作获得的元素值替换。

· 获得更新元素名操作(upelement)

upelement(left,right,name),用name构造一个DOM节点,左子树是DOM的子节点,右子树是其兄弟节点。

· 获得更新元素值操作(upvalue)

upvalue(value)用value构造一个DOM的值节点,返回给父操作。

2.2 物理操作符的实现

2.2.1 路径仓中的物理操作符

在物理操作符中,insertafter,insertbefore和insertinto的设计基本雷同,因此在这里只介绍insertbefore操作。

· DelValueIndex (x,gidrela,n) 表示从值索引映射表中删除相对引用为gidrela中的第n个索引值。

· InsertBeftaggid (x,tagname,objgid1,objgid2) 表示在tag名映射表中为tagname项中,在objgid1前插入一个新的项objgid2。

· InBeheadinf (x,elegid,n) 表示从头信息映射表中的elegid项中,分别在相对引用和元素所在组的数组值n的前面插入新的值。

· InsertBeValueIn (x,gidrela,n,value) 表示在值索引映射表中插入一个新的值。

· Replace (x,name,rename) 表示在tag名映射表中,用新的tag名rename替换原来的tag名name。

· Replacevalue (x,gidRela,n,value) 表示在值索引映射表中用value替换相对引用数组值为n处的值。

· Replacerefer(x,refer,refer1) 表示在引用信息表中用refer1替换主键为refer的关联值。

2.2.2 数据仓中的物理操作符

· Delnode (x,r) 根据查询返回的类节点x,在x中将元素节点r的值设置为null。

· DelExclusive (x,r,t,y) 表示得到一个类的节点不包括子类节点,节点集x,r为类节点名,t为待删除的类节点的位置,删除类节点集x中的第t个类节点,并将结果绑定到结果集y上。

· DelHeir (x,r,t,y) 表示得到一个类的节点包括子类节点,节点集x,r为类节点名,t为待删除的类节点的位置,删除类节点集x中的第t个类节点,并将结果绑定到结果集y上。

· InsBefExclusive (x,r,t,d,y) 表示得到一个类的节点不包括子类节点,x为一节点集,r为类节点名,在第t个类节点前插入新的类节点d,并将结果绑定到结果集d上。

· InsBefHeir (x,r,t,d,y) 表示得到一个类的节点包括子类节点,x为一节点集,r为类节点名,在第t个类节点前插入新的类节点d,并将结果绑定到结果集d上。

· Repname (x,r,b,y) 根据查询部分得到类节点x,在类节点x中用新的元素节点名b替换r,将结果绑定到y。

· Repnode (x,r,b,y) 根据查询部分得到类节点x,在类节点x中查找到元素节点r,用b替换其值。

3 结 论

详细地描述了面向对象XML-RL更新语言的逻辑操作符和物理操作符的设计与实现。通过运用逻辑操作符和物理操作符可以将一个更新语句转变成逻辑计划和物理计划,完成对继承信息、独占信息、多态引用、独占引用等具有面向对象特征的更新。随着XML的飞速发展,用户的更新要求必然迅速增加,因此本文所述的逻辑操作符和物理操作符将要进一步的优化扩充,这也将是今后工作的一个方向。

参考文献

[1] Lu M,Ling T.XML-RL:A Rule-Based Language for XML[EB/OL].http://citeseer.ist.psu.edu/470369.html,2002.

[2] Lu L,Liu M,Wang G.XML-RL Update Language[A].CAiSE Short Paper Proceedings,CEUR-WS.org,2003.

[3] Wang Guoren,Zhang Xiaolin.Declarative XML-RL update language based on a higher data model.Computer Science and Technology,2005,20(3).

[4]Don Chamberlin,Daniela Florescu,Jonathan Robie.XQuery Update Fa-cility[EB/OL].http://www.w3.org/TR/xqupdate/.2006/7/11.

[5] Beech D,Malhotra A,Rys M.A formal data model and algebra for XML[R].Communication to the W3C,September 1999.

[6] Galanis L,et al.Following the Paths of XML Data: An Algebraic Framework for XML Query Evaluation[R].University of Wisconsin,Madison 2001.

面向对象语言 篇11

关键词:农业;学习对象;粒度;语义结构;分类法

中图分类号:TP311.52;S126 文献标志码:A 文章编号:1002-1302(2014)03-0357-03

作为一种可重用、易获取、适应性强的数字化教学内容构件,学习对象(learning object)正受到国内外教育技术界的日益关注,并已逐渐应用于高校、企事业单位的E-learning平台和知识管理系统等。学习对象的核心特性是可重用性[1],其理想状态是可供不同时间、不同地点的不同使用者出于各种目的而使用。但纵观当前各类E-learning平台,学习资源多以课程为单元进行整体设计,课程结构一般由篇或章节构成,在实际使用时缺乏可重用性和灵活性,往往造成网络教学资源的重复建设。因此,本方案拟结合客户(某大型农业企业培训学校)的实际需求[2],改变传统的课程加工模式,尝试采用基于知识模块的学习对象模型,即按照一定的粒度和方式,将知识分解为内容相对完整的模块,同时,根据具体的学习和授课需求又可以将这些模块灵活组装,针对不同学习者呈现不同的学习路径和页面风格,从而构建出一个多层次、多粒度的可重用知识体系(图1)。

1 研究背景

1.1 学习对象理论

学习对象是结合了面向对象的计算机科学思想和有关教学理论而产生的一种新型计算机辅助教学构件。学习对象较典型的定义是任何具有可重用特性并用来支持学习的数字化资源[3]。根据该定义可知,学习对象可以是一个小程序、动画、文本块、视频流或其他形式,也可以是在技术支持学习的过程中用到的多媒体内容、教学内容、学习图标、教学软件及软件工具,所涉及到的人、组织或事件等。

学习对象的核心特性是可重用性,其实现需要内容设计、技术手段和应用方法3个方面的因素保证[4]。内容设计因素是指一个学习对象应该尽量独立完成知识点或知识块的教学目的,无需过多地求助于其他教学资源或学习对象;技术设计因素是指学习对象采用数字化设计,易被搜索获取到,能够跨平台使用,并具有兼容性技术构造;应用方法因素是指学习对象要具有灵活性、适应性,如能够适应学习者的特征、实现个性化定制、能够被灵活改制等。

1.2 需求分析

本研究的目标是对客户现有知识资源进行分析评价,制定基于知识模块的可重用学习对象模型的设计原则,为实现课件模块的开发、重用和共享提供基本流程规范和设计层面的支持,从而建立具有独到竞争优势的高效在线培训体系,进而成为未来构建智能知识服务系统的数据基础。

通过分析结果可知,该农业企业培训学校知识资源的主要特点表现为:(1)信息量大。从知识的领域范围来看,涵盖了农业系统、管理、教育在内的多个领域,是一个跨领域综合的知识集合。(2)信息的表现形式多。信息形式多种多样,包括教学及相关辅助资源在内的多种知识资源,如制度、案例、记录、报告、标准、规范等。(3)信息格式复杂。包括文本、音频、图片、PPT等多种格式的信息混杂在一起。(4)信息收集地点分散。信息来源丰富,如教师的课堂录音、课件PPT、相关管理部门、网络等。(5)使用信息的用户不同。用户类型包括企业普通员工、企业管理部门、普通企业客户等。每种类型的参与者都有各自的信息需求,需要的信息范围、侧重点都不一样。(6)资源数量和资源类型不断扩展,内容不断变化更新。

根据上述资源特点,可分析得出在该项目中学习对象的应用需求,具体包括:(1)支持微型学习。微型学习是指随时随地可能发生的、可持续性地处理碎片化学习内容的学习活动,要求课程学习内容和资源的获取具有随意性,课程学习内容具有实效性、可操作性和可再生性。有别于传统的以1节课为最小粒度的学习对象,学习者可能只需要学习知识体系中一个很小的片段。(2)支持个性化学习。该需求打破了传统固有的课程结构,学习者可以根据自己的学习起点、学习层次等实际需求,进行跳跃式或查漏补缺式的学习等,同时可以根据实际学习效果自主调整学习策略和学习路径。(3)支持自主组课。组课的过程是面向特定教学群体的知识重用过程。该需求要求对知识资源的内在逻辑结构进行梳理分类,同时能够对学习对象的语义结构进行准确描述。

1.3 研究重点

根据上述应用场景得出学习对象的分析流程(图2)。由图2可知,在学习对象的分析流程中需要考虑若干问题。其中,设计合理的知识粒度层次、对其语义结构属性进行准确表达,同时对知识资源进行分类梳理,是本试验重点研究的关键问题。具体研究重点如下:(1)粒度。学习对象的力度大小是决定学习对象重用共享的重要因素。目前对学习对象的粒度缺乏明确规定[5]。粒度划分过大,重用性会降低;粒度太小,知识体系结构的复杂度会增加;如何根据用户的实际教学需要,确定适宜的学习对象粒度是大家需要解决的首要问题。(2)描述。应采用最本源的概念形式对学习对象进行简明清晰的描述,以准确表达学习对象的语义内容,对粒度划分进行指引,减少加工人员的主观性偏差,同时为教师组课提供辅助。(3)分类。为了实现学习资源的交换、共享和重用,需要对各类知识资源的逻辑关系、耦合关系进行梳理、整合,建立科学合理的类目体系,以便对资源进行分类组织。

2 模型设计

2.1 学习对象粒度

当一个学习对象规模越大时,它的内容就能越完整,更有利于实现教学目标,所表现出的教学意义也就会越高;但同时,它的灵活性与可重用性却随着规模的增大而相应变小。在综合分析用户需求及资源特点的基础上,本项目提出以知识模块为最小教学单元的多粒度学习对象模型(图3)。其中,知识模块是模型中最小粒度层级;章节指若干知识模块的组合;课时为若干章节组合所得的一节课;课程是具有完整教学意义的多个课时组合;课程体系则指一门完整知识体系的教学结构集合。学习对象各个层次的聚合特性如表1所示。

nlc202309032002

从表1可以看出,当一个学习对象规模越大时,它所包含的教学信息越多、内容越完整,更有利于实现教学目标,所表现出的教学意义也就会越高;但同时其灵活性随着粒度的增大而相应变低。

本研究所提出的知识模块是学习对象模型的基础与核心。将原始文献拆分为若干相对独立的知识模块,从而使知识点脱离原有的上下文语境,可以单独使用,也可以与其他模块组合成章节,在知识的表达和传递上更加灵活,具有更强的适应性。

将知识模块的划分原则设定为:(1)知识模块相对独立。模块内容应表达单一的知识含义,即与语言中的“语素”含义近似,模块内容只包含一个单一的知识含义,不存在一个知识模块中多重表意的现象。(2)知识模块已是最小知识单元,不能再细分。

2.2 知识模块描述

根据上述粒度原则可知,知识模块是最小知识单元,每个模块都可以从若干角度对某个概念进行说明,大家将这些角度称为概念的属性[6]。每一概念的属性和包含的知识内容就是一个知识模块,它单独表意,没有再细分的必要。有研究表明,当一个知识点的粒度处于不可再拆分状态时,其内容往往是围绕着一个特定概念的某种属性而进行论述的,换句话说,一个概念加一个属性就可以完整表达一个基本的知识内涵,因此为了实现知识处理的简单化和关系描述的标准化,可以将每个知识单元的描述概念化,即定义一个2元组:知识模块=(概念|属性)。此外,一个知识模块还有可能同时描述多个概念,对于这种情况则将知识模块定义为:知识模块=(概念1,概念2,…,概念N|属性|概念间关系)(图4)。

一篇文献中可能有多个概念,一个概念也可能有多个属性,概念和属性之间是“一对多”的关系。可以通过对现有知识资源进行分析,总结出一些通用属性以作指引。例如,从知识阐述形式的角度可以总结出定义、背景、解释、分析、比较等属性;从知识约束内容的角度可以总结出条件、目的、范围、影响、优缺点等属性。此外,一般来说,不同类型的文档都有其通用的层次结构,可以针对资源的不同类型总结其结构属性。知识模块的语义描述对用户的检索和精确定位、自主组课都至关重要,同时也为原始课程文档的拆分确定了依据和原则。

2.3 知识资源分类

为了有效地创建、组织和编列学习对象,有必要对各类知识资源的逻辑关系、耦合关系进行梳理、整合,建立科学合理的类目体系[7]。目前常用的线性分类法层次性好,能较好地反映类目之间的逻辑关系;实用方便,既符合手工处理信息的传统习惯,又便于电子计算机处理信息。但其缺点在于结构弹性较差,分类结构一经确定,不易改动。同时,当分类层次较多时,代码位数较长、效率较低。分面组配分类法可以较好地解决电子资源分类问题,而且本身建设成本较低,能够适应资源的变化,揭示细小专深的主题。但是绝对的组配也会带来类目及其不均匀,临时组合对标引要求较高的问题。因此,本方案采用半分面组配式分类法,结合线性分类法和分面组配法的优点,在有效控制分类法规模的同时,提高分类体系的适应性和灵活性,降低标引难度。

笔者以《中国农业百科全书》《中图分类法》等为参考,首先从知识内容的角度切入,以学科脉络为主要依据,按照信息资源描述的主题内容建立分类主分表,以涵盖知识资源的全部领域范围(表2)。

3 总结

本研究提出了一种面向农业领域的可重用学习对象模型,针对当前企业E-learning和知识管理系统中存在的可重用性需求,重点对学习对象的粒度、知识模块描述、知识资源分类等关键问题进行研究,为学习对象最大程度的重用和个性化学习提供支持,为下一步技术平台开发和应用奠定良好的基础。

参考文献:

[1]胡小勇,祝智庭. 可重用学习对象的分类法[J]. 电化教育研究,2003(8):9-12,17.

[2]李建龙,李 鹤,刚成诚,等. 5S一体化集成技术及其在农业科学中的应用进展[J]. 江苏农业科学,2010(5):26-29.

[3]David A W. Connecting learning objects to instructional design theory:a definition,a metaphor,and a taxonomy[EB/OL]. [2013-05-08]. http://archive2.nmc.org/projects/lo/sap_pa_wiley.shtml.

[4]祝智庭,胡小勇. 学习对象理念的发展历程[J]. 电化教育研究,2002(9):14-19.

[5]Reusable Learning-Glossary[EB/OL].(2010-10-08)[2013-05-08]. http://www.innovativelearning.ca/archive/resources/examples/glossary.htm.

[6]Information mappin[EB/OL]. [2013-05-08]. http://www.namahn.com/resources/documents/note-IM.pdf.

[7]马张华. 信息组织[M]. 3版.北京:清华大学出版社,2008:74-130.

[8]陈洪澜. 论知识分类的十大方式[J]. 科学学研究,2007,25(1):26-31.

再谈面向对象和面向过程技术 篇12

面向对象和面向过程的程序设计技术现在再来谈论,似乎是一个过时的话题。但是,教学中至今针对两者的关系理解不够透彻的学生不在少数。在Java、C++等面向对象的程序设计语言的很多教材里,面向过程的自顶向下逐步求精结构化的程序设计的三种控制结构占据了一定的章节数,其中很多例题是对三种控制结构使用方法的巩固,学生也常常是模仿着这种例题来练习,这常常造成学习面向对象的编程语言,而设计出面向过程的软件的局面,掌握不好面向对象的程序设计方法。20世纪80年代提出的面向对象的程序设计方法之后,对于程序设计的面向对象和面向过程两种方法,大部分教材偏重于讨论它们的区别,产生两种方法是对立的,互无关联的想法大有人在,似乎有了面向对象的技术,就可以不用面向过程。实际上,面向对象的技术是在面向过程的基础上,为程序设计提供了更多的手段和方法,两种技术不是非此既彼的对立关系,不能说面向对象的技术替代了面向过程,如果用面向对象的技术就要把一个软件任务划分成两个层次,第一个层次是做什么,第二层次是怎么做,那么面向对象技术是解决第一个层次的问题,面向过程则是解决第二个层次的问题,只有在两个层次上的任务都完成之后,才能说完成了整个程序设计任务。也就是说这两种程序设计方法只是从不同的层次来完成程序设计的任务,面向对象的技术是在面向过程的自顶向下逐步求精最终将软件分解成为具有三种控制结构的若干方法过程或函数基础之上,又提供了抽象、封装、继承、多态技术手段,从而能够设计出更好更复杂的软件。可以说面向对象技术中存在着面向过程,或者说面向对象技术就是抽象、封装、继承、多态加上顺序、条件、循环三种控制结构的使用。

2 两种技术的包含性

面向对象可以认为又提供“四”种技术:抽象、封装、继承、多态,面向过程有“三”种控制结构:顺序、条件、循环。以Java语言为例,用求1到n的简单问题来分析两种设计方法:

2.1 面向对象的技术是“四”加“三”的技术

(1)建立对象模型(类)———应用“四”的技术

(2)方法的具体实现———应用“三”的技术

2.2 面向过程的技术———仅仅应用“三”的技术

(1)分析出若干函数或过程并给出具体实现的细节

从上述简单的问题可以看出在用面向对象技术设计类后,一个类中就会有若干方法,每个方法完成一个特定的功能,在考虑类的行为功能实现时,显然是面向过程的思维方式,只是这些方法不再独立,而是与数据一起形成了一个有机的整体。面向过程技术存在于经过面向对象方法分析之后的形成的若干类的行为设计中也就是类方法实现之中。

面向对象的设计包含了面向过程,面向对象比面向过程站到了一个更高的层次上,主要进行总体结构模型设计(构建类),对数据和方法进行封装,面向过程主要是写函数或过程也就是确定类中的方法的实现,这也是类中的方法必须要做的步骤;就象我们建一个居民小区,先把围墙建好,决定好里面要做什么,然后还是要在里面进行盖房子的过程一样,要建好居民小区两个步骤缺一不可。所以说用面向对象的技术设计软件时包含了面向过程。

2.3 两种技术的同一性

对于一个方法要讨论的问题的关键问题是数据从哪里来,运算操作之后到哪里去的问题。方法也就是对输入数据进行处理从而得到结果输出,可以说是由三个部分:输入、操作、输出完成的,输入数据可以体现为的两种形式:无参数和有参数;输出数据同样体现为两种形式:无返回值和有返回值;简单的方法可以是无参数和无返回值的,例如:

讨论一下面向对象技术设计的类中的方法的输入和输出的情况。众所周知,无论是面向对象还是面向过程在描述问题时总是围绕着两个方面:方法和数据,教材中常提到面向对象是方法和数据合并或封装,面向过程是方法和数据分开或隔离,这个特性对类中的方法设计有什么影响?直接地具体地在程序设计时能带来什么好处?事实上,由于面向对象实现了数据和方法的封装,它的好处就是使得类中方法的输入数据多了一个来源,也就是输入数据有了两个来源,一个是类中的属性变量,另一个是方法的形式参数,例如上例中的getSum()方法,它是无参数的,那么它运算的数据来源于何处?实际上就是使用了本类中的数据----属性变量,也就是说当类中的属性能够满足类中的方法输入数据的需要,就可以无参数,虽然无参数,但具备有参数的功能,原因是类中的属性是可以随时变化的,这归功于面向对象的封装技术。当然,也可使用方法本身的数据----形式参数,设计出getSum(int n)方法,这就形成了同一方法的两种不同的实现,面向对象技术中的多态性,使这两种方法能够共存于一个类中,增加了类的可适应性和简洁性。如果用面向过程的技术只能设计出一个独立的过程或函数:getSum(int n),因为面向过程的程序和数据是分开的,每个过程也都是独立的,所以过程或函数在设计时没有别的数据来源,只有依赖于自身的形式参数,无法从别处获取数据,只能在方法内部构建形式参数做为伪数据以求得将来真实的数据———实际参数的传递。同理,类中方法处理的数据结果也变成了有两个去处:一个是类中的属性变量,一个是方法的返回值。这就是数据和方法封装在一起的好处,它使得输入输出有了更多的选择,这也是设计方法时解决算法之后要解决的重要问题。

再看下例:

面向对象的继承技术,使得类中面向过程的方法有了更多的功能。就单纯的面向过程的设计方法,没有实现封装、多态,继承等技术做支撑,也就是说缺乏一个可靠的围墙来做保护,使之不能在围墙之内随着问题的变化而变化,所以软件的可维护性、重用性,复杂度具有劣势。而面向对象的技术中也包含了面向过程的设计,面向对象的封装、多态和继承技术又允许同一个类中的面向过程的同一方法设计有更多的实现方式和更多的功能的扩充,如:getSum(),getSum(int n);getMul(),getMul(int n)。面向对象类中的方法的实现可以等同于在封装、多态、继承技术下的结构化程序设计中的函数设计,它使得类中的面向过程的方法设计有更多的实现,具有同一性。只是这些函数都有自己的归属———某一个类。

3 总结

应该看到,很多面向对象语言的教材中的例子严格说来都是用面向对象的语言写出的面向过程的程序,再加上学习程序设计言时大多是以先模仿例题为主,它带来的负面影响就是更加分不清楚两种技术的关系。另外,为什么教材中的例子是用面对象的语言写出的面向过程和程序呢?原因是大部分例题是属于简单的程序,实际上,对于简单和程序也是没有必要一定用对象的方式来思考问题,面向过程反而适用。用对象来理解和分析问题,并设计和开发出由对象构成的软件系统,是面向对象技术的核心,如果用这种方法设计软件它是离不开面向过程的,它是在面向过程的结构化程序设计所运用的三种控制结构之上又增加了类、封装、继承、多态等技术可以说是“四”加“三”技术来构造、测试、重构软件,因此,就有了比面向过程更多的软件设计和实现手段。这些技术能实现复杂系统的设计与开发,可大大提高软件的规范化程度和开发效率,提高软件的可重用性和降低系统的复杂度,这已是不争的事实。关键的问题在于两种思维模式的建立以及对它们包容性、同一性的认识,从而不致于两种方法混淆不清,得到非此既彼的结论,并能根据实际需要正确地选择设计方法。

摘要:面向对象和面向过程的程序设计技术现在再来谈论,似乎是一个过时的话题。但是,教学中至今对两者的关系理解不够透彻的学生不在少数。面向对象和面向过程可以看成“四”和“三”。有了面向对象的技术之后,产生两种技术非此既彼的对立关系的思想是由于过度强调它们的区别造成的。两种思维模式的建立是关键的问题,程序设计中能根据实际需要正确地选择设计方法。

关键词:程序设计,面向对象,面向过程,同一,对立

参考文献

[1]陈志泊.面向对象的程序设计语言C++[M].北京:人民邮电出版社,2009.

上一篇:互联网中职计算机教学下一篇:谷子生产技术