`
li2005
  • 浏览: 38504 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java面向对象设计最佳实践 - 方法设计(一)

阅读更多
觉得相当有用,收藏下来
http://mercyblitz.iteye.com/blog/667939

在《类的设计基础知识》文章中提到, 方法作为 命名的控制类或者对象的有状态或无状态的执行模块,可称作类或者对象的“行为”。 方法在类中的地位相当重要,利用面向对象的多态性能够设计更为优雅的结构,同时巧妙地使用继承能够更好地减少冗余,因此其设计是重重之重。方 法的设计实践会按照下列的议程安排:
名称和注释设计
注释即规约
名称即语义
范围设计
物理范围
逻辑范围
参数设计
参数类型
参数顺序
参数数量
返回值设计
返回值类型
返回值特征
异常设计
异常类型
异常转换
泛型设计
AOP设计

一、 名称和注释设计

方法名称好比人的姓名,父母在给自己子女起名的时候,在字面上,尽量不想重复,同时在意义上,面体现了 父母的美好希望。好的名称不仅容易让人记住,同时会想起其特征。方法也是如此。

在面向对象设计中,对于API 方法来说,说明它的语义和体现的行为。那么,设计人员应该遵循方法的设计原则: 输入和输出,以及异常触发应该是规约的和可控制的,也就说方法说体现的行为或者履行的职责应该是有限的 。凡是任意暴露(从结构上)和职责(从逻辑上)模糊或者歧义,皆视作低内聚- 高耦合设计。

那么,规约方法行为和科学的名称是必要,也是重要的。

       1.  注释即规约
在TDD 中,有句名言是“实现未动,测试先行”。那么设计中,则是“实现未动,规约先行”。也就说,在实现和命名方法的之前,应该好好设计下这个方法 的语义规约,即它要表达的语义和行为是什么。也叫做 契约编程 。良好的单一性规约,是 高内聚- 低耦合 的前提。

在实现方法之前,一般的设计人员更多地关注与功能性需求,而非功能性需求更多地由架构师考虑。显然,良 好的设计是需要全面考虑到的。下面总结了一些通用的规约,这也是后续文章重点介绍的。
功能性需求的规约:
方法物理上和逻辑上的范围 
参数的接受范围、其数量、顺序、类型以及意义
返回值、其类型以及意义
方法异常触发的条件以及意义
前提和后续条件

非 功能性需求的规约:
性能指标(比如,时间和空间)
安全(比如,执行权限、防止攻击)
为一致性(比如,什么条件下保持一致性)
软件条件限制(比如,编程语言限制)
当了解这些规约之后,那么剩下就是怎么体现到设计中。代码实现是利用编程语言,而规约表述是自然语言, 自然地,在编程语言中,大多数是利用注释来表达。Java 同样如此,不过可利用 Javadoc 来生成 API 文档。

当客户端使用方法之前,它可以通过注释来了解方法规约,更好地增加了方法的可用性。

在方法实现之前,给方法添加注释,固然是一种很好的方法。当受制于时间的情况下,采用一种“命名即注 释”的方法更佳。接下来接受方法命名。

       2.  名称即语义
前面提到“命名即注释”的方法,通过命名就知道方法的意图,一般用于方法实现相对简单的情 况,比如在Java Bean 中, Setter 和 Getter 方法就是一种体现。设计时,可以利用这种方法提高方法的易用性和可读性。

Java的 API 中,提供了很多命名模式的参考,其命名一般可以归纳为几类:
a)  动词
以动词命名方法,比如:
i.  对象状态比较
Java代码
java.lang.Object#equals(java.lang.Object), 
java.lang.String#contains(java.lang. CharSequence), 
java.util.Collection<E>#contains(E), 
java.util.Comparator<T>#compare(T,T) 

ii. 状态改变的
Java代码
java.lang.Collection<E>#clear(), 
java.io.Closeable#close(), 
java.lang.String#intern(), 
java.lang.String#trim(); 

b)  动词- 名词
i.  状态转化
Java代码
java.lang.Integer#parseInt(java.lang.String) , 
java.lang.String#getBytes(), 
javax.jms.Session#createMessage() 

ii.  条件判断
Java代码
java.util.Iterator<E>#hasNext(), 
java.lang.Class#isInterface(), 
java.lang.String#isEmpty(), 
java.lang.Thread# holdsLock (java.lang.Object) 

iii.  状态改变
Java代码
java.lang.Thread#setContextClassLoader(java.lang.ClassLoader), 
javax.Servlet.http.HttpSession#removeAttribute(java.lang.String) 

iv.  通讯传输
Java代码
javax.mail.Transport#sendMessage(javax.mail.Message,javax.mail.Address[]) 


c)  动词- 介词
i.  对象状态比较
Java代码
java.lang.Comparable<E>#compareTo(E) 


ii.  抽象实现
Java代码
java.util.Formattable#formatTo(java.util.Formatter,int,int) 


d)  动词- 介词 - 名词
e)  名词
i.  状态转化
Java代码
java.util.Map<K,V>#values(), 
java.util.Collection<E>#iterator(), 
java.lang.Number#longValue(), 
java.util.Collections#singletonMap(K,V) 


ii.  用户状态表示
Java代码
java.lang.String#length(), 
java.lang.Object#hashCode(), 
java.util.Collection#size() 


f)  名词- 动词过去式
i.  事件回调

Java代码
java.awt.ActionListener#actionPerformed(java.awt.ActionEvent), 
javax.servlet.ServletContextListener# contextInitialized javax.servlet.ServletContextEvent) 

g)  介词- 名词
以介词- 名词组合的方法,
i.  状态转换
Java代码
java.lang.Object#toString(), 
java.lang.String#toLowerCase(), 
java.util.Collections#asList(T...) 

ii.  事件回调
Java代码
javax.jms.MessageListener#onMessage(javax.jms.Message) 

h)  形容词- 名词
i.  对象创建

Java代码
javax.xml.parsers.DocumentBuilderFactory#newDocumentBuilder() 

ii.  状态转换

Java代码
java.util.Collections#synchronizedList(java.util.List<E>), 
java.util.Collections#unmodifiableList(java.util.List<? extends E>) 

iii.  状态表示。
Java代码
java.util.concurrent.BlockingQueue#remainingCapacity() 


通过归纳的这些命名模式,相信能够给方法命名带来些灵感。
分享到:
评论

相关推荐

    Java面向对象设计最佳实践 - 方法设计(一).docx

    Java面向对象设计最佳实践主要关注方法的设计,这是创建高效、可维护和易于理解的代码的关键。方法作为类或对象的行为,它们定义了类的功能并利用多态性来增强设计的灵活性。以下是一些关于方法设计的重要实践: 1....

    Java面向对象设计最佳实践_-_内置类设计

    本文档“Java面向对象设计最佳实践—内置类设计”深入探讨了如何利用Java的内置类机制来优化代码结构,提高可读性和可维护性。以下是基于这个主题的详细知识点: 1. **内置类(Inner Classes)的概念**: 内置类...

    Java面向对象程序设计耿祥义版课件

    Java面向对象程序设计是编程领域中的核心概念,尤其在企业级应用开发中占据了主导地位。耿祥义版的课程着重讲解了这一主题,通过PPT和源码的形式,旨在帮助学习者深入理解并掌握Java的面向对象特性。下面将详细阐述...

    面向对象程序设计-Java(第二版)

    面向对象程序设计-Java(第二...以上只是Java面向对象编程的部分基础知识,实际的课程内容可能还会涵盖更多的高级主题,如反射、注解、设计模式等。通过深入学习这些内容,开发者可以构建高效、可维护的Java应用程序。

    Java语言与面向对象程序设计-印旻ppt

    5. **设计模式**:面向对象设计模式是解决特定问题的最佳实践,如单例模式、工厂模式、观察者模式等,这些模式在Java编程中广泛应用。 印旻的PPT将详细解释这些概念,并通过实例和练习帮助学习者理解和应用。通过...

    道法自然 面向对象实践指南6-6

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起,以实现代码的模块化和可重用性。在“道法自然 面向对象实践指南6-6”中,我们可能...

    Java面向对象(高级)- 单例(Singleton)设计模式

    单例设计模式是面向对象编程中的一种常见设计模式,它的主要目的是确保一个类在整个程序运行期间只有一个实例,并提供全局访问点。这种模式在Java中被广泛应用,尤其是在需要控制资源的共享,如数据库连接池,线程池...

    道法自然 面向对象实践指南7-7

    4. **设计模式**:在面向对象实践中,设计模式是解决常见问题的最佳实践。例如,工厂模式用于创建对象,单例模式确保一个类只有一个实例,观察者模式用于对象之间的通信等。理解并熟练运用这些模式,能提高代码的...

    Java面向对象程序设计教程

    Java面向对象程序设计是软件开发中的核心概念,它基于面向对象的思想,使代码更易于理解和维护。本教程旨在深入探讨这一主题,通过课件和源代码的结合,帮助学习者全面掌握Java的面向对象特性。 首先,我们来理解...

    JAVA面向对象第一期PPT和演示代码

    11. **设计模式**:面向对象设计模式是解决特定问题的通用、可重用的解决方案,例如单例模式、工厂模式、观察者模式等,它们是软件设计的最佳实践。 12. **演示代码**:资源中的演示代码提供了实际的编程示例,帮助...

    《Java面向对象程序设计》课本例子源代码

    《Java面向对象程序设计》是一本深入探讨Java编程语言中面向对象特性的教材,而提供的源代码是为了辅助读者更好地理解和实践书中的理论知识。这些源代码涵盖了类、对象、封装、继承、多态等核心面向对象概念,是学习...

    《Java面向对象程序设计》例子源代码

    《Java面向对象程序设计》是一本深入探讨Java编程语言中面向对象特性的经典教材。这本书通过丰富的实例,帮助读者理解并掌握如何利用Java进行高效、可靠的面向对象编程。以下是一些核心的知识点: 1. 面向对象基础...

    java面向对象基础、高级pdf讲义

    Java面向对象基础与高级知识点详解 Java是一种广泛使用的面向对象编程语言,它的设计哲学是“一切皆对象”。本讲义将全面深入地介绍Java面向对象的基础...这份讲义将系统性地引导你一步步掌握Java面向对象编程的精髓。

    Java面向对象教程 应用软件工程原理编程

    在应用软件工程原理编程时,我们需要遵循一系列最佳实践,如需求分析、设计、编码、测试和维护。需求分析是明确项目目标和功能的过程,设计阶段会根据需求创建软件架构和组件。编码阶段将设计转化为实际的代码,同时...

    《面向对象程序设计——Java语言》电子课件(程细柱PPT)

    通过这个电子课件,学习者不仅可以掌握Java语言的面向对象编程技术,还能了解到实际项目开发中的一些最佳实践。程细柱的讲解方式通常深入浅出,结合实例,有助于学习者快速理解和掌握知识要点。

    Java设计模式----通俗易懂版

    Java设计模式是软件工程中的一种重要思想,它总结了在解决特定问题时,程序员们反复使用的一些最佳实践和解决方案。这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者...

    面向对象程序设计(Java)教学课件

    15. 设计模式:设计模式是解决常见编程问题的最佳实践,例如工厂模式、单例模式、观察者模式等,它们在Java编程中广泛使用。 通过学习这些Java面向对象编程的核心概念,学习者可以更好地理解和应用Java语言,从而...

    Java EE设计模式_Spring企业级开发最佳实践-源代码

    Java EE设计模式与Spring企业级开发最佳实践是Java开发者深入理解框架和提升应用设计能力的重要领域。本资源包含了Spring框架中常见的设计模式及其在实际项目中的应用实例,这些实例是基于书中可运行的项目源代码。...

    java面向对象

    总的来说,Java面向对象编程提供了一种强大的工具集,允许开发者构建复杂、可扩展且易于维护的软件系统。掌握这些核心概念和机制,是成为一名合格Java开发者的基石。在实际开发中,结合设计模式和最佳实践,可以...

    道法自然-面向对象实践指南.pdf

    5. **最佳实践**:作者可能会分享面向对象编程的最佳实践,如避免过深的继承层次、合理使用接口、避免大粒度的对象、保持类的单一职责等,以提升代码的可读性、可维护性和可扩展性。 6. **实战案例**:书中可能会有...

Global site tag (gtag.js) - Google Analytics