代码大全第二版读书笔记 第二部分-创建高质量的代码 五、软件构建中的设计

来源:互联网 发布:apache三种工作模式 编辑:程序博客网 时间:2024/05/16 16:08

软件构建中的设计(P73)

软件开发需要设计,如同建设楼房一般,只有画好草图,才知道下一步改怎么做

1.设计面临的问题

软件设计不是一个简单的问题,其中面临着诸多挑战。对其描述有:(P74)

  • 险恶
  • 了无章法
  • 是一个确定取舍和调整顺序的过程
  • 应当受到诸多限制
  • 多种方法的
  • 启发式的(经验堆积的,而且充满了很多“试试没准行”的特点)
  • 自然而然发展而成

2.关键的设计概念

1)复杂度(P77)

管理复杂度是软件开发中最为重要的技术话题。在我看来,软件的首要技术使命便是管理复杂度,它实在是太重要了。

2)理想的设计特征(P80)

最小的复杂度、易于维护、松散耦合、可拓展性、可重复使用性、高扇入、低扇出、可移植性、精简性(加进来后会损害什么呢)、层次性、标准化(易懂)

3)设计的层次(P82)

    1. 软件系统
    2. 分解为子系统或包
      特别需要注意的是,不同子系统不应该拥有相互通信的能力,且设计应该是无环图
    3. 分解包中的类
    4. 分解为类中的数据和子程序
      隐藏信息等工作
    5. 子程序内部
      编写伪代码、选择算法、组织子程序内部代码块

3.设计构造块:启发式方法

1)寻找现实世界的对象(P87)
  • 辨识对象及其属性
  • 确定可以对各个对象进行的操作
  • 确定各个对象能对其他对象进行的操作
  • 确定对象的哪些部分对其他对象可见
  • 定义每个对象的公开接口
2)形成一致的抽象(P89)
  • 用一种简化的观点来考虑复杂的概念
3)封装实现细节(P90)
  • 不只是让你能用简化的视图来看复杂的概念,同时还不能让你看到复杂概念的任何细节。
4)当继承能简化设计时就继承(P91)
  • 对大同小异的对象继承实现,简化编程
5)藏住秘密(信息隐藏)(P92)
  • 好的类接口就像是冰山的尖儿一样,让类的大部分都不会暴露出来——只能看到水上的1/8
  • 问题1:“这个类需要隐藏些什么?”
  • 问题2:“我该隐藏些什么?”
6)找出容易改变的区域(P97)
  • 适应可能变化的区域,找出并隔离
7)保持松散耦合(P100)
8)通用的设计模式(103)
  • Abstract Factory
  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Factory Method
  • Iterator
  • Observer
  • Singleton
  • Strategy
  • Template Method

4.设计实践

1)迭代(P110)
  • 设计师一种迭代过程。你并非只能从A点进行到B点,而是可以从A点到达B点,再从B点返回到A点
2)分而治之(P111)
  • 把程序分解为不同的关注区域,然后分别处理每一个区域。如果碰上了死胡同,那么就迭代
3)自上而下和自下而上的设计方法(P111)
  • 自上而下——从抽象到具体,以大化小
  • 自下而上——从细节到整体,紧凑合理的系统,新系统的设计
  • 相互协作,反复试验
4)建立实验性原型(P114)
  • 针对“险恶”的情况,是一种“写出用于回答特定设计问题的、量最少且能够随时扔掉的代码”
  • 用prototype前缀标注,用于提醒后期拓展
5)合作设计(P115)
6)记录你的设计成果(P117)
0 0