您好,欢迎来到刀刀网。
搜索
您的当前位置:首页JAVA语言编程基础教案—2.2 学生成绩操作接口的实现

JAVA语言编程基础教案—2.2 学生成绩操作接口的实现

来源:刀刀网
山东理工职业学院单元教学过程设计首页

课程所属院(部):软件工程学院 2019--2020学年 第一学期 课程名称 单元标题 授课班级 的实现 Java语言编程基础 项目二任务2 学生成绩类操作接口任课教师 上课地点 第 周 星期 第 节 月 日 第 周 星期 第 节 月 日 学时 第 周 星期 第 节 月 日 知识目标 6 第 周 星期 第 节 月 日 第 周 星期 第 周 星期 第 节 月 日 能力目标 授课时间 第 节 月 日 1.能掌握利用接口编写程序的方法 教学目标 1. 了解接口的概念和意义; 2. 掌握定义接口和实现接口的方法; 3. 掌握定义数据表操作接口的方法; 4.掌握实现数据表接口的方法。 教学任务 通过接口提供的方法来操作数据库中的表 重点:定义接口和实现接口的方法 教学重、难点 难点:实现数据表接口的方法 教学材料或用具 教材、教案、课件、课程标准、案例素材及Eclipse开发软件 课后任务 1.利用抽象类分别求三角形、矩形和圆的面积、周长。 2.巩固例子 山东理工职业学院单元教学过程设计

步骤及时间 5分钟 5分钟 20分钟 教学内容 【组织教学】 1、检查学生出勤,作好学生考勤记录。 2、课堂提问,了解学生掌握所学知识情况。 3、强调课堂纪律,加强互动,活跃课堂气氛。 教师活动 学生活动 组织教学 任务导入 课件演示 案例操作讲解 指出学习重点和难点 配合教师组织教学 聆听互动 聆听 简单记录重要知识点、回答提问,观看并记忆各元素用法 【课题导入】 任务1.1用记事本完成了代码设计,但是还无法看到代码执行后的效果。任务二是在任务一的基础上,利用Java语言的开发工具运行该程序,并得到运行结果。在此过程中,需要了解开发工具的使用方法、文件建立的方法、代码的编写、存储,以及程序的运行过程。 【讲授新课】 8.4.1抽象类和接口 1.抽象类 抽象类是普通类与接口之间的一种中庸之道。Java规定,用关键字abstract修饰的类称为抽象类(abstract类),用关键字abstract修饰的方法称为抽象方法。 例如: abstract class Base{ //抽象类定义 abstract void method1(); //抽象方法定义 void method2(){ //具体方法定义 System.out.println(\"method2\"); } } 声明格式: abstract class 类名{ abstract 数据类型 方法名(参数表); } 【注意】(1)方法声明中没有{}; (2)方法声明最后的“;”不能省略。 【说明】 (1)用abstract修饰的类表示抽象类,抽象类不能被实例化,即不允许创建抽象类本身的实例。没有用abstract修饰的类称为具体类,具体类可以被实例化。 (2)用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。没有用abstract修饰 40分钟 的方法称为具体方法,具体方法具有方法体。 (3)抽象方法必须声明在抽象类中,而且抽象方法只需声明,不需实现。 (4)父类中的某些抽象方法不包含任何逻辑,需要在子类继承中由子类提供抽象方法的实现细节。 (5)含有抽象方法的类必须声明为抽象类(abstract类)。抽象类中不一定包含抽象方法,但包含抽象方法的类一定要声明为抽象类。 (6)抽象类中可以包含构造方法,由于不能利用抽象类直接创建对象,因此抽象类中定义构造方法是多余的。 【例8.1】找出下面程序中的错误,并说明原因。 abstract class Base{ abstract void method1(); abstract void method2(); } class Sub extends Base{ void method1(){ System.out.println(\"method1\"); } } 2.接口 接口(interface)就是方法和常量的集合,为了使Java程序的类层次结构更加合理,更符合实际问题的本质,编译者可以把用于完成特定功能的若干属性组织成相对的属性集合;凡是需要实现这种特定功能的类,都可以继承这个属性集合并在类内使用它,这种属性集合就是接口。 【说明】 接口使抽象的概念更向前迈进了一步,接口产生一个完全的抽象类,它根本就没有提供任何具体实现。允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体。接口只提供形式,不提供任何具体实现。 接口定义格式: [public] interface 接口名{ [public][static][final] 类型 变量名=常量值; [public][abstract]类型 方法名(参数列表); } 说明:接口修饰符为public或省略形式,分别为公共接口,或者是友好接口;而属性和方法均为public权限。 接口体由两部分组成: (1)对接口中属性的声明 接口中只能包含public、static、final类型的成员变量,因此接口中的属性都是用final修饰的常量。 (2) 对接口中方法的声明 接口中只能包含public、abstract类型的成员方法,不能有非抽象方法。在接口中只能给出这些抽象方法的方法名、返回值和参数列表,而不能定义方法体,即仅仅规定了一组信息交换、传输和处理的“接口”。 【例8.2】接口定义举例 public interface A { 50分钟 public static final int X=1; public static final int Y=2; public static final int Z=3; public void show(); } 【例8.3】找出下面程序中的错误,并说明原因。 public interface A{ int var; void method1(){ System.out.println(\"method1\"); } protected void method2(); static void method3(){ System.out.println(\"method3\"); } } 3.接口的实现 接口的实现:接口由类来实现,而且一个类能实现许多接口。 实现的格式如下: class 类名 implements 接口1 [,接口2,接口3,…,接口n]{ ......} 例如:假设A,B,C为已经定义的接口 public class MyInterface implements A,B,C{ ...... } 【说明】类MyInterface实现了三个接口,即实现三者所有方法。 【例8.4】实现SayHello接口 interface SayHello { void printMessage(); } class MySayHello implements SayHello { public void printMessage() { System.out.println(\"Hello\"); } } 【例8.5】找出下面程序中的错误,说明原因,并进行改正。 interface SayHello { void printMessage(); void receiveMessage(); } class MySayHello implements SayHello { public void printMessage() { System.out.println(\"Hello\"); } } 例题解析 指出每个例子应注意的点 互动交流 记录、记忆并提出疑问 【注意】 (1)接口一经声明并实现,即可以使用。 (2)同一个接口可以由多个类来实现,接口中的同一个方法在实现这个接口的不同的类中可以有不同的具体实现(多态性)。 (3)接口是一个规范,是一个抽象的概念,由类把这个规范具体实现。 4.类和接口的区别 (1)类只能继承一个类,而对于接口,类可以实现多个接口。 (2)对于继承性,类继承了超类的方法:子类可以选择是否覆盖超类的方法。接口的方法没有实现,因此,类必须实现接口中的每个方法。 (3)从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。 (4)接口像一个规范,一个协议,而类则是实现了这个协议,满足这个规范的具体实现。 5.接口和抽象类的区别 相同点: (1)都包含抽象方法,声明多个类共享方法首部。 (2)都不能被实例化。 不同点: (1)一个类只能继承一个抽象类,而一个类可以实现多个接口。 (2)访问权限不同,抽象类和普通类一样,而接口的访问权限是默认和public,接口成员都是public。 (3)抽象类和接口中的成员变量不同。 (4)抽象类可包含抽象方法和普通方法,接口只能是抽象方法。 6.接口的作用 (1)使用接口可以使设计与实现相分离,使使用接口的用户程序不受不同接口实现的影响,不受接口实现改变的影响。 (2)弥补Java只支持类单继承的不足,它用来完成多继承的一些功能。Java接口反映了对象较高层次的抽象,为描述相互似乎没有关系的对象的共性提供了一种有效的手段。 7.接口的继承 接口之间可以存在继承关系,但不能是实现关系。 interface A{ void method1(); } interface B{ void method2(); } interface D extends A,B{ } //合法 interface E implements A,B{ } //错误 【例8.6】 //定义接口 interface Animal{ void eat(); void sleep();} interface Man extends Animal{ void think();} interface School{ void classroom();} //定义抽象类Student abstract class Student implements Man,School{ public abstract void study(); } //定义大学生类 class Undergraduate extends Student{ String name; public Undergraduate(String name){ this.name=name; } public void study(){ System.out.println(name+\"can study.\"); } public void classroom(){ System.out.println(name+\"has classroom to study.\"); } public void think(){ System.out.println(name+\"can think.\"); } public void eat(){ System.out.println(name+\"can eat.\"); } public void sleep(){ System.out.println(name+\"can sleep.\"); } void ablity(){ this.sleep(); this.eat(); this.think(); this.study(); this.classroom(); } } //定义测试类 public class Exp86{ public static void main(String args[ ]){ Undergraduate s=new Undergraduate(\"李平\"); s.ablity(); } } 运行结果: 20分钟 50分钟 图8-4 例8.4运行效果图 8.接口的多态 多态:同一个接口可以由多个类来实现,接口中的同一个方法在实现 这个接口的不同的类中可以有不同的具体实现。 【例8.7】 public interface A { public static final int X = 1; public static final int Y = 2; public static final int Z = 3; public void show(); } class B implements A { public void show() { System.out.println(\"class B\"); } } class C implements A { public void show() { System.out.println(\"class C\"); } } 8.4.2 List与ArrayList List包括List接口以及List接口的所有实现类。因为List接口实现 了Collection接口,所以List接口拥有Collection接口提供的所有常用方 法,又因为List是列表类型,所以List接口还提供了一些适合于自身的 常用方法,如表8-1所示。 表8-1 List接口相关方法 方法名称 功能简介 用来向集合的指定索引位置添加对象,其他 add(int index,Object obj) 对象的索引位置相对后移一位,索引位置从 0开始。 addAll(int,Collection 用来向集合的指定索引位置添加指定集合 col) 中的对象。 remove(int index) 用来清除集合中指定索引位置的对象 用来将集合中指定索引位置的对象修改为set(int index,Object obj) 指定对象 get(int index) 用来获得指定索引位置的对象 indexOf(Object obj) 用来获得指定对象的索引位置。当存在多个时,返回一个索引位置;当不存在时,返回-1 用来获得指定对象的索引位置。当存在多个时,返回最后一个的索引位置;当不存在时,返回-1 lastIndexOf(Object obj) 2.实例化接口 List接口提供的适合于自身的常用方法均与索引有关,这是因为List集合为列表类型,以线性方式存储对象,可以通过对象的索引操作对象。 List接口的常用实现类有ArrayList和LinkedList,在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为ArrayList或LinkedList。 格式: // 利用ArrayList类实例化List集合 List<数据类型A> 对象名称 = new ArrayList<数据类型A>(); // 利用LinkedList类实例化List集合 List<数据类型B> 对象名称= new LinkedList<数据类型B>(); 3. add(int index, Object obj)方法和set(int index, Object obj)方法的区别 在使用List集合时需要注意区分add(int index, Object obj)方法和set(int index, Object obj)方法,前者是向指定索引位置添加对象,而后者是修改指定索引位置的对象。 【例8.8】遍历List举例1 import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class Exp88{ public static void main(String[] args) { String a = \"A\ List list = new LinkedList(); list.add(a); list.add(e); list.add(d); list.set(1, b);// 将索引位置为1的对象e修改为对象b list.add(2, c);// 将对象c添加到索引位置为2的位置 Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } } 运行结果: A B C D 因为List集合可以通过索引位置访问对象,所以还可以通过for循环遍历List集合,例如遍历上面代码中的List集合的代码如下: 【例8.9】遍历List举例2 import java.util.ArrayList; import java.util.LinkedList; import java.util.Iterator; import java.util.List; public class Exp{ public static void main(String[] args) { System.out.println(\"开始:\"); String a = \"A\ List list = new LinkedList(); list.add(a); list.add(e); list.add(d); list.set(1, b);// 将索引位置为1的对象e修改为对象b list.add(2, c);// 将对象c添加到索引位置为2的位置 Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } for (int i = 0; i < list.size(); i++) { // 利用get(int index)方法获得指定索引位置的对象 System.out.println(list.get(i)); } System.out.println(\"结束!\"); } } 运行结果: 开始: A B C D A B C D 结束! 【知识拓展】 1.Java的forEach用法 Java SE5 引入了一种更加简洁的for语法格式,可以用于遍历数组和集合,是for循环的增强版本。foreach虽然对for循环进行了简化,但是并不是说foreach就比for更好用,foreach适用于循环次数未知,或者计算循环次数比较麻烦的情况。但是更为复杂的一些循环还是需要用到for循环。这里需要注意一点:forEach只能取值,不能赋值。 forEach格式如下: for(元素类型 元素变量x:遍历对象(数组或集合)){ 引用元素变量x的语句; } 【例8.10】遍历数组示例 import java.util.*; public class fe { public static void main(String[] args) { int[] a={11,22,33,44,55,66}; for(int x:a){ System.out.println(x); } } } 图8-6 forEach实例运行结果 2.Java迭代器 迭代器是一种模式,可以使得序列类型的数据结构的遍历行为与被 遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要 拿到这个对象,使用迭代器就可以遍历这个对象的内部。 不同java集合的内部结构是不一样的,如果为每种容器都单独实现 一种遍历方法十分麻烦,为了简化遍历容器的操作,所以推出了java迭 代器(Iterator)。 Iterator接口包含三个方法:hasNext(),next(),remove()。 hasNext():每次next之前,先调用此方法探测是否迭代到终点。 next():返回当前迭代元素 ,同时,迭代游标后移。 remove():删除最近一次已经迭代出去的那个元素。 【注意】 只有当next()执行完后,才能调用remove()函数。比如你要删除第一 个元素,不能直接调用 remove(),而要先next()一下;如果没有先调用 next()就调用remove()方法是会抛出异常的。 【例8.11】迭代示例 60分钟 import java.util.ArrayList; import java.util.Iterator; public class diedai{ public static void main(String[] args) { ArrayListlist=new ArrayList(); list.add(\"中国加油\"); list.add(\"武汉加油\"); list.add(\"大家都要好好的\"); for(Iterator iterator=list.iterator();iterator.hasNext();) { System.out.println(iterator.next()); } } } 图8-7 迭代示例运行结果 【技能训练】 一、 任务分析 操作步骤如下: 步骤一:创建学生成绩表操作接口; 步骤二:实现学生成绩表操作接口。 二、任务实施 步骤一:创建学生成绩表操作接口; 1.在com.sdlg.dao包中右单击,然后从弹出的菜单中选择“new”,接着选择“interface”,新建接口StuGradeDao,如下图所示: 操作演示 仔细讲解制作此任务的每一个步骤 适当提问 对学生提出的问题给于指导 记录并记忆 回答教师提出的疑问 记忆代码含义 图8-1 新建StuGradeDao界面 【注意】创建接口格式 public interface 接口名 { } 2.在接口中定义针对学生成绩表操作的各个方法。 package com.sdlg.dao; import java.util.List; import com.sdlg.entity.Stu; public interface StuGradeDao { boolean add(Stu stu);//添加记录 boolean update(Stu stu);//修改记录 boolean delete(String sno);//删除记录 List queryAll();//查找全部记录 } 步骤二:实现学生成绩表操作接口。 1.在com.sdlg.dao.impl包上右单击,选择“new”,选择“class”,新建类 StuGradeDaoImpl类,如下所示: import com.sdlg.dao.StuGradeDao; public class StuGradeDaoImpl implements StuGradeDao{ } 【注意】implements StuGradeDao 为实现该接口。 2.实现该接口,当未实现接口中定义的每一个方法时,将提示错误,如 下图所示: 图8-2 错误提示 【注意】这里的实现在于实现该接口中定义的每一个方法,哪怕有一个方 法没有被实现,也会提示错误,其次,可以通过把该类定义为抽象类来解 决问题,使错误消失。这里,我们要求实现每一个接口中定义的方法。 3.在左侧的错误符号上单击,从弹出的提示中,选择“Add unimplemented methods”,如下图所示: 图8-3 通过错误提示添加未实现方法 4.实现各方法后的代码如下所示: import java.util.List; import com.sdlg.dao.StuGradeDao; import com.sdlg.entity.Stu; public class StuGradeDaoImpl implements StuGradeDao{ @Override public boolean add(Stu stu) { // TODO Auto-generated method stub return false; } @Override public boolean update(Stu stu) { // TODO Auto-generated method stub return false; } @Override public boolean delete(String sno) { // TODO Auto-generated method stub return false; } @Override public List queryAll() { // TODO Auto-generated method stub return null; } } 【注意】从语法的角度来讲,只要给各方法加上{},即方法体,则可理解为实现,语法上可以通过。但是,要实现其功能,我们还需要在方法体中添加各功能代码。 5.实现各方法的功能 package com.sdlg.dao.impl; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.sdlg.dao.StuGradeDao; import com.sdlg.entity.Stu; import com.sdlg.util.DBConnection; public class StuGradeDaoImpl implements StuGradeDao { DBConnection con = new DBConnection(); @Override public boolean add(Stu stu) { // 建立插入sql语句 String sql = \"insert into student(sno,sname,classname,sqlkc,java,web,gym)values(?,?,?,?,?,?,?)\"; int result = con.update(sql, stu.getSno(), stu.getName(), stu.getClassname(), stu.getSql(), stu.getJava(), stu.getWebdesign(), stu.getGym()); if (result > 0) { return true; } else { return false; } } @Override public boolean update(Stu stu) { // 建立更新sql语句 String sql = \"update student set sname=?, classname=?, sqlkc=?, java=?, web=?, gym=? where sno=?\"; int result = con.update(sql, stu.getName(), stu.getClassname(), stu.getSql(), stu.getJava(), stu.getWebdesign(),stu.getGym(), stu.getSno()); if (result > 0) { return true; } else { return false; } } @Override public boolean delete(String sno) { // 建立删除sql语句 String sql = \"delete from student where sno=?\"; int result = con.update(sql, sno); if (result > 0) { return true; } else { return false; } } @Override public List queryAll() { return stulist(con.query(\"select * from student\")); } private List stulist(ResultSet rs) { List stulist = new ArrayList(); try { while (rs.next()) { Stu stu = new Stu(); stu.setSno(rs.getString(\"sno\")); stu.setName(rs.getString(\"sname\")); stu.setClassname(rs.getString(\"classname\")); stu.setJava(rs.getFloat(\"java\")); stu.setSql(rs.getFloat(\"sqlkc\")); stu.setWebdesign(rs.getFloat(\"web\")); 10分钟

} 三、分组练习 按班级人数分成小组,小组内成员合作完成相应的任务。 四、巡回指导 巡回指导 精确操作步骤,指导学生,及时解决学生在上机过程中遇到的问题。 【任务总结】 1、学生完成的课堂任务总结。 2、本节课知识点提问。 【布置作业】 1.利用抽象类分别求三角形、矩形和圆的面积、周长。 2.巩固例子 } stu.setGym(rs.getFloat(\"gym\")); stulist.add(stu); } } catch (SQLException e) { e.printStackTrace(); } return stulist; 上机实践操作任务、自主探究和小组协作 提出疑问 配合回答提问 提出操作疑问 利用课上剩余时间或课下时间完善任务

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务