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