面向对象技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Before:
i
j
After:
i
j
Before:
After:
c1
c2
c2: Circle
radius = 9
1
2
2
2
c1
c2
c1: Circle
radius = 5
变量赋值
Primitive type assignment i=j
Object type assignment c1 = c2
Before:
类和对象
Circle radius findArea new Circle() circle1: Circle radius = 2 ... new Circle() circlen: Circle radius = 5 Graphical 对象的图形 notation for 符号 objects Graphical 类的图形 notation for 符号 classes
构造计算机能够理 解和处理的类 包括了实体中与需 要解决的问题相关 的数据和属性 抽象数据类型
实例化
抽象
概念世界
数据抽象类型
现实生活 中的对象 计算机中的对象的原型
class Car { int color_number; int door_number; int speed; void brake() { … } void speedUp() {…}; void slowDown() { … } }
Primitive type Object type int i = 1 Circle c i c 1 reference
引用变量
c: Circle Created using new Circle(5) radius = 5
变量赋值
Primitive type assignment i=j
Object type assignment c1 = c2
对象名称 汽车 仓库 国家 人 对象的变量(状态) 速度、油量、所处位置…… 结构、容量、库存…… 经济状况、人口、地理位置…… 五官、肤色、民族…… 对象的方法(行为) 加速、刹车、换挡…… 入库、出库、盘点…… 发展经济、战争、谈判…… 运动、工作、学习……
复杂的社会就是由一系列简言的几个发展阶段
面向机器语言,如汇编语言。 面向过程化语言,如C、Fortran等。过程化语 言摹仿了计算机执行指令的方式,须掌握如何 将问题分解成一连串的简单步骤。 结构化程序设计,没有改变使用的语言,而是 提供了一个新的处理方法。 面向对象编程,计算机程序被概念化成协同工 作、共同完成所需任务的一组对象集。把新创 建的对象和已有的对象合并起来构成自己的程 序。每个对象在整个程序中扮演着一个特定的 角色。
对象B 对象 A
5.2 类
类是定义对象的结构。变量用来描述数据, 方法用来定义行为。对象的类包含一系列数 据和方法的定义。 类是定义一个对象的数据和方法的蓝本。 对象是类的实例。可以从一类中创建许多实 例。创建一个实例被称为实例化。 对象和实例两个词通常可以互换。
类的定义
[< 类 修 饰 符 >] class < 类 名 称 > [extends < 继 承 类 名 称 >] [implements <接口名称>] { <类主体> } 类修饰符:类之间具备不同的存取权限。 –public、abstract、final 关键字:程序语言中已经定义好特定用途的字词,这些保留 关键字将不能被用来作为变量名称等自定用途,否则会影响 程序。 Java 中 , 所 有 的 类 都 是 通 过 直 接 或 间 接 地 继 承 ng.Object得到的。
类的示例1:
class
Vehicle
subclass 客车
Car
货车
object
公交 客车 学校 客车
myCar
李某 轿车
木材 货车
煤厂 货车
public class Vehicle extends Object{ public int WheelNum = 4; //记录车轮数目的数据成员 ......//其它类主体代码 } import Vehicle; public class Car extends Vehicle{ public int DoorNum = 4 ; public String EngineType = "V6引擎" ; ......//其它类主体代码 } import java.io.*; import Car; public class Me{ public static void main(String args[]){ Car mycar = new Car(); System.out.printlin("车轮数量:"+mycar.WheelNum); System.out.printlin("引擎类型:"+mycar.EngineType); } }
private double radius private static int numOfObjects public double getRadius( ) public void setRadius(double newRadius) public static int getNumOfObjects( ) public double findArea( ) TestInstanceAndClassVariable Run
i
j
After:
i
j
Before:
After:
c1
c2
c2: Circle
radius = 9
1
2
2
2
c1
c2
c1: Circle
垃圾对象
radius = 5
5.6 类变量、类常量和类方法
类变量:一个类中所有实例共享数据, 存储于类的公用内存。 声明类变量、类方法需用修饰符static。 类常量声明时添加修饰符final static。
利用构造方法 能够初始化对 象的数据 默认构造方法,如果类中 没有明确定义任何构造方 法,就会隐含地定义一个 默认构造方法。
myCircle = new Circle(5.0);
Example 5.2 使用构造方法
本程序使用Circle类中的构造方法创 建两个半径不同的对象。
TestCircleWithConstructors
TestPassingObject Run
例子说明
通过传递对象myCircle和整数n,main方 法调用printAreas方法。 main n
myCircle
myCircle: Circle radius=1 5
printAreas times
5
c
5.10 可见性修饰符
Java提供了几个修饰符,用来控制对数据、方 法和类的访问。
TestCircle
Run
5.8 构造方法
构造方法是一种特殊的方法,它与一般 方法有两点不同: – 构造方法没有返回类型,甚至连void 也没有 – 构造方法的调用是在创建一个对象时 使用new操作符进行的。
构造方法的作用是初始化对象。
5.8 构造方法
Circle(double r) { radius = r; } Circle() { radius = 1.0; }
第二篇 面向对象程序设计
第5章 使用对象和类编写程序 第6章 类的继承性 第7章 数组和向量
第5章使用对象 和类编写程序
理解对象和类及它们之间的关系;学习如何 定义类和创建类的对象;理解构造方法的作用 了解对象的引用和如何向方法传递对象 理解类变量、类方法、实例变量和实例方法 变量的作用域 使用String、StringBuffer处理字符串
instantiate
-radius = 1 -numOfObjects = 2
2
circle2:Circle
numOfObjects
-radius = 5 -numOfObjects = 2
5
radius
Example 使用实例变量、类变量及实例方法、类方法 本例添加类变量 numOfObjects ,用来跟踪 创建 Circle 对象的个数。 Circle
5.1 对象
对象代表现实世界中可以明确标识的任何 事物。 对象的属性包括:状态和行为。 对象的状态是变量或域以及它们的当前值 构成的集合。 对象的行为是方法的集合。
对象举例
对象的状态在计算机内部用变量来表示 对象的行为在计算机内部用方法来表示 方法实际上类似于面向过程中的函数,对象的行为或操 作定义在其方法的内部。
类的示例2:
class Circle { double radius = 1.0; double findArea() { return radius*radius*3.14159; } }
5.3 实体、对象与类
用面向对象的软件方法解决现实世界的问题:
映射 对象 现实世界 实体 抽象 计算机逻辑表达 类
radius is an instance variable, and numOfObjects is a class variable
1
radius
Circle
-radius -numOfObjects +getRadius +setRadius +getNumOfObjects +findArea
类变量、类常量和类方法
Notation: +: public variables or methods -: private variables or methods underline: static variables or metods
Memory
circle1:Circle
instantiate
5.4 对象的声明与创建
声明对象的语法为: ClassName objectName;
Example:
Car myCar; Circle myCircle;
创建对象的语法: objectName = new ClassName();
Example:
myCar = new Car(); myCircle = new Circle();
public
用它定义的类、方法和数据,所有的程序都可以 访问.
private
用它定义的方法或数据,只能由定义该方法和数 据的类访问,而其他类不能访问.
古典主义:Fortran
最适用的语言才是最好的语言 最适用的语言才是最好的语言 神秘主义:Algol 继 承 影 响
实验主义:Pascal 存在主义:Modula-2
自然主义:BCPL 浪漫主义:Simula 现实主义:C 唯美主义:SmallTalk 超现实主义:C++
新古典主义:Ada
表现主义:Java 解构主义:C#
Run
5.9 给方法传递对象
传递简单类型的变量值与传递对象的区别: 传递简单类型变量就是将其值传递给形参。改变方 法内部的参数不会影响方法外部的变量值。 传递对象意味着将对象的引用传递给形参。方法体 内局部对象的任何变化都会影响作为参数传递的原 对象。这种传递称为引用传递。 Example 5.3 把对象作为参数传递
5.7 对象的使用
引用对象的数据:
objectName.data
实例变量
如:
myCircle.radius
引用对象的方法:
objectName.method
实例方法
如:
myCircle.findArea()
Example 5.1 使用对象
本程序使用Circle类创建一个该类的对象, 并应用对象的数据和方法。
对象的声明与创建可一步完成:
ClassName objectName = new ClassName();
Example:
Car myCar = new Car(); Circle myCircle = new Circle();
5.5 简单类型变量和对象类型变量的区别
值变量 每个变量代表一个存 储值的内存地址。 对于简单类型变量, 对应内存所存储的值 是简单类型的; 对于对象类型变量, 对应内存的值是一个 引用,使对象的存储 地址。
对象图示
变量 方法 (状态)
变量表明对象的状态。 方法表明对象的行为。 对 象的方法把对象的内部变 量包裹、封装、保护起 来,使得只有对象自己的 方法才能操作这些内部变 量。
(行为)
对象之间通信方法
对象的方法是对象与外部环境和其他对象交互、通信的 接口,对象的环境和其他对象可以通过这个接口来调用 对象的方法,操纵对象的行为和改变对象的状态。 消息传递 即激活指定的某个对象的方法以改变其状态或 让它产生一定的行为。 message