已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章面向对象设计,主要内容:6.1软件开发活动6.2识别类和对象6.3静态类成员6.4类间关系6.5接口6.6枚举型类6.7方法设计6.8方法重载6.9测试测试的目的是发现错误,错误是不能避免的!6.10GUI设计6.11布局管理器6.12边框6.13容器层次结构,5-2,软件开发活动,建立软件需求调研看看问题是什么?软件设计分析、设计考虑如何去解决?实现软件设计编码解决、实现软件测试测试与维护,软件开发项目包含四个基本开发过程,3,软件需求软件需求规定了一个程序必须完成的功能,指明了程序应当执行的任务,而不是描述如何执行所规定的任务,通常用一个称为功能说明的文档来描述。软件设计描述了程序将如何完成需求所指定的任务,并定义了程序中的类和对象、类间关系及类之间如何交互。底层的详细设计将解决各个类的方法如何完成自己的任务。软件设计的实现是编写解决实际问题的源代码的过程。是将设计转换成某种程序设计语言的行为。软件测试是保证软件能解决预定问题,并能够再满足性能要求的条件下执行任务。测试工作包括针对不同的输入数据多次运行程序和精确分析程序执行结果。,4,6.2识别类的和对象面向对象软件设计的基本内容就是确定类,类决定软件的结构。6.2.1类的识别方法识别可能的类的方法之一是:识别软件需求中所讨论的实体对象。对象一般是名词。问题说明中的名词可能标识了程序中需要的一些类和对象通常用一个名词给代表对象的类命名。一个类代表一个实体,根据类可以建立程序所需要的任意多个实例。类识别时候还要处理一个问题:是将某一事物表示为一个对象还是另一个对象的基本属性。6.2.2类职责的分派类职责的分派是软件设计工作的一部分,每个类代表一个具有某些行为的对象,对象的行为由这个类的方法定义。类的行为所执行的动作体现了程序的功能,因而通常使用动词来给行为和完成行为的方法命名。,5-5,静态类成员(StaticClassMembers),Forexample:Math类中的静态方法result=Math.sqrt(25);下面我们着重学习静态变量(staticvariables)静态方法(staticmethods),5-6,静态变量(staticvariables),privatestaticfloatprice;privatestaticintcount;静态变量由类的所有实例共享;程序第一次引用含有静态变量的类时,将静态变量分配存储空间;在方法中声明的局部变量不能具有静态属性。Java程序的main方法必须用static修饰符进行说明,使解释器执行main方法时,不用实例化含main方法的类。,5-7,静态方法(staticmethods),classHelperpublicstaticintcube(intnum)returnnum*num*num;,由于方法cube是静态的方法,因此可以用类名直接调用它:value=Helper.cube(5);,静态方法可以通过类名来引用。因此调用静态方法不需要实例化类的对象。静态方法不能引用实例变量,静态方法可以引用静态变量。,Java程序的main方法必须用static修饰符进行说明,使解释器执行main方法时,不用实例化含main方法的类。,例:6.1,6.2,8,6.4类间关系类之间最基本的关系是:依赖、聚合和继承。6.4.1依赖关系类之间的依赖关系通常体现在一个类的方法调用另一个类的一个方法。一般而言,如果类A使用类B,则在类A中由一个或者多个方法调用类B中一个或者多个方法。如果被调用的方法是静态方法,则类A只需要通过类名引用B,如果被调用的方法是非静态的,则A必须通过访问类B的实例来调用该方法。一个对象获得对另一个类的对象访问控制的方式,是软件设计中的重要决策。,9,6.4.2同一个类的对象之间的依赖性即一个类对象与本类的其他对象交互。要实现这一操作,可以将一个类的对象作为一个参数传递给本类的一个方法,使得该方法可以对作为参数得到的对象进行操作。例如:str3=str1.concat(str2);例题6.3例题6.4,10,6.4.3聚合(hasa)关系一个聚合对象由其他的对象组成,形成一个”hasa”关系一个聚合对象的定义是:将其他对象的引用作为自己的实例数据的对象。聚合关系是依赖关系的特殊类型,即类A被类B定义为类B的一部分时,类A便依赖类B,类B就是聚合类。一个聚合类通常要调用其组成部分类的方法。例题6.5例题6.6例题6.7,11,6.4.4this引用page:213214this是java的保留字,this引用允许对象引用自己。一个非静态方法需要通过一个具体的对象或类来引用,this引用可用于引用当前正在运行的对象。this引用也常用于区分同名的构造方法参数和实例方法。例如:publicAccount(stringowner,longaccount,doublebalance)name=owner;acctNumber=account;balance=balance;publicAccount(stringname,longacctNumber,doublebalance)=name;this.acctNumber=acctNumber;this.balance=balance;,12,6.5接口接口表示一组公共的方法,通过这组方法可以与一个对象交互。一个Java接口是一组常量和抽象方法的集合。抽象方法是没有实现的方法,即对于抽象方法没有已定义的实现代码,包含参数列表的方法声明头后面仅跟这一个分号。一个接口是抽象方法的集合,因而不能被实例化。例题6.8抽象方法声明前使用保留字abstract,但是在接口中的方法通常不需要加上abstract。接口方法的默认可见性是public。一个类通过实现定义在接口中的每个抽象方法来实现这个接口。,13,实现接口类(实现类)在类声明头部使用保留字implements,接着再给出接口名。一个类声明它要实现某个接口,它就必须提供这个接口所有方法的实现代码。如果接口中的任何一个方法在这个类中没有实现代码,编译器将产生错误信息。例题6.9例题6.10接口要求一个实现类应实现接口特定的方法,同时允许实现类还可以由其他的方法。可以由多个类实现同一个接口,由此可对相同的方法进行不同的实现。-“多态性”,14,一个类也可以实现多个接口,在这种情况下,这个类应提供所有接口种所有方法的实现代码。使用implements字句声明一个类实现多个接口,接口名用逗号分隔开。classManyThingsimplementsinterface1,interface2,interface3/containallmethodsofallinterfaces,15,6.5.1Comparable接口该接口定义在java.lang包中,该接口中只有一个方法compareTo,该方法的参数是一个对象,返回值为整型值。Comparable接口的目的是提供对两个对象进行比较的通用机制。例如:if(pareTo(obj2)0)system.out.println(“obj1islessthanobj2”);6.5.2Iterator接口也定义在Java标准类库中,由代表一个对象结合的类使用,主要提供了在一个对象集合中每操作一次移动到下一个对象的方法。该接口中的两个方法是hasNext和next方法。,16,6.6枚举型类枚举型定义了一种新的数据类型,列出了所定义类型的所有可能取值。例如:enumSeasonwinter,spring,summer,fallSeasontime;/声明Season类的一个对象。枚举型是一种特殊的类,枚举型的值是对象。一个枚举型的值是具有该枚举型的静态变量。对变量time赋值如下:time=Season.spring;例题6.11例题6.12,17,6.7方法设计对方法的设计将决定类如何具体确定定义自己的行为。本节讨论的两个最重要的问题:方法分解和对象作为方法参数时所涉及到的有关概念6.7.1方法分解一个对象提供的服务如果太复杂,而不能用一个方法来实现这个服务的时候,一般需要将一个方法分解为多个方法,使得软件设计更容易理解。例题6.13例题6.14,18,6.7.2方法参数的传递方式Java中,所有参数以传值的方式传递,也就是调用方法时实际参数的当前值将复制给方法声明头的形参。参数的传递实质上是将实参保存的值的副本给形参。在方法内部任何对形参的修改不会影响实参。当将一个对象传递给一个方法时,传递的时这个对象的引用,复制给形参的值是对象的地址,因此形参名和实参名相互成为对方的别名。通过被调用方法内的形参引用而改变了对象的状态,也同时改变了由实参引用的对象,因为形参和实参引用的是同一个对象。如果改变形参引用本身,则不会影响实参,实参仍然指向原对象例题6.15例题6.16例题6.17,19,6.8方法重载在Java中使用具有不同参数表达的相同方法名调用多个方法的技术叫做方法重载。当需要对不同类型的数据执行类似的方法时,该技术非常实用。多个重载方法可以由方法的参数个数、类型及参数顺序来区分。例如声明两个方法。Publicintsum(intnum1,intnum2)returnnum1+num2;Publicintsum(intnum1,intnum2,intnum3)returnnum1+num2+num3;,20,当调用sum方法时,编译器将根据调用参数的个数确定执行那个版本的sum方法例如:sum(25,69,13);方法名及方法的参数个数,类型和顺序称为方法的签名。编译器根据完整的方法签名,将一个方法调用和适当的方法定义代码绑定在一起。编译器必须能够检查方法调用时的方法签名以确定应该调用的方法,如果试图指定两个具有相同签名的方法,编译器将发出方法调用不适当的错误信息并且不产生可执行程序代码。方法的返回类型不是方法签名的组成部分。即两个重载方法的差别不能仅仅只是返回值的类型不同,因为方法的返回值可以被调用语句忽略,构造方法也可以重载,并且经常被重载。通过提供多种版本的构造方法,使得创建对象的方式多样化。,21,6.9测试测试是针对不同的输入数据运行已完成编码的程序并发现程序问题的活动。测试还包括系统评价工作,即有人或机器完成的,对改进系统质量的评估。测试的目标是发现错误,通过发现错误并修正错误,逐步提高程序质量。6.9.1审查用于评价设计和代码的技术叫审查。审查的目的是发现问题,而不是解决问题。进行审查时,应当考查设计是否完整考虑了所有的需求,并且还要对系统分解为类和对象的方法进行评估。代码审查时候,应当考查设计是否忠实地满足需求,以及代码如何忠实地实现设计。审查的任务是指明任何会引起设计或实现不能力行其职责问题。,22,6.9.2缺陷测试测试的目的就是为了发现错误,因此常称为缺陷测试。一个成功的测试应该是能够发现程序任何中任何不完善问题的测试。一个测试用例由一组输入数据、用户操作或其他初始条件以及期望输出构成。应该将测试用例形成规范的文档,以便将来需要时能够进行重复测试。开发者应该建立一套完整的测试方案涵盖系统各个方面的测试用例组成。测试用例要精心设计和选择。两种缺陷测试的方法:黑盒测试和白盒测试。,23,黑盒测试黑盒测试基于输入和输出数据,对于一个完整的系统,可以用黑盒测试技术进行测试,测试用例中的输入是用户提供的信息和用户的操作。当输入产生了预期的输出,测试用例是成功的。黑盒测试用例通常可以由系统的需求分析或方法的功能描述直接导出。黑盒测试用例的输入数据通过定义等价类来选择,等价类是一个期望能产生类似输出信息的输入集。等价类由边界值定义:因为一个等价类中所有值实质上在测试系统的统一特征,所以需要等价类边界值中的一个测试用例。程序设计出错常发生在边界或者靠近边界的值,因此要对于边界值或者靠近边界的值应该进行穷尽测试。,24,一组好的测试数据至少应包括:准确的边界值、边界值减1和边界值加1,此外还应该定义些测试用例,输入数据不仅要包含上述的边界值,还要从等价类中至少取一个值。白盒测试也称为玻璃盒测试,用于测试一个方法的内部结构盒实现。白盒测试用例基于代码逻辑。白盒测试的目标是保证程序中的每一条路径至少执行一条。一个白盒测试映射代码所有可能的路径,并确保测试用例能引起每条路径得以执行,这类测试常被称为语句覆盖。在黑盒测试和白盒测试中,应该在执行测试之前先预测一个测试得期望输出。,25,6.10GUI设计GUI设计的过程就是将关于组件、事件和其他语言的知识运用的过程。GUI程序设计基本思想:了解用户预防用户犯错误优化提供给用户的功能设计保持一致性。,26,6.11布局管理器组件、事件和监听器等是GUI的核心组成,GUI设计中最重要的是使用布局管理器。布局管理器是一个对象,负责在容器中安排组件,决定每个组件的大小与位置。每当需要改变容器组件的视觉外观,都需要询问布局管理器。Java标准库中预定义的几种布局管理器。布局管理器列表每个容器有一个默认的布局管理器,但是用户可以根据喜好更换。可以调用容器的setLayout方法改变容器的布局管理器。例如:将默认的流式布局管理器改变为边界布局管理器JPanelpanel=newJPanel();Panel.setLayout(newBorderLayout();,27,布局管理器列表,28,下面的例子主要介绍不同的布局管理器的应用程序LayoutDemo主要介绍了标签窗格(tabbedpane)组件的使用标签窗格式是一种容器组件,包含多个窗格,能根据用户的选择决定那个窗格成为当前可见的窗格。标签窗格在JTabbedPane类中定义使用addTab方法创建一个标签时,可以指定该标签上显示的名称,以及相应的窗格移到顶层获得焦点,而可见时候显示组件。实例程序中,标签窗格的每一个标签中包含一个使用不同的布局管理器控制的面板。例题6.18例题6.19,29,6.11.1流式布局管理器JPanel默认情况下使用流式布局管理器。流式布局管理器按组件的初始尺寸显示他们,并将尽可能多的组件放在一行。当某一个组件在该行放不下时,将被放到下一行显示,行数会根据加到容器中的组件的多少自动增加。,30,例题6.20程序说明:该实例是描述了LayoutDemo程序中演示的流式布局管理器的面板。该面板显示地设置使用流式布局管理器,然后将创建各个按钮并将其增加到面板中。程序中重载了FlowLayout类的构造方法可以方便程序员按需要定制布局管理器的特征组件的对其方式右居左、居中、居右,默认情况下是居中对齐,还可以在创建布局管理器的时候设置组件间在水平方向和垂直方向的距离。,31,6.11.2边界布局管理器边界布局有五个区域加入组件:东区、南区、西区、北区、中心区。,北区,西区,中心区,东区,南区,32,由边界布局管理器控制的容器的add方法的第一个参数是要加入的组件,第二个参数指定组件加入的区域。在BorderPanel类的构造方法中,显示地将面板的布局管理器设置为边界布局管理器。然后创建个按钮并将它加入到指定的区域。边界布局中的每个区域中只能显示一个组件。可以将多个组件加入到一个面板中,再将此面板加到边界布局的某个区域中。默认情况下边界布局的各个区域之间是没有间隙的,间隙值可以在边界布局管理器类中使用重载的构造方法或调用显示的方法进行设置。例题6.21,33,6.11.3网格布局管理器网格布局管理器将容器中的所有组件显示在一个纵横排列的矩形网格中,组件被置于某个网格单元中,并且所有的网格单元大小相同。网格的行数和列数可以在创建布局管理器的构造方法中通过参数指定。系统将组件按照从左到右,从上到下的顺序依次填充到网格中,系统没有提供方法显式地将某个组件放到网格的指定位置。每个网格单元的尺寸由容器的总尺寸决定的。当容器改变时,所有的单元尺寸按比例改变以充满容器。用于指定行数或列数的参数为0,网格将会在该行或列的方向按需要扩展以便容纳加入的所有组件。但行数或者列数不能同时为0。,34,默认情况下,网格单元间在垂直和水平方向上都没有间隙。间隙尺寸可以在GridLayout类中通过重载构造方法或者调用相应的方法进行设置。例题1盒式布局管理器盒式布局管理器将所有组件水平地布局在一行上或是垂直地布局在一列上。,35,创建BoxLayout对象时,使用在BoxLayout类中定义的常量来指定它时沿水平方向还是沿垂直方向排列组件。BoxLayout类对象构造方法的第一个参数是由它管理的组件,因此对每一个组件都必须创建一个新的BoxLayout对象。使用盒式布局管理器的容器按照组件加入到容器的顺序从上到下或是从左到右排列组件。在盒式布局
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中地理2026教资面试全真模拟高频题考题
- 房地产外联课件
- 高中化学2026教资面试专项考题题库及答案
- 小学英语2026教资面试全真模拟答辩
- 常见颈部肿块的护理
- 房地产经纪人培训课件
- 房地产分析课件
- 防冻安全教案课件
- 分层应用课件
- 2026年汽车维修工知识题库(附答案)
- 2026北京市朝阳区卫生健康委员会所属事业单位第二批招聘241人笔试备考题库及答案解析
- 2026粉末冶金开发高速钢刀片脱模剂适用性分析报告
- 三角函数压轴题专项训练-2026年高考数学 含答案
- 2026年辽宁省公安厅招聘警务辅助人员笔试试题(含答案)
- 24J113-1 内隔墙-轻质条板(一)
- 医院收款室安全生产制度
- 医院环境感染监测制度
- 心脏的结构小学生课件
- 矩阵论知到智慧树期末考试答案题库2025年哈尔滨工程大学
- T/BJHWXH 002-2024路用低氯低钠融雪剂
- 人体发育学 第八章 婴幼儿期言语功能的发育
评论
0/150
提交评论