JAVA面向对象的程序设计_第1页
JAVA面向对象的程序设计_第2页
JAVA面向对象的程序设计_第3页
JAVA面向对象的程序设计_第4页
JAVA面向对象的程序设计_第5页
已阅读5页,还剩809页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java面向对象程序设计第一次课你准备好了吗?动手动脑查资料多练习第一次课内容课程简介授课思路对学生要求Java语言的发展Java发展历程Java三大平台Java语言特点Java语言结构Java编译过程-虚拟机、运行机制Java开发工具安装JDK设置运行环境使用记事本编写第一个java程序-开发步骤、框架、保存、编译、运行学生用记事本练习输出“我的第一个java程序”课程简介该课程是计算机应用专业的一门专业基础课前导课程:程序设计基础后续课程:iphone系统应用与开发、Android系统应用与开发课程目标授课思路教学项目和学做项目同时进行对学生要求参考教材Java程序设计教程施霞萍机械工业出版社Java学习笔记林信良清华大学出版社21天学通java庞永庆电子工业出版社如何学习java奠定java语法基础看程序,练习——熟悉语法、程序结构、总结思路运用基本的Java

SE

API中文、英文API文档使用搜索引擎寻找问题答案加入论坛参与讨论Java技术论坛新手版FAQ目录学习地图Java官方网站上,java技术概念地图(图表方式展示各种需求下的学习方向参考)Java语言发展机器语言与汇编语言二进制代码符号语言(经过汇编程序翻译为二进制代码)高级语言-接近于自然语言面向过程basic、fortron、pascal、c(经过解释或编译)面向对象随着图形用户界面、多任务操作系统而发展Java是继C++后发展的一种面向对象语言Java发展历程Java发展历程Java三大平台JavaSE:各应用平台基础JavaME:开发小型数字设备JavaEE:进行企业级开发Java

SE平台JavaSE包含4部分:JVM、JRE、JDK与java语言Java语言特点易于学习高效率的执行方式摒弃低级、困难、容易混淆、不经常使用功能与平台无关性字节码分布式数据分布、操作分布安全性自带配置策略设置可访问资源域多线程并发执行,同步机制Java编译过程-虚拟机、运行机制

Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。提问什么是字节码Java可以跨平台的原因JavaSE、JDK、JRE、JVM差异JVM、JRE、JDK与java语言jdk:是java开发用的,里面有编译器。jre:是运行java程序用的,如果你只是需要运行程序,那只装jre就可以了.jvm:jre和jdk都需要jvm的支持,jvm是运行和编译java程序的核心Java开发工具JDK(JavaDelvelopmentKit)作用:java开发工具包和运行时环境下载:/technetwork/java/javase/downloads/index.htmlJava开发工具

JcreaterJbuilderEclipseNetBeans安装JDK

JDK目录结构Bin:包含可执行文件Javac:编译器Java:解释器Lib:归档包文件,类库JRE:运行时环境根目录Demo:示例程序设置运行环境

设置JAVA_HOME环境变量:JDK路径设置Path环境变量:开发工具(bin)路径设置CLASSPATH环境变量:类路径(lib)测试:在dos界面下输入java或javac设置运行环境练习删除机房中原来path和classpath路径测试;重新设置path和classpath路径再次测试;使用记事本编写第一个java程序开发步骤使用记事本编写第一个java程序框架使用记事本编写第一个java程序编写、保存文件扩展名以.java结束主文件名与类名称必须一致使用记事本编写第一个java程序编译使用记事本编写第一个java程序运行练习1学生用记事本练习输出“我的第一个java程序”常见错误1常见错误2常见错误3常见错误4排错编译错误1Error:cannotread:HelloWorld.javaclassHelloWorldispublic,shouldbedeclardinafilenamedHelloWorld.javaCannotfindsymbolJavac不是内部或外部命令、可执行的程序或批量文件Path设置有误Java.lang.NoClassDefFoundErrorClasspath设置是否正确Java.lang.NosuchMethodError:main练习2注释1注释2练习3为刚才两个练习加上注释注意缩进用IDE开发java程序用Eclipse完成练习1用NetBeans完成练习2Java程序作业自行下载并安装JDK6了解JDK和JRE的安装位置自行设置JAVA_HOME、Path、Classpath自行编写并执行一个java程序编写规范:注释、缩进、大小写等编译、运行机制排错分析查阅Java语言的发展Java发展历程Java三大平台Java语言特点什么是字节码Java可以跨平台的原因JVM、JRE、JDK关系Java开发工具JDK目录结构下载JDK自行设置JAVA_HOME、Path、ClasspathJava面向对象程序设计第二次课内容回顾

Java三大平台Java语言特点Java语言结构Java编译过程-虚拟机、运行机制Java开发工具安装JDK设置运行环境使用记事本编写第一个java程序-开发步骤、框架、保存、编译、运行提问Java源程序后缀名?Java字节码文件后缀名?复习用NetBeans创建项目,在控制台显示自己的姓名和年龄。语法入门学习java语法目的:如何告诉计算机,希望计算机做什么。学习程序中用到的数据有哪些(数据类型)这些数据可以进行哪些运算(变量、运算符)在某些情况满足时要做什么(流程控制语句)Java语言基础知识第二次课内容下载、安装Eclipse或NetBeans使用Eclipse和NetBeans开发java程序程序结构和java输出-HelloWorld-lang包、System类控制台输入-包、API、Util包、Scanner类数据类型-打印打折后商品价格变量运算符、表达式流程控制语句-收银台计算机程序、数字密码锁HelloWorld演示用Eclipse输出HelloWorldEclipse安装(插件安装)项目创建源程序编写、编译、运行HelloWorld演示用Netbeans输出HelloWorld掌握用Netbeans编写程序API、Package、importAPI文档定义包package包名;指定引用类importjava.applet.Applet文档注释、块注释、行注释输入输出语句Java的API类库与API文档SDK给出了一套标准的类库,这些类为执行编程任务提供了方法和接口。类库被组织成很多包。API文档是具体说明类库如何使用的文档。定义包package定义类导入类import标准输出串System.out.println();语句类.对象.方法类.方法对象.方法打开中文API文档查找System类,标准输出流out对象,println()输出方法。System类的使用其他输出方法println()print()printf()常用转义字符javac常用格式转换字符Java.lang包自动导入最广泛的包System类Java输入方法使用标准输入串in的read()方法(使用较少,只取得一个字节数据)使用Scanner使用BufferedReader使用Scanner输入示例ScannerDemo导入Java.util.Scanner类Util包Scanner类新增一个Scanner对象变量使用next()方法输入字符串\使用nextInt()方法输入数字Java.Util包介绍Java的实用工具类库java.util包。在这个包中,Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历(Calendar)类来产生和获取日期及时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量(Vector)、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。

Scanner类输入对字符串和其他类型进行操作使用BufferedReader输入取得包括空格符的输入BufferedReaderbuf=newBufferedReader(newInputStreamReader(System.in));buf.readLine();在后面章节介绍数据类型字节型字符型65536个字符,Unicode编码‘\u0000’——’\uFFFF’布尔型true/false整型浮点型0‘\u0000’False000L0.0f0.0变量示例DefiMyVar:变量定义变量的作用域和生存期数据类型示例DataRange:数据类型范围普通类型和对象类型类型转换publicstaticDouble

valueOf(double

d)publicdoubledoubleValue()数据类型学做:打印商品价格阶段一:输出打折后价格阶段二:输出打折后和原价价格阶段三:输入原价,输出打折价格Scanner的next()方法输入BufferedReader的readLine()方法输入Sting类介绍数据类型转换运算符查阅Java文档、类结构Java.lang包、System类的使用Java.Util包、Scanner类的使用包的概念、使用输出串:System.out.println();查阅java.lang包中8个对象类型和普通类型的区别和使用作业练习商品打折程序练习用Scanner输入信息查阅Scanner所有输入方法的使用查阅普通类型和对象类型的区别Java面向对象程序设计第三次课内容回顾

回顾下载、安装Eclipse或NetBeans步骤回顾HelloWorld编写步骤回顾基础知识运用System类的out对象的println()完成输出运用Scanner类完成输入数据类型(强调布尔类型)变量运算符、表达式-强调逻辑表达式流程控制语句第三次课内容强化练习-巩固基础知识变量:赋值示例数据类型:输出范围示例流程语句:收银台结账示例、流程控制语句流程控制语句流程控制语句流程控制语句示例收银台计算SuperMarket:编写收银台结账程序,不断输入用户购买的商品价格,直到输入-1为止。输出商品金额总计、用户所付金额以及应找金额。流程控制语句流程控制语句示例解密程序PassWord阶段一:使用break语句阶段二:使用continue语句装箱拆箱引Scannerscanner=newScanner();scanner.next();打包基本数据类型Long、Integer、Short、Character、Double、Float、Boolean、Byte等是基本数据类型打包后的对象。打包后的对象具有更多更有意义的操作。示例:WrapperDemo修改Integerinteger=10;自动实现了装箱功能改写范例提问:能否用==代替compareTo呢?强化练习-巩固基础知识Java面向对象程序设计第四次课内容回顾

控制台输入-包、API、Util包、Scanner类回顾基础知识数据类型变量运算符、表达式流程控制语句第四次课内容掌握数组基本用法如何声明数组如何为数组分配空间如何为数组赋值会运用数组解决实际问题求平均值求最大、最小值排序任务一:利用数组完成数值的排序任务二:使用数组存放10个人的成绩,并输出其中的最大值和最小值数组在内存中的存储C语言如何声明一个数组?Java语言示例:SimpleArray使用数组声明数组数组初始化数组赋值数组赋值示例:ArrayDemo使用数组求平均值示例:AverageInput现场编程求五个数的平均值声明数组分配空间初始化录入赋值求平均值现场编程求最大值求最小值升序排序Arrays类Arrays类应用搜索Binarysearch();方法局限性:对于有重复数据无法保证找到的时哪一个。填充、比较现场编程排错小结会定义数组会打印数组元素值知道数组元素初始值会使用Arrays类来协助数组操作体会面向对象思想练习提高练习在排好序的数组中,添加一个数,使其仍然有序。有30个0-9之间的数,分别统计这10个数字共出现了多少次?

编写java程序,求13-23+33-43+…+973-983+993-1003的值。

判断某数是否能够被3,7,5同时整除。Java面向对象程序设计第五次课内容回顾

掌握数组基本用法如何声明数组如何为数组分配空间如何为数组赋值会运用数组解决实际问题求平均值求最大、最小值排序任务一:利用数组完成数值的排序任务二:使用数组存放10个人的成绩,并输出其中的最大值和最小值String类的使用任务三:模拟邮箱登陆,验证用户名和密码第五次课内容讲解java版万年历回忆上学期所学万年历手写万年历步骤抽查小组讲解教师总结万年历算法分阶段完成万年历教师梳理基础知识作品展示String类的使用任务三:模拟邮箱登陆,验证用户名和密码任务描述阶段划分内容回顾阶段一阶段二阶段三阶段四阶段五总结字符串——Java中最常处理的对象字符串长度字符串长度字符串比较字符串比较字符串比较字符串比较任务一:学员入学注册任务一:学员入学注册任务二:打印学员成绩单任务二:打印学员成绩单任务二:打印学员成绩单任务三:作业提交系统任务三:作业提交系统可变字符串StringBuilder:一个可变的字符序列。StringBuffer:线程安全的可变字符序列。区别:从JDK5开始,为StringBuffer类补充了一个单个线程使用的等价类,即StringBuilder。通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。但将StringBuilder的实例用于多个线程是不安全的。完整示例实现了从键盘上不断录入信息功能StringBuffer使用万年历实现查阅String类求字符串长度字符串比较字符串连接提取字符串StringBuffer类toString()追加字符串其他用法Java面向对象程序设计第六次课内容回顾

回顾java版万年历回顾万年历算法涉及基础知识回顾练习解决思路在排好序的数组中,添加一个数,使其仍然有序。有30个0-9之间的数,分别统计这10个数字共出现了多少次?

编写java程序,求13-23+33-43+…+973-983+993-1003的值。

判断某数是否能够被3,7,5同时整除。第六次课内容教师讲解-类、属性设置问题讲解收银员布莱尼引出Class类、类的属性学生讨论现实生活中可以定义出什么类讲解类的模板、定义收银员类、描述属性学生定义上机时间类教师讲解-方法类与结构体不同处-方法方法功能描述收银员方法学生定义上机时间方法教师讲解-对象用收银员类定义收银员布兰妮这个对象通过上机实现访问如何访问对象的属性?如何调用对象的方法?如何使用测试类来测试我们定义好的类及对象。通过单步执行,使学生更加清楚方法的调用过程。练习-类、对象、属性、方法练习运用StringBuffer实现从键盘不断录入内容,并且实现录入内容的删除和插入。对象和类

任务目标什么是OOPOOP:ObjectOrientedProgramming,面向对象的程序设计。所谓“对象”就是一个或一组数据以及处理这些数据的方法和过程的集合。比较面向过程的思想和面向对象的思想:面向过程的思想:由过程、步骤、函数组成,以过程为核心;面向对象的思想:以对象为中心,先开发类,得到对象,通过对象之间相互通信实现功能。为什么要使用面向对象

面向对象的程序设计完全不同于传统的面向过程程序设计,它大大地降低了软件开发的难度,使编程就像搭积木一样简单,是当今电脑编程的一股势不可挡的潮流。首先,面向对象符合人类看待事物的一般规律。其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。以对象为中心问题:有一个帐户,账户中有存款余额,实现用户对帐户的存款、提款、查询余额。以对象为中心思考问题:首先识别出问题中的对象识别出对象的属性和可操作的方法帐户用户余额存款提款查询余额实例化一个帐户实例化一个帐户实例化一个用户交互描述对象、对象的属性和方法找出描述中的对象、抽象出类、类的属性、方法类示例示例:Account帐户用户余额存款提款查询余额实例化一个帐户实例化一个帐户实例化一个用户例在不同的培训中心(北京中心,杭州中心….),你会感受到相同的教学氛围和教学环境,用类的思想输出培训中心的信息。完善Account类和AccpSchool类,为该类创建对象并实现对象交互基本操作。查阅什么是面向对象(OOP)什么是类什么是对象属性方法什么是封装作业实现用户登录系统板书一、描述对象、对象的属性和方法 学生举例:2个二、抽象类 学生抽象类:2个三、class定义类、定义类的步骤、格式 学生定义类:2个四、示例:Account、AccpSchool

学做五、创建和使用对象 学做六、完善Account类和AccpSchool类,为该类创建对象并实现对象交互基本操作。 学做七、综合类:编写学生类、教师类、编写音乐类,显示音乐信息、编写手机类,显示手机信息。 练习八、基本数据类型和引用数据类型区别Java面向对象程序设计第七次课内容回顾

会定义类,描述类的特征和行为如何定义类的一个方法?类和对象的区别?会创建和使用对象创建对象的语法?如何使用别的对象的方法?如何使用同一个类的方法?程序入口main方法可以直接使用类的方法吗?作业讲解第七次课内容讲解小案例-复习类、对象、属性、方法教学项目:人机互动版猜拳游戏分析业务;抽象出类;描述类的特征和行为;创建用户类和计算机类创建游戏类,编写它的方法:初始化、计算对战结果、显示结果编写游戏类的方法:开始游戏编写入口程序学做项目:人机版猜数游戏演示项目,提出任务业务分析手写思路上机实现复习实际问题-抽象模型-编写代码步骤一、描述对象、对象的属性和方法二、抽象类三、class定义类、定义类的属性和方法四、实现类的方法五、创建和使用对象六、调用类的方法练习在不同的培训中心(北京中心,杭州中心….),你会感受到相同的教学氛围和教学环境,用类的思想输出培训中心的信息。讲解小案例-强化类、对象、属性、方法定义鼠标类,包括:品牌、颜色、类型三个属性,一个方法,打印鼠标的属性;

定义键盘类,包括:品牌、颜色、类型三个属性,一个方法:打印键盘的属性;

定义电脑类:包括:品牌、鼠标、键盘,一个方法:用来打印电脑的属性。

定义一个包含main方法的测试类,在main方法中,生成电脑类的对象,并打印该电脑的属性。到此学生应掌握定义类描述对象、对象的属性和方法抽象类class定义类、定义类的属性和方法实现类的方法使用类创建和使用对象简单调用类的方法类的方法示例:如何定义类的方法示例:LionToy示例:方法调用示例:LionToy示例:在一个方法中调用另一个方法LionToy示例:ScoreCalu注意:给类的方法添加注释查阅类的方法板书复习实际问题模型化步骤练习输出培训中心信息。练习三个小案例示例LionToy方法调用在一个方法中调用另一个方法变量作用域综合案例编写成绩类,计算并显示总成绩和平均成绩练习:手机类、电池类Java面向对象程序设计第八次课内容回顾

回顾猜拳游戏分析过程、实现过程回顾猜数游戏分析过程、实现过程作业讲解第八次课内容完成学做项目:猜数游戏总结类、对象、属性、方法查缺补漏:专题讲解专题一:static关键字专题二:main方法String的对象和方法专题四:引用传递任务效果需求分析分析业务:首先选择角色,开始游戏,选择出拳,我出拳,电脑出拳,比较出拳结果,显示结果,重新游戏;抽象模型:对象:我、电脑方法:选择角色、开始游戏、选择出拳、电脑出拳、比较出拳结果、显示结果,重新游戏。抽象类:我(人类)电脑(电脑类)游戏类属性属性属性角色角色人积分积分电脑方法方法方法选择角色选择角色开始游戏选择出拳电脑出拳比较出拳结果显示结果重新游戏创建用户类创建计算机类创建游戏类创建类并定义方法修改Person类和Computer类的方法,将选择出拳的结果返回创建游戏类实例化人和电脑选择角色实现比较输赢方法实现显示结果方法编写测试类问题电脑自动选择角色,应提示选择了什么角色消除人和电脑同时选择了一个角色解决完善运行结果增强提示是否开始游戏提示是否进行下一轮游戏作业采用OOP思想:录入学生成绩,显示总成绩和平均成绩。将每次比较显示的结果改为多轮后确定输赢显示最终比较结果。Java面向对象程序设计第九次课内容回顾

类的两大成员方法的定义和调用Static关键字的作用作业讲解第九次课内容提出小任务:定义教师类分组实现,讨论对比教师讲解Private关键字、封装上机编程实现一个最简单的构造方法讲解this关键字构造方法的特点构造方法在什么时候被调用学生练习-实现一个book类提出企业编程中常用的方法:setter/getter方法教师上机编程:在教师类中,为私有属性name增添两个方法:Setter方法和getter方法,并在测试类中使用学生学做:Book类中的私有属性增添setter/getter方法练习强化封装概念练习采用OOP思想:录入学生成绩,显示总成绩和平均成绩。总结至此学生掌握:给定简单问题-建立OOP模型-编码实现理解并运用了类、对象、属性、方法、方法调用解决问题。新内容:封装构造方法Privategetter(),setter()封装问题?学生编写,出现问题:教师年龄小于22岁解决问题讲解Setter()、getter(),通过在setter()中设定条件来解决输入的年龄不小于22岁。讲解案例:教师类为什么需要封装如何封装练习案例:Book类、Acount类构造方法This关键字讲解案例:教师类Teacher4为什么需要构造方法如何构造练习案例:Book类、Acount类带参数构造方法构造方法重载讲解案例:教师类Teacher4什么是构造方法重载如何重载练习案例:Book3类、Acount类上机封装板书通过编写教师类来讲解封装Setter()、getter()、private通过输出教师信息来讲解构造方法This关键字构造方法重载作业理论课作业完成综合项目迷你DVDJava面向对象程序设计第十次课内容回顾

使用private关键字修饰某个成员变量后,这个成员变量可以被其它类访问吗?在Java程序中,封装带给我们的好处是什么?和封装有关重要概念:Private关键字、封装this关键字构造方法setter/getter方法作业讲解第十次课内容例:设备类、电脑类、鼠标类、键盘类为什么需要继承电脑类、键盘类、鼠标类中是否都是重复的代码继承解决了代码重复如何实现继承extends方法重写super示例现场编程定义设备类定义电脑类、键盘类、鼠标类继承设备类输出电脑、键盘、鼠标的信息示例super方法重写-多态的表现引出多态继承、多态练习示例重载-多态表现三个同名方法areaPublicdoublearea(floatr);Publicvoidarea(floata,floatb);Publicvoidarea(floata,floatb,floatc);示例:实现圆、矩形、三角形的面积板书为什么需要继承减少重复代码如何实现继承Extends方法重写super作业下发理论课作业作业人机互动版猜数游戏参考:项目设计ppt训练的技能点会定义类,描述类的属性和方法会创建和使用对象会使用包组织Java工程Java面向对象程序设计第十一次课内容回顾

什么继承Extends方法重写super作业讲解第十一次课内容强化多态性练习:

定义一个我们自己的数学类,该类中包含求最大值的方法,能够为两个整数求最大值,能够为单精度浮点数求最大值,能够为字符求大值,能够为双精度浮点数求最大值

多态什么是多态多态解决了什么问题子类具有不同的特征增加新的类型,不必修改父类如何实现多态板书什么是多态如何实现多态子类重写父类方法Java面向对象程序设计第十二次课内容回顾

封装privatethis

构造方法Getter()、setter()继承ExtendsProtectedsuper多态方法重写方法重载abstract第十二次课内容抽象类final修饰符接口回顾举例说明在什么样的情况下,需要使用到继承?在Java程序中,多态性带给我们的好处是什么?361预习检查什么是常量?Java中,常量的定义规则有哪些?什么是面向接口编程,它的好处是什么?362抽象类用abstract修饰的类是抽象类。抽象类抽象类示例:Areafinal成员变量final成员变量示例final类如果一个类是final类,则该类中的方法也是final方法。final方法不能被重写的方法本章任务升级HelloACCP,打印ACCP中心与教员的详细信息:正确使用面向接口编程的思想提高系统的可扩展性及可维护性370本章目标掌握Java接口理解Java接口与多态的关系掌握面向接口编程的思想掌握常量接口的使用371生活中的接口电脑主板上的PCI插槽的规范就类似于Java接口372声卡显卡网卡每种卡的内部结构都不相同,可以把声卡、网卡、显卡都插在PCI插槽上,而不用担心哪个插槽是专门插哪个卡的主板一个Java接口是一些方法特征的集合,但没有方法的实现373publicinterfacePCI{

publicvoidstart();

publicvoidstop();

}classSoundCardimplementsPCI{publicvoidstart()

{

System.out.println("Dudu...");

}

publicvoidstop()

{

System.out.println("Soundstop!");

}

}Java接口中定义的方法在不同的地方被实现,可以具有完全不同的行为这是Java接口,相当于主板上的PCI插槽的规范classNetworkCardimplementsPCI{publicvoidstart()

{

System.out.println("Send...");

}

publicvoidstop()

{

System.out.println("Networkstop!");

}

}声卡、网卡都实现了PCI插槽的规范,但行为完全不同什么是Java接口2-2374publicclassAssembler{

publicstaticvoidmain(String[]args){

PCInc=newNetworkCard();

PCIsc=newSoundCard();

nc.start();sc.start();

}

}可以使用Java接口标识类型运行时,根据实际创建的对象类型调用相应的方法实现Dudu...Send...控制台输出21为什么需要Java接口5-1为ACCP各中心开发这样一个小系统,包含类型:教员、中心、打印机,具体要求如下:教员、以及中心都具有方法:输出详细信息中心具有属性:打印机,能够通过中心的打印机打印教员或中心的详细信息系统要具备良好的可扩展性与可维护性375打印教员中心教员

详细信息中心

详细信息detail方法(输出详细信息)为什么需要Java接口5-2以下这个解决方案中存在着什么问题?376publicclassAccpTeacher1{//输出教员的详细信息publicStringdetail(){ return"本人是ACCP教员";}}publicclassAccpSchool1{privatePrinterprinter=newPrinter();//输出中心的详细信息publicStringdetail(){return"这里是ACCP中心";}//使用打印机打印教员信息publicvoidprint(AccpTeacher1t){printer.print(t.detail());}//使用打印机打印中心信息publicvoidprint(AccpSchool1s){ printer.print(s.detail());}}publicclassPrinter{publicvoidprint(Stringcontent){System.out.println("开始打印:");System.out.println(content);}}每增加一种新类型,都需要增加相应的print(类型名称var)方法——程序的可扩展性及可维护性极差——这不符合系统的要求示例ACCPprinter如果增加Java_Teacher类或NetTeacher类,程序仍然可扩展,体现了多态。如果增加学员类,打印学员的信息,程序可扩展性差。377为什么需要Java接口5-3可以通过多态性解决这个问题吗?378显然,本系统符合使用多态性的条件教员中心detail方法(负责输出详细信息)教员

详细信息中心

详细信息1221回顾多态的含义:实现同一个接口,使用不同的实例而执行不同操作为什么需要Java接口5-4379在这个系统中,存在继承关系吗?教员、中心属于两种不同的类型,无法通过“is-a”找到一个合适的父类教员、中心都存在一个共同的方法特征:detail,它们对detail方法有各自不同的实现——这完全符合Java接口的定义定义一个Java接口,在其中定义detail方法,但没有具体实现实现这个Java接口,不同的类对detail方法有不同的具体实现IntroduceableAccpTeacher2(教员)AccpSchool2(中心)为什么需要Java接口5-5使用了Java接口之后,这个系统有了怎样的改进?380publicinterfaceIntroduceable{publicStringdetail();}publicclassAccpSchool2

implementsIntroduceable{privatePrinterprinter=newPrinter();//输出中心的详细信息publicStringdetail(){return"这里是ACCP中心";}//使用中心打印机打印信息publicvoidprint(Introduceableintro){ printer.print(intro.detail());}}publicclassAccpTeacher2

implementsIntroduceable{//输出教员的详细信息publicStringdetail(){ return"本人是ACCP教员";}}通过Java接口,我们同样可以享受到多态性的好处,大大提高了程序的可扩展性及可维护性使用print方法时,参数可以是任何Introduceable接口的实现类的对象,不必再为不同的类型建立不同的print方法了小结1为刚才完成的系统增加一种新的类型:学员(AccpStudent),具体要求如下:学员具有detail方法,负责输出学员详细信息能够通过中心的打印机打印学员的详细信息系统要具备良好的可扩展性与可维护性编写测试类StudentTest进行测试,要求:通过中心的打印机打印学员的详细信息381StudentTest完整代码实现AccpStudent完整代码实现示例修改后382什么是面向接口编程开发系统时,主体构架使用接口,接口构成系统的骨架这样就可以通过更换接口的实现类来更换系统的实现383publicclassAccpSchool2implementsIntroduceable{privatePrinterprinter=newPrinter();publicStringdetail(){return"这里是ACCP中心";}//使用中心打印机打印信息publicvoidprint(Introduceableintro){ printer.print(intro.detail());}}IntroduceableAccpTeacher2(教员)AccpSchool2(中心)面向接口编程的示例4-1384升级上述的ACCP系统,要求:打印机有多种类型,比如:黑白打印机、彩色打印机等中心可能配备其中任意一款打印机,负责打印教员、或者中心的详细信息系统要具备良好的可扩展性与可维护性print方法(打印)彩色打印机黑白打印机黑白内容中心/教员详细信息彩色内容面向接口编程的示例4-2采用面向接口编程的方式实现,以下是三个步骤中的第一步:385抽象出Java接口1、分析:黑白、彩色打印机都存在一个共同的方法特征:print黑白、彩色打印机对print方法有各自不同的实现2、结论:抽象出Java接口PrinterFace,在其中定义方法print3、具体实现:publicinterfacePrinterFace{publicvoid

print(Stringcontent);}面向接口编程的示例4-3采用面向接口编程的方式实现,以下是三个步骤中的第二步:386publicclassColorPrinter

implementsPrinterFace{publicvoid

print(Stringcontent){System.out.println("彩色打印:");System.out.println(content);}}publicclassBlackPrinter

implementsPrinterFace{publicvoid

print(Stringcontent){System.out.println("黑白打印:");System.out.println(content);}}实现Java接口1、分析:已经抽象出Java接口PrinterFace,并在其中定义了print方法黑白、彩色打印机对print方法有各自不同的实现2、结论:黑白、彩色打印机都实现PrinterFace接口,各自实现print方法3、具体实现:面向接口编程的示例4-4采用面向接口编程的方式实现,以下是三个步骤中的第三步:387使用Java接口1、分析:主体构架使用接口,让接口构成系统的骨架2、结论:更换实现接口的类就可以更换系统的实现3、具体实现:publicclassAccpSchool3implementsIntroduceable{privatePrinterFaceprinter;//打印机

publicvoidsetPrinter(PrinterFacep){this.printer=p;}publicStringdetail(){return"这里是ACCP中心";}publicvoidprint(Introduceableintro){

printer.print(intro.detail());}}publicclassAccpTest{publicstaticvoidmain(String[]args){//创建中心实例

AccpSchool3school=newAccpSchool3();//为该中心配备黑白打印机

school.setPrinter(newBlackPrinter());school.print(school);//为该中心配备彩色打印机

school.setPrinter(new

ColorPrinter());school.print(school);}}使用继承方式实现//再修改,升级为黑白、彩色打印机,开始打印其他类不变388使用接口方式实现389阅读如下Java代码,然后请采用面向接口编程的思想,在空白处填写正确的代码390publicinterfacePCI{

void

start();

void

stop();

}classSoundCardimplementsPCI{publicvoidstart()

{

System.out.println("Dudu...");

}

publicvoidstop()

{

System.out.println("Soundstop!");

}

}classNetworkCardimplementsPCI{publicvoidstart()

{

System.out.println("Send...");

}

publicvoidstop()

{

System.out.println("Networkstop!");

}

}这是Java接口,相当于主板上的PCI插槽的规范声卡、网卡都实现了PCI插槽的规范,但行为完全不同小结2391publicclassMainBoard{

publicvoidusePCICard(______p)

{

p.start();

p.stop();

}

}publicclassAssembler{

publicstaticvoidmain(String[]args)

{

MainBoardmb=newMainBoard();

//在主板上插入网卡

//在主板上插入声卡

}

}提示:通过这个方法,主板上可以插入任意符合PCI插槽规范的卡PCInc=newNetworkCard();mb.usePCICard(nc);

PCIsc=newSoundCard();

mb.usePCICard(sc);PCI提示:可以通过更换实现接口的类来更换系统的实现小结打印机.打印(不同的内容)----讲解案例ACCPSchool信息ACCPTeacher信息ACCPStudent信息这些信息都遵循一样的格式规范,因此格式规范是一个接口,接口中定义了具体的格式,即方法detail()。主板.插卡(不同的卡)-----现场编程案例网卡声卡显卡这些卡都要遵循PCI规范,因此PCI规范是一个接口,接口中定义了具体规范,即方法。392为什么需要常量生活中,一周有七天,如何用代码表示?393publicclassWeek{privateintdays=7;publicstaticvoidmain(String[]args){Weekw=newWeek();System.out.println("一周有"+w.days+"天");}}publicclassWeek{privateintdays=7;publicstaticvoidmain(String[]args){Weekw=newWeek();w.days++;System.out.println("一周有"+w.days+"天");}}一周有7天控制台输出然而,总有不尽人意的事情发生:一周有8天控制台输出如何保证变量的值在运行期无法被改变?——使用常量什么是常量常量是一种标识符,它的值在运行期间恒定不变常量标识符在程序中只能被引用,而不能被重新赋值394常量圆周率PI圆周率PI代码表示方式publicstaticfinaldoublePI

=3.14159265358979323846;用法将ang角度转换成径度publicstaticdoubletoRadians(doubleang){returnang/180.0*PI;}常量的优点如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?395publicstaticdoubletoRadians(doubleang){returnang/180.0*3.14159265358979323846;}publicstaticdoubletoDegrees(doubleang){returnang*180.0/3.14159265358979323846;}publicstatic

finaldoublePI=3.14159265358979323846;//圆周率publicstaticdoubletoRadians(doubleang){returnang/180.0*PI;}publicstaticdoubletoDegrees(doubleang){returnang*180.0/PI;}程序的可读性变差:用户很难理解数字或字符串的意思程序的可维护性变差:如果数值改变,则需要在很多地方改动,既麻烦又易出错使用常量可以增强程序的可读性、可维护性Java中常量的定义规则加入final关键字代表常量,加入static关键字代表类变量尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串396publicclassAccpStudent{publicstaticfinalintFEMALE=1;//代表女性publicstaticfinalintMALE=2;//代表男性privateintsex;//性别publicvoidsetSex(intsex){if(sex==FEMALE) System.out.println("这是一名女学生");elseif(sex==MALE) System.out.println("这是一名男学生");this.sex=sex;}}在Java接口中声明常量在Java接口中声明的变量在编译时会自动加上staticfinal的修饰符,即声明为常量,因而Java接口通常是存放常量的最佳地点397publicinterfaceAccpSchoolType{

publicstaticfinalStringACCP="ACCP加盟中心";

publicstaticfinalStringBENET="BENET直营中心";}publicinterfaceAccpSchoolType{StringACCP="ACCP加盟中心";StringBENET="BENET直营中心";}等同于编写一个用于放置常量的Java接口Constants,具有常量MAX和MIN编写一个测试类ConstantsTest,在main方法中求取Constants中的两个常量之差398Constants完整代码实现ConstantsTest完整代码实现示例Contents399小结通常定义一个接口,存放了该项目中的所有常量400OO思想总结OO基本特征定义具体实现方式优势封装隐藏实现细节,对外提供公共的访问接口属性私有化、添加公有的setter、getter方法增强代码的可维护性继承从一个已有的类派生出新的类,子类具有父类的一般特性,以及自身特殊的特性继承需要符合的关系:is-a1、实现抽象(抽出像的部分)2、增强代码的可复用性多态同一个实现接口,使用不同的实例而执行不同操作通过Java接口/继承来定义统一的实现接口;通过方法重写为不同的实现类/子类定义不同的操作增强代码的可扩展性、可维护性401402publicinterfaceIntroduceable{publicStringdetail();publicvoidintroduction(){ detail();}privatevoidshowMessage();voidspeak();}Java接口中的方法必须是publicJava接口中不能有方法体实现编译器会自动加上public修饰符请指出下列Java代码中的错误。扩展案例1403扩展案例2404java面向对象程序设计第13次课-面向对象的Java实现-接口上机相关回顾在Java中定义接口使用什么关键字,接口中的方法有什么特点?一个类是否可以实现多个接口?在Java中定义一个常量使用哪些关键字?上机目标使用Eclipse编写接口和实现类,要求如下:定义数据访问接口用户数据访问接口:UserDao版块数据访问接口:BoardDao主题数据访问接口:TopicDao回复数据访问接口:ReplyDao编写UserDao接口的实现类:UserDaoImpl使用多态的方式调用UserDao接口的方法教员讲解上机目标训练技能点会编写接口会实现接口会使用接口训练要点: 定义接口需求说明:

定义接口:用户Dao接口、主题Dao接口阶段1接口UserDaoTopicDao方法查找用户增加用户修改用户查找主题增加主题修改主题删除主题实现思路及关键代码:1、定义接口:UserDao2、声明UserDao接口的方法查找用户:publicUserfindUser(StringuName);增加用户:publicint

addUser(Useruser);修改用户:publicint

updateUser(Useruser);阶段1代码示例实现思路及关键代码:1、定义接口:TopicDao2、声明UserDao接口的方法查找主题:publicTopicfindTopic(inttopicId);增加主题:publicintaddTopic(Topictopic);删除主题:publicint

deleteTopic(inttopicId);修改主题:publicint

updateTopic(Topictopic);阶段1代码示例讲解实现思路和关键代码完成时间:15分钟需求说明:定义接口:版块Dao接口、回复Dao接口阶段2接口BoardDaoReplyDao方法增加论坛版块增加回复信息删除回复信息修改回复信息代码示例代码示例完成时间:15分钟阶段2常见调试问题及解决办法代码规范问题共性问题集中讲解训练要点:

实现接口,使用多态需求说明:

实现UserDao接口,使用接口和实现类实现多态阶段3实现思路及关键代码:1、定义UserDao接口的实现类:UserDaoImpl2、实现UserDao接口所有的方法3、在测试类中使用UserDao接口和其实现类实现多态阶段3测试类代码示例实现类代码示例讲解实现思路和关键代码完成时间:25分钟需求说明:1、为User类添加表示性别的属性:intgender,及对应的setter/getter方法,修改getUserInfo()方法,增加性别的输出2、在UserDao接口中添加性别常量3、在测试类中使用该常量阶段4User类代码示例UserDao代码示例测试类代码示例完成时间:15分钟阶段4常见调试问题及解决办法代码规范问题共性问题集中讲解总结总结并布置作业阶段一阶段二阶段三阶段四学做项目

动物特性的面向对象描述问题描述动物特性描述狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。狗通常的时候和人打招呼会通过“摇摇尾巴”,在被抚摸感到舒服的时候,会“旺旺叫”,而在受到惊吓情绪烦躁时,会发出“呜呜”声;猫也生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。猫通常的时候和人打招呼会发出“喵~”的声音,在被抚摸情绪很好时,会发出“咕噜咕噜”声,而在受到惊吓时,会发出“嘶嘶”声;青蛙是一种两栖动物(既是水生动物也是陆生动物),既不是哺乳类的也不是肉食性的,属于卵生。当青蛙情绪好的时候,会在岸边“呱呱呱”的唱歌,而在受到惊吓时,会“扑通一声跳入水中”;问题分析首先需要抽取问题描述中对象分析每个对象所具有的特征分析每个对象所发出的动作从这些对象的特征中,抽取类的属性和方法分析类之间的关系,画出类结构图难点分析-1抽象类和对象的基本方法:抽取对象的基本的方法:找出句子中所使用的名词

例如:在句子“小猫喵喵叫”中,我们能够确定一个对象:猫;确定对象发出的行为动作的基本的方法:找出句子中的动词

例如:“旺旺叫”、“喵喵叫”都属于对象发出的动作;确定对象的属性或者特征的基本的方法:找出句子中的形容词

例如:“哺乳性的”“肉食性的”“卵生的”等等;“是”的关系一般抽象为继承

例如:狗是一种动物,意味着:“狗”类继承自“动物”类;“有”的关系一般抽象为类的属性

例如:动物都有情绪,意味着:“情绪”是“动物”类的一个属性;难点分析-2Dog:intnumberOfLegsDog()sayHello()sayHello(intnewValue)getNumberOfLegs()Cat:intnumberOfLegsCat()sayHello()sayHello(intnewValue)getNumberOfLegs()Frog:intnumberOfLegsFrog()sayHello()sayHello(intnewValue)getNumberOfLegs()hasGills()laysEggs()WaterAnimal:hasGills()laysEggs()LandAnimal:getNumberOfLegs()Animal:booleanmammalbooleancarnivorousintmoodisMammal()isCarnivorous()setMood(intnewValue)getMood()sayHello()sayHello(intmoodval)阶段划分第一阶段(60分钟):不考虑情绪影响动物打招呼的方式第二阶段(40分钟):考虑情绪影响动物打招呼的方式第三阶段(60分钟):考虑陆生动物和水生动物第一阶段第一阶段(60分钟):不考虑情绪影响动物打招呼的方式编写Animal类,没有mood属性,只有一种SayHello方法;编写Dog类、Cat类和Frog类,分别继承自Animal类,实现与Animal类不同的功能;编写main方法,分别实例化以上三个类的三个对象,测试类方法实现的正确性;要求学员自己动手编码,在编码的过程中解答学员提出的问题阶段检查针对第一阶段抽查学员的编码结果教员给出点评 第一阶段标准代码演示第一阶段编码的结果:abstractclassAnimal{protectedbooleanmammal=true;protectedbooleancarnivorous=true;

publicbooleanisMammal(){return(mammal);}publicbooleanisCarnivorous(){return(carnivorous);}abstractpublicStringsayHello();}abstractabstractprotectedprotectedclassDogextendsAnimal{publicStringsayHello(){return("摇摇尾巴");}}classCatextendsAnimal{publicStringsayHello(){return("喵喵叫");}}classFrogextendsAnimal{

publicFrog(){mammal=false;carnivorous=false;}publicStringsayHello(){return("呱呱呱");}}extendsextendsextendspublicStringsayHello(){return("摇摇尾巴");}publicStringsayHello(){return("喵喵叫");}publicStringsayHello(){return("呱呱呱");}publicFrog(){mammal=false;carnivorous=false;}publicclassHelloWorld{publicstaticvoidmain(String[]args){Doganimal1=newDog();Catanimal2=newCat();Froganimal3=newFrog();if(animal1.isMammal())System.out.println("狗是哺乳动物");elseSystem.out.println("狗不是哺乳动物");if(animal1.isCarnivorous())System.out.println("狗是肉食动物");elseSystem.out.println("狗不是肉食动物");System.out.println("狗通常的情况下,和人打招呼的方式为:"+animal1.sayHello());……}}Doganimal1=newDog();Catanimal2=newCat();Froganimal3=newFrog();animal1.isMammal()animal1.isCarnivorous()animal1.sayHello()第二阶段

第二阶段(40分钟):考虑情绪影响动物打招呼的方式扩充Animal类、Dog类、Cat类和Frog类,增加Animal类的mood属性,并实现SayHello方法的多态性;扩充main方法;要求学员自己动手编码,在编码的过程中解答学员提出的问题阶段检查针对第二阶段抽查学员的编码结果教员给出点评第二阶段的编码结果:abstractclassAnimal{publicstaticfinalintSCARED=1;//情绪不好,烦躁

publicstaticfinalintCOMFORTED=2;//情绪好

protectedbooleanmammal=false;protectedbooleancarnivorous=false;protectedintmood=COMFORTED;//情绪属性

publicbooleanisMammal(){return(mammal);}publicbooleanisCarnivorous(){return(carnivorous);}

abstractpublicStringsayHello();abstractpublicStringsayHello(intmoodval);publicvoidsetMood(intnewValue){mood=newValue;}publicintgetMood(){return(mood);}}publicstaticfinalintSCARED=1;//情绪好publicstaticfinalintCOMFORTED=2;//情绪不好,烦躁protectedintmood=COMFORTED;//情绪属性publicvoidsetMood(intnewValue){mood=newValue;}publicintgetMood(){return(mood);}abstractpublicStringsayHello();abstractpublicStringsayHello(intmoodval);classDogextendsAnimal{publicStringsayHello(){return("摇摇尾巴");}publicStringsayHello(intmoodval){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论