收藏 分享(赏)

accpjava抽象和封装PPT课件.ppt

上传人:Facebook 文档编号:3722617 上传时间:2018-11-16 格式:PPT 页数:52 大小:3.33MB
下载 相关 举报
accpjava抽象和封装PPT课件.ppt_第1页
第1页 / 共52页
accpjava抽象和封装PPT课件.ppt_第2页
第2页 / 共52页
accpjava抽象和封装PPT课件.ppt_第3页
第3页 / 共52页
accpjava抽象和封装PPT课件.ppt_第4页
第4页 / 共52页
accpjava抽象和封装PPT课件.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、抽象和封装,第一章,课程地位,每阶段已包括:项目实战、COT课程 总课时: 1008,C#OOP,JavaScript,T-SQL,Java OOP,S2 350,Y2 344,JSP,S2:Java阶段项目,预备课程,WinForms,Logic Java,S1 314,S1:.NET阶段项目,ASP.NET,Hibernate,N-Tier,Ajax,Spring,Struts,HTML,C#,NTC,Project知识,Y2:.NET毕业设计项目,COT,COT,COT,Y2:Java毕业设计项目,目标岗位标准手册,就业技能结构图,本门课程目标,学完本门课程后,你能够: 使用Java编写

2、面向对象的程序 使用集合存取对象 使用Java异常处理编写程序 使用JDBC操作数据库 使用Java操作XML文件 使用Oracle进行简单的数据操作,课程项目展示,电子宠物系统主人登录领养宠物 给宠物喂食 与宠物游戏 给宠物看病显示主人信息 显示宠物信息,相关课程回顾,什么是类,什么是对象? 如何在类中编写方法? 如何创建对象? 如何在程序中接收控制台的输入?,预习检查,如何从现实世界中抽象出类? 构造方法的作用和特点是什么? 什么是方法重载? 如何实现类的封装?,本章任务,用类图描述电子宠物系统的设计 编写代码实现领养宠物功能,使用类图描述设计 掌握面向对象设计基本步骤 掌握类和对象的概念

3、 掌握构造方法及其重载 掌握封装的概念及其使用,本章目标,为什么使用面向对象2-1,现实世界是由什么组成的?,世界由对象组成,为什么使用面向对象2-2,软件出现的目的是为了: 用计算机的语言描述现实世界 用计算机解决现实世界的问题出现了软件危机,如何解决?,用面向对象的方式描述对象的世界,符合人类思维习惯,“问题”和“解”一致, ,软件与软件危机4-1,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是软件开发活动的记录,主要供人们阅读,既可用于专业人员和用户之间的通信和

4、交流,也可用于软件开发过程的管理和运行阶段的维护. 简单的说: 软件=程序+文档,软件危机是指在计算机软件的开发和维护中所遇到的一系列严重问题,几乎所有软件都不同程度地存在这些问题. 概括地说软件危机包含两方面问题: 如何开发软件,怎样满足对软件的日益增长的需求 如何维护数量不断膨胀的已有软件,软件与软件危机4-2,(1)软件危机的原因硬件性能提高,价格则下降,应用领域迅速扩大; 要求计算机做的事越来越多,也越来越复杂; 这使计算机软件的功能、规模及复杂性与日俱增; 软件的复杂性达到了它的开发者难以控制的程度; 大系统的复杂性是小程序无法比拟的。 (2)软件危机的表现 不能真正满足用户需要、供

5、求关系失调 开发费用失控、进度拖延、可靠性差、开发效率低下 维护极为困难、重用程度很低、可靠性差。,软件与软件危机4-3,软件与软件危机4-4,寻求摆脱危机的出路 程序设计方法学的研究 着眼于程序本身,研究怎样才能写出高质量的程序。如结构化程序设计方法。软件工程学的研究 着眼于软件生产的全过程(编程只是其中的一个阶段),研究用工程学的方法来开发软件。其它 如并发程序设计、数据结构与算法、以及编程语言等方面的研究。,一个现实世界的问题,宠物现实世界的对象如何在计算机中描述它?,从现实中抽象出类分三步: 1. 找出它的种类 2. 找出它的属性 3. 找出它的行为,用面向对象描述世界3-1,用面向对

6、象的思想描述世界 第一步:发现类,根据“对象”抽象出“类”,class Dog ,名词,各个狗对象,用面向对象描述世界3-2,第二步:发现类的属性,狗类共有的特征: 1. 品种 2. 年龄 3. 昵称 4. 健康情况 5. 跟主人的亲密度 ,class Dog String name = “旺财“; / 昵称int health = 100; / 健康值 int love = 0; / 亲密度String strain = “拉布拉多犬“; / 品种 ,只放我关心的属性,名词,用面向对象描述世界3-3,第三步:发现类的方法,狗类共有的行为: 1. 跑 2. 吠 3. 输出狗的信息 ,动词,cl

7、ass Dog String name = “旺财“; / 昵称int health = 100; / 健康值 int love = 0; / 亲密度String strain = “拉布拉多犬“; / 品种 /* 输出狗的信息 */public void print() / 输出狗信息的代码 ,只放我关心的方法,类图,使用类图描述类 用于分析和设计“类” 直观、容易理解,“+”:public “-”:private,类名,返回值类型,类型,属性名,参数: 名字:类型,名字:类型,方法名,小结1,面向对象设计的过程是什么? 抽象的原则是什么? 为什么说类图是面向对象设计的好工具?,实现领养宠物

8、,实现领养宠物功能 编写宠物类Dog和Penguin 创建宠物对象,输入宠物信息,最后输出,构造方法 3-1,对象初始化,Penguin pgn = new Penguin(); pgn.name = “qq“; pgn.sex = “Q仔“;,class Penguin / 属性/* 无参构造方法 */public Penguin() name = “qq“;love = 20;sex = “Q仔“;System.out.println(“执行构造方法“); ,使用构造方法: Penguin pgn1 = new Penguin();,能否在创建对象的同时就完成赋值?,构造方法,构造方法 3

9、-2,构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值,public 构造方法名( ) /初始化代码 ,与类名相同,没有返回值类型,public Penguin() name = “qq“;love = 20;sex = “Q仔“;System.out.println(“执行构造方法“); ,可以指定参数,构造方法 3-3,阅读代码,说出运行结果,并指出原因,class Penguin public void Penguin() health=10;sex=“雄“;System.out.println(“执行构造方法“);public void print() System.out

10、.println(“企鹅的名字是“ + name + “,健康值是“ + health + “,性别是“ + sex); ,Penguin pgn3=new Penguin(); pgn3.print();,有返回值类型,不是构造方法,常见错误,请指出下面代码的错误,class Dog private String name = “旺财“; / 昵称private int health = 100; / 健康值 private int love = 0; / 亲密度 public void play(int n) int localv;health = health - n; System.o

11、ut.println(name+“ “+localv+“ “+health+“ “+love); public static void main(String args) Dog d=new Dog();d.play(5); ,局部变量没有初始化,小结 2,编写一个类Book2,代表教材: 具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200 具有方法:Sdetail,用来在控制台输出每本教材的名称和页数 具有带参数的构造方法:用来完成对象的初始化工作,并在构造方法中完成对页数的最小值限制 编写测试类Book2Test进行测试:初

12、始化一个Book2对象,并调用该Book2对象的detail方法,看看输出是否正确,完整代码实现,静态常量,static可以用来修饰属性、方法和代码块 static修饰的属性和方法称为类属性(类变量)、类方法 不使用static修饰的属性和方法,属于单个对象,通常称为实例属性(实例变量)、实例方法 static修饰的变量和方法可以通过类名和对象名访问,而不用static修饰的变量和方法只能通过对象名访问 final可以用来修饰属性、方法和类 用final修饰的变量成为常量,其值固定不变,Penguin pgn1 = new Penguin(); pgn1.sex = Penguin.SEX_M

13、ALE;,class Penguin static final String SEX_MALE=“Q仔“; static final String SEX_FEMALE=“Q妹“; ,Java中定义常量的语法,static void print() ,用类名调用:Dog.print();,使用static定义变量,使用static定义方法,可否这样赋值?,常见错误,请指出下面代码的错误,class Dog private String name = “旺财“; / 昵称private int health = 100; / 健康值private int love = 0; / 亲密度 publ

14、ic void play(int n) static int localv=5; health = health - n; System.out.println(name+“ “+localv+“ “+health+“ “+love); public static void main(String args) Dog d=new Dog();d.play(5); ,在方法里不可以定义static变量,方法重载4-1,一个类是否可以有多个构造方法? 方法重载,指同一个类中多个方法: 方法名相同 参数列表不同,与返回值、访问修饰符无关,方法重载4-2,类,方法,方法参数,方法实现,司机,轿车,巴士

15、,火车,驾驶,启动、行驶、,等待乘客上车、启动、 行驶、到站停车、,正点发车、行驶、 到站停车、,如果用代码实现,我们需要三个方法,这些方法的方法名称相同,参数类型不同,方法重载4-3,方法重载并不陌生 java.io.PrintStream类的println方法能够打印数据并换行,根据数据类型的不同,有多种实现方式,public class Test public static void main(String args) int i = 0; char c = z; String str = “hello“; System.out.println(i); System.out.printl

16、n(c); System.out.println(str); ,PrintStream,println(int) println(char) println(String) ,方法名相同,参数类型不同,调用不同的println方法,方法重载,方法重载4-4,java.lang.Math类的max()方法能够从两个数字中取出最大值,它有多种实现方式 运行时,Java虚拟机先判断给定参数的类型,然后决定到底执行哪个max()方法,public class Test public static void main(String args) Math.max(1,2); Math.max(1.0F,2

17、.0F); Math.max(1.0,2); ,方法重载,构造方法重载 2-1,构造方法重载是方法重载的典型示例,public class AccpTeacher7 private String name; / 教员姓名 private String school = “北京中心“; / 所在中心public AccpTeacher7(String name) this.name = name; /设定教员姓名 public AccpTeacher7(String name, String school) this.name = name; /设定教员姓名 this.school = scho

18、ol; /设定教员的所在中心 public String introduction() return “大家好!我是“ + school + “的“ + name ; ,构造方法重载,构造方法重载 2-2,通过调用不同的构造方法来表达对象的多种初始化行为 例如: 默认情况下,教师来自北京中心,初始化时,只需提供教员姓名 有时,需要提供所在中心名称及教员姓名,public class AccpTeacher7Test public static void main(String args) AccpTeacher7 teacher1 = new AccpTeacher7(“李芳“); Syste

19、m.out.println(teacher1.introduction();AccpTeacher7 teacher2 = new AccpTeacher7(“张欣“,“天津中心“); System.out.println(teacher2.introduction(); ,大家好!我是北京中心的李芳 大家好!我是天津中心的张欣,小结 3,编写一个类Book3,代表教材: 具有属性:名称(title)、页数(pageNum)、类型(type) 具有方法:detail,用来在控制台输出每本教材的名称、页数、类型 具有两个带参构造方法:第一个构造方法中,设置教材类型为“计算机”(固定),其余属性的

20、值由参数给定;第二个构造方法中,所有属性的值都由参数给定 编写测试类Book3Test进行测试: 分别以两种方式完成对两个Book3对象的初始化工作,并分别调用它们的detail方法,看看输出是否正确,为什么要使用封装,下面代码有什么问题?如何解决上面设计的缺陷?,Dog d = new Dog(); d.health = 1000;,不合理的赋值,使用封装,什么是封装,面向对象三大特征之一封装 封装的概念封装的好处,封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,隐藏类的实现细节,只能通过规定方法访问数据,方便加入控制语句,方便修

21、改实现,如何使用封装,封装的步骤,修改属性的可见性,创建getter/setter方法,在getter/setter方法中加入属性控制语句,设为private,用于属性的读写,对属性值的合法性进行判断,class Dog private String name = “旺财“; / 昵称private int health = 100; / 健康值private int love = 0; / 亲密度private String strain = “拉布拉多犬“; / 品种public int getHealth() return health;public void setHealth (in

22、t health) if (health 100 | health 0) this.health = 40;System.out.println(“健康值应该在0和100之间,默认值是40“); elsethis.health = health;/ 其它getter/setter方法 ,this代表当前对象,1,2,2,3,小结 4,请通过代码封装,实现如下需求: 编写一个类Book,代表教材: 具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息,并赋予默认值200 为各属性设置赋值和取值方法 具有方法:detail,用来在控制台输出每本教材的名称

23、和页数 编写测试类BookTest进行测试:为Book对象的属性赋予初始值,并调用Book对象的detail方法,看看输出是否正确,this的用法,this关键字的用法 调用属性调用方法调用构造方法,this.health = 100; this.name = “大黄“;,this.print();,this();,如果使用,必须是构造方法中的第一条语句,this(“小黑“,100,100,“雄“);,小结5,分析需求,用封装方式设计类,画出类图 汽车销售人员销售汽车,可售款式有凯越、君威 每款汽车有款式和编号,款式、编号不能修改 汽车销售人员有姓名,姓名不能修改 销售人员有两种销售方式: 按

24、车辆销售,每次一辆 按车型销售(凯越),要同时告诉销售人员购买数量,凯越,君威,销售员,练习用类图设计Dog和Penguin类,需求说明: 运用面向对象思想抽象出Dog类和Penguin类,画出对应类图根据类图编写Dog类和Penguin类 添加默认构造方法,完成时间:20分钟,指导打印Dog信息2-1,训练要点: 类的结构,对象的创建,类的属性和方法的调用 类的封装 需求说明: 根据控制台提示信息选择领养宠物(狗), 输入昵称、品种、健康值 打印宠物信息 要保证健康值的有效性(在1到100之间),讲解需求说明,指导打印Dog信息2-2,实现思路: 修改Dog类编写Test类,完成时间:30分

25、钟,从控制台输入宠物信息,打印宠物信息,保证健康值的有效性,否则取默认值60,共性问题集中讲解,常见调试问题及解决办法 代码规范问题,共性问题集中讲解,练习Dog类的带参构造方法,需求说明: 增加带参构造方法将setHealth()方法设为私有,注释掉其他setter方法 修改Test类,使用带参构造方法创建对象,完成时间:20分钟,Dog(String name, int health, int love, String strain),Penguin(String name, int health, int love, String sex),练习操作企鹅性别属性,需求说明: 给Pengu

26、in类提供SEX_MALE和SEX_FEMALE两个静态常量,分别取值“Q仔”或“Q妹” 修改Test类,使用静态常量对性别进行赋值 修改企鹅的性别只能取值“雄”或“雌”,通过修改静态常量值实现该需求,完成时间:15分钟,总结,使用面向对象的思想开发程序有什么好处? 如何从现实世界抽象出类? 方法重载的语法是什么? 如何实现封装?,给定如下Java代码,请指出代码中的错误,并解释原因,public class Sample private int x; public Sample() x = 1; public Sample(int i) x = i; public int Sample(int i) x = i; return x+; private Sample(int i, String s)public Sample(String s,int i)private Sampla(int i)x=i+; private void Sampla(int i)x=i+; ,总结,无参构造方法,带参构造方法,不是构造方法,带参构造方法,带参构造方法,名称与类名不相同,不是构造方法,作业,课后作业 必做 教员备课时在此添加内容选做 教员备课时在此添加内容提交时间:xxx 提交形式:xxx预习作业 背诵英文单词 教员备课时在此添加内容,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报