前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的結(jié)構(gòu)化程序設(shè)計(jì)主題范文,僅供參考,歡迎閱讀并收藏。
結(jié)構(gòu)程序化設(shè)計(jì)方法如下:
結(jié)構(gòu)化程序設(shè)計(jì)方法是按照模塊劃分原則以提高程序可讀性和易維護(hù)性、可調(diào)性和可擴(kuò)充性為目標(biāo)的一種程序設(shè)計(jì)方法。在結(jié)構(gòu)化的程序設(shè)計(jì)中,只允許三種基本的程序結(jié)構(gòu)形式,它們是順序結(jié)構(gòu)、分支結(jié)構(gòu)、(包括多分支結(jié)構(gòu))和循環(huán)結(jié)構(gòu),這三種基本結(jié)構(gòu)的共同特點(diǎn)是只允許有一個(gè)流動(dòng)入口和一個(gè)出口,僅有這三種基本結(jié)構(gòu)組成的程序稱為結(jié)構(gòu)化程序。結(jié)構(gòu)化程序設(shè)計(jì)適用于程序規(guī)模較大的情況,對于規(guī)模較小程序也可采用非結(jié)構(gòu)化程序設(shè)計(jì)方法。
(來源:文章屋網(wǎng) )
關(guān)鍵詞:研究;計(jì)算機(jī)編程思想;結(jié)構(gòu)化程序設(shè)計(jì)思想;面向?qū)ο蟮某绦蛟O(shè)計(jì)思想;AOP編程思想
中圖分類號:TP3文獻(xiàn)標(biāo)識碼:A文章編號:1007-9599 (2012) 05-0000-02
隨著經(jīng)濟(jì)社會的發(fā)展,信息技術(shù)也迎來了前所未有的快速發(fā)展,計(jì)算機(jī)編程的應(yīng)用范圍也愈加廣泛。而其中的編程思想,作為一個(gè)主要條件,可以使編程人員編出更好的程序,本文分析了目前編程界最為主流的兩種計(jì)算機(jī)編程思想,同時(shí)和將要興起的新技術(shù)AOP,與OOP相比,其影響力巨大。因此,本文分析了其編程思想以及優(yōu)越性,還闡述了開發(fā)步驟。
一、計(jì)算機(jī)編程思想研究
(一)結(jié)構(gòu)化程序設(shè)計(jì)
對于結(jié)構(gòu)化編程思想,其為面對繁雜任務(wù)的時(shí)候,防止混亂的一種編程思想,重視將程序結(jié)構(gòu)進(jìn)行規(guī)范化,要按照大腦極易理解的方式,合理組織繁雜問題的求解過程。針對此編程思想,編程者應(yīng)該遵循結(jié)構(gòu)形式,進(jìn)行程序的設(shè)計(jì)及編寫,保證程序的正確結(jié)構(gòu),方便地進(jìn)行程序正確性的證明,該思想重點(diǎn)有以下幾點(diǎn)內(nèi)容:
運(yùn)用由頂往下逐漸細(xì)化的方法。因?yàn)榻Y(jié)構(gòu)化編程運(yùn)用了功能抽象與模塊分解,其能合理地把繁雜程序任務(wù)分解為容易處理及控制的一些子任務(wù),隨后實(shí)施級別更細(xì)的任務(wù)分類,保證最終分出的子任務(wù)均是進(jìn)行獨(dú)立編程的子程序模塊。隨后根據(jù)某些調(diào)用以及結(jié)構(gòu)關(guān)系,將子程序模塊進(jìn)行合理組織,最終得出需要的程序。根據(jù)結(jié)構(gòu)化程序設(shè)計(jì)思想,得出的程序具有如下好處:很好的結(jié)構(gòu)、每個(gè)模塊之間有著簡單清楚的關(guān)系、在各個(gè)模塊內(nèi),均有基本單元構(gòu)成。因此,得出的程序清楚易讀,良好的可理解性,正確性還易驗(yàn)證,維護(hù)、調(diào)試以及修改容易進(jìn)行。出現(xiàn)了結(jié)構(gòu)化編程思想,使之前軟件開發(fā)存在的混亂狀況消除,編程人員編寫的程序存在優(yōu)越的結(jié)構(gòu)。還因?yàn)檫\(yùn)用“自頂向下以及逐步細(xì)化”的方法,使人們智力合理地組織起來,對軟件工程化研發(fā)是有益的。所以程序維護(hù)以及設(shè)計(jì)工作效率得以提升。
若干基本結(jié)構(gòu)構(gòu)成程序,對于任意的大型程序,均包括三種基本結(jié)構(gòu),這些基本結(jié)構(gòu)使某個(gè)結(jié)構(gòu)化的程序得以順序地組成。主要有順序、選擇以及循環(huán)結(jié)構(gòu)這三種基本結(jié)構(gòu)。軟件界的具體實(shí)踐以及結(jié)構(gòu)化定理已證明,對于任意繁雜問題的程序設(shè)計(jì),均可運(yùn)用順序結(jié)構(gòu)、選擇結(jié)構(gòu)以及循環(huán)結(jié)構(gòu)構(gòu)成,同時(shí)還具備下面一些特征:僅一個(gè)入口及出口;在結(jié)構(gòu)內(nèi),沒有死循環(huán),在程序內(nèi),以上三種基本結(jié)構(gòu)的順序執(zhí)行關(guān)系得以構(gòu)成。
根據(jù)功能,能把大型程序劃分為若干基本功能模塊。一些子模塊一起構(gòu)成各個(gè)模塊,每個(gè)模塊在功能方面互相獨(dú)立,各個(gè)功能模塊均有進(jìn)行計(jì)算機(jī)控制以及數(shù)據(jù)處理的功能。盡量使模塊間的聯(lián)系簡潔。最終將模塊根據(jù)某些層次關(guān)系,實(shí)施組織,繁雜程序的功能得以構(gòu)成。
(二)面向?qū)ο蟮某绦蛟O(shè)計(jì)
針對面向?qū)ο蟮某绦蛟O(shè)計(jì),其編程思想是運(yùn)用消息、對象、類、繼承以及封裝等這些基本概念,實(shí)施程序設(shè)計(jì)。為使結(jié)構(gòu)化程序設(shè)計(jì)方法處理不了的代碼重用這些問題得以解決,便給出了面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù),面向?qū)ο蟮某绦蛟O(shè)計(jì)編程思想包括如下特點(diǎn):面向?qū)ο蟮奶攸c(diǎn)之一就是封裝,其為類與對象概念的重要特征。封裝給模塊帶來了比較良好的獨(dú)立性,程序修改與維護(hù)起來較為簡單。抽象包括數(shù)據(jù)與過程抽象。繼承性使軟件的可重用性這個(gè)問題得到良好處理。多態(tài)性使應(yīng)用程序函數(shù)的同名這類問題得到良好解決。
面向?qū)ο蟮木幊趟枷氪嬖诤芏鄡?yōu)越性,其減少了程序開發(fā)時(shí)間,提升了可靠性,開發(fā)出來的程序更有強(qiáng)壯性,維護(hù)起來更容易。面向?qū)ο缶幊桃驗(yàn)榫哂休^高的可重用性,針對應(yīng)用程序,能積極運(yùn)用成熟的類庫,進(jìn)而使軟件開發(fā)效率得以極大提高,所以,軟件界對這種面向?qū)ο蟮木幊趟枷脒M(jìn)行提倡運(yùn)用。日益增多的編程人員認(rèn)可并運(yùn)用了面向?qū)ο蟮木幊趟枷耄瑫r(shí)結(jié)構(gòu)化編程思想在進(jìn)行具有比較強(qiáng)功能性的軟件設(shè)計(jì)里,其指導(dǎo)作用仍然得以發(fā)揮。實(shí)際上,以上兩種編程思想沒有互相隔離,卻是相互支持、聯(lián)系的。在如今的軟件界,進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)的時(shí)候,具有公認(rèn)的編程公式:其一為對象=算法十?dāng)?shù)據(jù)結(jié)構(gòu),其二為程序=對象+對象,通過公式,能觀察出以上兩種編程思想的關(guān)系及區(qū)別。進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì)時(shí)候,仍然不能脫離完成算法的結(jié)構(gòu)化程序設(shè)計(jì),其中的結(jié)構(gòu)化程序設(shè)計(jì)還是編寫對象進(jìn)行操作的重要所在。
二、AOP編程思想研究
(一)AOP將系統(tǒng)視為關(guān)注點(diǎn)
其實(shí)它為GOF(Observer Design Pattern)設(shè)計(jì)模式的一種持續(xù),進(jìn)行了被調(diào)用者與調(diào)用者間解耦的強(qiáng)調(diào),給開發(fā)人員帶來進(jìn)行橫切關(guān)注點(diǎn)-Crosscutting Concern描述的合理機(jī)制,還可以把橫切關(guān)注點(diǎn)主動(dòng)地織入-weaving于面向?qū)ο蟮能浖到y(tǒng)內(nèi),確保橫切關(guān)注點(diǎn)模塊化得以實(shí)現(xiàn),進(jìn)行方面-Aspect代碼的合理劃分,橫切關(guān)注點(diǎn)顯得極易進(jìn)行處理。開發(fā)人員進(jìn)行編譯的時(shí)候,插入、更改或者除去系統(tǒng)的方面,更可能重用系統(tǒng)的方面。由于開發(fā)環(huán)境各不相同,關(guān)于概念也會有所不同。
(二)針對的問題
AOP通?;谶M(jìn)行業(yè)務(wù)處理中的切面實(shí)施提取,進(jìn)行處理的時(shí)候,其面對著其中的一個(gè)步驟或者哪個(gè)環(huán)節(jié),以確保整個(gè)邏輯中每個(gè)部分間低耦合性產(chǎn)生的隔離作用。針對動(dòng)詞方面,其重視的為橫向的,即為整個(gè)邏輯中一個(gè)方面或者某個(gè)片段,例如:權(quán)限以及日志管理,一般情況下,其進(jìn)行某些軟件系統(tǒng)自身東西的關(guān)注。并非面向?qū)ο筮M(jìn)行業(yè)務(wù)邏輯的關(guān)注。運(yùn)用有效松散方式,使系統(tǒng)間的耦合度這些問題減少,方面即為它的模塊化單位。
(三)軟件性能
1.代碼擴(kuò)展性
對于AOP,因?yàn)榉矫婺K并不了解橫切關(guān)注點(diǎn),因此極易進(jìn)行新方面的增加,并投入新功能。同時(shí),把新的模塊加到系統(tǒng)中的時(shí)候,已經(jīng)存在的方面會自動(dòng)橫切進(jìn)入,確保系統(tǒng)容易擴(kuò)展。
2.代碼冗余度
運(yùn)用最小的耦合進(jìn)行各個(gè)關(guān)注點(diǎn)的有效處理,保證雖然為橫切關(guān)注點(diǎn),還是模塊化。如此實(shí)現(xiàn)的系統(tǒng),它的代碼冗余不大。進(jìn)行模塊化實(shí)現(xiàn),促使系統(tǒng)的維護(hù)與理解更為容易。
3.代碼重用性
AOP將各個(gè)方面變成為獨(dú)立模塊,在模塊間,其為松散耦合。能使用其它獨(dú)立的日志寫入器取代此時(shí)的,進(jìn)而將日志合理地寫入數(shù)據(jù)庫中,保證與各種日志寫入要求相符。正確實(shí)現(xiàn)松散耦合,經(jīng)常象征著代碼重用性更為良好。
(四)AOP的開發(fā)程序
基于面向?qū)ο缶幊?OOP這種方法,AOP才得以改進(jìn),其為具有創(chuàng)新性的一種軟件開發(fā)方法。一般具有如下的幾個(gè)開發(fā)程序:
1.方面分解
進(jìn)行分解,要得出橫切關(guān)注點(diǎn)。在這個(gè)步驟中,將系統(tǒng)級的橫切關(guān)注點(diǎn)與核心模塊級關(guān)注點(diǎn)進(jìn)行合理分離。
2.關(guān)注點(diǎn)實(shí)現(xiàn)
進(jìn)行關(guān)注點(diǎn)的獨(dú)立實(shí)現(xiàn),將各個(gè)需求映射成為代碼,編譯器隨后將其翻譯成為一些可執(zhí)行代碼。能依靠另外的編程范型,把其當(dāng)作前提,確?;A(chǔ)范型具有的優(yōu)勢還得以保留。比如:AOP能利用OOP當(dāng)作基礎(chǔ)范型,直接地將OOP擅長處理普通關(guān)注點(diǎn)的優(yōu)勢引用來。利用如此的實(shí)現(xiàn),一般的獨(dú)立關(guān)注點(diǎn)能利用OOP技術(shù),其和過程型語言為很多OOP語言的基礎(chǔ)相似。關(guān)注點(diǎn)實(shí)現(xiàn)因?yàn)榘凑罩付ㄟ^程這一形式產(chǎn)生,能運(yùn)用C、C++或者Java這些傳統(tǒng)語言。
3.方面的重新組合
在此步驟中,方面集成器進(jìn)行某個(gè)模塊單元的建立,也就是方面,進(jìn)行重組標(biāo)準(zhǔn)的指定,常把重組過程稱為結(jié)合或者織入,運(yùn)用合適的信息進(jìn)行最終系統(tǒng)的組建。
AOP實(shí)現(xiàn)能夠運(yùn)用許多方式進(jìn)行織入的實(shí)現(xiàn),進(jìn)行源碼至源碼的變換,進(jìn)行各方面源碼的預(yù)處理,織入過的源碼得以出現(xiàn),再將織入過的源碼傳到編譯器,最終可執(zhí)行代碼得以生成。運(yùn)用此方式,基于Java的一個(gè)AOP實(shí)現(xiàn),能將很多方面變換為Java源代碼,隨后通過Java編譯器,將其變換為字節(jié)碼,還能處于字節(jié)碼級別進(jìn)行織入的執(zhí)行,實(shí)際上,字節(jié)碼自身也為一種源碼。同時(shí),對于底層中的執(zhí)行系統(tǒng)Java虛擬機(jī),還能設(shè)計(jì)成為對AOP支持?;贘ava的AOP實(shí)現(xiàn)要是運(yùn)用此方式,能在虛擬機(jī)中,把織入規(guī)則載入,隨后就之后載入的類均利用此規(guī)則,實(shí)際上,其能進(jìn)行just-in-time方面織入的執(zhí)行。
三、總結(jié)
由于編程實(shí)踐的一直開展,編程思想就會產(chǎn)生,產(chǎn)生的各種新編程思想,均對編程實(shí)踐進(jìn)行合理指導(dǎo),且均使計(jì)算機(jī)軟件開發(fā)的質(zhì)量與速度得以提升。在當(dāng)今,AOP實(shí)現(xiàn)與語法尚未進(jìn)行完全規(guī)范,其為基于OOP以后的編程思想的一種創(chuàng)新,其能選用OOP當(dāng)作基礎(chǔ)范型,具有讓人無法抗拒的好處,業(yè)界會進(jìn)行認(rèn)可、接受,但是還要更深刻地探究其中存在的問題。
參考文獻(xiàn):
[1]李明.C++程序設(shè)計(jì)[M].北京:中央廣播電視大學(xué)出版社,2008:l96-198
關(guān)鍵詞:C語言;算法為先;教學(xué)模式
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B
1引言
為適應(yīng)社會和經(jīng)濟(jì)的信息化需要,掌握計(jì)算機(jī)技術(shù)顯得尤為重要。C語言以它結(jié)構(gòu)化豐富、靈活性大、可移植性強(qiáng)、效率高等優(yōu)點(diǎn),被廣大高校作為計(jì)算機(jī)專業(yè)基礎(chǔ)課,以及許多非計(jì)算機(jī)專業(yè)學(xué)習(xí)程序設(shè)計(jì)的首選課。但是又由于C語言涉及的概念復(fù)雜,規(guī)則繁多,數(shù)據(jù)類型和運(yùn)算符豐富等特點(diǎn),使許多初學(xué)者望而生畏。很多文獻(xiàn)致力于研究好的教學(xué)方法,幫助學(xué)生掌握C語言語法及上機(jī)技巧,這在一定程度上改善了教學(xué)效果,但是學(xué)生的學(xué)習(xí)熱情仍然缺乏積極主動(dòng)。本文通過分析算法在C語言教學(xué)中的重要作用,進(jìn)一步探討算法的教學(xué)方法,目的是從根本上激發(fā)學(xué)生的學(xué)習(xí)熱情,降低學(xué)習(xí)難度。
2C語言教學(xué)中常見問題分析
算法設(shè)計(jì)、基本語法規(guī)則、程序調(diào)試是C語言教學(xué)的核心內(nèi)容。算法注重解決某一問題采用的方法步驟,語法注重語言規(guī)范,用規(guī)范的C語言描述的算法必須通過上機(jī)調(diào)試才能實(shí)現(xiàn),三個(gè)核心內(nèi)容緊密聯(lián)系。然而在教學(xué)環(huán)節(jié)中,教材內(nèi)容基于語法體系,通常采用課堂講語法、上機(jī)調(diào)程序的教學(xué)模式,忽視了算法在教學(xué)中的積極作用,殊不知過細(xì)的語法知識易使學(xué)生失去興趣,靈活的編輯環(huán)境讓學(xué)生望而卻步,學(xué)生的學(xué)習(xí)熱情很難調(diào)動(dòng)起來。
2.1語法細(xì)節(jié)易使學(xué)生失去學(xué)習(xí)興趣
通常C語言是學(xué)生接觸的第一門程序設(shè)計(jì)語言,任何程序主要由數(shù)據(jù)和操作兩部分組成,圍繞這一特點(diǎn),C語言教學(xué)內(nèi)容可歸納為:算法,數(shù)據(jù)結(jié)構(gòu),程序結(jié)構(gòu)三部分。算法是編程的指導(dǎo)思路;數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)的組織形式,可細(xì)分為基本數(shù)據(jù)類型,構(gòu)造類型,指針類型、位運(yùn)算;程序結(jié)構(gòu)是操作語句的組織形式,具體包括預(yù)處理,函數(shù),順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)。雖然C語言知識結(jié)構(gòu)清晰,但是它是面向過程的編程語言,具有靈活的編程格式及豐富的運(yùn)算符和函數(shù),如果對語法細(xì)節(jié)不熟悉,以及相關(guān)概念混淆不清,很難編出正確的程序。教師往往投入較多課時(shí),講解C語言語法,而繁多的語法細(xì)則,不僅使學(xué)生難于記憶,而且容易誤導(dǎo)學(xué)生的編程思路。例如scanf函數(shù)的應(yīng)用:
scanf函數(shù)的一般使用形式為:scanf(格式控制,地址表列)。
格式控制是用雙撇號括起來的字符串,它包含兩種 信息:
(1)%和格式字符,如%d,%c,%s等,它的作用是按指定的格式輸入數(shù)據(jù);
(2) 普通字符,即在數(shù)據(jù)輸入時(shí),需要原樣輸入的 字符。
地址表列由若干個(gè)地址組成,通常是變量的地址或字符串的首地址。輸入多個(gè)數(shù)據(jù)時(shí),空格,回車鍵,跳格鍵為默認(rèn)分隔符。
如:“scanf(“%d%d%d”,&a,&b,&c);”語句,運(yùn)行時(shí)輸入:689L,可得到變量a,b,c的值。如果輸入語句變?yōu)?“scanf(“%d,%d,%d” ,&a,&b,&c);”,僅添加了兩個(gè)逗號,仍按以上方式輸入,則會出錯(cuò)。原因在于格式控制部分出現(xiàn)的普通字符“,”,在數(shù)據(jù)輸入時(shí)要原樣輸入,正確的輸入方式為:6,8,9L??梢奀語言語法格式非常靈活。
運(yùn)用scanf函數(shù)輸入字符時(shí),又出現(xiàn)特殊性。
如:“scanf(“%c%c%c” ,&c1,&c2,&c3);”語句,運(yùn)行時(shí)輸入:abcL,目的是將a賦給c1,b賦給c2,c賦給c3。用“printf(“%c,%c,%c”, c1,c2,c3);”語句輸出,結(jié)果卻為a,,b。出錯(cuò)原因在于:%c格式字符不需要空格作為輸入字符的間隔。正確的輸入為:abcL。
然而,用scanf函數(shù)輸入多個(gè)字符串時(shí),空格又成為有效的分隔符。
如:“scanf(“%s%s%s” ,c1,c2,c3);”語句,其中c1,c2,c3為字符數(shù)組名,若輸入數(shù)據(jù):How are you? L,則c1數(shù)組的數(shù)據(jù)是“How”; c2數(shù)組是“are”;c3數(shù)組是“you?”。若將語句改為“scanf(“%s”,c1);”,輸入字符串:How are you? L,用“printf(“%s”,c1);”輸出,則只顯示How,與原意不同。如果一定要將帶空格的字符串輸入到字符數(shù)組c1,需要用到另一個(gè)輸入函數(shù),如“gets(c1) ;”。
雖然任何一個(gè)C程序輸入數(shù)據(jù),都可能用到scanf函數(shù),但是它靈活的編程格式,往往使初學(xué)者在具體運(yùn)用時(shí)舉棋不定,忘卻抓住編程題目的實(shí)質(zhì)性要求。教材中還有許多值得注意和思考的語法細(xì)節(jié),學(xué)生編程時(shí),如果缺乏解題思路的引導(dǎo),常因語法的困擾而失去編程興趣。
2.2編程環(huán)境易讓學(xué)生望而生畏
上機(jī)操作是學(xué)習(xí)程序設(shè)計(jì)的必備環(huán)節(jié),學(xué)生可以驗(yàn)證語句的正確性,測試程序的功能,進(jìn)一步增強(qiáng)對語法知識的理解和記憶。但是C語言編輯環(huán)境的一些特點(diǎn),又讓學(xué)生望而生畏。
首先,編輯環(huán)境基于DOS,不像其它可視化語言有友好的交互界面,加之初學(xué)者對語法知識不熟悉,編程時(shí)稍有不慎就會出錯(cuò)。如經(jīng)常字母大小寫不分;語句末尾忘加“;”;關(guān)系運(yùn)算符“= =”誤用為賦值運(yùn)算符“=”等。初學(xué)者對出錯(cuò)提示缺乏了解,不知道錯(cuò)在哪里,更無從改正,經(jīng)常一個(gè)小小的錯(cuò)誤導(dǎo)致整個(gè)程序無法運(yùn)行。
其次,C語言編譯程序?qū)φZ法檢測不像其它高級語言那么嚴(yán)格,這種風(fēng)格雖然給編程留下“靈活的余地”,卻常導(dǎo)致一些非語法性和非算法性的隱型錯(cuò)誤。比如程序:
main ( )
{
int a,b;
a = 32767;
b = a+1;
printf(“%d”,b);
}
運(yùn)行結(jié)果為-32768,不正確,原因在于發(fā)生了溢出。系統(tǒng)運(yùn)行時(shí)并不報(bào)錯(cuò),程序中潛伏的隱型錯(cuò)誤,給編程帶來很多麻煩,增加了調(diào)試難度,對編程者提出更高要求,只有他們較全面地掌握了計(jì)算機(jī)知識,才可能檢查出錯(cuò)誤。然而初學(xué)者往往只懂得編程的一部分知識,這使他們感到C語言編程即抽象又復(fù)雜。如果沒有濃厚的興趣驅(qū)動(dòng),很容易在不知所措中放棄編程。
2.3算法為先,激發(fā)學(xué)習(xí)熱情
“C語言”課程長期沿襲傳統(tǒng)教學(xué)模式,以語法體系為脈絡(luò)展開教學(xué),重視語法細(xì)節(jié)和操作技巧,忽視算法對編程的指導(dǎo)作用,學(xué)生見木不見林,容易失去興趣,經(jīng)過一個(gè)學(xué)期的學(xué)習(xí),除了掌握一些零星的語法外,收獲甚微,面對具體的編程問題,無從下手。從事軟件開發(fā)的人都知道,軟件開發(fā)過程包括:可行性研究,需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼,測試,維護(hù)等幾個(gè)階段。重點(diǎn)在于先設(shè)計(jì),后編碼,并且整個(gè)開發(fā)環(huán)節(jié)需要不斷查閱資料,反復(fù)調(diào)試修改,最終才能設(shè)計(jì)出可運(yùn)行的軟件,單靠記憶和背誦一些語法知識,根本無法適應(yīng)實(shí)際需要。
在教學(xué)過程中,正確處理語法與算法的關(guān)系,是提高編程能力的關(guān)鍵。算法是程序設(shè)計(jì)的靈魂,沒有正確的算法,計(jì)算機(jī)解決不了任何問題,語言只是實(shí)現(xiàn)算法的工具,要從算法實(shí)現(xiàn)的角度來介紹語言,而不是用語言來套用算法。程序設(shè)計(jì)課程本身是綜合性較強(qiáng)的一門課,注重由設(shè)計(jì)算法到書寫程序并進(jìn)行調(diào)試的整個(gè)過程,它要求學(xué)生首先明晰結(jié)構(gòu)化程序設(shè)計(jì)思路,知道怎么做,其次要求學(xué)生用扎實(shí)的語法知識實(shí)現(xiàn)編程,最后通過上機(jī)調(diào)試保證程序正確運(yùn)行。然而,這個(gè)過程并非一帆風(fēng)順,會遇到許多意想不到的困難,需要耐心與毅力,只有具備真正的興趣和強(qiáng)烈的好奇心,才容易完成。
經(jīng)過研究與實(shí)踐,教師在教學(xué)中如果注重算法為先,從算法實(shí)現(xiàn)的角度來介紹語法,那么不僅可以加深學(xué)生對語法知識的理解,增強(qiáng)語言應(yīng)用能力,而且通過構(gòu)造算法,培養(yǎng)了學(xué)生的邏輯思維,增強(qiáng)了學(xué)生分析和解決問題的實(shí)踐能力。學(xué)生面對新的問題,會從程序設(shè)計(jì)思想的角度出發(fā),先設(shè)計(jì)算法,在迫切想要實(shí)現(xiàn)的好奇心下,克服學(xué)習(xí)語法和調(diào)試程序的各種困難,變被動(dòng)為主動(dòng)。著名計(jì)算機(jī)科學(xué)家Dijkstra曾提到:“學(xué)編程是一個(gè)由新奇到熟悉循序漸進(jìn)的過程”,繼而又說:“在這種激進(jìn)的新奇中含有愉悅的嘗試”。
3算法教學(xué)建議
由上分析可知,C語言教學(xué)目標(biāo)不僅僅是要求學(xué)生掌握語法規(guī)則或再現(xiàn)簡單程序,更重要的是要求學(xué)生具備編程實(shí)踐能力。傳統(tǒng)教學(xué)方式,學(xué)生形成以語言為中心的思維模式,編程能力差。教師應(yīng)引導(dǎo)學(xué)生逐步形成以算法為中心的思維模式,提高編程能力。但是算法的學(xué)習(xí)和掌握并不是一蹴而就,必須依靠平時(shí)訓(xùn)練和知識積累,以下提幾點(diǎn)學(xué)習(xí)建議。
3.1以結(jié)構(gòu)化程序設(shè)計(jì)思想為核心,開拓算法設(shè)計(jì)思路
學(xué)習(xí)的認(rèn)知規(guī)律是將復(fù)雜問題簡單化,以便于初學(xué)者理解和接收。C語言程序設(shè)計(jì)遵循結(jié)構(gòu)化程序設(shè)計(jì)方法,該方法提高了程序的可讀性,方便了程序的調(diào)試和維護(hù),最重要的是該方法不拘泥于算法多變的外觀形式,總結(jié)出算法結(jié)構(gòu)的內(nèi)在規(guī)律。學(xué)生掌握了這種規(guī)律,面對新的問題,很容易進(jìn)行知識結(jié)構(gòu)的遷移,復(fù)雜的編程問題將變得簡單。
結(jié)構(gòu)化程序設(shè)計(jì)包括結(jié)構(gòu)化算法設(shè)計(jì)和結(jié)構(gòu)化編程。由順序、選擇、循環(huán)三種基本結(jié)構(gòu)(或基本結(jié)構(gòu)的簡單變形),按由上到下的順序排列,組成的算法稱為結(jié)構(gòu)化算法。已經(jīng)證明,結(jié)構(gòu)化算法可以解決任何問題。對于特別復(fù)雜的編程項(xiàng)目,可以先采用自頂向下、逐步細(xì)化的分析方法,或采用模塊化設(shè)計(jì)方法,把大任務(wù)分解為容易求解的若干子任務(wù),分而治之。對于非結(jié)構(gòu)化算法,還可以用等價(jià)的結(jié)構(gòu)化算法替換。在設(shè)計(jì)好一個(gè)結(jié)構(gòu)化算法之后,就可以進(jìn)行結(jié)構(gòu)化編程,C語言提供了與三種基本結(jié)構(gòu)相對應(yīng)的語句,進(jìn)行結(jié)構(gòu)化編程也并非難事。
由上可知,既然基本結(jié)構(gòu)的順序組合,可以表示任何復(fù)雜的算法結(jié)構(gòu),并且基本結(jié)構(gòu)易于用C語句實(shí)現(xiàn),那么學(xué)生只要深刻理解并熟練掌握這三種基本結(jié)構(gòu),就會提高設(shè)計(jì)算法和編寫程序的能力。表1對算法的三種基本結(jié)構(gòu)進(jìn)行了總結(jié)。
說明:算法的表示方法很多,其中N-S流程圖最適于表示結(jié)構(gòu)化算法。表1列出了算法的三種基本結(jié)構(gòu)以及相應(yīng)的N-S流程圖和語句的主要表示形式,學(xué)生通過該表很容易理解算法,N-S圖,編程三者之間的關(guān)系。
教師要向?qū)W生說明,任何復(fù)雜算法都是由這三種基本結(jié)構(gòu)構(gòu)成,構(gòu)造算法其實(shí)很容易,大家之所以覺得困難,是因?yàn)闆]有深刻理解A、B代表的含義。正如表中提到:A、B較靈活,既可以代表選擇結(jié)構(gòu)也可以代表循環(huán)結(jié)構(gòu),選擇結(jié)構(gòu)中還可以再套用一個(gè)循環(huán),循環(huán)結(jié)構(gòu)中還可以再嵌套循環(huán)或選擇……由于A、B代表含義不同,可能構(gòu)造出各種各樣不同的N-S圖,教師邊闡述,邊在黑板上繪制,開拓學(xué)生的思維空間。最后總結(jié):能構(gòu)造多少N-S圖,就可能存在多少算法;順序、選擇、循環(huán)是三塊基本的積木,形式多樣的算法是由它們搭建而成,用于解決實(shí)際問題。這種教學(xué)方式,以簡單的N-S圖為切入點(diǎn),學(xué)生很容易發(fā)現(xiàn)N-S圖的多樣性,算法的多樣性,實(shí)際問題的多樣性之間的聯(lián)系,從而激發(fā)設(shè)計(jì)算法的濃厚興趣。
正確的解題算法將減少程序的邏輯錯(cuò)誤,算法用N-S圖描述出來后,利用相應(yīng)的C語句,學(xué)生很容易編寫出程序的主體代碼,至于其它編程細(xì)節(jié),可以引導(dǎo)學(xué)生查閱資料。這樣,學(xué)生對語法的學(xué)習(xí)由被動(dòng)變?yōu)橹鲃?dòng)。精心培植的幼苗,一定期盼開花結(jié)果,學(xué)生經(jīng)過一番努力,編寫出的程序代碼,也一定希望能用計(jì)算機(jī)實(shí)現(xiàn),于是上機(jī)調(diào)試也變得既有目的性,挑戰(zhàn)性又有趣味性。
3.2案例式教學(xué),一題多解,培養(yǎng)設(shè)計(jì)算法的邏輯思維
C語言是實(shí)踐性很強(qiáng)的一門課程,學(xué)生除了掌握結(jié)構(gòu)化程序設(shè)計(jì)方法外,還必須進(jìn)行大量編程訓(xùn)練。通常情況下,一個(gè)程序是用哪種語言實(shí)現(xiàn)的并不重要,關(guān)鍵在于算法設(shè)計(jì)的優(yōu)劣。計(jì)算機(jī)科學(xué)家N. Wirth教授提出了一個(gè)著名公式:算法+數(shù)據(jù)結(jié)構(gòu)=程序,由此可見程序設(shè)計(jì)的本質(zhì)在于先設(shè)計(jì)出解決問題的算法。
教學(xué)初期,學(xué)生對語法知識了解甚少,教師可以根據(jù)每節(jié)課的教學(xué)目標(biāo)和內(nèi)容,精選程序例題,將重點(diǎn)放在算法的設(shè)計(jì)思路和方法上,逐步培養(yǎng)學(xué)生建立正確的思維模式。學(xué)生設(shè)計(jì)算法時(shí),常犯的錯(cuò)誤是,不會從計(jì)算機(jī)角度出發(fā),分析實(shí)際問題內(nèi)在的邏輯關(guān)系,而習(xí)慣于按照人的思維方式設(shè)計(jì)求解過程,算法往往無法用計(jì)算機(jī)操作實(shí)現(xiàn)。因此改變學(xué)生思維習(xí)慣,培養(yǎng)邏輯分析能力,尤為重要。
實(shí)踐證明,對同一問題,設(shè)計(jì)多種有效算法,并對算法進(jìn)行優(yōu)化選擇,有利于培養(yǎng)學(xué)生邏輯思維。通過一題多解,既拓展了學(xué)生的解題思路,增強(qiáng)了學(xué)生對同類問題求解的熟練程度,同時(shí)又潛移默化地培養(yǎng)了學(xué)生思維的科學(xué)性、嚴(yán)謹(jǐn)性。通常,不同問題間存在某種共性,一些基本算法掌握熟練后,學(xué)生很容易舉一反三解決不同問題,樹立起編程的信心。
例如通過一題多解,讓學(xué)生熟練三個(gè)數(shù)由大到小排序的算法,進(jìn)而引導(dǎo)學(xué)生對一組無序數(shù)據(jù)進(jìn)行排列,用N-S圖描述算法,更能反映出不同問題之間的聯(lián)系和區(qū)別。
再如典型例題:用100元錢買100只雞,每只公雞5元,每只母雞3元,每3只小雞1元,要求每種雞至少買一只,而且必須是整只,問各種雞各買多少只?
對該問題設(shè)計(jì)多種算法,既幫助學(xué)生熟悉了循環(huán)語句,同時(shí)通過對各種算法進(jìn)行評價(jià),學(xué)生又深刻體會到算法設(shè)計(jì)的優(yōu)劣對程序執(zhí)行效率的影響。經(jīng)過這種長期訓(xùn)練,學(xué)生求解問題時(shí),不僅會注意算法的正確性,也會注重思維的嚴(yán)謹(jǐn)性。一題多解既培養(yǎng)了學(xué)生創(chuàng)造性思維,又訓(xùn)練了邏輯思維,是提高算法設(shè)計(jì)能力的有效方法。
3.3算法帶動(dòng)語法學(xué)習(xí),全面提高編程能力
在編程訓(xùn)練過程中,學(xué)生不僅要積累設(shè)計(jì)正確,高效算法的經(jīng)驗(yàn),而且隨著課程內(nèi)容的不斷豐富,還要能將各種算法轉(zhuǎn)化為可執(zhí)行程序,完成整個(gè)結(jié)構(gòu)化程序設(shè)計(jì)過程。
以往教學(xué)模式過多重視語句命令格式,教學(xué)內(nèi)容繁瑣,學(xué)生需要識記的知識多,并且不易體會其用途,容易失去學(xué)習(xí)興趣。如果在教學(xué)過程中,教師采用一些方法,充分利用學(xué)生對算法的理解和掌握,激發(fā)學(xué)習(xí)語法的興趣,將取得好的教學(xué)效果。
首先,面對編程問題,如果學(xué)生明晰解題思路,在結(jié)構(gòu)化程序設(shè)計(jì)思想的指導(dǎo)下,會很快設(shè)計(jì)出算法的N-S圖。由前可知,算法是由順序、選擇、循環(huán)三種基本結(jié)構(gòu)構(gòu)成,表1只是簡單地列出了三種基本結(jié)構(gòu)的C語句實(shí)現(xiàn),教師應(yīng)廣泛搜集并認(rèn)真挑選典型例題,幫助學(xué)生全面掌握三種基本結(jié)構(gòu)的各種語法表示。這樣,學(xué)生根據(jù)算法的N-S圖,就會很容易編寫出程序的主體代碼。
其次,教學(xué)初期,采用案例式教學(xué),注重培養(yǎng)學(xué)生的算法設(shè)計(jì)能力,學(xué)生的語法知識比較薄弱,若要求他們將算法的N-S圖完全轉(zhuǎn)換成計(jì)算機(jī)語言,會遇到較多困難。如果教師能認(rèn)真解析C語言知識,將教學(xué)內(nèi)容有機(jī)組織起來(見2.1所述),再現(xiàn)在學(xué)生面前,那么學(xué)生在迫切想要實(shí)現(xiàn)算法的心理之下,借助腦海中的知識體系,會很容易尋找到相關(guān)章節(jié),查閱還未曾系統(tǒng)學(xué)習(xí)的語法內(nèi)容,獨(dú)自完成編程過程。這樣既增強(qiáng)了學(xué)生的學(xué)習(xí)自主性,學(xué)生在解決問題的同時(shí),又深刻體會到語句的用途和功能,從而激發(fā)出強(qiáng)烈的編程興趣。
最后,建議教師按照總體教學(xué)目標(biāo)組織教學(xué),制定每節(jié)課的語法教學(xué)任務(wù),針對教學(xué)任務(wù)挑選例題,通過對案例的分析講解,一方面幫助學(xué)生積累設(shè)計(jì)算法的經(jīng)驗(yàn);另一方面,加強(qiáng)學(xué)生對算法所涉及語法內(nèi)容的理解,掌握和應(yīng)用,學(xué)生只有正確理解并熟練掌握每一個(gè)基本概念,編程時(shí)才會少犯語法錯(cuò)誤,從而減少不必要的程序調(diào)試,逐漸樹立編程的信心。
4結(jié)束語
C語言是計(jì)算機(jī)基礎(chǔ)教育的重要組成部分,教學(xué)目標(biāo)在于培養(yǎng)學(xué)生的編程能力。多年來,教學(xué)模式一直圍繞語法體系,學(xué)生學(xué)習(xí)興致不高,分析和解決實(shí)際問題的能力差。經(jīng)過多年教學(xué)與實(shí)踐,本文倡導(dǎo)算法為先的教學(xué)模式,以結(jié)構(gòu)化程序設(shè)計(jì)思想為指導(dǎo),通過案例式教學(xué),提高學(xué)生算法設(shè)計(jì)能力;利用學(xué)生對算法的理解和掌握促進(jìn)語法學(xué)習(xí),進(jìn)而提高學(xué)生將算法轉(zhuǎn)換為計(jì)算機(jī)語言的能力;算法和編程能力的提高,將有效減少程序中的邏輯錯(cuò)誤和語法錯(cuò)誤,降低調(diào)試難度。由此可見,算法為先的教學(xué)模式,有利于提高學(xué)生的程序設(shè)計(jì)水平。
參考文獻(xiàn):
[1] 譚浩強(qiáng). C語言程序設(shè)計(jì)[M]. 北京:清華大學(xué)出版社,2000.
[2] Edsger W. Dijkstra. On the Cruelty of Really Teaching Computing Science[J]. Comm.ACM,1989(32):1398-1404.
【關(guān)鍵詞】數(shù)據(jù)結(jié)構(gòu);算法;軟件設(shè)計(jì)
1.經(jīng)典算法的選擇
選擇經(jīng)典算法的重要性,PASCAL語言的創(chuàng)始人、著名的計(jì)算機(jī)科學(xué)家N.沃思說得好“程序=數(shù)據(jù)結(jié)構(gòu)+算法”,足以見得算法在程序設(shè)計(jì)中的重要地位。在合理的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)上,算法是對數(shù)據(jù)結(jié)構(gòu)的操作(運(yùn)算),是數(shù)據(jù)處理的核心。在《數(shù)據(jù)結(jié)構(gòu)》中介紹的基本數(shù)據(jù)結(jié)構(gòu)有線性表、堆棧、隊(duì)列、數(shù)組、樹、二叉樹、圖以及相應(yīng)的算法。一個(gè)算法是建立在某種數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,一個(gè)算法不可能脫離數(shù)據(jù)結(jié)構(gòu)而孤立存在。只有通過學(xué)習(xí)算法,才能真正掌握某種數(shù)據(jù)結(jié)構(gòu)??梢哉f學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》的過程基本上是學(xué)習(xí)各種算法的過程。在眾多的算法中有簡單的、有復(fù)雜的、有容易的、有難度大的,在有限的學(xué)時(shí)情況下,不可能也沒有必要逐一講解每一個(gè)算法。大多數(shù)的算法,要靠學(xué)生自己理解消化。在這種情況下,如何選擇少量的經(jīng)典算法進(jìn)行分析講解,顯得尤其重要。一個(gè)經(jīng)典算法往往能起到以一當(dāng)十、以點(diǎn)帶面的關(guān)鍵作用。通過經(jīng)典算法的分析,一方面讓學(xué)生加深對數(shù)據(jù)結(jié)構(gòu)基本理論的理解另一方面讓學(xué)生學(xué)習(xí)程序設(shè)計(jì)方法。
選擇好經(jīng)典算法后下一步就是要對其展開綜合分析,下面以具體的算法為例進(jìn)行討論。
2.利用經(jīng)典算法說明基本原理
2.1 經(jīng)典算法應(yīng)能體現(xiàn)某個(gè)數(shù)據(jù)結(jié)構(gòu)的基本特征
我們知道線性表順序存儲時(shí)其優(yōu)點(diǎn)是能夠?qū)γ總€(gè)數(shù)據(jù)元素隨機(jī)訪問,存儲密度高,其缺點(diǎn)是插入、刪除操作時(shí)需要移動(dòng)大量的數(shù)據(jù)元素,操作效率低?!跋蛴行颍ㄓ尚〉酱蠡蛴纱蟮叫。┑木€性表(順序存儲)插入一個(gè)新的數(shù)據(jù)元素”,這一經(jīng)典算法集中反映了線性表順序存儲的這些特點(diǎn)。
分析:將一個(gè)值為X的數(shù)據(jù)元素插入到有序(由小到大或由大到?。┑木€性表(順序存儲)中,可以分兩步進(jìn)行,首先查找到值為X的數(shù)據(jù)元素在線性表中應(yīng)有的位置,采用從頭到尾循環(huán)比較的方法確定其位置I,然后,將第I個(gè)以后的全部數(shù)據(jù)元素向后移動(dòng)一個(gè)存儲單元,最后將值為X的數(shù)據(jù)元素存放到第I個(gè)位置上,線性表元素個(gè)數(shù)增1。
【算法1】
PROCEDURE INSERT(V,m,n,X)
//將值為X的數(shù)據(jù)元素插入到V數(shù)組中,(線性表順序存貯在V中)m為最多元素個(gè)數(shù),n為當(dāng)前實(shí)際元素個(gè)數(shù)
IF (m=n) THEN{“OVERFLOW”; RETURN}
FOR I=1 TO n DO
IF (X〈V(I))THEN BREAK
FOR J=n TO I BY -1 DO V(J+1)=V(J)
V(I)=X
n=n+1
RETURN
分析:【算法1】的優(yōu)點(diǎn)是簡單,便于理解,缺點(diǎn)是:
①循環(huán)體內(nèi)有提前退出語句,不利于結(jié)構(gòu)化程序設(shè)計(jì);
②確定新數(shù)據(jù)元素位置和移動(dòng)數(shù)據(jù)元素分兩步進(jìn)行,有重復(fù)操作,可以改進(jìn)之,將兩步合并一步完成,即將循環(huán)比較與移動(dòng)數(shù)據(jù)元素同時(shí)進(jìn)行。從線性表的尾部開始向前循環(huán)比較,比新數(shù)據(jù)元素大者后移,直到小于等于時(shí)停止。
【算法2】
PROCEDURE INSERT(V,m,n,X)
IF(m=n)THEN{“OVERFLOW”;RETURN}
I=n
WHILE (I〉=1)AND (V(I)〉X)DO {V(I+1)=V(I);I=I-1}
V(I+1)=X
n=n+1
RETURN
分析:注意【算法2】中循環(huán)條件,當(dāng)循環(huán)結(jié)束后I=0或V(I)〈=X,新數(shù)據(jù)元素的位置為I+1,【算法1】的時(shí)間復(fù)雜度為0(2n),而【算法2】的時(shí)間復(fù)雜度為0(n),效率提高一倍。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)中最基本最核心的部分,歸納循環(huán)條件是關(guān)鍵?!舅惴?】能進(jìn)一步推廣。
2.2 利用經(jīng)典算法學(xué)習(xí)算法設(shè)計(jì)
經(jīng)典算法能給學(xué)習(xí)者以啟示、示范作用。
分析:可以將【算法2】用于對線性表(順序存儲)排序算法中。在直接插入排序算法中,其算法思想是從第2個(gè)數(shù)據(jù)元素開始直到第n個(gè)數(shù)據(jù)元素,逐一插入到已有序的子線性表中。
【算法3】
PROCEDURE SORT(V,n)
FOR I=2 TO n DO
{ Y=V(I)
J=I-1
WHILE (J〉=1) AND (V(J)〉Y) DO {V(J+1)=V(J);J=J-1}
V(J+1)=Y }
RETURN
分析:【算示3】其結(jié)構(gòu)分為雙重循環(huán),外循環(huán)完成逐一取數(shù)據(jù)元素,即取第I個(gè)數(shù)據(jù)元素,內(nèi)循環(huán)完成將第I個(gè)數(shù)據(jù)元素插入到前I-1個(gè)已有序的子線性表中。內(nèi)循環(huán)完成的功能可以獨(dú)立成為一個(gè)子函數(shù)(子過程),可以借用【算法2】。這正是結(jié)構(gòu)化程序設(shè)計(jì)思想的體現(xiàn),即主程序完成任務(wù)的劃分,說明“做什么”,子函數(shù)(子過程)完成任務(wù)的具體實(shí)現(xiàn),說明“如何做”。結(jié)構(gòu)化程序設(shè)計(jì)方法采取“分解”的手段來控制系統(tǒng)的復(fù)雜性,將大系統(tǒng)劃分為若干個(gè)相對獨(dú)立的、功能單一的子模塊。一方面子函數(shù)(子過程)可以實(shí)現(xiàn)軟件的重用性,在不同的程序段有相同的處理過程時(shí)調(diào)用子函數(shù)(子過程),減少軟件開發(fā)的工作量;另一方面子函數(shù)(子過程)對具體的實(shí)現(xiàn)技術(shù)細(xì)節(jié)進(jìn)行隱藏,便于開發(fā)人員集中精力把握軟件開發(fā)的核心和主要問題,降低了軟件開發(fā)難度,從而保證軟件質(zhì)量。在利用【算法2】時(shí)要稍加修改,見【算法4】。
【算法4】
PROCEDURE INSERT(V,I,X)
//將值為X的數(shù)據(jù)元素插入到已有序的前I-1個(gè)數(shù)據(jù)元素中
J=I-1
Y=X
WHILE (J〉=1) AND (V(J)〉X) DO {V(J+1)=V(J);J=J-1}
V(J+1)=Y
RETURN
相應(yīng)的主程序也要作修改,見【算法5】
【算法5】
PROCEDURE SORT(V,n)
FOR I=2 TO n DO
INSERT(V,I,V(I))
RETURN
3.結(jié)束語
在眾多的算法中選擇好少量的經(jīng)典算法對于教好、學(xué)好《數(shù)據(jù)結(jié)構(gòu)》至關(guān)重要;經(jīng)典算法要有助于學(xué)生理解對應(yīng)的數(shù)據(jù)結(jié)構(gòu),經(jīng)典算法的分析要側(cè)重于程序設(shè)計(jì)能力的提高。
參考文獻(xiàn)
[1]歐建圣.數(shù)據(jù)結(jié)構(gòu)教學(xué)研究――經(jīng)典算法的綜合分析[J].武漢工程職業(yè)技術(shù)學(xué)院學(xué)報(bào),2004,16(1):58-60.
C語言 結(jié)構(gòu)化程序設(shè)計(jì) 循環(huán)結(jié)構(gòu) 效率
一、引言
學(xué)習(xí)和應(yīng)用計(jì)算機(jī)高級程序設(shè)計(jì)語言的人都知道,在這些語言中為實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì),一般都會采用三種最基本的結(jié)構(gòu),即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。因此,掌握這三種基本結(jié)構(gòu)的使用方法,是學(xué)習(xí)和掌握高級程序設(shè)計(jì)語言課的基礎(chǔ)。這三種基本結(jié)構(gòu)中,順序結(jié)構(gòu)和選擇結(jié)構(gòu)和我們平常的思維習(xí)慣相似。因此,最容易理解和掌握;而循環(huán)結(jié)構(gòu)是這三種基本結(jié)構(gòu)中最復(fù)雜的一種結(jié)構(gòu),與我們?nèi)粘5乃季S習(xí)慣不盡相同,因此理解起來相對來說比較困難。但是,幾乎所有的程序都離不開循環(huán)結(jié)構(gòu),利用它可以簡化程序、提高工作效率。因此,學(xué)習(xí)和應(yīng)用高級程序設(shè)計(jì)語言的人又必須要掌握循環(huán)結(jié)構(gòu)。但是,通過本人近幾年的教學(xué)發(fā)現(xiàn),大多數(shù)學(xué)生在學(xué)到循環(huán)結(jié)構(gòu)一段時(shí)間后,干脆將這門課給放棄了,原因是他們覺得循環(huán)結(jié)構(gòu)太難理解了。用順序結(jié)構(gòu)和選擇結(jié)構(gòu)做一個(gè)小程序還可以,用循環(huán)結(jié)構(gòu)實(shí)在難理解。鑒于這個(gè)原因,本人將日常授課中總結(jié)出來的一點(diǎn)心得從初學(xué)者的角度寫出來,希望能對即將和正在學(xué)習(xí)高級程序設(shè)計(jì)語言課的人有所幫助。當(dāng)然,我們在這里是以C語言為例來說的,其實(shí)這方面的知識對其他語言比如Visual Basic語言等同樣適用。
在C語言中,循環(huán)結(jié)構(gòu)主要是由For語句、While語句、Do-While語句三種結(jié)構(gòu)來實(shí)現(xiàn)的。而在這三種循環(huán)結(jié)構(gòu)語句中又以for語句的應(yīng)用更為廣泛。因?yàn)閒or語句在其開頭語句中就已經(jīng)包含了循環(huán)變量的初始值、循環(huán)變量的終止值、循環(huán)的判斷條件以及循環(huán)變量的變化趨勢等這些內(nèi)容,因此在編寫其循環(huán)體時(shí),只用考慮其循環(huán)體應(yīng)該包含的主要功能就行了,而不用在For語句之前對循環(huán)變量的初始值進(jìn)行過多地考慮,同樣也不用在循環(huán)內(nèi)部考慮其循環(huán)變量如何變化。對大多數(shù)有程序設(shè)計(jì)經(jīng)驗(yàn)的人來說,使用for語句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)是一件輕而易舉的事情。但是,對于沒有經(jīng)驗(yàn)的初學(xué)者來說,要想將for語句的作用及使用方法掌握住也不是一件容易的事情,更不用說While語句、Do-While語句的使用了。因此,本文從初學(xué)者的角度,闡述了C語言中循環(huán)結(jié)構(gòu)的幾種典型應(yīng)用。
二、用循環(huán)結(jié)構(gòu)輸出幾何圖形
在教學(xué)過程中,不管開設(shè)哪一種高級程序設(shè)計(jì)語言課,只要一講到循環(huán)結(jié)構(gòu),大多數(shù)老師幾乎不約而同地選擇輸出簡單的幾何圖形來作為講解循環(huán)結(jié)構(gòu)的最好實(shí)例。
對于這種類型的題目,初學(xué)者往往最容易想到的方法就是采用多條輸出語句來完成程序的設(shè)計(jì)。雖然這種方法很快能夠?qū)崿F(xiàn)所要效果,但其缺陷也是很明顯的:缺乏靈活性、程序修改起來不方便,也不符合程序設(shè)計(jì)的思想。比如,我想讓大家輸出8行,每行36個(gè)“*”。這個(gè)時(shí)候,我們就不得不在輸入“*”的時(shí)候特別仔細(xì),因?yàn)橐徊恍⌒目赡軅€(gè)數(shù)就不對了。
但是,這樣的問題如果用循環(huán)語句來實(shí)現(xiàn)的話,程序不但可以簡化多,并且可以很靈活地將其修改成我們想要的效果。
因此,在講解這一類圖形時(shí),授課教師最好引導(dǎo)學(xué)生按照正常的程序設(shè)計(jì)思想,先分析圖形的組成結(jié)構(gòu),找出其中變化的規(guī)律,然后按照所找到的規(guī)律用循環(huán)結(jié)構(gòu)來編寫出相對應(yīng)的程序代碼,這樣一旦要求有一點(diǎn)點(diǎn)變化不用大篇幅地修改程序,而只用找到關(guān)鍵的幾個(gè)地方修改一下就可以了。教師在講解的過程中,可以舉一反三,多次修改、讓學(xué)生反復(fù)練習(xí),直到他們理解為止。
現(xiàn)在,我們來具體分析一下該圖形,看看它有什么樣的特點(diǎn),然后我們利用For循環(huán)將它的程序代碼編寫出來。
三、結(jié)束語
以上關(guān)于循環(huán)結(jié)構(gòu)的使用基本上都是在程序設(shè)計(jì)教學(xué)過程中的一些體會與總結(jié),可能比較膚淺,但是對于初學(xué)者來說,掌握這些知識還是有必要的。在進(jìn)行課程教學(xué)的過程中,將自己在學(xué)習(xí)過程中得到的一些好的方法傳授給學(xué)生,讓他們從中去實(shí)踐、體會,從而引起他們更大的學(xué)習(xí)興趣是必要的。如何讓一名初學(xué)者盡快擺脫日常的思維定式,更加透徹地理解和掌握程序設(shè)計(jì)中的基本思想,領(lǐng)會程序設(shè)計(jì)的精髓,是高級語言程序設(shè)計(jì)這門課程在講授過程中,應(yīng)該時(shí)刻注意的問題。更希望學(xué)生在學(xué)習(xí)的過程中不只是從老師這里拿一些現(xiàn)成的經(jīng)驗(yàn)去使用,更重要的是讓學(xué)生學(xué)會自己去發(fā)現(xiàn)問題、解決問題,總結(jié)出一些更好的程序設(shè)計(jì)方法,為以后進(jìn)行軟件開發(fā)與設(shè)計(jì)打下良好的基礎(chǔ)。
參考文獻(xiàn):
[1]譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M].清華大學(xué)出版社,2005.
[2]蘇運(yùn)霖.計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)第1卷?基本算法[M].北京:國防工業(yè)出版社,2002.
[3]譚浩強(qiáng).C語言程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,1999.
關(guān)鍵詞:教學(xué)探索;程序設(shè)計(jì);Scratch
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:A
1 引言(Introduction)
1.1 基礎(chǔ)薄弱
目前,中小學(xué)的信息化教育內(nèi)容參差不齊,有的學(xué)??赡軙谐绦蛟O(shè)計(jì)的教學(xué),有的學(xué)校則以Word、Excel操作為主,對程序設(shè)計(jì)的入門不重視[1]。很多剛進(jìn)入大學(xué)的學(xué)生在程序化的思維方式方面還比較弱,要入高級程序設(shè)計(jì)語言的門還有很長的路要走。
1.2 課時(shí)較少
通常程序設(shè)計(jì)入門以C語言或C++語言為教學(xué)內(nèi)容。作為一種實(shí)踐性較強(qiáng)的語言,在一個(gè)學(xué)期中要完成程序設(shè)計(jì)概念和語法的教學(xué),又要在有限的時(shí)間里完成編程調(diào)試訓(xùn)練。如果學(xué)生沒有一定的基礎(chǔ)和自學(xué)能力,就很難適應(yīng)這種節(jié)奏。
1.3 抽象帶來的問題
語法、算法等抽象的教學(xué)內(nèi)容將降低學(xué)生的學(xué)習(xí)興趣,而學(xué)習(xí)興趣對教授與學(xué)習(xí)兩方面都非常重要。有的學(xué)生不能通過考核經(jīng)常就跌入補(bǔ)考和重修的循環(huán)。程序設(shè)計(jì)入門作為核心課程,這個(gè)課程出了問題將給計(jì)算機(jī)專業(yè)的后續(xù)課程帶來很多不好的影響,比如本專業(yè)學(xué)生對程序設(shè)計(jì)和其他專業(yè)技能缺乏信心以及實(shí)踐能力。
2 程序設(shè)計(jì)課程的前導(dǎo)課程(Leading program of
programming classes)
學(xué)生在程序設(shè)計(jì)課程中,一方面要努力熟悉算法抽象、程序控制等一些全新的概念,一方面會遇到很多語法錯(cuò)誤,必須要學(xué)習(xí)如何調(diào)試程序,理論加上實(shí)踐可能都是前所未有的挑戰(zhàn)。前導(dǎo)課程應(yīng)帶來有趣味的內(nèi)容,為學(xué)生補(bǔ)充各種必要的基礎(chǔ)概念,如抽象、邏輯、流程等,告訴學(xué)生如何在現(xiàn)實(shí)世界和計(jì)算機(jī)世界之間建立起一座橋梁。這樣的課程會對程序設(shè)計(jì)教學(xué)有很大幫助。
3 Scratch簡介(Introduction of scratch)
Scratch是美國麻省理工學(xué)院(MIT)媒體實(shí)驗(yàn)室開發(fā)的一套“程序語言”,利用這個(gè)軟件可以輕輕松松地創(chuàng)造出互動(dòng)式故事、動(dòng)畫、游戲、音樂等令人驚嘆的作品,是一套簡單又有趣的軟件[2]。
Scratch采用拖曳、組合的方式來設(shè)計(jì)程序。它是可視化的程序語言,具有所見即所得的功能。設(shè)計(jì)Scratch作品的過程是學(xué)生學(xué)習(xí)用計(jì)算機(jī)進(jìn)行思考、分析、解決問題的過程,還能進(jìn)行團(tuán)隊(duì)建設(shè)方面的實(shí)踐。
Scratch把程序命令歸為幾大部分:包括動(dòng)作、外觀、聲音、畫筆、變量、事件、控制等,并用顏色來分類。學(xué)生只需要了解各部分模塊的功能,按照自己的想法拖到腳本窗口,并按一定規(guī)則堆積在一起,最后在瀏覽窗口就能根據(jù)命令腳本直接運(yùn)行。通過可視化操作學(xué)生可以搭建起自己的程序,輕易地把自己的想法表達(dá)為計(jì)算機(jī)的程序。在這個(gè)抽象的過程中不用過分操心語法錯(cuò)誤等問題。
圖1為Scratch設(shè)計(jì)界面,左上為程序運(yùn)行場景,左下為程序中設(shè)計(jì)的主體對象。一個(gè)項(xiàng)目可以有多個(gè)動(dòng)畫主體(可以是動(dòng)物人物或其他一些對象),中間是可視化程序模塊,右邊是程序窗口,利用鼠標(biāo)可以把中間的程序模塊拖入右邊的程序窗口,經(jīng)過修改參數(shù)、安排程序模塊的順序和嵌套等工作,就完成了程序編制,接著程序可以在瀏覽器中執(zhí)行。
4 Scratch對程序設(shè)計(jì)教學(xué)的支持(Supports to
programming classes)[3]
4.1 抽象
現(xiàn)實(shí)世界的問題如何抽象為計(jì)算機(jī)世界的模型?第一步可以從學(xué)習(xí)抽象為計(jì)算機(jī)里的對象開始。我們把需要處理的內(nèi)容抽象為Scratch的動(dòng)畫主體,比如一個(gè)人物或一個(gè)物體。動(dòng)畫主體可以具有各種行為,比如在平面中移動(dòng)。如圖2是一個(gè)負(fù)責(zé)動(dòng)作的程序模塊,能控制動(dòng)畫主體平移到坐標(biāo)(100,200)處,其中白色的部分為可以修改的坐標(biāo)值。
4.2 結(jié)構(gòu)化程序
Scratch具有可以拖曳的結(jié)構(gòu)化模塊。設(shè)計(jì)時(shí)候只需要把模塊拖入場景中,就可以實(shí)現(xiàn)循環(huán)或選擇的程序結(jié)構(gòu),并且能實(shí)現(xiàn)循環(huán)和選擇的嵌套,制作需要的程序流程。圖3演示了循環(huán)結(jié)構(gòu)的程序模塊,repeat后面的循環(huán)次數(shù)可以修改,可以看到循環(huán)程序模塊和循環(huán)體中的其他程序模塊的顏色是不同的,它們屬于不同的功能分類。
Fig.4 Block to control choosing
其中使用的橙色模塊i是Scratch的變量模塊。Scratch程序能夠使用數(shù)字和字符串變量。變量可用來控制某個(gè)圖形的大小或個(gè)數(shù),變量還能具有不同的作用域。由此我們向?qū)W生展示了變量存儲值、變量值影響程序結(jié)果以及變量的作用域等概念。
Scratch具有列表的結(jié)構(gòu),列表可以存儲數(shù)值或字符串。列表可以具有作用域,可以獲得列表的長度。列表項(xiàng)具有添加、刪除、插入等操作,并能通過下標(biāo)獲取特定的列表項(xiàng)。列表可以幫助學(xué)生學(xué)習(xí)數(shù)組的概念。
Scratch的結(jié)構(gòu)化程序設(shè)計(jì)是可視化的,調(diào)試簡單,能幫助學(xué)生把精力集中在程序結(jié)構(gòu)上,而不需要為語法錯(cuò)誤分心。
4.3 面向?qū)ο?/p>
Scratch能夠設(shè)置動(dòng)畫主體,可以視為對象模塊。不同的動(dòng)畫主體具有獨(dú)特的屬性,可操作自己的變量,能完成獨(dú)特的任務(wù)。在后續(xù)課程中這些概念很容易引申為對象及其屬性和行為的概念,這是面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)。圖5為迷宮程序的設(shè)計(jì),其中球體是一個(gè)對象,而終點(diǎn)方塊的是另一個(gè)對象。我們可以利用鍵盤移動(dòng)球體,當(dāng)碰到方塊對象時(shí)后者能做出贏得游戲的反應(yīng)。球體對象在移動(dòng)過程中碰到障礙則會產(chǎn)生反彈。
5 Scratch作為程序設(shè)計(jì)教學(xué)前導(dǎo)課程的實(shí)踐
(Experiments in programming classes)
在參考文獻(xiàn)[4]中提到的學(xué)校已經(jīng)嘗試使用Scratch平臺作為計(jì)算機(jī)專業(yè)課程的前導(dǎo)課程。學(xué)校把學(xué)生分為兩部分,一部分基礎(chǔ)薄弱的學(xué)生在第一個(gè)學(xué)期先參加Scratch課程,到第二個(gè)學(xué)期才開始學(xué)習(xí)高級程序設(shè)計(jì)語言。而另一部分基礎(chǔ)良好的學(xué)生則在第一個(gè)學(xué)期就開始學(xué)習(xí)高級程序設(shè)計(jì)。
最終學(xué)過Scratch的學(xué)生,盡管基礎(chǔ)薄弱,他們的最終成績在通過率和平均成績方面都超過基礎(chǔ)良好的學(xué)生,并且在精通程序、喜愛專業(yè)課程、參與專業(yè)實(shí)踐等方面都有更好的表現(xiàn)。這些學(xué)生專業(yè)成績更好,對專業(yè)更熱愛,對程序設(shè)計(jì)更有信心。
6 結(jié)論(Conclusion)
程序設(shè)計(jì)是一種具有創(chuàng)造性的工作,它具有一定的抽象性,而且需要使用數(shù)學(xué)的方法去描述一些問題。這使得在語言程序設(shè)計(jì)的課程教學(xué)中,必須打破原有的教學(xué)模式和知識體系[5]。我們探索不同的方式幫助學(xué)生入門,Scratch可能是一個(gè)良好的平臺,它的可視化特性,對結(jié)構(gòu)化程序設(shè)計(jì)的支持,都能幫助學(xué)生在實(shí)踐中培養(yǎng)計(jì)算機(jī)思維方式,為程序設(shè)計(jì)入門打下堅(jiān)實(shí)基礎(chǔ),為后續(xù)課程的挑戰(zhàn)做好準(zhǔn)備。另一方面程序設(shè)計(jì)教學(xué)的困境也要需要在考核模式方面進(jìn)行改革,激勵(lì)學(xué)生重視創(chuàng)新和實(shí)踐。
參考文獻(xiàn)(References)
[1] 張傳科.如何讓抽象的設(shè)計(jì)變得精彩――LOGO程序設(shè)計(jì)與
Scratch[J].中國信息技術(shù)教育,2010,(5):29-31.
[2] 陳捷.Scratch語言簡介及應(yīng)用[J].電腦知識與技術(shù),2009,5(26):
7439-7440.
[3] 朱,鄭曉妹.C語言程序設(shè)計(jì)教學(xué)前導(dǎo)課程研究[J].軟件導(dǎo)
刊,2014,13(4):160-162.
[4] M.Rizvi,T.Humphries,D.Major,M.Jones,and H.Lauzun.A
NewCS0 Course for At-Risk Majors[C].The Proceedings of
the 24th IEEE-CS Conference on Software Engineering
Education and Training,Honolulu,Hawaii,May 2011: 314-323.
[5] 劉興林.大學(xué)工科C語言程序設(shè)計(jì)教學(xué)探索與實(shí)踐――以五
邑大學(xué)為例[J].軟件工程師,2014,17(5):39-40.
關(guān)鍵詞:Visual Basic;程序設(shè)計(jì);上機(jī)操作
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)26-1741-04
Research on Improving the Capacity of VB Computer Operations
LIU Ai-hua
(Department of Computer Engineering,Nanjing Institute of Technology,Nanjing 211167,China)
Abstract: In recent years, many colleges and universities have been Visual Basic computer programming as a Non-computer professional public basic course, many provinces and cities of our country have also been Visual Basic(hereinafter referred to VB) into the subjects of computer rank examination certificate grade 2. In years of VB teaching, the writer found that Non-computer professional students feel quite difficult in computer operation during the learning VB, because the school hours of VB is too limited and content of VB knowledge points is too more. To solve the main issues of prejudicing students to raise the capacity of VB computer operations, the writer analyses of the knowledge points of the theory and the main points of computer operations.
Key words: visual basic; computer programming; computer operations
1 引言
如果把計(jì)算機(jī)世界看成是一種現(xiàn)代信息交流的平臺或環(huán)境,那么程序設(shè)計(jì)語言就是這種世界溝通的語言。Visual Basic程序在GUI設(shè)計(jì)、繪圖、制表、運(yùn)算、通信和多媒體開發(fā)方面本身就具有簡單易行、功能強(qiáng)大等優(yōu)點(diǎn),近年來由于ASP和的流行,VB作為簡單的入門語言更是非常適合作為初學(xué)面向?qū)ο蟪绦蛟O(shè)計(jì)的教學(xué)語言。目前許多高等院校將Visual Basic程序設(shè)計(jì)作為非計(jì)算機(jī)專業(yè)的公共基礎(chǔ)課,國家和許多省市也將Visual Basic(以下簡稱VB)納入計(jì)算機(jī)二級考試的科目。非計(jì)算機(jī)專業(yè)的學(xué)生學(xué)習(xí)VB的需求主要有兩個(gè)方面:一是用VB編程解決實(shí)際問題,特別是跟自己專業(yè)相關(guān)的畢業(yè)設(shè)計(jì)問題;二是參加計(jì)算機(jī)等級考試,獲得證書,為將來就業(yè)贏得更多的機(jī)會。盡管學(xué)生的學(xué)習(xí)熱情很高,但是VB的上機(jī)操作能力普遍不高,從VB等級考試反映出筆試通過率明顯高于機(jī)試就能明顯看出。主要原因在于VB課程的學(xué)時(shí)較少,內(nèi)容太多和學(xué)習(xí)C語言相比,VB既要學(xué)習(xí)結(jié)構(gòu)化程序設(shè)計(jì)中編程知識,如三種基本結(jié)構(gòu)(順序、選擇和循環(huán))、數(shù)組、過程、文件等;還要學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計(jì)知識,如各種控件的屬性、方法和事件等。筆者在平時(shí)的教學(xué)過程中注意到了制約學(xué)生上機(jī)能力提高的主要問題,給出理論上的知識點(diǎn)和上機(jī)時(shí)的操作要領(lǐng)。
2 難點(diǎn)1:理解App.Path的含義,掌握新建、打開、保存、重命名文件等操作
很多同學(xué)保存文件時(shí)不注意觀察路徑,保存后就不知道文件存在哪里了,原因就是路徑的概念不清楚。所以在保存之前應(yīng)該要清楚新建的工程保存在哪個(gè)分區(qū)的那個(gè)文件夾下(就是路徑)。如果不理解App.Path的含義,學(xué)習(xí)圖片文件的加載(LoadPicture)、數(shù)據(jù)文件的讀入和寫出都會感覺很難;相反,如果開始多花一點(diǎn)時(shí)間理解了App.Path,并且掌握了常用文件的基本操作,學(xué)習(xí)文件部分的內(nèi)容就會比較容易理解。
1) App.Path代表的是應(yīng)用程序所在的目錄(路徑),決定了文件操作如“另存為”、“打開”時(shí)出現(xiàn)的對話框的默認(rèn)路徑。
啟動(dòng)VB后“新建”工程,此時(shí)的App.Path就是VB的安裝路徑。如果安裝在C分區(qū),通常就是“C:\Program Files\Microsoft Visual Studio\VB98”,如圖1所示;如果安裝在D分區(qū),就是”D:\……\VB98”。
如果第一次保存工程,就會出現(xiàn)“文件另存為”對話框,其中的默認(rèn)路徑就是…VB98,如圖2所示。
2) App.Path會隨著文件的操作如“另存為”、“打開”路徑而變化,相應(yīng)操作的默認(rèn)路徑也就在變化。
一般程序不要保存到…VB98,而是保存在某個(gè)指定的路徑下,比如“D:\liuah\VB\VB等級考試\上機(jī)題\djks01”,就需要在“保存對話框”中更改路徑,然后將新建的工程保存為老師或者試題要求的名稱,如“djks001”,擴(kuò)展名根據(jù)保存類型自動(dòng)添加。如果保存成功,此時(shí)的App.Path就是文件的保存路徑,如圖3所示。
保存過文件后,如果做過修改,可以再按下保存按鈕,此時(shí)不會出現(xiàn)“文件另存為”對話框,而是直接保存對文件所作的修改;如果需要重新保存,就要用“文件”“另存為”,此時(shí)“文件另存為”的默認(rèn)路徑應(yīng)該是什么呢?――就是“D:\liuah\VB\VB等級考試\上機(jī)題\djks01”,如圖4所示。
如果啟動(dòng)VB后不是“新建”而是直接打開“現(xiàn)存”工程,或者從“文件”“打開”文件如上述工程djks001.vbp,App.Path也就是你所打開文件的路徑。此時(shí)你如果再打開“另存為”對話框,默認(rèn)路徑就是上圖中的路徑。
3) 難點(diǎn)小結(jié):上機(jī)操作時(shí),首先建立工程存放的文件夾(即明確路徑),然后打開VB應(yīng)用環(huán)境,新建工程。建好之后不要急于編程,而是先將工程文件和自動(dòng)建立的窗體文件保存到自己的文件夾中(此時(shí)App.Path已經(jīng)改變),然后再開始設(shè)計(jì)界面、編寫代碼。編程結(jié)束之后,不要急于調(diào)試,而是先按“保存”按鈕(常用工具欄上的磁盤圖標(biāo))更新文件中的內(nèi)容,防止程序運(yùn)行中出現(xiàn)“死機(jī)”重啟后文件的內(nèi)容還是最開始的內(nèi)容。調(diào)試中可能還有改動(dòng),最后運(yùn)行成功再保存一下保證文件的內(nèi)容最新。
這就是“三先三再”――先建路徑再建工程,先保存文件再編程,先更新文件再調(diào)試。
3 難點(diǎn)2:理解VB的工作狀態(tài)、常見錯(cuò)誤提示的含義,掌握簡單的調(diào)試方法
大多數(shù)學(xué)生不注意VB的工作狀態(tài),出現(xiàn)錯(cuò)誤時(shí)的調(diào)試能力比較弱。作為教師應(yīng)該“授人以漁”,而不是“授人以魚”,像個(gè)救火隊(duì)員,到處幫學(xué)生解決簡單的調(diào)試問題。課堂上可以設(shè)置一些常見的錯(cuò)誤,然后用“斷點(diǎn)-單步跟蹤”法來調(diào)試程序;上機(jī)幫學(xué)生解決問題時(shí),不要直接指出錯(cuò)誤,也要用調(diào)試方法,逐步培養(yǎng)學(xué)生的自主調(diào)試能力。
1) 注意觀察VB的三種模式:設(shè)計(jì)模式、運(yùn)行模式、中斷模式:VB的應(yīng)用環(huán)境有設(shè)計(jì)模式、 運(yùn)行模式 、中斷模式,通過標(biāo)題欄來觀察區(qū)分,如圖5所示。[設(shè)計(jì)]模式用于界面設(shè)計(jì)、屬性設(shè)置和代碼編寫,按下“啟動(dòng)”按鈕,進(jìn)入[運(yùn)行]模式,如果按下“結(jié)束”按鈕則回到設(shè)計(jì)模式,按下“中斷”按鈕或出錯(cuò)則進(jìn)入“中斷”即[break]模式。主要在中斷模式[break]下調(diào)試程序――修改代碼、檢查數(shù)據(jù)等。
2) 注意觀察出錯(cuò)時(shí)的提示內(nèi)容,總結(jié)常見錯(cuò)誤的解決辦法:常見的錯(cuò)誤提示主要分為語法錯(cuò)誤和邏輯錯(cuò)誤。
語法錯(cuò)誤一般是由于編輯代碼時(shí)的輸入失誤,通常有明確的提示并且代碼顯示高亮。比如“變量未定義”、“缺少方法或者數(shù)據(jù)成員”等。解決辦法是編寫代碼最好都用小寫字體,如果是已經(jīng)定義的變量或者正確的屬性和方法,就會自動(dòng)首字母大寫。檢查時(shí)只要查沒有大寫的(定義變量時(shí),要養(yǎng)成良好習(xí)慣如首字母大寫、見名知意)。
邏輯錯(cuò)誤一般是由于運(yùn)算符使用不當(dāng)、循環(huán)缺少變化或者算法思路不正確,通常運(yùn)行后結(jié)果不對但是沒有明確的提示。解決辦法是利用調(diào)試窗口(立即窗口、本地窗口、監(jiān)視窗口),設(shè)置斷點(diǎn)和逐語句跟蹤檢查相關(guān)的變量、屬性和表達(dá)式的值是否正確。
簡單的調(diào)試方法――“斷點(diǎn)-單步跟蹤”法:在中斷模式下,在代碼窗口選擇懷疑出錯(cuò)的語句設(shè)置斷點(diǎn)(按下F9),然后運(yùn)行到斷點(diǎn)語句處(該語句沒有執(zhí)行,觀察左側(cè)小箭頭為當(dāng)前行標(biāo)記)停下,進(jìn)入中斷模式,前面執(zhí)行過的語句中的變量、屬性、表達(dá)式的值可以查看(變量和屬性可以用鼠標(biāo)指向直接查看,表達(dá)式可以在立即窗口用“?”,即Print語句查看)。如果要繼續(xù)跟蹤斷點(diǎn)以后的語句執(zhí)行,按下F8,配合“本地”視圖可以觀察表達(dá)式變化的動(dòng)態(tài)情況如圖6所示。調(diào)試結(jié)束以后要取消斷點(diǎn),在代碼窗口用光標(biāo)點(diǎn)擊斷點(diǎn)語句再按下F9,斷點(diǎn)就消失了。
3) 難點(diǎn)小結(jié):課堂上一般都會提到VB的模式、“斷點(diǎn)-單步跟蹤”法和立即、本地、監(jiān)視視圖等內(nèi)容,但是學(xué)生真正重視和運(yùn)用這些調(diào)試方法關(guān)鍵是老師在無論課堂和上機(jī)實(shí)驗(yàn)調(diào)試程序時(shí)都要不斷地運(yùn)用這些方法,引導(dǎo)和提示學(xué)生去觀察問題所在。特別是講到數(shù)組、過程、變量作用域等內(nèi)容時(shí),利用“斷點(diǎn)-單步跟蹤”法和視圖(主要是本地視圖)時(shí),學(xué)生理解效果非常好,學(xué)習(xí)調(diào)試的興趣被極大地激發(fā)起來。
4 難點(diǎn)3:理解面向?qū)ο蠛兔嫦蜻^程的主要難點(diǎn),掌握程序設(shè)計(jì)的常用技術(shù)
VB編程涉及面向?qū)ο蠛兔嫦蜻^程即結(jié)構(gòu)化程序設(shè)計(jì)兩個(gè)方面。主要難點(diǎn)包括能設(shè)計(jì)出符合操作規(guī)律的界面,并且能在合適的事件過程中添加能實(shí)現(xiàn)所要求功能的代碼,并且逐步優(yōu)化使得代碼具有一定的可讀性、通用性、可復(fù)用性。
1) 理解對象的三要素――屬性、方法和事件,設(shè)計(jì)出符合操作規(guī)律的界面。
選擇學(xué)生常見的程序界面例如用戶登錄、查詢等等作為VB教學(xué)的引例。筆者經(jīng)常使用的引例就是包含兩個(gè)窗體、一個(gè)模塊的工程,可以實(shí)現(xiàn)簡單的用戶身份檢查,登錄成功后可以查詢圖書的名稱,點(diǎn)擊查詢按鈕后可以返回圖書在列表框中是否存在;找到則顯示相應(yīng)的序號,如圖7所示。這個(gè)引例基本貫穿于整個(gè)VB的教學(xué),講解到文件時(shí),可以將圖書信息存放于文件中;講解到數(shù)據(jù)庫時(shí),可以將圖書信息建成數(shù)據(jù)庫中的表,利用SQL語句實(shí)現(xiàn)查詢。
當(dāng)然作為初步接觸程序設(shè)計(jì)的學(xué)生首先需要理解面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)即程序=對象+消息。通過FORM的Caption、Picture等屬性,Hide、Show等方法,Command Button的click事件來介紹對象的三要素。然后引導(dǎo)他們模仿著日常生活、網(wǎng)上所見到的程序界面來建立界面中的對象控件、設(shè)置對象的屬性、選擇合適的對象的事件過程并且添加上代碼即編程。這個(gè)過程就是面向?qū)ο蟪绦蛟O(shè)計(jì)的主要步驟。
2) 理解三種基本結(jié)構(gòu)――順序、選擇和循環(huán),掌握結(jié)構(gòu)化程序設(shè)計(jì)的一般思路。
事件過程中添加代碼,實(shí)現(xiàn)常用的例如數(shù)值計(jì)算、數(shù)據(jù)查詢等處理功能,這部分主要依靠面向過程的程序設(shè)計(jì)語句來實(shí)現(xiàn)。
首先需要理解面向過程即結(jié)構(gòu)化程序設(shè)計(jì)的基本語句結(jié)構(gòu)――順序、選擇和循環(huán)。順序結(jié)構(gòu)主要實(shí)現(xiàn)數(shù)據(jù)的初始化、計(jì)算、消息的顯示即數(shù)據(jù)的輸入和輸出;選擇結(jié)構(gòu)實(shí)現(xiàn)不同的數(shù)據(jù)轉(zhuǎn)向不同的處理;循環(huán)結(jié)構(gòu)是計(jì)算機(jī)高效率處理的關(guān)鍵,可以實(shí)現(xiàn)大量數(shù)據(jù)的重復(fù)處理。通過引例中的用戶身份檢查、查詢可以找到這三類結(jié)構(gòu)的語句。
然后遵循結(jié)構(gòu)化程序設(shè)計(jì)的一般思路――數(shù)據(jù)的輸入、數(shù)據(jù)處理、數(shù)據(jù)輸出,選擇合適的數(shù)據(jù)輸入方式、數(shù)據(jù)處理算法、數(shù)據(jù)輸出方式,反饋出事件驅(qū)動(dòng)后的結(jié)果。
3) 理解數(shù)組、過程和文件,設(shè)計(jì)出可讀性、通用性較好的代碼。
學(xué)習(xí)好數(shù)組的關(guān)鍵是要理解數(shù)組中的下標(biāo)變量是從數(shù)組名開始的一片連續(xù)空間,而前面學(xué)習(xí)的變量都是沒有聯(lián)系的獨(dú)立變量,所以可以利用循環(huán)變量作為下標(biāo)變量,實(shí)現(xiàn)對一組數(shù)據(jù)有規(guī)律的處理。
過程引入的目的是提高有特定功能的代碼段的復(fù)用率,例如查詢、排序等。
文件引入的目的是實(shí)現(xiàn)數(shù)據(jù)的快速讀寫,綜合了循環(huán)、數(shù)組、過程等內(nèi)容。在這里重點(diǎn)介紹順序文件的操作。
文件操作的基本思路就是三步曲:打開文件-讀寫數(shù)據(jù)-關(guān)閉文件
① 打開文件:Open ?(什么路徑下的文件名)For ?(什么操作) As ?(什么文件號)
第1個(gè)?:例如當(dāng)前路徑下的文件“in.txt”,就是App. Path & " in.txt "
第2個(gè)?:如果從給定的文件中讀入數(shù)據(jù),就是For Input;如果將數(shù)據(jù)存入某個(gè)文件,就是For Output;
第3個(gè)?:文件號一般從#1開始,如果已經(jīng)打開#1時(shí)還需要緩沖區(qū),就用#2。
② 關(guān)閉文件:Close ?(Open中對應(yīng)的文件號比如#1)
③ 讀寫數(shù)據(jù):通常是順序文件中的數(shù)據(jù)的讀出和寫入。一般分以下三種情況
如果是字符串整體讀入文本框或?qū)懭胛募?,則直接使用Input、Print(或Write)語句:
Open App.Path & "\in123.txt" For Input As 1
Input #1, StrText‘讀入數(shù)據(jù)
Close #1
Text1.Text = StrText
Open App.Path & "\out123.txt" For Output As 1
Print #1, Text1. Text ‘?dāng)?shù)據(jù)寫入文件
Close #1
如果是已知數(shù)據(jù)的個(gè)數(shù)和類型,則使用For語句和Input、Print(或Write)語句:
Open App.Path & "\" & "in0831.txt" For Input As #1
For i = 1 To 20
Input #1, Arr1(i)
Next i
Close #1
或者邊讀邊寫:
Open FileIn For Input As #1
Open FileOut For Output As #2
For i = 1 To 8
Input #1, rec.Num, rec.Name, rec.Score
Write #2, rec.Num, rec.Name, rec.Score
Next i
Close
如果是未知數(shù)據(jù)的個(gè)數(shù),則使用Do-Loop循環(huán)、EOF函數(shù)和Input、Print(或Write)語句。EOF()函數(shù)為True表示讀到了文件的結(jié)尾。
Open App. Path & "\" & StrM For Input As #1
Open App. Path & "\" & StrN For Output As #2
Do While Not EOF(1)
Input #1, g
N = N + 1
S = S+ g
Loop
Close #1
S = S/N
Write #2, S
Close #2
注意:比較Print和Write輸出格式的區(qū)別。
Print語句的輸出和窗體、圖片框類似,只是在輸出內(nèi)容前添加在那個(gè)文件號中輸出。數(shù)據(jù)項(xiàng)之間是空格可以有標(biāo)準(zhǔn)格式(逗號”,”分隔)和緊湊格式(分號”;”分隔)。
例如Num、Name、Score。其中Name為字符串類型,定長為10
Print #2, rec.Num, rec.Name, rec.Score‘標(biāo)準(zhǔn)格式,輸出的效果為如圖8
Print #2, rec.Num;rec.Name ;rec.Score ‘緊湊格式,輸出的效果為如圖9
Write語句的輸出只有緊湊格式,并且數(shù)據(jù)項(xiàng)之間有逗號(“,”)分隔,字符串會自動(dòng)添加雙引號。
例如:Write #2, rec.Num, rec.Name, rec.Score輸出的效果如圖10
5 結(jié)束語
以上介紹了提高上機(jī)操作能力的重點(diǎn)理論知識和操作要點(diǎn)。除了課堂教學(xué)中的引導(dǎo)以外,在上機(jī)實(shí)踐的時(shí)候能及時(shí)幫助學(xué)生掌握調(diào)試技能,感受到調(diào)試通過后成功的喜悅,從而排除對編程的畏難情緒,建立對程序設(shè)計(jì)的興趣也是非常的重要。再一次重申本文開頭的觀點(diǎn),如果把計(jì)算機(jī)世界看成是一種現(xiàn)代信息交流的平臺或環(huán)境,那么VB程序設(shè)計(jì)語言就是這種世界最為容易入門的語言。所以學(xué)好VB,并且能真正在各領(lǐng)域加以運(yùn)用,這才是學(xué)習(xí)的初衷。
參考文獻(xiàn):
[1] 龔沛曾.Visual Basic程序設(shè)計(jì)簡明教程[M].2版.北京:高等教育出版社,2003.
關(guān)鍵詞:專業(yè)課;常用軟件;結(jié)構(gòu)化;原型法;形式化;設(shè)計(jì)
中圖分類號:G718.5;G710 文獻(xiàn)標(biāo)志碼:A 文章編號:1008-3561(2016)36-0013-01
當(dāng)前,普遍采用的軟件設(shè)計(jì)方法有結(jié)構(gòu)化分析與設(shè)計(jì)方法 (SD/SA)、Jackson(JSP/JSD)系統(tǒng)開發(fā)方法、原型法、生命周期方法等多種方法。為了更好地展現(xiàn)各種方法的特性,本文從設(shè)計(jì)思想、設(shè)計(jì)步驟或流程、優(yōu)缺點(diǎn)等方面對各軟件設(shè)計(jì)方法進(jìn)行了相應(yīng)對比和分析,為軟件設(shè)計(jì)教學(xué)工作提供一定的參考。
一、結(jié)構(gòu)化分析與設(shè)計(jì)方法(SD/SA)
結(jié)構(gòu)化分析方法又稱作SD方法或SA方法,它是通過把現(xiàn)實(shí)世界逐一描繪為各種數(shù)據(jù)在信息系統(tǒng)中的一種流動(dòng),同時(shí)在數(shù)據(jù)不斷流動(dòng)過程中進(jìn)行數(shù)據(jù)和信息之間的轉(zhuǎn)化?;舅枷肟擅枋鰹椋夯谝环N將功能逐一分解的設(shè)計(jì)模式,不斷把復(fù)雜和綜合問題逐層進(jìn)行分解,以便對問題進(jìn)行簡化――自頂向下,逐層細(xì)化,從而將復(fù)雜的程序結(jié)構(gòu)劃分為多個(gè)功能完全不相關(guān)或者獨(dú)立的小模塊,最終達(dá)到最簡化的過程。優(yōu)點(diǎn):比較直觀、應(yīng)用簡單、容易理解,目前已經(jīng)獲得了較為成功的實(shí)踐經(jīng)驗(yàn),在市場推廣方面有較大的優(yōu)勢。不足:首先,因?yàn)閺某橄笏季S出發(fā)對模塊進(jìn)行細(xì)化,所以得到的子模塊方案各異,共性較低;其次,由于對問題理解上的偏差,導(dǎo)致繼承性較為困難;再次,該方法的自適應(yīng)能力相對較弱,其設(shè)計(jì)的軟件重用率不高,從而延緩了開發(fā)周期;最后,設(shè)計(jì)文檔時(shí)常出現(xiàn)與表示體系不一致的現(xiàn)象。
二、Jackson(JSP/JSD)系統(tǒng)開發(fā)方法
Jackson開發(fā)方法分為JSP和JSD兩種。(1)JSP開發(fā)方法。JSP方法是一種面向數(shù)據(jù)結(jié)構(gòu)的程序設(shè)計(jì)方案。其基本思路是按照輸入、輸出和內(nèi)部信息的三種數(shù)據(jù)結(jié)構(gòu)形式進(jìn)行設(shè)計(jì),從而把對數(shù)據(jù)結(jié)構(gòu)的描述轉(zhuǎn)變成一種程序結(jié)構(gòu)的描述方案,因此可實(shí)現(xiàn)通過數(shù)據(jù)結(jié)構(gòu)來反映程序結(jié)構(gòu)的方法。其基本思想可描述為:首先采用自頂向下的思想按功能對系統(tǒng)進(jìn)行劃分,并逐步求出各子問題的解,將軟件開發(fā)流程視為軟件的生命周期,最終建立一種所謂的瀑布模型?;緦?shí)現(xiàn)步驟可描述為:分析、設(shè)計(jì)、編碼、測試、運(yùn)行及后期維護(hù)。優(yōu)點(diǎn):簡單易學(xué);準(zhǔn)入門檻底,對設(shè)計(jì)者的要求不高。不足:難以滿足規(guī)模較大的軟件系統(tǒng)設(shè)計(jì),且JSP方法難以對付結(jié)構(gòu)沖突問題。因此,該法僅適用于小型程序的開發(fā)。(2)JSD方法。此方法稱作杰克遜系統(tǒng)開發(fā)方法,它以事件的驅(qū)動(dòng)為中心,將相連的順序組合構(gòu)成程序進(jìn)程,系統(tǒng)設(shè)計(jì)模型可進(jìn)一步抽象成若干條以通信方式進(jìn)行相聯(lián)的進(jìn)程?;驹O(shè)計(jì)思想描述為:首先通過仿真來理解并描述客觀事實(shí),其次添加相應(yīng)輸出功能,最后通過某種收到實(shí)現(xiàn)系統(tǒng)間的轉(zhuǎn)換。方法實(shí)現(xiàn)步驟為:實(shí)體的動(dòng)作分析過程實(shí)體結(jié)構(gòu)分析定義初始模型功能描述決定系統(tǒng)時(shí)間特性硬件和軟件實(shí)現(xiàn)。優(yōu)點(diǎn):實(shí)現(xiàn)了同類軟件和客觀世界間的關(guān)系研究,并確定了各類軟件系統(tǒng)和軟件現(xiàn)實(shí)決策間的界限。不足:對客觀現(xiàn)實(shí)同類軟件間的相互關(guān)系認(rèn)識不夠完整,有待提升;構(gòu)造的軟件實(shí)現(xiàn)結(jié)構(gòu)較為復(fù)雜,有待簡化;對軟件結(jié)構(gòu)的相關(guān)描述不完善;JSD在實(shí)現(xiàn)階段較為費(fèi)時(shí)和復(fù)雜,且需要手動(dòng)實(shí)現(xiàn)。
三、原型法
原型法可分為示例型和漸增型兩大類。其實(shí)現(xiàn)思路為:利用設(shè)計(jì)程序自動(dòng)生成軟件工程運(yùn)行環(huán)境,以便構(gòu)造出簡化的實(shí)際系統(tǒng)模型,從而便于軟件開發(fā)人員和用戶間進(jìn)行有效交流,大大提高了設(shè)計(jì)的靈活性。該方法實(shí)現(xiàn)過程要求迅速,否則便失去了意義。開發(fā)基本步驟可大致分為四步:系統(tǒng)簡化原型實(shí)現(xiàn)系統(tǒng)修改最終實(shí)現(xiàn)。優(yōu)點(diǎn):能適應(yīng)各種模糊不清和變化不定的用戶需求。不足:需要具備較強(qiáng)的知識理論基礎(chǔ),同時(shí)需要以相應(yīng)的硬件環(huán)境作支撐。
四、生命周期法
生命周期法學(xué)也把軟件開發(fā)過程分為若干獨(dú)立階段。在軟件實(shí)現(xiàn)過程中,各階段分別完成一定任務(wù),并實(shí)現(xiàn)最終的軟件配置程序/文檔。在完成各階段性任務(wù)過程中,可運(yùn)用結(jié)構(gòu)分析(SA)技術(shù)、結(jié)構(gòu)設(shè)計(jì)(SD)技術(shù)和其他相關(guān)輔助工具。在編程過程中,使用了SP(結(jié)構(gòu)化程序設(shè)計(jì))語言,在各階段結(jié)束時(shí)需要進(jìn)行細(xì)致的復(fù)審過程,只有各項(xiàng)參數(shù)合格后才能進(jìn)行下一步驟的工作。因此,該方法將軟件的生命周期依次分為系統(tǒng)需求分析、系統(tǒng)設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)、系統(tǒng)測試、系統(tǒng)維護(hù)五大階段。優(yōu)點(diǎn):該方法采取了自頂向下、逐步求精的設(shè)計(jì)思想;模塊化設(shè)計(jì)過程中,運(yùn)用了結(jié)構(gòu)化程序設(shè)計(jì)方法,采用了嚴(yán)格的復(fù)審及測試程序,保障了軟件的可維護(hù)性。不足:對時(shí)變系統(tǒng)不太適用,開發(fā)出的軟件穩(wěn)定性、可重用性和可維護(hù)性都比較差。
五、結(jié)束語
總之,以上各種軟件設(shè)計(jì)方法均存在一定的優(yōu)勢和缺陷。因此,相關(guān)專業(yè)的師生在設(shè)計(jì)時(shí),應(yīng)根據(jù)設(shè)計(jì)的主客觀條件進(jìn)行相應(yīng)的選擇,提高設(shè)計(jì)能力,充分利用自身和環(huán)境優(yōu)勢完成軟件的設(shè)計(jì)。
參考文獻(xiàn):
摘 要:Visual FoxPro是技工院校計(jì)算機(jī)專業(yè)的基礎(chǔ)專業(yè)課程,也是開設(shè)最廣泛的數(shù)據(jù)庫類課程。通過這門課程的學(xué)習(xí),可以為技校生獲得就業(yè)必備的計(jì)算機(jī)等級證書以及具有相應(yīng)的專業(yè)素質(zhì)打下基礎(chǔ)。因此,教師在實(shí)訓(xùn)教學(xué)過程中運(yùn)用案例法進(jìn)行教學(xué)具有特殊的現(xiàn)實(shí)意義。
關(guān)鍵詞 :案例 數(shù)據(jù)庫 應(yīng)用
由于技工院校處于本科、高職院校與中專院校的夾層地帶,教學(xué)理論的難度與深度不如本科與高職院校,單純的實(shí)操能力培養(yǎng)不如中專院校。經(jīng)過幾年的實(shí)踐,我們發(fā)現(xiàn)要使技工院校的計(jì)算機(jī)專業(yè)建設(shè)走出困境,就必須大膽進(jìn)行課程體系改革,為此,筆者所在技師學(xué)院一方面不斷根據(jù)招聘企業(yè)的專業(yè)技能要求調(diào)整計(jì)算機(jī)專業(yè)課程體系的內(nèi)容,刪除、淘汰一些過時(shí)的課程,增加一些新技術(shù)課程;另一方面在實(shí)訓(xùn)教學(xué)中引入案例法,從學(xué)生學(xué)習(xí)的興趣點(diǎn)培養(yǎng)入手,在加強(qiáng)學(xué)生基本的實(shí)操能力訓(xùn)練的基礎(chǔ)之上,逐步加大程序設(shè)計(jì)能力的培養(yǎng),收到良好的教學(xué)效果。筆者就以Visual FoxPro6.0數(shù)據(jù)庫技術(shù)與應(yīng)用為例,簡述案例法在教學(xué)中的實(shí)際運(yùn)用。
一、案例教學(xué)法的內(nèi)涵
案例教學(xué)法就是在教學(xué)過程中,教師通過設(shè)置一個(gè)難易適中的案例,引導(dǎo)學(xué)生循序漸進(jìn)地展開探究活動(dòng),從而在活動(dòng)的過程中潛移默化地培養(yǎng)學(xué)生發(fā)現(xiàn)問題、分析問題、解決問題的能力。這種教學(xué)方法對技校計(jì)算機(jī)專業(yè)教學(xué)來說具有特殊的意義,一是技校生受身心發(fā)展?fàn)顩r的制約,邏輯思維能力不強(qiáng),而采用具體案例,就更加直觀、形象,更容易激發(fā)學(xué)生的學(xué)習(xí)興趣;二是便于教師組織、開展教學(xué),教師通過案例,可以隨時(shí)發(fā)現(xiàn)學(xué)生對于所講授的內(nèi)容掌握的情況,從而調(diào)整教學(xué)進(jìn)度與難度,保證教學(xué)效果的優(yōu)化;三是有利于學(xué)生程序設(shè)計(jì)能力的培養(yǎng)。學(xué)生通過一個(gè)具體案例問題的分析、解決,很容易舉一反三,由此及彼,這樣就刺激了學(xué)生的“發(fā)散思維”,這為他們今后走向企業(yè)必經(jīng)的獨(dú)立工作與獨(dú)立思考打下了基礎(chǔ)。
二、Visual FoxPro6.0數(shù)據(jù)庫技術(shù)與應(yīng)用課程的內(nèi)容
數(shù)據(jù)庫技術(shù)是從20世紀(jì)60年代末開始發(fā)展起來的計(jì)算機(jī)軟件技術(shù),隨著網(wǎng)絡(luò)技術(shù)、多媒體技術(shù)的不斷發(fā)展,數(shù)據(jù)庫技術(shù)在各領(lǐng)域得到越來越多地應(yīng)用。Visual FoxPro作為20世紀(jì)90年代興起的高級數(shù)據(jù)庫管理軟件,它是一種完善的編程及數(shù)據(jù)管理語言,在小型數(shù)據(jù)庫系統(tǒng)開發(fā)中得到了廣泛應(yīng)用。而Visual FoxPro6.0是一種32位關(guān)系數(shù)據(jù)庫管理系統(tǒng),它在20世紀(jì)80年代流行的Xbase系列軟件基礎(chǔ)上增加了新的功能特性,性能不斷完善,技術(shù)不斷提高。作為關(guān)系數(shù)據(jù)庫管理系統(tǒng),Visual FoxPro6.0提供了一個(gè)集成化開發(fā)環(huán)境,使數(shù)據(jù)的組織和操作變得方便、簡單,它不僅支持傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì),還支持面向?qū)ο蟪绦蛟O(shè)計(jì),適合開發(fā)小型數(shù)據(jù)庫應(yīng)用系統(tǒng),適合計(jì)算機(jī)與非計(jì)算機(jī)專業(yè)學(xué)生學(xué)習(xí)。根據(jù)教育部計(jì)算機(jī)基礎(chǔ)教育白皮書的要求,數(shù)據(jù)庫應(yīng)用技術(shù)不僅是計(jì)算機(jī)專業(yè)的必修課程,也是非計(jì)算機(jī)專業(yè)“1+X”課程體系中第二層次的重要方向之一。
三、案例法在Visual FoxPro實(shí)訓(xùn)教學(xué)中的實(shí)踐探索
由于技工院校計(jì)算機(jī)專業(yè)數(shù)據(jù)庫應(yīng)用課程的教學(xué)目標(biāo)定位于培養(yǎng)技校生信息技術(shù)應(yīng)用素質(zhì),注重?cái)?shù)據(jù)庫基礎(chǔ)知識和基本理論的融會貫通,強(qiáng)調(diào)數(shù)據(jù)庫應(yīng)用能力的培養(yǎng)。因此,案例教學(xué)法的采用必須兼顧科學(xué)性與實(shí)用性,一方面教學(xué)內(nèi)容緊扣Visual FoxPro知識的體系結(jié)構(gòu),在介紹Visual FoxPro基礎(chǔ)知識后,逐步深入地講解數(shù)據(jù)庫與表操作、查詢與視圖、SQL的應(yīng)用、數(shù)據(jù)與數(shù)據(jù)運(yùn)算、程序設(shè)計(jì)基礎(chǔ)、表單及控件的應(yīng)用、菜單設(shè)計(jì)、報(bào)表設(shè)計(jì)、項(xiàng)目管理等內(nèi)容,深入淺出地向?qū)W生講解程序、軟件、軟件開發(fā)方法、結(jié)構(gòu)化程序設(shè)計(jì)、面向?qū)ο笤O(shè)計(jì)等概念,為學(xué)生的專業(yè)學(xué)習(xí)打下扎實(shí)的理論基礎(chǔ);另一方面將案例貫穿整個(gè)教學(xué)過程。在教學(xué)的第一個(gè)環(huán)節(jié)就引入案例—“學(xué)生管理系統(tǒng)”,后續(xù)的教學(xué)內(nèi)容圍繞該案例展開,最終完成整個(gè)案例的實(shí)現(xiàn)。這樣就使教學(xué)充分體現(xiàn)了案例教學(xué)的特點(diǎn)。由于案例經(jīng)過精心設(shè)計(jì),選擇學(xué)生比較熟悉,比較有代表性的“學(xué)生管理系統(tǒng)”,整個(gè)教學(xué)內(nèi)容講述這個(gè)綜合應(yīng)用的案例,每一個(gè)知識點(diǎn)提出具體的任務(wù)和要求,形成一個(gè)小的、具體的案例,這樣就形成案例與任務(wù)共同驅(qū)動(dòng)教學(xué)展開的良好情境,也更有利于技校生循序漸進(jìn)地掌握數(shù)據(jù)庫應(yīng)用的相關(guān)知識。
四、小結(jié)