chapter01面向对象程序设计_第1页
chapter01面向对象程序设计_第2页
chapter01面向对象程序设计_第3页
chapter01面向对象程序设计_第4页
chapter01面向对象程序设计_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章

面向对象程序设计导论本章提供背景性、补充性的材料。让大家看清面向对象程序设计方法的完整面貌,在没有理解大背景之前就去编写面向对象的程序,会有点不舒服。因此会对许多概念进行介绍。本章内容比较C和JAVA的不同面向对象的特征 封装与信息隐藏

继承

多态性

JAVA其他特征JAVA技术及应用领域为什么不是C++1.1C和JAVA的不同C是面向过程,java是面向对象。intmax(intnum1,intnum2){if(num1>num2)returnnum1;elsereturnnum2;}1.1C和JAVA的不同面向对象其实是现实世界模型的自然延伸。现实世界是由一个一个对象组成;对象之间通过消息(请求和服务)相互协作,完成系统的功能.1.1C和JAVA的不同C和java应用的范围不同c主要应用在比较底层的一些东西,比如操作系统,驱动程序,嵌入式开发。

java应用比较表层,主要在网络,企业级应用ERP,大型信息系统等。

学习c和java没有任何冲突,学好了c和java几乎可以解决计算机所有的问题。抽象化的过程所有的编程语言都提供抽象。汇编语言是对计算机的抽象,随后许多语言(例如FORTRAON,BASIC和C)是对汇编语言的抽象,但是这是一种初级的抽象。仍然要求你从计算机的角度,而不是从待解决的问题的角度来考虑。另外一种建立机器模型的方式,就是建立待解决问题的模型。LISP和PROLOG抽象化过程面向对象法更进一步,提供各式各样的工具,让程序员能在问题空间表述各种元素。这样程序员就不会被被限制在特殊问题上了。我们将问题空间的元素同它在解决空间的表述称为“对象”。面向对象方法的特征万物皆对象。理论上可以将待解决问题总的所有观念性组成都变成程序中的对象。程序就是一组互相之间传递消息,告诉对方该干什么的对象。消息是调用专署某个对象的方法的请求。每个对象都利用别的对象来组建它自己的记忆。可以通过将已有的对象打成一个包,来创建新的对象。面向对象方法的特征对象都有类型。任何对象都是某个类的实例。所有属于同一类型的对象都能接受相同的信息。每个对象都有接口Lightlt=newLight();lt.on();接口(interface)规范了你能够对对象发出的请求。不过还要有程序代码来满足这些请求。这些程序代码加上被隐藏的数据,构成了实现(implementation)被隐藏的实现细节java使用三个关键字来设定class的访问权限:public、private、protected。Public定义后,每个任都可以使用Private除了类型开发者可以在该类型的memberfunctions中使用,没有任何人可以使用。Protected和private相似,不过class的继承者可以访问protectedmembers,确无法访问privatememberJava缺省的是friendly访问权限,在同一个package中可以访问其他的calsses重复运用实现代码程序代码的重复运用,是面向对象程序设计最大的优点之一。重复运用某个class最简单的方式就是直接使用其产生的对象。此外也可以把某个class对象置于另一个class内。继承:重复运用接口当你继承既有的类型时,便创造了新的类型,后者不仅可以包含前者所有的成员(但是private成员会被隐藏起来,而且无法访问),更重要的是它同时也复制了基类的接口。继承:重复运用接口继承:在已有类(父类或超类)的基础上派生出新的类(子类),新的类能够吸收已有类的属性和行为,并扩展新的能力。改变继承来的方法定义一个几何图形类Shape,它具有“画图”行为,用draw()表示。但具体画什么图并不确定;

定义Shape类的一些子类如Circle圆和Rectangle矩形。

在子类中“画图”的具体行为draw()可重新定义为:圆类中draw()画圆;矩形类中draw()画矩形。

定义:Shapes;//s作为引用变量可指向Circle圆类的对象,也可指向Rectangle矩形类的对象。执行代码:s.draw();

//s调用draw()方法,s指向对象不同会

画出不同的图形(圆或矩形)JAVA其他特征上面我们介绍了OOP的几个最基本特征,既封装、继承和多态。下面我们继续介绍一些问题,他们的重要性不亚于上述几点。对象的创建,使用和生命周期对象的生成和毁灭,C++认为效率是最重要的,将对象置于stack或静态存储区中,于是程序编写是便要决定对象的存储空间和寿命第二种方法是从一块名为heap的内存中去动态的产生对象Java使用了第二种方法,当要产生对象时就用new来动态的产生对象的实体。对象的寿命,

c++必须自行编写代码来摧毁对象,这样会产生内存泄漏Java使用了所谓的“垃圾回收器机制”,当对象不在被使用的时候会被自动察觉并消灭。Collection和迭代器(iterator)如果你不知道将用到多少个对象,或者不知道该对象该存活多久,才能解决某个问题,那么你同样无法知道该如何存储这些对象。解决方法对于大多数面向对象程序设计问题:产生另一种类型的对象,这个新类型对象存储着一些reference,代表其他对象。通过array完成同样的事情。Java使用第一个方法,这个新类型称为容器,这个新式对象会适当扩展自己的容量,以便容纳你置入的所有的对象,你不需要知道将来会置入多少个对象于容器中,只要产生容器,它就会自行料理细节。Collection和迭代器(iterator)Java提供了许多不同的容器来符合各类需求。例如vertor(arraylist,linkedlist,set,queues,hashtables、trees等。迭代器用户可以通过迭代器操作或者比较一组元素,迭代器的作用就是用来选择容器中的元素,并将这些元素呈现给迭代器使用者。可将”容器实现细节”和”对容器进行访问动作之程序代码”分离开来。单根继承体系1.单根继承体系中的所有对象都有共通接口,所以最终它们都属于相同的type。2.单根继承体系保证所有对象都拥有某些功能。3.单根继承体系也使垃圾回收器的实现更加容易。4.由于所有的对象保证会有执行期型别信息(RTTI)所以我们不会因为无法判断对象的确切型别而陷入动缠不得的僵局。异常处理:面对错误的产生异常处理机制将错误处理问题直接内嵌于程序语言中,有时甚至直接内嵌于操作系统中。所谓异常(exception)是一种对象,可在错误发生点被抛出(throw),并在适当的吃力程序中被捕捉。多线程将问题切割为多个可独立执行的片断,便能够让整个程序更具反应力。这些”可独立执行的片断”便是所谓的线程(threads),而上述这种观念便被成为”多线程”持久性对象生成之后,只要你还需要它,它就会持续存在。但是一旦程序结束,它就不再有生存环境了。持久性就是让对象可以在程序非执行状态下依旧存在,依旧保有其信息。Java提供了”轻量级持久性”,可以轻松将对象存储于磁盘,并于日后取出,但是还是要自己调用存储、取回动作。1.2类与对象面向对象程序设计:将客观事物(或实体)看作具有属性和行为(或称服务)的对象(object),通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),而形成类(class)的概念。程序的执行,表现为一组对象之间的交互通信。对象之间通过公共接口进行通信,从而完成系统功能。类是相同对象的集合的描述。例如,类Human就是现实世界中人(对象)的集合,我、你、他都是Human的对象。分析类Human的所有对象——人,得到对象的共同的数据属性和行为,如下所示:数据属性:编号、姓名、年龄,…

行为:吃饭、走路、跳舞,…抽象是对具体对象进行概括,抽象出这一类对象的公共性质并加以描述的过程。先注意问题的本质及描述,其次是实现过程或细节。1.2类与对象(续)定义Human类:classHuman{intno;Stringname;intage;…voideat(){…}

…}Human被称作类名。no,name,age被称作域(fields)或变量,eat()被称作方法(methods),它们都是类的成员。1.2类与对象(续)在面向对象的编程语言中,类是一个数据类型对象是类的实例(instance)。引用变量:具有类类型的变量被称作对象引用(objectreference)。例如,Humanp1=newHuman(1,“张三”,20,…);p1被称作对象引用变量,newHuman(1,”张三“,20,…)被称作Human的对象。对象对象:是用来描述现实世界中实际存在的事物的实体,它是用来构成系统的一个单位。对象由一组属性和一组行为(操作或服务)构成。对象具有固定的对外接口.一组属性和操作的集合.对象之间通过公共接口进行通信.对象的状态:对象的属性值表示了它所处于的状态;对象的操作是用来改变对象状态。1.3封装与信息隐藏封装(Encapsulation)是面向对象方法的重要原则。就是把对象的属性和操作(或服务)结合为一个独立的整体(系统单位),并尽可能隐藏对象的内部实现细节。封装有两个含义:其一,把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位—类。其二,“信息隐蔽”,尽可能隐蔽对象的内部细节,对外界形成一个边界,只保留有限的对外接口使之与外部发生联系。1.3封装与信息隐藏(续)Java语言中,定义类时通过大括号{}封装了类的成员:域(fields)和方法(methods),使用private和public等关键字来控制对类的成员的访问,其中private修饰的成员是隐藏的,而public修饰的成员则定义了类对外的公共接口。类作为一个抽象的数据类型允许用户从底层实现细节中抽象出来,提供给用户的是在公共接口上的上层操作。这是抽象性的含义。1.4继承Inheritance继承:在已有类(父类或超类)的基础上派生出新的类(子类),新的类能够吸收已有类的属性和行为,并扩展新的能力。继承机制中,往往从一组类中抽象出公共属性放在父类。继承支持着软件代码的复用,是提高软件开发效率的重要因素之一。

继承的例子

例如,给定类Car、Motocycle和Truck,我们把它们的公共属性放在一个称为Vehicle的公共父类中。VehicalCarMotocycleTruck继承的例子苹果梨西瓜水果继承的例子CircleRectangleShape1.4继承(续)Java中继承的一个例子:给定一个Window类,通过继承扩展它而得到一个子类MenuWin。classWin{…

//Win的成员定义}classMenuWinextendsWin{…

//MenuWin新增加成员的定义}1.4继承(续)继承分为:单继承是指一个子类最多只能有一个父类。多继承是一个子类可有二个以上的父类。由于多继承会带来二义性,在实际应用中应尽量使用单继承。Java语言中的类只支持单继承,而接口支持多继承。如何设计继承并完成继承层次是面向对象设计和编程的核心问题。继承是多态性的前提条件。objectWinDialogWin单继承,injavaClass1Class4Class2Class3多继承,inC++单继承与多继承例子1.5多态性多态性(Polymorphism):指在超类中定义的属性或行为,被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在超类及其各个子类中具有不同的语义。1.5多态性(续)例如:定义一个几何图形类Shape,它具有“画图”行为,用draw()表示。但具体画什么图并不确定;定义Shape类的一些子类如Circle圆和Rectangle矩形。在子类中“画图”的具体行为draw()可重新定义为:圆类中draw()画圆;矩形类中draw()画矩形。定义:Shapes;

//s作为引用变量可指向Circle圆类的对象,也可指向Rectangle矩形类的对象。执行代码:

s.draw();//s调用draw()方法,s指向对象不同会画出不同的图形(圆或矩形)

本节小结面向对象方法的显著特性封装性、抽象性、继承性和多态性将面向对象设计方法应用于程序的开发工具和开发过程中,不仅可以加快开发的速度,还可极大地增强程序的可维护性和可扩展性,提高代码重用率。1.6面向对象的建模和UML统一建模语言(UnifiedModelingLangua

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论