高永麗
(楚雄師范學院信息科學與技術(shù)學院,云南 楚雄 675000)
面向?qū)ο蠹夹g(shù) (OOT)是一種軟件開發(fā)和程序設(shè)計技術(shù),是建立在“對象”概念基礎(chǔ)上的方法學。面向?qū)ο蠹夹g(shù)的運用使程序更安全、可靠、易重用、易維護。在硬件、數(shù)據(jù)庫、人工智能技術(shù)、分布式計算、網(wǎng)絡(luò)、操作系統(tǒng)等應用中都顯示出其良好的優(yōu)越性。因而,該項技術(shù)成為當今主流的計算機編程技術(shù)。面向?qū)ο蟪绦蛟O(shè)計課程自然成為高校計算機專業(yè)的一門重要的基礎(chǔ)課,在整個專業(yè)的知識體系中占有非常重要的地位。
由于面向?qū)ο蟮脑O(shè)計思想是在原來結(jié)構(gòu)化程序設(shè)計方法基礎(chǔ)上的一個發(fā)展和質(zhì)的飛躍,因此內(nèi)容繁多,兼具抽象性和復雜性。面向?qū)ο蟪绦蛟O(shè)計課程也成為目前公認的比較難學的課程。而且學習材料 (教材)往往面面俱到,知識點廣,如果不考慮整個學習的主線結(jié)構(gòu) (包括實驗)和方法,對每一章節(jié)都通學一遍,勢必變成“拉完”式學習,不能真正意義上掌握好這門編程技術(shù)及應用。
筆者長期從事C++語言、JAVA語言、VB語言等“面向?qū)ο蟪绦蛟O(shè)計”類課程的教學,總結(jié)教學上存在的一些主要問題,歸納面向?qū)ο蟪绦蛟O(shè)計課程的學習策略如下:
程序代碼設(shè)計最基本的結(jié)構(gòu)無外乎就是順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)?!拜斎胼敵稣Z句”、“賦值語句”、“條件語句”、“循環(huán)語句”這些老一代程序員耳熟能詳?shù)臇|西,依然是面向?qū)ο缶幊套罨A(chǔ)的編程因子,即使是發(fā)展到了如今的面向?qū)ο蠹夹g(shù),動輒把“面向過程”視作淘汰的東西,也顯然是錯誤的。這就有如建房子,不論多宏大的工程,還是少不了“砌磚”這個基本功。掌握好這些基本的語句語法,依然是學好程序設(shè)計的基礎(chǔ)。為了提高學習興趣,可輔予可視化設(shè)計。
大家都知道操作系統(tǒng)是硬件之上的第一層軟件系統(tǒng),無疑我們編寫的程序都將依托于某個操作系統(tǒng)來運行。作為編程者,就應該對操作系統(tǒng)有一個更專業(yè)的理解。以目前兩大主流操作系統(tǒng)(Windows和Linux)之一的Windows為例,學習者應該了解Windows操作系統(tǒng)的基本內(nèi)核是怎么組成和運行的;了解硬件驅(qū)動的機制、注冊表的作用和原理;各種DLL程序的作用;Windows的消息機制;最重要的是了解Windows給外部提供的編程接口,即常說的Windows API,了解API函數(shù)組成,記住一些常用的API函數(shù)。Windows的編程模式是事件驅(qū)動的,這使得它與用戶之間的交互更友好,而這種Windows特有的“消息”激勵機制正是學習者在學習面向?qū)ο缶幊糖皯撓刃欣斫獾摹_@是我們深入掌握面向?qū)ο缶幊痰谋U稀?/p>
很多學習者往往在學習了一個知識點以后就會被要求進行實踐性編程。通常的情況是老師給個任務,要求學生設(shè)計完成其功能。學生恰恰就是在這里出現(xiàn)卡殼。認為困難度較大。其實對初學者而言,要求其去寫程序不如叫他先多讀懂一些經(jīng)典的程序段。以一個VC++程序為例:
這是一個用CRect類定位鼠標的例子,雖然短短一段程序,卻包含面向?qū)ο笾幸恍┗镜母拍?,包括對象引用作為參?shù)、指針調(diào)用、方法調(diào)用等。大量的讀代碼,學習者會漸漸熟悉一些基本技術(shù)應用方法,理解一些課堂上或教材上晦澀難懂的概念。編程就像寫文章,每個概念都有前因后果,試想一下,當你毫不費力地讀懂大段的原代碼,離你自己動手編程還會遠嗎?
數(shù)據(jù)是所有計算機系統(tǒng)要處理的對象。數(shù)據(jù)庫是計算機應用系統(tǒng)中的一種專門管理數(shù)據(jù)資源的系統(tǒng)。數(shù)據(jù)庫系統(tǒng)不從具體的應用程序出發(fā),而是立足于數(shù)據(jù)本身的管理,它將所有數(shù)據(jù)保存在數(shù)據(jù)庫中,進行科學的組織,并借助于數(shù)據(jù)庫管理系統(tǒng),以它為中介,與各種應用程序或應用系統(tǒng)接口相接合使之能方便地使用數(shù)據(jù)庫中的數(shù)據(jù)。所以對于編程來說,數(shù)據(jù)庫語言就是基礎(chǔ),無論你用JAVA、C++還是C#,程序最終要操作的都是數(shù)據(jù)庫中的數(shù)據(jù),要操作這些數(shù)據(jù)就得懂點基本的sql語言。會設(shè)計基本的數(shù)據(jù)庫表。記住,任何時候都不要把所學的知識孤立起來,在計算機學科的廣闊領(lǐng)域里,知識都是融會貫通相輔相成的。
基于課程體系的面向?qū)ο蟪绦蛟O(shè)計,其實踐教學內(nèi)容僅僅是針對教學環(huán)節(jié)進行設(shè)定,不同教師不同教材的實驗內(nèi)容和重點大相徑庭,但大多數(shù)都未能很好地使用其中主流的圖形化的面向?qū)ο蟮牟僮鹘缑嫫脚_、達不到一定規(guī)模的綜合性實驗,所以不能很好地體現(xiàn)面向?qū)ο蟪绦蛟O(shè)計的架構(gòu)層次。因此,對于學習者,要想全面而實質(zhì)性了解面向?qū)ο缶幊蹋€須上升到工程的角度來完成一個簡單的系統(tǒng)設(shè)計,這應該是掌握面向?qū)ο蠹夹g(shù)的宏觀有效方法。
以設(shè)計一個“學生管理系統(tǒng)”為例,問題看似簡單,但學習者不僅要運用面向?qū)ο蟮姆椒ǚ治龀橄蟪霭ā皩W生類”在內(nèi)的各種類體,分析它們之間復雜的繼承、派生、多態(tài)性,還要通過系統(tǒng)的需求分析把它們架構(gòu)在不同的層次上,配以設(shè)計恰當?shù)臄?shù)據(jù)庫系統(tǒng),才能完成學生管理的基本功能。真正體驗到程序員要面臨的問題和面向?qū)ο蠹夹g(shù)的優(yōu)點。
學生對程序設(shè)計成就感的期望值很高,但對學習將遇到的困難心理準備不足,容易產(chǎn)生畏難與逃避情緒,不利于知識和技術(shù)的掌握。由于面向?qū)ο蠹夹g(shù)是一門新興的技術(shù),所以目前大多數(shù)高校在教學體系中,仍然將“面向過程”程序設(shè)計 (如C語言)作為學生接觸程序設(shè)計的起點和基礎(chǔ),這樣,學生往往有了先入為主的“面向過程”概念,接下來才接觸面向?qū)ο蟪绦蛟O(shè)計,雖然能比較輕松地掌握一些面向?qū)ο蟮幕靖拍钜约昂唵蔚某绦蚓帉懛椒?,但在開發(fā)實際系統(tǒng)時,卻容易受過程化語言的影響,往往還是從非面向?qū)ο蟮慕嵌热シ治觥⒃O(shè)計并實現(xiàn)系統(tǒng)。人為地增加了從過程化程序設(shè)計到面向?qū)ο蟪绦蛟O(shè)計思想的轉(zhuǎn)化成本,這也是導致面向?qū)ο蠹夹g(shù)學習質(zhì)量不高的原因之一。針對基于面向?qū)ο蠹夹g(shù)的程序設(shè)計類課程知識面廣、語法復雜、面向?qū)ο笏枷腚y以形成和應用等問題,總結(jié)學生學習的一些對策和方法,以期提升學習者的學習效果,構(gòu)建更為完善的學習質(zhì)量保障機制。
[1]譚浩強.C++程序設(shè)計 [M].北京:清華大學出版社,2004.
[2]侯俊杰.深入淺出MFC[M].武漢:華中科技大學出版社,2000.
[3]顏志軍.Visual C++數(shù)據(jù)庫開發(fā):典型模塊與實例精講 [M].北京:電子工業(yè)出版社,2007.