《Java面向对象编程基本概念总结pptKANG.ppt》由会员分享,可在线阅读,更多相关《Java面向对象编程基本概念总结pptKANG.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java ProgrammingKangkang ZJava面向对象编程面向对象编程面向对象基本概念 Java面向对象编程 Java语言基础面向对象基本概念面向对象基本概念l对象l类l封装l继承1/13/20233Java ProgrammingJava Programming面向对象面向对象l难以精确定义l从程序设计语言和编程技术开始,发展到软件领域的各个分支,并超出,渗透到体系机构、人工智能等非软件领域l仅就软件领域来说l思想精髓:从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造过程中尽可能运用人类的自然思维方式1/13/20234Java ProgrammingJav
2、a Programming面向对象方法面向对象方法l面向对象方法是一种运用对象、类、继承、封装、聚合、消息传递、多态性等概念来构造系统的软件开发方法1/13/20235Java ProgrammingJava Programming语言鸿沟语言鸿沟客观事物(问题域)客观事物(问题域)计算机计算机自然语言自然语言语言的鸿沟语言的鸿沟编程语言编程语言程程序序的的理理解解和和执行(机器)执行(机器)对问题的认识(人)对问题的认识(人)语言的过渡(人)语言的过渡(人)编程(人)编程(人)1/13/20236Java ProgrammingJava Programming计算机语言的发展使鸿沟变窄计算机
3、语言的发展使鸿沟变窄客观事物(问题域)客观事物(问题域)计算机计算机自然语言自然语言面向对象的语言面向对象的语言语言的鸿沟语言的鸿沟过程语言过程语言汇编语言汇编语言机器语言机器语言1/13/20237Java ProgrammingJava Programming过程化方法过程化方法l系统是围绕着过程来组织的l系统的运行通过过程间的数据传送来实现 l过程和数据清楚地分开 l重点分别集中在数据结构、算法和顺序步骤上 l过程非常难以重用 l缺乏强有力的可视化建模技术 l在分析和实现不同阶段的概念的差别很大l需要进行概念上的转换l造成了分析、设计和实现间的范畴移位 l设计模型离实现还有很长的一步1/
4、13/20238Java ProgrammingJava Programming面向对象方法面向对象方法l系统是围绕着对象组织的l系统的运行是通过对象间的消息传递而运行 l相关的数据和行为捆绑在对象中 l将问题域建模为对象使得在实现时非常自然地反应现实问题 l易于重用,重用的粒度大(类)l可视化的模型表达能力非常强使得人们易于理解 l支持强有力的概念例如抽象、封装、继承、多态等l可视化的问题模型可以演变为问题解决模型 l设计模型距离实现只有很小的一步 1/13/20239Java ProgrammingJava Programming利用面向对象开发的软件利用面向对象开发的软件 l减少软件的复
5、杂性l可维护性l可扩展性l可重用性 l表述非常自然 l将数据和功能并在一起考虑 l分析和实现的隔阂变得非常小 1/13/202310Java ProgrammingJava Programming对象(对象(Object)l一切概念上的存在,小至单个整型数或字符串,大至由许多部件组成的系统均可称作对象 l对象是系统中用来描述客观事物的一个实体,它是构成系统的基本单位。1/13/202311Java ProgrammingJava Programming对象的两个侧面对象的两个侧面l对象具有主动侧面和被动侧面 l被动侧面指其相对静止侧面,由静态的属性表示(数据)l而主动侧面指把对象看作主动机制,
6、即动态的行为(方法/服务/操作)l属性决定行为,行为可以改变属性 l对象是属性和行为的封装体1/13/202312Java ProgrammingJava Programming对象的性质对象的性质 l对象具有封装性(encapsulation)l信息隐藏(information hiding)l对象具有自治性(autonomy)l对象具有通信性 l对象具有被动性 1/13/202313Java ProgrammingJava Programming对象的特性(对象的特性(property)l对象的属性和方法称作对象的特性(property)l属性值即对象的状态l方法即对象的行为 1/13/2
7、02314Java ProgrammingJava Programming对象标识对象标识(object identifier)l缩写为OIDl是将一个对象和其它对象加以区别的标识符l一个对象标识和对象永久结合在一起,不管这个对象状态如何变化,一直到该对象消亡为止 1/13/202315Java ProgrammingJava Programming面向对象程序设计语言中的面向对象程序设计语言中的OIDl强调对象标识的表达能力 l用变量名充当标识 l可寻址性和标识这两个概念做了混合 1/13/202316Java ProgrammingJava Programming类(类(Class)l对象
8、按照不同的性质划分为不同的类 l同类对象在数据和操作性质方面具有共性 l把一组对象的共同特性加以抽象并存贮在一个类中 l类是对象之上的抽象,有了类之后,对象则是类的具体化,是类的实例 l类是静态概念,对象是动态概念 1/13/202317Java ProgrammingJava Programming类类l类是具有相同属性和行为的一组对象的集类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和行为两个的抽象描述,其内部包括属性和行为两个主要部分主要部分1/13/202318Java ProgrammingJav
9、a Programming程序设计语言中的类程序设计语言中的类l类是一个独立的程序单位,程序由一个或多个类组成 l类的作用是定义对象,在程序运行过程中,根据需要创建类的对象(即其实例)l有丰富的类库1/13/202319Java ProgrammingJava Programming在程序设计语言种类的作用在程序设计语言种类的作用l一是作为对象的描述机制,刻划一组对象的公共属性和行为 l二是作为程序的基本单位,它是支持模块化设计的设施,并且类上的分类关系是模块划分的规范标准 1/13/202320Java ProgrammingJava Programming方法(方法(Method)l定义于
10、某一特定类上的操作与规则 l具有同类的对象才可为该类的方法所操作 l这组方法表达了该类对象的动态性质,而对于其它类的对象可能无意义,乃至非法 l规则,说明了对象的其他特征之间是怎样联系的,或者对象在什么条件下是可行的 l方法也称作行为(behavior)1/13/202321Java ProgrammingJava Programming类的实例类的实例l属于某个类的对象称为该类的一个实例(instance)l类和对象间具有instance-of关系 l一个实例是从一个类创建而来的对象l类描述了这个实例的行为(方法)及结构(属性)1/13/202322Java ProgrammingJava
11、Programming类的实例续类的实例续l每个实例具有一个对象标识 l许多不同的实例可以由某一个类所创造 l每个实例可由该类上定义的操作(方法)来操纵 l不同的实例可以由不同的操作序列来操纵,结果是得到不同的状态 l如果这些实例严格地用同样的操作方法进行操纵,必定得到相同的状态 1/13/202323Java ProgrammingJava Programming类及实例具有下面特征类及实例具有下面特征 l同一个类的不同实例具有相同的数据结构,承受的是同一方法集合所定义的操作,因而具有相同的行为 l同一个类的不同实例可以持有不同的值,因而可以有不同的状态 l实例的初始状态(初值)可以在实例化
12、中确定 1/13/202324Java ProgrammingJava Programming类对象类对象l类本身也是一个对象 l这个特殊的对象也有其属性和方法,我们称之为类属性和类方法 l普通对象的属性和方法称作实例属性和实例方法 1/13/202325Java ProgrammingJava Programming动态实例化和静态实例化动态实例化和静态实例化l实例化:创建一个对象的过程l静态实例化:在编译时刻完成的实例化l动态实例化:在运行时刻完成的实例化lJava语言都是动态实例化1/13/202326Java ProgrammingJava Programming动态联编(动态联编(d
13、ynamic binding)l联编(binding)是把一个过程调用和响应这个调用而需要将执行的代码加以结合的过程 l联编在编译时刻进行的叫静态联编(static binding)l动态联编则是在运行时(run time)进行的,因此,一个给定的过程调用和代码的结合直到调用发生时才得以进行,因而也叫迟后联编(late binding)1/13/202327Java ProgrammingJava Programming封装(封装(encapsulation)l所有信息都存贮在对象中l即其数据及行为都封装在对象中 l影响对象的唯一方式是执行它所属的类的方法即执行作用于其上的操作 l信息隐藏(i
14、nformation hiding)l将其内部结构从其环境中隐藏起来 l要是对对象的数据进行读写,必须将消息传递给相应对象,得到消息的对象调用其相应的方法对其数据进行读写 l当使用对象时,不必知道对象的属性及行为在内部是如何表示和实现的,只须知道它提供了那些方法(操作)即可 1/13/202328Java ProgrammingJava Programming可见性(可见性(visibility)l封装的副作用l属性的读写方法l分类l纯OO:严格封装l混合型l全可见l折衷方法:用户指定1/13/202329Java ProgrammingJava Programming继承(继承(inheri
15、tance)l继承是一种使用户得以在一个类的基础上建立新的类的技术 l新的类自动继承旧类的属性和行为特征,并可具备某些附加的特征或某些限制 l新类称作旧类的子类,旧类称作新类的超类 l继承机制的强有力之处还在于它允许程序设计人员可重用一个未必完全符合要求的类,允许对该类进行修改而不至于在该类的其它部分引起有害的副作用 l是其它语言所没有的 1/13/202330Java ProgrammingJava Programming超类(超类(superclass)和子类)和子类(subclass)l已存在的类通常称作超类 l新的类通常称作子类 l子类不仅可以继承超类的方法,也可以继承超类的属性 l如
16、果超类中的某些方法不适合与子类,则可以重置这些方法 1/13/202331Java ProgrammingJava Programming超类和子类的定义超类和子类的定义l如果类C能使用类B中的方法及属性,称B是C的超类,C是B的子类,也称类C继承类B BCABCIS-A联系1/13/202332Java ProgrammingJava Programming继承的传递性继承的传递性l直接超类(子类)l间接超类(子类)ABCDEFGH图图2-5 单继承单继承1/13/202333Java ProgrammingJava Programming单继承单继承l如果一个类只有一个直接超类l单继承构成
17、类之间的关系是一棵树 ABCDEFGH图图2-5 单继承单继承1/13/202334Java ProgrammingJava Programming多继承多继承l如果一个类有多于一个的直接超类 l多继承构成的类之间的关系是一个网格 ABCEFDGH图2-6 多继承1/13/202335Java ProgrammingJava Programming继承的说明继承的说明l类间的共性 l共性在一个类中指出,另外的类可以继承这些共性,可以重用这些共同的描述 1/13/202336Java ProgrammingJava Programming泛化和特化泛化和特化l泛化generalization:通
18、过抽取及共享共同特征,将这些共性抽取出作为超类放在继承层次的上端 l抽取出的超类称作抽象类(abstract class)l抽象类一般没有实例 l特化(specialization):新类作为旧类的子类 1/13/202337Java ProgrammingJava Programming抽象类抽象类l泛化(generalization):通过将若干类的所共享的公共特征抽取出来,形成一个新类,并且将这个类放到类继承层次的上端以供更多的类所重用 l抽象类l抽象类不能创建实例 l抽象类没有实例 lbird1/13/202338Java ProgrammingJava Programming替换原则
19、替换原则l指对于类A和类B,如果B是A的子类,那么在任何情况下都可以用类B来替换类A 1/13/202339Java ProgrammingJava Programming重置和重定义重置和重定义l重置overriding:可以重新修正从超类继承下来的属性及方法 l重置是修改利用已存在类的一种简单而灵活的方法 l但使得类层次不易理解 l继承便变得不具有可传递性了 l重定义redefination:操作的表示和操作的实现体将都改变 l在重置中,只有操作的实现体被改变,而操作的说明及表示仍与以前一样 1/13/202340Java ProgrammingJava Programming子类能否直接
20、访问超类中的属子类能否直接访问超类中的属性性?l可见性lpublic、protected和 private1/13/202341Java ProgrammingJava Programming多态与重载多态与重载l当一问题领域中的元素可以有多种解释 l如果考虑的元素是名字,则多态的含义是一名多用 l只用同一个方法名,可以有不同的语义及实现 l引入多态的概念是为了得到更为灵活的方式使表示的形式尽可能与所表示的内容无关l重载是多态的一种形式 1/13/202342Java ProgrammingJava Programming重载分类重载分类l操作符重载(并不是新概念)l-符号(c语言)l=(pa
21、scal语言,赋值,关系)l即席多态(操作名重载)l操作名重载指同一操作名可用于不同对象(或同一对象)上并产生不同结果l类属软件(generic software)的重用 1/13/202343Java ProgrammingJava ProgrammingJava面向对象编程面向对象编程l类的定义l对象的创建与使用l可见性l类的继承l接口l包1/13/202344Java ProgrammingJava ProgrammingJava类的创建类的创建lclass lextendslImplementsl构造器l属性(实例属性和类属性)l方法(实例方法和类方法)l抽象类与接口(抽象方法)lfinal类和final方法1/13/202345Java ProgrammingJava Programming可见性可见性l包与包的组织l包成员的可见性l类成员的可见性l源代码和类文件的组织管理1/13/202346Java ProgrammingJava ProgrammingJava语言基础语言基础l变量与数据类型l操作符l表达式、语句和代码块l控制结构l字符与字符串l数字l数组1/13/202347Java ProgrammingJava Programming引用数据类型引用数据类型l类l数组l接口1/13/202348Java ProgrammingJava Programming