收藏 分销(赏)

对C语言指针教学问题的探究.doc

上传人:xrp****65 文档编号:7016160 上传时间:2024-12-24 格式:DOC 页数:21 大小:111.50KB 下载积分:10 金币
下载 相关 举报
对C语言指针教学问题的探究.doc_第1页
第1页 / 共21页
对C语言指针教学问题的探究.doc_第2页
第2页 / 共21页


点击查看更多>>
资源描述
对C语言指针教学问题的探究 摘要:本文讨论了C语言中指针的各种应用形式,认真分析了指针在数组、函数和动态内存分配等方面应用的特点和优点,对如何学好和掌握C语言的指针有十分重要的指导意义。<br>  关键词:指针;指针变量;数组;函数;动态内存分配<br>  中图分类号:G642 文献标识码:A<br>  <br>  1引言<br>  <br>  指针是C语言中一种特殊的数据类型,运用指针编程是C语言最主要的风格之一。利用指针变量可以访问各种类型的数据;能动态地分配内存空间;能很方便地使用数组和字符串;并能像汇编语言一样处理内存地址,编出精练而高效的程序。但是,大部分学生对指针的理解和应用还是感到困惑,特别是什么场合用到什么类型的指针变量,应用指针变量应注意哪些问题等。本文对指针应用中的一些问题进行了梳理,以利于学生掌握指针的应用。<br>  <br>  2数组中指针的应用<br>  <br>  2.1使用指针引用数组元素的优点<br>  对数组元素既可以用下标a[i]的方式引用,也可以用指针变量*p的方式引用。应该说,下标方式能对数组进行随机访问,指针变量却做不到这一点。但是,引入指针的主要目的是为了提高对数组元素访问的速度。<br>  在C语言中,数组中每一维下标的下界定义为0。对一维数组,设a[i]的存储地址为Loc(a[i]),每个数据元素占d个存储地址,则第i个数据元素的地址为<br>  Loc(a[i])=Loc(a[0])+i*d (1)<br>  对二维数组a[m][n],a[m][n]的存储地址是:<br>  Loc(a[i][j])=Loc(a[0][0]) + ( i*n + j ) * d (2)<br>  实际上,对数组元素的引用,都要先计算数组元素的地址,才能对指定单元进行操作。显然,一维数组中的地址要进行1次乘法和1次加法运算;二维数组中的地址则要进行2次乘法和2次加法运算。如果用指针变量p指向数组,连续对数组元素进行引用,可用p++和p--来移动指针。每次的引用地址只须进行简单的加法运算,引用数组元素的速度比使用数组下标要快得多。表1是在IBM-R40上使用下标和指针两种不同方式对10000个元素进行10000次访问的时间比较。<br>  从测试结果看,随着数组维数的增加,使用指针方式访问数组的速度基本不变,但下标方式的访问速度明显减慢。<br>  2.2动态数组的应用<br>  在C语言中,数组一般都是静态的。数组已经定义,所占用的内存空间就一直被占用,直到该函数退出时为<br>  <br>  止。但如果使用指针变量,就可以实现需要时给数组分配内存,不需要时释放内存,可节约大量的内存空间。下面的程序就是使用了指针变量,使用动态数组的一个例子。<br>  <br>  typedef struct<br>   {int a[MAXSIZE];<br>   } A;<br>   main()<br>  {int i;<br>   A *p;<br>   p=(A *)malloc(sizeof(A));/*动态分配内存*/<br>   …………<br>   free(p);/*释放内存*/<br>  }<br>  <br>  3函数参数中指针的应用<br>  <br>  在C语言中,函数的形参是局部变量。实参和形参变量间的传递是值传递,即将实参的值传递给形参变量。形参在函数中如何变化,并不改变实参的值,我们称之为单向传递。这种参数的单向传递减少了函数之间的耦合性,增加了其内聚性,有利于结构化编程。但是,如果调用函数想从被调函数中得到一个以上的返回值,就比较困难。当然,通过全局变量也能实现,但过多的使用全局变量又增加了函数之间的耦合性,不利于结构化编程。如果实参和形参都使用指针变量,就可达到此目的。下面的程序就是使用指针变量实现两个变量值交换的例子。<br>  <br>  int swap(int *p1,int *p2)<br>  {int temp;<br>   temp=*p1;<br>   *p1=*p2; <br>   *p2=temp;<br>  }<br>  main()<br>  { <br>  int a,b;<br>  int *pointer_1,*pointer_2;<br>  scanf("%d,%d",&a,&b);<br>  pointer_1=&a;pointer_2=&b;<br>  if(a<b) swap(pointer_1,pointer_2);<br>  printf("\n%d,%d\n",a,b);<br>  }<br>  <br>  需要说明的是:<br>  (1) 实参和形参之间传递的仍然是值,但该值不是变量的值,而是变量的地址,如图1所示。此时,实参和形参都指向了同一变量,对形参变量所指变量值的改变也必然改变实参变量的值,如图2所示。<br>  <br>  (2) 但在被调函数中不能改变形参指针变量的指向,否则实参变量和形参变量各指向不同的变量。如:p=p1;p1=p2;p2=p;仅交换了形参变量的指向,实参变量的指向并没有改变,也就是不能企图通过改变形参指针的值而使实参指针的值也发生改变,如图3所示。<br>  <br>  4指向指针的指针变量的应用<br>  <br>  如果说指针是C语言中比较难掌握的内容,而指针的指针则是更加难学难懂。学生往往不知道指针的指针到底应用在哪些方面,有什么特点和优点。<br>  如果一组变量只能通过指针(地址)来引用,一般来说就需要用指针的指针变量来实现。C语言中没有字符串变量,只能在字符数组中存储字符串。对二维字符串数组的引用大都要用到指向指针的指针变量,在各种教科书都举过这样的例子,也就不再赘述了。现在主要对指针的指针在函数参数中的应用进行探讨。<br>  如果主调函数要得到一个以上普通变量的返回值,函数的形参可以用指针变量来实现。同样,如果要返回一个改变了的指针变量的指向,形参就需要用指向指针的指针变量。比如,在对二叉排序树的操作中,每个结点是一个指针变量,当删除一个节点后,为了使其仍能保持二叉排序树原有的特性,必须对其余结点进行整理。如果删除的是根结点,删除后二叉排序树的根结点就发生了变化,如图4所示。应该将新的根结点(指针变量)返回,此时形参就应该用指向指针的指针变量。<br>  <br>  int DeleteNode(NodeType **t,KeyType kx)<br>  {NodeType *p=*t,*q,*s,**f;<br>  int flag=0;<br>  if(SearchElem(*t,&p,&q,kx)); /*查找值为kx的结点,p指向该结点,q指向其父结点*/<br>  {flag=1; /*查找成功,置删除成功标志*/<br>   …… /*确定删除结点为根结点p,调整二叉排序树*/<br>  t= p->lc ; /*p左孩子为新根结点*/<br>  ree(p);<br>   }<br>  return flag;<br>  }<br>  <br>  这样,主调函数的实参变量就指向了二叉排序树新的根结点。<br>  <br>  5注意两个区别<br>  <br>  5.1数组指针变量和指针数组变量<br>  (1) 数组指针变量<br>  <br>  int (*p)[4];<br>  <br>  方括号“[4]”前面(*p)不是合法的标识符,因此(*p)[4]不是数组。定义中有*p,则p一定是指针变量,后面又有方括号“[4]”,肯定是和数组有关的指针变量。它表示p是一个指针变量,指向包含4个元素的一维数组。<br> </p> <p> <p>(2) 指针数组变量<br>  <br>  int *p[4];<br>  <br>  方括号“[4]”前面p是合法的标识符,因此p[4]是数组。前面又有“*”,肯定和指针有关。表示pa是一个指针数组,它有四个数组元素,每个元素值都是一个指针,指向整型变量。<br>  总是,定义中有“*”一定和指针变量有关,有方括号一定和数组有关,是否是数组看其前面是否是合法的标识符。是为数组,数组元素是指针变量;否则不是数组,是指向数组的单个变量。<br>  5.2函数指针变量和指针函数<br>  (1) 函数指针变量<br>  <br>  int (*pf)(int,int);<br>  <br>  由于圆括号“(int,int)”前面的“(*pf)”不是合法的标识符,则(*pf)( int,int)不是函数。表示pf是一个指向函数入口的指针变量,通过该指针变量可以调用所指向的函数。<br>  (2) 指针函数<br>  <br>  int *ap(int x,int y);<br>  <br>  由于圆括号“()”前面的“ap”是合法的标识符,说明ap(int x,int y)是一个函数,而标识符前有“*”,说明该函数的返回值是指针。表示ap函数的返回值是指针,此定义中返回的指针指向一个整型变量。<br>  同样,定义中有“*”一定和指针变量有关,有圆括号一定和函数有关,是否是函数看其前面是否是合法的标识符。是函数,其返回值是指针变量;否则不是函数,是指向函数的指针变量。<br>  以上是笔者对C语言指针教学的一些经验和体会,写出来和同行交流,以期促进C语言的教学。 <br>   <br>  参考文献:<br>  [1] 谭浩强. C程序设计[M]. 3版. 北京:清华大学出版社,2002.<br>  [2] 谭浩强. C程序设计题解与上机指导[M]. 2版. 北京:清华大学出版社,2000.<br>  [3] 严蔚敏. 数据结构及应用算法教程[M]. 北京:清华大学出版社,2001.<br>  [4] 张乃孝. 算法与数据结构[M]. 北京:高等教育出版社,2002. <br>  [5] 张晓莉. 数据结构与算法[M]. 2版. 北京:机械工业出版社,2008. <br>  <br>  The Exploration of the Pointer in C Language Teaching<br>  ZHAO Zhong-xiao, YANG Ya-lei<br>  (Department of Computer and Information Science, Fujian University of Technology, Fuzhou 350014, China)<br>  Abstract: This paper discussed the C language pointer in the forms of a wide range of application, a careful analysis on the indicators in the array, function and dynamic memory allocation, such as the use of the features and advantages of how C language and learn to master an important indicator of the guide in the paper.<br>  Key words: pointer; pointer variable; array; function; dynamic memory allocation<br> </p> <p> [1] <p> </p> <P>基于Flex与PHP的MVC框架整合应用研究</P> <P>  关键词:MVC;PHP;FLEX;框架 <BR>摘要:MVC(模型-视图-控制器)是一种得到了广泛应用的经典复合程序设计模式,使用MVC设计模式能够为软件开发带来</P> <P>低耦合性、高重用性和可适用性、良好的维护性、有利于软件工程化管理等诸多好处,本文探讨了基于PHP的Thinkphp</P> <P>框架和基于Flex的PureMVC框架及其整合应用,对Amfphp和HttpService方式下客户端与服务端的通信效率进行了实验和</P> <P>测试,当通信量较大或者是网络通信环境比较差的时候AMF对通信质量的改善是很有帮助的。 </P> <P><BR>  MVC Framework Application&amp;Study Based on Flex&amp;PHP <BR>  Xu Yingzhong,Chen Wenzhu,Zhang Lingxiao <BR>  (Central China Normal University,Wuhan430079,China) <BR>  Abstract:MVC(Model-View-Controller) is a classic,sophisticated and widely used programming design </P> <P>pattern.Compared with traditional software development model,it has a better performance of decoupling, </P> <P>reusablitiy,maintainability,extendibility and so on.This paper proposes a hybrid MVC framework which </P> <P>combines two MVC frameworks - Thinkphp based on PHP and PureMVC based on Flex,and discusses the </P> <P>efficiency of communication between server and client implemented by Amfphp and HttpService </P> <P>respectively.The empirical analysis and experimental results show that Amfphp outperforms the </P> <P>latter.The conclusion is helpful especially under the relatively poor network environment. <BR>  Keywords:MVC;PHP;Flex;Framework <BR>  MVC框架是在开发分工越来越明确的情况下产生的,MVC结构提供了一种按功能对各种对象进行层次分割的方法(这</P> <P>些对象是用来维护和表现数据的),其目的是为了将各对象间的耦合程度减至最小,MVC是程序设计发展的一种趋势。 <BR>  一、 MVC设计模式 <BR>  MVC模式是1970年由Trygve Reenskaug在施乐公司的研究中心提出的。最早的参考例程代码是用smalltalk80编写</P> <P>的。它最初是用来解决应用软件中的用户图形界面的交互问题的。MVC设计模式的基本原理是把应用程序的数据和业务</P> <P>逻辑、数据的外观呈现以及对数据的 操作划分到不同的实体中去,这些实体称为模型、视图和控制器。 <BR>  MVC模式的核心思想是分离责任,使得数据、视图和逻辑部分分开,模型层关心的只是应用的状态以及业务逻辑而不</P> <P>用考虑数据如何展现给用户;视图层关心的是的只是如何根据模型的变化为用户提供用户界面;控制层则负责接收用户</P> <P>的输入然后将其交给对应的模型,它并不关心用户如何输入以及这些输入数据是如何作用于模型的。 <BR>  模型(Model):业务逻辑和数据。 <BR>  视图(View):用户界面。 <BR>  控制器(Controller):接收、识别请求并在模型和视图间建立映射关系。 <BR>  图1.MVC模型原理 <BR>  如图展示的是MVC模型的基本流程,首先,用户通过视图输入发送请求,控制器接收到请求之后会调用对应的模型来</P> <P>执行一定的业务逻辑,执行完后模型返回数据,此时控制器再调用对应的视图,视图会负责对模型数据进行格式化最终展</P> <P>现给用户。MVC是程序设计的一种思想或模式,对于各种不同编程语言的不同的MVC框架,由于这些平台自身具有的一 些</P> <P>特性,它们在实现方式上可能会有一些不同,比如在Flex中,更推荐直接使用数据绑定的方式来对视图进行更新。 <BR>  二、基于MVC设计模式的ThinkPHP框架 <BR>  (一)Thinkphp简介 <BR>  目前主流的基于PHP的MVC框架有Zend Framework、CakePHP、QeePHP等等,ThinkPHP也是其中之一,它借鉴了许多国</P> <P>外的优秀框架和模式,融合了Structs的Action思想、JSP的TagLib、RoR的ORM映射与ActiveRecord模式,封装了CURD和</P> <P>一些常用数据库操作,在项目配置、类库导入、模版引擎、查询语言、数据验证、视图模型、项目编译、缓存机制、</P> <P>SEO支持、分布式数据库、多数据库连接和切换、认证机制和扩展性方面均有不错的表现。 <BR>  (二)Thinkphp工作流程 <BR>  图3.Thinkphp工作流程 <BR>  如图,当用户向服务器发出了一个HTTP请求之后,前端控制器会对URL进行分析,调用Dispatcher将任务派发给对应</P> <P>的模块(动作控制器,Controller),接着该模块会根据业务流程的需要选择性地调用业务模型(Model),并将用户提交的</P> <P>数据传递给它,接着调用视图(View)对业务模型中返回的数据进行格式化输出,最终把输出结果返回至客户端。 <BR>  三、PureMVC框架 <BR>  (一)Flex技术 <BR>  Flex是一种基于标准编程模型的高效RIA开发产品集,最初由Macromedia公司在2004年发布。一个完整的Flex程序</P> <P>由MXML代码和ActionScript代码组成。MXML与HTML类似,是基于XML的标记语言,MXML用来在FLEX中设计用户界面,Flex </P> <P>Framework中提供了非常丰富的UI组件。和Flash一样,Flex项目最终会被编译成*.swf文件,由Flash Player解释运行。 <BR>  (二)PureMVC简介 <BR>  PureMVC是一款通用型MVC框架,最初基于ActionScript,现在已经移植到几乎所有的主流平台。在PureMVC中,同样</P> <P>是通过MVC三层设计来降低模块间的耦合性,Model、View和Controller分别对应3个类,即Proxy、Mediator、Command,</P> <P>另外,Fa&ccedil;ade层将这三者统一起来,使用过程中只需要通过一个Fa&ccedil;ade类来对它们进行操作,这样能够简化应用程序的开</P> <P>发。 <BR>  (三)pureMVC工作流程 <BR>  图4.PureMVC工作流程 <BR>  如图4,程序初始化时,ApplicationFacade会负责初始化整个MVC,包括生成Proxy、注册各个Command和Mediator。</P> <P>当UI Component与用户交互时,UI组件会将Event派发出去,对应的Mediator接收到Event后,可以生成Notification并通</P> <P>过该Notification的Body携带参数,然后通过PureMVC的Notification系统广播该消息,注册了这个Notification(或称</P> <P>对该Notification感兴趣)的Command或者Mediator将会作出响应,Mediator可以更新UI,Command可以操作Proxy去更新</P> <P>数据,与服务端的交互是在Proxy内部完成的,当数据更新后,Proxy可以再发出一个Notification,对其感兴趣的Command</P> <P>或者Mediator会作出响应,如此,PureMVC不断运行下去。 <BR>四、整合应用 <BR>  (一)Flex与PHP的通信方式 <BR>  Flex使用RPC(Remote Procedure Call)方式与外部程序交互数据,RPC通信是一个异步过程,客户端把数据请求发送给服务端然后等待返回结果。Flex与服务端的通信方式有三种: <BR>  WebService是网络应用程序的标准,它向外部暴露能够通过Web进行调用的API集合,我们可以通过调用其API来获取需要的数据。HttpService是最常用的一种方式,通过向服务端提交POST或GET形式的请求来获取数据。Remote Object是Flex中一种特殊的通信方式,使用Adobe自定义的二进制数据通信协议AMF(Action Message Format)与服务端交互,可以交换任意类型的数据,包括对象、图片等等。 <BR>  (二)框架整合 <BR>  图5.PureMVC与Thinkphp整合框架 <BR>  如图5,整合后的PureMVC与Thinkphp,使用PureMVC来替代Thinkphp的视图(View)部分,在工作时两个框架各司其职,pureMVC负责前端的用户交互,Thinkphp负责服务端的业务逻辑和数据,gateway.php相当于服务端的入口,客户端的proxy负责与其通信,通信方式可以是HttpService、WebService以及Remote Object。 <BR>  五、结束语 <BR>  随着富互联网技术的迅速发展,出现了客户端MVC框架,本文分别探讨了基于PHP的Thinkphp框架和基于Flex的PureMVC框架,提出了整合应用服务端与客户端MVC框架的方案,并对AMFPHP和HttpService方式下客户端与服务端的通信效率进行了实验和测试,当通信量较大或者是网络通信环境比较差的时候AMF对通信质量的改善是很有帮助的。 <BR>  参考文献: <BR>  [1]叶建芳.应用FLEX技术构建RIA系统[D].浙江大学,2006 <BR>  [2]JasonE.Sweat.php|architect’s Guide to PHP Design Patterns[M].Toronto:Macro Tabini &amp; Associates,2005 <BR>  [3]袁梅冷,黄烟波,黄家林.J2EE 应用模型中MVC软件体系结构的研究与应用[J].计算机应用研究,2003,20,3:147-149 </P> <P>&nbsp;</P> <P>&nbsp;</P> </p> <P>浅谈网络信息安全的保障</P> <P>  关键词:网络安全;安全漏洞;防火墙 <BR>摘要:随着信息化时代的到来,网络与信息的安全问题也已赫然摆在世人面前。本文分析了网络信息安全面临的问题,根据实际需要提出了一些具体的防范措施,用以提高计算机网络信息的安全性。 </P> <P><BR>  一、概述 <BR>  随着信息化时代的到来,“腾讯QQ”、“淘宝”已走进千家万户,带来了经济的繁荣和发展,丰富和活跃了人们的精神文化生活,大大推进了社会文明建设的进程,但同时随着人们信息化期望程度的加深,网络与信息安全问题也已赫然摆在世人面前,网络信息的安全问题,不论社会还是网络技术方面,已是当务之急。 <BR>  二、讨论:网络信息方面存在的安全问题 <BR>  (一)病毒、木马威胁加剧 <BR>  据国内信息安全厂商瑞星公司2008年11月份报告统计显示,2008年的前10个月,互联网上共出现新病毒9306985个,是2007年同期的12.16倍,木马病毒和后门程序之和超过776万,占总体病毒的83.4%,病毒数量呈现出了井喷式爆发。病毒木马的机械化生产加速了新变种的产生,大量出现的系统及第三方应用程序漏洞为病毒木马传播提供了更广泛的途径。 <BR>  (二)安全漏洞 <BR>  2008年安全漏洞被曝光的频率及数量比以往都要多。存在的主要十大安全漏洞分别是:浏览器漏洞、Adobe Flash漏洞、ActiveX漏洞、SQL注入式攻击、Adobe Acrobat阅读器漏洞、CMS漏洞、Apple QuickTime漏洞、Web2.0元素(如Facebook应用、网络广告等)、Realplayer漏洞和DNS缓存漏洞等。 <BR>  (三)黑客行为,数据泄露 <BR>  根据国家计算机病毒应急处理中心的分析报告,2007年全国计算机病毒感染率已经高达91.5%,其中相当部分已经被黑客控制。黑客行为其核心特点是利用网络用户的失误或系统的脆弱性因素,针对特定目标进行拒绝服务攻击或侵占。 <BR>  (四)垃圾邮件的泛滥 <BR>  其核心特点是以广播的方式鲸吞网络资源,影响网络用户的正常活动。附带调查性垃圾邮件,以获取终端用户的个人信息为目的。一旦用户链接到目的网址,会被要求填写一张个人信息表。这些信息可能被出售给营销公司,也可能用于将来发送垃圾邮件。 <BR>  (五)有害信息的恶意传播 <BR>  其核心特点是以广泛传播有害言论的方式,来控制、影响社会的舆论。 <BR>  三、结论:网络信息安全的防护措施 <BR>  (一)以人为本,确保安全制度的建立和落实 <BR>  根据实际情况和所采用的技术条件,制定出切实可行又比较全面的各类安全管理制度。 <BR>  要强化工作人员的安全教育和法制教育,真正认识到计算机网络系统安全的重要性和解决这一问题的长期性、艰巨性及复杂性。 <BR>  (二)利用访问与控制策略,确保网络信息安全 <BR>  访问控制策略是网络安全防范和保护的主要策略,其任务是保证网络资源不被非法使用和非法访问。各种网络安全策略必须相互配合才能真正起到保护用,而访问控制是保证网络安全最重要的核心策略之一。访问控制策略包括入网访问控制策略、操作权限控制策略、目录安全控制策略、属性安全控制策略、网络服务器安全控制策略、网络监测、锁定控制策略和防火墙控制策略等7个方面的内容。 <BR>  (三)利用防火墙控制网络信息安全 <BR>  防火墙(作为阻塞点、控制点)能极大地提高一个内部网络的安全性,并通过过滤不安全的服务而降低风险。由于只有经过精心选择的应用协议才能通过防火墙,所以网络环境变得更安全。防火墙总体上分为包过滤、应用级网关和代理服务器等几大类型。 <BR>  数据包过滤和应用网关防火墙仅仅依靠特定的逻辑判定是否允许数据包通过。一旦满足逻辑,则防火墙内外的计算机系统建立直接联系, 防火墙外部的用户便有可能直接了解防火墙内部的网络结构和运行状态,这有利于实施非法访问和攻击。 <BR>  代理服务(Proxy Service)也称链路级网关或TCP通道(Circuit Level Gateways or TCP Tunnels),也有人将它归于应用级网关一类。它是针对数据包过滤和应用网关技术存在的缺点而引入的防火墙技术, 其特点是将所有跨越防火墙的网络通信链路分为两段。代理服务也对过往的数据包进行分析、注册登记, 形成报告,同时当发现被攻击迹象时会向网络管理员发出警报,并保留攻击痕迹。 <BR>  (四)利用数据加密技术控制网络信息安全 <BR>  数据传输加密技术目的是对传输中的数据流加密,常用的方针有线路加密和端到端加密两种。前者侧重在线路上而不考虑信源与信宿,是对保密信息通过各线路采用不同的加密密钥提供安全保护的。后者则指信息由发送者端自动加密,并进入TCP/IP数据包回封,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息一旦到达目的地,将被自动重组、解密,成为可读数据。数据存储加密技术目的是防止在存储环节的数据失密。 <BR>  数据传输加密技术是为增强普通关系数据库管理系统的安全性,提供一个安全适用的数据库加密平台,对数据库存储的内容实施有效保护。它通过数据库存储加密等安全方法实现了数据库数据存储保密和完整性要求,使得数据库以密文方式存储并在密态方式下工作,确保了数据安全。 <BR>  随着计算机技术和通信技术的发展,计算机网络将日益成为重要信息交换手段,渗透到社会生活的各个领域,只有采取强有力的安全策略,才能保障网络信息的安全性 <BR>  参考文献: <BR>  [1]汪海慧.浅议网络安全问题及防范对策[J].信息技术,2007 <BR>  [2]赵丹丽,管建和.网络通信与安全探讨[J].软件导刊,2008 <BR>  [3]黄鹤,浅析计算机网络安全策略[J].科技信息(学术研究),2007 <BR></P> </p> 摘要:软件项目管理是软件工程教学中的一个重要组成部分。本文在项目管理理论的基础上,结合软件工程教学的实际,以电子商务网站工程建设为实践项目,提出了项目驱动的软件项目管理教学思想。软件工程项目实践与理论教学相结合,培养了学生团队合作精神和解决实际问题的能力,提高了教学的质量和水平。<BR>  关键词:实践教学;项目驱动;软件项目管理:软件工程<BR>  随着信息技术的飞速发展,软件产品的规模也越来越大,复杂程度越来越高,项目失败的概率也随之增长。研究表明,软件项目失败的原因主要有两个:一是错误的软件项目管理;二是应用项目的复杂性。实践证明错误的软件项目管理是导致软件项目失控的直接原因。各软件企业为了能高效高质地开发软件产品,都在积极将软件项目管理引入开发活动中。然而在“软件工程”的教学中,软件项目管理的教学效果却不尽人意。一方面,教材中的案例缺乏完整性、系统性和实用性;另一方面,软件项目管理的讲授方式不是十分合理,学生重视力度不够。作者将结合多年的软件工程教学经验,对软件项目管理的教学方法进行分析和探讨。<BR>  1软件项目管理的教学内容及特点分析<BR>  软件项目管理[1]是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员、产品、过程和项目等进行分析和管理的活动。软件项目管理是软件工程教学中的重要内容,它涉及了软件项目管理的五个标准化过程组和范围管理、时间管理、成本管理、质量管理、人力资源管理、沟通管理、风险管理、采购管理、项目综合管理九大知识领域,几乎覆盖了软件产品从立项到结束的整个过程。图1形象地展示了软件项目管理与软件开发过程在时间上的先后顺序。<BR>  大多企业的优秀管理者都是具有丰富经验的人员,同样,软件项目管理水平的高低偏重于软件项目管理经验的积累。软件项目管理的学习不仅仅是要掌<BR>  图1软件项目管理与软件开发过程的时序图<BR>  握基本的原理、方法和完成相关的设计文档,更重要的是将理论应用于实践,让学生真正理解理论的作用,体验在实际项目实施中理论知识的具体应用场景,培养学生的软件项目管理思想。立足于软件项目管理的教学目标和要求,结合软件项目管理自身的特点,分析研究认为,项目驱动的软件项目管理教学<BR>  方法能够充分调动学生学习的积极性,培养学生动手实践和主动探索的精神,提高教学的质量和水平。<BR>  2项目驱动的实践教学法<BR>  项目驱动教学法[2]是一种以建构主义为理论基础的教学方法,它以项目开发为主线展开教学,整个教学过程是一种在教师的指导下,以学生为主体的协作过程。这种教学法的主要特点是始终以项目中的任务展开教学,既注重最终的实践结果,又注重完成项目的过程。其中教师的职责在于使学习者置身于探索知识之中,通过具体项目的开发提供真实的“情境”,即实际项目中需要解决的问题。然后,通过教师的指导,学生之间的讨论来解决问题。这种模式旨在把学生融入任务完成的过程中,让学生积极地学习,自主进行知识的建构,以培养学生综合能力为最终目标。<BR>  2.1项目驱动教学对学生能力的培养<BR>  (1) 培养学生自主学习的能力。项目驱动教学法中任务的设定真正实现了以学生为主体的教学方针,学生为了完成任务就会主动去图书馆或相关的网站查阅信息,从而可以丰富知识,提高自学能力。<BR>  (2) 培养学生团队合作的能力。把全班学生分成几个小组,每组项目的完成情况,影响小组每个成员的评价,因此为了团队的整体利益,小组成员之间就会不可避免地展开讨论和争辩,最终达成共识,相互协作完成任务。<BR>  (3) 培养学生分析问题、解决问题的能力。任务设计后,让学生自己讨论,分析任务,提出问题,充分发挥了学生在学习过程中的主动性、积极性和创造性。这种分析问题和解决问题的能力同样可以应用到其它的领域。<BR>  (4) 培养学生实践创新能力。实践是创新的源泉。对于同一个任务,每个小组采用的解决方案不尽相同。他们可以根据自己的知识背景和对任务的认识,对任务的实现方法进行大胆的设计,从而培养学生的创新思维,提高学生的创新能力。<BR>  总之,项目驱动的任务式教学方法能够充分发挥学生的主观能动性,全面提高他们的综合素质。<BR>  2.2项目驱动教学法的操作过程<BR>  “项目驱动”教学模式是教学过程中诸要素相互作用而形成相对稳定的组织结构和操作程序。 采用“项目驱动”教学法,在软件工程项目实施的每个阶段,我们均采用“项目任务——分析任务——理论学习——完成任务——评价总结任务”的教学模式。学生在完成“项目任务”的操作过程中,发现问题、解决问题,通过对任务的剖析,丰富了学习的经验、提高了学生完成任务的能力。<BR>  3教学实施<BR>  从软件工程的角度讲,软件项目管理过程主要分为七个阶段[3]:可行性研究阶段、需求分析阶段、设计阶段、编码阶段、测试阶段、验收阶段和维护阶段。我们在“软件工程”的教学过程中,打破以往按教材编排顺序讲授知识的方式,以软件项目的管理过程为讲授顺序,并以一个完整的具体项目实施为依托进行“软件工程”教学。其中软件项目管理的教学内容将穿插到软件生存周期各个阶段进行讲授,各阶段将会不可避免地包含相同的管理内容,通过学生重复学习与实践,可以使其深刻体会软件项目管理的思想。本校计算机专业大三学生的“软件工程”课程共54课时,我们按照理论教学与实践教学1:1的比例,先进行相关理论知识的讲解,然后进行课程实验的具体实践,结合“PetStore电子商务网站”的建设,让学生及时运用所学内容来完成项目任务,通过将软件项目管理的教学内容贯穿到项目实施的整个过程来实施教学。<BR>  3.1教学准备<BR>  (1) 设置项目任务。在教学实施前,教师应根据教学进度、教学目标和要求制定教学计划,并将PetStore系统建设分成各个相对独立的子项目,将
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服