Java面向对象设计最佳实践 - 概述


根据笔者的经验,计划编写 “Java 面向对象设计最佳实践” 专题,通过 用理论和实战的方法,试图介绍Java 面向对象设计,希望大家喜欢。本文是开章概述,由于经验和精力有限,欢迎大家指正和共同交流学习。


言归正传,Java 语言作为一门“ 全面 ”面向对象的编程语言,提供了面向对象的四种基本性质: 抽象性 封装性 继承性 多态性 。同时,不得不指出的是,这里的“全面”是狭义的,缘于Java 编程语言没有放弃面向过程语言的原生类型,并且有限性地支持 AOP (在 JDK 的 API 层次,仅支持接口拦截)。综上所述,对于这种狭义的“全面”,在面向对象设计的时,尽量全面地考虑。


通常来说,软件设计质量的标注可以通过“ 高内聚- 低耦合 ”来衡量。内聚(Cohesion )是一个模块内部各成分之间相关联程度的度量 。而 耦合是对某元素与其它元素之间的连接、感知和依赖的量度。 在设计阶段,开发人员和系统架构师应该考虑。


通常地偏好“实现接口”,而非“继承类”。接口作为一种契约,规约了类与类或者模块和模块之间的通讯语义,而不关心具体实现。主要体现以下设计的原则,分别是: 易读性 易用性 扩张性 单一性 安全性 易测性 容错性。


易读性:简单地来说,容易阅读,方便理解。无论是面向实现(过程)编程,还是面向接口编程,如果把握好良好的名称设计和文档,都不难做到易读性。不过面向接口关注的是契约- 语义,而不是实现。因此尽量地利用面向接口。题外话, 不要过度迷信面向对象 务实大于花哨


易用性:在易读性的前提上,对象结构方便开发和维护。三分开发,七分维护。因此,在开发阶段应该为方便后期维护做好铺垫。


扩张性:也可以称为弹性(灵活性或者易变性),弹性的实现,可以利用编程语言的特性,比如Java 中的 接口编程 ( 多态和抽象 )和 泛型设计 (Java5 以上支持)。


单一性:通常,一个类或者模块只做“份内”之事,增强内聚性,减少耦合。在政治制度上,“三权分立”很好地诠释了这种思想。在面向对象上,具体体现在, 结构单一 (系统架构角度), 职责单一 (需求角度), 行为单一 (实现角度), 依赖单一 (通讯角度)等。


安全性:隶属于非功能之一,是设计和开发人员较容易忽略的方面。主要分为,操作系统安全、应用程序安全和社会工程学安全(不是讨论的重点)。Java 编程语言,一般保证了操作系统安全(除非恶意修改安全沙箱),主要是落到应用程序安全。常见的应用程序安全性问题, 类型安全 (错误类型转换、动态合成类等)、 线程安全 (数据一致性和死锁等) 、 资源安全 (内存、外存和CPU 等资源) 数据安全 (数据封装、零时和持久数据、单一和分布式事务,通讯数据转换和丢失等)等


易测性:结构易于测试。在面向对象编程中,一般来说,方法作用于对象状态行为表现和控制,构造器则是对象状态初始设定。在测试中,良好的上下文设计至关重要,比如: 合理的参数数量和类型 参数职能单一 (参数类型和状态不要太复杂)、 参数依赖简单 (尽量不要依赖第三方API )和 易于构造 (或模拟)、 返回值明确并且规约 模块内部结构简单 。良好粒度的设计是便于测试的基础。同时,测试优先(TDD) 的方法可以重构模块。


容错性:一般的过程:错误事件产生,错误处理,现场(数据或者状态)恢复。目前,许多框架提供了统一便捷的错误(异常)处理方式,而大多数公司也有自己的处理流程。其目的是,对于少数系统界别和大多数应用级别错误(异常)发生,不影响系统整体运行,提高系统可用性和友好性。在JVM 应用程序中,主要是不中断主线程的运行。在设计时,可以考虑 分发式 (利用异步或者多线程)方法来处理错误(异常),恢复现场等。 容错性设计是非常苦难的,其原因是 正确运行通路是少数 ,而 异预测常情况是困难的 尤其在现场恢复体现 TDD开发模式和契约编程可以提升系统容错性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值