`

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

阅读更多

    这篇文章介绍方法范围设计,这种设计是API开发人员容易忽视的部分,也是相对困难和耗时的。 所谓范围,这里分为两个方面:第一,物理范围;第二,逻辑范围。

1.什么是物理范围
主要是指访问范围。Java编程语言提供了4种访问限定修饰符:public、protected、(package public)、private,这四个访问限定符的访问权限角度逐渐递减。这些修饰信息保存在类的字节码中,可以通过编译时确定和验证,这也是称为物理 范围的原因。

2.什么是逻辑范围
如果说物理范围限于访问范围的话,那么逻辑范围更加广阔,包括方法返回类型、参数类型、参数数量等。具体的介绍在下篇详细解释。

3.怎么设计范围
通过简单的解释两种范围的意义,那么下面关注怎么来设计范围。好的设计应该充分地发挥面向对象的复用特性。那么满足了复用特性的API设计就是好的设计 吗?不一定。在面向对象设计原则中,常常挂在嘴边的“高内聚、低耦合”,为了降低耦合性,应该使API之间尽可能的少了解。

例如:测量人体重的辅助类-PersonWeightCalculator,其中定义了calculate方法,传递一个Person对象作为参数,返回 double类型单位的重量值。按照业务逻辑的规定,需要了解人的性别,身高。设计中PersonWeightCalculator必须能访问 Person的gender和height的状态信息,在可能的情况中,还能访问其他无关的Person的属性信息,比如name信息。那么,这种情况就 是一种不好的“暴露”设计。留下的问题是怎么修改?
有人可能会说,既然PersonWeightCalculator耦合了Person对象,那么把Person参数替换成两个参数height和 gender。这样减少了Person类型依赖,同时,也是“API之间知道最小化”。其实,这不是一个很好的方法,尽管不少API开发人员是这么做的。 主要缺点有两个:第一,破坏了“源代码兼容性”。良好的API设计应该注意兼容性,其中有“源代码”和“二进制”兼容性。所谓的“源代码兼容性”是指,在 API的修正和增进前后,API的方法签名或者其他定义保证语法和语义的兼容。反之,则是不兼容。回到例子中,通过修改方法列表,其他调用其的地方,都需 要作出相应的修改,否则编译时错误。可以通过“开闭原则“(对增加开放,对修改关闭)来解决,添加一个新的带height和gender参数的 calculate方法,标记原来方法为Deprecated;第二,参数数量的问题,当前的算法只需要两个参数,那么怎么扩展?还是添加一个新的方法? 当然可以这么做,不过只依赖Person对象有何不可?卖一点关子,这个内容在下篇详细介绍。

笔者的做法是,如果有必要的话,把PersonWeightCalculator类重构到Person类同包下。改变包的组织结构,对于其他调用者来说, 仅仅需要通过IDE重构功能重新导入即可,不需要改变实现代码。然后,开放height和gender属性为package public。这样做的好处是,只改变需要Person的属性的开放性,不修改业务逻辑。这样避免了修改后的风险,同时测试用例也不需要修改测试逻辑。

在JDK的API中,有不少的这样做法,比如java.lang.ThreadLocal和java.lang.Thread。

  总之,方法范围设计是很困难,不但需要很好地把握编程语言,而且全局地思考、设计和实现。这是一个过程,需要大量的时间,思考和学习,还有实践。

分享到:
评论

相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    设计模式是软件开发过程中经过大量实践和理论提炼出的解决方案模板,它们代表了在特定上下文中解决常见问题的最佳实践。设计模式并非具体的代码,而是描述在特定情境下,如何设计类和对象之间交互的一种通用语言。...

    Java面向对象程序设计教程

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

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

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

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

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

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

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

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

    15. 设计模式:设计模式是解决常见软件设计问题的最佳实践。如工厂模式、单例模式、观察者模式、装饰器模式等,都是面向对象编程中的重要工具。 以上就是Java面向对象的基础和高级知识点,通过深入学习和实践,...

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

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

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

    Java面向对象教程是深入理解Java编程的关键,它涵盖了软件工程中的基本原则,并将其应用于实际编程实践。面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它基于“对象”的概念,这些对象封装了...

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

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

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

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

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

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

    java面向对象

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

    java面向对象编程思想2版本+源代码 (孙卫琴)

    这本书的第二版本基于2017年的最新技术和最佳实践进行了更新,旨在帮助读者掌握Java编程的核心技巧和思维方式,从而在实际开发中更加得心应手。 1. **面向对象编程基础** - 类与对象:Java中的所有数据结构都通过...

Global site tag (gtag.js) - Google Analytics