IBM培训--面向对象设计原理概述

上传人:无*** 文档编号:242494078 上传时间:2024-08-25 格式:PPTX 页数:63 大小:1.02MB
返回 下载 相关 举报
IBM培训--面向对象设计原理概述_第1页
第1页 / 共63页
IBM培训--面向对象设计原理概述_第2页
第2页 / 共63页
IBM培训--面向对象设计原理概述_第3页
第3页 / 共63页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,IBM HZ-ETP, 200,9,IBM Corporation,*,Template Documentation,*,面向对象设计思想,为什么要使用面向对象,彭鹏,IBM Learning & Knowledge,2024/8/25,Agenda,函数,类,对象,构造函数,2024/8/25,2,Template Documentation,函数(子程序)的概念与作用。,定义一个函数的格式,编写打印三个矩形的程序(用流水帐的方式与用函数的方式进行对比分析)。,返回值类型 函数名(参数类型 形式参数,1,,参数类型 形式参数,2,,,.,),程序代码,return,返回值;,其中:,形式参数:,在方法被调用时用于接收外部传入的数据的变量。,参数类型,:就是该形式参数的数据类型。,返回值:,方法在执行完毕后返还给调用它的程序的数据。,返回值类型:,函数要返回的结果的数据类型。,实参:,调用函数时实际传给函数形式参数的数据。,如何理解函数返回值类型为,void,的情况,函数(方法),2024/8/25,3,Template Documentation,函数调用的格式,在函数中使用,return,提前返回,函数调用的过程分析,函数的调用,2024/8/25,4,Template Documentation,函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。 如:,public class Test,public static void main(String args),int isum;,double fsum;,isum=add(3,5);,isum=add(3,5,6);,fsum=add(3.2,6.5);,public static int add(int x,int y) ,reutrn x+y;,public static int add(int x,int y,int z),return x+y+z;,public static double add(double x,double y) ,return x+y;,函数的重载,2024/8/25,5,Template Documentation,Practice 1,编写一个类,ETPTest2_1,,使他具有一个方法为:,public int getArea(int i, int j),并返回,i * j,的值。,再从外部调用这个方法,传入相应,并打印出结果值,2024/8/25,6,Template Documentation,Practice 2,求下面代码输出结果,public,class,ETPTest2_2 ,private,void,change(,int,x) ,x = 3;,System.,out,.println(x);,public,static,void,main(String args) ,int,x = 5;,ETPTest2_2 test2_2 =,new,ETPTest2_2();,test2_2.change(x);,System.,out,.println(x);,2024/8/25,7,Template Documentation,Practice 3,求下面代码输入结果,public,class,Main ,public,void,change(Obj obj) ,obj.,x,= 3;,public,static,void,main(String args) ,Main main =,new,Main();,Obj obj =,new,Obj();,System.,out,.println(obj.,x,);,main.change(obj);,System.,out,.println(obj.,x,);,class,Obj ,int,x,= 5;,2024/8/25,8,Template Documentation,Practice 4,private float getVar()return x;,以下哪些可以重载上面这条语句,A.float getVar(),B.public float getVar(),C.public double getVar(),D.protected float getVar(),E.public float getVar(float f),2024/8/25,9,Template Documentation,函数的参数传递,基本数据类型的参数传递,2024/8/25,10,Template Documentation,函数的参数传递,引用数据类型的参数传递,2024/8/25,11,Template Documentation,static,静态变量,当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过,new,关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。,编写使用静态变量统计一个类产生的实例对象的个数的程序,2024/8/25,12,Template Documentation,static,静态方法,在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。,静态方法不能以任何方式引用,this,和,super,关键字。与上面的道理一样,因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时,,this,所引用的对象根本就没有产生。,main(),方法是静态的,因此,JVM,在执行,main,方法时不创建,main,方法所在的类的实例对象,因而在,main(),方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,这种情况,我们在以后的例子中会多次碰到。,2024/8/25,13,Template Documentation,静态代码块,一个类中可以使用不包含在任何方法体中的静态代码块,(static block ),,当类被载入时,静态代码块被执行,且只被执行一次,静态块经常用来进行类属性的初始化。,类中的静态代码块被自动执行,尽管我们产生了类的多个实例对象,但其中的静态代码块只被执行了一次。当一个程序中用到了其他的类,类是在第一次被使用的时候才被装载,而不是在程序启动时就装载程序中所有可能要用到的类。,2024/8/25,14,Template Documentation,Practice 5,下面这个类声明了静态变量,并且使用了,静态代码块初始化变量,public,class,StaticClass ,private,static,int,i,;,static,i,= 3;,public,static,void,main(String args) ,System.,out,.print(StaticClass.,i,);,请创建一个类,使用静态代码块初始化并打印出来看是否生效,2024/8/25,15,Template Documentation,下一章节,对象和类,2024/8/25,16,Template Documentation,JAVA,中类的声明,类说明语法:, 类修饰符,class,类名,extends,超类名 ,implements,接口名 ,成员变量定义;,方法定义;,类体,2024/8/25,17,Template Documentation,JAVA,中类的声明(续),类修饰符(,Modifier):,public,:,允许其他类(没有限制)访问本类,一个源文件仅可以有一个,public,类,abstract,:,没有实例的抽象概念类,final,:,不能再被扩展,不包含子类的类;易于安全性的实现,或用于创建固定功能的类,缺省:可被当前包中的其他类访问,父类继承声明:,extends,父类名,实现接口(,interface):,implements,接口名,2024/8/25,18,Template Documentation,JAVA,中类的声明(续),例:,public abstract class shape,class rectangle extends shape,final class roundrect extends rectangle.,? final,可以与,abstract,一起使用吗?,2024/8/25,19,Template Documentation,类的成员变量的声明,声明成员变量,member,的语法,修饰符 数据类型 变量名;,引用:对象名.变量,修饰符,访问控制符,public:,可被所有其他类引用,private:,仅可被该类自身引用和修改,不能被其他任何类(包括子类)引用,2024/8/25,20,Template Documentation,成员变量的声明(续),protected:,该类自身、子类、同一包中的其他类,缺省:本包中的类,static:,类成员变量,对所有的实例一致,引用是前缀可使用类名或对象名,final:,数值不变常量,定义同时应对其进行初始化,2024/8/25,21,Template Documentation,成员变量的声明(续),例:,class shape,private int x;,private int y;,static final float MaxArea=100.0f;,.,2024/8/25,22,Template Documentation,方法的声明,定义对类内成员变量(数据)的操作,方法的声明语法:,修饰符 返回类型 方法名(参数列表),throws,例外名 ,方法体;,谁可以调用方法、接受哪些参数、如何返回信息,2024/8/25,23,Template Documentation,方法的声明(续),修饰符,(,Modifier):,访问控制符:,public、private、protected,static:,静态方法,又称,类方法,使用类名或对象名作为前缀,建议使用类名,在方法体中只能使用,static变量和static方法,abstract:,只有接口没有语句,,要在子类中通过重新定义(override)来实现,final:,不能被重新定义(,override,),2024/8/25,24,Template Documentation,方法的声明(续),返回类型:,void、return,参数列表:值传递,throws:,通告本方法中会产生的例外(异常),类型,提醒调用者要对相应的可能例外进行处理。,当执行此方法并发生了例外时,程序会转入调用者编制的例外处理程序段。,2024/8/25,25,Template Documentation,方法的声明(续),例:,class shape,private int x;,static float MaxArea=100.0f;,public void setx(int newx)x=newx;,public static void setMA(float newMA),MaxArea=newMA;,public final getx( )return x,2024/8/25,26,Template Documentation,下一章节,对象,2024/8/25,27,Template Documentation,对象的产生,Person p1 = new Person();,执行完后的内存状态,2024/8/25,28,Template Documentation,对象的产生,当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上面的,Person,及前面讲过的数组。,2024/8/25,29,Template Documentation,对象的使用,创建新的对象之后,我们就可以使用“ 对象名,.,对象成员 ”的格式,来访问对象的成员(包括属性和方法),class TestPerson,public static void main(String args),Person p1 = new Person();,Person p2 =new Person();,p1.age = -30;,p1.shout();,p2.shout();,程序运行的内存布局如下图,2024/8/25,30,Template Documentation,对象的生命周期,与基本类型的,生命周期一样,2024/8/25,31,Template Documentation,对象的比较,“,=”,运算符与,equals(),方法的区别,怎样比较两个数组对象的内容是否相等,2024/8/25,32,Template Documentation,Practice 6,比较两个数组是否相等,1.,声明两个数组,并使他们各个元素相同,2.,调用,Arrays.equals(a1, a2),方法,3.,打印出结果值,2024/8/25,33,Template Documentation,实现类的封装性,如果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,就象一个人的身高,不能被外部随意修改,只能通过各种摄取营养的方法去修改这个属性。,在定义一个类的成员(包括变量和方法)时,使用,private,关键字说明这个成员的访问权限,这个成员成了类的私有成员,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用。,2024/8/25,34,Template Documentation,实现类的封装性,为了实现良好的封装性,我们通常将类的成员变量声明为,private,,再通过,public,的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是,getXxx(),(,Xxx,表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是,setXxx(),用来对这个成员变量赋值。,一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。用总统指挥一支军队的例子来说明这种效果。,2024/8/25,35,Template Documentation,类的封装所带来的优点,隐藏类的实现细节;,让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;,便于修改,增强代码的可维护性;,2024/8/25,36,Template Documentation,下一章节,构造函数,2024/8/25,37,Template Documentation,构造函数的定义与作用,构造方法的特征,它具有与类相同的名称;,它不含返回值;,它不能在方法中用,return,语句返回一个值,注意:在构造方法里不含返回值的概念是不同于“,void”,的,在定义构造方法时加了“,void”,,结果这个方法就不再被自动调用了。,构造方法的作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。这就好像我们规定每个“人”一出生就必须先洗澡,我们就可以在“人”的构造方法中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们要“洗澡”了。,2024/8/25,38,Template Documentation,构造方法的重载,和一般的方法重载一样,重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用,new,关键字产生对象时,该调用哪个构造方法了。产生对象的格式是:,new,类名,(,参数列表,),;,重载构造方法可以完成不同初始化的操作, 如:,p3=new Person(“Tom”,18);,语句,会做这样几件事:创建指定类的新实例对象,在堆内存中为实例对象分配内存空间,并调用指定类的构造方法,最后将实例对象的首地址赋值给引用变量,p3,。,2024/8/25,39,Template Documentation,构造方法的一些细节,在,java,每个类里都至少有一个构造方法,如果程序员没有在一个类里定义构造方法,系统会自动为这个类产生一个默认的构造方法,这个默认构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。,由于系统提供的默认构造方法往往不能满足编程者的需求,我们可以自己定义类的构造方法,来满足我们的需要,一旦编程者为该类定义了构造方法,系统就不再提供默认的构造方法了。,声明构造方法,如无特殊需要,应使用,public,关键字,在我们前面例子中,可以使用,private,访问修饰符吗?,2024/8/25,40,Template Documentation,this,是什么?,如果,func2,方法被调用 ,一定是事先已经有了一个存在的对象,,func2,被作为那个对象的方法被使用。,在,func2,内部能引用别的对象 ,同样也能引用,func2,所属的那个对象。,在,func2,中,自己所属的那个对象的引用名称是什么呢?,this,关键字在,java,程序里的作用和它的词义很接近,它在函数内部就是这个函数所属的对象的引用变量。,2024/8/25,41,Template Documentation,this,引用句柄的存放位置,每个成员方法内部,都有一个,this,引用变量,指向调用这个方法的对象,类中的成员方法与,this,之间的关系如图,2024/8/25,42,Template Documentation,this,引用句柄的应用,一个类中的成员方法可以直接调用同类中的其他成员,其实我们在一个方法内部使用“,this.,其他成员”的引用方式和直接使用“其他成员”的效果是一样的,那,this,还有多大的作用呢?在有些情况下,我们还是非得用,this,关键字不可的 :,让类的成员变量名和对其进行赋值的成员方法的形参变量同名是必要的,这样的代码谁看了都能明白这两个变量是彼此相关的,老手看到函数的定义,就能揣摩出函数中的代码,大大节省了别人和自己日后阅读程序的时间。,假设我们有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接收一个代表其所在容器的参数。,构造方法是在产生对象时被,java,系统自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用,this(,参数列表,),的形式,根据其中的参数列表,选择相应的构造方法。,2024/8/25,43,Template Documentation,Practice 7,创建一个类,Cla,给出三个成员变量,int a, b, c,使用两个构造函数,public Cla(),public Cla(int a, int b, int c),使用,this,句柄在构造函数中给变量赋值,在主函数中分别使用两个构造函数创建两个对象,2024/8/25,44,Template Documentation,下一章节,继承,2024/8/25,45,Template Documentation,面向对象的概念,子类,子类是作为另一个类的扩充或修正而定义的一个类。,bicycle,(super class),Mountain bikes,Racing bikes,Tandem bikes,sub class,2024/8/25,46,Template Documentation,面向对象的概念,继承,继承使得子类可以利用父类中定义的方法和变量,就像它们属于子类本身一样。,class Employee ,protected,String,name,;,public void showInfo() ,System.out.println(,name,);,class Manager extends Employee ,private,String department;,public void showInfo() ,System.out.println(,name,);,System.out.println(,“,Manager,of ” + department);,2024/8/25,47,Template Documentation,继承,继承性是面向对象程序设计语言的一个基本特征,通过继承可以实现代码的复用。继承而得到的类为子类,被继承的类为父类,父类包括,所有直接或间接,被继承的类。,Java,中不支持多重继承。通过在类的声明中加入,extends,子句来创建一个类的子类:,class SubClass extends SuperClass ,如果省略,extends,子句,则该类为,Object,的子类。,子类可以继承父类中访问权限设定为,public,、,protected,和,default,的成员变量和方法,但是不能继承访问权限为,private,的成员变量和方法。,2024/8/25,48,Template Documentation,继承的例子,2024/8/25,49,Template Documentation,调用父类构造函数,super,(x,);,调用父类构造函数时应遵循的原则:,只能在子类中调用父类的构造函数,.,调用父类构造函数时,必须使用,super,(),不要在父类构造函数前放任何子类构造函数代码。,如果子类中没有调用父类构造,会默认调用无参数的,super,(),2024/8/25,50,Template Documentation,类方法的覆盖,方法覆盖即指在子类中重新实现父类中已有的方法。,Java,运行时系统根据调用该方法的实例的类型来决定调用哪个实现。,方法覆盖时应遵循的原则:,覆盖后的方法,不能,比被覆盖的方法有,更严格,的访问,前提条件,。,2024/8/25,51,Template Documentation,面向对象的概念,覆盖,覆盖使得在子类中可以重新定义父类中已有的方法,从而是子类具有自己的行为。,class Employee ,protected,String name;,public void,showInfo,() ,System.out.println(name);,class Manager extends Employee ,private,String department;,public void,showInfo,() ,System.out.println(name);,System.out.println(“Manager of ” + department);,2024/8/25,52,Template Documentation,Practice 8,有一个父类,Car,,内有属性:,int maxSpeed,方法:,void stop();,有两个子类,BMW, QQ,继承父类,请调用父类构造方法,初始化赋值,maxSpeed,请重写,stop(),方法,要求,BMW,当,maxSpeed = 300;,打印语句“停车”,QQ,当,maxSpeed = 120;,打印语句“停车”,2024/8/25,53,Template Documentation,3,.,接口,“对实现我的类,看起来都应该是我的样子”,接口规定了一个类的基本形式,:,自变量,方法名,返回类型,.,但不规定方法的主体,.,接口的数据类型,:,都默认为,static,final,只是一种形式,不涉及细节,2024/8/25,54,Template Documentation,3.,接口定义的形式,public interface interfaceName extends SuperInterfaceList,/,常量定义和方法定义,接口(,interface,)作为特殊形式的抽象类,和类(,class,)在使用上具有类似的约束。,一个,public,接口只能定义在同名的,.java,文件中,2024/8/25,55,Template Documentation,3.,类对接口的实现,用,implements,子句来表示一个类实现某个接口。,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。,利用接口可实现多重 继承,即一个类可以实现多个接口,在,implements,子句中用逗号分隔。,接口的作用和抽象类相似,只定义原型,不直接定义方法的内容。,接口中的方法和变量都必须是,public,的。,2024/8/25,56,Template Documentation,Practice 9,有一个接口,Car,,内有属性:,int maxSpeed,方法:,void stop();,有两个子类,BMW, QQ,实现接口,请调用父类构造方法,初始化赋值,maxSpeed,请重写,stop(),方法,要求,BMW,当,maxSpeed = 300;,打印语句“停车”,QQ,当,maxSpeed = 120;,打印语句“停车”,2024/8/25,57,Template Documentation,下一章节,多态,2024/8/25,58,Template Documentation,多态,多态提供了另一个层面的接口与实现的分离,也就是说把“做什么”和“怎么做”分开来。多态性不但能改善代码的结构,提高其可读性,而且能让你创建可扩展的程序。所谓“可扩展”是指,程序不仅在项目最初的开发阶段能“成长”,而且还可以在需要添加新特性的时候成长。,2024/8/25,59,Template Documentation,Java,中的多态与重载,多态:同名的不同方法共存,重载,(,overload):,同名方法被多次重新定义,同名提高了抽象程度,降低维护工作量,定义、调用时如何区别被重载的方法,同类中的同名方法,用不同的参数列表来区别同名的不同方法,不能用返回值(可忽略)来区别,不同类中的同名方法:,冠以类名以示区别,和,override,有什么区别,2024/8/25,60,Template Documentation,Assignment 1,银行业务的程序结构,银行帐户类,BankAccount,数据:余额、利率,操作:查询余额、存款、取款,查询利率、设置利率(选做),主类,UseAccount,main(),方法,创建,BankAccount,类的对象,并完成相应操作,2024/8/25,61,Template Documentation,Assignment 2,实现以下的类,toString(),为返回所有内容。,写个测试类,TestEmployee,2024/8/25,62,Template Documentation,Assignment 3,在之前的基础上,增加红色部分的内容。,toString(),为返回所有内容。,getMonthlyPay(),为抽象方法。,SalesEmployee.getMonthlyPay(),monthlyPay = salary +,(,perfit * 20%,),Manager.getMonthlyPay(),monthlyPay = salary + bonus,写个测试类,TestEmployee,2024/8/25,63,Template Documentation,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!