版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元4
面向对象程序设计4.1封装程序设计
任务4.1设计成品信息封装类任务描述
基于RFID的成品自动防呆出货系统中,入库系统的数据是仓库管理员从MES系统中导出,然后写入RFID系统。MES系统导出的数据如表4-1-1所示。使用面向对象设计方法实现成品入库数据的管理。面向对象的设计过程是一个抽象的过程,从现实世界的对象抽象出软件开发中的对象。首先确定问题域,然后设计类。在设计类时,我们需要关注与业务相关的属性和行为,忽略不必要的属性和行为。表4-1-1入库成品信息数据序号批次号码料号LP号码数量MES入库时间18184309NS32939233121069535560002024/12/1028184309NS32939233121069540560002024/12/1038184309NS32939233121069564560002024/12/1148184309NS32939233121069529560002024/12/1158184309NS32939233121069530560002024/12/1168184310NS32939633121069558560002024/12/1278184310NS32939633121069138560002024/12/1288184310NS32939633121069009560002024/12/1398184310NS32939633121069260560002024/12S32939633121069341560002024/12/14知识目标理解封装的意义。熟悉Java的4种访问权限。熟悉private关键字。熟悉this关键字。能力目标能使用Setter/Getter方法实现成员变量值的设置与取值。能使用封装技术提高程序的可维护性和安全性,解决实际问题。能使用构造方法在创建对象时完成初始化。素养目标要有精益求精的创新精神。知识迁移能力。任务4.1设计成品信息封装类生活中的封装相关知识封装封装封装电压力锅台式电脑苹果手机面向对象编程中的封装思想
封装的概念面向对象的第一大特性—封装性
封装是面向对象编程的核心思想,即将对象的属性与行为封装起来,而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。4.1封装
封装的意义编写一个类,代表电压力锅,要求:具有属性:品牌、温度具有行为:产品介绍publicclassPan{
//属性
publicinttemperature;//温度
publicStringbrand;//品牌
//方法
publicStringintroduce(){
return"我是"+brand+"牌电压力锅,目前的温度是"+temperature+"摄氏度";}}4.1封装编写一个测试类,要求:实例化一个压力锅对象,并对其初始化在控制台输出该压力锅的产品介绍+要求:锅的最高温度不能超过130摄氏度publicclassPanTest{
publicstaticvoidmain(String[]args){Panpan=newPan();pan.brand="美的";pan.temperature=10000;
System.out.println(roduction());}}对象属性可以赋任意值我是美的牌电压力锅,我目前的温度是10000摄氏度
封装的意义4.1封装封装的实现Java访问权限修饰符Java中主要通过访问控制符、类包和final关键字对类、方法或者变量的访问范围进行控制。类的权限设定会约束类成员的权限设定。publicprotecteddefault(缺省)private本类可见可见可见可见本类所在包可见可见可见不可见其他包中的子类可见可见不可见不可见其他包中的非子类可见不可见不可见不可见4.1封装
封装的实现
类成员的存取控制1.修改属性的可见性来限制对属性的访问public所有类可见属性创建方法品牌温度setter()getter()private本类可见,其他类不可见2.为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的访问3.在setter和getter方法中,加入对属性的存取限制4.1封装
封装的实现publicclassPan{private
int
temperature;//温度publicint
getTemperature(){//读取温度
returntemperature;}//设定温度publicvoid
setTemperature(int
temperature){
this.temperature=temperature;}}Panpan=newPan();pan.setTemperature(100);pan.introduce();this代表当前类的实例通过setter、getter方法访问name属性1.修改属性的可见性来限制对属性的访问2.为每个属性创建一对赋值(setter)方法和取值(getter)方法4.1封装
封装的实现publicclassPan{private
int
temperature;//温度publicint
getTemperature(){//读取温度
returntemperature;}//设定温度publicvoid
setTemperature(int
temperature){
if(temperature>130){System.out.println("错误!最高温度应为130摄氏度!");this.temperature=130;//如果不符合温度要求,则赋予默认值}else{this.temperature=temperature;}}}尽管技术上允许把属性标识为public,但在实际中最好把所有成员变量都设置为private,使得外部类程序不能直接访问成员变量,有助于提高程序的可维护性。使用封装,增加了数据访问限制,增强了程序的可维护性封装:隐藏实现细节。封装意味着隐藏对象字段。可以使用访问控制隐藏字段。将属性(方法)私有化,提供公有方法访问私有属性(方法)通过这些公有方法访问私有属性(方法)3.在setter和getter方法中,加入对属性的存取限制4.1封装单元4
面向对象程序设计4.2继承与多态程序设计
任务4.2显示入库成品信息任务描述基于RFID的成品自动防呆出货系统中,入库系统的数据首先由仓库管理员从MES系统中导出,然后与RFID系统扫描实际成品货物上的RFID标签数据对比,符合条件,匹配的成品则可以进入RFID系统数据库中保存。成品信息类(Stock)包括成品批次号码(BatchNumber),料号(Code),LP号码(LPNumbe),数量(Qty),MES入库时间(InStockTime),其方法1返回成品入库批次信息。其方法2功能是读取成品数据的LP码(电子标签码)判断该成品是否可以入库RFID系统。入库成功的成品信息需要增加托数序号、状态、操作人员、操作时间。运行效果如图4-2所示。图4-2任务4.2运行结果知识目标理解继承的作用。理解多态的作用。熟悉super关键字。熟悉对象转换类型。能力目标能使用继承方式解决代码的冗余,提高程序的扩展性。能使用多态技术解决实际问题,提高程序的可维护性和安全性。能使用instanceof关键字判断操作数是否有继承或实现关系。素养目标要有敬业、专注、精益求精的创新科学精神。积极传承中国优秀文化;文化自信。树立课程自信;民族自信。团队意识、学会协作共赢。任务4.2显示入库成品信息生活中的继承相关知识AnimalLionLeopardWolfDog父类子类和父类之间建立一种is-a关系(如狼是动物)继承概念下的IS-A是个单向的关系
(如狼是动物,动物不一定是狼)子类子类动物类Animal属性:food食物行为:makeNoise():动物发出声音的行为eat():动物遇到食物时的行为sleep():睡眠的行为roam():不在进食或睡眠时的行为子类子类生活中的继承了解继承动物:Animal猫科动物:Felien犬科动物:Canine狮Lion豹Leopard狼Wolf狗Dog多层继承如果类Y继承类X,且类Y是类Z的父类,那么Z应该能通过IS-AX的测试。不同的类可能会有一些共同的特征和行为,这些共同的特征和行为都统一放在一个类中,它是可以被其他类所共享的。4.2.1继承
什么是继承?
了解继承子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性巴士是汽车吗?卡车是汽车吗?出租车是汽车吗?最大载客数量报站引擎数量外观颜色刹车加速汽车最大载重量卸货所属公司最大载客数量打发票属性行为继承需要符合的关系:is-a,父类更通用、子类更具体4.2.1继承
引例了解继承创建Java教师类和Python教师类,以下这个解决方案中存在着什么问题?publicclass
PythonTeacher{
privateStringname;//教师姓名
privateStringschool;//所在学校
publicPythonTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLession(){System.out.println("启动
Python3.7");System.out.println("知识点讲解");System.out.println("总结提问");}
publicvoidintroduction(){System.out.println("大家好!我是"+school+"的"+name+".");}}publicclass
JavaTeacher{privateStringname;//教师姓名privateStringschool;//所在学校publicJavaTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLession(){System.out.println("启动
Eclipse");System.out.println("知识点讲解");System.out.println("总结提问");}publicvoidintroduction(){System.out.println("大家好!我是"+school+"的"+name+".");}}
代码存在大量重复,违背了“writeonce,onlyonce”的原则4.2.1继承
改进引例中的问题
继承的实现建立继承关系,让子类继承父类的属性和方法。Java教师是教师吗?Python教师是教师吗?教师Java教师Python教师publicclassTeacher{//父类privateStringname;//教师姓名privateStringschool;//所在学校publicTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLesson(){System.out.println("知识点讲解");System.out.println("总结提问");}
publicvoidintroduction(){ System.out.println("大家好!我是"
+school+
"的"+name+"。");}}行
为姓名学校授课自我介绍属
性4.2.1继承
继承的语法在Java语言中,用extends关键字来表示一个类继承了另一个类。publicclass子类
extends
父类
{//其余代码省略}publicclass
Animal
{//其余代码省略}例如publicclassWolf
extends
Animal{//其余代码省略}父类AnimalpublicclassDog
extends
Animal{//其余代码省略}子类Wolf子类Dog4.2.1继承
改进引例中的问题
继承的实现建立继承关系,让子类继承父类的属性和方法。publicclass
JavaTeacherextendsTeacher{publicJavaTeacher(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("启动Eclipse");super.giveLesson();}}publicclassPythonTeacherextendsTeacher{publicPythonTeacher(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("启动
Python3.7");super.giveLesson();}}子类自动继承父类的属性和方法,子类中不再存在重复代码使用继承,可以有效实现代码复用Java教师类Python教师类4.2.1继承
继承的实现子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法publicclassTeacher{privateStringname;//教师姓名privateStringschool;//所在学校publicTeacher(StringmyName,StringmySchool){
=myName;this.school=mySchool;}publicvoidgiveLesson(){System.out.println("知识点讲解");System.out.println("总结提问");}publicvoidintroduction(){
System.out.println("大家好!我是"+school+"的"+name+"。");
}}publicclassJavaTeacherextends
Teacher{publicJavaTeacher(StringmyName,StringmySchool){super(myName,mySchool);}publicvoidgiveLesson(){System.out.println("启动Eclipse");super.giveLesson();}}父类中的属性和方法可以被子类继承由于giveLesson()方法与父类的实现有所不同,因此重写了该方法属性的继承与隐藏当父类中的属性为public时,子类可以直接继承当父类成员声明为private时,子类继承该成员但不能直接使用,必须通过super关键字访问。当父类成员声明为protected时,子类可以继承直接使用。方法的继承与隐藏当子类中的方法与父类中方法同名时,父类方法将被覆盖
。4.2.1继承
继承的实现子类实例化对象,赋初始值public
classTest{public
static
voidmain(String[]args){PythonTeacherpt=newPythonTeacher("张平","职业大学");pt.introduction();pt.giveLesson();JavaTeacherjt=newJavaTeacher("王彬","苏工院");jt.introduction();jt.giveLesson();}}运行结果:多层的继承衍生而来的子类可以再作为父类衍生出其他的子类,形成多层的继承关系,此时最下层的衍生类,会继承到其继承关系上所有父类的属性与方法。4.2.1继承
继承的实现super关键字调用父类的构造方法:super()或者super(参数)调用父类的方法:super.方法名(参数)引用的是父类的同名变量:super.父类同名变量继承的存取控制:Java中不允许多重继承,但是却可以使用多层继承.从父类继承的私有成员,不能被子类之间使用。被final修饰的方法不能被子类重写实例,被final修饰的类不能再被继承。方法重写(方法覆盖)子类和父类的方法具有相同的名称、参数列表、返回类型。4.2.1继承
多态的概念了解多态
从字面上理解,多态就是一种类型表现出的多种状态。
多态性是面向对象编程的一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。4.2.2多态
多态的概念了解多态
从字面上理解,多态就是一种类型表现出的多种状态。
多态性是面向对象编程的一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。Animaleat()eat()Dogeat()动物类Animal属性:food食物行为:makeNoise():动物发出声音的行为eat():动物遇到食物时的行为CatRabbit4.2.2多态
多态的优点了解多态1.消除类型之间的耦合关系2.可替换性3.可扩充性4.接口性5.灵活性6.简化性4.2.2多态
为什么需要多态
深入多态在教师类的基础上,开发一个类DeanOffice代表教务部门,负责对各教师进行评估考核,评估内容包括:
1、教师自我介绍
2、教师授课publicclassDeanOffice{publicvoidjudge(JavaTeachert){roduction();t.giveLesson();}publicvoidjudge(PythonTeachert){roduction();t.giveLesson();}publicstaticvoidmain(String[]args){DeanOfficed=newDeanOffice();d.judge(newJavaTeacher("王林","苏工院"));d.judge(newPythonTeacher("张明","职业大学"));}}控制台输出4.2.2多态
为什么需要多态
深入多态在教师类的基础上,开发一个类DeanOffice代表教务部门,负责对各教师进行评估考核,评估内容包括:
1、教师自我介绍
2、教师授课publicclassDeanOffice{publicvoidjudge(JavaTeachert){roduction();t.giveLesson();}publicvoidjudge(PythonTeachert){roduction();t.giveLesson();}publicstaticvoidmain(String[]args){DeanOfficed=newDeanOffice();d.judge(newJavaTeacher("王林","苏工院"));d.judge(newPythonTeacher("张明","职业大学"));}}控制台输出4.2.2多态
为什么需要多态深入多态现在教师类,要增加一种新子类类型:DBTeacher,该子类
类型的教师专门负责教授数据库,要求如下:属性:姓名、所属学校方法:授课(启动MySQL、实施理论课授课)、自我介绍同时,教务处也负责对这类教师进行评估考核。这个解决方案有什么弊端吗每增加一种新的教师子类,都要修改教务部门的类,还需要再增加相应的judge(评估)方法,代码的可扩展性及可维护性极差第一种解决方案,需要如下两个步骤:建立DBTeacher类修改教务部门DeanOffice类,
再增加方法:judge(DBTeachert)??4.2.2多态
多态的实现第二种解决方案——使用多态publicclassDeanOffice{publicvoidjudge(Teachert
){roduction();t.giveLesson();}publicstaticvoidmain(String[]args){DeanOfficed=newDeanOffice();d.judge(newJavaTeacher("王林","苏工院"));d.judge(newPythonTeacher("张明","职业大学"));d.judge(newDBTeacher(“欧阳菲”,“经贸学院"));}}可以接收子类类型根据实际创建的对象类型调用相应方法控制台输出使用多态之后,当需要增加新的子类类型时,无需更改教务部门类,程序的可扩展性及可维护性增强4.2.2多态
多态实现的三个必要条件
多态的实现1.继承:在多态中必须存在有继承关系的子类和父类2.重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法3.向上转型:子类的引用赋给父类对象向上转型:父类父类对象=子类实例1.
父类有的方法,都可以调用,如果被子类重写了,
则会调用子类的方法。2.父类没有的方法,而子类存在,则不能调用。3.向上转型只对方法有影响,对属性没影响。属性不存在重写。向下转型:父类父类对象=子类实例向下转型之前一定要进行向上转型!否则在转型时会出现ClassCastException异常(类型转换异常–运行时异常)4.2.2多态
多态的应用对象类型引用转换表现在父类对象与子类对象之间的转型上。具体体现在:向上转型还是向下转型。轿车有两种类型:手动挡和自动挡。对于轿车而言,至少有油门踏板和刹车踏板。如果是手动挡的汽车,它会比父类轿车多一个离合踏板。请编程说明作为子类的手动挡汽车此时能否调取它自己的离合踏板?public
classCar{public
int
pedalAuto=2;//定义一个用public修饰的成员变量“自动挡汽车的踏板数”,并初始化public
int
pedalHand=3;//定义一个用public修饰的成员变量“手动挡汽车的踏板数”,并初始化public
voidstepOnGas(){System.out.println("油门踏板");}public
voidstepOnBrake(){System.out.println("刹车踏板");}}4.2.2多态
多态的应用public
classAutoCarextendsCar{
@Overridepublic
void
stepOnGas(){System.out.println("右脚踩油门踏板!");}@Overridepublic
void
stepOnBrake(){System.out.println("右脚踩刹车踏板!");}}public
classHandCarextendsCar{@Overridepublic
voidstepOnGas(){System.out.println("右脚踩油门踏板!");}@Overridepublic
voidstepOnBrake(){System.out.println("右脚踩刹车踏板!");}public
voidstepOnClutch(){System.out.println("左脚踩离合器踏板!");}}public
classTest{
public
static
voidmain(String[]args){
CarautoCar=newAutoCar();//创建父类对象autoCarSystem.out.println("自动挡汽车有"
+autoCar.pedalAuto+"块踏板。");autoCar.stepOnGas();autoCar.stepOnBrake();
CarhandCar=newHandCar();System.out.println("手挡汽车有"
+handCar.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 协议书换爱10话
- 巴拿马船员集体协议书内容
- 竞业协议书自动失效证明
- 固定分红协议书和固定投资
- 眼外伤的急救与后期护理
- 2026年3月临泉皖能环保电力有限公司社会招聘1人备考题库(第二次)附参考答案详解(完整版)
- 2026辽宁鞍山市卫健系统事业单位招聘高层次人才8人备考题库及参考答案详解(研优卷)
- 2026广东百万英才汇南粤东莞市樟木头医院招聘纳入岗位管理的编制外人员37人备考题库含答案详解(a卷)
- 2026中国科学院大气物理研究所公共技术中心招聘1人备考题库(北京)附答案详解(基础题)
- 2026北京大学房地产管理部招聘1名劳动合同制人员备考题库完整参考答案详解
- 2024届高考英语阅读理解说明文篇章结构课件
- 退役军人大病帮扶救助申请书
- 承重墙拆除免责协议书
- 劳务合同模板电子下载
- 个人自我批评和相互批评意见100条
- 三年级下册语文期末复习教案参阅五篇
- 固井质量测井原理
- 株洲科能新材料股份有限公司电子材料建设项目环境影响报告书
- GB/T 24191-2009钢丝绳实际弹性模量测定方法
- GB/T 1420-2015海绵钯
- 焊接技能综合实训-模块六课件
评论
0/150
提交评论