陳榮鑫
(集美大學(xué) 計(jì)算機(jī)工程學(xué)院,福建 廈門 361021)
面向?qū)ο缶幊淌悄壳案咝S?jì)算機(jī)專業(yè)的一門重要學(xué)科基礎(chǔ)課程。面向?qū)ο笤O(shè)計(jì)思想在現(xiàn)代軟件開發(fā)實(shí)踐中非常重要,其指導(dǎo)作用體現(xiàn)在小至對程序功能的編程實(shí)現(xiàn),大至項(xiàng)目開發(fā)層面的軟件工程,因此設(shè)計(jì)思想的培養(yǎng)成為面向?qū)ο缶幊探虒W(xué)中的一個(gè)關(guān)鍵點(diǎn)。傳統(tǒng)的面向?qū)ο缶幊痰慕虒W(xué)過程中,通常采用主流的面向?qū)ο缶幊陶Z言,Java 或C++等作為授課載體。授課內(nèi)容組織往往以介紹語言的語法及功能為主線,再加入面向?qū)ο蟮脑O(shè)計(jì)方法。教學(xué)的出發(fā)點(diǎn)基本上局限于對特定一門編程語言的介紹,而未能真正凸顯其中的設(shè)計(jì)思想[1]。由于在現(xiàn)有的教學(xué)課程體系中,面向?qū)ο笳n程往往不是首門編程課程,學(xué)生通常已經(jīng)完成一門高級程序語言設(shè)計(jì)的系統(tǒng)學(xué)習(xí),比如大多數(shù)學(xué)完了C 語言,具備了一些自學(xué)新語言的基礎(chǔ),如果該門課的教學(xué)定位僅限于對另一門新的高級語言的學(xué)習(xí),將難以體現(xiàn)課堂教學(xué)的必要性。少數(shù)經(jīng)典教材[2]在內(nèi)容闡述中注重強(qiáng)調(diào)設(shè)計(jì)思想,但包含的內(nèi)容較為龐雜,因課時(shí)所限,教學(xué)中需要加以選擇。
在編程開發(fā)的相關(guān)課程體系中,面向?qū)ο缶幊陶n程發(fā)揮著承上啟下的關(guān)鍵作用,如圖1 所示,本門課的前導(dǎo)課程是低年級開設(shè)的C 語言程序設(shè)計(jì),其面向過程的基本語法和模塊化編程方式為學(xué)習(xí)面向?qū)ο蟮母呒壵Z言提供了編程基礎(chǔ),而數(shù)據(jù)結(jié)構(gòu)課程則為解決實(shí)際問題提供了算法設(shè)計(jì)基礎(chǔ)。后續(xù)直接相關(guān)的課程有JavaEE 架構(gòu)技術(shù)和Android 應(yīng)用開發(fā)。由于.Net 應(yīng)用開發(fā)采用面向?qū)ο蟮腃#作為授課載體,因此與本門課有較強(qiáng)相關(guān)性。在后續(xù)的軟件工程課程中,面向?qū)ο蟮能浖こ谭椒ㄊ且粋€(gè)重要組成內(nèi)容,而面向高年級開設(shè)的創(chuàng)新創(chuàng)業(yè)類課程是培養(yǎng)學(xué)生解決復(fù)雜工程問題的必修綜合實(shí)踐類課程,面向?qū)ο笤O(shè)計(jì)與編程技術(shù)在很多軟件開發(fā)類選題中不可或缺。畢業(yè)設(shè)計(jì)作為最后一個(gè)實(shí)踐環(huán)節(jié),同樣有大量軟件類選題采用面向?qū)ο蠹夹g(shù)完成設(shè)計(jì)與開發(fā)。
在當(dāng)前廣泛開展的工程教育認(rèn)證中,如何培養(yǎng)學(xué)生解決復(fù)雜工程問題的能力是一個(gè)十分關(guān)鍵的議題[3]。面向?qū)ο蟮乃枷氡举|(zhì)是要求盡可能按照人類認(rèn)識世界的方法和思維方式分析和解決問題,而面向?qū)ο缶幊棠軌蚺囵B(yǎng)學(xué)生面向?qū)ο蟮脑O(shè)計(jì)思想和軟件開發(fā)技能,因此可以成為培養(yǎng)學(xué)生解決復(fù)雜工程問題的一個(gè)重要途徑。本門課的教學(xué)除了向?qū)W生提供面向?qū)ο笳Z言工具的編程技能訓(xùn)練,還可以通過設(shè)計(jì)思想的系統(tǒng)訓(xùn)練向?qū)W生提供更高層次的指導(dǎo)。
圖1 編程開發(fā)主要相關(guān)課程
教學(xué)內(nèi)容組織綱要見表1。將面向?qū)ο缶幊痰慕虒W(xué)內(nèi)容劃分為5 個(gè)模塊,同時(shí)對應(yīng)3 種層級,其中基礎(chǔ)篇用于介紹Java 語言的基本語法,包括數(shù)據(jù)類型、數(shù)組、字符串、運(yùn)算符、表達(dá)式和語句等內(nèi)容。鑒于學(xué)生已經(jīng)學(xué)過C語言程序設(shè)計(jì),這部分內(nèi)容與C 語言有很大交集,采用的是面向過程的設(shè)計(jì)方法,基本上簡要介紹就可以。學(xué)完這部分后,學(xué)生基本上就可以使用Java 進(jìn)行面向過程的軟件開發(fā)。接下來講授的是面向?qū)ο笃@部分是面向?qū)ο缶幊陶Z言特有的內(nèi)容,也是本課程的核心部分之一,該篇要引入面向?qū)ο笤O(shè)計(jì)的基本思想和設(shè)計(jì)方法。學(xué)完該篇后,學(xué)生基本上可以使用Java 進(jìn)行面向?qū)ο蟮木幊?。功能篇展示了作為一門完整編程語言所能提供的解決常見實(shí)際問題的基本設(shè)施,這些功能包括異常處理、泛型、GUI 界面設(shè)計(jì)、數(shù)據(jù)庫操作、多線程編程等方面。有了前面面向?qū)ο蟮幕A(chǔ)和Java實(shí)現(xiàn)功能支持,接下來講授設(shè)計(jì)模式篇。該篇是面向?qū)ο笤O(shè)計(jì)思想的延伸和提升部分,也是本課程的另一個(gè)核心部分,其內(nèi)容包括經(jīng)典設(shè)計(jì)模式和其他擴(kuò)展設(shè)計(jì)模式等。最后一篇是綜合應(yīng)用,通過較為完整地解析一個(gè)應(yīng)用案例,把語言工具和設(shè)計(jì)思想加以融合應(yīng)用,該案例以重構(gòu)的方式逐步完善,把學(xué)過的關(guān)鍵知識點(diǎn)串聯(lián)起來。
表1 教學(xué)內(nèi)容組織綱要
考慮對設(shè)計(jì)思想系統(tǒng)化解析支撐度不夠顯著的教學(xué)內(nèi)容壓縮課時(shí),主要涉及一些利用編程語言實(shí)現(xiàn)軟件具體功能的內(nèi)容部分,如界面開發(fā)、數(shù)據(jù)庫應(yīng)用開發(fā)和多線程編程等,而一些對案例講解沒有直接支撐的獨(dú)立專題,則可根據(jù)實(shí)際情況作為選講內(nèi)容,或作為附錄安排學(xué)生課后自學(xué),如文件IO、網(wǎng)絡(luò)編程等部分。偏重設(shè)計(jì)思想層級的教學(xué)內(nèi)容包括面向?qū)ο笃驮O(shè)計(jì)模式篇。
面向?qū)ο蠹夹g(shù)能有效用于描述現(xiàn)實(shí)世界中各種對象及其相互之間的關(guān)系,包括抽象、封裝、繼承、多態(tài)等基本特征,因此,面向?qū)ο蟮某绦蛑邪鞣N表示事物概念的類,表示具體事物的對象,表示消息操作規(guī)范的接口,體現(xiàn)不同抽象層次的繼承關(guān)系,體現(xiàn)不同操作方式和結(jié)果的多態(tài)現(xiàn)象等。這些面向?qū)ο缶幊碳夹g(shù)的核心內(nèi)容需要逐一解析清楚,同時(shí)要闡明各部分知識點(diǎn)之間的聯(lián)系。內(nèi)容構(gòu)建時(shí)需要精心編制案例以配合理論講解,案例的特點(diǎn)是簡明扼要,能反映基本設(shè)計(jì)思想,最好有一定的實(shí)際意義和趣味性。展示案例時(shí)應(yīng)當(dāng)在類、對象、方法等面向?qū)ο蟮幕驹氐暮侠響?yīng)用和組織上重點(diǎn)強(qiáng)調(diào),而不能在算法和功能具體實(shí)現(xiàn)上著墨過多。在介紹綜合設(shè)計(jì)較復(fù)雜的內(nèi)容時(shí),為了直觀地展示設(shè)計(jì)意圖,引入U(xiǎn)ML 描述手段。在銜接和綜合這兩個(gè)關(guān)鍵環(huán)節(jié)中教學(xué)內(nèi)容的組織如下。
(1)與面向過程編程方式的銜接。通過一個(gè)銀行賬戶處理的案例,演示把面向過程的實(shí)現(xiàn)方式改造為面向?qū)ο蟮膶?shí)現(xiàn)方式的過程。應(yīng)用場景中存在不同類型的銀行賬戶,要實(shí)現(xiàn)存取款、轉(zhuǎn)賬等業(yè)務(wù)。先用C 語言實(shí)現(xiàn)該案例,采用結(jié)構(gòu)體描述賬戶信息,增加一個(gè)結(jié)構(gòu)體成員描述賬戶類型以避免一個(gè)結(jié)構(gòu)體僅對應(yīng)一種賬戶;業(yè)務(wù)功能采用函數(shù)實(shí)現(xiàn),但數(shù)據(jù)和函數(shù)無法獲得訪問保護(hù);業(yè)務(wù)操作需要直接調(diào)用函數(shù),邏輯上顯得凌亂。而用Java 語言實(shí)現(xiàn)時(shí),采用類描述賬戶信息,把業(yè)務(wù)功能以方法形式封裝在類里;同時(shí)通過訪問權(quán)限設(shè)置提供了數(shù)據(jù)域和方法域的保護(hù);不同類型賬戶則優(yōu)雅地通過繼承方式表示;業(yè)務(wù)處理時(shí)通過對象的方法調(diào)用實(shí)現(xiàn)消息傳遞。由于學(xué)生剛要接觸面向?qū)ο缶幊蹋@個(gè)案例盡可能做到簡潔,但需完整可運(yùn)行以便做對比。通過對比,學(xué)生對面向?qū)ο蟮奶攸c(diǎn)有了初步認(rèn)識,體會(huì)到面向?qū)ο笤O(shè)計(jì)的優(yōu)勢。
(2)小綜合。小綜合是介紹完面向?qū)ο蠡驹O(shè)施后的一次綜合應(yīng)用講解,同時(shí)對面向?qū)ο笤O(shè)計(jì)思想進(jìn)行階段總結(jié)。舉一個(gè)經(jīng)典游戲“星際爭霸”的應(yīng)用場景。場景中有常規(guī)的人族(Terran)和蟲族(Zerg),它們既有共同的技能也有各自獨(dú)特的技能;此外要求新增一種新種族(XRace),該族同時(shí)具備人族和蟲族的特殊技能。授課時(shí)展示設(shè)計(jì)和開發(fā)的思路,先根據(jù)需求定義各種概念,通過類和接口進(jìn)行描述,理順各個(gè)概念之間的關(guān)系,然后寫出代碼框架,此框架中的類和接口描述都是描述體為空的情況,但之間的繼承或?qū)崿F(xiàn)關(guān)系已經(jīng)用Java 關(guān)鍵字寫好了。接下來在該代碼框架上補(bǔ)充功能方法,逐步完善功能的代碼實(shí)現(xiàn)。在測試場景時(shí),通過對上轉(zhuǎn)型對象的操作來驗(yàn)證多態(tài)效果,以功能規(guī)范的視角測試接口回調(diào)。講解過程中需要強(qiáng)調(diào)基本設(shè)計(jì)原則,比如面向抽象原則、單一責(zé)任原則等。
設(shè)計(jì)模式是人們在解決特定問題時(shí)總結(jié)出來的可復(fù)用的設(shè)計(jì)方案。軟件領(lǐng)域中,影響最為深遠(yuǎn)堪稱經(jīng)典的是由Erich Gamma 等人總結(jié)出的面向?qū)ο筌浖_發(fā)的23 種設(shè)計(jì)模式[4]。此外,人們在各種軟件架構(gòu)的開發(fā)過程中,也發(fā)展出很多實(shí)用框架級設(shè)計(jì)模式,這些模式在經(jīng)典的23 種設(shè)計(jì)模式之外。現(xiàn)代軟件系統(tǒng)的開發(fā)離不開設(shè)計(jì)模式的有效應(yīng)用,比如JavaEE 框架體系中就用到各種設(shè)計(jì)模式,Andriod 系統(tǒng)亦是如此。如果沒有設(shè)計(jì)模式的預(yù)備知識,對這些框架的理解和應(yīng)用將難以深入。由于設(shè)計(jì)模式源于面向?qū)ο笤O(shè)計(jì)思想,然而又超越了面向?qū)ο笳Z言的語法設(shè)施層面,這部分內(nèi)容應(yīng)當(dāng)適當(dāng)融入課程教學(xué)中[5],以豐富面向?qū)ο笤O(shè)計(jì)思想的內(nèi)涵。鑒于設(shè)計(jì)模式內(nèi)容龐雜而課時(shí)有限,有必要選擇較為常用的模式進(jìn)行講解。這部分教學(xué)內(nèi)容構(gòu)建如下。
(1)經(jīng)典設(shè)計(jì)模式。根據(jù)設(shè)計(jì)模式的目的,經(jīng)典設(shè)計(jì)模式分為3 類,即主要用于創(chuàng)建對象的創(chuàng)建型模式,主要用于處理類或?qū)ο蟮慕M合的結(jié)構(gòu)型模式,以及主要用于描述對類或?qū)ο蟮慕换ズ吐氊?zé)分配的行為型模式。為了便于對比,從這3 類模式中,每類分別選取兩種常用模式進(jìn)行講解。創(chuàng)建型選擇單例(Singleton)模式和工廠方法(Factory Method)模式。學(xué)生學(xué)完這類模式后,將體會(huì)到對象的生成不再局限于new 操作,還可以根據(jù)實(shí)際需求選擇更強(qiáng)大的生成方式。行為型選擇命令(Command)模式和觀察者(Observer)模式。命令模式展示了如何進(jìn)行調(diào)用功能的封裝。觀察者模式是JDK 中高頻使用的模式,JDK已提供相應(yīng)的類和接口可以快捷地實(shí)現(xiàn)該模式。命令模式對于新增命令很容易擴(kuò)展;而觀察者模式則實(shí)現(xiàn)了主題和觀察者之間的解耦,二者均體現(xiàn)了開-閉設(shè)計(jì)原則的優(yōu)勢。結(jié)構(gòu)型選擇適配器(Adapter)模式和代理(Proxy)模式。適配器模式提供了一種轉(zhuǎn)換機(jī)制,使得接口不兼容的事物可以一起工作,提高了復(fù)用的可能性。代理模式能為其他對象提供一種代理以控制對這個(gè)對象的訪問,分布式計(jì)算架構(gòu)中的RMI 和Corba 即采用了這種機(jī)制,應(yīng)用場景十分廣泛。學(xué)完這類模式后,將體會(huì)到構(gòu)建事物之間的關(guān)系不再局限于簡單的繼承和組合,還可以通過巧妙的設(shè)計(jì)去滿足特定的需求。選用于解析設(shè)計(jì)模式的實(shí)例應(yīng)盡量有實(shí)際意義,讓學(xué)生理解設(shè)計(jì)模式在解決實(shí)際問題中的作用,體會(huì)到設(shè)計(jì)之美,進(jìn)而在軟件開發(fā)實(shí)踐中考慮加以靈活應(yīng)用。
(2)擴(kuò)展設(shè)計(jì)模式。在當(dāng)前很多面向?qū)ο筌浖?gòu)建中非常流行的設(shè)計(jì)方案,然而又在經(jīng)典23 種設(shè)計(jì)模式之外,我們稱之為擴(kuò)展設(shè)計(jì)模式,如MVC(模型—視圖—控制器)、DAO(數(shù)據(jù)訪問對象)、DI(依賴注入)等模式。由于這些設(shè)計(jì)模式在企業(yè)級軟件框架如JavaEE 中應(yīng)用廣泛,且能很好地展示面向?qū)ο蟮脑O(shè)計(jì)思想,有必要加以介紹。MVC 模式實(shí)現(xiàn)了業(yè)務(wù)邏輯、數(shù)據(jù)和界面顯示的解耦,為軟件系統(tǒng)分層可擴(kuò)展提供了可能性。DAO 模式實(shí)現(xiàn)數(shù)據(jù)訪問邏輯與業(yè)務(wù)邏輯的分離,能簡化代碼量并提高程序的可移植性。DI 模式則提高了軟件組件的可復(fù)用性,便于搭建一個(gè)可靈活配置、易擴(kuò)展的平臺(tái)。這些實(shí)用的擴(kuò)展模式進(jìn)一步充實(shí)了教學(xué)內(nèi)容。
1)理論課教學(xué)方法。
在面向?qū)ο髢?nèi)容的教學(xué)中,強(qiáng)調(diào)面向?qū)ο笤O(shè)計(jì)思想在分析和設(shè)計(jì)過程中的作用,以實(shí)際例子和應(yīng)用場景的引入,讓學(xué)生理解面向?qū)ο蟪绦蛟O(shè)計(jì)語言所提供的各種語法設(shè)施的必要性和優(yōu)越性。比如隨著應(yīng)用系統(tǒng)類別的增加,通過共性提煉引入了抽象類,并改造應(yīng)用場景中的調(diào)用方式,以面向抽象的風(fēng)格進(jìn)行重構(gòu);而對于語言設(shè)施的關(guān)鍵技術(shù)細(xì)節(jié)需要解析到位,讓學(xué)生知其然同時(shí)也知其所以然。比如在對象初始化和清理的講解時(shí),深入解析在復(fù)雜的繼承條件下,以及各種訪問權(quán)限下,靜態(tài)與非靜態(tài)對象的生命周期,可結(jié)合演示在集成開發(fā)環(huán)境里設(shè)置斷點(diǎn)進(jìn)行跟蹤調(diào)試。對于設(shè)計(jì)模式內(nèi)容的教學(xué),原則是簡明扼要,突出設(shè)計(jì)思想的應(yīng)用。通過對精選的幾個(gè)重要的設(shè)計(jì)模式的深入解析,以點(diǎn)帶面,引導(dǎo)學(xué)生去自學(xué)其他模式。使用簡潔而有趣味性的案例,增強(qiáng)授課效果。強(qiáng)調(diào)設(shè)計(jì)的規(guī)范性,但不強(qiáng)調(diào)算法的設(shè)計(jì)與實(shí)現(xiàn),以免分散學(xué)習(xí)注意力。在綜合類例子的講解時(shí),突出重構(gòu)設(shè)計(jì)思想。舉同一個(gè)應(yīng)用場景案例,根據(jù)需求的變化,設(shè)計(jì)與實(shí)現(xiàn)逐步迭代,適時(shí)引入設(shè)計(jì)模式進(jìn)行重構(gòu)。讓學(xué)生在學(xué)習(xí)過程中體會(huì)到軟件開發(fā)過程是從無到有、從簡單到復(fù)雜的迭代過程,符合事物發(fā)展的一般規(guī)律。
此外,積極采用教學(xué)輔助手段幫助學(xué)生理解設(shè)計(jì)思想。自主開發(fā)一款面向?qū)ο蟪绦蚩梢暬c評分系統(tǒng)(OOPVS 系統(tǒng)),能實(shí)現(xiàn)程序的可視化處理,并提供對程序的評分功能。該軟件的可視化功能采用標(biāo)準(zhǔn)UML 類圖方式顯示,用戶可以在系統(tǒng)里直觀地查看面向?qū)ο蟪绦虻慕Y(jié)構(gòu),有助于理解較為復(fù)雜的設(shè)計(jì)思路,尤其是帶有各種設(shè)計(jì)模式的情況。程序評分功能可對指定的程序進(jìn)行比照處理,給出相應(yīng)的相似度評分值,以便為改進(jìn)設(shè)計(jì)提供參考。
2)實(shí)驗(yàn)課教學(xué)方法。
配套理論課的實(shí)驗(yàn)設(shè)計(jì)題目有驗(yàn)證型實(shí)驗(yàn)和設(shè)計(jì)型實(shí)驗(yàn)。驗(yàn)證型實(shí)驗(yàn)要求對章節(jié)主要案例進(jìn)行調(diào)試并分析,促進(jìn)基本知識點(diǎn)的掌握。對于綜合類的驗(yàn)證題要求對較多相關(guān)知識融會(huì)貫通,比如要求對某個(gè)開源框架軟件進(jìn)行分析,發(fā)現(xiàn)并總結(jié)其中涉及的設(shè)計(jì)模式。設(shè)計(jì)型題目既要緊扣教學(xué)知識點(diǎn),給出具體的要求,又要讓學(xué)生有自由發(fā)揮的余地,鼓勵(lì)具有個(gè)性化的設(shè)計(jì)方案。綜合類的設(shè)計(jì)題目應(yīng)該覆蓋主要的知識點(diǎn),給出的要求需有層次性,比如基本要求是設(shè)計(jì)某些指定的類和接口,完成特定的功能,以及應(yīng)用指定的設(shè)計(jì)模式完成重構(gòu);進(jìn)階要求是嘗試采用某幾種設(shè)計(jì)模式的組合進(jìn)行重構(gòu),分析重構(gòu)的效果。此外,我們嘗試通過OOPVS 系統(tǒng)對學(xué)生完成的作品與參考實(shí)現(xiàn)進(jìn)行對比,通過積極反饋評分的結(jié)果給學(xué)生成就感,進(jìn)而激發(fā)學(xué)生的學(xué)習(xí)興趣,形成教與學(xué)的良性互動(dòng)。
學(xué)習(xí)效果的檢驗(yàn)需要通過合理的考核機(jī)制來完成。在本門課教學(xué)實(shí)踐中,對應(yīng)各個(gè)教學(xué)階段設(shè)置了平時(shí)、中期和期末這3 種考核。
平時(shí)考核是對理論課后布置的思考題和實(shí)驗(yàn)課布置的實(shí)驗(yàn)作業(yè)的完成情況進(jìn)行考查。實(shí)驗(yàn)作業(yè)的題目內(nèi)容緊扣章節(jié)內(nèi)容,每次作業(yè)一般包括驗(yàn)證型和設(shè)計(jì)型兩類題目。
中期考核安排在課程中期進(jìn)行,這時(shí)已完成面向?qū)ο笃慕虒W(xué)。通過對平時(shí)考核情況進(jìn)行甄別,按一定比例抽取好、中、差三類學(xué)生進(jìn)行口試??谠嚨膬?nèi)容采用隨機(jī)抽取做過的實(shí)驗(yàn)作業(yè)題目進(jìn)行問答,可根據(jù)實(shí)際情況臨場提新問題。中期考核的重要性在于可根據(jù)考核結(jié)果對存在的問題進(jìn)行總結(jié),為下一步的教學(xué)調(diào)整提供依據(jù)。
期末考核在課程結(jié)束后進(jìn)行??紤]到本門課程的教學(xué)目標(biāo)是培養(yǎng)學(xué)生的設(shè)計(jì)思想和編程技能,考核形式不采用傳統(tǒng)的試卷方式,而是完成一個(gè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)并參加答辯。學(xué)習(xí)完最后的綜合應(yīng)用篇后,學(xué)生對面向?qū)ο缶幊讨R體系和開發(fā)技能有了整體的把握,初步具備解決較為復(fù)雜工程問題的能力??己艘髮W(xué)生全面應(yīng)用面向?qū)ο蟮脑O(shè)計(jì)思想完成一個(gè)完整系統(tǒng)的分析與設(shè)計(jì),采用面向?qū)ο蟮恼Z言進(jìn)行編碼實(shí)現(xiàn)。給出個(gè)性化的不同選題以降低抄襲的可能性;題目要求條目具有層次性,有必做要求和選做要求。口試前一周公布選題,要求全員口試,未參加口試的學(xué)生期末考核成績記零分??谠囍巴瑯有枰鶕?jù)學(xué)生的平時(shí)學(xué)習(xí)情況進(jìn)行區(qū)分,以便提問有的放矢,節(jié)省時(shí)間并提高實(shí)效。本門課的課程成績根據(jù)平時(shí)成績占40%、期末考核成績占60%的比例綜合給出。
根據(jù)面向?qū)ο缶幊陶n程的定位,把設(shè)計(jì)思想的培養(yǎng)作為教學(xué)的核心,克服了傳統(tǒng)講授一門編程語言的局限性,促進(jìn)了學(xué)生設(shè)計(jì)思維的拓展。為了系統(tǒng)化把設(shè)計(jì)思想的解析融入教學(xué)中,改革的教學(xué)內(nèi)容包含面向?qū)ο笤O(shè)計(jì)和設(shè)計(jì)模式應(yīng)用這兩個(gè)有遞進(jìn)關(guān)系的不同層面的內(nèi)容,既兼顧了面向?qū)ο缶幊痰恼Z言工具內(nèi)容,又突出了面向?qū)ο笤O(shè)計(jì)思想。設(shè)計(jì)思想雖然以Java 語言作為載體進(jìn)行教學(xué),但對C++、C#等其他主流的面向?qū)ο笳Z言仍然適用。在教學(xué)實(shí)施過程中,根據(jù)教學(xué)內(nèi)容發(fā)展與之相適應(yīng)的課堂教學(xué)方法和考核方法,使得操作可行且有實(shí)效。筆者在最近一屆實(shí)施教改后的學(xué)生學(xué)習(xí)情況中看到了較好的教學(xué)成效。比如在筆者講授的JavaEE 架構(gòu)技術(shù)課程中發(fā)現(xiàn),學(xué)生對軟件框架的理解程度和應(yīng)用掌握情況普遍好于往屆;而在后續(xù)創(chuàng)新創(chuàng)業(yè)這門綜合實(shí)踐課程中,涉及面向?qū)ο筌浖_發(fā)時(shí),不少學(xué)生能自覺應(yīng)用面向?qū)ο笤O(shè)計(jì)思想,結(jié)合采用合適的設(shè)計(jì)模式完成系統(tǒng)實(shí)現(xiàn),獲得較為理想的效果。