ch4对象设计的java规范

上传人:平*** 文档编号:52547967 上传时间:2018-08-23 格式:PPT 页数:123 大小:1.42MB
返回 下载 相关 举报
ch4对象设计的java规范_第1页
第1页 / 共123页
ch4对象设计的java规范_第2页
第2页 / 共123页
ch4对象设计的java规范_第3页
第3页 / 共123页
ch4对象设计的java规范_第4页
第4页 / 共123页
ch4对象设计的java规范_第5页
第5页 / 共123页
点击查看更多>>
资源描述

《ch4对象设计的java规范》由会员分享,可在线阅读,更多相关《ch4对象设计的java规范(123页珍藏版)》请在金锄头文库上搜索。

1、第 4 章 对象设计的Java规范,2018/8/23,Java面向对象程序设计教程,2,主要内容,4.1 规范概述 4.1.1 硬约束与软约束 4.1.2 软件工程的要求 4.1.3 面向对象设计原则 4.2 Java语言的Object类及标准包 4.2.1 Object类 4.2.2 java.lang包 4.2.3 Java标准包 4.3 Java的异常处理机制 4.3.1 异常处理 4.3.2 核心代码与异常处理分离机制 4.3.3 引发异常及对异常处理的两条途径 4.3.4 Java的内置异常类 4.3.5 设计异常类 4.3.6 断言语句 4.3.7 对异常不作为与作为的区别 4.

2、4 包、接口、类与方法设计 4.4.1 包设计 4.4.2 制作JAR文件包 4.4.3 接口设计 4.4.4 抽象类设计 4.4.5 类设计 4.4.6 方法设计 4.4.7 设计模式 4.5 Java编码的其他规范 4.5.1 命名规范 4.5.2 文件组织样式 4.5.3 增加程序可读性的一些建议 4.5.4 完整的例子,4.1 规范概述,硬约束与软约束,硬约束-Java语言的语法 软约束-Java语言的规范 编程规范的用处: 如果我们能严格地按规范编写程序,外在的好处是可以使编写的代码更优雅、交流更方便,使我们被同行的认可度更高、得到的赞誉声更多;内在的好处是可以使代码的出错率更低,万

3、一出现Bug,排除也会更容易。,2018/8/23,Java面向对象程序设计教程,4,2018/8/23,Java面向对象程序设计教程,5,软件工程的要求,软件维护所占的成本约为一个软件生命周期中总成本的80。 任何一个软件的维护工作都不可能始终由最初的编程人员来执行。 编程规范提高了软件的可读性,使工程师更快更彻底地读懂新的源代码。 如果我们的源代码是作为商品而开发的,我们必须保证相关源代码可以与其它商品清晰分开,并进行合理的打包。,2018/8/23,Java面向对象程序设计教程,6,软件工程的要求,致命的异常终止决不允许 一条错误信息应该报告什么发生了,关于这个用户能够做什么,程序下一步

4、要做什么,以及哪一行代码造成该问题?可能也要注意时间,用户名和环境。 好的程序将自动地发送最近的错误信息给永久性媒体 以这个次序编写:用户手册说明书帮助源代码 编码工作量应该不超过开发工作的20 测试应该至少要占工程的30 注释应该至少要占源代码的20,2018/8/23,Java面向对象程序设计教程,7,软件工程的要求,带有清晰的变量名和实例名的文档代码 数据库应该是相关的 让简单的维护成为引导我们的灯光 总是采用最好的算法 永远不要隐藏一个我们仅用一次的实例,将其嵌入到源代码中,然后,如果我们要多次使用一个实例,则应将其变成一个方法调用。 首先编写更具有风险的模块 首先优化最慢的模块 遵守

5、30秒规则,面向对象设计原则: “开闭”原则,(Open-Closed Principle,OCP) “开闭”原则被认为是面向对象设计的第一原则,描述为: 软件实体应对扩展是开放的,而对修改是封闭的。,2018/8/23,Java面向对象程序设计教程,8,面向对象设计原则:依赖倒置原则,(Dependency Inversion Principle,DIP) 依赖倒置原则有时也称为控制反转(Inversion of Control,IOC),描述为: 高层模块不能依赖于低层模块,它们应一起依赖于一个抽象层。抽象不能依赖于细节,而细节应依赖于抽象。,2018/8/23,Java面向对象程序设计教

6、程,9,面向对象设计原则:接口隔离原则,(Interface Segregation Principle ,ISP) 接口隔离原则描述为: 客户不能被强迫依赖他们没有用到的接口。,2018/8/23,Java面向对象程序设计教程,10,面向对象设计原则:单一职责原则,(Single Responsibility Principle,SRP) 单一职责原则描述为: 一个类型应该有且只有一个改变的理由。,2018/8/23,Java面向对象程序设计教程,11,面向对象设计原则:里氏替换原则,(Liskov Substitution Principle,LSP) 里氏替换法则由Barbara Lis

7、kov提出的,描述为: 在所有根据T定义的程序P中,如果对于每个S类型对象o1有一个T类型对象o2,那么,假如S是T的子类,则当把o1替换成o2时,P的行为不会发生改变。,2018/8/23,Java面向对象程序设计教程,12,4.2 Java语言的Object类及标准包,2018/8/23,Java面向对象程序设计教程,14,Java语言的Object类,Object类是类层次的根。 所有类都直接或间接地继承了Object类,所以一个Object类型的变量可以引用任何对象,不论是类实例还是数组。 Object类定义了11个可供所有对象继承的方法。这些方法分为两类:通用工具方法和支持线程的方法

8、。,2018/8/23,Java面向对象程序设计教程,15,Object类的工具方法,public boolean equals(Object obj) public int hashCode() protected Object clone() throws CloneNotSupportedException public final Class getClass() protected void finalize() throws Throwable public String toString() public final void wait(long timeout) throws

9、InterruptedException public final void wait(long timeout, int nanos) throws InterruptedException public final void wait() throws InterruptedException public final void notify() public final void notifyAll(),2018/8/23,Java面向对象程序设计教程,16,Object类中equals方法的性质,反身性(Reflexive) 对于任何引用x,x.equals(x) 将返回true。 对

10、称性(Symmetric) 对于引用x和y,当且仅当y.equals(x) 返回true时,x.equals(y)才会返回true。 传递性(Transitive) 对于引用x、y和z,如果x.equals(y)返回true,y.equals(z)也返回true,那么x.equals(z)也将返回true。 一致性(Consistent) 对于引用x和y,只要对象比较时所有的信息并没有做任何的改动,那么多次调用x.equals(y)要么都返回true,要么都返回false。 对于任何非空引用(non-null reference)x,x.equals(null)将返回false。,2018/8

11、/23,Java面向对象程序设计教程,17,Object类中hashCode方法的性质,在一次Java应用中,只要对象比较时所有的信息并没有做任何的改动,无论该对象的hashCode方法被调用多少次,每次返回的散列码都必须是同一个整数值。但在不同的Java应用中,这个散列码的数值允许不一样。 如果有两个对象通过equals方法比较返回true,那么分别调用这两个对象的hashCode方法返回的散列码数值也相等。 并不要求当通过Object类的equals方法比较结果不相等时,调用这两个对象的hashCode方法所得的散列码一定不一样。但是,Java语言建议在这种情况下,最好赋给不同的对象以不同

12、的散列码数值,以提高散列表的性能。 举例:StringConvention.java,2018/8/23,Java面向对象程序设计教程,18,hashCode方法的建议覆盖方式,Java语言建议直接使用equals方法中的所有属性。 如果这些属性是基本类型或equals方法已经转换成对内容比较的类(如String类),则取其包装类或所属类的散列码值,然后将它返回; 当有多个属性用于equals方法中,则将这几个属性包装类或所属类的散列码做异或运算(,XOR)后返回。 此外,则要在hashCode方法中设计特殊的算法,使之返回满足Java规范的值。 举例:MyObjectConvention.j

13、avaMyObjectNonConvention.java,2018/8/23,Java面向对象程序设计教程,19,Object类中的toString方法,Object类中只提供了该对象的类名、一个字符和实例散列码的十六进制表示,通常这些信息对于用户是远远不够的。 可以通过覆盖toString方法,在其中提供一些更加友好的信息。 举例:MyObjectConvention.java,clone方法,clone方法创建调用它的对象的一个复制副本。 只有那些实现Cloneable接口的类能被复制。 由于复制可能引起问题,因此在Object类中,clone方法被声明为protected。这就意味着它

14、必须被实现Cloneable接口的类定义的方法所调用,或者被在这些类中显式覆盖clone方法。,2018/8/23,Java面向对象程序设计教程,20,finalize方法,当垃圾回收器确定不存在对该对象的更多引用时,对象的垃圾回收器调用该方法。 finalize方法被声明为protected,防止在该类或者其扩展类的定义之外的应用代码中访问该方法。 子类可覆盖finalize方法来完成该类型对象销毁之前必需的清除操作。 finalize方法引发的任何异常导致暂停对象终止,但引发的异常将被垃圾收集器忽略。,2018/8/23,Java面向对象程序设计教程,21,2018/8/23,Java面向

15、对象程序设计教程,22,java.lang包中的类,2018/8/23,Java面向对象程序设计教程,23,java.lang包中定义的接口,Appendable 实现Appendable接口的类,其对象具有可追加字符或字符序列的能力,该接口定义了三个append重载方法,试图接收Formatter输出的类必须实现这一接口。 CharSequence CharSequence接口用来描述一个可读的字符序列,该接口提供给所有字符序列统一的只读权限。 Cloneable Cloneable接口没有定义成员。它通常用于指明被创建的一个允许对对象进行复制(即创建对象副本)的类。如果试图用一个不支持Cl

16、oneable接口的类调用clone方法,将引发一个CloneNotSupportedException异常。当一个副本被创建时,并没有调用被复制对象的构造方法。副本仅仅是原对象的一个简单精确的拷贝。 Comparable 实现Comparable的类的对象可以被排序。换句话说,实现Comparable的类包含了可以按某种有意义的方式进行比较的对象。Comparable接口定义了一个compareTo方法,该方法对两个实例对象之间进行比较,比较结果负数(-1)、0、正数(1)分别代表比较对象与被比较对象之间的关系分别是小于、等于、大于。该方法实现一个类的多个实例之间的排序。基本数据类型的包装类和String类都实现了这一接口,实现了compareTo方法。 Iterable 实现Iterable接口的类一般作为容器,且具有提供依次访问被包容对象功能的能力。 Readable 客户对象可以从实现了Readable接口的类的实例对象中读取字符。 Runnable Runnable接口定义了一个run方法,允许对象作为单独的控制线程执行。 Thread.UncaughtExceptionHandler 在线程执行过程中引发了异常而没有捕获时, 实现UncaughtExceptionHandler接口的类可以作为控制器处理该状况。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号