类与面向对象编程.ppt
《类与面向对象编程.ppt》由会员分享,可在线阅读,更多相关《类与面向对象编程.ppt(78页珍藏版)》请在三一办公上搜索。
1、第四章 类与面向对象编程,面向对象编程基础类的编程实现对象的定义与使用重载访问控制符其他修饰符,目标:面向对象编程思想学习重点:类、对象、构造方法、重载,4.1 面向对象编程基础,4.1.1 面向对象编程的基本概念 面向对象编程与传统的面向过程编程的区别 面向过程编程:按照计算机的问题处理逻辑来描述和 处理现实世界中的具体问题,采用结构化程序设 计和编程方法,将复杂任务逐步分解为多个子任 务,用一组函数实现任务求解。(动宾结构)面向对象编程:程序的设计和编写力求符合人们的思 维方式,让计算机处理模拟人们对现实世界的问 题求解方法,使现实世界中的事务与面向对象程 序中的类和对象相对应。(主谓结构
2、),4.1.1 面向对象编程的基本概念,1、对象(Object):两个层次,一一对应-客观存在。现实生活中的对象:客观世界中的实体(属性和行为);程序中的对象:变量和相关方法的集合(数据和方法);即类是对象的抽象,而对象则是类的实例化(具体化),实体对象(有共同特征),描述,映射,抽象,抽象数据类型,程序对象,类,4.1.1 面向对象编程的基本概念,2、类(Class)-对应现实世界的类别将具有共性的一类对象,抽象为“类”-概念上的意义。是一种数据类型,在Java中是一种复合/引用数据类型。类是创建某一类对象的模板,属于类的某个对象为类的一个实例,使用对象前需要先定义它所属的类。类中定义一类对
3、象共有的变量和方法。类的定义可实现代码的复用。我们不用去描述每一个对象(如某辆汽车),而是通过创建类(如汽车类)的一个实例来创建类的一个对象,这大大减化了软件的设计。,4.1.1 面向对象编程的基本概念,3、成员与方法 抽象为一个类的不同对象具有许多相同的特点,这些特点基本上可以分为两类:一是描述对象静态状态的,这就是对象的属性/状态,在程序设计中,称之为变量(Variable)/成员;另一个是描述对象的动作和行为,这就是对象的方法(Method),方法决定了该类中的数据如何使用。例:“汽车”的属性:颜色、重量、功率、速度等;方法:前进、后退、加速、减速等。,汽车类示例,class Car i
4、nt color_number;int weight;void brake();void speedUp();void slowDown();,4.1.2 面向对象编程的优点,与面向过程编程相比较,面向对象编程具有如下优点:提高了程序的可维护性(全局变量-不共享数据)可重用性高-继承(提高效率,降低成本)保护数据-封装类比:组装电脑,4.1.3 对象的抽象,抽象是一种思维形式,就是把事物共同点抽取出来,以统一的方式进行概要描述的一种过程。,4.1.3 对象的抽象,面向对象的编程中,系统由多个包含不同属性和方法的对象组成,每个对象实现部分功能。(如上页交通工具)什么是抽象:用面向对象的方法解决现
5、实世界的问题时去掉物体中与问题不相关的部分,形成所需要类的过程,称为抽象。采用数据抽象方法-构建程序的类,4.1.4 封装,什么是封装:封装是将数据和对数据的操作封装在一个抽象的数据类型中,数据被保护在抽象数据类型的内部,其他对象只能通过接口与数据进行交互。,私有数据,方法,方法,数据,对象A,对象B,公有数据,接口,4.1.4 封装,在程序中,用类将数据和方法封装在类体中。模块之间通过接口进行交互。封装技术的优点:(1)降低问题的复杂度;(2)提高了类或模块的可重用性;(3)保护数据的完整性和安全性。类比:计算机的主机,4.2 类的编程实现,为什么使用类 采用基本数据类型表示现实世界中的概念
6、存在一些局限性。例如:采用int型数据表示一个日期概念,需要使用3个变量:int day,month,year;如果要表示2个人的生日,就要使用6个变量。而使用类就可以避免这种情况,因为类中不但有变量,还有与之相关的操作所定义的方法,将变量和方法放在一个类中,外部对类成员的访问都通过方法进行,从而隐藏成员变量,保护类成员不被非法修改。,类定义,语法结构:修饰符 class 类名 extends 父类名 implements 接口名/类头 类成员声明及初始化;类方法声明及方法体;修饰符:说明类的性质,包括访问控制符(空或public)和类型说明符(abstract抽象、final最终)。类名:用
7、户自定,约定每个单词的首字母大写。extends 父类名:实现继承/派生implements 接口名:多重继承,类体,二者不能同时修饰一个类,类定义,类声明只是创建一个模板(或类型描述),并不会创建一个实际的对象,只有用new方法创建一个该类的实例对象时,才具有“物理”的真实性。例 BoxDemo.java的源程序,4.2.2 域/成员变量的定义,1、什么是域 域:类体中数据部分体现为成员变量的定义,也称为域或 静态属性。域体现了类的状态,状态的改变由类体中 的方法实现。注:域必须在类体中直接定义,不能包含在方法中定义。2、域定义的语法 修饰符 变量类型 变量名=变量初始值/简单变量 修饰符
8、类名 对象名=new 类名(实际参数列表)/对象,4.2.2 域/成员变量的定义,3、说明修饰符:包括访问控制符(空、public、private、protected)、静态static、常量final、多线程中备份volatile、过渡(暂时)transient修饰符。修饰符为可选项,也可有两个以上的修饰符;若使用其他类的对象作为当前类的成员时,须保证其他类在当前类中是可见的,即它可以被当前类所引用。变量类型,可以是基本数据类型,也可以是复合数据类型。,4.2.2 域/成员变量的定义,成员变量与局部变量 成员变量:类体中定义的变量,在整个类中都可 以使用;局部变量:在方法体中定义的变量和方法
9、的参 数,在方法中有效。,例4-1 Person.java的源代码,class Person String name;/域的定义 int sex;private double salary;int age;Box mybox;,1、什么是方法方法,也叫成员函数,是类的动态属性,表示类具有的功能和行为,用来改变对象的状态。其他对象通过调用对象的方法获得该对象的服务。方法只能在类的内部进行定义。按照习惯方法的定义一般在域之后。方法决定该类中的数据如何使用。2、方法定义的语法:修饰符 返回值类型 方法名(参数列表)/方法头 局部变量声明;语句序列;/方法体,4.2.3 方法的定义,4.2.3 方法的
10、定义,3、说明修饰符:包含访问控制符(空、public、private、protected)、静态static、抽象abstract、最终final、同步synchronized;返回值的类型任意,无返回值用void,有则在方法体中使用return语句;参数可有(指明类型和名称)可无,其类型任意,必须用(),多个用“,”分开;方法的作用:围绕类的成员进行各种操作;与其他的类或对象进行数据交流、消息传递等操作。,例4-2 Person.java的源代码,class Person String name;/域的定义 int sex;private double salary;int age;Str
11、ing getName()return name;void setName(String s)neme=s;double getIncome()return salary;void setIncome(double d)salary=d;,在Java中对方法进行定义时,根据方法的功能需求,要对返回值类型、参数表和方法体进行具体实现。,4.2.3 方法的定义,4、方法的返回值 Java中定义方法必须说明返回值的类型:没有返回值,那么在方法名前必须加void;有返回值,方法本身也可当作一个值或表达式,可以将它赋值给一个同类型的变量,方法中有return语句。注:return语句后面的表达式为返回值
12、,且return语句 必须为方法的最后一条可执行语句。,例4-3 ReturnType.java的源代码,public class ReturnType int i,j;int mx()i+;j=i+;/return(j*i);(”i=”+i+”,j=”+j);return(j*i);/return 必须为最后一句可执行语句 void mp()i=j=6;(”i=”+i+”,j=”+j);public static void main(String args)int x;ReturnType r=new ReturnType();r.mp();x=r.mx();System.out.print
13、ln(”x=”+x);,4.2.3 方法的定义,5、方法的参数-从外部传递信息编写方法时,需要确定参数的数量和类型,多个参数用“,”分开,在方法头定义中说明。例 double computeArea(double x,double y)double s;s=x*y;return s;,4.2.3 方法的定义,若方法的参数名与类中成员变量名相同,则参数名将在方法体内隐藏同名的成员变量。若在方法中想使用与方法变量同名的成员变量,可使用关键字this(指当前的对象)实现,this.同名的变量名。复习-形式参数与实际参数,值传递与地址传递。,主调方法实际参数,被调方法形式参数,a=1b4=2,x=1c
14、4=2,调用后给形参分配空间,实参、形参不同空间。调用结束形参释放空间,实参之不变-值传递,将首地址传递给形参,共用一个空间,实参值变-地址传递,例4-4 Rectangle.java,public class Rectangle double x=2;double y=3;double computeArea(doublex,double y)double s;s=x*y;/此处的x,y是类的域吗?/s=this.x*this.y;return s;public static void main(String args)Rectangle r=new Rectangle();System.o
15、ut.pringtln(“The area is”+puteArea(10,10);,例4-4 Rectangle.java的运行结果,4.2.3 方法的定义,6、方法体中的变量 方法体中对数据变量进行处理,这些变量可以是 成员变量 方法调用传递的参数值 方法内定义的局部变量局部变量:在方法体中定义的变量,只能在定义它的方法内部使用,使用前必须进行初始化。(无构造方法)成员变量:可以被类中的所有方法访问。注:二者的作用域不同。,例4-5 LocalVariable.java源程序,public class LocalVariable int i=2;/非静态域 void mv()int x=7
16、,y=8;int s;/局部变量的作用域 s=x*y;System.out.println(”x=”+x+”,y”+y+”,s=”+s);System.out.println(”i=”+i);public static void main(String args)LocalVariable r=new LocalVariable();r.mv();System.out.pringtln(“The variable i=”+r.i);/System.out.pringtln(“The variable x=”+x);,静态方法内只能直接调用静态域。非静态域属于对象,只有实例化对象后,才分配空间,
17、所以在静态方法内必须通过对象来调用非静态变量。,LocalVariable.java的运行结果,例4-6 Scope1.java,public class Scope1int i=1;/非静态成员变量void func()/非静态成员方法 System.out.println(output i member in class in func=+i);int i=2;System.out.println(i in func=+i);public static void main(String args)int i=3;System.out.println(i in main=+i);Scope1
18、 s1=new Scope1();Scope1 s2=new Scope1();System.out.println(output i member of class in main=+s1.i);s1.func();s2.i=4;System.out.println(output i member of class in main again=+s2.i);s2.func();/System.out.println(i in main=+i);,注:s2.i=4;已经改变了i的值,i只有在实例化对象中才分配内存空间。,4.2.3 方法的定义,当方法中局部变量/参数与类的成员变量同名时,方法内
19、使用的是局部变量/参数,即局部变量/参数将隐藏同名的全局/成员变量,如果想使用成员变量,使用this。类比:图书馆的书(成员变量)和自己的书(局部变 量)。,例4-7 EqualVarible.java的源程序,public class EqualVarible int i=2;void mv()int i=6;System.out.println(i=+i);/System.out.println(this.i=+this.i);public static void main(String args)EqualVarible r=new EqualVarible();r.mv();,4.2.
20、4 main()方法,main()方法是Java Application程序特有的方法,表示Java程序的入口。语法:public static void main(String args)方法体 其中局部变量使用前必须显示赋值,否则出错。Java Application程序中有且只有一个类包含main()方法。在运行程序时,输入的类名必须与main()方法所在的类名相同。main()是Java中唯一能直接与用户交换信息的方法,其他方法通过所在类才能够被访问。命令行参数:main()方法可以有零个或多个参数,参数是字符串类型,依次放入args数组的各个元素中,供方法使用。,命令行参数,有时你想
21、在运行程序时将信息传递到一个程序中。这通过将命令行参数(command-line arguments)传递给main()来实现。命令行参数是程序执行时在命令行中紧跟在程序名后的信息。运行时java CommHandle very good在Java 程序中访问命令行参数是相当容易的它们作为字符串存储在传递给main()的String 数组中。例如,下面的程序显示了调用的命令行参数:,命令行参数,命令行参数程序举例,class CommandLine public static void main(String args)for(int i=0;i args.length;i+)System.o
22、ut.println(“args+i+:+argsi);尝试执行这个程序,命令如下所示:java Commandline this is a test 100-1/命令行参数执行后,你会看到如下输出:注意:所有的命令行参数都是以字符串的形式传递的。,args0:this args1:is args2:a args3:test args4:100 args5:-1,4.2.4 main()方法,main()方法与C/C+中的main()函数区别:Java中的main()方法必须包含在类定义中,C/C+中不是;C/C+中将main()函数所在的程序文件名作为执行的第一个命令行参数,Java不是。,
23、例4-8 CommHandle.java源程序,class CommHandle public static void main(String args)int i;if(args.length0)System.out.println(the number of arguments is+args.length);for(i=0;iargs.length;i+)System.out.println(args+i+=+argsi);else System.out.println(no arguments!);,4.3 对象的定义与使用,创建对象使用对象释放对象/对象的消失垃圾回收机制,Java语
24、言中,使用对象“三步曲”:,类和对象之间的区别:类创建一种新的数据类型,该种类型能被用来创建对象。也就是,类创建了一个逻辑的框架,该框架定义了它的成员之间的关系。当你声明类的对象时,你正在创造该类的实例。因此,类是一个逻辑构造,对象有物理的真实性(也就是对象占用内存空间)。,4.3.1 对象的创建,对象的创建需要两个步骤:声明对象与实例化对象。格式为:类名 对象名;/声明对象,创建引用对象名=new 类名(参数列表);/实例化,分配内存,初始化如:Mankind somePerson;somePerson=new Mankind();类名 对象名=new 类名(参数列表);/可将声明和实例化共
25、同进行如:Mankind somePerson=new Mankind();以上两种格式等价。注:对象名首字母要小写。,构造方法,somePerson,i,func(),null,4.3.1 对象的创建,对象创建的过程:为对象开辟空间,并对对象的成员变量进行缺省的初始化;(局部变量必须自行初始化)对成员变量进行指定的初始化;调用相应的构造方法。new作用:为对象向系统申请内存;调用类的构造方法,为对象进行初始化。,4.3.2 构造方法,1、构造方法:是类的一种特殊的方法,其作用是在创建 类对象同时,初始化类的实例对象(成员变量)。2、定义构造方法,可在类中显示定义,否则系统调用默 认的构造方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程
链接地址:https://www.31ppt.com/p-6329505.html