收藏 分享(赏)

Java语言程序设计-基础篇-中文ppt-第十章.ppt

上传人:guanlirenli 文档编号:3206937 上传时间:2018-10-07 格式:PPT 页数:27 大小:366KB
下载 相关 举报
Java语言程序设计-基础篇-中文ppt-第十章.ppt_第1页
第1页 / 共27页
Java语言程序设计-基础篇-中文ppt-第十章.ppt_第2页
第2页 / 共27页
Java语言程序设计-基础篇-中文ppt-第十章.ppt_第3页
第3页 / 共27页
Java语言程序设计-基础篇-中文ppt-第十章.ppt_第4页
第4页 / 共27页
Java语言程序设计-基础篇-中文ppt-第十章.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、1,第10章 关于对象的思考,2,动 因,你可以通过前两章看到面向对象程序设计的优点。本章将演示如何使用面向对象范式解决问题。在研究这些例子之前,我们首先介绍几个支持这些示例的语言特征。,3,学习目标,从不可变类创建不可变对象以保护对象的内容 (第10.2节)。 判断类中出现的变量的作用域 (第10.3节)。 使用关键字this指代调用对象自己 (第10.4节)。 应用类的抽象类来开发软件 (第10.5节)。 探索面向过程范式和面向对象范式的不同之处 (第10.6节)。 开发用于建模对象之间组合关系的类 (第10.7节)。 使用面向对象范式设计程序 (第10.8-10.10节)。 按照类的设计

2、原则来设计类 (第10.11节)。,4,不可变对象和类,如果一旦创建一个对象那么不能再改变它的内容,这种对象被称为不可变对象(immutable object),而它的类就被称为不可变类(immutable class)。如果删掉前面例子中Circle类的set方法,那么该类就变成不可变类,因为半径是私有的,所以没有set方法它的值就不能再改变。,一个类所有数据都是私有的且没有修改器,并不意味着它一定是不可变类。例如:下面的Student类,它的所有数据域都是私有的,而且也没有set方法,但它不是一个不可变的类。,5,举 例,public class Student private int i

3、d; private BirthDate birthDate; public Student(int ssn, int year, int month, int day) id = ssn; birthDate = new BirthDate(year, month, day); public int getId() return id; public BirthDate getBirthDate() return birthDate; ,public class BirthDate private int year; private int month; private int day; p

4、ublic BirthDate(int newYear, int newMonth, int newDay) year = newYear; month = newMonth; day = newDay; public void setYear(int newYear) year = newYear; ,public class Test public static void main(String args) Student student = new Student(111223333, 1970, 5, 3); BirthDate date = student.getBirthDate(

5、); date.setYear(2010); / Now the student birth year is changed! ,6,什么样的类是不可变的?,要使一个类成为不可变的,它必须标记所有数据域都是私有的,没有提供修改器的方法以及没有提供会返回一个指向可变数据域的引用的访问器方法。,7,变量的作用域,实例变量和静态变量的作用域是整个类。可以在类内的任何地方声明它们。 局部变量的作用域是从它声明的地方开始一直到所包含这个局部变量的模块结束。一个局部变量必须在使用前显式地初始化。,8,this关键字,关键字this是指向调用对象本身的引用名。关键字this的一种常见用法就是引用类的隐藏数据

6、域(hidden data fields)。 关键字this的另一种常见用法是让构造方法调用同一个类的另一个构造方法。,9,引用隐藏数据域,10,调用重载的构造方法,11,类的抽象和封装,类抽象(Class abstraction)是将类的实现和使用分离。类的创建者提供类的描述,让使用者明白如何才能使用类。类的使用者不需要知道类是如何实现的。实现的细节经过封装,对用户隐藏起来。,12,设计Loan类,TestLoanClass,Run,Loan,13,面向对象的思考,第17章介绍使用循环、方法和数组来解决问题的基本程序设计技术。这些技术的学习为面向对象程序设计打下了坚实的基础。类为创建可重用软

7、件提供了更高的灵活性和更多的模块化。本节使用面向对象方法来改进第3章中介绍的一个问题的解决方案。从这个改进的过程中,可以看到面向过程和面向对象程序设计的不同,也可以看出使用对象和类来开发可重用代码的优势。,14,BMI 类,UseBMIClass,Run,BMI,15,实例:Course类,TestCource,Run,Course,16,举例:StackOfIntegers 类,Run,TestStackOfIntegers,17,设计StackOfIntegers类,18,实现StackOfIntegers类,StackOfIntegers,19,设计GuessDate类,UseGuess

8、DateClass,Run,GuessDate,20,类的设计原则,(内聚性)类应该描述一个单一的实体,而所有的类操作应该在逻辑上互相配合,支持一个连贯性的目标。例如:可以专门为学生使用一个类,但不应该将学生与教职工组合在同一个类中,因为学生和教职工是不同的实体。,21,类的设计原则(续),(分担责任) 如果一个实体担负太多的职责,就应该按各自的职责将它分为几个类。例如:String类、StringBuffer类和StringBuilder类都用于处理字符串,但是它们的职责各有不同。String类处理不可变字符串,StringBuilder类创建可变字符串,StringBuffer和Strin

9、gBuilder类似,只是StringBuffer类还包括更新字符串的同步方法。,22,类的设计原则(续),类是为了重用而设计的。用户可以以不同的组合和顺序,在许多不同环境中合并多个类。因此,应该设计一个类,这个类应该没有对用户使用它的目的及使用时间的限制,设计属性以确保用户可以按值的任何顺序和任何组合来设置属性,所设计的方法实现的功能应该与它们出现的顺序无关。,23,类的设计原则(续),只要在可能的情况下,都要在Object类的定义中提供一个公用的无参构造方法,覆盖equals方法和toString方法。,24,类的设计原则(续),遵循标准Java程序设计风格和命名习惯。给类、数据域和方法选

10、择有意义的名字。经常将数据声明置于构造方法之前,并且将构造方法置于方法之前。总是要提供一个构造方法并且初始化变量以避免程序设计错误。,25,使用可视化修改器,每个类都提供两个合约:一个是针对该类的使用用户,一个是针对该类的扩展用户。对使用用户而言使数据域私有化和访问器方法公共化,对扩展用户而言数据域和方法是protected的。扩展类可以提高一个实例方法的可见性,使方法从protected变为public,或者改变它的实现,但是不能以违背类协议的方式改变实现。,26,使用可视化修改器(续),一个类应该使用private修饰符来隐藏它的数据,防止客户端直接访问。但只有希望用户看到或修改私有数据,你可以使用get方法和set方法为用户提供对私有数据的访问。一个类还应该隐藏当它不打算供客户端使用的方法。例如:在示例11.2,“Rational类” 中Rational类中名为gcd的方法是私有的,因为它仅适用于在类中做内部使用。,27,使用static修改器,一个能被类的所有实例所共享的属性应该声明为static属性。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报