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