程序设计范文

时间:2023-04-10 02:35:36

导语:如何才能写好一篇程序设计,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。

程序设计

篇1

【关键词】 JSP程序设计;应用能力培养;实践

《JSP程序设计》是WEB技术的重要课程之一,由于JSP基于JAVA技术,从安全性、稳定性、跨平台性等方面有着极大的优越性,JSP技术已成为WEB技术的主流,因此,这门课程已成为高职院校网络专业的一门重要专业课程,此课程为我院网络各专业必修主干课程。同时,该课程也是学生毕业后从事网络开发工作所需具备的基本技能。因此对JSP程序设计的教学进行研究并提出教学改革的思路,以期改善高职JSP程序设计课程的教学效果,提高教学质量,更好地实现高职的培养目标有着重要意义。

1 目前JSP程序设计教学现状分析

1.1 JSP程序设计教学的评价标准和高职的培养目标不一致。教育部长周济指出:高等职业教育的主要任务是培养高技能人才,我们培养的学生既要能动脑,更要能动手,经过实践的锻炼,能够迅速成长为高技能人才,成为国家建设不可缺少的重要力量。JSP程序设计教学的主要目的是培养学生程序分析能力,程序设计能力,以及程序调试能力,而不在程序本身规则的学习。但JSP程序设计教学考核的主要关注点却是语法规则,注重细节问题,当然不能全面评价学生能力。

1.2 JSP程序本身特点带来学习困难。比如,JSP语法限制不严格、程序设计自由度大本身是程序设计的优点,但初学者往往能不清哪种表示正确,增加了程序理解的难度;程序设计本身比较抽象,学生相关计算机知识不够;学习程序设计需要有较强的逻辑思维能力,而我们的学生在这方面训练不够。这都给学生学习带来较大困难。

1.3 传统的教学模式也不利于发挥学生学习的主观能动性。过去JSP程序设计的教学仍延续课堂教授、布置作业及实验的“教本位”的教学模式,教师是课堂的中心,注重教的原发性和主动性,忽视了学生的主体性。不利于调动学生学习的积极性与主动性,发挥不了学生的主观能动性。

2 JSP程序设计教学改革的措施

2.1 准确的定位课程目标。根据高职高专培养目标的要求,我们在教学大纲的制定中贯彻 “以应用为目的、以必需、够用为度”的原则。服务专业需要,同时注重学生综合素质、数学思维能力的培养。

2.2 采用先进的教学方法和手段,充分发挥学生的主观能动性。本课程的重点JSP内置对象、JSP与数据库的连接、JavaBean与JavaServlet技术,难点主要有:JSP内置对象的属性与方法、JavaBean与JavaServlet技术。我们的解决方案如下:

2.2.1 针对高职高专类学生的特点,尽可能使用通俗易懂、深入浅出的语言来叙述各章节内容,并尽可能使用典型例题来说明各章节知识点的概念与使用方法,努力释疑各章节的重点与难点,以求多数学生掌握知识的应用。

2.2.3 采用同一例题用不同方法实现的教学手段,从而提高课堂的讲课效率和效果。

2.2.4 针对高职高专类学生理论教学“必须够用”的原则,略讲了一些理论性较强而不太实用的内容,增加了学生实验实践的内容。

2.2.5 尽量采用案例、任务驱动的教学方式,针对重点与难点,通过老师演示讲解,学生讨论、实验来增强学生的分析问题解决问题的能力。

2.2.6 充分采用现代教育技术来辅助教学。利用专用计算机做为服务器,在讲课时使所做的程序当时就能见到效果,提高学生的兴趣和记忆力。

我们在实践教学体系中努力突出职业技术教育高层次的个性特征与功能,按照高技能人才培养的特点要求确定知识、技能要求,主要由操作技能、实验技能、专项能力训练、岗位见习、社会综合实践和毕业设计(顶岗实践)等模块组成。日常教学的实践环节占教学总周数的比例为50%以上,通常情况下我们的实践性教学分为实验与实训两部分。实验课内容主要为各章节的例题与习题和老师自行布置的典型题目,包含一些验证性实验和程序设计练习,以及流行的开发平台的使用技巧,基本上做到与课程教学同步;实训内容一般为一些小型的综合性应用程序开发等。

由于我们在实践教学中采用灵活、实用的教学方式,进一步激发了学生学习兴趣,促进了学生主动学习的积极性,效果显著。课程学完后,所有学生都达到了用JSP独立开发小型网站的能力,毕业后有许多学生从事网站开发工作。

2.3 给学生搭建多种自主学习平台。一是充分利用网络资源,创建教学网站,提供教学课件,便于学生课后自主学习与复习,建立不同层次的题库与测试内容,方便学生的自我检查,开辟讨论与答疑区,随时对学生的学习问题进行解答,并开展讨论,提高学生的创新能力。二是开放机房,JSP程序设计是一门实践性很强的课程,需要进行大量的上机调试,来发现问题、理解问题、掌握程序设计的方法。通过多种平台的构建,营造以学生为主体的学习环境与氛围,充分调动学生学习欲望。

2.4 制定合适的考核标准。在考核评价方法上,探索多元化的考核评价方法,重视实践考核,重视过程考核。采用现场实际操作、课题研究与论文写作、开发实际项目等方式或几种方式综合运用的考核方法,同时考核评价应提供多次机会。力求作出客观地评价。建立以专业技术标准和职业素质为基础的考核体系。在考试考核内容选择方面,既要体现人才培养目标和课程(环节)目标要求,又要有利于培养学生运用所学知识和技术分析问题和解决问题的能力。真正做到既考知识,又考能力(技能)和素质,体现应知、应会。 在考核评价的最终成绩是综合成绩,使评价结果真正反映学生的实际能力和水平。

3 结束语

本文所提的教学改革措施,一切以学生为中心,充分调动学生学习的主动性和积极性,积极探索符合高职培养目标的教学方法和教学模式,始终以能力的培养为中心,贯彻能力为本位的职教思想。我们一直探索如何有效进行教学,逐步形成了以项目驱动、实例教学为主的符合高职学生学习的教学模式。

参考文献

[1] 黄荣梅.创新教育在高职计算机教学中的体现[J].四川职业技术学院学报,2007,11.

[2] 耿祥义,张跃平.JSP实用教程[M].清华大学出版社, 2003

篇2

一、前言

Windows提供强大的功能以及友好的图形用户界面(GUI),使得它不仅广泛的用作管理事务型工作的支持平台,也被工业领域的工程人员所关注。但Windows3.1并非基于优先级来调度任务,无法立即响应外部事件中断,也就不能满足工业应用环境中实时事件处理和实时控制应用的要求。因此,如何在Windows环境中处理外部实时事件一直是技术人员尤其是实时领域工程人员所关注的问题。目前已有的方法大都采用内挂实时多任务内核的方式,如Windows下的实时控制软件包FLX等,而iRMX实时操作系统则把Windows3.1当作它的一个任务来运行。对于大型的工程项目,开发人员可采用购买实时软件然后集成方式。

对中小项目,从投资上考虑就不很经济。如何寻找一种简明的方法来处理外部实时事件依然显得很必要。

本文首先阐述Windwos的消息机制及中断机制,然后结合DPMI接口,给出一种保护模式下中断程序的设计方法,以处理外部实时事件。经实际运行结果表明,该方法具有简洁、实用、可靠的特点,并同样可运行于Win95。

二、Windows的消息机制

Windows是一消息驱动式系统,见图1。Windows消息提供了应用程序与应用程序之间、应用程序与Windows系统之间进行通讯的手段。应用程序要实现的功能由消息来触发,并靠对消息的响应和处理来完成。

Windows系统中有两种消息队列,一种是系统消息队列,另一种是应用程序消息队列。计算机的所有输入设备由Windows监控,当一个事件发生时,Windows先将输入的消息放入系统消息队列中,然后再将输入的消息拷贝到相应的应用程序队列中。应用程序中的消息循环从它的消息队列中检索每一个消息并发送给相应的窗口函数中。一个事件的发生,到达处理它的窗口函数必需经历上述过程。值得注意的是消息的非抢先性,即不论事件的急与缓,总是按到达的先后排队(一些系统消息除外),这就使得一些外部实时事件可能得不到及时的处理。

图1

三、Windows的保护模式及中断机制

1.Windows的保护模式

保护模式指的是线性地址由一个选择符间接生成的,该选择符指向描述表中的某一项;而实模式中则通过一个段/偏移量对来直接寻址。80386(486)CPU提供的保护模式能力包括一个64K的虚拟地址空间和一个4G的段尺寸。Windows3.1实现时有所差别,它支持标准模式和增强模式。标准模式针对286机器,不属本文探讨范围。增强模式是对386以上CPU而言,Windows正是使用保护模式来打破1M的屏障并且执行简单的内存保护。它使用选择器、描述器和描述器表控制访问指定内存的位置和段。描述器表包括全局描述器表、局部描述器表、中断描述器表。保护模式与实模式有许多不同。其中显着的差异是访问内存的机制不同。

2.中断机制

(1)实模式中断

为了便于理解,我们先回顾实模式中断。

在实模式下,中断向量表IVT起到相当重要的作用。无论来自外部硬件的中断或是内部的软中断INTn,在CPU中都产生同样的响应。

①CPU将当前的指令指针寄存器(IP)、代码段寄存器(CS)、标志寄存器压入堆栈。

②然后CPU使用n值作为指向中断向量表IVT的索引,在IVT中找出服务例程的远地址。

③CPU将此远地址装入CS:IP寄存器中,并开始执行服务例程。

④中断例程总以IRET指令结束。此指令使存在堆栈中的三个值弹出并填入CS、IP和标志寄存器,CPU继续执行原来的指令。

(2)保护模式中断

保护模式中断过程与实模式中断过程类似,但它不再使用中断向量表IVT,而使用中断描述符表(IDT)。值得一提的是,Windows运行时IVT还存在,应用程序并不使用它,Windows仍然使用,但含义已不同。

①IVT结构:IVT在RAM的0000∶0000之上,占据开始的1024字节。

它仍然由BIOS启动例程设置,由DOS填充到RAM中。

②IDT中断描述符表:保护模式下,Windows操作系统为实现中断机制而建立的一个特殊表,即中断描述符表IDT。该表被用来保存中断服务例程的线性地址,它们是真正的24位或32位地址,没有段:偏移值结构。中断描述器表最多可含有256个例程说明,详细说明请见【3】。I

DT结构见图2。

图2

③当中断或异常发生时,处理过程与实模式类同。当前的CS∶IP值和标志寄存器值被存储。保存的内容还包括CPU其他内部寄存器的值,以及目前正在被执行的任务的有关信息(若必须发生任务切换的话)。CPU设法获取中断向量后,以它为索引值,查找IDT中的服务例程远地址,接着将控制转移到该处的服务例程。这是与实模式转移到IVT的不同所在。保护模式使用IDTR寄存器分配和定位内存中的IDT中断描述符表。IDT在内存中是可移动的,与IVT固定在内存中刚好相反。IDT中断描述符表在Windows中起决定性的作用。理解了Windows下保护模

式的中断机制。有助于我们理解中断服务程序的设计,它的关键就在于如何将服务例程的地址放入IDT中断描述符表中。当中断发生时,如何将断点地址及CPU各寄存器值保护起来;中断结束时,如何将保护的值恢复。Windows系统本身并不提供实现上述功能的API,而DOS保护模式接口DPMI正具备了上述的功能。

下面我们首先介绍DPMI接口,然后基于它实现Windows下中断服务程序的设计。

四、DOS保护模式接口DPMI

Windows除了标准服务外,还支持一组特殊的DOS服务,称为DOS保护模式接口DPMI,由一些INT 2FH和INT 31H服务组成。它使应用程序能够访问PC系列计算机的扩充内存,同时维护系统的保护功能。DPMI通过软件中断31h来定义了一个新的接口,使得保护模式的应用程序能够用它作分配内存,修改描述符以及调用实模式软件等工作。

Windows为应用程序提供DPMI服务。即Windows是DPMI的宿主(host),应用程序是DPMI的客户(client),可通过INT-31H调用得到DPMI服务。INT-31H本身提供多功能。其中它的中断管理服务允许保护模式用于拦截实模式中断,并且挂住处理器异常。有些服务能够和DPMI宿主合作,以维护应用程序的虚拟中断标志。

可以用INT31H来挂住保护模式中断向量,以中断方式处理外部实时事件。利用INT31H,功能0205H:设置保护模式中断向量,将特定中断的保护模式处理程序的地址置入中断向量里。调用方式:AX=0205H,BL=中断号,CX∶(E)DX=中断处理程序选择符:偏移值。返回:执行成功CF=清零,执行失败CF=置位。

挂住/解挂中断向量的时机很重要。主窗口第一次被创建时会传送它WM-CREATE消息,这时是挂住中断向量的最好时机。退出时需解挂向量,否则Windows可能崩溃。主窗口接收到WM-DE-STROY之后进行解挂工作,是最适合的。解挂向量可先用INT35H,0204H功能将老的中断向量保存,退出时用INT35H,0205H恢复。

五、编程实现

有了DPMI的支持,我们就可以很方便地处理数据采集、串行

通信等工业过程中的实时事件。下面以Windows3.1平台下中断方式实现的串行通信为例,说明中断程序的编制和实现。为便于参考,给出了详细的代码。开发平台BC3.1/BC4.5,其本身支持0.9版的DPMI,无需运行其它支持DPMI的软件。编程语言C,可与C++混合编译。

初始化COM1,9600波特率,每字符8bits,1个停止位,中断接收,查询发送。

//windows asy communication

//by Li Xiuming

//last modified on June 25,1996

#include〈windows.h〉

#include〈dos.h〉

void interrupt far DataReceive();

void interrupt far (*old-vector)();

unsigned char datacom-r[1024],datacom-s[1024];

int inflag=0;

unsigned int s8259;

int InitCom1()

{ //串口1初使化

s8259=inportb(0x21); //读入8259当前状态并保存

outportb(0x21,s8259&0xe8); //初始化8259,允许0x0c号中断

outportb(0x3fb,0x83);

outportb(0x3f8,0x0c);

outportb(0x3f9,0x00);

outportb(0x3fb,0x03);

outportb(0x3fc,0x08); //允许中断信号送到8259A,以便能中断

outportb(0x3f9,0x01); //0x01,中断允许

return 1;

}

void interrupt far DataReceive()

{ //中断接收子程序

static int i=0; //静态局部变量

char rechar=0; //每中断一次,i自动加1

rechar=inportb(0x3f8); //从数据口读出发送过来的数据

if(inflag==0)

{

if(rechar!=s &&i==0) //帧起始

{

i=0;

goto ll;

}

datacom-r[i++]=rechar; //存入datacom-r[](通信缓冲区)

if(rechar==e) //帧结束

{

inflag=1;

i=0;

}

}

ll:outportb(0x20,0x20); //回送中断结束标志

}

//调用DPMI

//保存旧的0CH号保护模式中断向量

//设置新的保护模式中断服务例程

void InitCom(void)

{

asm{

cli

mov ax,204h

mov bl,0ch

int 31h

sti

}

old-vector=MK-FP(-CX,-DX);//保存

asm{ cli //设置新的0x0c中断服务例程

mov ax,205h

mov bl,0ch

mov cx,seg datareceive

mov dx,offset datareceive

int 31h

sti

}

InitCom1();

}

//恢复8259状态

//恢复0CH保护模式向量

void RestoreComm(void)

{

outportb(0x21,s8259);

asm{

cli

mov ax,205h

mov bl,0ch

mov cx,seg old-vector

mov dx,offset old-vector

int 31h

sti

}

}

在窗口第一次被创建时会传送它WM-CREATE消息,这时调用InitCom()即可。在主窗口关闭时,即主窗口中收到WM-DESTROY消息时,调用RestoreComm()恢复原来的状态。

这样在对串口初始化,设置中断服务例程后,通信事件发生时,会立即跳入中断子程序中执行,越过系统的消息队列,达到实时处理通信事件的目的。而数据处理模块可通过全局标志flag访问全局的数据通信缓冲区获取实时数据。这种实现方式与基于消息机制的Windows通信API实现相比具有实时性强的特点,因为它超过Windows系统的两!极消息机制。

上述程序已在实际系统中得到应用。在Windows 3.1支持下,同时运行三个Windows任务:服务器SERVER(内有实时串行通信,多个网络数据子服务),客户CLIENT,FOXPRO数据库系统。整个系统运行良好。切换到WIN95平台下(支持0.9版DPMI),系统也运行良好。

参考文献

1 张豫夫、曹建文译.【澳】Barry Kauler着.Windows汇编语言及系统程序设计.北京大学出版社,1995

篇3

关键词:C程序设计;多媒体教学;案例教学;互动式教学

《C程序设计》是计算机专业的必修课,也逐渐成为非计算机专业学习的课程。它是学生入学后系统地学习与高级语言和程序设计有关的一门新课程,再加上C程序设计集抽象性、逻辑性、实践性于一身,让学生感觉十分难学。在C程序设计教学过程中,一方面要求教师能够准确把握授课内容,有效地组织教学;另一方面要求教师应用适当的教学方法,充分调动学生学习积极性,这样才能提高教学质量。根据多年教学实践,以现代教学理论和技术为基础,文章总结了适合于C程序设计课程的教学方法。

一、多媒体教学和传统课堂讲授有机结合

在C程序设计教学过程中,我们要根据教学内容的特点,将传统教学与多媒体教学有机结合。例如:对定义、概念较多,没有深奥的理论也没有多少逻辑推理的内容,就采用多媒体教学,克服传统教学无法板书的缺点,课堂教学也不再显得枯燥无味,优化教学过程。在多媒体课件制作上,应注重知识描述言简意赅,而不仅仅是教材的简单拷贝。但多媒体教学也有不利之处,不恰当的使用会分散学生注意力,影响对主要问题的理解和想象力的发挥。例如:对于案例分析或算法分析,我们就要发挥传统教学的优势,进行课堂讨论、利用板书讲解方法、思想,根据题目求解的过程,一步一步把结果“写”出来,把问题层层剖析、层层深入,达到师生互动的效果,学生的想象力就会得到充分的发挥。在实践平台上,将该课程配套实验平台VC++6.0搭建于课堂之上,在语法知识点的讲授后,通过所选案例,让学生参与一起分析,一起写出算法描述,并在课堂上同步编写程序,然后调试和实现程序,使抽象的结果通过程序的运行得以实现,让学生眼见为实,减弱了程序设计的抽象性,加深了对程序设计过程的体验,使学生较轻松地逐步掌握程序设计的一般方法步骤。

另外,教师可以充分利用网络资源,将电子教案、课件、习题等放在网上,供学生自行调用,同时每位教师与所带班级都可建立课程QQ群,方便提问和答疑,以弥补课堂教学的不足。教师要合理地将多媒体教学和传统课堂讲授有机地结合起来,以达到最佳的教学效果。

二、采用案例教学,培养学生的兴趣

C程序设计是应用性很强的课程,它既有理论又有实践,既讲方法又讲动手能力。对于一些既枯燥又比较抽象难懂的概念和语法,可以从案例入手,通过给学生演示、让学生模仿,在实际应用中去探究和领悟这些概念,并适时地加以归纳总结和概念的延伸,让学生在轻松愉快的气氛中学习新知识。

案例教学法打破了以教材为中心的传统教学模式,不按教材的顺序授课,而是以精选出的程序设计的案例为中心,把要学习的语法和概念融入到具体案例中来讲解。整个教学过程中强调在应用中学习,从而避免了枯燥的理论说教,不仅能增进学生的学习兴趣,而且对提高学生综合分析和解决实际问题的能力也大有帮助。案例教学法是培养学生学习兴趣的有效途径一。

三、采用互动式教学,提高学生的参与积极性

互动式教学就是要改变老师是课堂上唯一主体形式的状况,让学生也作为主体形式参与到课堂上来。互动式教学可以提高学生的参与积极性,还可以避免学生上课注意力不集中的现象。互动式教学在形式上有老师提问,让学生上黑板演算、上教师机操作,让学生讨论,让学生进行正误判析,或者请有独特思路的同学演示自己的方法或程序,对比各种方法的优缺点,鼓励大家再提出新方法。实践证明,这种教学方法效果显着,课堂活跃,学生的参与程度很高。

四、采用问题驱动教学,加深知识理解的深度

在C程序设计课程中,有一些概念之间的差别和程序的设计步骤如果只通过教师讲述,学生在字面上可以接受,但在理解深度上往往难以达到令人满意的效果,如果能设计出一系列问题,让学生在实践和解决问题的过程中自己去探究和体验,可以使学生更深入的理解。采用问题驱动法,一切都要求学生自己动手动脑设计,他们在操作过程中探究和解决问题的积极性和主动性得到了调动,从而达到了我们的教学目标。

五、加强上机实验教学设计,辅助理论教学

学习《C程序设计》不能满足于能看懂书上的程序,而应当熟练地掌握程序设计的全过程,即独立编写出程序,独立上机调试程序,独立运行程序和分析结果。C程序设计实验教学的目的应是:紧密配合理论教学,通过相关实验,帮助和加深对语句功能的理解;了解和熟悉C语言程序开发的环境;学会上机调试,善于发现程序中的错误,并能很快地排除这些错误,使程序能正确运行。为保证上机课质量,在上机课前教师应依据所教课程进度,精心设计上机内容。要求学生在上机前准备好程序,上机是主要是编辑输入程序和调试运行程序,学生上机目的明确,任务具体,避免了上机的盲目性,从而提高上机的效率和质量。考虑学生的个体差异,教师可设置必做和选做实验。这两类实验,前者目的在于帮助学生掌握基础知识,后者则在于培养和鼓励学生的学习兴趣、扩大知识面以及培养学生的应用能力和创新意识。

教师要督促学生及时做好上机总结。上机总结要明确上机任务完成情况以及是否达到了上机要求,对于上机过程中遇到的问题和解决情况要有分析说明,要总结上机后的收获、取得的经验和教训。这样才能真正反映出学生上机情况和水平,从而使知识和技能系统化,加深对实践内容的理解。教师应对上机过程中学生出现的一些较普遍的问题总结整理,以便在下次课中讲解说明,解疑答惑。

六、结束语

要教好C程序设计课程,关键在于教师要有效地组织教学,激发学生的学习兴趣,让学生主动、愉快地学习。实践证明,把多媒体课件教学和传统教学有机结合起来,取长补短,采用适当的教学方法,能达到好的教学效果,有效提高教学质量。

参考文献:

[1]谭浩强.C程序设计(第三版)[H].北京:清华大学出版社,2005

篇4

关键词:多线程;类;接口;同步

中图分类号:TP311.11 文献标识码:A 文章编号:1007-9599 (2013) 02-0000-02

1 引言

通常,需要将程序划分为数个独立执行的子任务,这些独立的子任务即所谓的线程。线程是进程中的一个单一连续控制流程。一个进程可以拥有多个并行的线程。多线程序的用途很广泛。一般说来,当程序的某一部分与特定事件或资源捆绑在一块时,程序其他部分的执行不因此而搁置,于是便产生一个和该事件或该资源相关的线程,并且让此线程不干扰主程序的运作。多线程可以减轻系统性能方面的瓶颈,提高CPU的处理器的效率。

2 线程的创建与生命周期

2.1 线程的创建

产生线程最简单的方法,是通过继承class Thread来实现。这个class拥有产生、运行线程的所有的必要机制。在Thread中,最重要的方法是run( ),通过覆写此方法,使线程执行指派的工作。这样,run( )就和程序中的其他线程同时执行。

2.2 线程的生命周期

(1)创建状态。一个线程对象被创建。(2)可运行状态。线程获得了CPU的执行时间,便可运行。虽然处于可运行状态,但自定义线程对象并不一定立即运行,其是否运行是由Java的运行系统来协调的。(3)阻塞状态。阻塞状态就是一个线程对象因为人为或系统原因必须暂停运行,以后还可以恢复运行的状态。当下面的几种情况之一发生后,线程对象就由可运行状态进入阻塞状态。一是通过sleep( )让线程进入休眠状态;二是通过suspend( )暂停线程;三是通过wait( )暂停线程;四是线程正在等待某个I/O动作的完成;五是线程试着调用另一个对象的synchronized函数。(4)终止状态。线程的正常结束方式,就是从其run( )中回返。或者是非正常结束,如调用了stop( )。

3 多线程实现方式

3.1 通过扩展Thread类来创建多线程

从程序中可以看出,每个线程分别对应50套服装,它们中间没有其他联系,也就是说,三个线程之间的地位是平等的,不存在谁先谁后的问题,因此,应该是机会均等地得到CPU的处理。但实际上,这三个线程并不一定是交换依次运行,而是在三个线程同时被执行的情况下,有的服装会卖得迟一些,而有的服装会提前卖完,所以,三个线程在真正工作时,有的被分配的CPU的时间多一些,而有的相反要少一些。

从上可知,通过继承线程类而创建的多线程,在程序上看,代码是一样的,可是在执行中,彼此没有联系,拥有自己的资源。

3.2 通过实现Runnable接口来创建多线程

4 线程同步

一个变量被多个线程访问,会带来冲突的问题,那么就需要相应的机制解决冲突,这样,就引入了synchronized 关键字。以下例说明,A和B两人同管一个帐本,A负责存款事情,B负责取款事情。A使用帐本时,B被禁止使用,反之亦然。程序中是否需要多线程,要考虑它是否符合多线程的特点,多线程操作机制对线程通信和线程管理的强大支持才能有用武之地,这时使用多线程才是最合适的。

参考文献:

[1]侯捷.Java编程思想[M].机械工业出版社,2005.

[2]聂哲,袁梅冷,杨淑萍.Java面向对象程序设计[M].高等教育出版社,2005.

[3]张居敏.Java程序设计经典教程[M].电子工业出版社,2008.

篇5

 摘  要 本文通过对基本遗传算法添加初始化启发信息、改进交叉算子和利用本身所固有的并行性构架粗粒度并行遗传算法等方法提高了遗传算法的收敛性及其寻优能力。     关键词  遗传算法;tsp;交叉算子   1  引言     遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法。总的说来,遗传算法是按不依赖于问题本身的方式去求解问题。它的目标是搜索这个多维、高度非线性空间以找到具有最优适应值(即最小费用的)的点[1]。     基本遗传算法是一个迭代过程,它模仿生物在自然环境中的遗传和进化机理,反复将选择算子、交叉算子和变异算子作用于种群,最终可得到问题的最优解和近似最优解。 2 遗传算法程序设计改进比较 2.1 基本遗传算法对tsp问题解的影响     本文研究的遗传算法及改进算法的实现是以c++语言为基础,在windows2000的版本上运行,其实现程序是在microsoft visual stadio 6.0上编写及运行调试的。     1) 遗传算法的执行代码 m_tsp.initpop();            //种群的初始化 for(int i=0;i<m_tsp.returnpop();i++)          m_tsp.calculatefitness(i);  //计算各个个体的适应值 m_tsp.statistics();         //统计最优个体 while(entropy>decen||variance>decvar)//m_tsp.m_gen<100) { //将新种群更迭为旧种群,并进行遗传操作 m_tsp.alternate();         //将新种群付给旧种群 m_tsp.generation();        //对旧种群进行遗传操作,产生新种群 m_tsp.m_gen++; m_tsp.statistics();        //对新产生的种群进行统计 }     2) 简单的遗传算法与分支定界法对tsp问题求解结果的对比     遗传算法在解决npc问题的领域内具有寻找最优解的能力。但随着城市个数的增加,已没有精确解,无法确定遗传算法求解的精度有多高。一般情况下,当迭代代数增大时,解的精度可能高,但是时间开销也会增大。因此可以通过改进遗传算法来提高搜索能力,提高解的精度。 表1  10个城市的tsp问题求解结果数据 算法 试验结果 简单遗传算法 分支定界法 最佳解 时间 精确解 时间 试验1 2448.610037 5s     2448.610037     00:07:30 试验2 2448.610037 13s 试验3 2448.610037 9s 试验4 2459.543054 10s 试验5 2459.543054 7s 2.2  初始化时的启发信息对tsp问题解的影响     1) 初始化启发信息     在上述实验算法的基础上,对每一个初始化的个体的每五个相邻城市用分支界定法寻找最优子路径,然后执行遗传算法。     2) 遗传算法与含有启发信息的遗传算法求解结果的对比     当城市数增至20个时,用分支定界法已经不可能在可以接受的时间内得到精确的解了,只能通过近似算法获得其可接受的解。试验设计中算法的截止条件:固定迭代1000代。表2中的平均最优解为经过多次试验(10次以上)得到的最优解的平均值,最优解的出现时间为最优解出现的平均时间,交叉操作次数为最优解出现时交叉次数的平均值。 表2  20个城市的tsp问题求解结果数据 算法 交叉操作 次数 最优解 出现时间 平均 最优解 简单遗传算法 80244.4 79.4s 1641.8 含初始化启发信息的ga 79000.2 37.4s 1398.9     从表2中可以看出,当初始种群时引入启发信息将提高遗传算法的寻优能力。同时缩短了遗传算法的寻优时间和问题的求解精度。 2.3  交叉算子对tsp问题解的影响     1)循环贪心交叉算子的核心代码 for(i=1;i<m_chrom;i++) {   flag=0;   city=m_newpop[first].chrom[i-1];         //确定当前城市   j=0;   while(flag==0&&j<4)   {       sign=adjcity[city][j]; //adjcity数组的数据为当前城市按顺序排列的邻接城市       flag=judge(first,i,sign);  //判断此邻接城市是否已经存在待形成的个体中       j++;   }   if(flag= =0)       //如果所有邻接城市皆在待扩展的个体中   {       while(flag= =0)       {            sign=(int)rand()/(rand_max/(m_ chrom-1));     //随机选择一城市            flag=judge(first,i,sign);       }   }   if(flag==1)       m_newpop[first].chrom[i]=sign;   }     2)问题描述与结果比较     下面笔者用经典的测试遗传算法效率的oliver tsp问题来测试循环贪心交叉算子的解的精度和解效率。oliver tsp问题的30个城市位置坐标如表3所示[2]。 表3  oliver tsp问题的30个城市位置坐标 城市编号 坐标 城市编号 坐标 城市编号 坐标 1 (87,7) 11 (58,69) 21 (4,50) 2 (91,83) 12 (54,62) 22 (13,40) 3 (83,46) 13 (51,67) 23 (18,40) 4 (71,44) 14 (37,84) 24 (24,42) 5 (64,60) 15 (41,94) 25 (25,38) 6 (68,58) 16 (2,99) 26 (41,26) 7 (83,69) 17 (7,64) 27 (45,21) 8 (87,76) 18 (22,60) 28 (44,35) 9 (74,78) 19 (25,62) 29 (58,35) 10 (71,71) 20 (18,54) 30 (62,32)   表4  贪心交叉与部分匹配交叉的比较(oliver tsp问题的30个城市) 交叉算子 交叉操作次数 平均时间 平均最优解 部分匹配交叉 59760 31.2s 517.0 贪心交叉 15774 28.6s 433.4     从表4、图1中可以看到,贪心交叉算子大大提高了遗传算法的寻优能力,同时也降低了交叉操作次数。在多次试验中,贪心交叉算子找到的最优解与目前记载的最佳数据的误差率为2.7%。而部分匹配交叉算子找到的最优解与目前记载的最佳数据的误差率高达7%。从而可以得到交叉算子对于遗传算法

的计算效率和计算结果起主导性作用[3]。  

图1  遗传算法的收敛过程 2.4  并行遗传算法消息传递实现的核心代码     1)主程序代码 //接收各个从程序的最优个体 for(i=0;i<slave;i++) { mpi_recv(rchrom[i],chrom,mpi_unsigned,mpi_any_source,gen,mpi_comm_world,&status); } //计算接收各个从程序的最优个体的回路距离 for(i=0;i<slave;i++) {         fitness[i]=0.0;         for(int j=0;j<chrom-1;j++)         fitness[i]=fitness[i]+distance[rchrom[i][j]][rchrom [i][j+1]];         fitness[i]=fitness[i]+distance[rchrom[i][0]][rchrom [i][chrom-1]];            } //找到最优的个体并把它记录到文件里         for(i=0;i<slave;i++)         {             if(1/fitness[i]>min)             {                  sign=i;                  min=1/fitness[i];             }         }         fwrite(&gen,sizeof(int),1,out);         for(i=0;i<chrom;i++)         fwrite(&rchrom[sign][i],sizeof(unsigned),1,out);         fwrite(&fitness[sign],sizeof(double),1,out);         //每九代向从程序发送一个最优个体         if(gen%9==0)         mpi_bcast(rchrom[sign],chrom,mpi_ unsigned,0,mpi_comm_world);     2)从程序代码 //将上一代的最优个体传回主程序 mpi_send(rchrom1,chrom,mpi_unsigned,0,gen,mpi_comm_world); //每九代接收一个最优个体并将其加入种群中替换掉最差个体 if(gen%9==0) {     pi_bcast(rchrom2,chrom,mpi_unsigned,0,mpi_comm_world);     tsp.indialternate(rchrom2); } //进行下一代的计算 tsp.aternate(); tsp.generation();     tsp.statistics();             3)并行遗传算法的性能     笔者在mpi并行环境下,用c++语言实现了一个解决tsp问题的粗粒度模型的并行遗传算法。该程序采用的是主从式的mpi程序设计,通过从硬盘的文件中读取数据来设置染色体长度、种群的规模、交叉概率和变异概率等参数。试验环境为曙光tc1700机,测试的对象是oliver tsp问题的30个城市的tsp问题。     正如在测试串行遗传算法所提到的数据结果,并行遗传算法也没有达到目前所记录的最好解,但是它提高了算法的收敛性,并行遗传算法的收敛趋势如图2所示[4]。   图2  遗传算法的收敛过程 3 结束语     本文通过对基本遗传算法的不断改进,证明了添加启发信息、改进遗传算子和利用遗传算法固有的并行性都可以提高遗传算法的收敛性,其中对遗传算法交叉算子的改进可以大大提高遗传算法的寻优能力。 参考文献 [1] 刘勇、康立山,陈毓屏著. 非数值并行算法-遗传算法.北京:科学出版社 1995.1 [2] i m oliver d j smith and j r c holland,a study of permutation crossover operators on the traveling salesman[c]// problem of the second international conference on genetic algorithms and their application,erlbaum 1897: 224-230 [3] 于海斌,王浩波,徐心和. 两代竞争遗传算法及其应用研究 .信息与控制,2000 vol.29,no.4:309-314 [4]穆艳玲,李学武,高润泉. 遗传算法解tsp问题的并行实现.北京联合大学学报(自然科学版),2006 vol.20 no.2: 40-43

篇6

摘要:本文指出程序设计语言教学的关键是讲述程序设计的思想和方法,而不是拘泥于语言细节,并探讨了“高级语言程序设计”教学改革的思想和方法,介绍了我校的教学经验。

关键词:程序设计;教学改革;C语言

中图分类号:G642

文献标识码:B

1指导思想

目前计算机教育面向应用,学生学习的主要目的是“应用”程序设计语言,是学会如何用程序解决应用领域的问题,这不需要细致地研究程序设计语言本身十分严格的语法和语义。基于这种认识,我们开始尝试程序设计课程在的教学改革,开始把授课重点转移到“程序设计”上。经过几年的探讨,逐渐形成了“以程序设计为主线”的指导思想。

2教学内容

在“以程序设计为主线”的思想指导下,我们首先研究程序设计课程的教学内容,对C语言本身采取“有所取、有所不取”的策略。对于那些常用的语言成分,穿插在程序设计过程中详细准确的介绍;对于那些与程序设计方法联系不太紧要,但还算常用的部分,放在最后简单介绍;而对于那些与讲述程序设计方法关系不太大,也不常用的部分,则根本不涉及。如表1所示。

3教学方法

采取以“案例”驱动的方法组织教学,让程序设计始终贯穿于整个教学过程之中。针对程序设计的每个知识模块都采取如下模式讲授:提出有意义的问题―设计算法―分析算法特点―编出程序―介绍使用的C语言成分―配合讲述大量例题―课后习题。重点放在设计算法和讲述算法特点上。针对各个知识模块,选用案例如表2。

4教学手段

课堂教学:利用现代化多媒体手段与传统方式相结合的方式进行授课。整个教学过程直接在C编译环境下进行,并且使用PPT演示和传统的黑板版书互相配合。例题大部分在C编译环境直接编译运行,并得到结果;算法设计过程,逻辑分析使用传统版书在黑板上进行;课程提纲、知识要点以及一些执行过程等则使用PPT演示。与单纯的传统教学相比,此种方式既节约了传统的板书时间,以更加整齐、生动和可重现方式展现课程内容,增加了信息量,达到了提高教学效率和提升教学效果目的。

实践教学:包括课堂实践、实验课、课程设计、科技活动小组等。课堂上直接在C编译环境下讲授例题和习题,使学生初步感受实践过程;实验课学生自己动手完成有目的布置的实验题目,使学生亲身体验程序设计的全过程;课程设计以3~5人的小组方式进行,使用较大型的程序让学生深刻体会程序开发的全过程,初步体验软件工程方法,并培养责任感和团队精神;科技活动小组由学生自愿组成,参与教师的科研项目或由教师指导选题,培养学生的初步科研能力和创新精神。

考核:包括理论课程考核、实验课考核、课程设计考核。理论课考核采用闭卷考试与平时作业成绩结合方式进行;实验课考核采用实验报告、平时实验表现、综合实验成绩相结合方式进行;课程设计考核按小组记分,每个小组一个分数,采用检查实验结果和小组答辩相结合方式进行。

课程网站:包括了本课程的介绍、教学大纲、教材、多媒体CAI课件、多媒体的电子教案、远程网络课程、习题库、习题解答、疑难问题解答等内容,并且开辟了师生交流的专门空间,不仅为学生提供了新颖的教学通道而且增强了师生间的交流。

参考文献

[1] 张长海,陈娟. 程序设计基础[M]. 北京:高等教育出版社,2008.

[2] 张长海,陈娟. 程序设计基础习题集及选解[M]. 北京:清华大学出版社,2008.

[3] 石峰. 程序设计基础[M]. 北京:清华大学出版社,2003.

[4] 解闵等. 基于构建主义的“C程序设计”分段教学[J]. 计算机教育,2007,(10).

篇7

一、前言

Windows提供强大的功能以及友好的图形用户界面(GUI),使得它不仅广泛的用作管理事务型工作的支持平台,也被工业领域的工程人员所关注。但Windows3.1并非基于优先级来调度任务,无法立即响应外部事件中断,也就不能满足工业应用环境中实时事件处理和实时控制应用的要求。因此,如何在Windows环境中处理外部实时事件一直是技术人员尤其是实时领域工程人员所关注的问题。目前已有的方法大都采用内挂实时多任务内核的方式,如Windows下的实时控制软件包FLX等,而iRMX实时操作系统则把Windows3.1当作它的一个任务来运行。对于大型的工程项目,开发人员可采用购买实时软件然后集成方式。

对中小项目,从投资上考虑就不很经济。如何寻找一种简明的方法来处理外部实时事件依然显得很必要。

本文首先阐述Windwos的消息机制及中断机制,然后结合DPMI接口,给出一种保护模式下中断程序的设计方法,以处理外部实时事件。经实际运行结果表明,该方法具有简洁、实用、可靠的特点,并同样可运行于Win95。

二、Windows的消息机制

Windows是一消息驱动式系统,见图1。Windows消息提供了应用程序与应用程序之间、应用程序与Windows系统之间进行通讯的手段。应用程序要实现的功能由消息来触发,并靠对消息的响应和处理来完成。

Windows系统中有两种消息队列,一种是系统消息队列,另一种是应用程序消息队列。计算机的所有输入设备由Windows监控,当一个事件发生时,Windows先将输入的消息放入系统消息队列中,然后再将输入的消息拷贝到相应的应用程序队列中。应用程序中的消息循环从它的消息队列中检索每一个消息并发送给相应的窗口函数中。一个事件的发生,到达处理它的窗口函数必需经历上述过程。值得注意的是消息的非抢先性,即不论事件的急与缓,总是按到达的先后排队(一些系统消息除外),这就使得一些外部实时事件可能得不到及时的处理。

图1

三、Windows的保护模式及中断机制

1.Windows的保护模式

保护模式指的是线性地址由一个选择符间接生成的,该选择符指向描述表中的某一项;而实模式中则通过一个段/偏移量对来直接寻址。80386(486)CPU提供的保护模式能力包括一个64K的虚拟地址空间和一个4G的段尺寸。Windows3.1实现时有所差别,它支持标准模式和增强模式。标准模式针对286机器,不属本文探讨范围。增强模式是对386以上CPU而言,Windows正是使用保护模式来打破1M的屏障并且执行简单的内存保护。它使用选择器、描述器和描述器表控制访问指定内存的位置和段。描述器表包括全局描述器表、局部描述器表、中断描述器表。保护模式与实模式有许多不同。其中显著的差异是访问内存的机制不同。

2.中断机制

(1)实模式中断

为了便于理解,我们先回顾实模式中断。

在实模式下,中断向量表IVT起到相当重要的作用。无论来自外部硬件的中断或是内部的软中断INTn,在CPU中都产生同样的响应。

①CPU将当前的指令指针寄存器(IP)、代码段寄存器(CS)、标志寄存器压入堆栈。

②然后CPU使用n值作为指向中断向量表IVT的索引,在IVT中找出服务例程的远地址。

③CPU将此远地址装入CS:IP寄存器中,并开始执行服务例程。

④中断例程总以IRET指令结束。此指令使存在堆栈中的三个值弹出并填入CS、IP和标志寄存器,CPU继续执行原来的指令。

(2)保护模式中断

保护模式中断过程与实模式中断过程类似,但它不再使用中断向量表IVT,而使用中断描述符表(IDT)。值得一提的是,Windows运行时IVT还存在,应用程序并不使用它,Windows仍然使用,但含义已不同。

①IVT结构:IVT在RAM的0000∶0000之上,占据开始的1024字节。

它仍然由BIOS启动例程设置,由DOS填充到RAM中。

②IDT中断描述符表:保护模式下,Windows操作系统为实现中断机制而建立的一个特殊表,即中断描述符表IDT。该表被用来保存中断服务例程的线性地址,它们是真正的24位或32位地址,没有段:偏移值结构。中断描述器表最多可含有256个例程说明,详细说明请见【3】。I

DT结构见图2。

图2

③当中断或异常发生时,处理过程与实模式类同。当前的CS∶IP值和标志寄存器值被存储。保存的内容还包括CPU其他内部寄存器的值,以及目前正在被执行的任务的有关信息(若必须发生任务切换的话)。CPU设法获取中断向量后,以它为索引值,查找IDT中的服务例程远地址,接着将控制转移到该处的服务例程。这是与实模式转移到IVT的不同所在。保护模式使用IDTR寄存器分配和定位内存中的IDT中断描述符表。IDT在内存中是可移动的,与IVT固定在内存中刚好相反。IDT中断描述符表在Windows中起决定性的作用。理解了Windows下保护模

式的中断机制。有助于我们理解中断服务程序的设计,它的关键就在于如何将服务例程的地址放入IDT中断描述符表中。当中断发生时,如何将断点地址及CPU各寄存器值保护起来;中断结束时,如何将保护的值恢复。Windows系统本身并不提供实现上述功能的API,而DOS保护模式接口DPMI正具备了上述的功能。

下面我们首先介绍DPMI接口,然后基于它实现Windows下中断服务程序的设计。

四、DOS保护模式接口DPMI

Windows除了标准服务外,还支持一组特殊的DOS服务,称为DOS保护模式接口DPMI,由一些INT2FH和INT31H服务组成。它使应用程序能够访问PC系列计算机的扩充内存,同时维护系统的保护功能。DPMI通过软件中断31h来定义了一个新的接口,使得保护模式的应用程序能够用它作分配内存,修改描述符以及调用实模式软件等工作。

Windows为应用程序提供DPMI服务。即Windows是DPMI的宿主(host),应用程序是DPMI的客户(client),可通过INT-31H调用得到DPMI服务。INT-31H本身提供多功能。其中它的中断管理服务允许保护模式用于拦截实模式中断,并且挂住处理器异常。有些服务能够和DPMI宿主合作,以维护应用程序的虚拟中断标志。

可以用INT31H来挂住保护模式中断向量,以中断方式处理外部实时事件。利用INT31H,功能0205H:设置保护模式中断向量,将特定中断的保护模式处理程序的地址置入中断向量里。调用方式:AX=0205H,BL=中断号,CX∶(E)DX=中断处理程序选择符:偏移值。返回:执行成功CF=清零,执行失败CF=置位。

挂住/解挂中断向量的时机很重要。主窗口第一次被创建时会传送它WM-CREATE消息,这时是挂住中断向量的最好时机。退出时需解挂向量,否则Windows可能崩溃。主窗口接收到WM-DE-STROY之后进行解挂工作,是最适合的。解挂向量可先用INT35H,0204H功能将老的中断向量保存,退出时用INT35H,0205H恢复。

五、编程实现

有了DPMI的支持,我们就可以很方便地处理数据采集、串行通信等工业过程中的实时事件。下面以Windows3.1平台下中断方式实现的串行通信为例,说明中断程序的编制和实现。为便于参考,给出了详细的代码。开发平台BC3.1/BC4.5,其本身支持0.9版的DPMI,无需运行其它支持DPMI的软件。编程语言C,可与C++混合编译。

初始化COM1,9600波特率,每字符8bits,1个停止位,中断接收,查询发送。

//windowsasycommunication

//byLiXiuming

//lastmodifiedonJune25,1996

#include〈windows.h〉

#include〈dos.h〉

voidinterruptfarDataReceive();

voidinterruptfar(*old-vector)();

unsignedchardatacom-r[1024],datacom-s[1024];

intinflag=0;

unsignedints8259;

intInitCom1()

{//串口1初使化

s8259=inportb(0x21);//读入8259当前状态并保存

outportb(0x21,s8259&0xe8);//初始化8259,允许0x0c号中断

outportb(0x3fb,0x83);

outportb(0x3f8,0x0c);

outportb(0x3f9,0x00);

outportb(0x3fb,0x03);

outportb(0x3fc,0x08);//允许中断信号送到8259A,以便能中断

outportb(0x3f9,0x01);//0x01,中断允许

return1;

}

voidinterruptfarDataReceive()

{//中断接收子程序

staticinti=0;//静态局部变量

charrechar=0;//每中断一次,i自动加1

rechar=inportb(0x3f8);//从数据口读出发送过来的数据

if(inflag==0)

{

if(rechar!=s&&i==0)//帧起始

{

i=0;

gotoll;

}

datacom-r[i++]=rechar;//存入datacom-r[](通信缓冲区)

if(rechar==e)//帧结束

{

inflag=1;

i=0;

}

}

ll:outportb(0x20,0x20);//回送中断结束标志

}

//调用DPMI

//保存旧的0CH号保护模式中断向量

//设置新的保护模式中断服务例程

voidInitCom(void)

{

asm{

cli

movax,204h

movbl,0ch

int31h

sti

}

old-vector=MK-FP(-CX,-DX);//保存

asm{cli//设置新的0x0c中断服务例程

movax,205h

movbl,0ch

movcx,segdatareceive

movdx,offsetdatareceive

int31h

sti

}

InitCom1();

}

//恢复8259状态

//恢复0CH保护模式向量

voidRestoreComm(void)

{

outportb(0x21,s8259);

asm{

cli

movax,205h

movbl,0ch

movcx,segold-vector

movdx,offsetold-vector

int31h

sti

}

}

在窗口第一次被创建时会传送它WM-CREATE消息,这时调用InitCom()即可。在主窗口关闭时,即主窗口中收到WM-DESTROY消息时,调用RestoreComm()恢复原来的状态。

这样在对串口初始化,设置中断服务例程后,通信事件发生时,会立即跳入中断子程序中执行,越过系统的消息队列,达到实时处理通信事件的目的。而数据处理模块可通过全局标志flag访问全局的数据通信缓冲区获取实时数据。这种实现方式与基于消息机制的Windows通信API实现相比具有实时性强的特点,因为它超过Windows系统的两极消息机制。

上述程序已在实际系统中得到应用。在Windows3.1支持下,同时运行三个Windows任务:服务器SERVER(内有实时串行通信,多个网络数据子服务),客户CLIENT,FOXPRO数据库系统。整个系统运行良好。切换到WIN95平台下(支持0.9版DPMI),系统也运行良好。

参考文献

1张豫夫、曹建文译.【澳】BarryKauler著.Windows汇编语言及系统程序设计.北京大学出版社,1995

篇8

选好课程教材,对于程序设计课大有裨益。好的教材不仅让学生更容易理解学习,还可以加深课程印象从而更好地节省阅读时间。达到事半功倍的效果。同样,也可以方便教师教学并节省教师备课的时间。国内有些教材是从英文原版教材翻译而来,但是由于语境、地点、时间的改变,有些翻译不能很好地表达原著的意思,给使用者带来很大的阅读障碍。所以在程序设计课程中,可以选择英文原版教材加中文教学讲义的形式。笔者建议选取原版教材,这样可以减少学生对翻译的依赖性。但是教材的可读性要强,能够更好地吸引学生的阅读性。针对一些不太容易理解的概念,我们可以采用比喻、举例和相应的图表来进行表述。

二、实验课程教学

在程序设计类课程中实验教学举足轻重,在一些实践性很强的课程当中,实验设计特别重要。其中国外很多的先进技术都值得我们借鉴参考。1.实验就是课内实验跟课外练习。所谓的课内实验也就是让学生在课内完成的实验,内容比较简单,其考核的结果列入日常的实验成绩中。而对于课外练习是依据大多数学生在课内无法完成的难度来设置的,这要求学生能够利用大量的课外时间来进行知识的复习与消化,并且能够形成团队意识来共同解决问题。2.曾有研究者提出将大实验贯穿于每个阶段当中,知识是互联的,我们通过一个大实验来将所学的知识贯穿到一起,进而解决一个更大的问题。这样不仅可以很好地复习所学知识,而且能够使所学的知识贯穿起来,以便于更好地掌握。有时候往往单独看问题会觉得比较容易,把这些简单的问题贯穿到一起时会发现很多其他的问题;正是这种发现问题、纠正问题的过程跟能力是学习程序设计所必须掌握的技能。

三、教学改革

篇9

关键词:精品课程;工学结合;任务驱动教学法;项目实训教学法

中图分类号:TP312.2-4

精品课程建设是郑州电子信息职业技术学院教学改革和教学质量工程的重要内容之一。Java程序设计是我院信息工程系计算机相关专业的专业核心课程,重点培养学生Java方向程序设计能力,是一门实践性很强的课程。该课程的知识教育目标是使学生能够熟练使用JDK(Java开发工具包),Eclipse,UltraEdit等常用编辑工具来开发Java程序;能力教育目标是培养学生运用面向对象的思想解决实际问题的能力。思想教育目标是培养学生的团队协作能力和爱岗敬业的职业素养。

1 精品课程建设基础

1.1 硬件基础

学院有先进的网络教学环境和充足的实践教学条件,Java程序设计的教学环境是我院多媒体中心,该中心下设30个多媒体教室。课程全面应用多媒体方式授课,学生可以利用移动存储设备下载教学资源。在网上为学生提供授课计划、教学大纲、实训大纲、实验指导书、课件、学习指南、上机习题与指导、模拟测试题、学习参考书目录等网络学习资源。另外,教师利用电子邮件、QQ进行答疑,探讨师生共同关心的问题,了解学生的学习和其它方面的动态,及时调整教学方法和进度。

Java程序设计的实训环境是我院计算机实训中心,现有22个实训室,近1500台机器,实训室设备先进、功能齐全、管理严格规范,每个实训室自成局域网并接入了互联网。实训室均安装了JDK(java开发工具包)、MyEclipse、Tomcat、SQLsever及全国高等院校计算机等级考试模拟软件,能够保证人均一台机器,学校实训室在课余及周末时间为学生开放,方便学生的上机实习。

此外,学院与郑州东隅电子科技有限公司、郑州华创科技有限公司、郑州亚讯科技信息有限公司签订协议,确立为我系的校外实训实习基地。

1.2 软件基础

该课程教师队伍共10人,其中专职教师8人,兼职教师2人,师生比1:45,是一支师资配置合理,执教能力强、教学效果好的教学队伍。以中青年教师为主,副高以上职称占15%,研究生以上学历占20%,“双师型”教师占80%。

教学团队中有毕业于郑州大学、西南大学、上海师范大学、河南科技学院等各个高校的教师,教师知识结构合理,年龄结构合理。课程建设小组具有在省、市级课题研究等方面的经历,并且获取省级和市级的奖项若干。课程建设小组成员组成结构和科研条件均具备了相应的研究条件。

学院每年都积极选派教师到企业学习。特别注重加强理论教学与实践教学的结合,提升课程教学水平和质量,从而逐步形成人员精干、教学水平高、教学效果好的师资队伍。

2 精品课程建设内容

2.1 课程建设目标

Java程序设计是我院信息工程系计算机相关专业(计算机应用技术、计算机网络技术、物联网)的一门非常重要的专业核心课程。该课程以C语言程序设计为先导课程,将会对JSP动态网页编程课程的学习有着重要的影响。本课程在教学培养方案中起到承上启下的作用。

本课程的目的是通过对Java程序设计的学习,使学生具备高级技能专门人才所必须的计算机程序设计能力,培养学生的逻辑思维能力,为进一步应用面向对象程序设计的方来进行项目开发打下基础。具体的培养学生具有理解和应用软件开发规范、软件开发流程的能力;学会将实际问题转化成计算机语言表达模型的能力;会用计算机处理问题的思维方法阅读和编写程序的能力;具有进一步学习其他语言的能力;具有软件开发团队协作的能力。

2.2 课程建设内容

Java程序设计精品课程建设主要包括课程体系、教学手段的改革、教学方法的改进、考试方法的变革和教材建设。我们以现代化教学手段为依托,充分利用多功能教室、多媒体教室、校园网等教学手段。实行启发式、研讨式、项目驱动式等多种教学方法,形成一套能够使抽象内容具体化、专业知识通俗化的课程教学模式。通过精品课程建设,课程建设小组逐步落实Java程序设计成绩评定方法,学生期末综合考评分为理论考评和实践考评两大部分各占总成绩的50%,理论考评中平时成绩占30%,期末考试成绩占70%。实践考评中实验报告占30%,实践操作占70%。考试内容包括理论知识和实践操作,真正反映教师的教学水平。

3 课程特色与创新

在Java程序设计教学中,我们必须突出高职高专院校的教育特色,采用先进的教育理念,把现代教育思想和课程的具体内容相结合,改革传统的教学手段和方法,形成自己特色鲜明的工学结合的教学模式。

3.1 工学结合教学模式

我们确立以“就业为导向、能力为核心”的专业人才培养方案,以职业能力培养为核心,有针对性采取工学交替、校企合作、理论与实践相结合的课程教学模式。此模式在做中学、做中教。特别突出以生产性实训为特征的实践教学模式。在实训环节上,每届学生都安排了三个企业真实项目实训和半年的顶岗实习,让学生直接参与到项目开发中去,亲身体验职场的工作氛围,熟悉面向对象编程的思想,为将来的就业打下坚实的基础。

3.2 教学方法

项目实训教学法强调的是真实体验,以项目的完成结果检验和总结学习过程。项目实训采用项目调研、开发、测试、验收等教学流程,使学生带着真实的目的在探索中学习,让学生获得亲身参与的体验、培养学生发现问题和解决问题的能力。

任务驱动教学法强调的是“以任务为主线、教师为主导、学生为主体” 通过精选案例、明确任务,以任务带动理论知识点的学习,真正做到了讲练有机融合。通过在实践中的学习,可以激发学生的好奇心和创造力。

情景教学法是以案例或情景为载体引导学生自主探究性学习,以提高学生分析和解决实际问题的能力。主要针对企业的工作场景和实际的工作流程,进行项目分析和任务分解,重现在企业中进行项目开发的任务环境。学生在实际操作的过程中模拟项目组中的各种角色,使用真实的企业项目、企业工作流程,协同完成项目,体验和掌握各种角色的工作技能和工作经验。

3.3 特色教材建设

教材是培养人才最关键、最直接的因素。所以说教材建设是精品课程建设的重要组成部分。Java是1995年Sun公司开发的面向对象的编程语言,它凭借平台无关性这一强大优势己经成为Internet应用的主要开发语言。从目前情况来看,Java教材出版的不少,但是很少有以工作任务为主的适合高职教育的教材,大多数都是以讲Java 基本知识为主,枯燥的理论使学生很难学以致用。因此,我们对课程内容进行了彻底的整合,采取用什么讲什么,用多少讲多少的原则,将那些直接支撑专业技术的知识从系统中提取出来,打造直接服务于岗位技术的知识链,建设符合高职院校特色的精品教材。在学院的大力支持下,我们课程组通过长期扎实的自我建设,强化了课程体系,完善了教材内容等方面的建设。

4 结束语

Java程序设计是一门实践性很强的专业核心课程。我们通过不断转变教学理念、更新教学内容、改进教学手段、完善教学方法,已基本构建起比较完善的教学体系,形成了较鲜明的特色。综上所述,该课程建设指导思想明确,拥有教学与科研相长的师资队伍,教育教学思想与时俱进,教学模式多样化,教学手段现代化,在计算机编程教育领域起着良好的示范作用。

参考文献:

[1]王小芬,马玉芳.《大学计算机应用基础》精品课程建设[J].计算机光盘软件与应用,2013,4.

篇10

1.没有明确的教学目的,对课程重要性认识不足《汇编语言程序设计》课程教学是高校计算机、通信、电子以及自动化等相关专业课程中的基础课程,对学生在学习过程中的创新能力以及实践能力的提高有一定的促进作用。在对《汇编语言程序设计》课程的学习过程中,大多时候得不到学生以及教师重视,对其学习的重要性认识不足。而且,大多数老师在对这门课程进行教学的过程中,受到相应教学的课时以及大纲限制,在课堂教学过程中过于偏重对具体指令的相关应用以及功能的讲解,从而缺少了对各个课程之间的特点串联。这样的问题导致教师在教学过程中,对学生的学习兴趣不能充分的调动,从而导致学生对正确的学习方法不能很好的掌握。2.教学方法偏差,教学手段存在缺陷在对《汇编语言程序设计》课程进行教学的过程中,其在相应的教学方法上存在一定程度的偏差,从而导致一些编程中非法指令经常性出现。而且,教师在对这门课程进行教学的过程中,教学手段太过单一,在教学过程中主要就通过多媒体对课堂内容进行讲解。在教学过程中对多媒体的运用虽然存在直观生动以及信息量大等相关优势,但其也在一定程度上使学生产生了学习惰性。

二、对《汇编语言程序设计》课程教学中相应的问题进行改革

1.加强对课程重要性的认识在对《汇编语言程序设计》课程进行教学之前,对其相应的重要性进行讲解,从而使学生对汇编语言的具体特点进行充分掌握,对汇编语言相较于高级语言的具体优势进行具体明确,使学生对其在应用领域中必要性有充分的了解。在对《汇编语言程序设计》课程进行学习的过程中,要注意对其实用性的具体教学,使学生能够做到对具体知识的学以致用,注重对教学内容相关知识点的训练和拓展。另外,教师在教学过程中,还要注重对学生知识面的拓宽,从而使学生在对汇编语言的学习兴趣得到相应的提高。2.采用多样化教学,提高学生学习兴趣在对《汇编语言程序设计》课程进行学习的过程中,想要对相应的指令进行掌握,就要对其相关的寻址方式进行具体的理解和掌握。在对汇编语言进行教学的过程中,由于其相较高级语言而言,没有足够的易读性,不容易学生的理解,所以,在教学的时候要掌握多样化的教学方法以及教学手段,从而使学生在对其进行学习的过程中的学习兴趣得到最大的提高,培养学生学习的自主性,使其对汇编语言的相关知识的理解和记忆更容易清晰地掌握。3.增加实践环节,提高学生具体的实践能力在对《汇编语言程序设计》课程进行学习的过程中,对学生具体动手实践课程进行加强,使学生在具体实践的过程中对教材上的知识点进行具体的理解和掌握。在实际动手过程中学习实践理论,使实践与理论达到很好的结合,从而提升学生的学习效果。其中,在实践的过程中,教师要注意对具体实验内容的控制,对实验的重点着重突出,避免实验的时间太过漫长。除此之外,还要注意积极引导学生多多参与相关实践项目,在一定程度上为他们提供一些参与实际研究项目的机会。

三、结束语