时间:2022-09-14 10:37:40
序论:写作是一种深度的自我表达。它要求我们深入探索自己的思想和情感,挖掘那些隐藏在内心深处的真相,好投稿为您带来了七篇程序设计论文范文,愿它们成为您写作过程中的灵感催化剂,助力您的创作。

【行为导向教学法;程序设计;教学案例
随着计算机应用的普及,计算机应用专业也成了热门专业,而高级程序设计语言是计算机专业的一门必修课。在高级程序设计语言中,VisualBasic语言以其易学易用和功能强大,而且能够方便快捷地开发Windows应用程序等特征,而深受使用者欢迎。因此,其也作为中等职业学校的高级程序设计课的首选。VB是一门集知识和技能于一体、实践性很强的课程,要求学生既要学好理论知识,又要把握实际操作技能,同时,在进行软件开发时,要对用户需求及市场情况进行调研,再加上计算机软、硬件快速更新换代的特征,要求学生还要具有很强的自学能力和终身学习的思想。对于这些要求来说,传统的教学方法难以做到。而使用强调以职业活动为导向,以人的发展为本位的“行为导向教学法”将会较好的实现这些教学要求。本文拟就在中等职业教育的计算机程序设计(VisualBasic)教学中,如何运用“行为导向教学法”进行初步探索。
一、行为导向教学法的基本理论
“行为导向教学法”是在近几年从德国引进的现代的职业教育新模式,其目标层次是培养人的行为能力,方法层次是人的行为活动。即摘要:这种教育以行为为目标,教学以行为为导向,教学是学生积极参和的全面的教学,学习过程是学生同时用脑、心、手来进行学习的过程。
行为导向教学法具有很强的针对性,即是以职业活动为导向,以教会学生“学会学习、学会工作”为目标而开展教学活动,因此,对学习者来说,学习目的是十分明确,即现在的学习是为今后的职业服务。教学活动的开展,通常是围绕某一课题、新问题或项目开展,是以“学习任务”为载体,引导学生自主学习和探索的过程。整个教学过程为一个包括获取信息、制订计划、做出决定、实施工作计划、控制质量、评定工作成绩等环节在内的完整的行为模式。使用“行为导向教学法”,将能更好的培养学生的关键能力(专业能力、方法能力、社会能力、个性能力),以达到职业教育的“职业教育就是就业教育”的教学目标。
二、行为导向教学法在VisualBasic教学中的必要性和可行性
(一)必要性
现行的计算机专业类教材大多和其它学科式的教材一样,重视知识结构的系统性,教学内容大多以线性方式展开,适用于“循序渐进”的传统教学模式,以《VisualBasic程序设计》的教材为例,从语言基础、流程控制、过程和数组、窗体和控件、对话框设计、菜单、工具栏和状态栏设计等等,分章编排,在每一章的内容里,也同样按线性方式展开。假如,在教学中仍按传统的教学方法按章节讲授,势必降低的课程的综合性、实用性,也缺乏趣味性,这不但难以培养学生学习喜好,使得教学双方都陷入困境,而且,学生不知道如何在真实的情境中灵活地使用知识和运用技巧。这样的学习,是很难面对今后职业的。要改变这一现象的方法,比较成功的是运用以课题或项目来开展教学活动的行为导向教学法进行教学,在教学中,淡化知识的系统性和连贯性,更多关注的是知识之间的联系,在联系中学习知识、在综合运用中学习知识,使学生不仅学会了程序设计知识本身,又培养了学生运用程序设计的知识去解决实际新问题的能力,达到“学以致用”的教学目的。
(二)可行性
《VisualBasic程序设计》是一门实践性和操作性很强的课程,知识涉及许多抽象的术语,如摘要:类、对象、过程、语句、控件等等,还有大量的开发工具的使用。仅就VB的开发环境为例,其中就包含了摘要:窗体设计器、代码编辑器、对象浏览器、属性窗口、工程管理器、工具箱、菜单、工具栏等等。把握和熟悉它们的最好方法,就是在不断的结合实际的“案例”(案例教学法)或“课题”(项目教学法)的操作实践中去把握。在教学中,教师可以把课程内容包含在两到三个综合贴近实际的项目,给出案例,再把这个项目分成若干个小项目(或模块)。例如摘要:以开发一个“学生信息管理系统”为一个综合项目(教师首先给出案例演示,以引起同学们的关注),再分别以“登录窗口”、“查询窗口”等为小项目进行设计开发,学习相关的基础知识(如摘要:在设计“登录窗口”的项目中,学生可以把握“文本框、标签、命令按钮、属性设置、变量命名规则、变量定义、变量数据类型、变量的声明语句、赋值语句”等相关知识群)。学生在具有目标明确的项目驱动下,以“做中学”的方法进行学习,这样,不仅可以提高他们学习的主动性和学习乐趣,同时也培养了他们的关键能力。
二、“行为导向教学法”案例
行为导向教学法中的“项目教学法”是指师生以团队的形式共同实施一个完整“项目”的工作而进行的教学活动。通过在开展项目过程中有针对性的工作来培养学生的关键能力,非凡是独立工作能力、想象力、创新能力。项目教学法包括了计划、实施和检查及成果展示的全过程。它是由学生自己来完成整个过程的教学方法。以下是一个项目教学法的简案。
项目摘要:学生信息管理系统
(一)教学目标
1.培养学生运用VisualBasic知识解决实际新问题的能力;
2.培养学生独立学习和工作的能力;
3.培养学生和人合作的能力。
(二)项目的实施过程
三、需要重点注重的两个新问题
(一)教师角色的转换
在行为导向教学中,对教师提出了更高的要求。教师应是“双师型”的教师,老师的角色由传统的教学主导者转变为教学活动的引导者或主持人,在教学过程中,教师以咨询员、伙伴、朋友等角色出现在学生中,教学方法由注重“教法”转变为注重“学法”,为此,要完成教学任务,教师要付出更多的心血。
(二)项目设计的合理性
项目设计的最重要的原则就是可实践性,以保证学生可操作,并有收获。因此,项目的设计应采用结构化的方法,自上而下,逐步细化的原则;项目的实施,则采用自下而上,由易到难,逐步完善的原则进行。
DSP芯片是专门为实现各种数字信号处理算法而设计的、具有特殊结构的微处理器,其卓越的性能、不断上升的性价比、日渐完善的开发方式使它的应用越来越广泛。将计算机网络技术引入以DSP为核心的嵌入式系统,使其成为数字化、网络化相结合,集通信、计算机和视听功能于一体的电子产品,必须大大提升DSP系统的应用价值和市场前景。将DSP技术与网络技术相结合,必须解决两个关键问题:一是实现DSP与网卡的硬件接口技术,二是基于DSP的网络通信程序设计。DSP与网卡的硬件接口技术参考文献[1]有比较详尽的论述,以下主要讨论基于DSP的网络通信程序设计。
1通信协议的制定
协议是用来管理通信的法规,是网络系统功能实现的基础。由于DSP可以实现对网卡的直接操作,对应于OSI网络模型,网卡包含了物理层和数据链路层的全部内容,因此,规定了数据链路层上数据帧封装格式,就可以为基于DSP的局域网络中任意站点之间的通信提供具体规范。因为以太网是当今最受欢迎的局域网之一,在以太网中,网卡用于实现802.3规程,其典型代表是Novell公司的NE2000和3COM公司的3C503等网卡,所以研究工作中的具体试验平台是以DSP为核心构成的以太局域网,主要用于语音的实时通信,所使用的网卡为Novell公司的NE2000网卡。NE2000网卡的基本组成请见参考文献[2],其核心器件是网络接口控制器(NIC)DP8390。该器件有三部分功能:第一是IEEE802.3MAC(媒体访问控制)子层协议逻辑,实现数据帧的封装和解封,CSMA/CA(带碰撞检测功能的载波侦听多址接入)协议以及CRC校验等功能;第二是寄存器堆,用户对NE2000网卡通信过程的控制主要通过对这些寄存器堆中各种命令寄存器编程实现;第三是对网卡上缓冲RAM的读写控制逻辑。DP8390发送和接收采用标准的IEEE802.3帧格式。IEEE802.3参考了以太网的协议和技术规范,但对数据包的基本结构进行了修改,主要是类型字段变成了长度字段。所以,以DSP为核心的局域网内通信数据包基本格式如图1所示。
DSP读出数据包和打包从目的地址开始。目的地址用来指明一个数据帧在网络中被传送的目的节点地址。NE2000支持3种目的地址:单地址、组地址及广播地址。单地址表示只有1个节点可以接收该帧信息;组地址表示最多可以有64个字节接收同一帧信息;而广播地址则表示它可以被同一网络中的所有节接收。源地址是发送帧节点的物理地址,它只能是单地址。目的地址和源地址指网卡的硬件地址,又称物理地址。
在源地址之后的2个字节表示该帧的数据长度,只表示数据部分的长度,由用户自己填入。数据字段由46~1500字节组成。大于1500字节的数据应分为多个帧来发送;小于46字节时,必须填充至46字节。原因有两个:一是保证从目的地址字段到帧校验字段长度为64字节的最短帧长,以便区分信道中的有效帧和无用信息;二是为了防止一个站发送短帧时,在第一个比特尚未到达总线的最远端时就完成帧发送,因而在可能发生碰撞时检测不到冲突信号。NE2000对接收到的从目的地址字段后小于64字节的帧均认为是“碎片”,并予以删除。在数据字段,根据系统的具体功能要求,用户可以预留出若干个字节以规定相应的协议,以便通信双方依据这些字节中包含的信息实现不同的功能。
2基于DSP的网络通信程序设计
如果基于网络操作系统,用户可以利用一些软件对网络操作系统的支持,很容易地编写出优秀的网络通信程序,但这些程序必须依附于网络操作系统。而在DSP环境下,必须深入了解网络接口控制器(NIC)的工作原理[2],通过对网络直接编程,实现局域网内任意站点之间的通信而完全抛开网络操作系统。
DSP对网卡的通信过程控制就是DSP对DP8390中各种寄存器进行编程控制,完成数据分组的正确发送和接收。DP8390的所有内部寄存器都是8位,映像到4个页面。每个页面有16个可供读写的寄存器地址(RA=00H~0fH)。页面的选择由命令寄存器CA控制。第0页寄存器用于收发过程,第1页寄存器主要用于DP8390的初始化,第2页寄存器则用于环路诊断。DSP对寄存器的操作是将寄存器作为DSP的端口设备,其实际物理端口地址(PPA)为网卡基本I/O端口地址(BIOA)与寄存器地址(RA)之和(即PPA=BIOA+RA)。应注意的是,PPA与寄存器间并不存在一一对应关系,对PPA的读操作与写操作并不一定是对同一寄存器进行的,这种情况在第0页尤其明显。用户数据分组在DSP和网卡交互是通过网卡的数据端口实现的,既可以用DMA方式也可以用PIO方式读入数据分组或将数据分组送至网卡RAM缓冲区。在本系统中,DSP采用DMA方式对网卡进行数据读写。网卡的数据端口地址(NDPA)为网卡基本I/O地址(BIOA)加偏移地址10H(即NDPA=BIOA+10H)。
网卡通信过程控制可分为网卡初始化、接收控制和发送控制。下面分别予以讨论。
2.1网卡初始化
网卡初始化的主要任务是设置所需的寄存器状态,确定发送和接收条件,并对网卡缓冲区RAM进行划分,建立接收和发送缓冲环。具体过程请参阅参考文献[2]。需要说明的是,每一块网卡被赋予一个物理地址,以便通信站点的标识。这个物理地址存在网卡的PROM(存储地址为0000~0005H)六个单元中,在网卡初始化时,通过远程DMA读入DSP内存中,并送入网卡物理地址寄存器。在一步的意义在于:一方面,如果能正确读出网卡的物理地址,则说明网卡硬件基本没有问题,网卡的上电复位和DSP对网卡的初始化顺利通过;另一方面,这个物理地址可以用于DSP网络系统中的点名、包的过滤丢弃等服务,也就是说,在链路层根据数据帧携带的源地址和目的地址确定数据报从哪里来,是否接收或丢弃。网卡初始化时另一个重要的工作就是接收缓冲环的设置,为了有效利用缓冲区,NIC将接收缓冲区RAM构成环形缓冲结构,如图2所示。
接收缓冲区RAM分成多个256字节的缓冲区,N个(N最大为256)这样的缓冲区通过指针控制链接成一条逻辑上的缓冲环。缓冲环的开始页面地址存入PSTART寄存器,环页面结束地址存入PSTOP寄存器。PSTART和PSTOP确定了接收缓冲环的大小和边界。为便于缓冲环读写操作,还需要2个指针:当前页面指针CURR和边界指针BNRY。CURR确定下一包放在何处,起着缓冲环写页面指针作用;BNRY指向未经DSP取走处理最早到达的数据包起始页面,新接收的数据包不可将其覆盖,起着缓冲环读页面指针的作用。也就是说,CURR可以告诉用户网卡接收的数据分组当前放到了什么位置,而BNRY则用于确定DSP读缓冲环到了什么地方。由于接收缓冲区为环形结构,BNRY和CURR相等时,环缓冲区可能满也可能空。为了使NIC能辨别这两种状态,规定当BNRY等于CURR时,才认为环缓冲区满;当缓冲区空时,CURR比BNRY指针值大1。因此,初始化时设置:BNRY=PSTART,CURR=PSTART+1。这时读写指针不一致,为了保证正确的读写操作,引入一软件指针NEXTPK指示下一包起始页面。显然,初始化时NEXTPK=CURR。这时,缓冲环的读指针对NEXTPK,而BNRY只是存储分组缓冲区的起始页面边界指示,其值为NEXTPK-1。
2.2接收控制过程
DSP完成对DP8390的初始化后,网卡就处于接收状态,一旦收到分组,就自动执行本地DMA,将NIC中FIFO数据送入接收缓冲环,然后向主机申请“数据分组接收到”中断请求。DSP如果响应中断,则启动网卡远程DMA读,将网卡缓冲区中的数据分组读入学生机存储区,然后对接收缓冲环CURR、NEXTPK、BNRY指针内容进行修改,以便网卡能从网上正确接收后续分组。DSP响应网卡接收中断后,接收控制过程如下:
①设置远程DMA的起始地址;RSAR0=00H,RSAR1=Nextpk。
②设置远程DMA操作的字节数,这个长度在46~1500字节范围内根据具体要求自己确定。
③0AH送命令寄存器CR,启动远程DMA读。
④从网卡数据端口依序读入数据分组,注意,最先读入的4字节非数据分组内容,第1字节为接收状态,第2字节为下一包页地址指针,3与4字节为接收字节数。第2字节内容应该送入Nextpk,其它字节根据用户要求处理。
⑤修改边界指针BNRY=Nextpk-1。
⑥清除远程DMA字节数寄存器RBCR0和RBCR1。
2.3发送控制过程
DSP先执行远程DMA写操作,将内存中的数据分组传至网卡发送缓冲区,然后启动发送命令进行数据分组发送。发送控制过程如下:
①设置远程DMA的起始地址为网卡发送缓冲区起始地址;
②设置远程DMA操作的字节数;
③12H送命令寄存器CR,启动远程DMA写;
④依序送出数据分组至网卡发送缓冲区;
⑤清除远程DMA字节数寄存器;
⑥设置发送字节数寄存器TBCR0和TBCR1;
⑦12H送命令寄存器CR,启动数据分组发送。
3发送方发送频率的控制
发送方发送频率的正确控制主要保护两点:一是有一个最小发送时间间隔,否则会因为接收方不能及时接收而导致系统瘫痪;二是发送频率能够足具体的功能实现要求。譬如在语音的实时通信中,发送频率就取决于声卡的采样频率。在8kHz采样频率时,声卡每秒钟采样8000字节,采用1024字节需用时128ms,如果通信协议规定发送1次传送1024字节有效数据,则必须每128ms发送一次才能保证缓冲区有新数据待发送,也才能保证接收方有新数据播放。128ms是一个理论计算数值,在实际的操作中采样速度和发送频率之间总是不能完全匹配,而存放数据的缓冲区大小是有限的,如果没有良好的控制技巧来实现正确发送,就会造成声音抖动和延时。解决的办法是双缓冲技术和双指针控制,并且根据采样速度和发送频率之间的匹配情况送入不同的发送通信进行处理后发送。正确发送的含义有两方面,一是每次发送的都是新数据,二是能满足接收方总在播放新数据的需求。
4接收方防止数据包的丢失
由于DSP通过中断请求判断是否有数据分组到来,如果中断繁忙而两个数据包到来时间相差非常短,DSP有可能只响应一次中断,从而导致丢包的发生。分析网卡接收数据过程,当网卡收到数据分组时,首先执行本地DMA,将NIC中FIFO数据送入接收缓冲环,并将本地DMA操作的起始地址存放在当前页寄存器(CURR)和当前本地DMA寄存器(CLDA0、CLDA1)中,DSP从网卡接收缓冲环读出数据到存储器则称远程DMA操作,用软件指针Nextpk来指示远程DMA的起始页面。因此通过比较网卡本地DMA和远程DMA的当前地址,即在中断服务子程序中比较CURR和Nextpk指针,或比较CLDA0、CLDA1和Nextpk指针,就可以保证当前数据分组放到了哪里就读出到哪里,从而防止丢包的发生。
前几年,OpenGL虽然是开放式的标准,但是只能在具有UNIX操作系统的各种昂贵的工作站之间通用;尽管工作站上的OpenGL性能优越、编程方便、生成图形精真,但是只有少数人能体会其中乐趣,而令大多数PC机用户望尘莫及。随着计算机技术的发展,工作站与PC机的性能日趋接近。Microsoft公司首先将OpenGL图形库链接到WindowsNT中,目前又将OpenGL动态库挂到最新Windows95上,这样,广大PC机用户就可充分享受OpenGL的乐趣了。更令人高兴的是,目前国内外出现了专门对OpenGL进行硬件加速的三维图形加速卡。这样,普通用户只
要拥有一台Pentium90以上、16MBRAM、520MB以上硬盘容量的PC机以及一台43cm以上的大屏幕监视器和一块OpenGL三维图形加速卡组成的系统,就能与图形工作站相媲美,但价格却便宜数十倍。
本文作者一直从事计算机图形应用开发工作。原来是在SGI工作站上利用OpenGL开发图形程序,后来又首先在国内第一块三维图形加速卡AGC-3D上基于WindowsNT的VisualC++2.0环境下继续进行开发。在开发过程中,同一OpenGL程序几乎不用修改就能在两个平台间来回移植,效果甚好。
一、OpenGL特点及功能
OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,能十分方便地在各平台间移植。
OpenGL具有七大功能。
(1)建模OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(如球、锥、多面体、茶壶等)以及复杂曲线和曲面(如Bezier、Nurbs等曲线或曲面)绘制函数。
(2)变换OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比和镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。
(3)颜色模式设置OpenGL颜色模式有两种,即RGBA模式和颜色索引(ColorIndex)。
(4)光照和材质设置OpenGL光有辐射光(EmittedLight)、环境光(AmbientLight)、漫反射光(DiffuseLight)和镜面光(SpecularLight)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。
(5)纹理映射(TexureMapping)利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。
(6)位图显示和图像增强图像功能除了基本的拷贝和像素读写外,还提供了融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图像效果处理。
(7)双缓存(DoubleBuffering)动画双缓存即前台缓存和后台缓存,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。
此外,利用OpenGL还能实现深度暗示(DepthCue)、运动模糊(MotionBlur)等特殊效果。
二、OpenGLforWindowsNT图形库
OpenGL图形库一共有100多个函数。其中核心函数有115个,它们是最基本的函数,其前缀是gl;OpenGL实用库(OpenGLutilitylibrary,GLU)的函数功能更高一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等,共有43个,前缀为glu;OpenGL辅助库(OpenGLauxiliarylibrary,GLAUX)的函数是一些特殊的函数,包括简单的窗口管理、输入事件处理、某些复杂三维物体绘制等函数,共有31个,前缀为aux。
此外,还有六个WGL函数非常重要,专用于OpenGL和WindowsNT窗口系统的连接,其前缀为wgl,主要用于创建和选择图形操作描述表(renderingcontexts)以及在窗口内任一位置显示字符位图。这些功能是WindowsNT对OpenGL的唯一补充,见表1所示。
表1管理图形操作描述表的WGL函数
另外,还有五个Win32函数用来处理像素格式(pixelformats)和双缓存。由于它们是对Win32系统的扩展,因此不能应用在其他OpenGL平台上,见表2所示。
表2管理像素格式Win32函数
三、OpenGLforWindowsNT程序设计
OpenGLforWindowsNT的程序设计与OpenGLforUNIX的程序设计有一点小区别,关键就在于如何将OpenGL与不同操作系统下的窗口系统连接起来。如果调用OpenGL辅助库窗口管理函数,则不用考虑这些问题。下面将主要介绍在WindowsNT下OpenGL的程序设计关键。
1.图形操作描述表
在WindowsNT下窗口程序必须首先处理设备描述表(DeviceContexts,DC),DC包含许多如何在窗口上显示图形的信息,即指定画笔和刷子的颜色,设置绘图模式、调色板、映射模式以及其他图形属性。同样,OpenGLforWindowsNT的程序也必须使用DC,这与其他Windows程序类似。但是,OpenGLforWindowsNT必须处理特殊的DC图形操作描述表,这是DC中专为OpenGL使用的一种。一个OpenGL应用图形操作描述表内有OpenGL与WindowsNT窗口系统相关的各种信息。一个OpenGL应用首先必须创建一个图形操作描述表,然后再启动它,最后在所定义的窗口内按常规方式调用OpenGL函数绘制图形。
一个图形操作描述表不同于其他DC,它们调用每个GDI函数都需要一个句柄,而图形操作描述表方式下只需一个句柄就可任意调用OpenGL函数。也就是说,只要当前启用了某个图形操作描述表,那么在未删除图形操作描述表之前可以调用任何OpenGL函数,进行各种操作。
2.像素格式
在创建一个图形操作描述表之前,首先必须设置像素格式。像素格式含有设备绘图界面的属性,这些属性包括绘图界面是用RGBA模式还是颜色表模式,像系缓存是用单缓存还是双缓存,以及颜色位数、深度缓存和模板缓存所用的位数,还有其他一些属性信息。
(1)像素格式结构
每个OpenGL显示设备都支持一种指定的像素格式号。一般用一个名为PIXELFORMATDESCRIPTOR的结构来表示某个特殊的像素格式,这个结构包含26个属性信息。Win32定义的PIXELFORMATDESCRIPTOR如下所示:
typedefstructtagPIXELFORMATDESCRIPTOR
{
WORDnSize;
WORDnVersion;
DWORDdwFlags;
BYTEiPixelType;
BYTEcColorBits;
BYTEcRedBits;
BYTEcRedShift;
BYTEcGreenBits;
BYTEcGreenShift;
BYTEcBlueBits;
BYTEcBlueShift;
BYTEcAlphaBits;
BYTEcAlphaShift;
BYTEcAccumBits;
BYTEcAccumRedBits;
BYTEcAccumGreenBits;
BYTEcAccumBlueBits;
BYTEcAccumAlphaBits;
BYTEcDepthBits;
BYTEcStencilBits;
BYTEcAuxBuffers;
BYTEilayerType;
BYTEbReserved;
DWORDdwLayerMask;
DWORDdwVisibleMask;
DWORDdwDamageMask;
PIXELFORMATDESCRIPTOR,
*PPIXELFORMATDESCRIPTOR,
FAR*LPPIXELFORMATDESCRIPTOR;
(2)初始化PIXELFORMATDESCRIPTOR结构
PIXELFORMATDESCRIPTOR中每个变量值的具体含义和设置可以参
考有关资料,下面举出一个PIXELFORMATDESCRIPTOR初始化例子来简要
说明相关变量的意义。定义PIXELFORMATDESCRIPTOR结构的pfd如下:
PIXELFORMATDESCRIPTORpfd=
{
sizeof(PIXELFORMATDESCRIPTOR),//结构尺寸
l,//结构版本
PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,//特性标志
PFD-TYPE-RGBA,//RGBA模式
24,//24位颜色
0,0,0,0,0,0,//不涉及这些属性
0,0,0,0,0,0,0,//没有alpha缓存和累积缓存
32,//32位深度缓存
0,0,//没有模板缓存和辅助缓存
PFD-MAIN-PLANE,//主层类型
0,//保留结构数
0,0,0,//不支持结构数
};
在这个结构里,前两个变量的含义十分明显。第三个变量dwFlags的值是PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,表明应用程序使用OpenGL函数来绘制窗口,第四个表明当前采用RGBA颜色模式,第五个采用24位真彩色,即1.67千万种颜色,如果是256色系统则自动实现颜色抖动;因为没有使用alpha缓存和累积缓存,所以从变量cAlphaBits到cAccumAlphaBits都设置为0;深度缓存设置为32位,这个缓存能解决三维场景的消隐问题;变量cAuxBuffers设置为0,在WindowsNT下不支持辅助缓存;WindowsNT下针对OpenGL变量ilayerType只能设置为PFD-MAIN-PLANE,但其他平台也许支持PFD-OVERLAY-PLANE或PFD-UNDERLA
Y-PLANE;接下来bReserved变量只能设为0,而最后三个变量WindowsNT都不支持,故全设置成0。
(3)设置像素格式
当初始化PIXELFORMATDESCRIPTOR结构后,就要设置像素格式。下面几段从VC++2.0的MFC程序中摘出的代码就是设置像素格式的方式。代码如下:
CClientDCclientDC(this);
intpixelFormat=ChoosePixelFormat(clientDC.m-hDC,&pfd);
BOOLresult=SetPixelFormat(clientDC.m-hDC,pixelFormat,&p
fd);
第一行语句说明得到一个应用窗口客户区的设置描述表。
第二行调用ChoosePixelFormat()选择一个像素格式,并将像素格式索引号返回给pixelFormat变量;函数中第一个参数是选择像素格式的设置描述表的句柄,第二个参数是PIXELFORMATDESCRIPTOR结构的地址。如果调用失败则返回0;否则返回像素格式索引号。
第三行调用SetPixelFormat()设置像素格式,三个参数分别是设备描述表的句柄、像素格式索引号和PIXELFORMATDESCRIPTOR结构的地址。如果调用成功则返回TURE;否则返回FALSE。
3.创建图形操作描述表
正如前所述,必须创建图形操作描述表并启用它后,才能调用OpenGL函数在窗口内进行各种图形操作。一般说来,利用MFC中增补的管理图形操作描述表方法来编程比较方便。下面举一例:
intCopenglView::OnCreate(LPCREATESTRUCTlpCreateStruct
)
{
if(CView::OnCreate(lpCreateStruct)==-1)return-1;
//TODO:Addyourspecializedcreationcodehere
PIXELFORMATDESCRIPTORpfd=
{
sizeof(PIXELFORMATDESCRIPTIOR),
//structuresizel,
//structureversionnumber
PFD-DRAW-TO-WINDOWS|PFD-SUPPORT-OPENGL,//propertyflags
PFD-TYPE-RGBA,//RGBAmode
24,//24bitcolor
0,0,0,0,0,0,//notconcernedwiththese
0,0,0,0,0,0,0,//noalphaoraccumbuffer
32,//32bitdepthbuffer
0,0,//nostencilorauxbuffer
PFD-MAIN-PLANE,//mainlayertype
0,//reserved
0,0,0//unsupported
};
CClientDCclientDC(this);
intpixelFormat=ChoosePixelFormat(clientDC.m-hDC,&pfd);
BOOLresult=SetPixelFormat(clientDC.m-hDC,pixelFormat,&p
fd);
m-hRC=wglCreateContext(clientDC.m-hRC);
return0;
}
voidCOpenglView::onDraw(CDC*pDC)
{
COpenglDoc*pDoc=GetDocument();
ASSERT-VAILD(pDoc);
//TODO:adddrawcodefornativedatahere
wglMakeCurrent(pDC->m-hDC,m-hDC);
DrawMyOpenGL();
wglMakeCurrent(pDC->m-hDC,NULL);
}
voidCOpenglView::OnDestroy()
{
CView::OnDestroy();
//TODO:Addyourmessagehandlercodehere
wglDeleteContext(m-hRC);
}
在程序中,响应WM-CREATE消息的函数OnCreate()仅仅只创建一个临时的DC,当函数返回时,它自动删除。因此,在这里不可能启用图形操作描述表。当应用程序的窗口内容得到更新后,MFC就调用OnDraw()函数,在此启用图形操作描述表wglMakeCurrent()有效。然后,再调用自己用OpenGL写的绘图函数DrawMyOpenGL(),则程序就可进行任意的OpenGL图形操作了。当绘图结束后,再调用一次wglMakeCurrent(),但第二个参数设为NULL,意思是启用图形操作描述表无效,关闭图形操作描述表。最后,当应用程序结束时,MFC就调用OnDestroy()函数来响应
在实际工作中,大比例尺数字化测图主要指野外实地测量+电子平板测绘方法,目前这种测图方法广泛应用到数字化生产中,在生产过程中,仪器设备最容易出问题的地方是全站仪与电子平板相互连接的数据传输线,因为数据线的质量参差不齐或天气寒冷等种种因素,导致数据线经常损坏,一旦发生这种情况,外业生产就不能顺利进行。大比例尺数字化测图的一般流程为:(1)测前准备:认真学习专业技术设计书,搜集测区的控制资料。(2)踏勘:了解测区环境,主要道路、村镇基本情况,进行野外的变化发现调查,确定变化区域,同时对图上展绘的控制资料进行实地确认。(3)编写技术设计书:内容包括项目名称,测区位置,作业内容,作业方法,作业依据,取舍要求,地形图成图要求等。(4)控制测量:布设图根控制。(5)地形图测图:野外用全站仪测绘碎部点(地形和地貌的特征点)得到水平角、垂直角、斜距等数据,利用程序将以上数据经计算展绘到测图软件上,最后编辑成地形图[1]。(6)地形图的检查与上交:对测绘成果进行内外业检查,无误后上交成果。在上述的流程中,本文要解决的问题是地形图测图中的展点程序环节。
2关键技术
本文将通过无线传输技术通讯全站仪,将全站仪传回的数据进行分析、验证,实时将所测点位展绘到测图软件中。
2.1数字化测图软件
国内外有不少测绘行业的相关测图软件,较著名的国内软件有“威远图”、“开思”、“山维”等。各软件平台都有自己独到的优势和特点。如“威远图”和“开思”,基于AutoCAD环境作了二次开发,直接生产工程设计软件环境需求的DWG数据。避免因数据格式兼容性而产生的数据错误及数据不稳定,并且在后期的图形编辑中,还能够直接借助AutoCAD强大的图形编辑功能。“山维”软件是自行设计的独立软件平台,可生产DXF格式的交换数据。自主性强,不受支撑软件平台的制约。本文选用的测图软件是广州开思软件。
2.2电子平板与全站仪间的实时无线蓝牙通讯
全站仪与计算机通常是采用RS-232串行连接[2],也就是说全站仪与计算机的通信是通过一根线来完成的。经过蓝牙适配器无线解决方案(蓝牙与全站仪的连接匹配),可以使仪器与全站仪之间不再受连线的限制,只要用蓝牙串口适配器代替串口电缆插入两个设备的串行端口上,就可以实现串行端口间的无线通信。再通过在计算机上的实时通讯程序控制全站仪进行测量工作,并且将全站仪传回的数据进行分析、验证。利用VB6.0程序中的MSComm控件,配置正确通讯参数后,设计出与便携机间的通讯程序,通过发送数据申请,经无线蓝牙虚拟出的串口连接到全站仪,再把从全站仪传回的数据进行分析、验证。[3]具体的实现步骤如下:
(1)安装蓝牙驱动:让平板电脑最大效率的发挥蓝牙功能,需要先安装和蓝牙适配器配套的光盘驱动程序。
(2)全站仪的设置与连接:全站仪选用的是日本拓扑康3002N,在操作界面下,将RS-232C下的[波特率]调为4800,[字符/校验]调为8/无校验,[停止位]调为1,[Ack模式]调为标准方式,[CR,LF]调为关,[记录类型]调为REC-A。(3)连接蓝牙串口适配器:数据线一端通过串口连接蓝牙适配器,另一端通过RS-232端口连接到全站仪,这样仪器的设置与连接工作准备完毕。(4)蓝牙与全站仪的匹配:电子笔记本上打开蓝牙,搜索适配器并进行匹配。至此,笔记本与全站仪间的蓝牙无线连通已经完成,蓝牙在笔记本上虚拟出一个串口,通过该串口与全站仪的蓝牙适配器连接,就如同在笔记本与全站仪间用数据线连接是一样的。下面就需要一个控制程序,发出命令,通过建立的蓝牙关系驱动全站仪,进而操作全站仪。[4]
2.3全站仪与笔记本间的数据发送与接收全站仪与笔记本间的数据通讯利用的是VB中的MSComm通信控件。程序实现步骤与方法如下:
(1)创建通讯窗体:在VB环境下创造一个窗体,用于驱动全站仪和接收来自全站仪的数据。
(2)设定通讯参数:将全站仪与程序的通讯参数输入一致,否则两者之间无法联通。
(3)数据的发送与接受命令:向全站仪发出测量指令[5]。a.向全站仪发出测量指令,测量指令参考各全站仪指令说明书内容。b.从缓冲区得到全站仪传回的数据,例如:006?+00001772m3252048+1751349d+00001008*60+00+00061c.发送命令,告知全站仪数据接收完毕。d.进行数据正确性验证:首先从上述数据中提取垂直角(V1),利用正弦函数得出数值A。例如:A=Sin(V1),其次提取斜距(SD)、平距(HD),利用平距除以斜距计算数值B。例如:B=HD/SD,最后计算C=A-B。如果C在一个允许的限差内,则说明从全站仪传过来的数据是正确的。
2.4实时展绘点位程序
(1)读取设站数据,写出观测数据:首先读取设站信息并记录在变量中,提取出设站坐标X1、Y1、Z1,后视坐标X2、Y2,后视定向值以及仪器高。然后创建观测数据文本,将上面提到的7个参数加上观测后得到的斜距、平距、垂直角、水平角一起存储在其中。
(2)计算前、后视方位角:前视方位角=(水平角读数-后视归零值)+后视方位角后视方位角=Atn(横轴坐标差/纵轴坐标差)
(3)计算前视点坐标:前视点横轴坐标=设站横坐标+水平距离*Sin(前视方位角)前视点纵轴坐标=设站纵坐标+水平距离*Cos(前视方位角)前视高程=设站点高程+仪器高+(平距*Ctn(垂直角))-棱镜高(4)插入高程点和高程注记:首先在计算出的前视点位置插入高程点图块,然后在前视点位固定的位置插入前视高程值的注记文本。至此,外业利用蓝牙连接全站仪,实时计算并验证碎步数据信息正确性,展绘点位工作完毕。
3结束语
1.算法思想。数学里的算法是极其重要的内容,是数学的组成部分,同时是计算机理论的核心,也是技术的核心。在社会发展过程中,人们的日常生活已经离不开计算机,它成为生活中的重要工具,如看电影、绘画、处理数据等,它所涉及的面非常广,和生活息息相关。计算机虽是生活过程中必不可少的工具,但它的工作情况是什么样呢?想要了解这个问题,就要先从算法来开始学习。算法能使逻辑思维能力提高,对有条理思考和表达的发展非常有利。在过去时间里,算法这个名词虽然没有出现,但这种算法思维已经渗透到数学教学过程中,例如,运算过程中的四则运算、求解方程等,这些步骤的完成都需要程序化的表达,这个过程也是算法思想的形成。
2.算法的构建。在处理一些问题时,一系列可操作的步骤需要设计,或者设计它的可算操作,来通过这些步骤进行解决问题,这种解决问题的方法就是通常指的算法。广义的算法:就是一种工作的方法和步骤,例如,歌曲的歌谱、洗衣机说明书等都是它们使用的算法。数学教学中的算法:数学中,把计算机解决问题过程中的程序认为是现代意义的“算法”。这种算法可以用计算机实现,对求解的方法也是统一、机械的,例如:解方程、作图问题、函数求值等的算法。
二、ARCS动机设计模式在高中数学程序设计教学中的应用
1.注意策略。在学生考虑到需要输入输出时,实际上他们就已经开始有了算法思维,只是很多学生在开始时不确定如何准确划分步骤。通过上述例证使学生了解算法解决问题的思路和步骤。
2.相关性策略。《孙子算经》中原文是:“今有物,不知其数,三三数之,剩二,五五数之,剩三,七七数之,剩二,问物几何?答曰:二十三。”对高中生来说,在问题提出后,即使有些同学的思路一开始出现了偏差,但是和实际情况对比之后基本都能猜出正确答案。因此,对自己判断与实际情况不一致的同学来说,他们就会更深一步地问自己:为什么不一样?哪里出现了问题?这有助于学生独立思考能力的培养。只有让学生自己发现错误、判断错误、解决错误,才能让学生真正地掌握相关知识,这也有助于提高学生的高阶思维能力。
3.信心策略。算法实例基本是必考题,每次的考试中都有或多或少地涉及一些。算法题出题方式灵活,可考查内容较多,是一个全面评估学生知识掌握程度的考题。教师在对学生进行考核时,要考虑到学生自身知识的掌握水平,从学生角度出发,循序渐进地增加难度,切忌一次考核过难,打击学生的自信心,降低学生的学习兴趣。案例:例1.通过求1+2+3+4+5中的一个算法。解:算法1用逐一相加的方法来进行。第一步:计算1+2,得数3;第二步:把第一步中所得结果3与3相加,计算得到6;第三步:将第二步中所得的运算结果6与4相加,计算得到10;第四步:将第三步中所得的结果10与5相加,计算得得到15.说明:①一个问题的算法肯定不是唯一。②若将本例题改为“求1+2+3+…+100的结果,给一个算法”,则以上第二算法和第三算法表达较为方便。对刚开始接触程序设计的学生来说,这类题型可以提高学生的自信心,使学生产生强烈的荣誉感。题目的难度是明确的,但实际解题思路并不复杂,却有多种解题方法,对解题思路明确后,其流程图绘制也就轻而易举了。给学生自信心,让学生感受自身的能力有助于提升学生的学习动力。
4.满意策略。以满意度策略为基础的数学课堂教学方式有很多,如多媒体教学、学生学习目标设定、多元化教学方式等。在教学中,本人根据学生各自情况,与学生进行沟通后为每人设定了相应的学习目标。每次测评之后并不以全班同学的成绩来评论学生的好坏,而是通过横向与纵向两方面相比,让学生全面了解自身当前学习状况。另外,数学课堂教学中,要重视学生的能动性,通过参与问题、解决问题的方式让学生充分表现自己。通过满意策略提高学生的学习动机。
三、总结
论文关键词:Java,教学方法,作业布置,考核方式
软件行业对Java应用开发人员的[1]需求量很大,但在实际Web软件开发中,要求Java软件工程师需要掌握JavaSE、JSP and Servlet、Struts、Spring和Hibernate等诸多框架和技术才能胜任。因此,对于教学工作者来说,如何能够在有限的本科教学中最大化地培养学生动手开发Java应用的能力,以适应市场的需求,是急需研究和解决的问题。闽江学院计算机科学系从2003年开设Java课程,起初的教学效果不是很理想,往往有学生大学毕业了还没有熟练地掌握这一平台的开发技术,直接影响了就业。针对这种情况,笔者在多年的教学实践中不断地探索、改进教学方法和经验,目前取得了良好的成效。越来越多的毕业生就职于Java用人单位教学方法,并获得一致肯定。现就如何设置Java系列课程教学与实验实训、改进教学方式、作业布置、考核方式等方面进行探讨。
1Java系列课程的设置
闽江学院计算机科学系有两个专业开设Java系列课程:计算机科学与技术和软件工程。系里通过与福建工程学院等兄弟院校交流,同时又对博洋、北大青鸟等培训机构的相关课程体系进行深入分析,再结合高校教学的实际情况,将Java系列课程分为Java程序设计基础、Java高级实训系列、JSP程序设计、Android程序设计(选修 )和SSH2程序设计5门课程,分散在不同的学期来授课,以知识转化为能力为目标,以应用实践为主线。其中Java高级实训学分4学分,又细分为4个子课程,每个子课程1学分,分别是Java数据库实训、Java操作系统实训、Java多媒体实训、java网络实训。不同实训子课程随同相关专业课程同学期授课。该系列课程从教学内容上覆盖了用人单位最常用的程序设计技术,同时与其他专业课形成良好的互补关系,从一定程度上保证了授课的完整性和学生动手能力的有效培养。计算机系本科专业的Java系列课程设置如表1所示:
表1 计算机系本科专业Java系列课程设置
课程名称
开设学期
学分
总学时(理论/上机)
实训周数
Java程序设计基础
2
2
2*16+10=32(16/26)
1
Java数据库实训
3
1
4+10=14(4/10)
1
Java操作系统实训
4
1
4+10=14(4/10)
1
Java多媒体实训
5
1
4+10=14(4/10)
1
Java网络实训
5
1
4+10=14(4/10)
1
JSP程序设计
6
3
3*16=48(32/16)
1
Android程序设计(选修)
7
2
3*16+10=48(32/26)
1
SSH2程序设计
7
4
【关键词】教学团队 教学实践与改革
【中图分类号】G451 【文献标识码】A 【文章编号】2095-3089(2013)02-0005-01
一、课程建设的指导思想和实施方案
C#.net课程内容以介绍面向对象程序设计的思想和方法为主,重点介绍.net平台上面向对象程序设计的基本知识和基本技能,使学生能够熟练地使用Visual 集成开发工具编写Windows Form应用程序和应用程序。其先修课程《计算机基础》、《C++面向对象程序设计》、《数据库基础》,是数据结构(C#描述)、、网络编程的前导课程,是培养学生程序设计基础。把握程序设计方法和思路,奠定学生的可视化编程能力,为后续专业课程的学习提供知识和能力的支撑。推进和实施“.net课程教学团队”建设,是培养高素质人材,全面提升教学质量的一种重要方式。
课程建设小组在学校和计算机学院领导的支持和指导下,在课程建设上坚持改革、发展和创新的方针,以突出课程内容的先进性、实用性、够用性、操作性建设为重点,以培养学生实践技能和综合能力为核心,对师资队伍、教学内容、教学方法、教材实验、教学管理等作了重点建设,完成了规定的内容和任务,达到了预期的目标和要求。
课程建设的时间分为了两个阶段:
第一阶段:009.9~2010.9制定培养方案、拟定课程大纲。制作ppt课件及实验指导书第一版,完成教材讲义修订、发表相关论文、申报科研教改项目,开发配套软件,落实实践基地,组织学生竞赛,申报.net专业实验室。
第二阶段:2010.9~2011.9完成教材讲义、课件ppt及实验指导书第二版,开展教学研究,发表相关论文,推广配套软件应用,发表相关论文20多篇(其中EI收录10余篇),申报科研教改项目,出版教材二部。相关资源挂实验室服务器供ftp下载。
二、课程建设的主要内容
1.师资队伍建设;
2.教学内容、教学方法和手段的建设;
3.实践性教学体系建设;
4.教材建设。
三、本课程的主要特色
1.有完整的学习资源库,并结合独立学院学生特点,出版了相应教材和自编了配套的实验实践指导书。
2.有配套的.net课程专业机房――微软实验实训室,既是学生上机实验实践的场所,也是中山市.net软件开发的重要平台。
3.有专业的实践基地。通过与中山市知名企业合作,签定了长期的实践教学基地协议,为学生的专业实践构建了良好的平台。
4.以解决实际问题的程序设计思想作为切入点进行教学,我们的教学站在如何应用.net作为工具编程解决实际问题的角度,在授课的过程中,以解决实际问题的程序设计思想作为切入点进行教学,在教学过程中将实际问题作为教学案例,通过对实际问题的剖析,从而使学生掌握解决实际问题的程序设计思想。
5.以培养学生的实际动手能力为目标进行教学。我们通过实践环节以培养学生的实际动手能力,对于本课程我们配有相应的上机训练以及相应的课程设计,所有的实践环节都在老师的指导之下进行,学生通过亲自上机对问题进行分析、设计、编码、调试,最终设计出能解决实际问题的程序,从而提高实际动手能力。
6.以培养学生的创新思维为目标进行教学。知识是载体,传授科学精神、治学方法,培养、提高学生的科学素质是根本,科学素质教育的核心是培养学生的创新精神。我们采用互动式教学以及组织学生对问题进行研讨的形式,充分调动学生的主观能动性,启迪学生积极思维,让学生自己去探索,从而培养学生的创新思维。
目前,国内高校该类课程的教学内容大多比较偏重于计算机编程语言或完全是编程语言的教学。教学模式也一般是传统的模式,即十分注重某种编程语言基本语句、语法和一些细节的介绍。这样,该类课程基本上是以高级语言自身的体系为脉络展开教学的。由于教学不是站在如何应用计算机工具编程解决实际问题的角度,就没有把逻辑与编程解题思路放在主体地位,也就没有很好讲解如何分析问题和解决问题,结果导致学生程序设计能力、上机解题能力训练不够,更谈不上引导学生进行课题研究和科研探索了。于是,很多学生在学习时感到内容枯燥难学,学过之后又不能用之有效解决实际问题。
对于信息领域、尤其是计算机专业的大学生来说,仅仅掌握几门编程语言是不够的。他们重要的是在开始大学学习时就要努力锻炼去掌握解决实际问题的程序设计思想和养成良好的程序设计习惯,具备用计算机解决实际问题的思想和眼光。这样,就不单单是要学习编程语言本身,而是要开阔思想,打好了一个思维的基础。有了这个基础之后,再学习各种编程语言工具课就有实际意义了,也容易引起学习兴趣,并能把编程语言作为有利工具来实现自己的算法、解决问题。同时,也使自己在后续课程学习乃至研究生阶段的科研活动中后劲十足。本课程的教学工作完全基于上述的教学理念,进行教学改革,取得了好的教学效果。
四、课程建设主要实际效果
1.出版的二部教材《C#大学基础教程》、《软件工程技术及应用》,目前已在全国高校使用。
2.在全国公开刊物发表较高水平论文二十多篇,其中EI收录十余篇。
3.配套的软件《面向对象设计在线评测系统》已在校内应用,最高峰时同一天有1500多人次提交评测结果。
4.团队教师指导的学生在学科竞赛中获国家级奖26人次(包括全国大学生信息安全竞赛一等奖)、省级奖37人次。毕业生就业率稳定在98%以上。
五、进一步探究的问题
“.net课程教学团队”经过几年的建设,在教学、科研、师资队伍、实验室建设、教材建设等方面取得了可喜的成绩,教学效果反应良好,学生评教结果全为优良,受到学生普遍欢迎和同行认可。但课程建设工程是一项系统工程,需要进一步总结和完善的地方很多,目前,本课程也还存在一些不足之处。
整改措施:
1.师资队伍的建设;
2.教学资源的建设和完善;
3.进一步改革和完善课程体系。
参考文献: