抽象封装与类优秀课件.ppt
《抽象封装与类优秀课件.ppt》由会员分享,可在线阅读,更多相关《抽象封装与类优秀课件.ppt(75页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、抽象封装与类第1页,本讲稿共75页北京邮电大学北京邮电大学24.1 抽象与封装一、抽象抽象是科学研究中经常使用的一种方法,即去除掉被研究对象中与主旨无关的次要部分,或是暂时不予考虑的部分,而仅仅抽取出与研究工作有关的实质性的内容加以考察。在计算机技术的软件开发方法中所使用的抽象有两类:一类是过程抽象,另一类是数据抽象。第2页,本讲稿共75页北京邮电大学北京邮电大学3过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤。面向过程的软件开发方法采用的就是这种抽象方法。使用过程抽象有利于控制、降低整个程序的复杂度,但是这种方法本身自由度较大,难于规范化和标准化,操作起来有一定难度,在质量
2、上不易保证。数据抽象是与过程抽象不同的抽象方法,它把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。每个抽象数据类型既包含了数据,也包含了针对这些数据的授权操作,是相对于过程抽象更为严格、也更为合理的抽象方法。第3页,本讲稿共75页北京邮电大学北京邮电大学4面向对象的软件开发方法的主要特点之一,就是采用了数据抽象的方法来构建程序的类、对象和方法。面向对象软件开发过程中的面向对象的分析,就是对实际问题进行抽象,从而建立物理模型的过程。在面向对象技术中使用这种数据抽象方法,一方面可以去除掉与核心问题无关的细枝末节,使开发工作可以集中在比较关键、
3、主要的部分;另一方面,在数据抽象过程中对数据和操作的分析、辨别和定义可以帮助开发人员对整个问题有更深入、准确的认识。最后抽象形成的抽象数据类型,则是进一步设计、编程的基础和依据。第4页,本讲稿共75页北京邮电大学北京邮电大学5面向对象的软件开发方法对象计算机世界抽象数据类概念世界实体现实世界抽象抽象实例化映射计算机逻辑的实现类第5页,本讲稿共75页北京邮电大学北京邮电大学6现实生活中的实体可以将现实生活中的实体经可以将现实生活中的实体经过抽象,映射为程序中的对过抽象,映射为程序中的对象。对象在程序中是通过一象。对象在程序中是通过一种抽象数据类型来描述的,种抽象数据类型来描述的,这种抽象数据类型
4、称为类这种抽象数据类型称为类(class)。class Car String carNumber;String color;int doorNumber;void brake()void speedUp()void slowDown()第6页,本讲稿共75页北京邮电大学北京邮电大学7二、封装面向对象方法的封装特性是一个与其抽象特性密切相关的特性。具体地,封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据外面的被授权的操作,才能够与这个抽象数据类型交流和交互。属性方法公有数据私有数据方法对象A数据方法对象B第7页,本讲稿共
5、75页北京邮电大学北京邮电大学8在面向对象的程序设计中,抽象数据类型是用“类”这种面向对象工具可理解和操纵的结构来代表的,每个类里都封装了相关的数据和操作。在实际的开发过程中,类多用来构建系统内部的模块,由于封装特性把类内的数据保护得很严密,模块与模块间仅通过严格控制的界面进行交互,使它们之间耦合和交叉大大减少,从而降低了开发过程的复杂性,提高了效率和质量,减少了可能的错误,同时也保证了程序中数据的完整性和安全性。第8页,本讲稿共75页北京邮电大学北京邮电大学9面向对象技术的这种封装特性还有另一个重要意义,就是使抽象数据类型,即类或模块的可重用性大为提高。封装使得抽象数据类型对内成为一个结构完
6、整、可自我管理、自我平衡、高度集中的整体;对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的有机的单元。这样的有机单元特别有利于构建、开发大型标准化的应用软件系统,可以大幅度地提高生产效率,缩短开发周期和降低各种费用。第9页,本讲稿共75页北京邮电大学北京邮电大学10封装是一种数据隐藏技术,用户只能看到封装界面上的信息,对象内部对用户是不可见的。封装把对象的所有组成部分(包括数据和方法)组合在一起,定义了程序如何引用对象的数据;封装实际上使用方法将类的数据隐藏起来,控制用户对类的数据(域、属性)修改和访问的权限。被封装的对象之间是通过传递消息来进行联系的。一个消息由三部分组成:
7、消息的接受对象接收对象要采取的方法方法需要的参数对象象B B对象象A A 消息第10页,本讲稿共75页北京邮电大学北京邮电大学11为什么要使用类?采用简单数据类型表示现实世界中概念的局存在很大的限性。例如:采用int型数据表示一个日期概念,需要使用3个变量:int day,month,year;并且在使用中必须时刻注意三者的联系和约束关系同时在使用日期概念时要同时对三个对象进行访问使用类可以把现实问题中的对象映射为程序中的一个整体类。第11页,本讲稿共75页北京邮电大学北京邮电大学124.2 Java的类一、系统定义的类Java程序设计就是定义类的过程,但是Java程序中定义的类的数目和功能都
8、是有限的,编程时还需要用到大量的系统定义好的类,即Java类库中的类。类库是Java语言的重要组成部分。Java语言由语法规则和类库两部分组成,语法规则确定Java程序的书写规范;类库,或称为运行时库,则提供了Java程序与运行它的系统软件(Java虚拟机)之间的接口。Java类库是一组由其他开发人员或软件供应商编写好的Java程序模块,每个模块通常对应一种特定的基本功能和任务,这样当自己编写的Java程序需要完成其中某一功能的时候,就可以直接利用这些现成的类库,而不需要一切从头编写。第12页,本讲稿共75页北京邮电大学北京邮电大学13这些系统定义好的类根据实现的功能不同,可以划分成不同的集合
9、。每个集合是一个包,合称为类库。Java的类库是系统提供的已实现的标准类的集合,是Java编程的API(application program interface),它可以帮助开发者方便、快捷地开发Java程序。Java的类库大部分是由它的发明者SUN公司提供的。这些类库称为基础类库(JFC),也有少量则是由其他软件开发商以商品形式提供的。根据功能的不同,Java的类库被划分为若干个不同的包,每个包中都有若干个具有特定功能和相互关系的类和接口。下面列出了一些经常使用的包。第13页,本讲稿共75页北京邮电大学北京邮电大学141.java.lang包java.lang包是Java语言的核心类库,包
10、含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。每个Java程序运行时,系统都会自动地引入java.lang包,所以这个包的加载是缺省的。2.java.io包java.io包是Java语言的标准输入/输出类库,包含了实现Java程序与操作系统、用户界面以及其他Java程序做数据交换所使用的类,如基本输入/输出流、文件输入/输出流、过滤输入/输出流、管道输入/输出流、随机输入/输出流等。凡是需要完成与操作系统有关的较底层的输入输出操作的Java程序,都要用到java.io包。第14页,本讲稿共75页北京邮电大学北京邮电大学153.java.ut
11、il包java.util包包括了Java语言中的一些低级的实用工具,如处理时间的Date类,处理变长数组的Vector类,实现栈和杂凑表的Stack类和HashTable类等,使用它们开发者可以更方便快捷地编程。4.java.awt包java.awt包是Java语言用来构建图形用户界面(GUI)的类库,它包括了许多界面元素和资源,主要在三个方面提供界面设计支持:低级绘图操作,如Graphics类等;图形界面组件和布局管理,如Checkbox类、Container类、LayoutManager接口等;以及界面用户交互控制和事件响应,如Event类。利用java.awt包,开发人员可以很方便地编写
12、出美观、方便、标准化的应用程序界面。第15页,本讲稿共75页北京邮电大学北京邮电大学167.java.applet包Java.applet包是用来实现运行于Internet浏览器中的Java Applet的工具类库,它仅包含少量几个接口和一个非常有用的类:java.applet.Applet。包包是Java语言用来实现网络功能的类库。由于Java语言还在不停地发展和扩充,它的功能,尤其是网络功能,也在不断地扩充。目前已经实现的Java网络功能主要有:底层的网络通信,如实现套接字通信的Socket类、ServerSocket类;编写用户自己的Telnet、FTP、邮件服务等实现网上通信的类;用于
13、访问Internet上资源和进行CGI网关调用的类,如URL等。利用包中的类,开发者可以编写自己的具有网络功能的程序。第16页,本讲稿共75页北京邮电大学北京邮电大学1715.java.awt.event包java.awt.event包是对JDK 1.0版本中原有的Event类的一个扩充,它使得程序可以用不同的方式来处理不同类型的事件,并使每个图形界面的元素本身可以拥有处理它上面事件的能力。16.java.sql包java.sql包是实现JDBC(Java database connection)的类库。利用这个包可以使Java程序具有访问不同种类的数据库的功能,如Oracle,Sybase,
14、DB2,SQLServer等。只要安装了合适的驱动程序,同一个Java程序不需修改就可以存取、修改这些不同的数据库中的数据。JDBC的这种功能,再加上Java程序本身具有的平台无关性,大大拓宽了Java程序的应用范围,尤其是商业应用的适用领域。第17页,本讲稿共75页北京邮电大学北京邮电大学18使用类库中系统定义好的类有三种方式:u继承系统类,在用户程序里创建系统类的子类,例如每个Java Applet的主类都是java.applet包中的Applet类的子类;u创建系统类的对象,例如图形界面的程序中要接受用户的输入时,就可以创建一个系统类TextField类的对象来完成这个任务;u直接使用系
15、统类,例如在字符界面向系统标准输出输出字符串时使用的方法System.out.println(),就是系统类System的静态属性out的方法。第18页,本讲稿共75页北京邮电大学北京邮电大学19系统类的使用:使用系统类的前提条件是这个系统类应该是用户程序可见的类。为此用户程序需要用import语句引入它所用到的系统类或系统类所在的包。例如使用图形用户界面的程序,应该用语句:import java.awt.*;import java.awt.event.*;引入java.awt包和java.awt.event包。类库包中的程序都是字节码形式的程序,利用import语句将一个包引入到程序里,就相
16、当于在编译过程中将该包中所有系统类的字节码加入到用户的Java程序中,这样用户Java程序就可以使用这些系统类及其中的各种功能。第19页,本讲稿共75页北京邮电大学北京邮电大学20要认识到:用户程序中系统类库使用得越多、越全面、越准确,程序的质量就越高。因此,要掌握好Java语言面向对象的编程方法编写出高质量的程序,就必须对Java语言的类库有足够的了解和掌握。第20页,本讲稿共75页北京邮电大学北京邮电大学212用户程序自定义类系统定义的类,虽然实现了许多常见的功能,但是在 Java语言程序设计中,用户仍要根据编程的需要来定义一些类。类类作为复合(引用)数据类型,它封装了一类对象的域和方法。
17、创建一个类,就是创建一个新的数据类型,实例化一个类就得到一个具体的对象。第21页,本讲稿共75页北京邮电大学北京邮电大学22类定义的格式类定义的格式public abstract|final class 类名 extends 父类名 implements 接口名表 类头 域;域;方法;方法;类体第22页,本讲稿共75页北京邮电大学北京邮电大学23例 4-11:class PhoneCard2:3:long cardNumber;4:private int password;5:double balance;6:String connectNumber;7:boolean connected;8
18、:9:boolean performConnection(long cn,int pw)10:11:if(cn=cardNumber&pw=password)12:13:connected=true;14:return true;15:16:else17:18:connected=false;19:return false;20:21:22:double getBalance()23:24:if(connected)25:return balance;26:else27:return-1;28:29:void performDial()30:31:if(connected)32:balance
19、-=0.5;33:34:第23页,本讲稿共75页北京邮电大学北京邮电大学243创建对象与定义构造函数 1.创建对象Java程序定义类的最终目的是使用它,像使用系统类一样,程序也可以继承用户自定义类或创建并使用自定义类的对象。创建对象与声明基本数据类型的变量类似,首先说明新建对象所属的类名,然后说明新建对象的名字,赋值号右边的new是为新建对象开辟内存空间的算符。像声明变量需要为变量开辟内存空间保存数据一样,创建对象也需要为对象开辟内存空间保存域和方法。与变量相比,对象占用的内存空间要大得多,对象是以类为模板创建的具体实例。第24页,本讲稿共75页北京邮电大学北京邮电大学25创建对象的一般格式为
20、:类名 新建对象名 new 构造函数();创建PhoneCard类的对象可以使用如下的语句:PhoneCard myCard=new PhoneCard();一个类可以生成多个不同的对象(实例),同一个类的所有对象具有相同的性质,即其外部特性和内部特性都是相同的。一个对象的内部状态(私有属性)只能由其自身来修改,任何别的对象都不能来修改它。因此,同一类的对象虽然在内部状态的表现形式上相同,但他们可以有不同的内部状态,这些对象并不是一模一样的。第25页,本讲稿共75页北京邮电大学北京邮电大学26Car car1=new Car();Car car2=new Car();Car car3=new
21、Car();l要访问或调用一个对象的域或方法需要首先访问这个对象,然后用算符要访问或调用一个对象的域或方法需要首先访问这个对象,然后用算符“.”连接这个对象的某个域或方法。例如:连接这个对象的某个域或方法。例如:car1.color=“red”;car1.speedUp();l调用对象的方法相当于给对象发送消息,收到消息的对象通过改变自身的状调用对象的方法相当于给对象发送消息,收到消息的对象通过改变自身的状态或者向其它对象发送消息来响应消息。态或者向其它对象发送消息来响应消息。第26页,本讲稿共75页北京邮电大学北京邮电大学272.构造函数(constructor)创建对象与声明变量的另一个不
22、同之处在于,创建对象的同时将调用这个对象的构造函数完成对象的初始化工作。声明变量时可以用赋值语句为它赋初值,而一个对象可能包括若干个域,需要若干个赋值语句,把若干个赋初值的语句组合成一个方法在创建对象时一次性同时执行,这个方法就是构造函数。构造函数是与类同名的方法,创建对象的语句用 new 算符开辟了新建对象的内存空间之后,将调用构造函数初始化这个新建对象。第27页,本讲稿共75页北京邮电大学北京邮电大学28构造函数是类的一种特殊方法,它的特殊性主要体现在如下的几个方面:(1)构造函数的方法名与类名相同。(2)构造函数没有返回类型。(3)构造函数的主要作用是完成对类对象的初始化工作。(4)构造
23、函数一般不能由编程人员显式直接调用。(5)在创建一个类的新对象的同时,系统会自动调用该类的构造函数为新对象初始化。注意:对象的域在对象初始化时自动初始化,没有初值的域都取为缺省值;而对象方法中的变量必须有初值,否则编译时出错。第28页,本讲稿共75页北京邮电大学北京邮电大学29例如,可以为PhoneCard类定义如下的构造函数,初始化它的几个域。PhoneCard(long cn,int pw,double b,String s)cardNumber=cn;password=pw;if(b 0)balance=b;elseSystem.exit(1);connectNumber=s;conne
24、cted=false;第29页,本讲稿共75页北京邮电大学北京邮电大学30定义了构造函数之后,就可以用如下的语句创建并初始化PhoneCard对象:PhoneCard newCard =new PhoneCard(12345678,1234,50.0,”300”);这个对象的卡号是12345678,密码是1234,金额是50.0,电话卡的接入号码是字符串“300”。可见构造函数定义了几个形式参数,创建对象的语句在调用构造函数时就应该提供几个类型顺序一致的实际参数,指明新建对象各域的初始值。利用这种机制就可以创建不同初始特性的同类对象。第30页,本讲稿共75页北京邮电大学北京邮电大学31在一个类
25、中可以定义多个不同形式参数的构造函数,这样可通过调用不同的构造函数来创建对象;如果用户自定义类未定义类的构造函数,系统将为这个类缺省定义一个空构造函数,没有形式参数,也没有任何具体语句,不完成任何操作。构造函数的特点有:构造函数的特点有:(1)构造函数和类具有相同的名字。)构造函数和类具有相同的名字。(2)一个类可以有多个构造函数。)一个类可以有多个构造函数。(3)构造函数可以有)构造函数可以有0个、个、1个或多个参数。个或多个参数。(4)构造函数没有返回值。)构造函数没有返回值。(5)构造函数总是和)构造函数总是和new运算符一起被调用运算符一起被调用例42是使用PhoneCard类的一个完
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 抽象 封装 优秀 课件
限制150内