资源描述
“数据结构”综合性课程设计教学探索与实践
摘要:本文针对“数据结构”课程的传统教学方法存在的问题,就综合性课程设计的内容选择、实施方法与激励手段等方面进行了一系列的改革探索。<br> 关键词<br>本文来自:计算机毕业网 :数据结构;课程设计;启发式教学<br> <br> 1引言<br> <br> “数据结构”作为实践性很强的计算机专业的基础课,教学中必然离不开实践。针对数据结构的课程设计实践不仅可以帮助学生巩固和加深对课程内容的理解,更重要的是可以进一步锻炼程序设计的技能,并初步感受软件开发的规范,更能全面培养学生综合运用知识的能力、文献检索与分析能力、工程化能力、进行研究性学习的能力、创新能力以及团队合作的能力等。本文是作者所在教学团队八年来的课程设计实践小结,介绍了在“数据结构”综合性课程设计的内容选择、实施方法与激励手段等方面进行的一系列改革探索。<br> <br> 2传统教学方法存在的问题及解决思路<br> <br> 数据结构的课程实践可分为一般性实验和综合性课程设计。在传统的课程教学中,往往采用一般性实验作为课程实践的主要内容,即布置针对本次课堂教学内容的小型练习题,让学生独立完成程序设计与实现。这样的实践主要存在两方面问题:<br> 第一,练习题所需要用到的知识点就是课堂教学刚讲授过的内容,学生只要直接拿来用就可以,不需要自己去考虑各种可能的解决方案并找到最合适的方法。这种实践是验证性的,比较简单直接,学生受到的锻炼相对较少。<br> 第二,学生独立完成小型程序,虽然可以在一定程度上锻炼编程能力,但这个锻炼的层次和涉及面都比较窄。现代软件开发的规模,使得团队合作在大多数情况下成为必须。而且部分数据结构只有在处理大规模输入的复杂问题时才能体现出优势,编写小型程序很难使学生真正认识到该数据结构存在的意义。<br> 针对上述问题,我们在设计较大规模的综合性课程设计时就必须注意两个方面:<br> 第一,课程设计题目覆盖的知识点应尽可能避免单一,要采用启发式的设计思路,引导学生围绕课程设计目标,通过查找与分析有关参考资料,进行探究式的学习,激发创造的意识和能力。所以,在题目设计和实施中,不应该只是“手把手”地教,要给学生留出发挥想象力和创造力的空间。<br> 第二,题目的规模应充分大,并且努力使学生对规范性的软件开发有初步体验,在一定程度上使得学生的工程化能力和团队合作能力得到锻炼。<br> 而上述两方面的考虑若要取得真正好的效果,还必须有一套行之有效的激励机制,既可以公平地判定每个学生作为个体的能力,又可以鼓励团队精神,同时还可以鼓励学生开拓创新思维,主动进行研究性学习。<br> <br> 3课程设计的内容选择、实施方法与激励手段<br> <br> 3.1内容选择<br> 综合性课程设计应强调知识的综合运用,锻炼学生对复杂问题进行分析与求解的能力,所以在选择内容时可以从以下三方面考虑:<br> 第一,题目应避免涉及单一知识点。例如“迷宫问题”,即输入一个迷宫的布局,要求找到一条走出迷宫的路径并用图形界面显示。学生可以选择用不同的数据结构表示迷宫以及移动方向,可以选择用深度优先或者宽度优先搜索的算法来得到路径,同时还锻炼了对图形界面的编程技巧的掌握。又例如“宇宙旅行”,即给定两星球间各个中转空间站的临时客流容量,求终点星球接待站的总客流容量。此题目的解法主要涉及网络流算法;在每一步修正流量时,可以选择剩余图中从起点到终点的最短路径,则又涉及到单源最短路径算法;最后为了提高查找空间站名称的效率,可以采用散列表进行名称映射。<br> 第二,为锻炼学生进行研究性学习的能力,可设计算法效率分析比较类型的题目。例如比较普通的二叉搜索树、平衡搜索树和伸展树的插入与删除操作效率,要求通过实验取得三者的实际运行时间,绘出三者复杂度函数的曲线,分析比较它们的效率并给出证明等等。<br> 第三,采用启发式教学思路,设计有多种解法的题目,可以给学生留出发挥想享力和创造力的空间,锻炼学生灵活运用知识分析问题和解决问题的能力。例如“熊猫烧香”,即以著名病毒“熊猫烧香”的传播规律为背景,要求计算整个网络被各种病毒变种感染的情况。题目可以简单地用广度优先搜索解决,但是效率比较低。巧妙一点的方法可以将求单源最短路径的Dijkstra算法略做修改,得到效率明显提高的解决方案。更快的算法则是利用并查集。教师可以通过设计不同层次的测试数据来区分不同效率的算法,鼓励学生自己去尝试各种方案,找出最有效的解决办法。<br> 在内容选择方面,我们还建议参考历届ACM国际大学生程序设计竞赛的题目,该竞赛特别强调考察参赛选手对各种算法的应用能力,题目的综合性较强,非常适合辅助学生学习体会数据结构的妙用。浙江大学建设有全球著名的程序设计竞赛练习网站(http://acm.zju.edu.
cn/),提供在线自动裁判系统,简称ZOJ,目前拥有各类竞赛练习题目近2000道,为数据结构课程设计提供了丰富的题库资源。本课程组设计的多道课程设计题目就取自或改编自该网站的练习题。<br> 3.2实施方法<br> 综合性课程设计不仅仅是以实现相应的程序为目标,更重要的是培养学生今后从事软件开发所需要的各种能力与素质,包括测试能力和文档写作的能力。因此,在课程设计实施中,我们将学生分成三人小组,分工负责程序编写、测试以及实验报告撰写工作。<br> 一份完整的实验报告至少应包含以下四部分内容:<br> (一)实验内容简介:这一部分需简单介绍题目内容,即该实验到底要做什么。如果涉及明确的算法,最好再简单介绍一下算法产生的背景。<br> (二)算法说明:这一部分需详细描述解决问题所需要用到的算法和重要的数据结构,即该实验到底应该怎么做。<br> (三)测试结果:这一部分需根据题目类型设计提供相应的测试方法和结果。对于需要比较不同算法性能优劣的题目,应设计并填写一张性能比较表格,列出不同算法在同一指标下的性能表现。对于需要利用某算法解决某问题的题目,应设计并填写一张测试用例表。每个测试用例应包括测试输入、测试目的、正确输出、实际输出、错误原因等等。<br> (四)分析与探讨:这一部分除了对测试结果进行分析外,还要求学生不局限于题目要求使用的算法,探讨更多解决问题的途径,或者提出自己的见解,给出改进算法以得到更好结果的建议。<br> 其中第一、二部分以及全文统稿由文档员负责,第三、四部分由测试员负责。整个学期发布的课程设计题目数应该是3的倍数,使得每组的三个学生有机会均衡体验三种不同的角色。<br> 3.3激励手段<br> 大学教育心理学研究表明,学习兴趣通过适当的引导,会引发学生的需要和动机,进一步产生持续不断的兴奋,从而激发积极的行为反应,努力去实现预订目标。而让学生产生浓厚的学习兴趣,就必须建立有效的激励机制。<br> 首先程序员、测试员、文档员的工作难度不同,其工作的分数分配也应不同。例如我们采用50:30:20的分配制度,这样只有在三个课程设计中将三种角色分别体验一遍,才有可能得到满分100。<br> 其次教师应对“分析与探讨”部分特别关注,及时发现并鼓励学生的创新思维。一句简单的鼓励就可能对学生的主动学习热情起到非常大的引导和推动作用。<br> 另外,由于每个学生的能力水平不同,应使组内每个人的成绩相对独立,不依赖于其他组员的表现而得分。例如程序员只要正确完成了自己的程序,且注释充分,就可以得满分;测试员的测试计划和测试用例设计都不依赖于源代码,即使程序员无法提供程序,测试员只要完成了测试计划的设计,对算法进行了理论上的分析,就可以得到满分;文档员的工作相对独立,只要完成了自己负责的章节并将手头所有资料整合为一体,就可以获得满分。这样做的目的是体现评分的公平性,尽量避免能力强的学生为了自己的成绩不受影响而“包办”全组的工作。<br> 当然,分组实验的另一个目的,是锻炼学生的沟通与团队合作能力。这个目的可以通过教师的激励来达到,即教师在点评每道题目的完成情况时,对个别优秀的组提出表扬,而只有三项工作都完美的组,才会获此殊荣。这时学生会在完成了自己工作的情况下,对队友提供一定帮助,以获得团队的荣誉。<br> <br> 4成果<br> <br> 课程组在浙江大学八年的不断探索和改革取得了良好的成效。最为明显的效果是,学生参与各级程序设计竞赛的积极性逐年增长,从2001年48队100多学生参加首届浙江大学程序设计竞赛,到2007年286队近千名学生参赛,竞赛规模在7年中增长迅猛。而浙江大学参加ACM国际大学生程序设计竞赛的队伍,在没有常规辅导的情况下,凭借扎实的数据结构基本功,也连年在国际竞赛中取得出色的成绩。 <br> <br> 参考文献<br> [1] 教育部高等学校计算机科学与技术教学指导委员会. 高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行)[M]. 北京:高等教育出版社,2006.<br> [2] 何钦铭,冯雁,陈越. 数据结构课程设计[M]. 杭州:浙江大学出版社,2007.<br> [3] 林正范. 大学心理学[M]. 杭州:浙江大学出版社,2000.<br> </p> <p> </p> <p>
</p>
摘要:“计算机图形学”是计算机专业的一门非常重要的基础课程,但在教学中存在很多问题,本文总结了两种结合方式的教学方法,分析和探讨了其在教学中的应用。<br> 关键词:计算机图形学;教学方法;教学与实验<br> <br> 1引言<br> <br> “计算机图形学”在计算机科学与技术专业的一门基础课,其课程涉及图形硬件设备、图形系统、交互技术、基本图形生成算法、几何变换、真实感图形生成等内容。在笔者的教学实践当中发现教学过程中普遍存在以下两个问题。<br> 1.1理论知识掌握方面<br> 由于“计算机图形学”具有较强理论性,部分算法比较抽象不易理解。所以学生在学习的时候很难将抽象算法与具体的三维图像结合起来,经常表现出畏难情绪。<br> 1.2实践能力培养方面<br> 由于“计算机图形学”课程的教学主要精力放在了图形的基本概念和算法原理的讲解上,上机实践环节滞后;另外,现在大部分的教材中仍然是以Turbo C作为上机实习的平台,但是由于Turbo C再实际应用中早已不作为开发工具使用,学生并不能够在实验中获得未来就业环境下真是需要掌握的编程知识,需要二次学习才能适应社会的需求。<br> 针对以上问题,给出以下解决方案。<br> <br> 2理论讲解与具体开发工具的使用相结合<br> <br> 图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。如何在计算机中表示图形以及利用计算机进行图形的计算、处理和显示的相关原理与算法,构成了计算机图形学的主要研究内容。目前,大部分《计算机图形学》教材都是以计算机图形学的基本概念、基本理论、基本原理及经典算法作为主要内容,以丰富学生的基础知识,培养学生的独立研究能力。然而,在微型计算机日益普及的今天,随着计算机科学及技术的发展,出现了很多功能完善的图形软件标准和图形软件,如何利用他们培养学生的学习兴趣,提高实际应用的能力,则是当今教学的重点。<br> 为了能够更加广泛地接触和学习图形软件,笔者在以Turbo C语言作为开发工具来介绍基本图元的经典画法的同时,将OpenGL引入到计算机图形学的学习中。<br> OpenGL是近10年来发展起来的一个性能卓越的、通用共享的三维图形标准,已得到广泛应用。OpenGL提供十分清晰明了的图形函数,所以图形绘制可以通过它的各种函数来实现。OpenGL具有标准型、稳定性、可扩展性、可缩放性、易用性、可靠性和可移植性等特点。与其他图形程序包相比,OpenGL应用程序代码行数少,又封装了有关基本硬件的信息,因此在很多领域都得到广泛的应用。<br> 在教学过程中,为了让学生对“计算机图形学”中所讲解的知识能够更好的理解和掌握,可以从三个步骤来进行讲解:<br> 2.1理论讲解——基本概念、原理及算法<br> 理论讲解过程中,我们可以把OpenGL与之结合起来。例如:我们在讲解直线的扫描算法时,首先介绍经典的中点绘制直线算法和Bressman算法,通过这两个算法的原理的介绍可以使学生了解到在计算机中怎样以像素作为处理单位来实现直线的绘制。然后,我们可以介绍一下OpenGL中对直线进行绘制的方法,从而体会两种开发工具的相同和不同之处:<br> (1) Turbo C:Bressman算法实现直线的绘制<br> voidBresenham_Line (int x1, int y1, int x2, int y2,int color)<br> {<br> intx, y, dx, dy, dk, i;<br> dx = x2 – x1;dy = y2–y1;dk = dy – dx;<br> x = x1;y = y1;<br> for (i = 0; i<=dx; i++)<br> { putpixel (x, y, color);<br> x=x + 1; <br> if(dk<0)<br> dk=dk+2*dy;<br> else<br> {y = y + 1; dk = dk +2*dy– 2 * dx; }<br> }<br> }<br> (2)OpenGL实现<br> glBegin ( GL_LINES );<br> glColor3f(1.0,1.0,0.0);<br> glVertex2f(-11.0,8.0);<br> glVertex2f(-7.0,7.0);<br> glEnd();<br> 在Turbo C中需要具体的算法和参数实现对像素逐个处理从而形成一条直线;在OpenGL中我们只需要给出直线的坐标、属性的数据就可以得到一条直线了。这样学生就可以了解到直线的绘制原理,以及在实际开发中具体实现发法,有效地把理论知识与实际应用结合起来,达到了较好的教学效果。<br> 2.2多媒体演示——各种图元、概念、算法的实现和变化过程<br> 由于“计算机图形学”这门课程中的很多理论知识比较抽象不容易理解,特别是需要学生具有较好的三维空间的立体感,才能更好的理解所学的知识,例如对坐标变换、投影变换等部分的概念的理解,对很多学生来讲都很难理解,为了达到更好的教学效果,可以将OpenGL引入到课程学习中,通过OpenGL的对应函数的多媒体演示,帮助学生更好地掌握这部分知识。在介绍了基本的变换中的平移变换、缩放变换和旋转变换的概念时,在计算机图形学中我们一般是通过二维的图形来帮助学生理解,如图1~3。<br> <br> OpenGL多媒体演示见图4。<br> <br> 在OpenGL中分别使用glTranslatef()来表示平移变换,三个参数分别表示在三个坐标平移的距离;glRotatef()用来表示旋转变换,一个参数表示旋转地角度,另外一个参数表示旋转轴的坐标;glScalef()表示缩放变换,三个参数表示在三个坐标轴方向的缩放比例。这里,通过多媒体可是课件,通过鼠标来控制参数的值,根据参数值的变化,显示效果也会随之变化。通过这种三维的动态多媒体课件的演示,可以使学生更好的理解三种变换,同时对OpenGL中对应的函数及其参数的具体含义有了更好的掌握。<br> 2.3具体应用——原理算法的具体应用<br> 在完成前两个步骤的基础上,可以通过一些小的应用程序或游戏程序的演示,将其中对应的图形绘制方法的应用提炼分析出来,这样可以使学生对所学知识的具体应用有较直观的认识,为其将来的进一步学习和实践打下基础。<br> <br> 3教学与实验相结合<br> <br> “计算机图形学”是一门实践性很强的课程,但在目前,普遍存在的现象是“计算机图形学”课程的理论教学内容存在着一定孤立性,与上机实践联系并不紧密;因此,有必要加强学生动手能力的培养。为了确保计算机图形学课程的教学质量,应该选用目前市场上比较流行的图形开发环境作为学生的实践环境,同时也要注重课堂知识的消化,因此理论知识的对应实验也不能轻视。笔者认为应将两者有效地结合起来才能达到更好的效果。<br> 为了能够帮助学生更好地理解理论知识,更好地提高动手能力,实验部分可以分三部分进行:<br> </p> <p> <p>(1) 基础实验:主要完成各种理论讲解过程中学习的代码实现,编程环境为Turbo C。<br> (2) 提高实验:以Visual C++ 和OpenGL作为开发环境,进行实践动手能力的培养和训练。<br> (3) 体验实验:以3D Max作为开发环境,进行图形图像软件开发的体验实验。<br> 基础实验可以帮助学生更好地理解基本的理论和各种基本图元的经典算法。<br> 提高实验可以提高学生理论联系实际的能力,能够使学生更多地接触实际开发中所使用的工具和开发环境,为将来的工作打好基础。<br> 体验实验中的3DMax是图形开发的具体产品,通过对其的使用和接触,可以让学生感知到计算机图形学的应用情况。<br> 通过基础实验、提高实验和体验实验的结合练习,不但可以提高学生的编程能力,而且加深了学生对所学知识的了解和认识,使学生对“计算机图形学”的实际应用有了感性的认识。<br> <br> 4结语<br> <br> “计算机图形学”是计算机学科的主要基础课程之一,但由于各种原因,学生学起来有一定的难度,这给授课的教师带来相当大的挑战。“计算机图形学”的教学是一个复杂的系统工程,它会涉及到诸多方面的问题,以上所述仅仅是笔者授课过程中得粗略总结,有不妥或不足之处,敬请大家批评指正。 <br> <br> 参考文献:<br> [1] 张曦煌,杜俊俐. 计算机图形学[M]. 北京邮电大学出版社,2006,8.<br> [2] OpenGL体系结构审核委员会等. OpenGL编程指南(第4版)[M]. 人民邮电出版社,2005,4.<br> [3] 陈元琰, 张睿哲, 吴东. 计算机图形学实用技术(第2版)[M]. 清华大学出版社,2007,3.<br> <br> Teaching method discussion of Computer Graphics<br> XUE Chun-yan<br> ( XiamenUniversity Tan Kah Kee college)<br> Abstract:Computer Graphics is a very importment course of computer speciality , here are a lot of problems in teaching, this text has summarize two kinds of teaching methods and has analyzed and probed into its application in teaching.<br> Key words: Computer Graphics; teaching method<br> </p> <p> [1] <p>
</p>
<P>评价软件中实现数据模糊查询的方法</P>
<P> 关键词:数据库;评价管理;模糊查询 <BR>摘要:利用计算机对教学质量进行管理,是实现教学管理规范化和科学化的重要手段。本文以黑龙江省教育厅高职高专院校科学技术研究项目《高职院校教学质量评价系统软件的开发与应用》项目编号:11525049为例,介绍了教学质量评价系统数据库优化查询的设计。 </P>
<P><BR> 一、引言 <BR> 随着网络技术的迅速发展 ,信息资源数量快速增长。在教学质量评价系统中,存在模糊概念和模糊信息。如何在已有的数据库中查询这些模糊信息 ,这就需要通过定义隶属函数,对结构化的查询语言SQL进行模糊化处理,形成模糊化。本文主要介绍如何在pb中根据数据窗口中的字段对数据窗口进行模糊查询。本系统的代码示例采用PowerBuilder8.0进行演示。 <BR> 二、窗口的代码及设计 <BR> 1.新建一个窗口,命名为w_query。在窗口中放入一个数据窗口控件,命名为dw_master。在dw_master中放入一个数据窗口;放置一个按钮,命名为cb_query 。在窗口的Open事件中增加如下代码:dw_master.setTransObject(sqlca)。在dw_master的ue_action_query中增加如下代码: str_result_column lstr_1//结构str_result_column的成员adw_result指查询结果所产生作用的dw//成员adw_column指在本窗口查询条件所要显示的dw: lstr_1.adw_result = this <BR> lstr_1.adw_column=this <BR> OpenWithParm(wroot_dw_query,lstr_1) <BR> 2.属性和主要代码如下: <BR> Visibl=true Enabled=true TitleBar=true Title="定位查询" <BR> DataWindow dw_result,dw_detail <BR> pfc_n_cst_string inv_string <BR> string sSyntax <BR> 注释:a.pfc_n_cst_string 为PFC用户对象。 <BR> 3.窗口事件代码: <BR> close 事件:功能:将用户本次所输入的查询条件记录到文件sIniFile的WhereClause1...n小节中去以备下次启动时置初始查询条件。 <BR> open事件:功能:设置初始值,具体请看代码中的注释。 <BR> integer i,row,li_where_row=10 <BR> string tmp <BR> str_result_column lstr_1//结构str_result_column的成员adw_result指查询结果所产生作用的dw <BR> 三、函数的主要代码设计 <BR> 设计了三个窗口函数wf_getywname (string hzname)、wf_getywtype (string hzname)函数、wf_dateconvert (string svalue)函数。功能:见程序中注释。 <BR> string syear,smonth,sday <BR> date idate <BR> public function string wf_datetime (string inputvalue) <BR> inputvalue=trim(inputvalue) <BR> integer position <BR> string bef,aft <BR> /* bef为日期,aft为时间*/ <BR> position = pos(inputvalue," ") <BR> string syear,smonth,sday <BR> dw_2.ReSet() <BR> For i=1To long(dw_1.Object.DataWindow.Column.Count) <BR> scol=dw_1.Describe("#"+String(i)+".Name")//列名(可变) <BR> syw=stable_col //列名(不变.OK) <BR> shz=trim(dw_1.Describe(scol + "_t.Text")) //中文名 <BR> stype=dw_1.Describe(scol+".ColType") //列类型 <BR> if dw_1.Describe(scol + ".Type")="column"& <BR> and shz<>"!"and shz<>"?"then <BR> shz=lnv_string.of_globalreplace(shz,":","") //去掉冒号 <BR> row=dw_2.InsertRow(0) <BR> dw_2.object.data[row,1]=shz <BR> dw_2.object.data[row,2]=syw <BR> dw_2.object.data[row,3]=stype <BR> dw_2.object.data[row,4]=stable <BR> end if <BR> Next <BR> 四、小结 <BR> 在模糊查询中,注意使用%为通配符。通配符LIKE用于字符串),如果要对数字进行操作,用in...in(200,230)),[]指定范围([a-f])或集合([abcdef])中的任何单个字符。将通配符作为文字使用可以将通配符模式匹配字符串用作文字字符串,方法是将通配符放在括号中。 <BR> 参考文献: <BR> [1]张厚粲,刘昕.考试改革与标准参照测验.辽宁教育出版社,1992,9 <BR> [2]薛理银.教育信息处理原理.北京师范大学出版社,1996,3 <BR></P>
<P> </P>
</p>
摘要:本文根据“网络编程”教学课题组多年的实际教学经验,分别对理论、实践、考核教学环节中的教学方法进行了总结,强调以学生为主体,结合案例教学,采用启发式、互动式、目标式多种教学方法,在实际教学中取得了较好的效果。<br> 关键词:网络编程;教学方法;理论教学;实践教学<br> <br> 1课程介绍<br> 网络编程通常包括3类编程[1]:基于TCP/IP协议簇的网络编程、基于WWW应用的网络编程、Web Service网络编程。“网络编程”课程主要是指基于TCP/IP协议簇的编程方式,作为“计算机网络”的后续课程,在计算机类专业课程体系中占有十分重要的位置,是网络工程专业的必修课。本课程要求学生在理解计算机网络的基本理论的基础上,运用高级语言进行编程开发,注重实践环节。因此我们在大四上学期开设本课程,总学时为54(34+20)学时。<br> 2教学方法设计<br> 2.1理论教学<br> (1) 以人为本,学生自选编程语言。现有的网络编程语言主要有MFC C++/C#.NET/Java[1-3],后两种语言是目前的主流选择。早期的网络编程大都是基于UNIX或Windows的套接字API,采用C或C++作为编程语言。此后由于Java鲜明的网络特色和跨平台特性,J2EE技术的推广普及,使用Java进行网络编程比较普及;而微软推出的.NET开发平台,由于其与Windows操作系统的无缝集成,开发工具的便捷、高效性,使得以C#.NET进行网络编程也逐渐流行。<br> “网络编程”课程强调基于网络基本理论的编程实践,虽然不与具体的编程语言有必然的联系,但是编程语言在教学环节中又非常重要。就学生来说,学习网络编程时正是高年级阶段,必修课程学过高级程序设计(C或C++)、面向对象程序设计(Java)、.NET开发(C#.net),任选其中的一种语言似乎都可行。但据开课前我们对学生的调查显示,92%的学生愿意选择Java或C#中的一种,其中部分同学首选Java(有部分同学未修C#课程),另有部分同学强烈希望使用C#进行编程。因此,课程教学课题组决定,学生可以根据个人的实际或兴趣任选其中一种编程语言,教师上课侧重网络基本理论的讲解,编程实践以C#和Java为主,并给出两种示例代码。<br> (2) 结合案例,强调基本概念的理解与实践相融合。网络编程作为应用型课程,其理论基础部分已在计算机网络课程中学习过,但偏重理论介绍,学习偏于单调枯燥,不排除学生死记硬背的可能。上课时结合实践中的具体案例进行讲解,如网络游戏、即时通信工具(如QQ)的实现原理,无疑会提高学习兴趣,真正做到理论与实践相融合。但是如果不能真正理解基础概念,进行网络编程实践则相当困难,因此,在网络编程学习中需要强调基本概念的理解与实践。下面举例说明。<br> 套接字(Socket):是对网络中不同主机上应用进程之间进行双向通信的端点的抽象,如图1所示,一个套接字就是网络上进程通信的一端,两个应用进程只要分别连接到自己的套接字,就能方便地通过计算机网络进行通信。套接字是一个复杂的软件机构,由操作系统内核管理。套接字生成后用一个整数(套接字描述符)来代表,使用时要与计算机上的特定IP地址和传输层端口号相关联,这个过程称为绑定。<br> ② 对比分析建立连接的3次握手过程。为确保连接的建立和终止都是可靠的,TCP使用3次握手(3-way handshake)的方式来建立连接。图2示范了“计算机网络”课程中建立连接的典型示意图,图3示范了流式套接字建立连接的过程,通过对比分析,学生可以一目了然的理解
连接是如何建立的。<br> <br> 图2TCP的3次握手过程<br> ③ 多线程的使用。在网络应用进程通信时,普遍采用客户机/服务器交互模式(Client-Server paradigm of interaction),简称C/S模式。如图4所示,作为服务器的一方,如果需要同时与多个客户端进行通信,服务端应用程序的设计就必然使用多线程编程。因此,熟练操作线程是实现网络应用程序的关键。<br> 在Socket的C#程序设计中,服务器端监听线程创建多个线程与客户端进行通信的过程示例代码为:<br> <br> 图3流式套接字编程的基本步骤<br> <br> 图4服务器创建多个线程与多个客户通信<br> IPEndPoint ipep = new IPEndPoint(IPAddress.Any,6001);<br> Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);<br> serverSocket.Bind(ipep);<br> serverSocket.Listen(10);<br> while (true)<br> {//循环监听<br> try<br> {<br> //在套接字上接收接入的连接<br> clientSocket = serverSocket.Accept();<br> clientThread = new Thread(new ThreadStart(ReceiveData));<br> clientThread.Start();<br> }<br> catch (Exception ex)<br> { MessageBox.Show("监听错误:" + ex.Message); }<br> }<br> <br> 客户端与服务器建立连接代码片断:<br> <br> IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"),6001);<br> Socket clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);<br> clientSocket.Connect(ipep);//阻塞模式,连接服务器(本机)<br> <br> (3) 启发兴趣、加强互动,丰富教学资源。兴趣是学习的动力,在教学过程中提供丰富的教学资源和多种教学形式是提高学生学习兴趣,促进其主动学习的关键。<br> ① 公布电子课件、示例源代码,学生可自由下载,并鼓励在课前进行预习。对于完成效果较好、有创新点的学生实验作品,提出嘉奖并在网上公开。<br> ② 加强教与学的互动,切实做好答疑环节。学生可以方便地通过邮件、短信、QQ等形式与课题组所有老师联系或提出疑问,而教师也会及时进行回复。<br> ③ 结合课程特点和互联网应用的实际情况,设计受欢迎的实验题目。目前流行的互联网应用系统,如网络游戏、即时通信系统等,学生自己独立完成都成为可能。<br> ④ 介绍Linux及Unix操作系统下网络编程的实现。目前的编程环境以Windows操作系统为主,而了解其他的开发环境和实现方式也会提高学习的兴趣。<br> 2.2实践教学<br> 如表1所示,将8个实验总学时数定为20,分为选做实验和必做实验,两种实验都必须按要求完成。选做实验主要是指验证性实验,上机调试通过即可;必做实验为教师重点检查实验,要求提交实验报告,上机运行并根据实验的完成效果由教师现场给出成绩。综合性实验是必做实验,可以单人完成,也可小组(2~3人)合作实现。<br> 表1 实验课程安排<br> 实验名称学时说明<br> Socket2必做,验证性实验<br> </p> <p> <p> <br /> </p> <p>TCP2选做,验证性实验<br> UDP2选做,验证性实验<br> TCP/UDP综合4必做,综合性实验<br> FTP2选做,验证性实验;<br> 3个实验任选一个<br> SMTP/POP32<br> HTTP2<br> 综合设计实验4必做,综合性设计性试验<br> <br> 在所有实验当中,综合设计实验一般是在学期末布置,综合运用本课程所学知识进行设计相对较大型、有一定难度的实验。但是如果在学期末才布置实验内容,会因为学生时间紧张、实验时间短的问题而影响实验效果。因此我们实行“目标式”教学方法:从学期开始就要求学生根据自己的兴趣爱好,从综合性设计性实验题目中选取一个(或多个)作为实验目标,让学生较早了解实验内容和要求,在平时学习中有针对性地准备,到学期末完成实验目标就水到渠成。实践表明,这种目标教学法既可以提高学习动力,同时实验完成效果也较为理想。<br> 3考
展开阅读全文