《敏捷软件开发》学习笔记:敏捷设计原则

《敏捷软件开发》学习 笔记:敏捷设计原则

2011-2-15

什么是敏捷设计

遵循敏捷实践去发现问 题;应用设计原则去诊断问题;应用适当的设计模式去解决问题。

软件开发这三个方面件 的相互作用就是设计。

单一职责原则 SRP

就一个类而言,应该仅 有一个引起它变化的原因。

把职责定义为“变化的 原因”。如果有多于一个动机去改变一个类,这个类就具有多于一个的职责。

开放封闭原则 OCP

描述:软件实体应该是 可以扩展的,但是不可修改的。

OCP 是面向对象设计的核 心所在。

实现这个原则的关键是 抽象。

模块依赖于一个固定的 抽象体,它对于更改是关闭的。通过从这个抽象体派生,可以扩展此模块的行为。

 

首先判断出可能发生的 变化,然后构造抽象隔离这些变化。

抽象不能滥用,应该仅 仅对频繁变化的那些部分做出抽象。

Liskov替换原则

原则描述

LSP:子类型 (subtype)必须能够替换它们的基类型 (base type)

OCP OOD 中很多说法的核心。 LSP 是使 OCP成为可 能的主要原则之一。

子类型的可替换性,使得使用基类类型的模块在无需修改的情况下就可以扩展。

 

可替换性并非可以轻易获得,依赖于客户的合理假设

IS-A的含义过于宽泛,不能用来判断可替换性。 IS-A关系是就行为方式而言的,行为方式是可以 进行合理假设的,是客户程序所依赖的。

一个模型,如果孤立的看,并不具有真正意义上的有效性。模型的有效性只能通过它的客户程序来表现。必须根据使用者 的合理假设进行审视。

 

基于契约的编程,可以使合理的假设明确化

契约是通过为每个方法声明的前置条件和后置条件来制定的。

可替换性要求:子类型的前置条件不能更强,后置条件不能更弱。

 

修改设计,符合 LSP

如果 IS-A关系不能符合 LSP,需要进行设计的修改:提取公共部分作为基类。

 

违反 LSP 的用法

派生类中的退化函数;

从派生类中抛出异常;

依赖倒置原则 DIP

高层模块不应该依赖于 底层模块。二者都应该依赖于抽象。

抽象不应该依赖于细 节。细节依赖于抽象。

 

倒置的含义:底层反而 依赖于在高层中声明的抽象服务接口。接口的所有权属于高层。这和传统的过程化程序设计所创建出来的依赖关系结构相反。


依赖于抽象: 程序中所有的依赖都应该终止于抽象类或者接口。把不稳定隐藏在抽象后面,隔离变化。

接口隔离原则 ISP

不应该强迫客户依赖与 它们不用的方法。

设计中需要避免 fat class

如果客户程序是分离 的,接口也应该保持分离。否则,不同客户之间会产生依赖。

存在的约束:有时出于 实现的需要,一些无关的接口必须放在一个对象中。

解决:通过委托、或者 通过该对象的基类去访问。类似于 Adapter 模式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值