面向对象基础1_第1页
面向对象基础1_第2页
面向对象基础1_第3页
面向对象基础1_第4页
面向对象基础1_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

面向对象基础2023/2/5面向对象问题求解的提出面向机器的程序:为特定的硬件系统专门设计。效率高但可读性和可移植性差。面向过程的程序:用计算机能理解的逻辑来描述和表达待解决的问题及具体的解决过程。其核心是数据结构+算法。如C,FORTRAN等。可以精确完备地描述具体的求解过程但无法清楚表述含多个相互关联的过程的复杂系统。面向对象的程序:用计算机逻辑来描述系统本身,包括系统组成、系统各种可能状态、系统中可能产生的各种过程及过程引起的系统状态切换。其核心是对象+消息。如:Smalltalk、Lisp,Clascal,ObjectPascal,C++、Java2什么是对象3MethodsVariable

图显示了对象的变量组成了圆心部分。方法处在变量的四周并且在程序中从其它对象隐藏了对象的核心。用保护方法的方法来包装对象的变量称为封装。这个对象图就是对象理想的表示法,也是面向对象系统设计者努力的最后目标.然而这并不是全部的内容。通常,出于某种现实的理由,对象可能暴露它的一些变量或者隐藏一些方法。什么是对象

在JAVA中访问变量和方法可以转换为控制访问类的成员函数。封装相关的变量和方法到一个简洁的软件集是一个简单而且强有力的方法,它为软件开发者提供了两个主要好处:模块性:对象的源代码可以独立于其它的对象源代码来进行编写和维护。同样,对象可以很容易地在系统中传递。你可以将你的对象给其它的对象,它仍然可以正常工作。信息隐藏:一个对象如果有一个公共的界面,那么其它的对象就可以与之进行通讯。这个对象可以维护私人的信息和方法,它可以在任何时候被改变而不影响依耐于它的其它对象。.4什么是消息.5

单一的一个对象通常不是很有用的。相反,一个对象通常是一个包含了许多其它对象的更大的程序或者应用程序。通过这些对象的交互作用,程序员可以获得高阶的功能以及更为复杂的行为.软件对象与其它对象进行交互与通讯是利用发送给其它对象来实现的。当对象A想对象B来执行一个B中的方法,对象A就会消息给对象B。如图所示

对象—现实生活中对象:一个人、一个物、一件事等

对象是认识世界的基本单元。整个世界由形形色色的对象构成。对象是现实世界中的一个实体,其特性是:每一个对象必须有一个名字以区别其它对象;用属性(或状态)来描述它的某些特征;有一组操作,每一个操作决定对象的一种行为。.6.7举例(2)

教师李志宇是一个对象:对象名:李志宇对象的属性:

年龄:28

性别:男学历:博士职称:教授专业:计算机科学理论对象的操作:

说自己的年龄说自己的专业讲课研究对象的关系包含:对象A是对象B的属性时,称对象B包含对象A。如显象管对象和电视机对象。内存空间上,被包含的对象将被保存在包含它的对象内部。继承:对象A是对象B的特例时,称对象A继承了对象B。如电视机对象和彩色电视机对象。关联:对象A的引用是对象B的属性时,称对象A和对象B之间是关联关系。如电视机对象和厂商对象。.8优点.9

封装性

对象的封装性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,降低了维护数据与操作之间的相容性的负担。而且把对象的私有数据和公共数据分离开,保护了私有数据,减少了模块间可能产生的干扰,达到降低程序复杂性、提高可控性的目的,提高了程序的可重用性和可维护性。优点.10

封装性

自治性

对象作为独立的整体具有良好的自治性,即它可以通过自身定义的操作来管理自己。一个对象的操作可以完成两类功能:一是修改自身的状态;二是向外界发布消息。当一个对象要想影响其他对象时,需要调用那个对象的方法,而不是直接去改变那个对象。对象的这种自治性能够使得所有修改对象的操作都可以以对象自身所具有的一种行为的形式存在于对象整体之中,从而维护了对象的完整性,有利于对象在不同环境下的重用、扩充和维护。优点.11

封装性自治性

安全性

对象具有通过一定的接口和相应的消息机制与外界相联系的特性,并与对象的封装性结合在一起,较好地实现了信息隐藏。这样使得对象成为一只使用方便的“黑匣子”,其中隐藏了私有数据和内部运行机制。使用对象时只需要了解其接口提供的功能和操作,而不必了解对象内部的数据描述和具体的功能实现。优点12

封装性自治性安全性

扩展性

继承是面向对象的另一个重要特性,通过继承可以很方便地实现应用的扩展和已有代码的重复使用,在保证质量的前提下提高开发效率,也使得面向对象的开发方法与软件工程的一个新方法——快速原型法能够很好地结合在一起,形成一种更有效、更实用的软件开发技术。面向过程的程序设计将问题分解成若干个成为模块的功能块根据模块功能设计一系列用于存储数据的数据结构编写一些过程(函数)对数据进行操作(算法)将这些过程组成程序核心:功能的分解.13举例(1):设计一个银行系统。该系统允许顾客开设不同类型的银行帐户,其中包括现金帐户,支票帐户和贷款帐户,同时允许顾客存款,取款和转帐。14.15分解模块:存款----MakeDeposit取款----WithDraw转帐----Transfer

2.建立数据结构:structaccount{charname;unsignedlongaccountID;floatbalance;floatinterestYTD;characcountType};3.编写实现过程的程序4.组成系统面向过程程序设计的缺陷.16程序员和顾客的关注点分离数据结构与过程分离

顾客关心的是他的帐户还剩多少钱,利息多少,钱在银行是否安全,而对存钱,取钱等过程不感兴趣.

程序员关心的是如何编写存款,取款代码,如何在一建立的数据机构中填写数据并管理数据,而对具体的数据不感兴趣.面向过程程序设计的缺陷.17程序员和顾客的关注点分离软件系统中顾客与他们的银行帐号分离数据结构与过程分离

顾客与自己的帐号联系并不紧密,系统中顾客只不过是一串字符或数字,而帐号只不过是一个整数,因而不考虑谁拥有这个帐号,帐号里的内容是什么等,这与实际情况不符.面向过程程序设计的缺陷.18程序员和顾客的关注点分离软件系统中顾客与他们的银行帐号分离数据安全性差数据结构与过程分离

程序员可以方便地修改帐目,因为对他来说只不过是修改数据结构中的数字.面向过程程序设计的缺陷.19程序员和顾客的关注点分离软件系统中顾客与他们的银行帐号分离数据安全性差要求变化时,软件维护开销大数据结构与过程分离

对每种帐户类型,程序处理的方式不会完全相同.如果新增加一种帐户类型,必须重新编写程序代码.面向对象的程序设计.20与面向过程的程序设计的不同点:重点是数据而不是过程数据和定义在它上面的操作构成一个整体数据本身不能被外部程序和过程直接存取

面向对象的程序设计是一种新的程序设计范型.面向对象的程序的主要结构特点是:一、程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律;二、程序中的一切操作都是通过向对象发送消息来实现的,对象接到消息后,启动有关方法完成相应的操作。什么是类类实际上是对某种类型的对象定义变量和方法的原型。

在现实世界中,你经常看到相同类型的许多对象。比如,你的自行车只是现实世界中许多自行车的其中一辆。使用面向对象技术,我们可以说你的自行车是自行车对象类的一个实例。通常,自行车有一些状态(当前档位、两个轮子等等)以及行为(改变档位、刹车等等)。但是,每辆自行车的状态都是独立的并且跟其它自行车不同。当厂家制造自行车的时候,厂商利用了自行车共有的特性来根据相同的蓝图制造许多自行车。如果制造一辆自行车就要产生一个新蓝图,那效率就太低了.21什么是类.22

在面向对象软件中,同样地,可以让相同种类地许多对象来共有一些特性,比如矩形、雇员记录、视频夹等等。就象自行车制造商人,你可以利用相同种类的对象是相似的事实并且你可以为这些对象创建一个蓝图。对对象的软件蓝图叫做类。自行车的类需要定义一些实例变量来包括当前档位、当前速度等等。这个类将为实例方法定义和提供实施方法,它允许骑车者改变档位、刹车以及改变脚踏板的节奏,如图所示:对象和类一个对象是由描述其属性的数据和定义在其上面的一组操作组成的实体,是数据单元和过程单元的组合体;类是对一组对象的抽象,这组对象具有相同的属性结构和操作行为,在对象所属的类中要说明这些结构和行为。类也可以看作是一种新的数据类型。一个对象是类的一个实例。有了类,才可以创建对象。类不能是它们描述的对象本身,类是同一种对象的集合的抽象,即,同一类对象的变量和方法的原型。

.23.24classBankAccount{ privatefloatbalance; privatefloatintetestYTD; privatestringowner; privateintaccount_number; public voidMakeDeposit(floatamount); public floatWithDraw(floatamount); public booleanTransfer(BankAccountto,floatamount);}

实例成员和类成员

实例变量和实例方法是实例(对象)中的成员,类变量和类方法是类中的成员。实例变量与类变量每次创建一个类的对象的时候,系统为它创建了类的每一个实例变量的副本。我们就可以从对象中访问该实例变量。类变量跟实例变量是不一样的,不管为一个类创建了多少个对象,系统只为每个类变量分配一次存储空间。系统为类变量分配的内存是在它第一次调用类的时候完成的。所有的对象共享了类变量的相同副本。可以通过对象或者通过类本身来访问类变量。.25实例成员和类成员

实例变量和实例方法是实例(对象)中的成员,类变量和类方法是类中的成员。实例方法与类方法实例方法对当前对象的实例变量进行操作,而且可以访问类变量。而类方法只可以操作类变量,不能访问定义在类中的实例变量,除非它们创建一个新的对象并通过对象来访问它们。同样,类方法可以在类中被调用,并不一定必须建立一个实例来调用一个类方法。.26三个重要的概念继承抽象与封装多态.27继承在面向对象的技术中,继承是与传统方法不同的一个最具特色的方法。它是面向对象的程序中两个类之间的一种关系,即一个类可以从另一个类(即它的父类)继承状态和行为。被继承的类也可称为超类(父类),继承父类的类称为子类。继承为组织和构造软件程序提供了一个强大而自然的机理。.28.29自行车的父类与子类关系

继承.30

一个父类可以同时拥有多个子类,这时这个父类实际上是所有子类的公共变量和方法的集合,每一个子类从父类中继承了状态。例如,山地自行车、赛车以及双人自行车共享了这些状态:双轮、脚踏、速度等。同样,每一个子类继承了父类的方法,山地自行车、赛车以及双人自行车共享这些行为:刹车、改变脚踏速度等等。然而,子类可以不受到父类提供的状态和行为的限制。除了从父类继承而来的变量和方法之外,子类可以增加自己的变量和方法。比如,双人自行车有两个座位,这是它的父类没有的。

继承继承子类也可以改变继承来的变量和方法,也即可以重载继承的方法,并且为这些方法提供特殊执行方法。比如,如果有一个山地自行车有额外的齿轮设置,就可以重载设置齿轮方法来使骑车者可以使用这些新的齿轮。

此外,类是逐级继承的,继承的层次不能限制,继承树或者类的分级结构可以很深。.31抽象与封装面向对象的软件开发方法的主要特点之一,就是采用了数据抽象的方法来构建程序的类、对象和方法。数据抽象是把系统中需要处理的数据和在这些数据上的操作结合一起,根据功能、性质和用途等因素抽象成不同的抽象数据类型,每个抽象数据类型既包含了数据,又包含了针对的这些数据的授权操作。.32抽象抽象与封装将数据结构和作用于数据结构上的操作组成一个实体,数据的表示方式和对数据的操作细节被隐藏起来,用户通过操作接口对数据进行操作。对于用户来说,只知道如何通过操作接口对该数据进行操作,而不知道是如何做的,也不知道数据是如何表示的,这就是数据的封装。封装是一个与抽象密切相关的重要特性。抽象和封装是互补的,好的抽象有利于封装,封装的实体则帮助维护抽象的完整性。.33封装多态性在面向对象程序设计中,多态性又是一个重要特性。面向系统的多态性是指不同的对象收到相同的消息时产生多种不同的行为方式。多态的实现是由消息的接收者确定一个消息应如何解释,而不是由消息的发送者确定,消息的发送者只需知道另外的实例可以执行一种特定操作即可,这一特性对于可扩充系统的开发是特别有用的工具。按这种方法可开发出易于维护、可塑性好的系统。例如,如果希望加一个对象到类中,这种维护只涉及到新对象,而不涉及给它发送消息的对象。.34面向对象程序设计的语言支持对象的概念(包括对象所有的特性,如封装等)要求对象属于类提供继承机制.35JAVA语言

C++,Dephi,Perl,ObjectC等面向对象的程序设计语言实际上是一种混合型语言,是过程式语言加面向对象的扩展。支持对象的使用,但同时也支持过程式编程。编程者可能有意无意使用一些过程式编程的特征。JAVA是纯面向对象的编程语言。有助于理解面向对象的概念。.36何谓JAVASun公司“JAVA白皮书”中对JAVA的定义:Java,Asimple,object-oriented,distributed,interpreted,robust,secure,architecture-neutral,portable,high-performance,multi-threaded,anddynamiclanguage.

即,Java是一种简单、面向对象、分布式、解释型、健壮、安全、体系结构中立、可移植、高性能、多线程和动态的语言。.37Oak—JAVA原型的问世1991年,由Sun公司的PatrickNawghton,JameGosling以及MikeSheridan等人组成的开发小组,开始了代号为“Green”的项目的研制。Green项目的目标是要研制一种开发家用电器的逻辑控制系统,以实现对家用电器的集成控制。在考虑这个产品时,Gosling决定自行开发一种新的语言,并把该语言命名为“Oak”。但是,这个技术上非常成功的产品,当时并未获得商业上的成功。

.38与WWW的结合由于Internet的迅猛发展,WWW以极快的速度风靡全球。Green项目小组发现他们的新型编程语言Oak比较适合于Internet程序的编写,于是他们结合WWW的需要,对Oak进行改进和完善,并获得了极大的成功。1995年1月,Oak被更名为Java。这个名字的产生,既不是根据语言本身的特色来命名,也不是由几个英文单词的首字母拼成,更不是由人名或典故而来,而是来自于印度尼西亚有一个盛产咖啡的岛屿,中文名叫爪哇,意为世人端上一杯热咖啡。许多程序设计师从所钟爱的热腾腾的香浓咖啡中得到的灵感,因而热腾腾的香浓咖啡也就成为Java语言的标志。.39InternetPlay—改变JAVA命运的策略Sun公司创始人之一的BillJoy改变了JAVA的命运.他认为Internet加上当时正越来越受人欢迎的WWW肯定可以挽救技术上本来就很成功的JAVA语言.这种挽救不仅仅是技术上的结合,它还有另一层含义,就是“InternetPlay”----一种依靠让用户免费使用来占领市场份额的策略.于是,他力排众议,促成JAVA在Internet上免费发布..40JAVA的广泛应用1995年5月23日Java正式公布,以后人们对Java的兴趣和重视证明了这项技术将是主宰网络计算的未来:1995年一些著名的公司都纷纷购买语言使用权,如:IBM,Microsoft,Netscape,Novell,Apple,DEC,SGI等;1996年Java应用软件纷纷问世,赢得软件工业界的广泛支持。1997年Java技术用于网络计算,从界业的事实标准走向法律标准。.41JAVA语言的特色1.简单性语言的设计者尽量把语言的构造规模变小,通过提供最基本的方法来完成指定的任务,使用者只需要理解一些基本概念,就可以编出合适的应用程序。Java取消了许多语言中十分繁琐和难以理解的内容,例如C++的指针、运算符重载、类的多继承等,并且通过实现自动垃圾收集,大大减化了程序设计者的内存管理工作。Java的外观上让大多数程序员感到很熟悉,便于学习。同时Java的编译器也很小,便于在各种机型上实现。.42JAVA语言的特色2.面向对象面向对象是Java最重要的特性。它不支持类似C语言那样的面向过程的程序设计技术。语言的任何方面都是基于消息或基于对象的;所有数据类型,无论简单还是复杂,均为对象类。.43JAVA语言的特色3.分布性分布式包括数据分布和操作分布。数据分布是指数据可以分散存放于网络上的不同主机,操作分布则指把计算分散由不同主机处理。JAVA支持WWW客户机/服务器计算模式,因此它可以支持这两种分布性。利用Java来开发分布式的网络程序是Java的一个主要应用之一。.44JAVA语言的特色4.健壮性和安全性Java采取了3个措施:不支持指针类型,一切对内存的访问都必须通过对象的实例来实现。这样能够防止他人使用欺骗手段访问对象的私有成员,也能够避免指针操作中容易产生的错误。提供数组下标的检查机制,从而使黑客们无法构造出类似C所支持的那种指针。提供了自动内存管理机制,即自动的内存垃圾搜集程序。此外,Java有多个阶层的互锁保护措施,能有效地防止病毒侵入和蓄意的破坏行为。.45JAVA语言的特色5.体系结构中立

Java编译器能够产生一种与计算机体系结构无关的字节指令(bytecode),只要安装了Java虚拟机,Java就可以在相应的处理机上执行。.46JAVA语言的特色6.可移植性Java具有与平台无关的特性。不仅开发的源代码可以移植,甚至经过编译后形成的二进制代码也同样可以移植。任何一台机器,只要配备了JAVA解释器,就可以运行JAVA二进制代码。JAVA采用的是国际标准(IEEE)的数据类型。JAVA的数据类型在任何机器上都是一致的,不支持特定于具体硬件的数据类型。.47JAVA语言的特色7.解释型语言

Java解释能直接在任何机器上执行Java字节码,字节码本身带有许多编译信息,使得连接过程更加简单。.48JAVA语言的特色8.高效性JAVA提供了对多线程的支持。首先,它的环境本身是多线程的,它可以利用系统的空闲时间来执行诸如必要的垃圾清楚和一般性的系统维护等操作。其次,它还提供多线程的语言级支持,使的程序员能方便地写出多线程应用程序,提高程序的执行效率。Java的字节码能够迅速地转换成机器码,从而可以充分地利用硬件平台资源,得到较高的整体性能。.49JAVA语言的特色9.多线程机制

Java具有多线程机制,这使得应用程序能够并行地执行。它的同步机制也保证了对共享数据的共享操作,而且线程具有优先级的机制,有助于分别使用不同线程完成特定行为,也提高了交互的实时响应能力。.50JAVA语言的特色10.动态性Java具有“滞后联编”机制。JAVA语言的所有类是在运行过程中动态装载的。因此,可以在分布式环境中动态地维护应用程序及其类库之间的一致性。这样,即使类库升级后,相应的应用程序也不必重新编译,也一样利用升级后类库的新增功能。.51JAVA语言的特色.52JAVA语言的特色.53建立JAVA开发环境(1)下载JAVA开发工具集JDK

网址:

/downloads/index.html.7建立JAVA开发环境(2)

温馨提示

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

评论

0/150

提交评论