賈玉寧,楊穎
(阜陽師范學(xué)院計算機與信息工程學(xué)院,阜陽 236000)
互聯(lián)網(wǎng)的發(fā)展使計算機技術(shù)在教育領(lǐng)域也得到了廣泛的應(yīng)用。近些年移動通信技術(shù)的發(fā)展更是推動了一種新型的數(shù)字化學(xué)習(xí)方式出現(xiàn)——移動學(xué)習(xí)[1]。針對計算機科學(xué)與技術(shù)及相關(guān)專業(yè)學(xué)生零基礎(chǔ)學(xué)習(xí)《C語言程序設(shè)計》課程入門難的問題,通過對傳統(tǒng)課堂教學(xué)和學(xué)生學(xué)習(xí)方法的充分調(diào)研分析發(fā)現(xiàn),完全依賴于教材、教師和教室的傳統(tǒng)意義上的大班教與學(xué)很難使學(xué)生的深度學(xué)習(xí)行為發(fā)生。因此,根據(jù)項目組成員學(xué)習(xí)MOOC課程的體驗和收獲,提出了移動互聯(lián)網(wǎng)+高級語言程序設(shè)計的學(xué)習(xí)平臺的新思路。結(jié)合本校學(xué)生特點和專業(yè)培養(yǎng)目標(biāo),設(shè)計和實現(xiàn)了C語言程序設(shè)計的學(xué)習(xí)平臺,其目標(biāo)是提升學(xué)生的學(xué)習(xí)興趣,使學(xué)生的深度學(xué)習(xí)行為真正發(fā)生,奠定學(xué)生扎實的程序設(shè)計能力。
《C程序設(shè)計語言》的很多知識點比較枯燥難懂,課時有限,僅僅只是課堂時間是不能夠讓每個學(xué)生很好地掌握該課程的知識結(jié)構(gòu)。通過一些普通本科院校學(xué)生的網(wǎng)上問卷需求調(diào)研發(fā)現(xiàn),學(xué)生除了按照教學(xué)計劃開展課堂學(xué)習(xí)之外,課余的碎片化時間往往通過網(wǎng)絡(luò)開展自主學(xué)習(xí)。
C語言學(xué)習(xí)平臺作為日常學(xué)習(xí)的輔助手段,主要目的是解決學(xué)生學(xué)習(xí)遇到的困難以及提升學(xué)生對知識的掌握。調(diào)查發(fā)現(xiàn),學(xué)生會對一些新學(xué)到的概念以及細節(jié)性的問題理解不清,所以C語言學(xué)習(xí)平臺需要有疑難解析的功能;為了開拓學(xué)生的解題思路和打破原有的解題模式,一題多解功能也是必不可少的;知識是需要不斷學(xué)習(xí)并強化的,能力拔高功能就是提升學(xué)生技能層次的功能;與教師或者同學(xué)的交流也是學(xué)習(xí)的重要環(huán)節(jié),討論區(qū)也是必要的功能。圖1是該學(xué)習(xí)平臺從用戶的角度描述的用例圖。
圖1 學(xué)習(xí)平臺的用例圖
C語言學(xué)習(xí)平臺需要手機端的支持,考慮到手機系統(tǒng)的普及度以及使用度,C語言學(xué)習(xí)平臺的開發(fā)是基于Android移動系統(tǒng),基于Android平臺來開發(fā)移動學(xué)習(xí)應(yīng)用更具可行性[2]。該C語言學(xué)習(xí)平臺使用Android Studio開發(fā)工具開發(fā)。Android Studio是谷歌推出的新的Android開發(fā)環(huán)境,開發(fā)者可以在編寫程序的同時看到自己的應(yīng)用在不同尺寸屏幕中的樣子[3]。
該C學(xué)習(xí)平臺采用Fragment而不是Activity來管理UI,繞開Android系統(tǒng)Activity使用規(guī)則的限制。Fragment用于在一個Activity中描述部分操作界面和相關(guān)的行為,使用Fragment分散整個Activity的布局體現(xiàn)出了良好的模塊化思維[4]。該平臺用到了兩個重要的支持類庫,一個是Fragment類(android.support.v4.app.Fragment),另一個是 FragmentActivity類(android.support.v4.app.FragmentActivity)。
根據(jù)用戶需求總結(jié)出來的反映了用戶需求的系統(tǒng)邏輯模型轉(zhuǎn)換成可以實施的物理模型,把整個設(shè)計劃分成單元,主要解決如何去做的問題。整個應(yīng)用程序分為四大模塊,分別是疑難解析、一題多解、能力拔高和討論區(qū)。模塊結(jié)構(gòu)圖如圖2所示。
圖2 C語言學(xué)習(xí)平臺模塊結(jié)構(gòu)圖
此項目運用的數(shù)據(jù)存儲是JSON,其全稱是JavaS-cript Notation(JavaScript對象表示法)[5]。JSON獨立于編程語言,它表達數(shù)據(jù)的方式對通用的編程概念都很友好,存儲形式也比較簡單,通過“名稱-值對”的形式構(gòu)成的,書寫簡單。不同模塊的JSON文件相互獨立,沒有錯綜復(fù)雜的關(guān)系。
為了實現(xiàn)不同模塊呈現(xiàn)不同的內(nèi)容,建立三個JSON文件,分別是與“疑難解析”對應(yīng)的propra.json、與“一題多解”對應(yīng)的radom.json和與“能力拔高”對應(yīng)的simulation.json文件,存放在assets文件夾下。三個JSON 文件都是用“description”、“type”和“title”名稱,冒號的右邊則是相應(yīng)的值。在相對應(yīng)的ProgrammingExercisesFragmentController、RandomPracticeFragmentController和SimulationExercisesFragmentController類中定義PATH變量,即private final String PATH;再給PATH賦予不同的JSON文件名,然后通過initData(PATH)方法來調(diào)用JSON文件。JSON文件與相應(yīng)的類的關(guān)系如圖3所示。
圖3 JSON文件與相應(yīng)的類的關(guān)系
討論區(qū)需要從網(wǎng)上服務(wù)器存取數(shù)據(jù),并不是依賴于本地,所以討論區(qū)并沒有使用到JSON存儲。
為了給用戶展示一個直觀的界面,該平臺主界面采用了在界面中心放四個圓形按鈕的設(shè)計,每個按鈕對應(yīng)一個學(xué)習(xí)模塊,當(dāng)用戶進入該應(yīng)用時就能知道該應(yīng)用的功能。用戶界面如圖4所示。
主界面的布局用的就不是線性布局LinearLayout,而是相對布局RelativeLayout。RelativeLayout布局中的組件是相對其他組件進行位置擺放的,具有一定的擺放自由性,而LinearLayout布局中的組件是按照平行或者垂直方向進行擺放的,這里為了按鈕擺放的美觀,進而采用了相對布局RelativeLayout。
為了能夠在“疑難解析”、“一題多解”和“能力拔高”三個模塊之間實現(xiàn)隨意滑動切換,在頂部設(shè)計了能夠滑動的導(dǎo)航欄,如圖5所示。
圖4 用戶界面
圖5 滑動的頂部導(dǎo)航欄
該導(dǎo)航菜單是由ExamViewPagerAdapter類控制的,ExamViewPagerAdapter繼承于FragmentPagerAdapter類,該類適合相對靜態(tài)的頁面,并且數(shù)量較少的。在ExamViewPagerAdapter類中聲明動態(tài)數(shù)組ArrayList<>,變量名為 fragments,以及 ProgrammingExercisesFragment、RandomPracticeFragment和SimulationExercises-Fragment類的對象,讓fragments調(diào)用add()方法添加到List<>里。如圖6所示。該界面是通過fragment來管理activity的,activity在其視圖層級里提供一處位置來放置fragment的視圖。MainActivity托管著ProgrammingExercisesFragment、RandomPracticeFragment和SimulationExercisesFragment如圖7所示。
圖6 ExamViewPagerAdapter與三大模塊類的關(guān)系
圖7 MainActivity托管著ProgrammingExercisesFragment、RandomPracticeFragment和SimulationExercisesFragment
頁面滑動的設(shè)計可以讓用戶通過滑動頁面直接進入相應(yīng)的學(xué)習(xí)模塊,而不用返回主界面進行操作。
主界面有“疑難解析”、“一題多解”、“能力拔高”和“討論區(qū)”。疑難解析的主要功能是把各個章節(jié)較難理解,以及學(xué)生在學(xué)習(xí)C語言課程時所忽略的重要知識點,為了讓學(xué)生能夠循序漸進的學(xué)習(xí)知識,該模塊主要以文字的形式把問題呈現(xiàn)給學(xué)生。當(dāng)學(xué)生用戶點擊該模塊時,頁面會跳轉(zhuǎn)到問題的分類頁面,如圖8所示。在跳出的分類頁面中選擇相應(yīng)的類型點擊,然后界面會跳轉(zhuǎn)到“疑難解析”的界面,如圖9所示。
圖8 疑難解析分類界面
圖9 疑難解析界面
圖10 一題多解界面
圖11 一題多解分類界面
圖12 一題多解解析界面
圖13 一題多解界面
圖14 能力拔高分類界面
一題多解是根據(jù)某一個典型的例題,給出解出這個例題的思路和多種方法,打破一題一解的思路,從而開拓學(xué)生的思維能力。在圖8進入“疑難解析”的狀態(tài)下,用戶可以通過滑動頁面直接進入“一題多解”,無需返回主界面進行操作,一題多解界面如圖10所示,如果想了解一題多解的類型,也可以返回主界面點擊“一題多解”按鈕進入一題多解分類界面,如圖11所示。為了提供可以參考的答案,在界面底部有“解析”按鈕,點擊后會出現(xiàn)系統(tǒng)給出的參考答案,一題多解解析界面如圖12所示。
能力拔高當(dāng)用戶解決了困惑自己的問題,并且也通過相應(yīng)的題目得到訓(xùn)練,有了努力做基礎(chǔ),可以選擇更高難度的編程題。那么“能力拔高”是用戶進一步提升知識能力,以及運用知識的階梯。通過滑動頁面來進入“能力拔高”界面如圖13所示,在能力拔高分類界面中有不同類別的拔高性題目,能力拔高分類界面如圖14所示。該模塊設(shè)有解題思路,解題的突破口。“解析”按鈕給出這道題的參考答案,能力拔高解析界面如圖15所示。
討論區(qū)是加強用戶與用戶交流的模塊,能夠解決用戶在學(xué)習(xí)中遇到的問題,以及分享自己的學(xué)習(xí)經(jīng)驗。用戶之間的交流能夠加強對知識的理解以及能力的提升都是有非常大的幫助,用戶可以在討論區(qū)發(fā)表自己的帖子。討論區(qū)界面如圖16所示。
圖15 能力拔高解析界面
圖16 討論區(qū)界面
基于Android開發(fā)的C語言程序設(shè)計學(xué)習(xí)平臺功能更具針對性,通過在本院理工科學(xué)生中的測試使用,學(xué)生普遍反映良好。該學(xué)習(xí)平臺能夠很好地輔助學(xué)生的課堂學(xué)習(xí),同時根據(jù)個人所需對程序設(shè)計進行深入學(xué)習(xí)。隨著平臺的投入運行,根據(jù)學(xué)生的使用需求,后期會不斷增加新的題目內(nèi)容,包括在“能力提升”模塊增加程序設(shè)計大賽的題目等。另外,還會進一步完善討論區(qū)的功能。