您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 4-面向对象程序设计1解析
面向对象程序设计1教材4~5章抽象与封装类定义重载继承多态抽象所有编程语言都提供“抽象”功能。你所能解决问题的复杂程度取决于抽象的种类和质量。汇编语言对于计算机(机器语言)是一步很小的抽象。过程化语言(高级语言)对于汇编语言的抽象迈了一大步。但你所考虑的仍然是机器的结构而非问题的结构。面向对象方法为程序员提供了一种表示问题空间元素的全新的方法,而且不受问题类型的约束。抽象问题空间元素→方法空间中的表示:对象“对象”是现实世界的实体或概念在计算机逻辑中的抽象表示。面向对象的程序设计是以要解决的问题中所涉及到的各种对象为主要考虑因素。面向对象语言更加贴近人的思维方式。OOP允许你用问题空间中的术语来描述问题。在面向对象程序设计中还需要一些其他对象,而它们没有在问题空间的对应体。对象“对象”就象是一台小“计算机”:对象有状态对象有你要求它执行的操作现实世界中的对象:它们都有自己的状态它们又都有自己的行为程序中的对象用属性表示状态用方法(代码)实现行为对象与过程考虑对象—考虑过程:前者更有意义设计对象—设计过程:前者更富挑战性,尤其是设计可重用的对象。面向对象的程序设计和问题求解力求符合人们日常自然的思维习惯,降低分解问题的难度和复杂性,提高整个求解过程的可控制性、可监测性和可维护性,从而达到以较小的代价和较高的效率获得较满意效果的目的。封装-信息隐藏“封装”是一种组织软件的方法。其基本思想是把客观世界中联系紧密的元素及相关操作组织在一起,使其相互关系隐藏在内部,而对外仅仅表现为与其他封装体间的接口。从而构造出具有独立含义的软件实现。封装并不是一个新的概念,但在面向对象的程序设计中提出了一种全新的封装方法-类封装-信息隐藏每个类里都封装了相关的数据和操作。在实际的开发过程中,类多用来构建系统内部的模块。由于封装特性把类内的数据保护得很严密,模块与模块间仅通过严格控制的界面进行交互,使它们之间耦合和交叉大大减少,从而降低了开发过程的复杂性,提高了效率和质量,减少了可能的错误,同时也保证了程序中数据的完整性和安全性。封装-软件复用封装使得对象:对内成为一个结构完整、可自我管理、自我平衡、高度集中的整体。对外则是一个功能明确、接口单一、可在各种合适的环境下都能独立工作的有机的单元。类的封装特性使得类可重用性大为提高,这样的有机单元特别适宜构建大型标准化的应用软件系统,可以大幅度地提高生产效率。类定义—属性说明定义Employee类classEmployee{Stringname;intage;floatsalary;}创建一个Employee类的对象(职工对象)Employeee1=newEmployee();e1.name=“张立”;e1.age=21;e1.salary=528.37F;final类型常量名=值实例变量—成员变量其生命周期与对象存在的时间相同。类定义—方法说明为Employee类增加打印方法——将数据和代码封装在一个单一的实体中。classEmployee{Stringname;intage;floatsalary;voidprint(){System.out.println(name+年龄为:+age+月薪为:+salary);}//print()方法}//class对象方法的含义Employeeemp=newEmployee();emp.name=张立;emp.age=21;emp.salary=528.37F;一旦对象被建立并被初始化,就可以调用该方法打印这个对象的数据。emp.print();对象emp执行print方法操作自己的数据;而不是从外部操作对象的数据。向对象发消息,让对象做某件事。4-1对象的几个特征Everythingisanobject原则上说,你可以将所要解决的问题中的任何一个“概念组件”在程序中表示为一个对象。对象类似一个记录,可以存储数据,但你还可以让它执行某些操作(作用在它自身的数据上)。Aprogramisabunchofobjectstellingeachotherwhattodobysendingmessages所谓对一个对象发信息,就是调用该对象的一个方法。Everyobjecthasatype每一个对象都是某个类的一个实例。对象+消息信息隐藏-封装属性的访问权限privatepublic默认(相当于package}使用private修饰符修饰属性后,就不能从对象的外部直访问这些属性(类内方法可以访问),而只能通过该类的方法来操作这些属性。私有属性—公有方法方法可以保护数据(做各种合法性检查)。使得代码可维护性好(代码可变,接口不变)信息隐藏-封装(电梯例)电梯类定义(没有体现封装的类定义)classBadElevator{publicbooleandoorOpen=false;//表示电梯门的状态publicintfloor=1;//表示电梯停靠层数publicfinalintTOP_FLOOR=5;//定义电梯最髙层publicfinalintBOTTOM_FLOOR=1;//定义电梯最低层}电梯操作(操作BadElevator类的对象)publicclasstest1{publicstaticvoidmain(String[]args){BadElevatore1=newBadElevator();//创建一个电梯对象e1.floor--;//到地下室了e1.floor++;e1.floor=7;//没有7层e1.doorOpen=true;////通过改变对象属性值实现开门动作e1.doorOpen=false;//关门e1.floor=1;//到第一层e1.doorOpen=true;//门开,住户上下电梯。e1.floor++;//门还没关,电梯就开了。e1.doorOpen=false;e1.floor--;e1.floor--;}}信息隐藏-封装(电梯例)对象自身没有保护,这样操作会产生很多误动作4-2信息隐藏-封装(电梯例)电梯类定义(体现封装的类定义)publicclassElevator{privatebooleandoorOpen=false;//门的开关状态privateintfloor=1;//电梯停靠层数privateintweight=0;//表示当前乘客总重量finalintCAPACITY=1000;//电梯乘客重量上限finalintTOP_FLOOR=5;//电梯最高停靠层数finalintBOTTOM_FLOOR=1;//电梯最低停靠层数//以下是方法定义publicvoidopenDoor(){//开门方法doorOpen=true;//通过公共方法操作私有属性}属性定义4-3信息隐藏-封装(电梯例)publicvoidcloseDoor(){//关门方法,关门时检查是否超重checkWeightSensors();//调用测试重量的方法if(weight=CAPACITY)//如果没有超重doorOpen=false;//关门else//如果超重,则不关门,且通过响声提示for(intcounter=0;counter10;counter++)System.out.print((char)7);//ASCII码7为beep}privatevoidcheckWeightSensors(){//检查超重的方法(内部方法)weight=(int)(Math.random()*1500);//通过随机数模拟乘客重量System.out.println(乘客重量是:+weight);//显示乘客重量}信息隐藏-封装(电梯例)publicvoidgoUp(){//上升一层的方法定义if(!doorOpen){if(floorTOP_FLOOR){floor++;//如果门已关、且没到顶层,才能上升。System.out.println(floor);//显示到达层数}elseSystem.out.println(已在顶层);}elseSystem.out.println(门没关!);}方法体现对内部属性的保护信息隐藏-封装(电梯例)publicvoidgoDown(){//下降一层的方法定义if(!doorOpen){if(floorBOTTOM_FLOOR){floor--;//如果门已关、且没到低层,才能下降。System.out.println(floor);}elseSystem.out.println(已在底层);}elseSystem.out.println(门没关!);}信息隐藏-封装(电梯例)publicvoidsetFloor(intgoal){//指定停靠层的方法定义if(goal=BOTTOM_FLOOR&&goal=TOP_FLOOR){while(floor!=goal){if(floorgoal)goUp();elsegoDown();}System.out.println(当前停靠层是:+floor);}}publicintgetFloor(){returnfloor;}//取当前停靠层方法publicbooleanisOpen(){returndoorOpen;}//判断开门方法}//endofclassElevator信息隐藏-封装(电梯例)电梯操作(操作Elevator类的对象)publicclassTest2{publicstaticvoidmain(Stringargs[]){Elevatore2=newElevator();e2.openDoor();e2.closeDoor();e2.goDown();e2.goUp();e2.goUp();e2.openDoor();e2.closeDoor();e2.goDown();通过接口,对电梯的任何操作都不会导致误动作。e2.openDoor();e2.goDown();e2.closeDoor();e2.goDown();e2.goDown();intcurFloor=e2.getFloor();if(curFloor!=5&&!e2.isOpen())e2.setFloor(5);e2.openDoor();e2.closeDoor();e2.setFloor(10);System.out.println(测试结束);}}信息隐藏-封装(电梯例)4-3类方法的定义规则方法名后的小括号是方法的标志。形式参数是方法从调用它的环境输入的数据。返回值是方法在操作完成后返还给调用它的环境的数据。要指定方法返回值类型。如没有返回值,类型要写void例:publicbooleanisOpen(){returndoorOpen;}返回布尔值方法名相同、但参数不同,是不同的方法。与类名相同的所有方法都是类的构造方法。[修饰符]返回类型方法名([参数列表])[throws例外]{方法定义}见后面的解释方法体的定义在方法中定义的变量称为局部变量。生命周期:执行进入方法体时建立,退出方法时撤消。局部变量使用之前必须初始化。在方法体中可以访问所有的类属性,可以调用所有类中定义的方法。publicvoidcloseDoor(){//关门方法,关门时检查是否超重checkWeightSensors();//调用类中定义的方法if(weight=CAPACITY)//访问类属性doorOpen=false;//访问类属性(为类属性赋值)else//如果超重,则不关门,且通过响声提示for(intcounter=0;counter10;counter++)System.out.print((char)7);//ASCII码7为beep}方法的参数方法的参数要有名有型,参数的作用域在本方法中在方法体中,可以象属性及方法体内定义的变量那样使用参数。方法的参数采用值传送publicvoidsetFloor(intgoal){
本文标题:4-面向对象程序设计1解析
链接地址:https://www.777doc.com/doc-3270470 .html