免费预览已结束,剩余25页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章 java与面向对象基础,面向对象的程序设计(oop)已成为现代软件开发的必然选择。通过掌握面向对象的技术,能开发出复杂、高级的系统,这些系统是完整健全的,但又是可扩充的。oop是建立在把对象作为基本实体看待的面向对象的模型上的,这种模型可以使对象之间能相互交互作用。,有关面向对象的概念,世间万物皆对象! 对象的特征 静态特征:外观、性质等属性“变量” 动态特征:功能、行为等行为“方法” 面向对象技术以基本对象模型为单位,3.1.1 面向对象基本原理,面向对象技术,正是利用对现实世界中对象的抽象和对象之间相互关联和相互作用的描述来对现实世界进行模拟,并且使其映射到目标系统中。所以面向对象的特点主要概括为抽象性、继承性、封装性和多态性。 抽象性指对现实世界中某一类实体或事件进行抽象,从中提取共同信息,找出共同规律,反过来又把它们集中在一个集合中,定义为所设计目标系统中的对象。 继承性新的对象类由继承原有对象类的某些特性或全部特性而产生出来,原有对象类称为基类(或超类、父类),新的对象类称为派生类(或子类),派生类可以直接继承基类的共性,又允许派生类发展自己的个性。继承性简化了对新的对象类的设计。 封装性是指对象的使用者通过预先定义的接口关联到某一对象的服务和数据时,无需知道这些服务是如何实现的。即用户使用对象时无需知道对象内部的运行细节。这样,以前所开发的系统中已使用的对象能够在新系统中重新采用,减少了新系统中分析、设计和编程的工作量。 多态性是指不同类型的对象可以对相同的激励做出适当的不同相应的能力。多态性丰富了对象的内容,扩大了对象的适应性,改变了对象单一继承的关系。,面向对象与面向过程程序设计比较,(1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理。 (2)面向过程程序设计方法以功能为中心来设计功能模块,难于维护;而面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。 (3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要。,示例五子棋系统,面向过程的设计思路就是首先分析问题的步骤: 1、开始游戏, 2、黑子先走, 3、绘制画面, 4、判断输赢, 5、轮到白子, 6、绘制画面, 7、判断输赢, 8、返回步骤2, 9、输出最后结果。 把上面每个步骤用分别的函数来实现,问题就解决了。 而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为: 1、黑白双方,这两方的行为是一模一样的, 2、棋盘系统,负责绘制画面, 3、规则系统,负责判定诸如犯规、输赢等。,第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。 可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。 功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。,1.1 有关面向对象的概念,class car int color_number; int door_number; int speed; void brake() void speedup() ; void slowdown() ,抽象数据类型,1.1 有关面向对象的概念,什么是类? 类是描述对象的“基本原型”,它定义一种对象所能拥有的数据和能完成的操作,在面向对象的程序设计中,类是程序的基本单元。,程序中的对象 是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。,1.1 有关面向对象的概念,变量:即指对象的所知道的状态 方法:指对象的功能单元。 什么是消息? 软件对象通过相互间传递消息来相互作用和通信 一个消息由三部分组成: 1. 接受消息的对象 2. 要完成方法的名字 3. 方法需要的参数,在程序中操作对象是类的一个实例:即对象 创建一个对象 hello obj=new hello(); 调用方法 obj.showstring(“hello world!”),对象的创建和销毁,对象是通过类创建的,对象是类的动态实例。每个对象都有生命期。一个对象按其生命期来分析,一般有三个阶段,出生、活动、死亡。而我们在编程中要做的对应为:创建(初始化)、运行、销毁。 通常,当调用构造函数时,该函数返回一个新分配内存并初始化了的类的实例。 java构造函数是一种比较特殊的函数,它不能由用户来指定返回类型,只能返回所属类的类型;它也不能由用户来指定其它名称,只能使用与类名相同的名称。即便如此,我们仍然可以通过方法的重载(overload)来为一个类提供多个不同的构造函数。 在java中没有用于销毁和清理对象的析构函数,因为java提供了垃圾回收(garbage collection,简称gc)机制负责释放对象所占用的内存空间及相关的其它资源。,对象和对象变量,从语义上讲,对象是类的实例,类是创建对象的模板;从语言上讲,对象也是类这种数据类型的变量,对象在内存中占有空间。但是在具体使用中,对象与传统的变量,也就是java中基本类型的变量有区别。 对象是一种引用类型。对象由类创建,存储在堆中;而对象变量则是对象的引用,存储在栈中。在程序中我们通过对象变量,也就是对象的引用,来操纵对象。,引用类型的演示: myclass a,b;/声明myclass类型的变量a和b,myclass是一个java类 a = new myclass();/变量a引用了myclass类创建的对象实例 a.myvar = 24;/给对象实例的字段myvar赋值 b = a; /变量b得到的是变量a的一个引用的副本, /结果使他们都引用了同一个对象实例。 a.myvar = a.myvar+1;/改变对象字段的值 system.out.println(a.myvar); /此时显示a.myvar值为25 system.out.println(b.myvar); /此时显示b.myvar值也为25,1.1 有关面向对象的概念,什么是封装? 封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际,私有数据,方法,上是用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。,方法,数据,对象a,对象b,公有数据,1.1 有关面向对象的概念,什么是子类? 子类是作为另一个类的扩充或修正所定义的一个类.,1.1 有关面向对象的概念,什么是继承? extends关键字 继承是子类利用父类中定义的方法和变量就像它们属于子类本身一样.,class car int color_number; int door_number; int speed; push_break() ,class trash_car extends car double amount; fill_trash() ,1.1 有关面向对象的概念,什么是方法的覆盖? 在子类中重新定义父类中已有的方法。 什么是变量的隐藏? 在子类中重新定义父类中已有的变量。,class car int color_number; int door_number; int speed; push_break() speed=0; speedup() ,class trash_car extends car double amount; int color_number; fill_trash() push_break() speed=speed-10; ,1.1 有关面向对象的概念,什么是方法的重载(多态性)? 在同一个类中至少有两个方法用同一个名字,但有不同的参数。,类,void show(int int_num),void show(double double_num),void show(int int_ um, float float_um),123,1.23,123,1.23,试用一个简单的类,class car int car_number; void set_number(int car_num) car_number=car_num; void show_number() system.out.println (“my car no. is :”+car_number); ,class cardemo public static void main(string args) car democar=new car(); democar.set_number(3838); democar.show_number(); ,my car number is 3838,类的继承关系,class car int car_number; void set_number(int car_num) car_number=car_num; void show_number() system.out.println (“my car no. is :”+car_number); ,class trashcar extends car int capacity; void set_capacity(int trash_car_capacity) capacity=trash_car_capacity; void show_capacity() system.out.println(“my capacity is: ”+ capacity); ,1.7 java中的类、方法和变量,trashcar中继承了car中的两个方法,class cardemo public static void main(string args) trashcar demotrashcar=new trashcar(); demotrashcar.set_number(4949); demotrashcar.set_capacity(20); demotrashcar.show_number(); demotrashcar.show_capacity(); ,car是父类, trashcar是子类,1.7 java中的类、方法和变量,何时选择继承性? 一个很好的经验: “b是一个a吗?” 如果是则让b做a的子类.,常犯的错误a有一个b吗? 例如让汽车轮子成为汽车的子类是错误的,1.7 java中的类、方法和变量,类的严格定义及修饰字,类的修饰字 class 类名称 extends 父类名称 . ,public, abstract, final或者没有,变量修饰字 变量数据类型 变量名1,变量名2=变量初值;,方法修饰字 方法的返回值类型 方法名称(参数1,参数2, /方法的内容 ,方法和变量的定义及修饰字,public、protected、private,1.8 java名空间及访问规则,每个类都创造了有自己的名字空间,指方法和变量可以知道彼此的存在,可以使用。 package: 一组相关的类和接口的集合称为包。 public类不但可以被同一程序包中的其它类使用,别的程序包中的类也可以使用. protected:本类、本类的子类以及在本包内被访问。 private:仅允许在本类中被访问。 (缺省)类只能被本包中的其它类使用,程序包:组织一系列类和接口的命名空间。 bill.dao.userdao 使用程序包中的类要用import命令.表示路径,*表示使用包中的所有类 import java.io.fileinputstream; import java.io.*; import bill.dao.userdao;,package关键字,3.2.3 类成员的可访问性,类成员包括数据成员和函数成员,类的每个成员都有一个称为可访问性的属性,用来保护类成员。java有四种类成员的保护方式,分别为缺省的、public(公有的)、protected(保护的)、private(私有的)。 为了使程序具有良好易读的风格,建议最好在撰写类代码时用不同的可访问性来组织类成员,并将public成员作为对外公布的接口放在最前面,以便引起关注。,1.8 java名空间及访问规则,到此为止-final final在方法之前,防止该方法被覆盖. final在类之前,表示该类不能被继承 final在变量之前,定义一个常量. 在java中,把类或者方法声明为final可以提高程序执行的效率!,super 关键字,super关键字有两种用法:一种用法是子类使用super调用父类的构造方法,另一种用法是子类使用super调用被子类隐藏的成员变量和方法。,class a int x,y; a() x=100; y=200; a(int x,int y) this.x=x; this.y=y; class b extends a int z; b(int x,int y) super(x,y); z=300; b() z=800; public void f() system.out.printf(“x=%d,y=%d,z=%dn“,x,y,z); public
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 订购全套房屋合同范本
- 酒店兼职外包合同范本
- 2025年初中三年级政治上学期公民教育试卷
- 租场地三人合同协议书
- 灯箱厂家供货合同范本
- 祛斑免责签约合同范本
- 酒店保证金合同协议书
- 绿植养护工程合同范本
- 设备合同取消协议范本
- 翡翠质押抵押合同协议
- 某停车场收益预估报告(共49)
- 拍卖公司业务管理制度
- 退林还耕地合同协议
- 2025年保密知识竞赛考试题库及答案附答案(完整版)参考答案详解
- 邮政快递行业安全生产专题培训
- 行政后勤管理员专业实操复习题
- 韩国驾照笔试题库及答案
- 《房屋市政工程类有限空间作业安全》专项培训
- 【MOOC】人工智能原理-北京大学 中国大学慕课MOOC答案
- 毒麻精神药品的管理
- 高炉出铁沟浇注料施工及验收规范
评论
0/150
提交评论