论文部分内容阅读
摘 要:很多高职院校都开设有“Java面向对象程序设计”和编程类课程,通过问卷调查了解学生学习基础与习惯,调研企业,结合建构主义、最近发展区理论,内化提炼知识目标、能力目标、素质目标,以项目驱动形式,设计生活化案例,融入课程知识点,结合实事热点和新技术应用,用Java进行疫情大数据分析,激发学生的学习热情,帮助学生积累项目经验。通过实际教学过程对教学设计进行检验,通过反思继续提升教学效果。
关键词:Java;任务驱动;大数据;建构主义;最近发展区
中图分类号:TP312 文献标识码: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,students’learning 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 students’learning 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 引 言
笔者从事计算机软件技术专业教学多年,在程序设计类课程教学中,将21点游戏、双色球彩票、微信发红包、英雄联盟游戏等项目案例引入,学生对这些生活化案例表现出极大的兴趣,激发了学习潜力。
基于湖北职业技术学院信息技术学院,软件技术专业省级品牌专业建设,推动教学内涵式发展,“以综合素质为目标、以岗位需求为导向、以工作过程为主线”的线上线下混合式教学,合理运用不同的教学方法与手段,利用工学结合特点,教师为项目经理,学生为程序员,向准职业人转变,教室和机房理实一体,围绕认识、探索、运用、设计、评价等环节开展教学设计,将“Java面向对象程序设计”课程知识与能力目标,有机融入項目教学,最终提升教学质量,促进学生高质量就业。
1 设计过程
1.1 数据分析
根据学生问卷数据分析,93.8%的学生喜欢编程,不喜欢“一言堂”和“死板”的编程案例;根据企业问卷数据分析,Java程序员岗位需要掌握的知识,分解到“Java面向对象程序设计”这门课程,要求学生必须掌握类和对象、方法、重载、重写、封装、继承、接口、集合、反射、JDBC、文件流等Java知识,能熟练运用这些知识解决编程中的实际问题;还需要掌握数据库增、删、改、查的知识,能熟练编码解决数据访问需求。
1.2 知识与技能目标构建
依据教育部高等职业学校软件技术专业教学标准,软件技术专业人才培养方案,基于Java程序员岗位工作过程,结合大数据应用开发(Java)职业技能“1+X”证书,采用以“逆向工程式”为开发过程的课程内容处理思路,按照知识、能力、素质三方面构建Java实践教学内容。
结合当前新冠疫情,各地卫健委每天都在官网及时公布疫情相关数据,我们需要将疫情数据网页保存成TXT文件;通过Java文件流操作,读取文件为字符串;通过Java提供的API接口,对字符串进行分析、加工处理,重复分割成一条条疫情信息数据,然后存储到数据库中。
整个过程,可以分为信息的获取、分析、处理与存储共四个环节。在这些过程中,需要用到类和对象、方法、重载、重写、封装、继承、接口、集合、反射、JDBC、文件流等知识。
后期可利用数据库DML语言,按照不同的需求,对数据进行分析操作,而这些都是数据库课程核心知识与能力目标。
1.3 实践课学时安排
整个项目教学实施共计8学时,由教师用2学时讲解项目需求与整体设计思路,学生在课后查阅资料,试着进行项目设计;2学时讲解疫情数据实体类、设计数据库、数据库操作类;2学时讲解数据的分析与加工处理;2学时讲解测试类,实现项目主要功能的整合和测试。
2 教学实施
2.1 需求分析 各大网站都有官方发布的疫情数据,用文件流方式将我们所需要的疫情数据进行爬取,然后对数据进行预处理,之后将这些数据存储到数据库中。
2.2 项目设计
各大网站都以网页形式公布数据,不同网站源代码不尽相同,但都是将一条条数据通过同一个类选择器进行修饰与展现。为了简化操作过程,这里先手动将一条条重复数据保存到.txt文件。
读取文件并生成一个长的字符串,将字符串按照特定格式进行分割,得到一条条疫情数据。每条疫情数据包含地区码、地区名、新增数、确诊总数、治愈数、死亡数等信息,将每条疫情数据通过疫情对象承载,添加到泛型对象集合并排序;最后遍历泛型集合中的对象,将数据逐条添加进数据库,后面就可随时对数据进行查询与分析,项目处理流程如图1所示。
2.3 功能模块划分
整个项目文件包、类文件结构如图2所示。
(1)疫情监控数据Info实体类:一条疫情数据包含疫情发生的区域代码、区域名、新增确诊人数、确诊总人数、治愈人数、死亡人数等信息,为增强数据安全性,将所有字段访问属性设置为privat,然后对各字段进行get和set方法封装。
private int infoId;//地区ID
private String infoLocation;//地区名
private int infoAdd;//新增确诊人数
private int infoTotal;//确诊总人数
private int infoCure;//治愈人數
private int infoDie;//死亡人数
(2)InfoDao类:本类主要用来对Info实体类数据进行操作,包含对info实体对象数据添加进数据库,然后进行修改、删除、查询等操作。
public int addInfo(Info info)//将Info对象的信息存入数据库中。
public int deleteInfo(int infoId)//根据infoId删除数据。
public int updateInfo(int infoId,Info info)//根据infoId修改数据。
public Info getInfoById(int infoId)//根据infoId查询数据。
public List<Info> getOrderedInfo()//获取所有区域的数据,按确诊总数降序排列。
(3)IoUti类:本类包含一个字符串类型的字段,用于存放数据文件路径,还有一个数据文件读取的方法。
private final String fileUrl //txt文件路径。
public String readFile()//读取疫情数据txt文件。
(4)InfoUtil类:读取的数据文件中可能会有一些空格、换行标记、制表符等无效数据,需要对这些数据进行剔除、转换为合适的分隔符等预处理。
public String preString(String s, String oldString, String newString)//字符串替换。
public List<Info> stringToInfo(String s)//将特定规格字符串转换为Info实体类对象,添加进List集合并返回。
public List<Info> sortList(List<Info> infoList, Comparator <Info> c)//对infoList集合排序并返回。
(5)InfoUtilTest类:InfoUtil的测试类,对读取的数据进行预处理。
public void testPreString()//添加预处理数据测试。
public void testStringToInfo()//添加特定格式数据测试。
public void testSortList()//集合数据添加测试。
2.4 项目编码
(1)读取数据,将数据存储到缓冲区,以备后续处理。
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)字符串预处理,对字符串进行拆解,提取出地区码、地区名、新增确诊人数、确诊总人数、治愈人数、死亡人数等,然后赋值给疫情数据对象,将对象存储进List集合。
public String preString(String s, String oldString, String newString) { return s.replaceAll(oldString, newString); } //字符串替换
public List<Info> stringToInfo(String s) {
List<Info> infoList = new ArrayList<Info>();//创建新集合
String[] infoStrings = s.split(";");//按照";"拆分字符串,转换为数组
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); } //将当前info对象添加到集合中
return infoList; } //返回集合
public List<Info> sortList(List<Info> infoList, Comparator <Info> c) { //排序
Collections.sort(infoList, c); return infoList; }
(3)添加數据测试,为检验项目代码是否成功实现其功能,编写此类,通过多种数据来源测试程序功能是否实现。
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,孝昌区,0,19,1,0;").size(),2);}
public void testSortList() {
List<Info> infoList = new ArrayList<>();
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 结 论
结合程序员岗位需求、人才培养方案、课程教学大纲,将知识目标、能力目标,内化为项目技能点。近几年来,笔者将21点扑克牌游戏,双色球彩票,英雄联盟游戏,发红包游戏等多个学生感兴趣的案例引入程序设计类课程教学。
总体来讲,情景化、项目教学,实现了学生专业和个性共同发展,对提升学生对知识的运用能力、激发学生的创新能力都有很大的帮助。以任务为驱动、案例为载体,结合时代热点需求,通过合作探究,主动建构知识,解决生活中的实际问题,切实激发学生内在的学习兴趣,提升编程能力,实现工学结合、知行合一。
参考文献:
[1] 彭梦,谢雅.兴趣驱动的Java程序设计课程教学改革研究 [J].计算机教育,2019(11):116-120.
[2] 张良杰.应用智慧课堂的《Java程序设计》教改研究 [J].轻工科技,2020,36(6):195-197.
[3] 贾家新.JAVA框架技术的线上教学实践 [J].集成电路应用,2020,37(6):84-85.
[4] 笪林梅.“Java程序设计”课程小班化教学模式改革探索 [J].知识经济,2020(16):179-180.
[5] 邓田.大数据背景下基于OBE的微课教学改革研究与实践——以《Java程序设计》课程为例 [J].农家参谋,2020(15):193.
[6] 李胜岚,杨裴裴.高校Java课程教学改革研究 [J].计算机产品与流通,2019(10):190+206.
[7] 纪辉进.用C语言编写英雄联盟游戏 [J].现代信息科技,2020,4(5):69-71.
[8] 纪辉进.“C语言程序设计”教学案例分析——以发红包程序算法的实现为例 [J].现代信息科技,2020,4(4):95-96+99.
[9] 纪辉进.用C#语言实现双色球程序 [J].现代信息科技,2020,4(3):92-93+96.
[10] 纪辉进.C#WINFORM教学案例——五子棋 [J].科技视界,2017(19):138-139.
作者简介:纪辉进(1977—),男,汉族,湖北黄陂人,教师,讲师,本科,主要研究方向:编程语言教学。
关键词:Java;任务驱动;大数据;建构主义;最近发展区
中图分类号:TP312 文献标识码: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,students’learning 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 students’learning 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 引 言
笔者从事计算机软件技术专业教学多年,在程序设计类课程教学中,将21点游戏、双色球彩票、微信发红包、英雄联盟游戏等项目案例引入,学生对这些生活化案例表现出极大的兴趣,激发了学习潜力。
基于湖北职业技术学院信息技术学院,软件技术专业省级品牌专业建设,推动教学内涵式发展,“以综合素质为目标、以岗位需求为导向、以工作过程为主线”的线上线下混合式教学,合理运用不同的教学方法与手段,利用工学结合特点,教师为项目经理,学生为程序员,向准职业人转变,教室和机房理实一体,围绕认识、探索、运用、设计、评价等环节开展教学设计,将“Java面向对象程序设计”课程知识与能力目标,有机融入項目教学,最终提升教学质量,促进学生高质量就业。
1 设计过程
1.1 数据分析
根据学生问卷数据分析,93.8%的学生喜欢编程,不喜欢“一言堂”和“死板”的编程案例;根据企业问卷数据分析,Java程序员岗位需要掌握的知识,分解到“Java面向对象程序设计”这门课程,要求学生必须掌握类和对象、方法、重载、重写、封装、继承、接口、集合、反射、JDBC、文件流等Java知识,能熟练运用这些知识解决编程中的实际问题;还需要掌握数据库增、删、改、查的知识,能熟练编码解决数据访问需求。
1.2 知识与技能目标构建
依据教育部高等职业学校软件技术专业教学标准,软件技术专业人才培养方案,基于Java程序员岗位工作过程,结合大数据应用开发(Java)职业技能“1+X”证书,采用以“逆向工程式”为开发过程的课程内容处理思路,按照知识、能力、素质三方面构建Java实践教学内容。
结合当前新冠疫情,各地卫健委每天都在官网及时公布疫情相关数据,我们需要将疫情数据网页保存成TXT文件;通过Java文件流操作,读取文件为字符串;通过Java提供的API接口,对字符串进行分析、加工处理,重复分割成一条条疫情信息数据,然后存储到数据库中。
整个过程,可以分为信息的获取、分析、处理与存储共四个环节。在这些过程中,需要用到类和对象、方法、重载、重写、封装、继承、接口、集合、反射、JDBC、文件流等知识。
后期可利用数据库DML语言,按照不同的需求,对数据进行分析操作,而这些都是数据库课程核心知识与能力目标。
1.3 实践课学时安排
整个项目教学实施共计8学时,由教师用2学时讲解项目需求与整体设计思路,学生在课后查阅资料,试着进行项目设计;2学时讲解疫情数据实体类、设计数据库、数据库操作类;2学时讲解数据的分析与加工处理;2学时讲解测试类,实现项目主要功能的整合和测试。
2 教学实施
2.1 需求分析 各大网站都有官方发布的疫情数据,用文件流方式将我们所需要的疫情数据进行爬取,然后对数据进行预处理,之后将这些数据存储到数据库中。
2.2 项目设计
各大网站都以网页形式公布数据,不同网站源代码不尽相同,但都是将一条条数据通过同一个类选择器进行修饰与展现。为了简化操作过程,这里先手动将一条条重复数据保存到.txt文件。
读取文件并生成一个长的字符串,将字符串按照特定格式进行分割,得到一条条疫情数据。每条疫情数据包含地区码、地区名、新增数、确诊总数、治愈数、死亡数等信息,将每条疫情数据通过疫情对象承载,添加到泛型对象集合并排序;最后遍历泛型集合中的对象,将数据逐条添加进数据库,后面就可随时对数据进行查询与分析,项目处理流程如图1所示。
2.3 功能模块划分
整个项目文件包、类文件结构如图2所示。
(1)疫情监控数据Info实体类:一条疫情数据包含疫情发生的区域代码、区域名、新增确诊人数、确诊总人数、治愈人数、死亡人数等信息,为增强数据安全性,将所有字段访问属性设置为privat,然后对各字段进行get和set方法封装。
private int infoId;//地区ID
private String infoLocation;//地区名
private int infoAdd;//新增确诊人数
private int infoTotal;//确诊总人数
private int infoCure;//治愈人數
private int infoDie;//死亡人数
(2)InfoDao类:本类主要用来对Info实体类数据进行操作,包含对info实体对象数据添加进数据库,然后进行修改、删除、查询等操作。
public int addInfo(Info info)//将Info对象的信息存入数据库中。
public int deleteInfo(int infoId)//根据infoId删除数据。
public int updateInfo(int infoId,Info info)//根据infoId修改数据。
public Info getInfoById(int infoId)//根据infoId查询数据。
public List<Info> getOrderedInfo()//获取所有区域的数据,按确诊总数降序排列。
(3)IoUti类:本类包含一个字符串类型的字段,用于存放数据文件路径,还有一个数据文件读取的方法。
private final String fileUrl //txt文件路径。
public String readFile()//读取疫情数据txt文件。
(4)InfoUtil类:读取的数据文件中可能会有一些空格、换行标记、制表符等无效数据,需要对这些数据进行剔除、转换为合适的分隔符等预处理。
public String preString(String s, String oldString, String newString)//字符串替换。
public List<Info> stringToInfo(String s)//将特定规格字符串转换为Info实体类对象,添加进List集合并返回。
public List<Info> sortList(List<Info> infoList, Comparator <Info> c)//对infoList集合排序并返回。
(5)InfoUtilTest类:InfoUtil的测试类,对读取的数据进行预处理。
public void testPreString()//添加预处理数据测试。
public void testStringToInfo()//添加特定格式数据测试。
public void testSortList()//集合数据添加测试。
2.4 项目编码
(1)读取数据,将数据存储到缓冲区,以备后续处理。
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)字符串预处理,对字符串进行拆解,提取出地区码、地区名、新增确诊人数、确诊总人数、治愈人数、死亡人数等,然后赋值给疫情数据对象,将对象存储进List集合。
public String preString(String s, String oldString, String newString) { return s.replaceAll(oldString, newString); } //字符串替换
public List<Info> stringToInfo(String s) {
List<Info> infoList = new ArrayList<Info>();//创建新集合
String[] infoStrings = s.split(";");//按照";"拆分字符串,转换为数组
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); } //将当前info对象添加到集合中
return infoList; } //返回集合
public List<Info> sortList(List<Info> infoList, Comparator <Info> c) { //排序
Collections.sort(infoList, c); return infoList; }
(3)添加數据测试,为检验项目代码是否成功实现其功能,编写此类,通过多种数据来源测试程序功能是否实现。
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,孝昌区,0,19,1,0;").size(),2);}
public void testSortList() {
List<Info> infoList = new ArrayList<>();
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 结 论
结合程序员岗位需求、人才培养方案、课程教学大纲,将知识目标、能力目标,内化为项目技能点。近几年来,笔者将21点扑克牌游戏,双色球彩票,英雄联盟游戏,发红包游戏等多个学生感兴趣的案例引入程序设计类课程教学。
总体来讲,情景化、项目教学,实现了学生专业和个性共同发展,对提升学生对知识的运用能力、激发学生的创新能力都有很大的帮助。以任务为驱动、案例为载体,结合时代热点需求,通过合作探究,主动建构知识,解决生活中的实际问题,切实激发学生内在的学习兴趣,提升编程能力,实现工学结合、知行合一。
参考文献:
[1] 彭梦,谢雅.兴趣驱动的Java程序设计课程教学改革研究 [J].计算机教育,2019(11):116-120.
[2] 张良杰.应用智慧课堂的《Java程序设计》教改研究 [J].轻工科技,2020,36(6):195-197.
[3] 贾家新.JAVA框架技术的线上教学实践 [J].集成电路应用,2020,37(6):84-85.
[4] 笪林梅.“Java程序设计”课程小班化教学模式改革探索 [J].知识经济,2020(16):179-180.
[5] 邓田.大数据背景下基于OBE的微课教学改革研究与实践——以《Java程序设计》课程为例 [J].农家参谋,2020(15):193.
[6] 李胜岚,杨裴裴.高校Java课程教学改革研究 [J].计算机产品与流通,2019(10):190+206.
[7] 纪辉进.用C语言编写英雄联盟游戏 [J].现代信息科技,2020,4(5):69-71.
[8] 纪辉进.“C语言程序设计”教学案例分析——以发红包程序算法的实现为例 [J].现代信息科技,2020,4(4):95-96+99.
[9] 纪辉进.用C#语言实现双色球程序 [J].现代信息科技,2020,4(3):92-93+96.
[10] 纪辉进.C#WINFORM教学案例——五子棋 [J].科技视界,2017(19):138-139.
作者简介:纪辉进(1977—),男,汉族,湖北黄陂人,教师,讲师,本科,主要研究方向:编程语言教学。