王明松++錢靜媛
摘要:面向?qū)ο箝_發(fā)思維是當代軟件工程領(lǐng)域重要的行為規(guī)范,是軟件工程學生必須要掌握的基本理論。該文論述了運用Python語言作為面向?qū)ο笳n程實踐工具的起因、優(yōu)勢和具體實踐過程,將基礎(chǔ)理論與實踐結(jié)合,使學生加深領(lǐng)會面向?qū)ο箢I(lǐng)域概念,為后續(xù)課程的深入學習和具體工作實踐奠定良好的基礎(chǔ)。
關(guān)鍵詞:Python語言;面向?qū)ο螅粚嵺`教學;教學改革
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)04-0136-02
1 引言
面向?qū)ο笳n程是軟件工程專業(yè)的基礎(chǔ)課程,也是非計算機科學與技術(shù)專業(yè)學生選修的重要課程,在整個教學體系中占有非常重要的地位。課程教學主要目標是培養(yǎng)學生熟練掌握面向?qū)ο蟮闹鲗枷牒托袨槔砟?,?yīng)用面向?qū)ο笏枷虢鉀Q和處理實際問題的指導方針和實踐方法。目前主流的軟件開發(fā)過程大多采用面向?qū)ο笏枷?,用具體的某種面向?qū)ο笳Z言去構(gòu)建軟件主體,同時其也是系統(tǒng)設(shè)計、仿真實驗、科學計算等眾多領(lǐng)域的有力工具。本課程主要介紹了面向?qū)ο蠡舅枷?、類和對象、抽象、封裝、繼承、多態(tài)、消息、模板等內(nèi)容,這些理論在向初學者講解時抽象難懂,學生不能夠透過抽象概念理解面向?qū)ο蟮膶嶋H應(yīng)用過程,不能通過實例看到應(yīng)用結(jié)果,使教學效果不理想。這就需要一種支持面向?qū)ο蟪绦蛟O(shè)計語言作為描述和實踐工具,通過上機實踐形象化地將面向?qū)ο蟮闹饕拍钤?、設(shè)計模式和具體方式方法展示。學生再通過形式化理論深化,又可以熟練運用編程語言進行應(yīng)用設(shè)計開發(fā),為后續(xù)課程打下牢固的理論實踐儲備。所以教學中采用的程序設(shè)計語言,對學習面向?qū)ο笾R至關(guān)重要,起著橋梁和階梯作用,是引入學生掌握面向?qū)ο罄碚擉w系的重要媒介。
2 現(xiàn)階段面向?qū)ο笳n程教學主要存在的問題
長期以來,國內(nèi)眾多高校采用C++或Java作為程序設(shè)計語言進行面向?qū)ο笏枷搿⒓夹g(shù)和方法的講授及實踐。C++或Java具有面向?qū)ο蟮暮诵奶匦?,符合面向?qū)ο笤O(shè)計思想,特別是Java是純面向?qū)ο笳Z言,要求學生完全按照面向?qū)ο竽J竭M行編程。以此作為教學的實踐過程,課程前幾章大都講解C++或Java語言開發(fā)環(huán)境、基礎(chǔ)語法、程序設(shè)計方法等基礎(chǔ)知識,以便為后續(xù)章節(jié)的學習打下基礎(chǔ)。而在教學中后期引入面向?qū)ο蟮暮诵母拍?,如類、對象、封裝、繼承和多態(tài)性等主體內(nèi)容,在教學方法上,采用案例式、研討式、項目驅(qū)動式和實踐操作等各種教學方法。這樣的課程體系,希望通過具體實際應(yīng)用,逐漸構(gòu)建概念的深入過程,貫穿課程整體系列,使學生通過理論實踐整合,漸次性的迭代序列,最終掌握面向?qū)ο笾R體系結(jié)構(gòu)。然而,從最終教學效果來看卻不甚理想,通過平時測驗和期末考試,達到優(yōu)秀水平學生人數(shù)較少,大部分學生的成績處于中等偏下的狀態(tài)。大部分學生對語言運用掌握不好,語法細節(jié)模糊不清,不具備編程基本思想和良較好的編程習慣,導致無法對面向?qū)ο笾械某橄蠛蛷碗s的概念進行形式化編程實踐,從而更難深入理解和運用所學知識。面對這些困難,基礎(chǔ)薄弱的學生不得不花費大量時間用于學習基礎(chǔ)語法和編寫調(diào)試過程。但是本門課程的中心環(huán)節(jié)是面向?qū)ο笙嚓P(guān)概念的掌握和應(yīng)用,編程語言只是實現(xiàn)此目標的中介,教師在前期的編程語言導入過程,不可能深入過多細節(jié),只是起著引導和示范作用。但在課程核心內(nèi)容的編程實踐時,很多學生在沒有熟練掌握編程知識的前提下,無法對面向?qū)ο蟮某橄筮M行有效的編程實踐,導致無法對面向?qū)ο蟪绦蛟O(shè)計范型、設(shè)計模式、多態(tài)性等內(nèi)容有著深入的理解。這種雙重失效的局面,使學生感到知識體系的混亂無頭紊,對本門課程學習失去了興趣。綜上分析,形成學習困惑現(xiàn)象很大程度上是由于C++或Java語言及其開發(fā)環(huán)境的復雜性和細節(jié)繁雜,增加了學習課程的負擔和困難。在有限的課程時間內(nèi),學習語言反而成了很多學生的主要目標,完全淡化了本門課程的教學宗旨。為了提高學生的編程能力,有時候不得不延長編程語言內(nèi)容的課時量,壓縮課程后面的核心內(nèi)容,這樣就會造成本門課程中心教學內(nèi)容偏離,變成了C++或Java語言編程課程,對學生發(fā)出了錯誤的引導信息,使其忽略了宏觀思想的建立,丟了西瓜撿了芝麻。
3 Python語言的面向?qū)ο筇匦?/p>
Python是一種面向?qū)ο蟮慕忉屝杂嬎銠C程序設(shè)計語言,具有功能強大而完善的通用性,具有十多年的發(fā)展歷史,成熟且穩(wěn)定?,F(xiàn)在國內(nèi)外眾多的大學已將Python課程導入到計算機相關(guān)學科的教學體系中。Python本身特性決定了它是一門很好的面向?qū)ο蟪绦蛟O(shè)計語言,以下幾個特點非常有利于面向?qū)ο蟪绦蛟O(shè)計教學:
(1) 語法簡單實用。Python是一門語法簡約,表達豐富的計算機程序設(shè)計語言。良好的形式化設(shè)計使Python程序感覺像閱讀英語文稿,其更加接近人類的自然語言思維方式。這種具有偽代碼的特性讓編程人員專注于設(shè)計解決問題的算法過程而不是語言本身的書寫細節(jié)。Python設(shè)計上的這種清晰劃一的風格,使代碼易讀、易學習和易維護。
(2)Python是完全面向?qū)ο蟮恼Z言。函數(shù)、模塊、數(shù)字、字符串都是對象,并且完全支持繼承、重載、派生、多繼承等面向?qū)ο筇匦?,非常適合面向?qū)ο笳n程教學體系的要求。
(3)Python可以在交互模式下運行。通過輸入操作指令實現(xiàn)即時的運行結(jié)果,對教學硬件設(shè)備要求不高,非常適合在有限的課堂時間內(nèi),通過形象化展示講解教學內(nèi)容。
(4)代碼的易管理可維護性。作為一種高級語言,Python可以自動管理程序低層次的運行環(huán)境,使程序員不必擔心內(nèi)存泄漏等設(shè)計缺陷,能夠高效地運行在不同的操作系統(tǒng)上,達到了一致的通用性。Python在編程設(shè)計時讓違反了縮進規(guī)則的程序不能通過編譯,以此來強制學生養(yǎng)成良好的編程習慣。
(5)可擴展性。Python可以調(diào)用由其他程序語言編譯后的程序,也可以將其嵌入到C/C++程序中,實現(xiàn)高級語言的腳本化能力。Python有功能強大的標準函數(shù)庫,實現(xiàn)了許多常用功能,可快速地完成目標業(yè)務(wù)的組裝。
4 面向?qū)ο笳n程的Python語言實踐
由于Python語言簡單易學易用,所以對于本課程教學內(nèi)容的設(shè)計,可以快速講解Python的基礎(chǔ)語法和基本應(yīng)用,將更多教學時間分配到更重要的面向?qū)ο蟪绦蛟O(shè)計內(nèi)容上。教學關(guān)注點不應(yīng)在python的基礎(chǔ)語法上,程序語言學習只是為了理解面向?qū)ο笤淼膽?yīng)用工具,要引導學生將更多的精力和時間放在面向?qū)ο蟮母拍钕1?列出了《面向?qū)ο蟆氛n程教學內(nèi)容及學時分配。
[序號\&教學內(nèi)容\&學時分配\&1\&Python語言基礎(chǔ)(變量、字符串和編碼、列表和字典、邏輯結(jié)構(gòu)、函數(shù))\&8\&2\&面向?qū)ο蠡A(chǔ)(類和對象、封裝、繼承、多態(tài)、接口)\&16\&3\&異常處理和調(diào)試機制\&4\&4\&面向?qū)ο蟾呒壘幊蹋ǘ嘀乩^承、元類、設(shè)計模式)\&10\&5\&文件處理和序列化\&6\&6\&應(yīng)用實例\&4\&]
第一部分主要是Python語言基礎(chǔ)知識,包括數(shù)據(jù)類型和變量,變量引用方式,字符串編碼方式和Unicode與其他編碼的轉(zhuǎn)換,列表的定義和作用,字典的使用,條件邏輯設(shè)計,迭代循環(huán)設(shè)計,函數(shù)的定義、作用和應(yīng)用。對于專業(yè)學生,前期已經(jīng)學習過C語言程序設(shè)計,對于程序設(shè)計的結(jié)構(gòu)化思想有著很好的基礎(chǔ),已具備了一定的程序設(shè)計基礎(chǔ),所以可根據(jù)學生接受和理解程度作出適當?shù)恼n時縮減。對于非專業(yè)計算機學生,大部分沒有接受過系統(tǒng)的結(jié)構(gòu)化程序訓練,對于結(jié)構(gòu)化編程的基礎(chǔ)思路、操作技巧不熟練,則可適當增加基礎(chǔ)訓練學時,為以后學習打下基礎(chǔ)。
第二部分是面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ),主要內(nèi)容包括面向?qū)ο蠓缎?、類和對象、封裝、繼承、重載、多態(tài)性、抽象類、接口和模板等,是本課程的主要教學內(nèi)容。面向?qū)ο蠓椒ㄗ鳛橐环N獨具優(yōu)越性的新方法引入軟件開發(fā)過程以來,引起了行業(yè)越來越廣泛的關(guān)注和高度重視,一直是計算機界關(guān)心的重點。
第三部分異常處理是運行和調(diào)試程序的重要工具,它分離了接收程序錯誤信息和錯誤處理過程,對明晰程序設(shè)計思路,增強代碼可讀性和可維護性,提高編程效率具有重要的作用。Python的異常處理能力很強大,對于提高學生分析和調(diào)試代碼能力有著很大的幫助。
第四部分是本課程較為高級的內(nèi)容,通過學習使用多重繼承和設(shè)計模式等內(nèi)容,可依照前人創(chuàng)建的某種設(shè)計模式,更加簡單快捷地復用成功的軟件設(shè)計和體系結(jié)構(gòu),簡化設(shè)計的復雜性,減少未知風險。Python語言可以簡單、靈活和高效地實現(xiàn)設(shè)計模式原型。掌握了軟件設(shè)計模式,可在更高層次上掌握面向?qū)ο笳w的設(shè)計理念。對以后軟件開發(fā)的學習或職業(yè)生涯具有較強的指導作用。
第五部分是文件處理及序列化。它是程序設(shè)計中經(jīng)常要用到的模塊與功能,描述了Python程序如何創(chuàng)建、更新及處理數(shù)據(jù)文件,同時介紹了各種基于文件的數(shù)據(jù)存儲機制。
5 結(jié)語
面向?qū)ο笤O(shè)計是一門重要的專業(yè)基礎(chǔ)課程,教學目的是讓學生理解面向?qū)ο蠡纠砟詈蛻?yīng)用實踐,學會對實際問題進行分析建模,解決具體問題。它是后續(xù)的軟件項目開發(fā)案例課程重要基礎(chǔ)理論,能夠加深理解軟件設(shè)計模塊化、軟件架框理論和各種開發(fā)框架等宏觀體系等高層次理論,奠定了成為優(yōu)秀IT領(lǐng)域設(shè)計開發(fā)人才的升級路徑。面向?qū)ο笏枷胧乾F(xiàn)代軟件開發(fā)過程的基本行為指南,為今后讓學生更好地走向社會打下良好的基石。
參考文獻:
[1] 魯特茲. Python學習手冊[M]. 3版.侯靖,譯.北京: 機械工業(yè)出版社,2009.
[2] Mark Lutz.Learning Python[M].東南大學出版社,200(6).
[3] 挪威.Magnus Lie Hetland Python基礎(chǔ)教程[M].人民郵電出版社,2010.