第4章面向对象的高级编程技术(2)PPT课件
合集下载
04.第四章 面向对象编程高级技术
Object Object A类 类 B类 类 C类 类
B1类 类
B2类 类
B11类 类 B22 B21类 类
编程实践
例4-3:Truck3Test.java 3:Truck3Test.java 实战演习:
• 按照习题1、2修改PlainRect类,使用super 按照习题1 修改PlainRect PlainRect类,使用super 来初始化父类属性
子类对父类属性的隐藏
如果子类声明了一个与父类的成员变量同名的成 员变量,则称父类的该成员变量被隐藏(hiding) 员变量,则称父类的该成员变量被隐藏(hiding) 下面代码段的输出结果是?
实战演习
1.创建一个具有确定位置矩形类PlainRect,该类继承于 1.创建一个具有确定位置矩形类PlainRect,该类继承于 第三章中例3_4中的类Rect2,其确定位置用矩形的左上 第三章中例3_4中的类Rect2,其确定位置用矩形的左上 角坐标来标识,为该类添加: 两个属性: 两个属性: 矩形左上角坐标startX和startY。 矩形左上角坐标startX和startY。 一个方法: 一个方法: 方法isInside(double 方法isInside(double x,double y)。用于判断某个点 y)。用于判断某个点 是否在矩形内部,如在矩形内,返回true, 是否在矩形内部,如在矩形内,返回true, 否则,返回 false。 false。 2.编写上题PlainRect类的测试程序 .编写上题PlainRect类的测试程序 (1)创建一个左上角坐标为(10,10),长为20,宽为 )创建一个左上角坐标为(10,10),长为20,宽为 10的矩形对象; 10的矩形对象; (2)计算并打印输出矩形的面积和周长; (3)判断点(25.5,13)是否在矩形内,并打印输出相关信 )判断点(25.5,13)是否在矩形内,并打印输出相关信 息。
B1类 类
B2类 类
B11类 类 B22 B21类 类
编程实践
例4-3:Truck3Test.java 3:Truck3Test.java 实战演习:
• 按照习题1、2修改PlainRect类,使用super 按照习题1 修改PlainRect PlainRect类,使用super 来初始化父类属性
子类对父类属性的隐藏
如果子类声明了一个与父类的成员变量同名的成 员变量,则称父类的该成员变量被隐藏(hiding) 员变量,则称父类的该成员变量被隐藏(hiding) 下面代码段的输出结果是?
实战演习
1.创建一个具有确定位置矩形类PlainRect,该类继承于 1.创建一个具有确定位置矩形类PlainRect,该类继承于 第三章中例3_4中的类Rect2,其确定位置用矩形的左上 第三章中例3_4中的类Rect2,其确定位置用矩形的左上 角坐标来标识,为该类添加: 两个属性: 两个属性: 矩形左上角坐标startX和startY。 矩形左上角坐标startX和startY。 一个方法: 一个方法: 方法isInside(double 方法isInside(double x,double y)。用于判断某个点 y)。用于判断某个点 是否在矩形内部,如在矩形内,返回true, 是否在矩形内部,如在矩形内,返回true, 否则,返回 false。 false。 2.编写上题PlainRect类的测试程序 .编写上题PlainRect类的测试程序 (1)创建一个左上角坐标为(10,10),长为20,宽为 )创建一个左上角坐标为(10,10),长为20,宽为 10的矩形对象; 10的矩形对象; (2)计算并打印输出矩形的面积和周长; (3)判断点(25.5,13)是否在矩形内,并打印输出相关信 )判断点(25.5,13)是否在矩形内,并打印输出相关信 息。
面向对象程序设计Java课程介绍PPT课件
面向对象编程
深入探讨类、对象、封装、继承和多 态等面向对象的核心概念,以及如何 使用Java进行面向对象编程。
异常处理与调试
掌握Java中的异常处理机制,学习如 何进行程序调试和错误处理。
Java语言的发展趋势与未来展望
云计算与微服务
随着云计算技术的不断发展,Java在 构建微服务架构方面将发挥越来越重
随着软件工程领域的发展,面向对象程序设计思想逐渐 成为主流,掌握面向对象编程技术对于提高软件质量和 开发效率具有重要意义。
课程目标
掌握Java语言基础语 法和面向对象编程思 想,包括类、对象、 封装、继承、多态等
核心概念。
熟悉常用Java类库和 API,了解Java集合框 架、输入输出流、多
线程等技术。
Java提供了wait()和notify()方法来实 现线程间通信,其中wait()方法使当 前线程等待某个条件成立,notify()方 法则通知等待的线程继续执行。
05
Java应用实例
图形用户界面设计
总结词
通过使用Java的图形用户界面(GUI)工具包,如Swing和JavaFX,学生将学习如何创建具有 吸引力和功能丰富的用户界面。
自定义异常
Java允许自定义异常类,通过继承Exception或RuntimeException类来实现。自定义异常可以在程序中 根据需要创建和抛出。
文件I/O操作
文件读取
使用Java的FileInputStream 和BufferedReader类可以读
取文本文件的内容,其中 FileInputStream用于打开文 件,BufferedReader用于逐
循环语句
循环语句用于重复执行一段代码。Java中的循环 语句包括for循环、while循环和do-while循环等。
高中信息技术选修1课件-4.2 面向对象程序设计-教科版
3、封装
任务二:请以小组为单位,讨论封装的意 义在哪些?它的思想精要是什么?即为什 么要封装。
Class car () {
}
4、继承
任务三:请以小组为单位在空格处填入正确 内容?
Vehicle 车 bike car boat train plane
Class vehicle () { }
Class bike
vehicle() { }
5、多态
同一方法,在不同对象中表现为不同动作 序列。
6、面向对象编程
以小组为单位,讨论你认为面向对象编程 革命性的变革在哪里?
人类文明与信息发展
现实世界与比特世界
程序
是人为定义的一组相关功能的集合。 程序设计的方式?即面向( )的编程。
换个角度看世界
——面向对象程序设计
1、面向对象思想
2、面向对象的特征
任务一:
请以小组为单位,网络搜索面向对象的特征? 请选好发言人,对特征简要解释!
抽象 封装 继承 多态
四章面向对象基础ppt课件
16
❖ 封装将对象的私有数据隐藏起来,其他对象不能直 接访问这些私有数据,必须通过调用该对象的相关 方法来间接访问。
公有数据 私有数据
数据
方法 对象A
方法
对象B
17
对象封装的好处
通过将对象进行封装,能把对别的对象来说并不重要的 对象的实现细节隐蔽起来,从而在使用一个对象时,只 需知道调用它的方法而无需知道该方法是如何实现的。
push_break() { … } add_oil() { … } }
class Trash_Car extends Car
{ double amount;
fill_trash() { … }
}
29
类层级(class hierarchy)
❖ 类的继承关系不仅仅只是一层关系,它可以有好几层。这 种树状关系,我们称作类层级(class hierarchy)。至于层 级数可依照实际需要而定 。
Java中声明方法的语法如下:
[修饰符] 返回值类型 方法名 (参数列表)
[ throws 例外名1,例外名2,… ]
{Байду номын сангаас
//方法体:
局部变量声明;
语句序列;
}
方法修饰符分为四种: 访问控制符:public 抽象修饰符:abstract 静态修饰符:static 最终修饰符:final
44
4.2.2 用户自定义类
11
软件对象
❖ 软件对象:现实世界中的对象在计算机中的抽象表 示,即仿照现实对象而建立的。
❖ 软件对象也有状态和行为,软件对象用变量表示对 象的状态、用方法来实现对象的行为。
❖ 一个软件对象就是变量和相关方法的集合。
软件对象 = 变量+方法
❖ 封装将对象的私有数据隐藏起来,其他对象不能直 接访问这些私有数据,必须通过调用该对象的相关 方法来间接访问。
公有数据 私有数据
数据
方法 对象A
方法
对象B
17
对象封装的好处
通过将对象进行封装,能把对别的对象来说并不重要的 对象的实现细节隐蔽起来,从而在使用一个对象时,只 需知道调用它的方法而无需知道该方法是如何实现的。
push_break() { … } add_oil() { … } }
class Trash_Car extends Car
{ double amount;
fill_trash() { … }
}
29
类层级(class hierarchy)
❖ 类的继承关系不仅仅只是一层关系,它可以有好几层。这 种树状关系,我们称作类层级(class hierarchy)。至于层 级数可依照实际需要而定 。
Java中声明方法的语法如下:
[修饰符] 返回值类型 方法名 (参数列表)
[ throws 例外名1,例外名2,… ]
{Байду номын сангаас
//方法体:
局部变量声明;
语句序列;
}
方法修饰符分为四种: 访问控制符:public 抽象修饰符:abstract 静态修饰符:static 最终修饰符:final
44
4.2.2 用户自定义类
11
软件对象
❖ 软件对象:现实世界中的对象在计算机中的抽象表 示,即仿照现实对象而建立的。
❖ 软件对象也有状态和行为,软件对象用变量表示对 象的状态、用方法来实现对象的行为。
❖ 一个软件对象就是变量和相关方法的集合。
软件对象 = 变量+方法
《面向对象高级特性》课件
单例模式的优点和缺点
优点是可以确保全局只有一个实例,方便管理和控制;缺点是可能会造成内存泄漏等问题,需要注意及时销毁实例。
延时符
面向对象设计原则
总结词
一个类应该只有一个职责,即只负责一项功能或业务逻辑。
总结词
一个方法应该只做一件事。
详细描述
在单一职责原则中,一个方法应该只做一件事情,这样可以提高代码的可读性和可维护性。如果一个方法做了多件事情,那么应该将其拆分成多个方法。
代理模式的应用场景
代理模式的优点和缺点
单例模式
单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式通常用于创建全局变量或者管理全局资源。
单例模式的实现方式
常见的单例模式实现方式有饿汉式、懒汉式、双重校验锁等。其中饿汉式是在类加载时就完成了实例的创建,懒汉式是在第一次调用时才创建实例,双重校验锁则是利用了volatile关键字和synchronized关键字来确保线程安全。
代理模式
代理模式是一种设计模式,通过在客户端和目标对象之间引入一个代理对象,来控制对目标对象的访问。代理对象可以在客户端和目标对象之间起到中介的作用。
当需要在客户端和目标对象之间增加一些额外的操作时,可以使用代理模式。例如,在Web开发中,可以使用代理模式来缓存请求结果、对请求进行加密等操作。
优点是可以控制对目标对象的访问,增加了系统的灵活性和安全性;缺点是会增加系统的复杂度,并且在使用代理模式时需要小心处理代理对象的生命周期。
02
对象是现实世界实体的抽象,具有属性(数据元素)和方法(行为或功能)。
封装
01
封装是将对象的属性和方法绑定在一起,隐藏对象的内部状态,只通过对象提供的公共接口来访问对象。封装可以提高代码的安全性和可维护性。
优点是可以确保全局只有一个实例,方便管理和控制;缺点是可能会造成内存泄漏等问题,需要注意及时销毁实例。
延时符
面向对象设计原则
总结词
一个类应该只有一个职责,即只负责一项功能或业务逻辑。
总结词
一个方法应该只做一件事。
详细描述
在单一职责原则中,一个方法应该只做一件事情,这样可以提高代码的可读性和可维护性。如果一个方法做了多件事情,那么应该将其拆分成多个方法。
代理模式的应用场景
代理模式的优点和缺点
单例模式
单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式通常用于创建全局变量或者管理全局资源。
单例模式的实现方式
常见的单例模式实现方式有饿汉式、懒汉式、双重校验锁等。其中饿汉式是在类加载时就完成了实例的创建,懒汉式是在第一次调用时才创建实例,双重校验锁则是利用了volatile关键字和synchronized关键字来确保线程安全。
代理模式
代理模式是一种设计模式,通过在客户端和目标对象之间引入一个代理对象,来控制对目标对象的访问。代理对象可以在客户端和目标对象之间起到中介的作用。
当需要在客户端和目标对象之间增加一些额外的操作时,可以使用代理模式。例如,在Web开发中,可以使用代理模式来缓存请求结果、对请求进行加密等操作。
优点是可以控制对目标对象的访问,增加了系统的灵活性和安全性;缺点是会增加系统的复杂度,并且在使用代理模式时需要小心处理代理对象的生命周期。
02
对象是现实世界实体的抽象,具有属性(数据元素)和方法(行为或功能)。
封装
01
封装是将对象的属性和方法绑定在一起,隐藏对象的内部状态,只通过对象提供的公共接口来访问对象。封装可以提高代码的安全性和可维护性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
抽象方法和抽象类
• 在派生类中使用关键字 base 以调用基 类的非缺省构造函数
public class Animal { public Animal(GenderType gender) { // . . . Console.WriteLine("Constructing Animal"); }
}
public class Elephant : Animal { public Elephant(GenderType gender): base(gender) { //Elephant code Console.WriteLine("Constructing Elephant"); }
属性
• 属性是限制对类成员访问的方法
private int animalWeight; public int Weight {
get { return animalWeight;
} set {
animalWeight = value; } }
索引
• u属sing性Sys是tem用; 来访问类中的私有成员变量 Public class IndexerTest
虚方法例子
public class Cylinder:Rectangle {
public Cylinder(double h,double r):base(h,r){ } public override double Area() //重载虚方法 {
return 2*Math.PI*b*b + 2*Math.PI*a*b; } } public class Test { public static void Main() {
}
What Happens
}
What Happens
Eat Something
Eat Mouse
在派生类中使用基类成员
• 在派生类中,通过使用关键字 base 可 以访问基类成员
public class Cat : Animal { public override void Eat() { base.Eat(); Console.WriteLine("Eat small animals"); }
Cat
Eat ()
Mouse
Eat ()
行为 Eat Grass Eat Mouse Eat Cheese
编写虚方法
• 使用虚方法定义在派生类中重载的基类方法
public class Animal {
public virtual void Eat() {
Console.WriteLine("Eat something");
}
密封类
4.2.4 密封类
• 不能从密封类派生
• 防止类在子类中被重载,或被第三方扩 展
public sealed class MyClass { // class members
}
多态性
• 多态性 • 编写虚方法 • 抽象方法和抽象类
Animal 对象
Elephant
多态性
被调用的 方法
Eat ()
索引
Public class Test { public static void Main() {
IndexerTest t=new IndexerTest(); t[3]=256; t[9]=1024; for(int i=0;i<10;i++) { Console.Write(“0,5:d”,t[i]) } } }
}
虚方法例子
using System; public class Rectangle {
protected double a; protected double b; public Rectangle(){ } public Rectangle(double a,double b) {
this.a = a; this.b = b; } public virtual double Area() //虚方法 { return a*b; } }
•
继承、多态和抽象
• 继承
继承性
4.2 继承性
• 派生类
• 在派生类中调用基类构造函数
• 密封类
继承
4.2.1 继承
• 继承描述了“是什 么种类” ( is a ind of)的关系
• 派生类从基类继 承属性和方法, 实现了代码重用
父类 动物
大象
猫
• 派生类变得更专
子类
门化
创建派生类
public class Animal { protected bool IsSleeping; public void Sleep() { } public void Eat() { }
Rectangle r = new Rectangle(1,10); Cylinder c = new Cylinder(4,2) Console.WriteLine(“矩形的面积:{0}”,r.Area()); Console.WriteLine(“圆柱体的表面积:{0}”,c.Area());
} }
• {而索引是用来进行访问在类中声明的 数ppruibva组litceini元nttt[h]素iAsr[irna的ty=inn手deewx]段int[10];
{ get { if (index >=0||index <10)
return Array[index]; else return 0; } set { if (index >=0&&index <10) Array [index] =value; }
}
public class Lion : Animal { public void StalkPrey() { }
} ... Lion adoptedLion = new Lion(); adoptedLion.StalkPrey(); adoptedLion.Eat();
在派生类中调用基类构造函数
} Base Class
Derived Class
}
Animal
Cat
public class Cat : Animal { publVicirotuvearlrMideethvooidd Eat() { Override Method
ConsolEe.aWt (r)iteLine("Eat small anEiamta(l)s");