书城社会科学研究型大学建设本科教学改革的研究与实践
19080000000129

第129章 教学内容与课程体系改革()(70)

(三)匿名类

类有两种重要的成员:成员变量和方法。类还可以有另一种成员:内部类。在一个类中声明的另一个类称为内部类,而包含内部类的类被称为外嵌类。匿名类是一种内部类,它把类的定义和使用(即对象的实例化)结合在一起,且没有类名。

1.与类有关的匿名类当使用类创建对象时,可以把类体与对象的创建组合在一起。也就是说,类创建对象时,除了构造方法还有类体。此类体被认为是该类的一个子类去掉类声明后的类体,称其为与类有关的匿名类。

2.与接口有关的匿名类

可以用接口名和一个类体来创建一个匿名对象,此类体被认为是实现了接口的类去掉类声明后的类体,称其为与接口有关的匿名类。

3.使用匿名类的场合

匿名类的一个重要作用是能够提供适配器类(AdaPter)的简单实现方式。此外,在下列这些情况下,也建议使用匿名类:

(1)类的主体部分非常短;

(2)只需要类的一个对象实例;

(3)类的使用恰好在它的定义之后;

(4)没有类名称不影响对代码段的理解。

三、结论

在Java的学习过程中,初学者要注意掌握上述提到的这些内容。此外,还有一些语言之外的建议。由于大部分学生先学C++后学Java,而且C++又掌握得不好,特别是指针的使用。在学习Java时就对面向对象语言有心理障碍,担心也学不好。因此,首先要克服这种不良心理,这也需要教师进行恰当的引导。还要多上机实践,编程语言是一门很强的实践课程,单纯靠死读教材是无法完全掌握的。多研读好的Java源代码,读懂后试着改动它,然后再模仿别人的代码开始编写,最后达到自己设计和编写代码。编程时多参考Java的API帮助文档,它的作用等同于学习VC时的MSDN。充分利用好这个帮助系统就能解决好Java的类库很庞大的这个问题。

参考文献

[1]Bruce Eckel.Java编程思想.陈昊鹏译.北京:机械工业出版社,2006.

[2]耿祥义,张跃平.Java2实使用教程.北京:清华大学出版社,2006.

[3]朱仲杰.Java2全方位学习.北京:机械工业出版社,2006.

[4]陈淑清,蓝雯飞.剖析Java语言的抽象类和接口.微计算机应用,2004,25(4):626-630.

[5]蔡学镛.Java 的多态.程序员,2002,6:76-78.

[6]David Flanagan.Java技术手册.吴益华译.北京:中国电力出版社,2002.

[7]蓝雯飞.基于Java 语言的多态性探讨.电脑知识与技术,2005,7:29-32.

NS2在“计算机网络”类课程教学中的应用

赵阿群

(北京交通大学计算机与信息技术学院,100044)

摘要:为了解决“计算机网络”类课程教学和实验面临的实际问题,构建了一个“基于NS2的计算机网络教学演示和实验系统”,该系统由教学演示系统和学生实验系统两部分组成,前者供教师课堂授课时演示使用,后者供学生实验课或课后实验使用。该系统在实际教学和实验中取得了一定的效果,下一步的工作重点将放在实验库的完善和系统使用的方便性等方面。

关键词:计算机网络课程 NS2演示系统 实验系统

一、引言

“计算机网络”类课程的教学涉及大量的网络协议,而计算机网络协议具有抽象性、异步性、并发性和多任务等特征。目前,教学中教师大都采用口头讲述的方法给学生讲解网络协议,并通过一些图示或动画加深学生的直观感受,在实验中让学生编程实现部分简单的协议机制。这些传统的教学和实验方法中普遍存在着教师讲解费力,学生理解困难等问题。因此,如何通过新的实验方法让学生直观地观察到协议运行中的复杂行为,从而加深对网络协议的协议机制和控制策略的理解是“计算机网络”类课程教学中的一个难点和亟待解决的问题。

另一方面,计算机网络研究领域存在不少优秀的网络仿真软件(如NS2、OPNET等),它们提供了强大的计算机网络协议仿真功能,能够方便生成各种协议运行环境(如不同拓扑结构、不同数据流量等),并能够以可视化的方式直观显示协议行为。然而,这些仿真软件本身都是一个难学的庞大系统,其安装和使用都比较复杂,目前主要供计算机网络研究人员研究、扩充和开发新的网络协议使用,对于初学计算机网络的学生来说,让他们直接学习和使用这些仿真软件很不现实。

为了解决上述矛盾,我们构建了一个“基于NS2的计算机网络教学演示和实验系统”,在网络仿真软件NS2和学习计算机网络的学生之间建立起一条连接的桥梁。通过该系统,学生既可以省去难以学习网络仿真软件的困难,又可以利用其强大的协议仿真能力进行网络模拟实验,从而更加深入地理解网络协议中的复杂行为。该教学演示和实验系统能够应用到“计算机网络原理”、“网络新技术”和“计算机网络基础”等课程的教学和实验中。

二、NS2简介

网络仿真是一种利用数学建模和统计分析的方法模拟网络行为,从而获得特定的网络特性参数的技术。NS2是美国加州大学伯克利分校LBNL 网络研究组开发的一个网络仿真软件,主要用在与网络相关的仿真,无论是固定网络还是无线网络,它都有很好的支持,尤其在新的网络协议研究方面,具有重大价值。

NS2是一个面向对象的基于离散事件驱动的网络仿真工具,其核心部分是一个离散事件模拟引擎。NS2中有一个“调度器”类,负责纪录当前时间,调度网络时间队列中的事件,并提供函数产生新事件,指定事件发生的时间。在一个网络模拟器中,典型的事件包括分组到达、时钟超时等,模拟时钟的推进由事件发生的时间量确定。模拟处理过程的速率不直接对应着实际时间。一个事件的处理可能又会产生后继的时间。模拟器所做的就是不停地处理一个个事件,直到所有的事件都被处理完或者某一特定事件发生为止。

NS2提供了丰富的构件库,已经对网络系统中一些通用的实体进行了建模,如节点和分组转发、链路和延迟、队列管理与分组调度、代理、时钟、分组头及其格式、局域网、移动网络、卫星网络等,并用对象来实现这些实体的特性和功能。同时NS2还提供了丰富的数学支持,如随机数产生、积分等;提供了方便的追踪和监视方法;提供了完整的路由支持,如单播/组播路由、动态/静态路由、层次路由等。NS2支持GPRS、移动IPv6、蓝牙技术、RSRV、MPLS、Ad Hoc 无线网等新技术的仿真。

NS2中的构件库由两种语言编写:C++和Otcl。C++是广为人知的高级程序设计语言;Otcl是MIT开发的Object Tcl,即面向对象的扩展。tcl全称是Toolkit Command Language,它是一种灵活的、交互式的脚本语言。NS2中的构件通常都作为一个C++类来实现,同时有一个Otcl类与之对应,这种方式被称为分裂对象模型。这种模型兼顾了仿真性能和灵活性两个方面。一方面,C++是高效的编译执行语言,可使仿真过程的执行获得较好的性能;另一方面,Otcl是解释执行的,用Otcl 进行仿真配置,可以在不必重新编译的情况下随意修改仿参数和仿真过程,提高了仿真的效率。

为了直观地观察和分析仿真结果,NS2还提供了可选件NAM和XgraPh。其中,NAM为“Network Animator”的缩写,是一种动画显示工具,用于演示网络运行动画,如网络拓扑、包传输等。在NS2中,仿真的全部宏观过程都可以通过NAM这个图形界面得到,它可以显示从仿真开始到结束过程中的拓扑结构和各个代理的行为及链路的状态。而XgraPh用于显示静态的图形曲线,它可以将结果转换成易于比较的平面统计图,方便使用者对网络性能进行分析。

三、系统的构建

基于NS2的计算机网络教学演示和实验系统由两部分组成:一是教学演示系统,供教师课堂授课时演示使用;二是学生实验系统,供学生实验课或课后实验使用。在本系统中,我们不需要修改NS2已经实现的协议,也不需要添加新的协议,因此不需要添加或修改NS2的C++代码,不需要重新编译NS2。本系统中用到的NS2仿真过程见图1的虚线框部分,即只需要编写/修改Otcl脚本、运行NS2仿真和观察分析结果。

(一)教学演示系统

教学演示系统主要供教师课堂授课时演示使用。教学演示系统中使用NS2的过程如图2所示,它分为两个过程:一是实验库开发过程,二是课堂演示过程。

实验库开发过程见图2中虚线以上的部分,其目的是为课堂演示准备好材料,并形成实验库,方便在需要时修改和调用。实验库开发的具体步骤如下。

(1)开发者根据课程内容,编写相应的Otcl脚本。例如,为了演示TCP 拥塞控制中的慢启动机制,我们分别编写了两段Otcl脚本:WithSlowStart.tcl和WithoutSlowStart.tcl。两者仿真环境类似,只是前者使用带慢启动机制的TCP,后者使用不带慢启动机制的TCP。

(2)对编写的Otcl脚本运行NS2仿真,生成Namtrace文件。在上例中,我们分别对WithSlowStart.tcl 和WithoutSlowStart.tcl 运行NS2仿真生成相应的Namtrace 文件WithSlowStart.nam 和WithoutSlowStart.nam。

(3)利用NAM工具观察分析实验结果。在上例中,我们利用NAM工具分别打开WithSlowStart.nam和WithoutSlowStart.nam,对比分析实验结果,重点考察实验结果是否体现了TCP带慢启动机制和不带慢启动机制的差别。

(4)如果实验结果满足课堂演示要求,分别将Otc脚本和Namtrace 文件加入Otcl脚本库和Namtrace文件库。

(5)如果实验结果不能满足课堂演示要求,则修改Otcl脚本,然后重复执行步骤(2)-(4)。

实验库的开发完成后,形成相应的实验库(包括Otcl 脚本库和Namtrace 文件库),供课堂演示时调用或需要时(如课堂内容变更)修改。

课堂演示过程见图2中虚线以下的部分,具体步骤如下。

(1)授课教师根据课堂教学的需要,从实验库中选择相应的材料。例如,为了讲授TCP拥塞控制中的慢启动机制,可以选择上例中的WithSlowStart.nam和WithoutSlowStart.nam文件(演示时只需要Namtrace文件,不需要Otcl脚本)。

(2)将选择的Namtrace文件引入到演示文稿中。我们解决了在PowerPoint演示文稿中打开Namtrace文件的问题,因此授课教师可以很方便地将要演示的Namtrace文件插入授课用的PowerPoint演示文稿中。例如,为了演示TCP慢启动机制,可以制作的PowerPoint页面。

(3)课堂授课时进行演示。上例中,只要点击PowerPoint 页面中的【演示】按钮,就可以利用NAM 工具打开相应的Namtrace文件,向学生演示慢启动机制的工作过程。

(二)学生实验系统

学生实验系统主要供学生实验课或课后实验使用。学生实验系统中使用NS2的过程如图5所示。从图5中可以看到,学生实验系统的最大特点是提供了一个可视化界面,该可视化界面是学生进行实验的集成环境。通过该集成实验环境,学生可以建立仿真环境、生成Otcl 脚本、运行NS2仿真并观察分析实验结果。

我们利用了美国DePaul 大学MNLAB 实验室开发的nsBench 软件来搭建学生实验系统的集成实验环境。nsBench 是一种图形化的Otcl 脚本生成工具,利用它可以通过可视化方式建立仿真环境,从而省去初学者编写Otcl 脚本的麻烦。

学生通过实验系统进行实验的具体步骤如下:

(1)参照实验指导书,利用nsBench 工具建立仿真环境,所要完成的工作包括创建网络节点,创建节点间的链路并设置带宽、时延等链路参数,创建运输层代理并设置相关参数,创建数据源并设置相关参数,设置数据源的启动和停止时刻及仿真结束时刻,设置仿真结果Namtrace 等文件的文件名;(2)通过菜单命令自动生成步骤(1)中仿真环境对应的Otcl 脚本;(3)以生成的Otcl 脚本为输入,通过菜单命令运行NS2仿真,生成Namtrace 文件;(4)NS2仿真运行完成后,会自动利用NAM 工具打开生成的Namtrace 文件显示数据包的发送接收过程,学生可以观察分析实验结果。