999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C++語言課教學中軟件工程思想的熏陶

2011-01-01 00:00:00宋振方,劉維群
電腦知識與技術 2011年4期

摘要:在計算機相關專業的C++語言課教學中滲透軟件工程的思想,不但有助于本門課程的教學而且為后期軟件工程課程的教學打下良好的基礎。該文結合精心設計的案例進行說明,探討提高學生編程能力的教學思路,在教學實踐中取得良好效果。

關鍵詞:C++;軟件工程;教學實踐

中圖分類號:G642文獻標識碼:A文章編號:1009-3044(2011)04-0949-03

The Edification of Software Engineering Idea in C++ Language Lesson Teaching

SONG Zhen-fang,LIU Wei-qun

(Academy of Information Technology, Luoyang Normal University, Luoyang 471022, China)

Abstract: The Software engineering idea permeates teaching of C++ language lesson in computer related specialty, which will not only help to the teaching of this course but also lay a good foundation for late software engineering courses. This paper combining case to show how to improve students' programming ability, giving teaching ideas, obtaining good results in the teaching practice.

Key words: C++; software engineering;teaching practice

《C++高級語言程序設計》是計算機類相關專業的一門重要且實踐性很強的專業基礎課程,學生對C++語言課的掌握程度對其后續課程的學習有深刻影響。《軟件工程》是另一門重要的課程,在文獻[1-2]中指出了在語言類課程教學中貫徹軟件工程思想,對后期《軟件工程》課程的教學效果有很大影響。本文結合特設的案例,將軟件工程中以需求為驅動力進行軟件開發的思想運用于該案例。在闡明了常規動態鏈表實現原理后提出特別的需求,進而設計了一個“另類”動態鏈表以鍛煉學生靈活應對需求變化的能力,并繼續以需求的變更為線索將動態鏈表變化為動態鏈式棧、動態鏈式隊列,讓學生感受到了軟件中的“變”與“不變”的辯證統一,在潛移默化中使其受到軟件工程思想的熏陶。

下面首先介紹常規動態鏈表及其實現,然后依次介紹“另類”動態鏈表、動態堆棧和動態隊列的實現,最后論述它們之間的辯證統一關系和分析了教學設計思路。

1 動態鏈表案例教學實踐

1.1 常規動態鏈表

為了突出討論的重點和敘述的方便性,教學案例選取動態單鏈表并只討論其最基本的功能和只涉及整型數據類型。

在教學時首先解釋客戶方和服務方的概念。main.cpp代表客戶方,動態鏈表代表服務方,從main.cpp中提取客戶需求。給出一個main.cpp的完整內容如下所示。

#include \"list.h\"http://list.h中有#include \"listnode.h\"語句

void main()

{List alist;

for (int i=0;i<10;i++)

alist.InsertTail(i+1);

alist.Print();}

初步分析需求發現:①鏈表需具備在鏈表末尾插入數據的能力和用于輸出鏈表數據的能力;進一步深入分析發現;②客戶方只與鏈表類打交道;③客戶方不考慮動態內存的釋放問題。

常規的動態鏈表是由兩個密切配合的類相互協調實現的。這兩個類是鏈表結點類和鏈表類,分別用ListNode和List表示。為了突出兩者角色的不同,稱ListNode為ListNode“員工類”、List為List“管理者類”。List“管理者類”和ListNode“員工類”進行協調共同為客戶方提供服務。ListNode“員工類”的兩個數據成員分別用int data和ListNode* link表示,List“管理者類”的數據成員用ListNode* head表示。

我們的討論將圍繞兩個重要的觀測點進行。由于設計動態鏈表時要考慮內存空間的釋放,而客戶方不同的需求會導致內存空間釋放的時機不同,所以把內存的釋放做為一個觀測點。另一個觀測點是鏈表的功能。

結合本案例中客戶端的需求,List“管理者類”和ListNode“員工類”做了不同的分工。內存空間的釋放由List“管理者類”的析構函數來完成,ListNode“員工類”的析構函數暫時什么也不做。鏈表數據的底層操作由ListNode“員工類”來完成,而List“管理者類”則負責管理ListNode“員工類”。

常規動態鏈表的設計層次分明、結構合理、設計完美,具有很好的現實應用價值,似乎沒有對其產生質疑的理由,但是我們雞蛋里面挑刺,從軟件工程的角度觀察List“管理者類”和ListNode“員工類”是一種強耦合的關系,試圖解耦的習慣性思維引發了設計一個”另類”動態鏈表以訓練學生編程能力的思考。

1.2 “另類”動態鏈表

main.cpp的內容修改如下:

#include \"list.h\"http://list.h中有#include \"listnode.h\"語句

void main()

{List alist;

ListNode* pListNode=NULL;

for (int i=0;i<10;i++)

{pListNode=new ListNode(i+1);

alist.InsertTail(pListNode);

}pListNode=NULL;

alist.Print();

}

觀察客戶方的需求,發現有以下變化:①客戶方直接操控ListNode“員工類”,負責其構造但不負責其析構;②對鏈表類的使用方式發生改變,List“管理者類”的InsertTail方法的參數由整型類型變為ListNode*;③客戶方負責將pListNode指針置空值,防止“野指針”的出現。另外,為了增加“另類”鏈表設計的趣味性,特增加一個新的需求;④要求List“管理者類”的析構函數如下所示。

List::~List()

{if (this->head)

delete this->head;

}

深入分析需求的變化,由于客戶方申請內存空間但卻不負責釋放,那么職責交給了鏈表,對List“管理者類”析構函數的特殊需求又導致了ListNode“員工類”也需要負責內存空間的釋放。客戶方需求改變前ListNode“員工類”的析構函數內容為:ListNode::~ListNode(){},客戶方需求改變后ListNode“員工類”的析構函數內容如下所示。

ListNode::~ListNode()

{if (this->pNextListNode)

delete pNextListNode;

}

List“管理者類”和ListNode“員工類”的析構函數相互配合,非常優雅地完成了內存空間的釋放任務。對于List“管理者類”的InsertTail方法參數的改變導致的代碼修改比較自然,由于篇幅原因在此不做對比了。

通過此例使學生真切感受到需求變化所導致的代碼修改。接下來再給學生布置自學任務,要求其上網查資料或者翻閱數據結構的書籍,重點弄清鏈表、堆棧、隊列的數據結構特征,然后進一步提出將已有的“另類”動態鏈表分別改造為“另類”動態鏈式棧、“另類”動態鏈式隊列的問題。在教學實施中,遵從學習循序漸進的規律,先以“另類”動態鏈式棧的改造為例,然后再放手讓學生動手實踐“另類”動態鏈式隊列的改造。

1.3 動態鏈式棧

main.cpp的內容修改如下。

#include \"stack.h\" //stack.h中有#include \"stacknode.h\"語句

void main()

{Stack aStack;

StackNode* pStackNode=NULL;

for (int i=0;i<10;i++){

pStackNode=new StackNode(i+1);

aStack.Push(pStackNode);

}for (int j=0;j<10;j++){

pStackNode=aStack.Pop();

if (pStackNode){

cout << pStackNode->GetData() << \",\";

delete pStackNode;

}}

pStackNode=NULL; }

由“另類”動態鏈表變為“另類”動態鏈式棧,需求發生了重大變化,客戶方在使用“另類”動態鏈式棧時,也要額外考慮一些新問題的產生。比如,客戶方負責釋放堆棧“吐出”的棧結點對象的內存空間。對于“另類”動態鏈式棧的代碼修改涉及到的部分較多,在此僅以Stack“管理類”的Pop()方法的代碼特點為例做說明,代碼內容如下所示。

StackNode* Stack::Pop()

{StackNode* pTop=NULL;

if (!(this->IsEmpty())){

pTop=this->top;

this->top=this->top->pNextStackNode;

pTop->pNextStackNode=NULL;

}return pTop;

}

代碼中pTop->pNextStackNode=NULL;語句非常重要,因為根據客戶方需求,Stack“管理類”的Pop()方法要把棧頂的Stack“成員類”對方的控制權完全交出還給客戶方,所以必須做到“藕斷絲也斷”,否則,客戶方在釋放 Stack“成員類”對象的內存空間時,會因為Stack“成員類”對象的析構函數而將與其“藕斷絲連”的后續Stack“成員類”對象一起析構,造成重大損失。

2 動態鏈表案例教學思考

常規動態鏈表到“另類”動態鏈表的變化,破壞了鏈表管理者類和鏈表成員類之間密切的耦合關系,側重于內存空間回收的變化觀測點。后續“另類”動態鏈式堆棧和“另類”動態鏈式隊列則側重于功能變化觀測點。需求的變化引起了代碼在很多地方的修改,但他們又存在著本質上的“同構”關系。比如,兩個類的結構及其相似,學生可以感受到代碼級的復用。

在教學的設計中緊緊圍繞先提出需求,然后分析需求發現新特點,在問題求解過程中盡可能復用已有的解決方案,既讓學生感受到變化也要讓他們感受到不變,在教師的主導下步步啟發學生思考,展示了由常規動態鏈表到“另類”動態鏈表和“另類”動態鏈式棧的實現過程,達到了示范的目的,最后只需給出一個如下所示的main.cpp,放手讓學生自己去實現“另類”動態鏈式隊列。

#include \"queue.h\" //queue.h中有#include \"queuenode.h\"語句

void main()

{Queue aQueue;

QueueNode* pQueueNode=NULL;

for (int i=0;i<10;i++){

pQueueNode=new QueueNode(i+1);

aQueue.EnQueue(pQueueNode);

}for (int j=0;j<10;j++){

pQueueNode=aQueue.OutQueue();

if (pQueueNode){

cout << pQueueNode->GetData() << \",\";

delete pQueueNode;

} }

pQueueNode=NULL;

}

學生們也在觀察、思考并通過動手實踐實現“另類”動態鏈式隊列的過程中得到了訓練,他們們不僅提前學習到了數據結構的知識而且開闊了其觀察問題的視野,培養了其透過現象看本質的能力。教師教學時在汲取常規教學方法優點的同時,依據教學內容的特點適當做一些創新,不僅能提高教師的教學積極性,學生也會從教師的創新思考中受到熏陶,培養良好的思維習慣。本文案例教學的過程中,重視培養學生主動查資料獨立解決問題,這種能力的培養對于計算機專業學生應對未來專業知識的不斷更新變化非常必要。本文教學案例的設計思想和教學思路受益于文獻[3-6]的啟發。

3 結束語

計算機相關專業一年級開設高級語言程序設計課程是普遍現象。在常規教學中,學生主要學到了語法知識和使用它們描述典型問題的算法及應用知識,關注的重點是求解問題的細節而失去了對原始問題求解的高層思考。本文特設的案例制造了許多需求的變化,使得學生在應對需求變化的過程中不僅受到了軟件工程思想的熏陶,也通過解決C++指針方面的難題提高了其編程能力,在教學實踐中取得理想的教學效果。

參考文獻:

[1] 王燦輝,林郎碟.軟件工程思想在計算機語言類課程教學中的貫徹實施[J].高教論壇,2010(1).

[2] 龔建華,劉惠安.在高級語言程序設計課程中融入軟件工程思想的教學改革思路[J].貴州教育學院學報,2009(3).

[3] 小議《C語言程序設計》的教學方法——由一個編程實例展開[J].時代教育:教育教學版,2008(Z1).

[4] 楊立勤.《高級語言程序設計》教學中能力培養的探索與實踐[J].電腦知識與技術,2009(30).

[5] 《C語言》教學中學生學習興趣的培養[J].電腦知識與技術,2010(21).

[6] 王秀芳,魯法明.C語言中指針的教、學與高效編程[J].電腦知識與技術,2010(28).

主站蜘蛛池模板: 亚洲成人精品| 青青青伊人色综合久久| 激情六月丁香婷婷| 久久国产精品国产自线拍| 99re精彩视频| 欧美日韩国产系列在线观看| 中文无码日韩精品| 午夜免费视频网站| 最新亚洲av女人的天堂| 亚洲人成网线在线播放va| 日韩无码真实干出血视频| 亚洲欧美成人网| 欧美一区二区福利视频| 精品国产香蕉伊思人在线| 国产成人乱无码视频| 久久久久亚洲AV成人网站软件| 精品一区二区三区中文字幕| 99热国产这里只有精品无卡顿"| 欧美啪啪网| 极品私人尤物在线精品首页 | 五月天久久综合国产一区二区| 中文字幕免费播放| 国产精品欧美激情| 午夜爽爽视频| 一区二区自拍| 国产精品久久自在自2021| 亚洲人成影视在线观看| 亚洲一区国色天香| 国产成人精品一区二区三区| 欧美国产在线一区| 99久久精品无码专区免费| 欧美成人a∨视频免费观看| 久久亚洲黄色视频| 亚洲精品日产精品乱码不卡| 久久99热这里只有精品免费看| 欧美成人手机在线视频| 成年人视频一区二区| 国产成人精品男人的天堂下载 | 久久久亚洲国产美女国产盗摄| 2048国产精品原创综合在线| 亚洲成人精品在线| 欧美五月婷婷| 一级毛片a女人刺激视频免费| 激情六月丁香婷婷| 国产午夜无码专区喷水| 97久久人人超碰国产精品| 99视频精品全国免费品| 91免费观看视频| 88国产经典欧美一区二区三区| 中文字幕佐山爱一区二区免费| 91在线丝袜| 99re视频在线| 欧美性天天| 欧美一级特黄aaaaaa在线看片| 99伊人精品| 99久久人妻精品免费二区| 尤物国产在线| 蜜芽国产尤物av尤物在线看| 国产免费网址| 伊人天堂网| 国产一区二区三区视频| 国产亚洲精品91| 少妇人妻无码首页| 99尹人香蕉国产免费天天拍| 91亚洲免费视频| 亚洲成在人线av品善网好看| 91亚瑟视频| 少妇精品网站| 国产欧美精品午夜在线播放| 熟妇无码人妻| 国产凹凸一区在线观看视频| 成人亚洲视频| 亚洲天堂精品在线观看| 欧美亚洲综合免费精品高清在线观看| 久996视频精品免费观看| 亚洲欧美日韩成人在线| 日本人真淫视频一区二区三区 | 青青草原偷拍视频| 国产亚洲视频中文字幕视频| 亚洲国产成人久久精品软件| 69国产精品视频免费| 久久国语对白|