HI,欢迎来到学术之家股权代码  102064
0
首页 精品范文 c语言开发

c语言开发

时间:2023-05-29 17:46:53

开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇c语言开发,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。

c语言开发

第1篇

关键词 微机原理与接口 汇编语言与C语言比较

中图分类号:TP368.1 文献标识码:A

0 引言

“微机原理与接口”是信息学科的一门必修课,主要介绍8086微处理器的原理及其扩展接口的应用。然而8253芯片是接口芯片中的一个重要组成部分,因此本文就从8253出发,阐述用汇编语言和C语言对其开发,让学生更好地用软件对硬件进行开发。

1 8253知识点进行描述

8253工作方式:

1.1 频率发生器

在该方式下,计数器装入初值,开始工作后,计数器的输出OUT将连续输出一个时钟周期宽的负脉冲。两负脉冲之间的时钟周期数就是计数器装入的初值。在这种初始方式下,门控信号GATE用作控制信号。当GATE为低电平时,强迫OUT输出高电平。当GATE为高电平时,分频开始。时序波形如图1所示。

1.2 方波产生器

当装入数值为N时,若N为偶数,则完成N/2计数时OUT为高电平,完成另外N/2计数时OUT低电平,一直进行下去。若N为奇数,则(N+1)/2计数时OUT保持高电平,而(N-1)/2计数期间OUT为低电平。在GATE为高电平的时,产生对称方波。时序波形如图2所示。

1.3 C语言的优点

C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。由于C语言的易可移植性,在嵌入式系统里面应用广泛。

1.4 汇编语言的优点

汇编语言是面向机器的程序设计语言。汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。

总之,虽然汇编语言执行起来速度比较快,但开发起来比较麻烦,尤其是8086架构里面只有有限的寄存器,在开发大型的软件时就会显得捉襟见肘,采用C语言开发就可以提高代码的质量,用一句C就可以代替好几句汇编语言,会让开发人员轻松很多,更会让很多初学者对嵌入式系统的开发产生兴趣。

2 实例:C语言方式下和汇编语言下控制8253

8253控制端口地址为 203H;计数器0地址为 200H;计数器1地址为 201H;计数器2地址为 202H。

outportb(0x203, 0x56)

//56H(01010110B).选择计数器1,低八位读写,方式3(方波发生器),二进制计数.

outportb(0x201, 8); // 向计数器1写入低八位初值8H(00001000B).

outportb(0x203, 0x94); // 向8253控制端口写控制字94H(10010100B)。选择计数器2,低八位后读写,方式2(分频脉冲发生器),二进制计数。

outportb(0x202, 6); // 向计数器2写入低八位初值6H(00000110B).

如果使用汇编语言程序,则变成

MOV DX,203H;指向控制端口

MOV AL, 56H ;设置工作方式

OUT DX, AL;往端口送数据

MOV DX, 201H;指向计数器1

MOV AL, 8;给计数值

OUT DX, AL;往端口送数据

MOV DX,203H;指向控制端口

MOV AL,94H;设置工作方式

OUT DX,AL;往端口送数据

MOV DX,202H;指向计数器2

MOV AL,6;给计数值

OUT DX,AL;往端口送数据

从中可以直观地可以看出,如果使用汇编语言对8253写入控制字MOV DX,203H,MOV AL,36H,OUT DX,AL,需要三条语句完成,而且需要3个寄存器,并且寄存器本来就是很少的了,这样很浪费资源;用C语言只需调用outport函数:outport(0x203,0x36),C语言的代码长度短了很多,并且也方便学生们掌握,使学生在嵌入式软件开发上产生更多的兴趣,为大型嵌入式软件的开发奠定坚实的基础。

3 结束语

根据本文比较C语言和汇编语言对8253的开发,会让更多的学生明白C语言作为一种面向结构的语言对嵌入式系统开发的优胜性,希望越来越多的学生在微机原理和接口的实验课上,采用C语言进行开发,削减代码量,提高效率。由于目前我国正处于信息化高速建设的时代,对嵌入式系统的开发水平也决定着我国在世界上的影响力。因此,让更多的学生学会用更高效的语言进行嵌入式系统软件的开发显得尤其重要,本文就此发表自己的看法。

参考文献

[1] 马义德,张在峰,徐光柱,杜桂芳.微型计算机原理及应用(第二版).北京:高等教育出版社,2001.

[2] 王永山,杨宏五.微型计算机原理与应 用(第二版).西安:西安电子科技大学出版社,1999.5.

第2篇

摘要:近些年来,随着时代经济的飞速发展以及科技的进步,当下主流的编程语言中,C++语言作为一种特殊的编程语言,主要来源于C语言的演化,同时C++语言跨平台软件开发的如何设计始终是当前软件开发行业领域研究的热点之一。本文在对基于C++语言的跨平台软件开发设计研究时,首先分析了C++语言,其次分析了跨平台软件开发环境,最后探讨总结了C++语言的跨平台软件开发设计过程。

关键词 :C++语言;跨平台;软件开发;设计研究

现如今计算机语言中C++语言使用频率和次数最多,同时编程速度较高,进而广泛的应用于跨平台软件的开发设计中。跨平台作为软件开发中的重要概念之一,不仅仅依赖于实际的操作系统,结合跨平台开发的实际需求,逐渐推动了现代化软件工程的蓬勃发展。因此本文对基于C++语言的跨平台软件开发设计进行研究有一定的经济价值和现实意义。

1、C++语言的相关概述

C++语言主要是由C语言演化而来的,C语言开发演化过程中,逐渐注重系统软件开发的特性,并伴随着C++语言的兴起,其新特性逐渐增加。当前C++语言和其它相对高级的语言相比较而言,有着特殊的运行性能,在实际的运行过程中,并不需要借助于虚拟机将其作为中介,进而将C++语言的运行效率显著提高。

同时C++语言在实际的开发过程中,往往有着相对较低的开发成本,C++语言应用的过程中,逐渐被引入各种各样的特性,将其在泛型编程拓展过程中,对于高层次的软件工程问题有着一定的积极作用。

总之,C++语言有着相对根本性的优势,不仅仅可以用于高级系统程序的设计和3D游戏的开发应用,同时也可用于数值科学计算以及通用程序设计等。

2、跨平台软件开发环境

2.1 跨平台的相关概念

跨平台作为现代化软件开发中相对重要的一种概念,不仅仅对操作系统没有一定的依赖性,同时对于硬件环境也没有一定的依赖性,而在实际的开发应用程序过程中,更要将其在另一个操作系统下保持有着正常性的运行,基于跨平台的实际需求,就要结合现代软件工程的发展,对各种不同的平台加以支持,进而将其带给市场的潜力充分发挥。

2.2 跨平台软件开发需要的环境

一般而言,开发环境构成的过程中,往往需要有着一定的软件编辑器、程序调试器以及程序编译器三种,但是就其实质性而言,Sandbox这种软件不仅仅可以实现代码的编译,同时也可实现代码的调试,其内部同样各种各样的平台中往往需要有着各种各样的代码库和依赖库。开发程序中,同样也存在多种类型的源代码,在C++语言的软件开发和编译中,就要做好最终结果质量的控制,并有最好的代码产生,在对错误捕捉和调试过程中往往需要一定的支持。

跨平台软件开发主要是将抽象实现的一种重要因素,往往需要将抽象以及相关的一些设计逐渐的借助于新的开发手段进行开发研究,实现在不同平台上都能实现特殊的编译。

3、C++语言的跨平台软件开发设计

C++语言跨平台软件开发设计过程中,更要做好各个环节的综合设计,就其实质性而言,C++语言的跨平台软件开发设计可以从以下几个环节做起:

3.1 将语言的扩展特性避免

一般而言,任何语言在编程的过程中,往往都是对相对较老的程序以及文件进行选择。这些相对较老的程序包含一些原有的程序和基本公式,相对来说这些程序和公式不仅仅有着规范性,同时也有着标准型,而当前现代化的新程序库相对来说是杂乱无章的,在跨平台上产生过程中,常常面临各种各样的故障,虽然会获得一定的支持,同时也会有不精确定义的事故存在。

C++语言的跨平台软件开发设计过程中,就要避免语言存在一定的扩展特性,这种跨平台开发过程中往往有着相对较高的异常灵敏度,无限度的对新特性利用中,就要借助于C++语言标准函数的基本模型,并保证开发软件和产品有着相对较强的稳定性。

3.2 将动态处理实现

C++语言跨平台软件开发中,就要对多种环境运行的可移植代码库加以编写,在实际的项目开发过程中,就要对可能存在的问题加以避免,并处理好一个平台在另一个平台上没有特性这一问题,进而实现动态性的处理。

3.3 借助于脚本文件实现管理

就C++语言的跨平台软件开发设计而言,就要做好脚本文件的基本管理工作,保证编写的程序代码不仅仅有着简单易懂的特点,同时也要有着一定的简洁性,对合理的软件结构进行构建,将和平台相关的一些文件以及数据库充分的分隔,在实际的开发过程中借助于脚本文件进行某种程度上的编译,将其在各个部位合理的分配。对应用程序使用的过程中,就要将配置文件中的相关配置选项调出来,进而将里面的程序读取,并在跨平台软件开发过程中,尽可能的保证平台相关联的文件进行全部的分离,借助于特殊的手段将该功能充分实现。

3.4 对安全的数据串行化使用

现如今,C++语言的跨平台软件开发设计过程中,对于如何保证跨平台数据存储的安全性和可靠性这一问题,始终是当前软件开发设计的核心问题之一,而C++语言的跨平台软件开发设计过程中,可以借助于软件的fread指令,做好对每个编译器和单一目标平台的综合性处理,并在实际的跨平台操作环境中,借助于实际方法对数据进行不同程度上的存储和加载,进而对平台的独立性加以保障,借助于跨平台将数据在目标文件进行存储过程中,一般而言,不同的平台间往往有着一定的差异,在实际的处理过程中,同样也将会有着多样性的结果特征。

3.5 C++语言跨平台开发中的编译和测试

C++语言跨平台开发变异和测试过程中,更要做好科学化的编译和测试,在实际的跨平台软件开发过程中,尽可能的保证相关联的一些代码在长时间的使用过程中,保证其代码可以在另外的平台上加以检测,并借助于不同的平台进行测试,进而将bug及时的发现。

3.6 实现抽象

一般而言,实现抽象主要是对跨平台应用程序中被移植过程中有着一定的有效性,通过对这种方式加以借用,进而实现软件的单独性开发,并将具有独立性和简洁性的程序拿出,在实际的跨平台开发设计过程中,往往需要对多种函数进行利用,进而在实际的开发过程中,并不用对所有的函数进行变异,而C++语言跨平台软件设计过程中,主要是对封装方法加以采用,进而将抽象的过程实现,这种封装方法相对来说,需要视情况而定,一旦存在相对特殊的情况时,就要借助于其它的方式做好程序的基本调用工作,并做好对该功能的基础命名工作。实现抽象的过程中,一旦对该程序及其公式使用之后,就要将该功能的主要程序直接调用,并将该功能充分实现。

3.7 C++语言跨平台软件开发的实现过程

C++语言跨平台软件设计开发的实现过程中,首先就要做好功能模块实现过程和非功能模块实现过程,在代码编写之前,就要对源代码在文本编写过程中的相关编辑策略加以规定,对\t格式加以统一,并使得代码的结构尽可能有着简单化的基本特点。

C++语言跨平台软件开发实现过程,同样也要对统一的工程宝建立,并对跨平台的代码库加以建立,借助于平台依赖库对平台相关代码进行封装,做好对处理器差异、编译器差异的合理控制,保证有着对齐的内存和有着顺序的字节,并将平台无关的代码实现,做好内存的管理。

操作系统和接口库实现的过程中,往往不同的操作系统将会存在各种各样的系统限制,在实际的开发设计过程中,更要对限制的参数进行适当的调整,并做好对文件描述符的基本限制,尤其是在Unix系统中,就要借助于文件的描述符这种系统性的资源,提高程序的通用性和灵活性。网络程序开发过程中,任何一个网络连接将会对一个文件描述符占用,一旦程序将很多的Socket连接打开,其程序在实际的运行过程中借助于fopen将难以打开文件。对这一问题如何加以解决呢?可以将其系统逐渐的升级为64位系统,同时还可以采用64位方式编译程序,对sys/io.h中的函数操作文件加以使用,并对文件池技术加以采用,将一部分文件描述符预留。进程和线程在实际的限制过程中,就要对线程数进行创建,并将符的数量以及进程线大小的限制加以描述,其操作系统抽象层中操作系统函数不能直接的被调用,更应该将其在一个操作系统抽象层中包装的库中实现,将其在底层的操作系统中直接的脱离出来,并保证系统调试有着相对有效的起点。

用户界面的实现过程中,就要做好跨平台软件图形界面的基础设计工作,将程序基础的逻辑代码和数据构成,金可的借助于跨平台的开发工具包,借助于C++语言实现,进而开发利用C++语言跨平台应用程序的一种用户界面,进而做好相关界面的控制。

结语

总而言之,本文在对C++语言的跨平台设计进行研究时,通过对C++语言和跨平台需要的环境进行分析,进而对C++语言跨平台设计做了主要的探讨,进而总结出,C++语言跨平台设计过程中,不仅仅要有着相对丰富的经验,同时更要在开发的软件中将更多的功能和实际的操作容积加入,借助于相对优越的设计,综合性的提高软件的额功能。本文研究分析C++语言的跨平台设计时,希望其中的设计思路以及相关的理论基础为更多的跨平台开发设计工程师给予一定的帮助,同时本文中存在的不足之处还望更多相关研究人员给予指正。

参考文献:

[1] 张驰. 基于C++语言的跨平台软件开发的设计与实现[D]. 北京交通大学,2010.

[2] 侯成杰. 航天器C语言软件常见编程错误分析及检测方法研究[J].空间控制技术与应用,2013,06:53-57.

[3] 杨波,沈承舒. 面向嵌入式软件开发的C语言程序设计课程改革探索[J]. 计算机教育,2014,05:105-107.

[4] 吴兴华. 基于C语言软件开发的效率、移植及调试[J]. 数字技术与应用,2013,12:172.

[5] 杨鹏. 基于C++语言的跨平台软件开发的设计[J]. 硅谷,2014,04:19+21.

[6] 徐巍. 跨平台移动开发框架的比较分析与实例开发[D]. 吉林大学,2014.

[7] 谢东来. C语言软件设计中的主要问题分析[J]. 计算机光盘软件与应用,2013,04:235-236.

第3篇

【关键词】 C语言 创造性 教学模式

一、引言

创新性思维是思维的高级形式和创造力的核心,是人们特别的意图或者任务。培养学生的创造性思维是对现代教育的根本使命,特别是高等教育。C语言这门课程具有高度抽象性和逻辑性,可以提供学生广阔的思维空间。从我多年的教学经验,形成意见这个过程是一个伟大的培养学生的创新思维的过程。那么我们怎么可以培养学生的创造性思维?现在我将阐述我的观点。

二、使学生掌握C编程的一般方法

引导学生持有共同的方法C语言是发展的基础学生的创造性思维。当学生开始他们的C语言学习,他们通常无法找到他们面临的一个编程问题的出路。为什么呢?一个原因是,学生不能摆脱在中学时的旧的思维模式,另一个是他们还没有掌握C语言的编程方法。因此,教师应该多说多讲编程方法的例子,以便我们能为培养学生的创造性思维创造一个良好的环境。例1:输入两正整数为m和n。然后找出它们的最大公约数和最小公倍数。

算法分析:

第一步,读取问题。学生仔细阅读问题,关注它是两个正整数,要输入数据和理解最大公约数和最小公倍数的定义。

第二步,绘制的流程图描述算法的实现过程(见图1)。在该算法中,而循环使用,如果m

第三步,根据算法编写的C代码过程。

第四步,上机调试,最终得到程序的正确的结果。

三、舒适的环境启发学生的创意灵感

教学是教师和学生表达自己的感情和相互传染的心情的一个过程。培养学生的创造性思维,教师首先要设置一个舒适创意的环境。还有在课堂教学中需要注意:1、教师应尊重每一个学生,特别是对待那些编程不好的学生。这样,每个学生会觉得自己被认可,然后他们可以无压力的开拓自己的思维,找到他们的激励创新。以作者为例如,笔者曾在黑板上给定一个问题,然后让三学生完成它,。完成之后,作者做了一些算法分析工作,即使结果是错误的,还是给予更多的鼓励、少批评。2、分组讨论提倡学生互相帮助。组内成员之间应该没有任何区别。当讨论明确问题的结果,语言代表整个群体的智慧,并使每个组员快乐的讨论学习,可以有一个积极的态度和一个很好的机会培养学生的创新思维。

四、突破传统的研究方法培养学生的创造性思维

通常我们在传统的三个步骤教学理论给出的定义->解释定义->显示定义的例子;然而在实际的C语言编程课程中应该有新的三个步骤:提出问题发现解>总结规律或方法。传统的方法是从理论到实践,从抽象的示范和推广专业化,而C编程应遵循从实践到理论的方法,从示范到抽象、从专业化的推广。笔者在教学中,笔者经常首先给出的代码,然后让他们的学生验证码;有时作者故意犯了一些错误,让学生正确的记录结果的程序。当回到课堂,这作者将要求学生思考算法和代码中的错误,然后的课堂气氛也会高,很多学生给出他们的意见,可以很好地发展他们的创造力。最后,老师会分析这个问题并作出结论。作为一个结果,我们可以得到很好的理论教学效果。

例2:4×4矩阵的转置

该程序的代码如下:

main()

{int a[4][4]m*p,i;

printf(“Please input a(by row)4×4 matrix:\n”);

for(i=0;i

scanf(“%d%d%d%d”,&a[1][0],&a[1][1],&a[1][2],&a

[1][3]);

p=&a[0][0];

为了发展学生他的创造性思维,讨论了该程序的算法。最后,教师应给出分析和结论:矩阵的转置交换一个a[i] [j]和a[j] [i]。但这个程序使用指针作为参数的函数参考,因此,交换的指针是pointer +4*i+j和pointer + 4*j +i,我考虑的要素多维数组由行(每行4个)存储,和指针变量是用来存储一些数组元素的地址,或在其他组元素。如果一个a[1] [3]和a[3][1]交换,事实上交换数组元素所指向的值pointer + 4*i+ 3 和 pointer + 4*3 +i指针,如果学生能理解算法,那么对学生创造力的发展是有益的。

五、鼓励学生带着问题去思考

教师设置问题应巧妙利用课堂提问的艺术。课堂提问可以提高学生和老师之间的相互作用。设置问题应按照“学生之间的差异”,所提问题的层次是发展的学生创造性思维的关键。

例3:从100到200,找到所有的素数。

教师根据程序提出了一些问题:(1)素数的定义是什么?(2)有多少次循环?如何开始循环工作?(3)结束循环的标志是什么?(4)输出格式是怎样的?让学生思考一会儿,然后回答这些问题。在学生回答,老师给出了自己的结论:一个素数是一个整数且大于1,除了本身和和1之外不能被整除的数。该程序是一个双重循环,每执行一次外循环,内循环将重复执行,直到表达式不成立;在执行完所有运算后退出循环并输出结果,显示每10个数一行。提问是必不可少的学习环节,作者应该给学生一些时间提问,可以鼓励他们去思考和发展的创造力。作者经常让学生修改一些程序,他们发现错误,提出新的问题,完善程序,这种方法可以激发他们的兴趣和创造力。

六、激发学生发散性思维和培养学生的创造力

发散性思维是创新的核心思考。发散性思维是想从不同的观察方向和角度,发现更多新的信息和寻找答案。在教学过程中,让学生激励自己学习和鼓励他们打破传统的方式,尝试新的方法,以找到自己的适合的方法来解决问题。这是提出了一些新的编程方法,程序使用不同的算法,找到自己的解决方案问题和讨论这些差异答案。作为一个结果,学生可以发展他们的希望学习和创造性思维的能力。

例4:输入3个数,A,B,C,找出最大的一个数。

对于这个问题,有些同学给出的代码如下:

一个问题通过多种方法来解决,教师可以拓宽学生的思想,激发他们的创造性思维。

七、用创造性的方式教授新知

在多年的教学中,笔者发现系统的教学考虑将正常教学与创新教学作为一种系统,通过整合教学实现教学目标。如下图所示:形成一个系统的教学模式:(1)系统的教学模式是一种模式,可以培养学生的创新品质、是有帮助的为了解创造力的概念教育。(2)系统的教学模式能体现现代教育理念,有利于发挥学生和教师他们的主动性和创造性。(3)系统的教学模式有助于创新教学方法,更有助于拓展新教学方法的运用。教师应强化C语言教学中的理论教学和时间教学的互动,激发并引导学生学习主观能动性,C的教学过程是培养学生的兴趣,激发学生的创新精神和培养他们的创造力思考的一个过程。

参 考 文 献

[1]谭浩强《C程序设计(第三版)》清华大学出版社,2005。

第4篇

关键词:教务管理;工作流;Excel AddIn;SendKeys

一、背景概述

大学教学管理日常工作量大,涉及人员和事务复杂。以考务组织为例,对学期末的多门课程排考后,教学秘书需要根据时间节点,查看开课课表、教务通知等多个单独文档或表格,在不同管理系统中切换录入和修改数据,并及时通知相关主考和监考教师,提醒信息,手工操作工作效率低,容易出现错误。

目前教务管理、办公OA和电子邮件等信息系统中普遍存在“信息孤岛”现象 [1,2 ],各种系统中的数据只能手工输入和迁移。本文根据实际工作需求,以日常使用最为频繁的Excel软件为基础,应用工作流模式和C#语言开发加载项(AddIn)插件,实现一键发送内容到电子邮件、办公OA、短信和微信界面。

二、软件架构

工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现” [3 ]。经分析调研,大学教务管理工作一般都有严格的时间节点,例如监考组织,涉及确认考试时间地点、提前通知主考教师和学生时间、提前通知监考教师时间等,因此,拟开发“教务助手”辅助应用程序,以时间轴为主线将各项工作从不同的系统中导出,整合到日常办公平台中,其架构如图1:

三、主要实现方法

在微软Visual 2010平台上,新建一个Excel 2010外接程序(Excel AddIn) [4 ],这是一种托管代码外接程序,用户安装后的软件后,会自动在Excel软件上增加加载项菜单 [5 ],在使用Excel软件过程中随时点击菜单项,即可执行相应功能,调取工作簿内容,并启动其他应用程序,实现协同工作。

本软件命名为“教务助手”,主要功能有“发OA”“发邮件”“发短信”等3种,并且可以在同一架构下自由扩展。用户在使用Excel时,可以随时点击菜单栏的“加载项”,调出“教务助手”的子菜单(图2)。

1.在Excel中创建菜单并响应用户操作的核心代码(有删减):

private void ThisAddIn_Startup(object sender, System.EventArgs e){menuCreateMail = commandBarPopupTmp.Controls.Add(Office.MsoControlType.msoControlButton, Type.Missing, Type.Missing, 1, true); menuCreateMail.Caption = “发OA”;}

2.查找并控制其它Windows窗体的核心代码(有删减):

【DllImport(“user32.dll”, EntryPoint = “FindWindow”, SetLastError = true)】

private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

IntPtr hwndCalc = FindWindow(null, “工作任务 ―― 新建任务―― 网页对话框”);

3.发送字符串和自动填充表单的核心代码(有删减):

if (hwndCalc != IntPtr.Zero){ SetForegroundWindow(hwndCalc);

Clipboard.SetText(“监考通知”); SendKeys.SendWait(“^v”);SendKeys.SendWait(“{Tab}”); }

四、应用效果

在安装该软件后,教务工作人员如果需要批量通知几十名监考教师,只须点击相应菜单,软件即可自动逐行复制Excel工作簿中的单元格文本,自动匹配人员,获取手机号码、Email地址或OA用户名,使用SendKeys功能,发送文本信息到相关程序或网页,填写表单 [6 ],经操作人员手工确认或修改后,执行发送功能,实现半自动的信息批量发送,可大幅节省工作量,并防止手工录入错误。图2显示了软件读取数据,控制用友致远A8 办公系统发送监考通知的过程。

五、总结

教务管理辅助应用程序优化了传统教学管理中的工作流程,以时间轴为基础,对涉及到的多个信息系统中的人员、任务和数据进行整合,实现多种渠道的信息公开和传达,提升了教务工作效率,减少了教学事故发生。

参考文献:

[1]张珍义.高校数字化校园建设中“信息孤岛”现象的探讨[J].中国教育信息化,2008(13).

[2]涂振宇.数字化校园建设存在的问题与对策研究[J].信息与电脑(理论版),2014(4).

[3]曹风华. 基于工作流技术的学生评语生成系统的设计与实现[J]. 现代计算机(专业版),2011(10).

[4]苑青,孔捷,冷静. 利用VSTO和.NET的Office开发技术[J]. 电脑编程技巧与维护,2009(6).

第5篇

【关键词】编程语言 计算机应用 软件开发 选择 研究

计算机应用软件开发在我们的学习、工作和生活中扮演着重要的角色,被社会大众广泛的应用与推广,发挥着不可忽视的作用和影响。编程语言在计算机应用软件开发的选择中,既能够减轻计算机工作的难度,也能够有效地提高编程工作量的质量和效率,对于计算机技术的发展和运作有着极其重要的建设性意义。编程语言要加大研发力度,充分发挥出自身的优势和价值,不断与计算机应用软件开发相适应、相契合,从而更好地推动计算机技术的稳定进步与发展。

1 计算机编程语言的相关论述

计算机编程语言的形式、内容较为广泛和系统,其中具有代表性的是:C语言、C++语言以及JAVA语言等等方面。

1.1 C语言

C语言是处于高级语言与汇编语言之间的一种中级语言,是集高级语言与汇编语言的优点于一身的编程语言。具体来说,C语言具有以下三个方面的特点:

(1)C语言具有清晰化和结构化的特点,对于模块程序的进行具有很大的推动作用,而且在调试和维护方面也有着强大的作用和功能。

(2) C语言的使用效率较高,移植性较强,进而使C语言能够移植到各种计算机上,形成各种独具特色的CZ言模式。

(3) C语言的编写代码的质量较高,使执行效率大幅度提升上来;也能够最大程度地发挥汇编语言的作用。

1.2 C++语言

C++语言是C语言的扩展和延伸,是一种全新的编程语言形式。C++语言汇聚了C语言的众多特点和优势,在具备C语言特点的基础之上,又对编程对象注入了新的编程思想,可以更好地适应编程项目的需求,而且C++语言在很多计算机系统编程中得到了广泛的应用。

1.3 JAVA语言

JAVA语言主要应用在网络应用系统之中,具有安全性强、简易性强、移植性强以及性能高等等特点,具体的特点表现在以下几个方面:

(1)JAVA语言不易造成程序错误的发生;

(2) JAVA语言是完成面向对象的编程语言,具有全面性和统一性;

(3)JAVA语言可以方便我们查阅很多软件在初期开发的过程中容易出现的错误,提高内存的正确率;

(4)JAVA语言可以有效防止非法内存操作的现象发生,因为它自动屏蔽、阻挡了手动释放内存的功能。

总而言之,编程语言中每一种语言都具有自身的特点和优势,在计算机应用软件开发中,要选择正确地、适合自身的编程语言模式,对于减轻我们的工作量,提升工作效率具有极大的帮助和推动作用。

2 计算机应用软件开发选择中应遵循的原则

(1)要从开发项目的整体结构出发,计算机应用系统对于各种编程语言的选择要十分慎重,积极寻找适合自己的编程语言。

(2)对于计算应用软件开发的成本费用要十分慎重,例如对视频处理和信号处理等方面的操作。因此,在此建议使用静态类型的编程语言,不仅开销较低,而且效果也非常明显;

(3)如果应用软件的开发需要大量的手工劳动和处理,可以考虑选择简易性强、灵动性较强的编程语言。与此同时,对于编写出来的程序我们还要及时地检查和调节。

(4)在计算机应用软件开发之前,要对开发环境及时地了解,硬件环境对于各种编程语言的适用性有所不同,所以我们要寻找与自身相匹配的硬件环境,要让编写程序在硬件环境中得到最大程度地发挥。

(5)在编程语言的过程中,我们还要充分考虑项目是否适用于位操作,如果适用性较好,就恰恰可以提供出合适数据类型的编程语言。此外,要尽可能地采用专业的编程语言,可以节省很多工作时间,提高工作效率,从而更好地防止编辑错误的现象发生。

3 不同编程语言对于计算机应用软件开发选择的影响因素

3.1 在软件的整体规划方面

在计算机软件开发过程中,软件开发人员要对软件的整体结构进行把握和设计,其中包括了软件开发的功能和属性以及软件延伸等方面的问题。要在首次语言编写版本助中充分挖掘软件功能,因此,在编辑语言的选择过程中,要做好展开整体规划的准备。

(1)软件开发人员要充分了解应用程序的功能,要在数据库语言中选择一种较为适合的语言。例如:JAVA语言具有相对简单的功能;而C语言、C++语言就具有相对繁琐的功能。

(2)在软件规模方面,要以数据库的处理对象为基础和前提,例如:在数据库的功能相对简易,可以选用ACCESS语言;

3.2 在软件开发人员专业技能方面

软件开发人员的专业技能有限,只能掌握几种基础、常用的编程语言,并不能掌握所有的编程软件;如果软件开发人员对编程语言不熟悉,就很难保证编程工作的正常运作。这就说明了在开展软件长期规划过程中,首先要对编程语言进行合理的分类和管理,软件开发人员在掌握自身熟悉的编程语言基础上,要学习不同的编程语言,丰富自身的专业技能和专业水平。

3.3 在软件开发平台方面的影响

计算机软件的开发可以有高级语言和低级语言之分。例如:C语言和C++语言对运行环境的要求相对较低。软件开发人员要想有效、合理利用编程环境,就必须要处理好如软件开发平台的相关问题。

3.4 在硬件资源的限度方面

在计算机应用软件的开发之中,针对硬件资源的使用是非常有限的。例如:在照相机和汽车的嵌入式设备中,表现得很明显。因此。我们可以考虑采用C语言和C++语言,进而保证硬件资源得到最大程度地利用和发挥。

4 不同编程语言的应用范围和领域

4.1 C语言的应用领域及范围

往往体现在编译器的开发、硬件驱动的开发以及工业控制方面等等;

4.2 JAVA语言的应用领域及范围

体现在WEB应用、嵌入式以及系统编程方面等等,侧重于企业级的应用开发,现已成为WEB开发中不可或缺的一部分;

4.3 C++语言的应用领域及范围

C++语言综合了高级语言和低级语言,具有一定的科学性优点,主要体现在通讯系统、电子邮件以及仿真方面得到了明显的应用和成效,适用范围也比较广阔。

4.4 PHP语言的应用领域及范围

体现在中小型网站的开发之中和WEB页面办公等等。

5 编程语言在计算机应用软件开发选择中的建议、对策

计算机应用软件开发的思想要不断与时俱进、开拓创新。积极引进先进、科学、高效的计算机技术;借鉴成功的经验,吸取失败的教训;提高编程语言的选择能力。在具体的应用软件开发中,编程语言的注意事项有以下几个方面:

5.1 注重韧饣肪车慕岷嫌朐擞

计算机应用软件开发的前提和基础是硬件环境,软件开发人员要及时、充分地考虑外部的硬件环境。硬件环境对于计算机应用软件的开发至关重要,如果开发软件与硬件环境不适合,就会造成软件不匹配,引发不必要的故障和问题的发生。

所以,在计算机开发之前,首先要选择好编程语言的适用环境,不能一概而论,要确保编写程序符合科学技术的发展模式;同时,软件开发人员要针对编写程序及时进行调整和改造

5.2 结合应用的行业和范围

在计算机应用软件开发的选择中,要综合考虑各个方面所存在的问题和因素。例如:要考虑软件开发人员所从事的事业、不同编程语言的特点等等,要全面、系统的分析,选择适用于自身软件开发的编程语言。

此外,软件开发编程语言由于行业的不同,也会有所限制和约束。例如:要想更好地面向开发对象,可以选择C语言、C++语言、JAVA语言;计算机软件开发也会受到一定的工作范围的影响,例如:C++语言比较适用于信息和通讯的领域。

5.3 合理、有效地运用最为熟悉的编程语言

软件开发人员在计算机应用软件的开发过程中,要在最短的时间内熟悉基础的编程语言,这样可以节省大量的人力,而且能够有效节省工作时间,保证了一定的工作质量。而且,软件开发人员也要注重结合不同编程语言的特性,更好地在计算机平台中操作和运行,对于编程语言也要注入一定的创新因素,创造最为理想的编程语言形式。

5.4 结合编程语言的需求进行选择

在需求选择方面,高级语言适用于后期的开发和维护,使用起来更加便捷、简易,但是相对复杂、繁琐,是一个漫长的过程。低级语言适用于对存储空间和运行时间较高的需求。此外,根据开发环境的不同要慎重考虑适合自身的语言级别。

6 结束语

综上所述,计算机应用软件开发是一项复杂、系统的工程,而对于编程语言的选择也是这项工程中的重中之重。我们要树立正确的判断和分析能力,选择出最适用自身的编程语言。因此,软件开发人员要全面掌握各种编程语言的特征,加强探索和实践的能力,以全面熟悉各种编程语言。编程语言在计算机应用软件开发中,可以大大提高计算机技术的质量和效率,从而推动计算机应用软件开发更好地走向世界、走向全球,实现计算机技术的可持续发展的战略需求。

参考文献

[1]张旭.不同编程语言对计算机软件开发的影响[J].电脑与电信,2016(10):52-54.

[2]刘嵩鹤,孙和勤.不同编程语言对计算机应用软件开发的影响[J].数字技术与应用,2015(01):201.

[3]李开元.探究计算机应用软件开发过程中不同编程语言的影响[J].信息化建设,2015(06):48.

第6篇

1 计算机软件开发中汇编语言种类介绍

1.1 C语言。C语言的使用历史较长,距现在已有40年的历史,是编程语言中应用较广泛的语言,是软件开发中的基础语言,被广泛应用在我们的生活中。与它同时代出现的编程语言,早已经被淘汰,足见其强大的生命力。开发者们首选的计算机编程软件便是C语言,因为它具有很多优点,如短小精悍,灵活方便,表达方式灵活使用,便于理解,数据类型与运算符相当丰富等众多优点。

1.2 C++和Visual C++。C++语言是基于C语言升级以后的编程语言,它不仅包含了C语言的众多优点,更是具有面向对象语言的特点。视觉窗口系统的出现使图形窗口界面成为标准,C语言很难实现这种开发任务,所以C++的出现便解决了这样的难题。其应用也是非常的广泛,甚至是任何领域都能应用。因为它强大的功能使我们运用起来相当的灵活多变,事实证明,掌握了C++在学习其他的汇编语言就很容易了。使用VC++可以很容易的编写出窗口界面,此外VC++在微软的地位也是很高的,其功能相当的重要。相当多的微软基础类库便在运用C++时用上的,提高了计算机软件开发的发展进程。

1.3 Java语言。Java语言现在被广泛的应用,原因是Java具有良好的完备性,它在很大程度上避开了C语言和C++语言在软件开发中出现的困难。特别的将以前的单机模式发展成目前的网络模式。Java语言与普通的编译与解释的计算机语言有所不同。Java语言集合了C语言与C++语言的特点,取其精华去其糟粕,是较C++语言简单并且基于其之上的语言。Java语言是完全面向对象的语言,Java还具有出众的通用性,平台移植性。还具有更高的安全性及高效性等优点,是软件开发者运用起来更加方便快捷。

1.4 C#语言。C#语言是在Java语言之后有的另一种编程语言,它继承了Java语言的优点,也比其有更大的优势。它是NET构架中重要的参与者,C#语言作为微软使其得到了广泛的关注,这更源于它出色的表现。

1.5 Visual Basic。Visual Basic最大的特点是包含事件驱动编程语言。此类编程语言的主要作用是协助开发环境,现在此程序也被大多数开发者所使用。数据库语言在计算机软件开发中占有着不可或缺的地位,VB语言的主要功能有图形用户界面(GUI)和快速应用程序开发(RAD)。VB较VC++语言来讲更加的方便灵活,其结构化查询(SQL)语言更是被使用频繁,VB语言在软件开发前景中大有发展。

1.6 Delphi语言。这是具有强大功能的第四代编辑语言,与VB相比较,Delphi语言功能更加强大,也更加的具有实用性。具有强大而成熟的组件技术的Windows程序的结合功能,并且拥有强大的数据库支持,以及高速的翻译器。其适用于众多的数据库结构,而且其数据库的管理系统最为高效。

1.7 Pascal语言。Pascal语言作为一种高级的程序语言被计算机所通用,其特点主要有,严格的结构化形式,运行效率比较高,繁多的数据类型和纠错能力迅速等。此语言可以描述多种数据结构及算法,并且也能充分体现和保持出软件设计者的风格及习惯。

2 计算机软件开发中编程语言的选择

在软件开发中选择合适的编程语言至关重要,其影响着整个软件的使用质量,如果我们选择了合适的语言编程,它能大大提高软件的实用效率。所以在计算机软件我们必须最大限度的了解各个编程语言的功能及特点,实现其最大的实用价值。进行汇编语言选择前,我们要考虑诸多因素。所以,对计算机编程拥有更多的了解,可以让我们对以后的软件开发有很好的掌握。

2.1 考虑应用的行业和领域。依据所从事的行业及领域进行选择。如果是面向开发对象的可利用Java语言和C++语言,如果是通讯或信息领域可选择C++和VC++语言较为合适。商业领域也可利用COBOT,利用LIST和PROLOC在工程运算方面使其应用在人工智能上。如果从事的工作是底层或硬件,则可以选择简单的C语言和C++语言较好。

2.2 考虑整体内外环境。软件开发的基础为硬件环境,其所有的汇编语言都必须适用于硬件环境,所以我们在软件开发中必须考虑其外部的硬件环境。在编程前对语言的选择尤为重要,我们必须决定语言的分布选择,也要考虑工程的整体框架。汇编语言之间都是有很强的联系性,所以学习众多语言,是为了学精其中一门或是几门语言做基础的。软件开发中我们运用编程的过程灵活多变,因此,在软件编写前选择的汇编语言需要很好地适应环境。只有这样才能确保我们编写出的程序快速调整及高效的应用。

2.3 考虑平台的支持性。在众多的考虑因素中,平台的支持性也是至关重要的,如浏览器中程序语言,其在运行中根据语言的适应性选择使用的编程语言。在平台这个大环境下,一切的操作都必须适应平台。根据编程语言自身的优势在合适的平台上进行操作,这是一个重要的选择依据,如代码是在浏览器上运行的,这就使得被选择的编程语言减少。所以在计算机软件开发中我们必须要考虑平台对编程语言的支持性。

2.4 考虑编写程序的实际需求。在众多编程语言的使用中,我们都需要保证我们编写出的程序在实际运用的需求性,并作出及时的调整。在软件开发中运用我们熟练使用的编程语言来进行编写,可以大大降低我们软件开发的时间,也提高了编写软件的效率。即便是我们使用了不同的编程语言来进行编写,但是最后我们还是会完成快速调整程序。所以,快速原型环境对我们来说是很重要的,并且在此环境下,也极大地提升了动态语言和相关性的结合。

2.5 考虑所需的位操作。相当多的文件格式和协议相关工作都需要进行位操作。如果出现众多的位操作,我们需要选择简单的位操作,所以位操作也是软件开发者们考虑的因素。

2.6 考虑成本问题。我们也应该根据项目的功能进行来进行编程语言的选择,一个整体的系统是由多个部分组成的,这并不是说一整个系统都需要用一种编程语言来完成,它也是由多种语言来进行编写的。

对于成本开销较大的操作,例如,视频处理,密码学以及信号处理等,软件开发者需进行充足的考虑,选择一些静态型的语言来进行程序的编写,如JAVA,C#语言等就是很好的选择。

第7篇

1.计算机常用的编程语言

C语言:该语言应用广泛,是所有计算机语言里最常用的编程语言,从开始出现到现在已经有40年的历史,C语言具有很多优点, 如:语法简洁、运算符丰富、数据结构类型丰富、代码和数据分离的结构化、语法要求不严格、功能强大等。C语言是具有兼容能力强的程序语言,移植起来非常容易,利用 C语言为某种计算机写的软件可以用到另一种机器上去。如:如果为苹果机写的一个程序能够方便地改为可以在IBM PC上运行的程序。C语言的主要结构成分是函数C的独立子程序,编写的程序语言比较容易维护,并且容易实现。

C++:该语言是C语言的升级,它几乎包含了C语言的所有功能, 在C语言的广泛引用前提下,C++也应用的非常广泛,可以说任何领域都可以使用,包括各种操作平台,这也决定了C++是一种最难学的编程语言,因为,它强大的功能背景下,使用起来非常的灵活多样。 实践证明,如果掌握了C++,再学习其他编程语言的时候就会非常容易,因为它贯穿了从硬件到对象的各个环节,学完该语言以后就会对计算机语言有个深刻的认识。

Jav和C#:Java和C#都是出现在 C语言之后,以面向对象为主的语言,Java 语言是在充分吸收了C++的优点,摒弃了C++的一些缺点的基础上诞生的,并且形成了具有自身特色的优势,而C#则是在Java 语言之后出现的,它更多地借鉴了Java的优点,同时增加了一些自己的特点。在一定意义上可以说,Java站在C++的肩膀上,而C#站在了 Java的肩膀上。除了跨平台以外,Java和C# 相比没有太多优势,.NET 可以控制迅雷,调用 dll等,这个是Java很难做到的,虽然有JNI或第三方开源程序,但是那些第三方不太成熟,而JNI则需要会写VC代码,很难做到。

Pascal语言。是计算机通用设计语言的一种,是高级程序语言,主要特点有:具有严格的结构化形式、丰富的数据类型、较高的运行效率和较快的纠错能力等。这些优点决定了该语言能够描述各种算法以及数据结构,另外,在应用这种语言的过程中,能够帮助编程者保持一个很好的习惯和设计风格。

每一种语言都有其存在的理由,都有其独特的优势和应用范围, 编程人员在计算机应用软件开发过程中应该以提升工作效率为基础, 以运效果为目标,选择适合开发项目的程序,选择最适合的语言,达到提高工作效率,降低工作量的目的。

2.原则

2.1整体结构

开发项目的整理结构决定了用什么样的开发软件,使用什么样的编程语言,整个系统是由多个部分组成,并不是说整个系统都必须要使用同一种编程语言进行编写,编程语言的选择应该依据项目功能而定。对于成本投入较大的操作,如:图形渲染、密码学、视频处理以及信号处理等,程序员要认真考虑,尽量用一些静态类型的语言。

2.2尽量使用最为熟悉的语言

熟练掌握的语言能够运用在开发软件方面的话,可以节省大量的时间,并且能够对软件工程项目时间表进行准确预测,及时完工。此外,熟悉的语言可以创新,如,开发的软件是偏重复处理手工劳动时, 就可以根据实际情况选择简单、灵活的编程语言,尤其是选择那些自身就具备相应功能的编程语言。

2.3充分考虑硬件环境

硬件环境是软件开发的基础,所有软件编程语言都应该适应硬件环境,所以软件开发过程中要考虑外部硬件环境。

通常情况下,编程语言适应了目前版本的硬件环境,但随着硬件设备的更新,当前的软件可能就不适应了,不匹配的问题仍然存在。

因此,在程序开发以前要选择适应环境的编程语言,这样编出来的程序就能够长时间较好地运行。只有这样才能确保任何编程语言编出来的开发软件都能够实现并能够快速调整,因此,快速原型是很重要的,动态语言在这方面表现出了突出的优点,可以和很多相关库进行结合。

2.4语言的选择要考虑是否支持平台

支持平台也是在编程语言选择过程中需要考虑的因素。

例如:在浏览器中运行的程序语言,根据语言是否适应就可以有选择的使用一些语言。平台是一个大环境,所有操作都应该适应于平台,一些程序开发过程中,程序语言的格式决定了要涉及大量的位操作,此时,要充分考虑大量的位操作是否给软件开发带来困难,是否可以避免大量的工作,如果必须要进行大量的位操作,那就应该选择那些具有容易位操作而且可以提供合适数据类型等特点的编程语言。

同时, 在一些特殊领域,程序员应该使用专业的编程语言,因为这些程序语言具有很强的针对性,使用起来既能够节省很多的工作时间,还可以防止编程出现较大的失误。

3.结语

第8篇

关键词:编译原理;工具资源;实践教学

1.背景

编译理论与技术是计算机科学中发展最迅速、最成熟的一个重要分支,程序设计语言和编译的发展集中体现了计算机科学的重要成果与精华。编译原理课程是计算机科学与技术专业的专业必修课程,主要讲授程序设计语言编译程序构造的基本原理和方法。编译程序的开发堪称经典理论和先进技术紧密结合的典型示范,因此理论学习和实践的紧密结合是本课程的突出特色。通过编译程序构造的问题,可以体验到如何从实际需求中提出理论问题、理论研究推动技术进步、运用技术工具解决实际问题的过程。

在经典理论的支持下,在编译程序的研制过程中,产生了非常丰富的工具资源。在这些工具资源的支持下,编译程序开发的自动化程度得到了显著提高;相对其他软件开发任务,编译程序开发在效率和质量上的优势非常明显。更为重要的是,编译的理论和技术对于计算机科学中的其他领域也有重要的影响。一直以来,编译的理论和技术在程序设计语言的实现、针对计算机体系结构的优化、新的计算机体系结构的设计、自然语言理解、网络信息处理、网络协议的分析与实现等领域都是不可或缺的。国外著名大学(如美国哥伦比亚大学、哈佛大学和斯坦福大学等)的编译课程教学都特别重视相关的课程实践项目。以哥伦比亚大学为例,在编译原理的课程教学中开展了贯穿整个学期的课程实践项目。在项目中,学生分成小组,自主设计并实现一个小的语言,而这个语言涉及了丰富的领域,包括量子计算、音乐合成、计算机图形学、游戏、矩阵计算和很多其他领域。在这些教学实践中,很多编译开发工具都被应用于各种案例中,包括ANTLR、LEX和YACC等编译领域经典的开源软件工具。

通过收集编译资源(包括开源的编译器和编译程序开发工具),以及这些工具在计算机科学各领域中的成功应用案例,可以为开展案例式教学改革打下坚实的基础。笔者收集了编译领域常用的开源软件工具及其应用案例,并对其进行归类分析和整理,以形成支撑编译课堂教学和实践教学的资源库。基于该资源库,在今后的编译原理课程教学中,可以通过采取基于案例的教学方法,形象地向学生展示编译研究中“经典理论和先进技术有机结合”的突出特点,使学生能够通过具体的案例切实体验编译经典理论在各领域的重要作用。

2.编译资源分析

在几十年的研究过程中,编译领域已经形成了很多编译资源,如LEX、YACC、JavaCC为代表的编译模块开发工具,以及精简语言编译器、产品级开源编译器等。这些工具实现了从Ada、C、Pascal等面向过程语言到Java、C++等面向对象语言的编译程序,覆盖了文法、词法分析、语法分析、中间代码生成、代码优化、目标代码生成等编译原理教学中所有的知识点。基于这些工具也开发了SQL、XML分析等计算机科学其他领域的应用。下面,笔者从生成语言、知识点覆盖等角度对互联网上的编译资源进行整理分析。

2.1从编程语言的角度分析

从编译资源所面向的程序语言来看,从面向特殊领域的Fortran语言、DSP语言,面向过程的C语言、Pascal语言,到常见的面向对象的Java语言、C++、C#语言等,均有种类繁多的分析器、生成器、目标代码优化器等可用于案例教学的编译资源。

1)面向过程语言的编译资源。

这方面的编译资源主要针对C语言和Pascal语言。C语言作为最被广泛使用的编程语言,也拥有最多的编译工具资源,如YACC、LEX、ACCENT、BANSHEE等经典工具均可用来产生C语言编程的分析器、生成器。其中,最知名的C语言解析器生成器YACC已经在各种场合得到了广泛应用。YACC也是常用于编译课程教学的工具,它采用LALR(1)语法分析方法,最初由AT&T为Unix操作系统开发,在漫长的演变中产生了如Berkeley YACC、GNU BISON、MKS YACC和Abraxas YACC等变种版本,也出现了AYACC、YACC++等面向ADA、c++其他语言的编译器。由于所产生的解析器需要词法分析器配合,因此YACC经常和词法分析器产生器LEX一起使用,目前已有IEEE相关标准对YACC和LEX的功能进行了标准化描述。此外,ACCENT、BEG、CKIT等面向c语言的编译资源也可以用于编译课程教学。据我们初步统计,目前互联网上可用的针对c语言的编译资源多达20余种,涵盖了词法分析、语法分析、前端、后端生成器、代码优化、程序分析等编译过程中的各个环节。

2)面向对象语言的编译资源。

面向对象语言已成为程序开发的主流语言,在应用层软件、网络服务开发上占据着绝对优势地位。因此,目前也相应出现了很多针对面向对象编程语言的编译资源,特别是C++语言和Java语言。C++语言由于与C语言一脉相承,许多针对c语言的编译工具也扩展了c++版本,如YACC++、Berkeley YACC、IDC-C等,均可以生成C/C++语言的分析器。

Java语言在最近20年一直是最流行的编程语言。Java语言为了实现跨平台的目标,在编译时仅生成字节码,再由不同平台的JVM生成目标代码执行;因此,Java语言的编译执行具有明确的前端后端,非常有利于编译程序的开发和编译原理知识点的分解。目前针对Java语言的编译资源与工具种类繁多,如JavaCC、JastAdd、Jax、Jfront、Soot、PAT等,我们目前已经收集到相关编译资源20余种,既有JavaCC等综合编译环境,又有Jfront前端工具、PAT正则表达式分析器、OOPS分析优化工具等编译工具资源。

3)其他专用语言、平台的编译资源。

为了符合特殊应用场景的计算需求,出现了一些针对特定领域、特定平台的程序语言,同样,在这些领域中对编译器往往也存在独特的需求,如嵌入式系统、科学计算等,如针对SPARC平台的编译器BEG就能对Fortran、Modula等专用语言进行分析编译,而Archelon编译器则针对DSP芯片为执行代码生成做了专门的优化。ELI是这一类编译资源的典型代表,它除了支持上述流行编程语言及专用语言如c、Fortran外,甚至支持对用户定义的语言生成独有的编译器,从而帮助用户快速地实现一种专业程序语言。

2.2从知识点的角度分析

为利于编译原理课程的教学,我们更希望从知识点的角度梳理相关资源,在讲授相关课程时,可以介绍这些经典的编译工具。通过认识真实编译系统的工作流程和开发技术,帮助学生理解关键知识点。我们从词法分析、语法分析、编译前端、编译后端、程序分析及优化、完整的编译器平台等类别对现有的编译资源进行了梳理和分类。

1)词法分析。

词法分析器以UNIX/LINUX上的LEX为典型代表,能够生成c语言描述的词法分析器;而AFLEX作为LEX的变种,能生成ADA语言描述的词法分析器;Quex还能生成C/C++、Python语言描述的词法分析器;相关的资源还包括LOLO、FLEX等。

2)语法分析。

支持语法分析的编译工具最为丰富,从简单到复杂的相关开发案例也最多,可以很好地用于支撑课程教学。如前文所述,语法分析器以YACC为典型代表,这一系列的语法分析器还包括AYACC、BISON、BYACC、BEG。CUP、Jell等Java语言开发的语法分析器生成器,可以生成Java语言描述的语法分析器。ANTLR是一种用Java开发的强大的语法分析器生成工具,可以生成各种语言描述的语法分析器,包括Ada、C、C#、Java、JavaScript、Objective-C等,以及Perl、Python和Ruby等较新的互联网程序语言和脚本语言,甚至包括SQL、一阶逻辑、XPath等应用语言等。ACCENT则是一个包含了词法分析器和语法分析器的生成工具。JavaCC是当前应用非常广的一种语法分析器生成工具,能产生Java语言描述的LL(K)分析程序。值得一提的是,目前已经有非常多的利用JavaCC开发的各种语言的分析程序,包括了表达式等简单语言,如DTD、IDL、RTF等应用语言,以及PHP等实用的脚本语言。随着技术的发展,甚至出现了OOPS等面向对象的分析器生成工具。

3)编译前端。

面向c语言的中间代码生成工具最著名的是Ckit,它支持将c语言程序翻译译成SML类型的中间语言,也支持用户扩展C语言语法的前端编译。EDG则能将C++和Java等语言翻译成一种高级的树结构中间语言,并具有错误检查功能。在面向Java语言方面,比较知名的编译器前端包括Jfront等。此外,为满足特定应用场景需求,还出现了IDC-C、SUIF等编译前端及中间代码优化工具。

4)编译后端。

编译器后端方面的资源相对前端来说较少,比较知名的编译器后端是BEG,以BEGL中间语言为输入,可用于生成Motorola 68020、SPARC、MIPSl Intel 386、Pentium?Inmos T800和PowerPC等平台的目标代码。在Java语言方面,Sable研究小组基于XML提出了JIL中间表示语言,利用XML的特性为执行代码的生成和优化提供便利。此外,还有Trimam等针对并行环境生成执行代码并优化的后端编译器生成器等工具。

5)程序分析及代码优化。

在程序分析及代码优化方面的编译工具较多,如BANSHEE、CodeSurfer、Omega、OOPS、PAG、SOOT等。其中BANSHEE、CodeSurfer、Kimwitu、MEMPHIS、PAG等工具针对C/C++程序进行分析,Omega、PAT等工具则可以对Fortran、Java程序进行分析,SOOT、OOPS提供了对Java等语言编译器的优化,上文中提到的Trimam及SUIF等则针对并行环境进行了代码优化。

6)编译器平台。

除上述实现了部分编译模块的开发工具之外,还存在着大量实现了从词法分析、语法分析直至最后目标代码生成所有环节的编译器平台资源,这些资源用于案例教学可以帮助学生对编译的全过程进行一个整体的理解和把握。这些平台可以分为两类:一类是以精简语言为源语言的小型编译器,如PL语言(PASCAL子集)编译器、与ADA和PASCAL类似的TINY编译器,以及斯坦福大学开发的COOL(The Classroom ObiectOriented Language)编译器,这些编译器都是面向专门为教学设计的某种精简的编程语言,将其翻译成某种抽象机代码,借助抽象机解释器执行;另一类是以GCC、LCC为代表的产品级开源编译器,面向C/C++这类主流的编程语言,提供开源、实用的编译程序。

3.编译资源在课程教学中的应用

通过上面的分析,我们看到编译开发工具和相关案例是非常丰富的,但是如何将这些工具和案例很好地结合到教学中,则需要做仔细的选择和考虑。不论从课程教学,还是实践教学来看,编译原理课程的学习可以从局部知识点和系统整体两个层次开展。课程教学需要在掌握编译各阶段的具体知识点的基础上,加强各知识点之间的融会贯通,并恰当及时地从局部向系统整体引申。

在词法分析、语法分析、语义分析、优化、目标代码生成等知识点的学习过程中,可以引人相应模块的开发工具作为案例。如在讲解词法分析时可以结合LEX、在讲解自上而下分析时结合JavaCC、讲解自下而上分析时结合BISON,甚至可以在课堂教学时展示这些工具的核心代码,加深学生对相关算法的印象。也可以在课外安排实践作业,要求学生选择这些工具提供的案例资源,以已有的案例为基础(为调动学习兴趣,可以有意识地选择学生在其他课程中已经熟悉的语言,如数据库中的SQL、操作系统中的Shell命令语言、离散数学中的谓词逻辑等),实际生成一个编译模块,阅读分析生成程序,在此基础上,可要求学生扩展原有案例。通过结合这些工具讲解理论知识,并通过实践作业,使得学生能够理解局部知识点,并掌握相关成熟的工具的使用。

在系统开发层面,编译程序的开发是一个典型复杂的软件开发任务。如果能在理解局部知识点的基础上,为学生提供一个理解编译程序整体全貌的平台,以编译过程为指导带动课程知识点的学习,也是非常有益的。如何在编译程序的功能实用性和教学可用性两方面保持平衡,一直是编译教学的难题。开展综合性实验,是提高学生对编译程序整体理解和开发能力的主要途径。在这方面,有两种思路。一种是侧重整体体验,主要是面向一个为教学而专门设计的精简语言,如前文介绍的PL、TINY和COOL等,这些语言通常包含现代程序设计语言典型成分,但更为精简,学生可以通过课程学习,最后为该语言实现一个完整的编译器。按照这种方案开展综合性实验,有利于学生体验一个完整的编译程序开发过程。第二种思路侧重实用性和真实性,主要以GCC、LCC这类实用的,甚至是产品级的开源编译器为平台开展实践。由于GCC、LCC这类实用编译程序代码量非常大,如何引导学生在纷繁复杂的代码中理清头绪、找到和教学知识点相关的程序段,需要教师做好充分的准备。这种思路,对于将来从事编译程序开发的学生,其收获可能更大。

第9篇

计算机软件开发语言在发展的过程中,一共经历了三个过程。即面向过程的语言、面向对象和面向方面的语言。第一,面向过程的语言。面向过程的语言的工作原则是将问题进行有效的分解成很多小的模块,每个模块中都是构成问题的子问题,在程序编写过程中,通过自上而下的顺序逐步对各个问题进行解决,是一种结构化编码的语言。在计算机发展初期,计算机语言只有机器语言和汇编语言,语言的限制要求程序的编写人员要对计算机的硬件很熟悉。随着计算机的发展,计算机语言也开始向高级语言方向发展,软件开发过程中受到硬件限制的因素变少。面向过程的语言进行编程时比较简单,并且结构性也很强,可读性比较高,但也有一定的缺点,比如数据与程序模块的分离和程序的可重用性比较差。第二,面向对象的语言。面向对象的语言在结构化设计、并行处理等方面,继承了前一种语言的优点,同时,还解决了面向过程的语言中数据与代码分离的缺点。面向对象的语言被用作程序开发语言的主要目的是为了拉近计算机解决问题过程中的空间结构和应用程序的各种体系结构之间的距离,有助于程序开发过程朝着更加便捷顺畅的方向发展。继承性是面向对象的语言的一个重要特征,很多时候通过对这些语言进行层次分类来进行管理,每个类不仅能对基类的操作进行继承,还能扩展操作和数据。面向对象的语言还有一个重要的特征就是多态性,使用多态性进行处理,可以提高处理问题的抽象级别,降低软件设计时的复杂性。第三,面向方面的语言。面向方面的语言是在“方面”基础上进行的程序设计的一种语言。一般说来,可以把计算机的软件系统看成是很多个为了满足用户的各种需求的关注点,而这些关注点就是计算机要解决的需求问题。软件开发就是为了对这些关注点中的问题进行分析解决。关注点一般有两类,一是核心关注点,一是横切关注点。而利用面向方面的语言进行程序设计的关键就是横切关注点。也就是常说的“方面”,Aspect是面向方面的程序设计一个设计单元,面向方面的程序设计可以将核心关注点和横切关注点进行一个有效的分离,实现更好的软件结构。但这两种关注点对应的代码却总是交织在一起的,也就是说横切关注点和核心关注点相互之间的交互关系不能很好地从业务功能中进行有效的分离。面向方面的程序设计过程是一个系统的过程,先进行整体的分析然后对横切关注点进行细化等,最后又进行整合。根据关联来实现横切关注点之间的组合和优化使得程序设计更加精细,是面向方向的语言程序设计的关键。这种语言也有一个很大的好处,即一旦遇到客户对系统有修改的需求时,只需要在“认证”的方面进行修改,而不会影响到系统的其他方面等,可以提高工作效率。

二、常用的计算机软件开发语言

(一)C语言

C语言是一种在汇编语言和高级语言之间的语言,它汇集了汇编语言和高级语言的有点。最初,C语言能够应用的系统只有UNIX系统中,随着人们对计算机技术以及软件开发等方面的认识越来越多,C语言应用的系统也越来越多,在其他的操作系统中也可以发挥很好的效益。具体说来,C语言的主要特点有几个方面,第一,C语言是一种结构化的语言,这种语言的一个重要特点就是层次非常清晰,如果是用模块化的方式进行程序的组织,则C语言是一种十分便利的语言,而且有利于对程序进行调试和维护。第二,C语言中包含很丰富的数据类型和运算符,而且也能够访问到计算机系统内存中的物理地址,有利于进行位操作。第三,C语言的效率很高,移植性也比较强,即能够移植到不同的计算机上,C语言版本可以有很多种,不是单一形式的,同时,在执行的过程中,C语言的效率也比较高。

(二)C++语言

C++语言的一个优点是利用封装来减少程序变量对系统带来的影响。C++语言可以看成是C语言的拓展和深化,但它仍然是一种全新的语言,因为它具有的多继承机制能够对很多对象的属性进行一个准确有效的描述。相比于C语言,它更容易被掌握和学习,C++语言属于一种面向对象的语言,因此,使用C++语言进行编程时可以更好地适应大规模的软件需求。利用C++语言编写运行程序的过程主要有四个步骤,即用C++语言进行程序的编写、对编写的源程序进行编译、将一个程序的目标程序和系统的库文件以及系统信息进行有效的连接,最后是运行程序。

(三)Java语言

这种语言与C++语言相比而言,在安全性和简洁性方面有更多的优势,这种语言的特点主要有几个方面。首先,Java语言与C++语言相比,在程序编写编译过程中的很多错误都大大减少了,例如在指针以及内存管理中对程序出错率的控制上,Java语言有更高的效率。其次,Java语言是一种完全面向对象的语言,同时,Java语言还可以在计算机软件开发初期对很多出现的错误进行检查识别,以降低内存的出错率。第三,使用Java语言进行程序编写的过程汇总,能够将程序编译成一种中间的文件格式,这种格式的适用性更强,也就是说,只要是包含Java运行系统的机器都能对这种中间文件格式进行读取和执行等。最后,Java语言的安全性能高,例如它删除了手动释放内存,可以很好地防止非法的内存操作。此外,Java语言还具有很多其他的优势,例如解释性强、移植性好等,Java语言在Web浏览器以及网络应用系统之中是比较常见的。

(四)C#语言

第10篇

关键词:c语言;开源软件;教学方法;程序设计

引言

现今国内高校在教授c语言时,多数教师基于Windows开发环境来讲述c语言编程技术。由于Windows平台的局限性,教师在教授计算机编程语言时,无法深入讲解相关的一些知识和技术,使得学生对于编程语言的理解仅仅停留在表面,不能理解计算机编程语言c的本质,很多相关专业的毕业生所能从事的开发工作基本上还都是一些技术含量比较低的应用层开发工作。究其原因是我们在授课的过程中过分依赖集成度很高的IDE开发工具,让学生一键式完成开发全过程,而却对整个过程一无所知,对细节基本上不清楚。高校作为承载和传承技术的机构,理当在平常的教学过程中竭尽所能把每一技术细节都讲透、讲到位,这样才能培养出合格、有用、适合社会需求的高级技术开发人才。

国内有很多优秀的企业在基于开源软件开发自己企业的产品,很多的产品都是用很简陋的工具而不是在诸如Vc这么强大的IDE开发环境下开发完成的。这些开源工具尽管集成度不是很高,但是每个工具各具功能,在产品开发的各个阶段起着不同的作用,简单且实用。如果学生能理解这些工具的作用,实际上也就真正理解了开发一项产品的全过程,把握住了细节、核心。

鉴于以上所述并结合我校的特点和学以致用的办学宗旨,我们在校、院领导的鼓励和大力支持下,大胆尝试基于开源软件去讲授c语言编程技术,多角度去展现c的魅力和本质,放弃了在集成度很高的Windows下单纯讲述c语言知识点的传统方式,教学取得了较好效果。

1 讲授Gcc编译器深入理解C语言开发过程

任何用高级语言编写的程序都要经历由源代码到预处理代码、汇编代码、计算机可识别的目标代码到最后的可执行代码的转换才能运行。但在Windows平台下的IDE开发环境里仅仅需要点击某个按钮就一步生成可执行文件,这表面上看很便捷,但学生很难在其中体验到高级语言程序运行原理的一些相关细节。IDE帮我们做了太多的事情而隐含了过程细节,使得学生很难将学习到理论和实际联系起来。我们在教学实践中尝试使用最简单的Gee编译器,讲述Gee的各项参数,可以使学生比较直观的体验到一个高级语言编写的程序是如何从源代码逐步变成计算机可执行文件的过程。在授课过程中讲述编译器的各项参数,例如-E参数产生的结果是预处理文件,通过分析这个文件学生真正理解了预处理到底在做些什么工作,也就很容易理解include和关键字define的作用;而在讲解Gee的_o参数时,通过示例分析学生自然可以明白为什么要在源程序的开头要调用#include和为什么我们不需要自己编写prinff函数而直接调用也没有错的原因。这样在c语言教学过程中通过附带讲解这简单而又实用的Gee开源编译器工具可以使学生深入理解开发的每一个环节。把握住了开发过程中的每一步每一细节才是真正把握了住了c语言程序的本质和精髓。

2 引入Makefile概念理解项目本质

企业需要的是有多年项目开发经验、基本功扎实的开发工程师,所以在教授此门课程时,注意到要让学生建立项目的基础概念和培养起扎实的基本功。一般,在讲述c语言程序设计时多数老师会教学生使用诸如Turbo c、Vc++等软件。这些软件是好用,集成度高,但是屏蔽掉了很多的技术细节。随便写写就可编成一个应用程序,学生会有很多的困惑:我就写了一个小程序怎么就生成这么大的一个应用程序呢?而在教学过程中增补makefile知识,使学生对系统和项目的组成关系有了一定的认识。这较之传统的一个c文件讲述所有c语言的教学模式有了很大的变革。这样在学生在走出校门进入企业前已在自己的脑海里对项目、模块有了一个基本的概念。磨刀不误砍柴工,基础打好了,干起活来才得心应手。

3 放弃图形化调试手段使用Gdb调试器

多数Windows平台下的IDE开发工具所提供的c语言调试程序,可以很方便地对c语言代码中的错误跟踪定位。但是越是方便的工具越是阻碍了学生处理问题的能力的培养,过于依赖图形就会使学生在学习新知识的过程中逐步放弃逻辑思维和抽象思维的训练,也不利于学生对事物本质的挖掘。基于此,我们在c语言教学过程中大胆放弃使用IDE开发工具去调试c语言程序,而向学生介绍使用开源软件Gdb。学生通过学习break命令明白设置断点的含义,通过学习bt命令了解函数调用栈的概念,通过学习info local了解栈帧、局部变量的意义,从而既巩固了前期课程的知识又能深入理解调试程序的意义。实践表明在c语言学习过程中介绍引入Gdb调试器知识可以使得学生养成独立思考解决问题的习惯。

4 开源工具链多角度展示C本质魅力

c语言程序设计是一门实践性很强的课程,同时也是一门很难理解的课程,如果可以把一个知识点从多角度地向学生展现,势必能够帮助学生更好地理解c语言。在开源软件里有很多的小工具可以很方便地从各个方面向学生传递c语言的本质。例如可以用vim编辑器写入ab两个字符并保存为ab.c,之后我们可以用oat ab.c将文件的内容打印到屏幕上,而如果我们用od ab.c则可以以八进制的方式把文件打印到屏幕上,而用hexdump ab.c则可以以十六进制方式打印。显然,一个事物可以多角度去看去辨析,才能更全面地了解事物的本质。教学中我们采用了工程实际中常用的几个开源工具向学生多角度展示c的本质和魅力,例如用objdump-dsSx app>obj.txt这条命令可以很轻松地将一个应用程序反汇编并保存下来。很多学生都想成为计算机高手,这条命令的引入极大地激发起他们的学习兴趣,而再引入strings、nm等命令从不同的角度去看同一个可执行应用程序时,学生学习c语言程序设计的兴趣大增。学生学习这门课程的原动力一旦得到激发,学习过程自然也就由“要我学”变成“我要学”。

第11篇

关键词:面向对象的程序设计;内存分配;封装;STL;多线程技术;软件工程

现代操作系统的诞生和发展与C语言是密不可分的,因此C语言是非常重要的程序设计语言。C++在C的基础上增加了面向对象的概念,从而具备了现代编程语言的一切特征。C和C++是密不可分的,在计算机软件领域,提到C或者C++时,实际上都是指C/C++。对于计算机及信息类专业的学生,甚或对计算机软件从业人员,C/C++无疑占据着无可替代的核心位置。和C/C++语言本身的重要性相比,目前大多数高校的C/C++课程设置和教学内容却相对落后,这和教材建设滞后相关,也和教材编著者缺少应用实践经验有很大关系。

程序设计是一门实践性非常强的课程,因此整个教学环节应该以应用为导向,以上机实验为手段,不断强化和巩固各种基本概念和核心技术,才能培养出能胜任实际工作的合格毕业生,让学生在走向工作岗位的第一天就具备很强的竞争力。

现在,计算机和网络已经非常普及,这为教学提供了极为方便的实践手段,与其他专业相比具有天然的优越性。然而,也正因为计算机和网络的普及,竞争也变得异常激烈,仅仅掌握一点基础知识,满足于完成课本作业,已无法适应当前的就业形势。如何在激烈的就业竞争中胜出,是每个大学生从入学第一天起就必须正视和严肃面对的问题,也是每个高校教育工作者需要不断思考和探索的重大课题。

1以C++为重点,强调面向对象的程序设计思想

目前,大多数高校信息类专业将C和C++作为

两门课程分开教学,并且主要以C语言为主,C++甚至成为选修课程。这一方面是出于课时划分的需要,另一方面也和当前流行的教材相关。这样的划分虽然秉承了C语言和C++语言的发展历程,却忽略了现实需求。现代程序设计以对象为基本概念,以面向对象的设计为核心思想。面向对象的程序设计应该是程序设计的起点和基本要求,没有对象这个概念,软件设计无从谈起。

但是和Java等纯面向对象的编程语言不同的是,C++语言一开始就继承或者说兼容了C语言的几乎全部特征。因此,它并不是一个纯面向对象的程序设计语言,这大大增加了它的复杂性。必须强调的是,C++语言的复杂性虽然增加了学生学习的难度,但是正因为它兼容了C语言的语法特征,使其具备了直接操作内存的能力,从而成为开发系统级软件和大型软件的不二选择,其重要性也是其他语言不能比拟的。掌握了C/C++,就等于拥有了通向软件设计领域的金钥匙。另一方面,所有的程序设计语言都是相通的,掌握了功能强大、既能接近系统底层又具有高级语言全部特征的C/C++程序设计语言,再学习其他高级语言就会轻车熟路。

合理分配C和C++的教学时间,将重点转向C++,是一个艰难但重要的选择。这需要好的教材,也需要好的教学计划。C和C++是分不开的,不应该将其割裂开,要从起点就强调面向对象的概念。

在教材内容设置上,可以分为基础篇和高级篇,这样既利于学生循序渐进,也利于学时划分。基础篇应包括C和C++的基本概念和语法,如基本数据类型、指针、函数、类的基本概念,对象的生命周期、对象的内存映射等。高级篇应包括类的高级特征和复杂应用,并以最新的C++标准为基础,培养学生解决复杂和实际问题的能力。如何合理划分教学内容,需要不断地探索。高级篇的内容可以集中教学,也可以作为其他课程的实践部分进行。

2以内存分配和管理为核心,强化专业训练

由于具备了直接操作内存的能力,C/C++语言的功能变得十分强大,复杂性也大大增强。内存概念应该是编程学习和实践的核心,是教学与实践的重中之重。和内存相关的主要概念有:指针、引用、数组、结构、对象生命期、栈、堆、函数参数传递等。

现实中使用某软件时,经常会遇到“程序崩溃”现象。这几乎都是由于不当的内存访问引起的,其本质原因是程序中存在严重的逻辑错误。在编译时,编译者不一定能够及时发现这些错误,但在运行时,当错误逻辑被触发时,很有可能造成内存混乱,从而引起非法地址访问,进而导致程序崩溃。这种错误比一般的业务逻辑错误导致的计算结果不正确等问题更隐蔽、更致命。一个专业的程序员,必须在编写代码阶段就保证代码的高质量,不应该等出现问题再进行查找和排除。因此,在整个程序设计教学中,必须加强内存概念的理解,并不断地训练和巩固。

每个变量所代表的对象,无论是基本数据类型还是复杂对象,运行时都需要实例化,都需要占用内存。内存是何时分配的?分配了多少?何时释放?栈内存和堆内存的区别是什么?对象生命周期的本质是什么?函数调用的本质是什么?参数是如何传递的?函数返回值的本质是什么?这些问题在当前的教学中常常被忽略,而实际上,它们是每个合格的程序员必须深刻理解和准确回答出的问题。因为不理解这些概念,就不可能编写出正确高效的代码,设计出来的程序也一定是存在隐患甚至是错误百出的。在教学中,应该加强培养学生在这方面的专业素养。

3强调程序结构和高效封装,为职业级开发作准备

简单来说,程序的流程无非顺序、分支、循环三种。任何复杂、大型的程序,也是这些基本流程组成的。但是,编写程序时如何划分结构,合理地编写函数,做到代码的复用,用以上几种简单流程组合出一个结构清晰而又效率很高的程序,是考验编程者水平的关键,也是任何编程语言开发程序员都要面临的问题。不过,由于C/C++语言大多用于大型软件以及系统级软件的开发,强调程序结构的重要性显得更为迫切和必要。

编写程序就如同建筑师设计摩天大楼一样,既需要严谨的结构,也需要艺术性的加工。好的程序代码,阅读起来就像欣赏艺术品,给人美的享受。而劣质的程序,完全看不出编写者的思路,混乱复杂,这样的程序即使能够正确执行,也没有任何生命力。

现代编程技术强调的是高效性和可读性的结合。在不影响总体效率的情形下,以结构清晰、高可读性为第一要素,而强调封装正是这一要求的具体体现。所谓封装,有两个层次,一是函数的封装,二是对象的封装。函数封装主要是指将某个单一功能封装在一个函数内部。合理的函数功能定义有利于写出结构清晰的程序,有利于代码的复用,而将不相关的代码一股脑儿堆在一起,写出超大函数,则是函数封装的大忌。对象的封装就更重要了,这是面向对象程序设计中的核心问题。对象概念要定义清晰、明确,成员函数要功能单一,除非有充足的理由,所有成员变量都应设为私有,对象和外界打交道的唯一途径就是公共成员函数。封装对程序的维护至关重要,是现代程序设计的第一要素。

4掌握STL,理解和使用核心数据结构

标准模板库(Standard Template Library, STL)早已成为C++的标准。在商业软件开发中,它们是每个程序员都要时刻使用和深度掌握的,重要性不言而喻。

在数据结构课程中,学生会接触到栈、队列、链表、集合、映射、树、哈希表等常见数据结构。理解和掌握这些概念,对于简化程序设计,提高程序效率,程序的标准化、模块化设计至关重要。

大多数教材会将C/C++作为教学语言,来讲解这些基本的数据结构。自己动手编写简单的代码并实现,有利于概念的理解和掌握。但在商业开发中,必须使用成熟的已成为C++标准的STL,作为这些数据结构的标准实现。要掌握和使用STL,首先要深度理解模板技术。模板技术是编程技术发展过程中的一次革命,它的出现极大地提高了代码的复用程度,同时保持了程序的效率。它和面向对象的技术相辅相成,类似而又不同,掌握好这两项技术就迈进了C++编程的核心领地。

5重视高级概念

目前,多核技术得到了普通应用,互联网早已普及到千家万户。在软件开发中,开发人员必须掌握多线程技术和网络技术,因此教师要着力加大这方面的教学,使学生的知识技能水平跟上时代的步伐。

多线程技术属于编程中的高级领域,对开发者要求较高。要掌握好多线程技术,必须有扎实的基本功,要深刻理解同步、事件等重要概念。在教学上,教师可结合操作系统等课程进行教学。

网络编程涉及到的知识也比较多,教师可配合计算机网络等进行教学。以前,这一领域显得比较高深,随着网络的普及,学生对许多概念都有感性的认识,在此基础上进行专业训练,已没有太多难度。

另外,数据库操作也是软件开发中必备的技术,教师可以结合数据库课程展开教学。

除了以上几点,和平台相关的一些技术,如Windows平台下的窗口、消息、注册表等技术,以及类Unix平台下的进程管理、进程间通信、文件系统等,也是非常重要的。对这些高级技术的学习不能仅停留在语言层面,要进一步熟练掌握,这对于立志进入软件开发行业的学生非常重要。

6重视职业接轨,强调软件工程

开发软件,不仅仅是写代码。写代码仅是其中的一个环节。一个完整的产品或项目开发过程,都要经历需求分析、方案设计、代码编写、系统测试、产品部署、产品维护等各个环节。要加强在各个环节的训练,提高职业素养,学生才能在就业竞争中占得先机,才能在工作岗位上快速进入状态。

这些训练可以安排在高年级,特别是毕业设计阶段来实施。教师要锻炼学生用学到的知识和技能解决实际问题的能力,要提高学生分析问题的能力,提高其综合设计水平。要训练和提高学生使用集成开发环境的能力、编译调试程序的能力、书写规范文档的能力、团队合作开发的能力。通过这些系统的训练,学生就基本完成了从学业到职业的接轨。

7结语

C/C++语言在计算机相关专业的教学中占据着及其重要的地位,在学生的就业技能储备中更是排在了十分优先的位置。因此,C/C++语言教学必须紧密结合实际,针对企业对员工知识水平的真实需求,在教学内容及课时分配等环节上进行重大而科学的调整,才可避免教育和就业需求之间的脱节。在教学内容的调整上,参考文献[1]至[4]等提供了十分重要的素材,本文中提到的几个方面则是重中之重。

参考文献:

[1] Scott Meyers. Effective C++中文版[M]. 侯捷,译. 武汉:华中科技大学出版社,2001.

[2] 侯捷. STL源码剖析[M]. 武汉:华中科技大学出版社,2002.

[3] Thomas H Cormen, Charles E Leiserson, Ronakd L Rivest,et al. 算法导论[M]. 潘金贵,顾铁成,李成法,等译. 北京:机械工业出版社,2007.

[4] Cay S. Horstmann,Gary Cornell. 最新Java 2 核心技术[M]. 王建华,董志敏,杨保明,等译. 北京:机械工业出版社,2003.

Research on C/C++ Language Teaching Planning For Information Major

ZHAO Gui-qin

(Technical School, Shanghai Jiao Tong University, Shanghai 201101, China)

第12篇

关键词:地理信息系统;交互式数据处理语言;空间数据引擎;C#;分布式应用

0引言

进行GIS应用开发,若直接从底层做起则开发周期长、成本高。目前应用最为广泛的模式是集成二次开发[1],就是以当前成熟的商业GIS平台为基础,以高级开发语言为支持来进行应用开发。然而目前的商业GIS平台价格昂贵,并且由于提供厂商在知识产权保护方面的考虑和限制,有些还不能用来开发完全独立(Standalone)的应用系统。

业界应用最广的ESRI[2]公司产品系列中提供了功能强大的基于COM技术的ArcObjects组件作为GIS二次开发工具,开发者可以借助其成熟的空间分析技术以及其与ArcSDE空间数据库之间良好的协作特性,快速地实现GIS应用系统的开发。然而在ArcGIS9.0之前的版本中,ArcObjects不是独立的软件开发工具包(SoftwareDevelopmentKit,SDK),无法脱离ArcGIS环境开发独立的应用系统[2];即便在新的ArcGIS9.0开始支持独立开发的情形下,昂贵的许可费用仍然使得目标系统的应用成本非常高。这对科研应用目的而言,不但开发成本太高,而且灵活性很差。因而尝试在系统的设计开发中,选择基于矩阵运算的交互式数据处理语言(InteractiveDataLanguage,IDL),以及商业化的空间数据管理引擎ArcSDE的集成开发模式,以期在性能和开发成本之间达成一个合理的平衡。

1开发环境

IDL是一种新型的面向图形对象、基于矩阵的数据处理语言,自带强大的数学库支持,在数据运算、分析和空间表现方面有出色的性能[3]。ArcSDE是非常成熟的空间数据库引擎。通过结合MSSQLServer或Oracle大型关系数据库系统,可以建立具有良好性能的空间数据库[2];并且通过利用ArcSDE提供的ClientAPIs(ApplicationProgrammingInterfaces,应用编程接口)接口进行开发,系统的自主性较强。

经过对多种开发环境和编程语言的比较,系统决定采用.NET作为实现平台。C#是一种新的编程语言,它是专为生成运行在.NET框架上的企业级应用程序而设计的,同时具备C/C++的强大功能及VisualBasic的快速开发能力,是面向下一代操作系统的开发语言[4]。

2系统开发方案

2.1系统体系结构

系统采用多层逻辑结构的胖客户端/瘦服务器端模式。服务器端由ArcSDE来实现空间数据的管理,结合服务器上的SQLServer构成空间数据库。客户端由C#构建,利用其在应用程序开发方面的性能、快捷性及交互界面开发方面的出色能力,以弥补IDL在此方面的不足。IDL在系统中主要负责实现空间数据(含二维和三维)的本地访问管理和表现,如空间数据的加载、本地管理、地图渲染、三维显示等;系统还可借助IDL强大的数据处理能力实现基于矩阵运算的各种分析功能。IDL部分经过良好的封装被嵌入在客户端的C#Shell中。

2.2客户端程序框架

客户端交互界面由C#和经过.NET封装的IDLDrawWidget开发控件构建。由于IDL并没有像其他专业GIS开发组件(如ESRI的MapObjects或ArcObjects)一样直接提供对GIS应用开发的支持,因而基本的GIS功能需要利用IDL自行实现。图层控件用标准的Windows基本控件组合开发;鹰眼控件和地图控件由经过.NET封装的IDLDrawWidget开发控件来实现;比例尺控件由Windows绘图函数与IDL函数共同实现。

2.3空间数据管理

系统中所有的空间数据由ArcSDE空间数据库统一管理,系统与ArcSDE的交互由C#Shell负责管理,具体的交互功能在体系结构图的DataAcess组件中实现。其中主要使用了经过.NET封装的ArcSDECAPIs空间数据库访问函数库。

2.4空间数据处理与显示

系统中使用IDL语言来进行对空间数据的处理与运算。IDL是目前对科学计算可视化支持较好的语言之一,是一种集成了所有科学计算环境中所需函数的面向矩阵运算、用于数据可视化研究与应用开发的第四代计算机语言,也是易于使用、面向矩阵的语言。它具有高级图像处理能力、交互式二维和三维图形技术、面向对象的编程方式、OpenGL图形加速、量化可视化表现、集成的数学与统计学算法、灵活的数据输入/输出方式、跨平台图形用户界面工具包、连接ODBC兼容数据库存取及多种程序连接工具等功能,并且能够运行于多种操作系统和硬件平台之上。本质上,IDL是一个巨大的C程序库,包括了编译器、解释器、图像、算术处理器、用户界面和大量依赖操作系统的代码[5]。利用C#和IDL语言混合开发的系统,既包含了IDL语言强大的科学计算能力,又具备了C#语言对系统开发的灵活性以及系统运行的稳定性,使得两种语言在系统中达到优势互补,是实现科学计算及可视化的一种有效途径。

3SDE访问接口

系统采用了目前较为成熟的空间数据库引擎ArcSDE与大型关系数据库管理系统SQLServer来实现对空间数据的分布式存储和管理。需要解决的首要问题是如何建立与ArcSDE的远程连接,并与之实现交互操作。

ArcSDE提供的访问通道有三条[6,7]。三条通道中:使用ArcObjects成本太高;而直接数据库连接通过SQL语言直接从关系型数据库中获取以表、行、列为基础的数据,这种方法绕过了ArcSDE,适合于对非空间信息的访问,但处理空间信息的难度很大;ArcSDE的ClientAPIs是较为基础的一种功能形式,具有较长的历史和非常广泛的应用,它面向开放式系统开发,可以用于客户端与ArcSDE的交互过程。系统中最终采用ArcSDE提供的C语言客户端API方式,以便在保证系统性能的前提下,降低系统的开发和运行成本。

ArcSDE的CAPIs具有较高的数据访问性能、较完整的矢量和栅格数据访问和管理能力。但是它是一个复杂的体系,包括30个结构、21个枚举以及757个函数,并且不支持面向对象,也没有提供对.NET环境的支持(只提供了C和Java两个版本),因而难以直接在.NET环境中以不安全代码(Unsafe)的方式访问。

为解决这一问题,系统开发中利用托管(Managed)C++语言,将ArcSDE的CAPIs封装为.NET环境支持的模块,然后在.NET环境中使用。

4IDL与C#通信机制

4.1IDL对混合编程的支持

IDL为了更好地实现软件开发的灵活性和面向对象的功能,不断地对功能进行扩充,并且增加了许多与其他语言之间的通信接口,并提供了许多与其他语言进行混合编程的内部API函数。IDL6.0可以与标准C、UNIXC、VisualC++、Java、Delphi等高级语言进行混合编程。

IDL提供了以下几种混合编程方法[8]:

(1)管道;

(2)在IDL中调用COM对象或ActiveX控件;

(3)IDLDrawWidgetActiveX控件;

(4)在IDL中使用Java对象;

(5)通过RPC调用IDL(UNIX);

(6)通过CALL_EXTERNAL函数调用外部函数。

4.2目标系统适用的方式

由于目标系统是在C#编程环境中使用IDL,IDL的MicrosoftWindows版本的ActiveX控件,即IDLDrawWidget最适合本文目标系统开发的要求。IDLDrawWidget控件提供了在Windows程序中以ActiveX组件形式集成IDL功能的机制,为这些程序提供数据的分析和可视化能力。

IDL提供的IDLDrawWidget控件的主要特征如下[8]:

(1)IDLActiveX控件能显示IDL直接图形和对象图形,通过设置“图形显示方式”属性,控制图形的显示类型。

(2)IDLActiveX控件能够响应鼠标事件。这些事件可以由外部程序触发,也可以由IDL自己产生。

(3)IDLActiveX控件提供了IDL与外部应用环境之间的数据传输机制,使得IDL与外部程序之间的数据传输变得十分简单。

(4)IDLActiveX控件可以应用于任何支持ActiveX控件的开发环境中。因此,可以将IDL强大的图形显示功能集成到外部应用程序中,脱离IDL环境,具有很强的可塑性。

4.3通信及数据支持

IDL提供了以下Method用于传递数据和命令[8]:

(1)SetNamedData——向IDL传递数据,支持所有的Variant数据格式;

(2)GetNamedData——支持VT_UI1、VT_I2、VT_I4、VT_R4、VT_R8和VT_BSTR;

(3)CopyNamedArray——返回IDL数组的复本;

(4)SetNamedArray——在.NET、Delphi等环境下不能实现数据共享,只能传入数据;

(5)ExecuteStr——执行标准IDL语句,也可以作为一种数据的传递方式;

(6)VariableExists——用于判断IDL环境中是否已经存在给定变量名称的变量;

事件传递:

(1)鼠标事件由.NET环境处理;

(2)保留通过文本结果输出来实现由IDL到.NET环境的主动事件激发的方式。

IDL对空间数据存储格式的支持:

(1)矢量——支持直接读写Shapefile(通过IDLffShape类)、DXF(IDLffDXF);

(2)栅格——不支持GRID空间数据,只支持读写图像格式数据。

4.4C#与IDL间的数据传递机制

由于IDL支持的空间数据格式有限,并且不支持ArcSDE,系统中不直接使用IDL读取空间数据,而是由.NET主环境中的C#Shell负责从空间数据库读取数据,然后再传入IDL环境。

IDL与主环境之间的数据传递只处理单值或者数组数据;而点、线、多边形等较为复杂的矢量结构数据,需要首先分解为单值或数组后传递给IDL,再由IDL根据所给数据生成合适的对象图形,实现空间数据的表现和管理。

5IDL对象与GIS对象

IDL不直接支持GIS中空间数据的管理和表现,需要自己定义和实现该部分功能。系统实现中采用从IDL对象图形类继承的方式,扩展已有的IDL图形功能,定义新的空间数据类。空间数据类完成从.NET环境接收单值和表格数据,并进行管理和渲染表现等任务。

6结束语

利用IDL、ArcSDE和C#来集成开发分布式GIS应用系统,三者相辅相成,优势互补。其不但在很短的开发周期内以极低的开发成本建立非常专业的GIS应用系统,而且系统在保证数据安全性及性能的前提下,运行成本也很低廉,为GIS的应用提供了一种新的途径。

参考文献:

[1]刘光.地理信息系统二次开发教程——组件篇[M].北京:清华大学出版社,2003:1-2.

[2]ESRIInc.ESRI:theGISsoftwareleader[EB/OL].[2005]..

[3]RSIInc.RSI:dataanalysisandvisualizationsoftware[EB/OL].[2005]./pr/detail.asp?PRID=46.

[4]MicrosoftInc.MSDNhomepage[EB/OL].[2005]..

[5]闫殿武.IDL可视化工具入门与提高[M].北京:机械工业出版社,2003:1-360.

[6]ESRIInc.UnderstandingArcSDE[M/CD].[S.l.]:[s.n.],2002.