郭艷燕 童向榮 楊軍
摘要:以達到CDIO工程教育目標為導向,結(jié)合面向?qū)ο笙盗姓n程抽象性強、蘊含知識面廣、實戰(zhàn)性強的特點,提出以面向?qū)ο缶幊陶Z言、面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)、面向?qū)ο蠼UZ言UML、面向?qū)ο蠓治雠c設(shè)計、面向?qū)ο蟮能浖こ陶n程為主線,對面向?qū)ο笙盗姓n程的教學知識體系和教學實踐體系進行整合和優(yōu)化,建立從初級基礎(chǔ)到中級提高再到高級深入的三段式課程體系。
關(guān)鍵詞:面向?qū)ο?;編程語言;數(shù)據(jù)結(jié)構(gòu);軟件建模;軟件工程;CDIO
0、引言
面向?qū)ο蠹夹g(shù)已成為軟件工程學中的主流技術(shù),在現(xiàn)代軟件企業(yè)中得到廣泛應(yīng)用。面向?qū)ο蠹夹g(shù)的優(yōu)點是可以構(gòu)建與現(xiàn)實世界相對應(yīng)的問題模型,并保持它們的結(jié)構(gòu)、關(guān)系和行為模式,基本特征是抽象性、封裝性、繼承性和多態(tài)性。面向?qū)ο蠹夹g(shù)所涵蓋的領(lǐng)域廣泛,可應(yīng)用在軟件開發(fā)的全過程;面向?qū)ο笏枷脒€能應(yīng)用在編程語言、數(shù)據(jù)結(jié)構(gòu)、算法分析與設(shè)計、軟件建模、軟件工程等各領(lǐng)域。相關(guān)領(lǐng)域的知識形成了計算機及軟件工程專業(yè)完整的面向?qū)ο笳n程體系。
課程體系是指既相互獨立、又相互聯(lián)系的各門課程組成的有機整體,是按照學生認知規(guī)律、能力培養(yǎng)規(guī)律和知識的科學層次規(guī)律形成的具有專業(yè)特色的課程系統(tǒng)。面向?qū)ο笙盗姓n程體系是計算機和軟件工程專業(yè)以面向?qū)ο蠹夹g(shù)為驅(qū)動的課程體系,通過一系列課程讓學生掌握基本的面向?qū)ο笾R,深入理解面向?qū)ο蠹夹g(shù)的精髓和實質(zhì),全面了解面向?qū)ο笙嚓P(guān)領(lǐng)域的主要內(nèi)容和關(guān)鍵技術(shù)。合理科學的課程體系是實現(xiàn)專業(yè)培養(yǎng)目標以及取得良好教學質(zhì)量和效果的重要保證,直接影響學生掌握知識的廣度和深度,因此對面向?qū)ο笙盗姓n程教學模式進行探索與實踐有著重要意義。
1、面向?qū)ο笙盗姓n程教學模式改革的總體思路
面向?qū)ο笙盗姓n程將面向?qū)ο蟮南嚓P(guān)知識完美結(jié)合,完成從基于UML建模語言描述的面向?qū)ο蟮姆治龊驮O(shè)計過程,到最終以面向?qū)ο缶幊陶Z言實現(xiàn)的軟件工程過程。這一系列課程緊密銜接,不斷發(fā)展,并隨著業(yè)界許多新方法和新技術(shù)的不斷涌現(xiàn),其教學內(nèi)容、教學環(huán)節(jié)和教學方法都需要與時俱進。
2、面向?qū)ο笙盗姓n程學習的3個階段
面向?qū)ο笙盗姓n程以面向?qū)ο缶幊陶Z言和面向?qū)ο髷?shù)據(jù)結(jié)構(gòu)為基礎(chǔ),以面向?qū)ο蠼樘岣?,以面向?qū)ο蠓治鲈O(shè)計和面向?qū)ο蟮能浖こ虨榫C合深入,形成由淺到深的3個學習階段。面向?qū)ο笙盗姓n程各階段的知識體系如圖1所示,每個階段要達到的能力目標如圖2所示。這3個階段的學習不是孤立的,而是緊密聯(lián)系的,知識層次由淺入深,逐漸系統(tǒng)化,專業(yè)技能由簡單到綜合。
2.1初級階段
初級階段通過學生學習面向?qū)ο缶幊陶Z言,幫助學生直觀理解和掌握面向?qū)ο蠹夹g(shù)的基礎(chǔ)知識;通過學生學習面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu),幫助學生加強理解面向?qū)ο笏枷?,提高編程能力、?shù)據(jù)抽象能力以及在具體實踐和工程中解決問題的能力。
通過面向?qū)ο笙盗姓n程中的C++程序設(shè)計與Java程序設(shè)計課程中的語法代碼結(jié)構(gòu),直觀了解面向?qū)ο蟪绦蛟O(shè)計的基本概念與方法,對抽象、封裝、繼承和多態(tài)形成初步認識,建立面向?qū)ο蟪绦蛟O(shè)計的基本思想,掌握基本的面向?qū)ο缶幊谭椒ǎ妹嫦驅(qū)ο缶幊陶Z言解決一般應(yīng)用問題,為后續(xù)的專業(yè)課程奠定面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ),這是面向?qū)ο蠹夹g(shù)課程體系的初級基礎(chǔ)階段建設(shè)目標。對于面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)采用面向?qū)ο蟮姆椒?,根?jù)數(shù)據(jù)的邏輯結(jié)構(gòu)進行抽象,將數(shù)據(jù)的存儲和操作進行分類封裝,提高抽象數(shù)據(jù)類型的可擴展性和可復用性,尤其為面向?qū)ο缶幊陶Z言的高級應(yīng)用如C++的STL和Java中泛型的理解打下基礎(chǔ)。
2.2中級階段
中級階段通過對軟件的可視化建模,提高學生對面向?qū)ο笏枷氲睦斫獬潭?。統(tǒng)一建模語言UML課程通過可視化方法為軟件系統(tǒng)建模,便于學生對軟什開發(fā)分析和設(shè)計階段的理解和系統(tǒng)展示,為軟件開發(fā)后期的面向?qū)ο缶幊虒崿F(xiàn)提供技術(shù)保證。通過課程學習,學生可以從具體和抽象兩方面更好地理解軟件設(shè)計模型與代碼實現(xiàn)之間的關(guān)系,使用相應(yīng)的建模工具(如Rose、EA、Visio等),用標準化的圖形方式展示所設(shè)計的軟件系統(tǒng)。
面向?qū)ο蟮慕UZ言UML是一種定義良好、易于表達、功能強大的可視化建模語言,目前已成為軟件行業(yè)建模的標準語言。使用UML可以幫助用戶對軟件系統(tǒng)進行面向?qū)ο蟮拿枋龊徒?,并且支持軟件開發(fā)全過程。例如,用例圖展示系統(tǒng)需求;用類圖展示系統(tǒng)分析設(shè)計階段的靜態(tài)結(jié)構(gòu);用順序圖、通信圖、交互縱覽圖、定時圖、狀態(tài)圖展示系統(tǒng)的動態(tài)交互;用組件圖和配置圖展示系統(tǒng)的物理視圖以及使用用例進行系統(tǒng)測試。
2.3高級階段
高級階段通過軟件工程的實踐的應(yīng)用,幫助學生深入理解面向?qū)ο笏枷?。面向?qū)ο蠓治雠c設(shè)計課程主要介紹面向?qū)ο蠓治雠c設(shè)計的基本原則和方法、UML的軟件應(yīng)用以及設(shè)計模式相關(guān)知識。學生通過課程學習可掌握面向?qū)ο笙到y(tǒng)分析、設(shè)計的原理與方法,通過案例分析熟練使用UML語言描述面向?qū)ο蟮姆治雠c設(shè)計。面向?qū)ο蟮能浖こ讨饕菑拿嫦驅(qū)ο蟮慕嵌葘浖こ踢M行重新演繹。將面向?qū)ο蠓治鲈O(shè)計與軟件工程相結(jié)合,可以使學生更好地理解軟件開發(fā)過程各個階段的目標和任務(wù)。
通過對面向?qū)ο笙盗姓n程3個階段由淺入深、從點到線的學習,學生能夠系統(tǒng)了解和掌握面向?qū)ο蟮南嚓P(guān)知識和技術(shù),利用面向?qū)ο笏枷脒M行軟件需求分析,通過軟件建模完成軟件的系統(tǒng)分析和設(shè)計,采用面向?qū)ο缶幊陶Z言完成軟件功能實現(xiàn),對軟件系統(tǒng)進行測試和維護。學生通過軟件開發(fā)全過程,可以掌握不同軟件開發(fā)方法中的分析設(shè)計技巧和不同階段中開發(fā)和建模工具的使用,增強思維能力和綜合技術(shù)應(yīng)用能力。
3、面向?qū)ο笙盗姓n程改革的主要方面
3.1優(yōu)化面向?qū)ο笙盗姓n程的知識體系結(jié)構(gòu)
優(yōu)化面向?qū)ο笙盗姓n程的知識體系結(jié)構(gòu),必須處理好面向?qū)ο笙盗姓n程的教學內(nèi)容前后銜接問題,設(shè)置好3個學習階段的教學內(nèi)容。原有系列課程的知識體系結(jié)構(gòu)存在前期準備知識不完整、知識點銜接不連續(xù)、部分知識點多次同角度重復等問題。這些問題的存在使得學生的課程學習效果不能達到培養(yǎng)目標的要求,需要教師對系列課程的理論教學知識體系結(jié)構(gòu)重新整合和優(yōu)化。在優(yōu)化教學知識體系的過程中,教師需遵循以下兩個原則。
(1)必須從全局和整體上把握面向?qū)ο笾R,對各門課程內(nèi)容進行合理整合,既要避免同一知識點重復出現(xiàn),又要體現(xiàn)相同知識點在不同應(yīng)用背景下的不同側(cè)重。例如,僅僅是對于面向?qū)ο蠹夹g(shù)主要特點即封裝性、繼承性和多態(tài)性的講解,在不同課程中的側(cè)重點有所不同。在初級階段,C++程序設(shè)計課程側(cè)重于面向?qū)ο蟮幕A(chǔ):獨立的具體類的代碼構(gòu)成;統(tǒng)一建模語言UML課程側(cè)重于類之間的關(guān)系和類對象之間動態(tài)交互細節(jié)的UML圖展示;面向?qū)ο蠓治雠c設(shè)計課程側(cè)重于用面向?qū)ο笤O(shè)計的基本原則,以保證系統(tǒng)設(shè)計的正確性,關(guān)注設(shè)計模式的應(yīng)用,以保證系統(tǒng)設(shè)計的靈活性、擴展性和可復用性。
(2)分析面向?qū)ο笙盗姓n程之間的層次關(guān)系,合理設(shè)計教學內(nèi)容的銜接,注重課程的連貫性。教師應(yīng)做好前后知識的鋪墊和良好過渡,既要保證后續(xù)課程的教學內(nèi)容以前序課程內(nèi)容為基礎(chǔ),又要保證后續(xù)課程可將多門前序課程進行綜合擴展,使整個過程呈現(xiàn)螺旋上升的狀態(tài),形成有序、統(tǒng)一、科學的課程知識體系結(jié)構(gòu)。
例如,在講解面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)課程中的雙向鏈表時,如圖3所示,對于鏈表中的每一個節(jié)點,需要用前序C++程序設(shè)計課程中所學的類代碼表示;在學習面向?qū)ο蠼UZ言課程時,又可以使用UML中的靜態(tài)類關(guān)系圖展示雙向鏈表中節(jié)點的關(guān)系結(jié)構(gòu),如圖4所示,雙向鏈表自身作為抽象數(shù)據(jù)類型的UML類圖如圖5所示:在學習面向?qū)ο缶幊陶Z言的高級應(yīng)用STL時,可以從更高的抽象層次理解雙向鏈表的操作。在學習面向?qū)ο蠓治雠c設(shè)計時,使用開閉原則能更好地理解序列化容器問題,如圖6所示。通過這樣的方式,學生可以將多門課程中學習到的知識融合在一起,從不同角度和深度理解面向?qū)ο蟮乃枷爰皯?yīng)用。
3.2優(yōu)化面向?qū)ο笙盗姓n程的實踐體系結(jié)構(gòu)
優(yōu)化面向?qū)ο笙盗姓n程的實踐體系結(jié)構(gòu)必須確定好理論教學環(huán)節(jié)與實踐教學環(huán)節(jié)的最佳比例,構(gòu)建合理科學的實踐體系結(jié)構(gòu),培養(yǎng)學生在軟件項目體系結(jié)構(gòu)的實踐平臺上綜合運用所學知識的能力。實踐體系結(jié)構(gòu)的構(gòu)建要結(jié)合面向?qū)ο笙盗姓n程的特點,以CDIO工程教育模式為指導思想,借鑒“設(shè)計一實施”的基本思想。
教師可搭建全新的面向?qū)ο蟮膶嵺`體系結(jié)構(gòu),以實踐為導向,采用項目驅(qū)動的教學方法,使其成為驅(qū)動其他教學環(huán)節(jié)的有效手段。教師在實踐中講授知識,將理論知識的關(guān)鍵點通過實踐環(huán)節(jié)傳授給學生,使學生能更準確地理解實踐和理論的要點,不僅能讓學生感到學有所用,提高學習興趣,而且能增強學生綜合應(yīng)用所學技術(shù)的能力。
項目驅(qū)動的教學方法關(guān)鍵在于項目的遴選和項目教學的持續(xù)性。由于單門課程項目驅(qū)動存在驅(qū)動持續(xù)時間短、擴展項目難度困難等問題,因此對一系列課程采用同一個項目進行驅(qū)動是較為合適且科學的方法。教師選擇項目時,應(yīng)考慮項目的實用性和可擴展性以及是否符合系列課程的整體教學需求。在項目實踐實施中,各門課程的授課教師應(yīng)及時進行反饋和總結(jié),改進和完善教學項目。
例如,在系列課程教學中都可以采用圖書管理系統(tǒng)開發(fā)項目。在初級階段,關(guān)注圖書管理系統(tǒng)控制臺應(yīng)用程序面向?qū)ο蟠a的C++或Java實現(xiàn),此階段需求較簡單,類的抽象相對容易。在中級階段,要求采用UML建模語言對圖書管理系統(tǒng)進行展示,以用例圖展示需求,以類圖展示類之間的關(guān)系,以順序圖展示類對象之間的動態(tài)交互,以狀態(tài)圖展示類對象狀態(tài)的變化等。通過應(yīng)用各種UML圖,學生可以更好地理解所開發(fā)的系統(tǒng)。在高級階段,關(guān)注設(shè)計的正確性、靈活性和擴展性,利用面向?qū)ο笏枷氲幕驹O(shè)計原則加以驗證,如通過Liskov替換原則判斷中級階段建立的類之間的繼承關(guān)系是否正確,通過開閉原則和接口隔離原則判斷建立的系統(tǒng)是否在保證正確性的同時具有擴展性,并可以將分析類中的實體類與數(shù)據(jù)庫中的表對應(yīng)統(tǒng)一,使用適當?shù)脑O(shè)計模式進行高級應(yīng)用,提高系統(tǒng)的穩(wěn)定性。
4、面向?qū)ο笙盗姓n程教學模式改革的目標
面向?qū)ο笙盗姓n程的教學改革通過優(yōu)化理論體系結(jié)構(gòu)和實踐體系結(jié)構(gòu),形成了課程學習的3個階段,達到了以下兩個目標。
(1)將面向?qū)ο蠹夹g(shù)人才中所需要的知識、技能、系統(tǒng)構(gòu)造能力培養(yǎng)整合其中,使學生掌握扎實、深厚的知識與技術(shù)基礎(chǔ),這是CDIO工程教育的第1個總體目標。
(2)以從軟件需求到軟件運行的生命周期為載體,讓學生以主動的、實踐的、課程之間有機聯(lián)系的方式學習工程,注重培養(yǎng)學生掌握工程基礎(chǔ)知識,具備個人能力、團隊能力和工程實踐能力,這與CDIO構(gòu)思、設(shè)計、實施和運行的理念一致,可以達到CDIO工程教育的第2個總體目標。
5、結(jié)語
針對原有系列課程中各門課程教學環(huán)節(jié)和實踐環(huán)節(jié)存在的問題,筆者重新整合教學和實踐環(huán)節(jié),讓原本獨立或重復的各門課程從教學內(nèi)容到實踐環(huán)節(jié)都前后銜接,形成一體,符合面向?qū)ο蟮能浖_發(fā)過程。通過一系列的整合和優(yōu)化,學生可以逐漸掌握面向?qū)ο筌浖_發(fā)過程中各個階段應(yīng)具備的技能和所需的開發(fā)工具,更好地培養(yǎng)符合CDIO工程教育模式要求的“厚基礎(chǔ)、強實踐”的應(yīng)用型、實踐型工程人才。