代码大全2阅读笔记_第5章-软件构建中的设计(5.1,5.2)

代码大全2阅读笔记_第5章-软件构建中的设计(5.1,5.2)


)

前言

在小型的,非正式的项目里,很多设计都是开发人员在键盘前面完成的。这里的设计可能指的可能是就只是在编写具体代码前,先用伪代码写一个类的接口,也有可能是在编码之前画几个类的关系。
详细的设计能够让编码工作近乎机械化,但很少有如此完整的设计。

5.1 设计中的挑战

“软件设计”一词意味着去构思,创造或者发明一套解决方案,把一份计算机软件的规格说明书按要求转变成可实际运行的软件,设计就是把需求分析跟编码调试链连在一起的活动。好的高层次的设计能提供一个可以稳妥的容纳多个较低层次设计的结构。

设计也会面临大量的挑战。
1、设计是一个险恶的问题。
我们通常在完成了相当一部分的工作量之后,才会暴露出有些隐藏起来的,在设计初期并未发现的缺陷。

2、设计是个了无章法的过程(即使它能得出清爽的成果)
软件设计的成果应该是组织良好的,干净利落的,然而形成这个设计的过程却并非如此清爽。
说设计了无章法,原因有二:
其一是,在设计的过程中,我们往往会犯很多的错,而犯错却又是设计的关键。
其二是,我们很难界定设计是否“足够好”,因为设计永无止境,下一版永远比上一版更细节。对于这个问题,我们常用的做法是:当时间充裕时,我们能做得更好更详细,而时间紧迫时,往往是以完成为主。
3、设计就是确定取舍和调整顺序的过程
4、设计受到诸多限制
5、设计是不确定的。
6、设计是一个启发式过程
7、设计是自然而然形成的
设计并非是在某人的头脑中跳出来的,它是在不断的设计评估,非正式讨论,写实验代码跟修改实验代码中演化跟完善的。
几乎所有的系统在其开发的起始阶段都经历过某种程度的设计变更。

5.2 关键的设计概念

软件的首要技术使命:管理复杂度

1、偶然的难题跟本质的难题
软件开发就是不断的去发掘错综复杂,相互连接的整套概念的所有细节。其本质的困难来自很多方面:必须去面对复杂的,无序的现实关系;精确而完整的识别出各种依赖关系与例外情况;设计出完全正确而不是大致正确的技术方案

2、管理复杂度的重要性
在对导致软件项目失败的原因进行调查时,人们很少把技术原因归为项目失败的首要因素。项目失败的大多数都是由差强人意的需求,规划跟管理所导致的。但是,当项目确实由技术因素导致失败时,其原因通常是失控的复杂度。有关的软件变得极端复杂,让无法知道它究竟是做什么的。当没人知道对一处代码的改动会对其他代码带来什么影响时,项目也就快停止进展了。
在软件架构的层次上,可以通过把整个系统分解为多个子系统来降低问题的复杂度。人类更易于理解许多项简单的信息,而不是一项复杂的信息。所有软件设计技术的目标都是把复杂问题分解成简单的部分。子系统间的相互依赖越少,你就越容易在同一时间里专注问题的一小部分。

3、如何应对复杂度

高代价、低效率的设计源于下面三种根源:

  • 用复杂的方法解决简单的问题;
  • 用简单但错误的方法解决复杂的问题;
  • 用不恰当的复杂方法解决复杂的问题。

管理复杂度设计范畴内的特征:

  • 最小的复杂度(Minimal complexity) 设计的首要臼标就是要让复杂度最小。要避免做出“聪明的”设计,因为“聪明的”设计常常都是难以理解的。应该做出简单且易于理解的设计。
  • 易于维护(Ease of maintenance) 易于维护意味着在设计时为做维护工作的程序员着想。
  • 松散耦合( loose coupling)松散耦合意味着在设计时让程序的各个纽成部分之间关联最小。通过应用类接口中的合理抽象、封装性及信息隐藏等原则,设计出机互关联尽可能最少的类。减少关联也就减少了集成、测试与维护时的工作量。
  • 可扩展性( extensibility)可扩展性是说你能增强系统的功能而无须破坏其底层结构。你可以改动系统的某一部分而不会影响到其他部分。
  • 可重用性〈reusability) 可重用性意味着所设计的系统的组成部分能在其他系统中重复使用。
  • 可移植性( portability) 可移植性指的是要使它能很方便地移植到其他环境中。
  • 标准技术( Standard techniques) 要尽量用标准化的、常用的方法,让整个系统给人熟悉的感觉。

设计的层次

第1层:软件系统
第2层:分解为子系统或包
第3层:分解为类
第4层:分解成子程序
第5层:子程序的内部的设计

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值