3.1 面向对象技术基础
3.1.1 面向对象的基本概念
面向对象的基本思想 面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。 1. 对象的基本概念 2. 类的基本概念 3. 消息
|
1. 对象的基本概念<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。
主动对象是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(称作主动服务)。
3.1.2 面向对象的基本特征
1.封装性
2.继承性
3.多态性
1.封装性
封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:
◇ 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。
◇ 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使之与外部发生联系。
封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的"交叉感染",使软件错误能够局部化,大大减少查错和排错的难度。
2.继承性
特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。例如,轮船、客轮;人、大人。一个类可以是多个一般类的特殊类,它从多个一般类中继承了属性与服务,这称为多继承。例如,客轮是轮船和客运工具的特殊类。在java语言中,通常我们称一般类为父类(superclass,超类),特殊类为子类(subclass)。
3.多态性
对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义。例如:"几何图形"的"绘图"方法,"椭圆"和"多边形"都是"几何图"的子类,其"绘图"方法功能不同。
3.1.3 面向对象程序设计方法
OOA-Object Oriented Analysis 面向对象的分析
OOD-Object Oriented Design 面向对象的设计
OOI-Object Oriented Implementation 面向对象的实现
3.2 Java语言的面向对象特性
3.2.1 类
类是java中的一种重要的复合数据类型,是组成java程序的基本要素。它封装了一类对象的状态和方法,是这一类对象的原形。一个类的实现包括两个部分:类声明和类体。
1.类声明 2.类体 3.成员变量 4.成员方法 5.方法重载 6.构造方法
1.类声明:
[public][abstract|final] class className [extends superclassName] [implements interfaceNameList] {……}
其中,修饰符public,abstract,final 说明了类的属性,className为类名,superclassName为类的父类的名字,interfaceNameList为类所实现的接口列表。 2.类体
类体定义如下: class className {[public | protected | private ] [static] [final] [transient] [volatile] type variableName; //成员变量 [public | protected | private ] [static] [final | abstract] [native] [synchronized] returnType methodName([paramList]) [throws exceptionList] {statements} //成员方法 } 3.成员变量
成员变量的声明方式如下: [public | protected | private ] [static] [final] [transient] [volatile] type variableName; //成员变量 其中, static: 静态变量(类变量);相对于实例变量 final: 常量 transient: 暂时性变量,用于对象存档 volatile: 贡献变量,用于并发线程的共享 4.成员方法
方法的实现包括两部分内容:方法声明和方法体。 [public | protected | private ] [static] [final | abstract] [native] [synchronized] returnType methodName([paramList]) [throws exceptionList] //方法声明 {statements} //方法体
方法声明中的限定词的含义: static: 类方法,可通过类名直接调用 abstract: 抽象方法,没有方法体 final: 方法不能被重写 native: 集成其它语言的代码 synchronized: 控制多个并发线程的访问
◇ 方法声明 方法声明包括方法名、返回类型和外部参数。其中参数的类型可以是简单数据类型,也可以是复合数据类型(又称引用数据类型)。
对于简单数据类型来说,java实现的是值传递,方法接收参数的值,但不能改变这些参数的值。如果要改变参数的值,则用引用数据类型,因为引用数据类型传递给方法的是数据在内存中的地址,方法中对数据的操作可以改变数据的值。 例3-1说明了简单数据类型与引用数据的区别。 <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 28.5pt; HEIGHT: 28.5pt" alt="" type="#_x0000_t75"><imagedata o:href="file:///D:\nnixin\jsjjsj\JAVA编程语言\GD_jsj_008b\images\html\liti.gif" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C02%5Cclip_image001.gif"><font face="宋体, MS Song" size="2"></font></imagedata></shape>【例3-1】 import java.io.*; public class PassTest{ float ptValue; public static void main(String args[]) { int val; PassTest pt=new PassTest(); val=11; System.out.println("Original Int Value is:"+val); pt.changeInt(val); //值参数 System.out.println("Int Value after Change is:" +val); /*值参数 值的修改,没有影响值参数的值*/ pt.ptValue=101f; System.out.println("Original ptValue is:"+pt.ptValue); pt.changeObjValue(pt); //引用类型的参数 System.out.println("ptValue after Change is:"+pt.ptValue);/* 引用参数值的修改,改变了引用参数的值*/ } public void changeInt(int value){ value=55; //在方法内部对值参数进行了修改 } public void changeObjValue(PassTest ref){ ref.ptValue=99f; //在方法内部对引用参数进行了修改 } }
◇ 方法体 方法体是对方法的实现,它包括局部变量的声明以及所有合法的Java指令。方法体中声明的局部变量的作用域在该方法内部。若局部变量与类的成员变量同名,则类的成员变量被隐藏。 例3-2 说明了局部变量z和类成员变量z的作用域是不同的。 <shape id="_x0000_i1026" style="WIDTH: 28.5pt; HEIGHT: 28.5pt" alt="" type="#_x0000_t75"><imagedata o:href="file:///D:\nnixin\jsjjsj\JAVA编程语言\GD_jsj_008b\images\html\liti.gif" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C02%5Cclip_image001.gif"><font face="宋体, MS Song" size="2"></font></imagedata></shape>【例3-2】 import java.io.*; class Variable{ int x=0,y=0,z=0; //类的成员变量 void init(int x,int y) { this.x=x; this.y=y; int z=5; //局部变量 System.out.println("** in init**"); System.out.println("x="+x+" y="+y+" z="+z); } } public class VariableTest{ public static void main(String args[]){ Variable v=new Variable(); System.out.println("**before init**"); System.out.println("x="+v.x+" y="+ v.y+" z="+v.z); v.init(20,30); System.out.println("**after init**"); System.out.println("x="+v.x+ " y="+ v.y+" z="+v.z); } }
上例中我们用到了this,这是因为init()方法的参数名与类的成员变量x,y的名字相同,而参数名会隐藏成员变量,所以在方法中,为了区别参数和类的成员变量,我们必须使用this。this-----用在一个方法中引用当前对象,它的值是调用该方法的对象。返回值须与返回类型一致,或者完全相同,或是其子类。当返回类型是接口时,返回值必须实现该接口。
5.方法重载 方法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。
参数类型的区分度一定要足够,例如不能是同一简单类型的参数,如int与long。
<shape id="_x0000_i1027" style="WIDTH: 28.5pt; HEIGHT: 28.5pt" alt="" type="#_x0000_t75"><imagedata o:href="file:///D:\nnixin\jsjjsj\JAVA编程语言\GD_jsj_008b\images\html\liti.gif" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C02%5Cclip_image001.gif"><font face="宋体, MS Song" size="2"></font></imagedata></shape>【例3-3】 import java.io.*; class MethodOverloading{ void receive(int i) { System.out.println("Receive one int data"); System.out.println("i="+i); } void receive(int x, int y) { System.out.println("Receive two int datas"); System.out.println("x="+x+" y="+y); } } public class MethodOverloadingTest{ public static void main(String args[]) { MethodOverloading mo=new MethodOverloading(); mo.receive(1); mo.receive(2,3);
} } 6. 构造方法
◇ 构造方法是一个特殊的方法。Java 中的每个类都有构造方法,用来初始化该类的一个对象。 ◇ 构造方法具有和类名相同的名称,而且不返回任何数据类型。 ◇ 重载经常用于构造方法。 ◇ 构造方法只能由new运算符调用 <shape id="_x0000_i1028" style="WIDTH: 28.5pt; HEIGHT: 28.5pt" alt="" type="#_x0000_t75"><imagedata o:href="file:///D:\nnixin\jsjjsj\JAVA编程语言\GD_jsj_008b\images\html\liti.gif" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C02%5Cclip_image001.gif"><font face="宋体, MS Song" size="2"></font></imagedata></shape>【例3-4】 class Point{ int x,y; Point(){ x=0; y=0; } Point(int x, int y){ this.x=x; this.y=y; } }
|
|
3.2.2 对象
类实例化可生成对象,对象通过消息传递来进行交互。消息传递即激活指定的某个对象的方法以改变其状态或让它产生一定的行为。一个对象的生命周期包括三个阶段:生成、使用和消除。
1. 对象的生成 2. 对象的使用 3. 对象的清除
1. 对象的生成
对象的生成包括声明、实例化和初始化。
格式为:
type objectName=new type([paramlist]);
◇ 声明:type objectName
声明并不为对象分配内存空间,而只是分配一个引用空间;对象的引用类似于指针,是32位的地址空间,它的值指向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所在的堆的地址,而对于对象所在的实际的内存地址是不可操作的,这就保证了安全性。
◇ 实例化:运算符new为对象分配内存空间,它调用对象的构造方法,返回引用;一个类的不同对象分别占据不同的内存空间。
◇ 生成:执行构造方法,进行初始化;根据参数不同调用相应的构造方法。
2. 对象的使用
通过运算符"."可以实现对变量的访问和方法的调用。变量和方法可以通过设定访问权限来限制其它对象对它的访问。
◇调用对象的变量
格式:objectReference.variable
objectReference是一个已生成的对象,也可以是能生成对象的表达式
例: p.x= 10;
tx=new Point( ).x;
◇调用对象的方法
格式:objectReference.methodName([paramlist]);
例如:p.move(30,20);
new Point( ).move(30,20);
3. 对象的清除
当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。
System.gc( );
当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统同步运行。
1. 封装性
java语言中,对象就是对一组变量和相关方法的封装,其中变量表明了对象的状态,方法表明了对象具有的行为。通过对象的封装,实现了模块化和信息隐藏。通过对类的成员施以一定的访问权限,实现了类中成员的信息隐藏。
◇ 类体定义的一般格式:
class className
{ [public | protected | private ] [static]
[final] [transient] [volatile] type
variableName; //成员变量
[public | protected | private ] [static]
[final | abstract] [native] [synchronized]
returnType methodName([paramList])
[throws exceptionList]
{statements} //成员方法
}
◇ java类中的限定词
java语言中有四种不同的限定词,提供了四种不同的访问权限。
1) private
类中限定为private的成员,只能被这个类本身访问。
如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。
2) default
类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。
3) protected
类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。
4) public
类中限定为public的成员,可以被所有的类访问。
【表3-1】 java中类的限定词的作用范围比较
| 同一个类
| 同一个包
| 不同包的子类
| border-right: #d4d0c8; padding-right: 0cm; border-top: #d4d0c8; padding-left: 0cm; background: white; padding-bottom: 0cm; border-left: #d4d0c8; padding-top: 0cm;
分享到:
Global site tag (gtag.js) - Google Analytics
|
相关推荐
Java 面向对象技术基础,好好学习天天向上!呵呵
JavaScript是一种基于原型的面向对象编程语言,它的面向对象技术基础包括对象、数组、原型、作用域、闭包以及模拟私有变量等核心概念。下面将详细介绍这些知识点。 **1. 对象与数组** 在JavaScript中,对象是键值...
本文将深入浅出地讲解JavaScript中的面向对象技术基础,包括对象、数组、函数、类、构造函数以及原型等方面的知识。 首先,让我们来看看对象和数组。在JavaScript中,对象是键值对的集合,这些键通常是字符串,对应...
面向对象技术基础是计算机科学中的一个关键领域,它主要涉及如何使用面向对象的编程语言(如Java或C++)来设计、开发和管理复杂软件系统。这篇作业要求旨在帮助学生深入理解和掌握面向对象编程的基本概念、原则和...
"面向对象技术基础-统一建模方法(UML)" 面向对象技术基础是软件开发中的核心技术之一,而统一建模语言(UML)则是面向对象技术的基础。在本文中,我们将详细介绍UML的基础知识,包括状态图、活动图、交互图等。 ...
【java编程课件】 面向对象技术基础.ppt
计算机软件及应用-面向对象技术基础-课程说明.ppt
JavaScript面向对象技术是该编程语言非常核心的一个部分,它允许开发者使用对象来组织代码,并模拟现实世界中的实体。在JavaScript中,几乎所有的东西都可以被视为对象,包括基本数据类型如数字和字符串。对象包含...
JavaScript是一种广泛应用于...以上是JavaScript面向对象技术的一些基础知识。通过理解并熟练运用这些概念,开发者能够编写出更清晰、更易于维护的代码。对于JavaScript初学者来说,掌握这些基础是进阶学习的关键步骤。
### 面向对象技术基础 1. **对象的操作**:对象是由其属性、事件和方法定义的。属性描述对象的状态,事件表示对象的行为或响应,而方法则是对象可以执行的动作。例如,在Visual Basic中,一个按钮对象可能具有`...
《UML面向对象设计基础》是面向对象技术领域的一本经典入门书籍。它通过系统地介绍面向对象设计的基础知识、符号表示、发展历史、原理、优点和缺点,为读者提供了一个全面的、可操作的学习框架。无论是初学者还是...
通过学习面向对象技术的基本原理、分析方法和具体应用,不仅能够提高个人的技术能力,还能为未来的职业生涯奠定坚实的基础。希望每位学习者都能够充分掌握面向对象技术的核心理念,并将其应用于实际工作中,为软件...
面向对象技术和建模基础
### 北京大学信息科学技术学院面向对象技术教程详解 #### 面向对象技术概论 面向对象技术(Object-Oriented Technology, OOT)是一种软件工程方法论,旨在通过模拟现实世界中的对象来构建软件系统。北京大学信息...
2. 面向对象技术基础 面向对象技术的基础知识点涉及封装、继承、多态这三大特性。封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。继承是指子类自动继承父类的属性和方法,并可以扩展新的特性。多态则...
包括专项练习题+山东大学期末往年题 本人就是使用这一套练习...在做题目之前我强烈建议大家看一遍我个人主页中对于面向对象技术基础知识的四篇讲解文章。对于设计模式我也将在后续更新 祝学弟学妹们都能取得好成绩呀~~
面向对象技术是现代软件开发中的核心概念,尤其在C++编程语言中得到了广泛的应用。这一技术基于面向对象编程(Object-Oriented Programming, OOP)的思想,它将数据和操作数据的方法封装在一起,形成对象,以此来...
面向对象的基础知识和技术是现代软件开发中的核心概念,尤其在.NET Framework中得到了广泛的应用。.NET Framework是一个由Microsoft开发的全面的开发平台,它提供了多种编程语言(如C#)的支持,以及丰富的类库和...
面向对象技术(Object-Oriented Technology,OOT)是一种软件开发方法,它基于“对象”的概念,将现实世界的问题映射到计算机程序中。UML(Unified Modeling Language),统一建模语言,是面向对象设计和分析的一种...
java 面向对象技术的基础入门 类的继承 访问控制 方法覆盖