文章編號(hào):1672-5913(2008)06-0081-02
摘要:本文以大學(xué)本科計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)學(xué)生為對(duì)象,總結(jié)分析了“面向?qū)ο蟪绦蛟O(shè)計(jì)與C++”課程教學(xué)及實(shí)驗(yàn)環(huán)節(jié)中存在的問題,并提出一些解決方法和建議。
關(guān)鍵詞:面向?qū)ο蠹夹g(shù);C++;教學(xué);學(xué)習(xí)方法
中圖分類號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
“面向?qū)ο蟪绦蛟O(shè)計(jì)與C++”課程不僅是高校計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)大學(xué)生學(xué)習(xí)C++的一門必修課,而且在一些非計(jì)算機(jī)專業(yè)中也常作為選修課,還受到許多計(jì)算機(jī)專業(yè)人士及程序設(shè)計(jì)人員的青睞。但是,由于課程的抽象性、復(fù)雜性,加之學(xué)習(xí)方法的問題,使得一些學(xué)生感覺非常吃力。本文根據(jù)筆者親身教學(xué)經(jīng)驗(yàn)和講授過程中出現(xiàn)的問題,討論相應(yīng)的解決方法和學(xué)習(xí)建議,希望能起到拋磚引玉的作用。
1復(fù)習(xí)不到位
該課程一般在大學(xué)二年級(jí)開設(shè),因此學(xué)生的學(xué)習(xí)態(tài)度都比較端正、積極。在課堂上能夠集中精力,認(rèn)真聽課,并參與互動(dòng)。但是在課下工作不到位,主要表現(xiàn)是前導(dǎo)課程的知識(shí)遺忘和新講授內(nèi)容復(fù)習(xí)的不夠及時(shí)。
我們知道,C++中的基礎(chǔ)知識(shí)中很大一部分源于其前導(dǎo)課程C語(yǔ)言。C的語(yǔ)法在C++中是兼容的,C++是更高級(jí)的支持面向?qū)ο蠹夹g(shù)的C,很多知識(shí)點(diǎn)都是相同,如語(yǔ)句的基本結(jié)構(gòu)、各種類型的指針等??赡苡捎诟袅艘粋€(gè)學(xué)期,記憶不夠扎實(shí),加上新內(nèi)容沒有復(fù)習(xí)到位,導(dǎo)致接受更多的新知識(shí)時(shí),理解困難。學(xué)習(xí)的過程應(yīng)該是發(fā)揮主觀能動(dòng)性,加工研磨現(xiàn)有知識(shí)并為已所用的過程。
俗話說“溫故而知新”,課程的基礎(chǔ)知識(shí)務(wù)必應(yīng)該做到及時(shí)記憶,盡可能多地理解消化。因?yàn)楹芏鄷r(shí)候,一些知識(shí)點(diǎn)可能需要反復(fù)理解才能慢慢吃透。例如,對(duì)于多態(tài)性的認(rèn)識(shí)、類型兼容規(guī)則的理解和運(yùn)用等。
2抽象問題能力較差
“面向?qū)ο蟪绦蛟O(shè)計(jì)與C++”課程中的主要概念之一就是“類”,因此需要掌握的基本技能之一就是依據(jù)所要解決的問題,按照客觀事物的特點(diǎn)進(jìn)行數(shù)據(jù)抽象和功能抽象,如圖1。
圖1 面向?qū)ο蟪绦蛟O(shè)計(jì)中對(duì)類進(jìn)行抽象的過程
教學(xué)過程中發(fā)現(xiàn)大部分學(xué)生可以做到合理規(guī)劃,但個(gè)別細(xì)節(jié)部分考慮不周,甚至有誤。例如,設(shè)計(jì)“矩形類”中計(jì)算面積的成員函數(shù)時(shí),形式參數(shù)的確定問題。仔細(xì)考慮,不難判斷出該函數(shù)不需要從外界獲得信息,只要從內(nèi)部獲得私有數(shù)據(jù)成員長(zhǎng)和寬進(jìn)行計(jì)算即可。但個(gè)別學(xué)生所設(shè)計(jì)的成員函數(shù)需要從外界獲得長(zhǎng)和寬,顯然不合理,一則破壞了類的封裝性,二則無法保護(hù)數(shù)據(jù)。類似這樣的問題,應(yīng)從勤于思考,循序漸進(jìn),提煉問題本質(zhì),培養(yǎng)抽象能力方面著手解決。
3復(fù)雜程序的組織思路不清晰
根據(jù)教學(xué)進(jìn)度安排,課程伊始就會(huì)從軟件工程的角度介紹面向?qū)ο蟮姆治?OOA)、面向?qū)ο蟮脑O(shè)計(jì)(OOD)、面向?qū)ο蟮木幊?OOP)、面向?qū)ο蟮臏y(cè)試(OOT)和面向?qū)ο蟮木S護(hù)(OOSM)等軟件開發(fā)過程的五個(gè)階段。
可能由于教材例題以及習(xí)題比較簡(jiǎn)單,所以在上機(jī)實(shí)驗(yàn)時(shí)大部分學(xué)生是直接進(jìn)入了OOP階段,對(duì)著計(jì)算機(jī)屏幕編程。而一旦遇到復(fù)雜問題就無所適從,不知如何下手。解決方法是進(jìn)行詳細(xì)的OOA和OOD,充分利用UML進(jìn)行設(shè)計(jì),OOP階段只按照OOA階段中制定好的設(shè)計(jì)步驟編寫代碼。UML與程序設(shè)計(jì)語(yǔ)言無關(guān),不但可用于表示C++中的類和類間的關(guān)系,而且適用于以面向?qū)ο蠹夹g(shù)來描述任何類型的系統(tǒng)。通過課程學(xué)習(xí),應(yīng)當(dāng)會(huì)用UML分析類和類間關(guān)系,并掌握繪制UML圖的一種專業(yè)軟件,如Visio 2003、Rational Rose、或SkyDesigner等。
4程序調(diào)試能力弱
性能良好的程序和軟件不可能一蹴而就,沒有錯(cuò)誤,因此調(diào)試是程序員最基本的技能之一。按照出錯(cuò)原因,可將之分為兩類:一類是程序編譯錯(cuò)誤,此時(shí)可根據(jù)output窗口提示的出錯(cuò)位置和出錯(cuò)原因改正,并且每更正一處錯(cuò)誤就重新編譯一次;另一類是程序邏輯錯(cuò)誤,這種錯(cuò)誤需要通過認(rèn)真分析,先定位錯(cuò)誤,再改正之。在Visual C++ 6.0環(huán)境下,解決方法是利用Debug窗口中提供的工具,功能分別包括:重新開始、中止程序、中斷執(zhí)行、應(yīng)用更改;進(jìn)入下一語(yǔ)句、跳入、跳過、跳出、執(zhí)行到光標(biāo)處;快速觀察變量;觀察變量、觀察寄存器、觀察內(nèi)存、觀察堆棧和匯編等。
需要注意的是,在第二類錯(cuò)誤的調(diào)試過程中,程序員應(yīng)該比計(jì)算機(jī)清楚某一時(shí)刻程序的運(yùn)行狀態(tài),做到事先就心中有數(shù),然后有順序地逐步檢驗(yàn),才能定位錯(cuò)誤、解決錯(cuò)誤。
5不規(guī)范的編程習(xí)慣
典型的表現(xiàn)之一是所編寫的程序格式混亂,沒有縮進(jìn)或亂縮進(jìn)。正確的縮進(jìn)方法應(yīng)該是“Tab”鍵的形式,這樣做出來的縮進(jìn)位置是固定不變的,不能用空格代替。在Visual C++ 6.0環(huán)境下,還可借助智能縮進(jìn)工具,方法是選中需要縮進(jìn)部分,然后在主菜單“Edit”中選擇“Advanced”,點(diǎn)擊“Format Selection”或者快捷鍵“Alt+F8”。嚴(yán)格規(guī)范的程序代碼層次清晰,一目了然,可以降低代碼出錯(cuò)率,例如能夠有效避免括號(hào)不配對(duì)等低級(jí)問題,也便于后期的程序維護(hù)與修改工作。
另一個(gè)典型表現(xiàn)是程序沒有注釋或者注釋全是廢棄的代碼。雖然在編譯和執(zhí)行時(shí)注釋會(huì)被忽略,注釋本身不會(huì)增加可執(zhí)行文件的大小,但是注釋的目的是方便代碼的閱讀和代碼維護(hù)。因此,一定要按照統(tǒng)一的規(guī)范來書寫足夠的注釋,尤其在相對(duì)復(fù)雜的程序設(shè)計(jì)問題和大型項(xiàng)目研發(fā)中注釋及說明文檔更加必不可少?,F(xiàn)行的代碼規(guī)范要求注釋量應(yīng)占到程序代碼比例的20%左右,即100行程序中包含20行注釋。注釋可以書寫在代碼中的任意位置,但是一般寫在代碼的開始處或者結(jié)束處。Visual C++ 6.0中,正確的注釋方法是以“//”為起始的行注釋和“/*….*/”為起止符的多行注釋。最后,修改程序代碼時(shí),一定要更新注釋,同時(shí)建議記錄相應(yīng)的修改日期和程序修改人。
參考文獻(xiàn)
[1] 鄭莉.C++語(yǔ)言程序設(shè)計(jì)[M]. 北京:清華大學(xué)出版社.