摘 ?要:很多高職院校都開設(shè)有“Java面向?qū)ο蟪绦蛟O(shè)計”和編程類課程,通過問卷調(diào)查了解學(xué)生學(xué)習(xí)基礎(chǔ)與習(xí)慣,調(diào)研企業(yè),結(jié)合建構(gòu)主義、最近發(fā)展區(qū)理論,內(nèi)化提煉知識目標(biāo)、能力目標(biāo)、素質(zhì)目標(biāo),以項目驅(qū)動形式,設(shè)計生活化案例,融入課程知識點,結(jié)合實事熱點和新技術(shù)應(yīng)用,用Java進(jìn)行疫情大數(shù)據(jù)分析,激發(fā)學(xué)生的學(xué)習(xí)熱情,幫助學(xué)生積累項目經(jīng)驗。通過實際教學(xué)過程對教學(xué)設(shè)計進(jìn)行檢驗,通過反思繼續(xù)提升教學(xué)效果。
關(guān)鍵詞:Java;任務(wù)驅(qū)動;大數(shù)據(jù);建構(gòu)主義;最近發(fā)展區(qū)
中圖分類號:TP312 ? ? ?文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2020)13-0068-03
Abstract:Many higher vocational colleges have set up “Java Object-oriented Programming” and programming courses. Through questionnaire survey,studentslearning foundation and habits are understood,and enterprises are investigated. Combined with constructivism and the theory of zone of proximal development,knowledge objectives,ability objectives and quality objectives are internalized and refined. In the form of project driven,life oriented cases are designed,curriculum knowledge points are integrated,and combining practical hot spot and new technology application,using Java for epidemic big data analysis,stimulating studentslearning enthusiasm and helping them accumulate project experience. Through the actual teaching process to test the teaching design,through reflection to continue to improve the teaching effect.
Keywords:Java;task driven;big data;constructivism;zone of proximal development
0 ?引 ?言
筆者從事計算機(jī)軟件技術(shù)專業(yè)教學(xué)多年,在程序設(shè)計類課程教學(xué)中,將21點游戲、雙色球彩票、微信發(fā)紅包、英雄聯(lián)盟游戲等項目案例引入,學(xué)生對這些生活化案例表現(xiàn)出極大的興趣,激發(fā)了學(xué)習(xí)潛力。
基于湖北職業(yè)技術(shù)學(xué)院信息技術(shù)學(xué)院,軟件技術(shù)專業(yè)省級品牌專業(yè)建設(shè),推動教學(xué)內(nèi)涵式發(fā)展,“以綜合素質(zhì)為目標(biāo)、以崗位需求為導(dǎo)向、以工作過程為主線”的線上線下混合式教學(xué),合理運(yùn)用不同的教學(xué)方法與手段,利用工學(xué)結(jié)合特點,教師為項目經(jīng)理,學(xué)生為程序員,向準(zhǔn)職業(yè)人轉(zhuǎn)變,教室和機(jī)房理實一體,圍繞認(rèn)識、探索、運(yùn)用、設(shè)計、評價等環(huán)節(jié)開展教學(xué)設(shè)計,將“Java面向?qū)ο蟪绦蛟O(shè)計”課程知識與能力目標(biāo),有機(jī)融入項目教學(xué),最終提升教學(xué)質(zhì)量,促進(jìn)學(xué)生高質(zhì)量就業(yè)。
1 ?設(shè)計過程
1.1 ?數(shù)據(jù)分析
根據(jù)學(xué)生問卷數(shù)據(jù)分析,93.8%的學(xué)生喜歡編程,不喜歡“一言堂”和“死板”的編程案例;根據(jù)企業(yè)問卷數(shù)據(jù)分析,Java程序員崗位需要掌握的知識,分解到“Java面向?qū)ο蟪绦蛟O(shè)計”這門課程,要求學(xué)生必須掌握類和對象、方法、重載、重寫、封裝、繼承、接口、集合、反射、JDBC、文件流等Java知識,能熟練運(yùn)用這些知識解決編程中的實際問題;還需要掌握數(shù)據(jù)庫增、刪、改、查的知識,能熟練編碼解決數(shù)據(jù)訪問需求。
1.2 ?知識與技能目標(biāo)構(gòu)建
依據(jù)教育部高等職業(yè)學(xué)校軟件技術(shù)專業(yè)教學(xué)標(biāo)準(zhǔn),軟件技術(shù)專業(yè)人才培養(yǎng)方案,基于Java程序員崗位工作過程,結(jié)合大數(shù)據(jù)應(yīng)用開發(fā)(Java)職業(yè)技能“1+X”證書,采用以“逆向工程式”為開發(fā)過程的課程內(nèi)容處理思路,按照知識、能力、素質(zhì)三方面構(gòu)建Java實踐教學(xué)內(nèi)容。
結(jié)合當(dāng)前新冠疫情,各地衛(wèi)健委每天都在官網(wǎng)及時公布疫情相關(guān)數(shù)據(jù),我們需要將疫情數(shù)據(jù)網(wǎng)頁保存成TXT文件;通過Java文件流操作,讀取文件為字符串;通過Java提供的API接口,對字符串進(jìn)行分析、加工處理,重復(fù)分割成一條條疫情信息數(shù)據(jù),然后存儲到數(shù)據(jù)庫中。
整個過程,可以分為信息的獲取、分析、處理與存儲共四個環(huán)節(jié)。在這些過程中,需要用到類和對象、方法、重載、重寫、封裝、繼承、接口、集合、反射、JDBC、文件流等知識。
后期可利用數(shù)據(jù)庫DML語言,按照不同的需求,對數(shù)據(jù)進(jìn)行分析操作,而這些都是數(shù)據(jù)庫課程核心知識與能力目標(biāo)。
1.3 ?實踐課學(xué)時安排
整個項目教學(xué)實施共計8學(xué)時,由教師用2學(xué)時講解項目需求與整體設(shè)計思路,學(xué)生在課后查閱資料,試著進(jìn)行項目設(shè)計;2學(xué)時講解疫情數(shù)據(jù)實體類、設(shè)計數(shù)據(jù)庫、數(shù)據(jù)庫操作類;2學(xué)時講解數(shù)據(jù)的分析與加工處理;2學(xué)時講解測試類,實現(xiàn)項目主要功能的整合和測試。
2 ?教學(xué)實施
2.1 ?需求分析
各大網(wǎng)站都有官方發(fā)布的疫情數(shù)據(jù),用文件流方式將我們所需要的疫情數(shù)據(jù)進(jìn)行爬取,然后對數(shù)據(jù)進(jìn)行預(yù)處理,之后將這些數(shù)據(jù)存儲到數(shù)據(jù)庫中。
2.2 ?項目設(shè)計
各大網(wǎng)站都以網(wǎng)頁形式公布數(shù)據(jù),不同網(wǎng)站源代碼不盡相同,但都是將一條條數(shù)據(jù)通過同一個類選擇器進(jìn)行修飾與展現(xiàn)。為了簡化操作過程,這里先手動將一條條重復(fù)數(shù)據(jù)保存到.txt文件。
讀取文件并生成一個長的字符串,將字符串按照特定格式進(jìn)行分割,得到一條條疫情數(shù)據(jù)。每條疫情數(shù)據(jù)包含地區(qū)碼、地區(qū)名、新增數(shù)、確診總數(shù)、治愈數(shù)、死亡數(shù)等信息,將每條疫情數(shù)據(jù)通過疫情對象承載,添加到泛型對象集合并排序;最后遍歷泛型集合中的對象,將數(shù)據(jù)逐條添加進(jìn)數(shù)據(jù)庫,后面就可隨時對數(shù)據(jù)進(jìn)行查詢與分析,項目處理流程如圖1所示。
2.3 ?功能模塊劃分
整個項目文件包、類文件結(jié)構(gòu)如圖2所示。
(1)疫情監(jiān)控數(shù)據(jù)Info實體類:一條疫情數(shù)據(jù)包含疫情發(fā)生的區(qū)域代碼、區(qū)域名、新增確診人數(shù)、確診總?cè)藬?shù)、治愈人數(shù)、死亡人數(shù)等信息,為增強(qiáng)數(shù)據(jù)安全性,將所有字段訪問屬性設(shè)置為privat,然后對各字段進(jìn)行g(shù)et和set方法封裝。
private int infoId;//地區(qū)ID
private String infoLocation;//地區(qū)名
private int infoAdd;//新增確診人數(shù)
private int infoTotal;//確診總?cè)藬?shù)
private int infoCure;//治愈人數(shù)
private int infoDie;//死亡人數(shù)
(2)InfoDao類:本類主要用來對Info實體類數(shù)據(jù)進(jìn)行操作,包含對info實體對象數(shù)據(jù)添加進(jìn)數(shù)據(jù)庫,然后進(jìn)行修改、刪除、查詢等操作。
public int addInfo(Info info)//將Info對象的信息存入數(shù)據(jù)庫中。
public int deleteInfo(int infoId)//根據(jù)infoId刪除數(shù)據(jù)。
public int updateInfo(int infoId,Info info)//根據(jù)infoId修改數(shù)據(jù)。
public Info getInfoById(int infoId)//根據(jù)infoId查詢數(shù)據(jù)。
public List
(3)IoUti類:本類包含一個字符串類型的字段,用于存放數(shù)據(jù)文件路徑,還有一個數(shù)據(jù)文件讀取的方法。
private final String fileUrl ? ?//txt文件路徑。
public String readFile()//讀取疫情數(shù)據(jù)txt文件。
(4)InfoUtil類:讀取的數(shù)據(jù)文件中可能會有一些空格、換行標(biāo)記、制表符等無效數(shù)據(jù),需要對這些數(shù)據(jù)進(jìn)行剔除、轉(zhuǎn)換為合適的分隔符等預(yù)處理。
public String preString(String s, String oldString, String newString)//字符串替換。
public List
public List
(5)InfoUtilTest類:InfoUtil的測試類,對讀取的數(shù)據(jù)進(jìn)行預(yù)處理。
public void testPreString()//添加預(yù)處理數(shù)據(jù)測試。
public void testStringToInfo()//添加特定格式數(shù)據(jù)測試。
public void testSortList()//集合數(shù)據(jù)添加測試。
2.4 ?項目編碼
(1)讀取數(shù)據(jù),將數(shù)據(jù)存儲到緩沖區(qū),以備后續(xù)處理。
public String readFile() {
BufferedReader bufferedReader = null;
StringBuffer stringBuffer = new StringBuffer("");
char [] c = new char[16];
bufferedReader = new BufferedReader(new FileReader (fileUrl));
int len = 0;
while ((len = bufferedReader.read(c)) != -1) {
stringBuffer.append(new String(c, 0, len)); } //追加字符串
return stringBuffer.toString();}
(2)字符串預(yù)處理,對字符串進(jìn)行拆解,提取出地區(qū)碼、地區(qū)名、新增確診人數(shù)、確診總?cè)藬?shù)、治愈人數(shù)、死亡人數(shù)等,然后賦值給疫情數(shù)據(jù)對象,將對象存儲進(jìn)List集合。
public String preString(String s, String oldString, String newString) {
return s.replaceAll(oldString, newString); } //字符串替換
public List
List
String[] infoStrings = s.split(";");//按照";"拆分字符串,轉(zhuǎn)換為數(shù)組
for (String infoString : infoStrings) { String[] props = infoString.split(",");
Info info = new Info();//開始組裝info對象的屬性
info.setInfoId(Integer.parseInt(props[0]));
info.setInfoLocation(props[1]);
info.setInfoAdd(Integer.parseInt(props[2]));
info.setInfoTotal(Integer.parseInt(props[3]));
info.setInfoCure(Integer.parseInt(props[4]));
info.setInfoDie(Integer.parseInt(props[5]));
infoList.add(info); } //將當(dāng)前info對象添加到集合中
return infoList; } //返回集合
public List
Collections.sort(infoList, c); ? ?return infoList; ?}
(3)添加數(shù)據(jù)測試,為檢驗項目代碼是否成功實現(xiàn)其功能,編寫此類,通過多種數(shù)據(jù)來源測試程序功能是否實現(xiàn)。
public void testPreString() {
assertEquals(new InfoUtil().preString("AB-C-D", "-", "0"), "AB0C0D"); ? ?}
public void testStringToInfo() {
assertEquals(new InfoUtil().stringToInfo("6,孝南,0,29,10, 0;7,孝昌區(qū),0,19,1,0;").size(),2);}
public void testSortList() {
List
infoList.add(new Info(1, "L1", 3, 40, 0, 0));
infoList.add(new Info(2, "L2", 1, 40, 0, 0));
infoList.add(new Info(3, "L3", 2, 40, 0, 0));
infoList = new InfoUtil().sortList(infoList, new Info Comparator());
assertTrue(infoList.get(0).getInfoId() == 2&&infoList.get(2).getInfoId() == 1);}
3 ?結(jié) ?論
結(jié)合程序員崗位需求、人才培養(yǎng)方案、課程教學(xué)大綱,將知識目標(biāo)、能力目標(biāo),內(nèi)化為項目技能點。近幾年來,筆者將21點撲克牌游戲,雙色球彩票,英雄聯(lián)盟游戲,發(fā)紅包游戲等多個學(xué)生感興趣的案例引入程序設(shè)計類課程教學(xué)。
總體來講,情景化、項目教學(xué),實現(xiàn)了學(xué)生專業(yè)和個性共同發(fā)展,對提升學(xué)生對知識的運(yùn)用能力、激發(fā)學(xué)生的創(chuàng)新能力都有很大的幫助。以任務(wù)為驅(qū)動、案例為載體,結(jié)合時代熱點需求,通過合作探究,主動建構(gòu)知識,解決生活中的實際問題,切實激發(fā)學(xué)生內(nèi)在的學(xué)習(xí)興趣,提升編程能力,實現(xiàn)工學(xué)結(jié)合、知行合一。
參考文獻(xiàn):
[1] 彭夢,謝雅.興趣驅(qū)動的Java程序設(shè)計課程教學(xué)改革研究 [J].計算機(jī)教育,2019(11):116-120.
[2] 張良杰.應(yīng)用智慧課堂的《Java程序設(shè)計》教改研究 [J].輕工科技,2020,36(6):195-197.
[3] 賈家新.JAVA框架技術(shù)的線上教學(xué)實踐 [J].集成電路應(yīng)用,2020,37(6):84-85.
[4] 笪林梅.“Java程序設(shè)計”課程小班化教學(xué)模式改革探索 [J].知識經(jīng)濟(jì),2020(16):179-180.
[5] 鄧田.大數(shù)據(jù)背景下基于OBE的微課教學(xué)改革研究與實踐——以《Java程序設(shè)計》課程為例 [J].農(nóng)家參謀,2020(15):193.
[6] 李勝嵐,楊裴裴.高校Java課程教學(xué)改革研究 [J].計算機(jī)產(chǎn)品與流通,2019(10):190+206.
[7] 紀(jì)輝進(jìn).用C語言編寫英雄聯(lián)盟游戲 [J].現(xiàn)代信息科技,2020,4(5):69-71.
[8] 紀(jì)輝進(jìn).“C語言程序設(shè)計”教學(xué)案例分析——以發(fā)紅包程序算法的實現(xiàn)為例 [J].現(xiàn)代信息科技,2020,4(4):95-96+99.
[9] 紀(jì)輝進(jìn).用C#語言實現(xiàn)雙色球程序 [J].現(xiàn)代信息科技,2020,4(3):92-93+96.
[10] 紀(jì)輝進(jìn).C#WINFORM教學(xué)案例——五子棋 [J].科技視界,2017(19):138-139.
作者簡介:紀(jì)輝進(jìn)(1977—),男,漢族,湖北黃陂人,教師,講師,本科,主要研究方向:編程語言教學(xué)。