《代码大全》学习摘要(五)软件构建中的设计(下)

这次的学习内容主要是设计过程中的启发式方法和设计实践中的一些经验。

对于具体的编程工作来说,期待确定性的行为是很正常的,由于软件设计是非确定性的,灵活熟练地运用一组有效的启发方法(试探法),便成了合理的软件设计的核心工作。

1、在确定设计方案时,首选且最流行的方法是面向对象的方法,此方法的要点是辨别现实世界中的对象以及人造的对象。这个过程分为以下几步:辨识对象及其属性、确定可以对各个对象进行的操作、确定各个对象能对其他对象进行的操、确定对象的哪些部分对其他对象可见、定义每个对象的公开接口。

2、抽象是一种能让你在关注某一概念的同时可以放心地忽视其中一些细节的能力。人们一直在使用抽象,当你把一个东西称为“房子”而不是玻璃、木材和钉子构成的组合体时,你就是在用抽象了。以复杂度的观点来看,抽象的主要好处在于它使你能忽略无关的细节。优秀的程序员会在子程序接口的层次上、在类接口的层次上以及包接口的层次上进行抽象,这样才能更快、更稳妥地进行开发。

3、封装填补了抽象留下的空白。抽象是说:“可以让你从高层的细节来看待一个对象。”而封装则说:“除此之外,你不能看到对象的任何其他细节层次”。

4、当继承能简化设计时就继承,继承的好处在于它能很好地辅佐抽象的概念。继承是面向对象编程中最强大的工具之一。如果使用得当,它能带来极大的益处,然而如果使用不当,它也有极大的弊端。

5、信息隐藏软件的首要技术使命中格外重要的一种启发方法,因为他强调的就是隐藏复杂度。在设计一个类的时候,一项关键性的决策就是确定类的哪些特性应该对外可见,哪些特性应当隐藏起来。类很像是冰山:八分之七都是处于水面之下,而你只能看到水面上的八分之一。信息隐藏中所说的秘密主要分为两大类:隐藏复杂度、隐藏变化源。信息隐藏的障碍包括:信息过度分散、循环依赖、把类内数据误认为全局数据、可以觉察的性能损耗。

6、找出容易变化改变的区域,适应这些变化。过程包括:找出看起来容易变化的项目、把容易变化的项目分离出来、把看起来容易变化的项目隔离开来。常见的容易变化的区域包括业务规则、对硬件的依赖性、输入和输出、非标准的语言特性等。

7、保持松散耦合。模块之间的好的耦合关系会松散到恰好能使一个模块能够很容易地被其他模块使用,尽量使你创建的模块不依赖或很少依赖其他模块。耦合的种类包括简单数据的参数耦合、简单对象耦合、对象参数耦合(更紧密一些)、语义上的耦合(应尽量避免)。

8、设计模式精炼了众多现成的解决方案,可用于解决很多软件开发中最常见的问题。大多数问题都和过去遇到过的问题类似,可以使用类似的解决方法或者模式加以解决。设计模式的好处是:设计模式通过提供相现成的抽象来减少复杂度、设计模式通过把常见解决方案的细节予以制度化来减少出错、设计模式通过提供多种设计方案而带来启发性的价值、设计模式通过把设计对话提升到一个更高的层次上来简化交流。

一些良好的设计实践:

1、设计是一种迭代过程。当你在备选的设计方案之中循环并且尝试一些不同的做法时,你将同时从高层和底层的不同视角去审视问题。这种高低层次之间的互动被认为是一种良性的原动力,他所创造的结构要远远稳定于单纯自上而下或者自下而上创建的结构。当你首次尝试得出了一个看上去足够好的设计方案后,请不要停下来!第二个尝试几乎肯定会好于第一个。

2、分而治之,把程序分解为不同的关注区域,然后分别处理每一个区域。如果你在某个区域里碰上了死胡同,那么就迭代。

3、采用自上而下自下而上的设计方法。自上而下是从一般的类出发,一步步地把他们分解为更具体的类。自下而上是从知道的东西入手,找出具体的对象和职责,再找到通用的对象,逐步向上。两种方法各有优缺点,但这两种方法不是相互排斥的——你会收益于两者的相互协作

4、建设实验性原型可以帮助判断一种设计方法是否奏效,内容是写出用于问题特定设计问题的、量最小且能够随时扔掉的代码。

5、要学会合作设计,三个臭皮匠顶得上一个诸葛亮。

6、要做多少设计取决于团队的经验、系统的预定寿命、得到的可靠度、项目的规模等。

《代码大全》学习摘要(五)软件构建中的设计(下),布布扣,bubuko.com

时间: 2024-10-08 20:27:16

《代码大全》学习摘要(五)软件构建中的设计(下)的相关文章

软件构建中的设计(一)

设计中的挑战 "软件设计"意味着去构思.创造或发明一套方案,把一份软件的规格说明书变成功能可运行的软件.设计就是把需求分析和编码调试连起来的活动.好的高层次设计能提供一个稳妥容纳多个较低层次设计的结构.好的设计对于小型项目非常有用,对于大型项目就更是不可或缺. 设计是一个险恶的问题 设计是一个险恶的问题."险恶"问题就是那种只能通过解决或部分解决才能被明确的问题.说通俗一点,就是你必须先把这个问题解决一遍以便能够明确地定义它,然后再次解决问题,从而形成一个可行的方案

软件构建中的设计

软件的首要技术使命就是管理复杂度.以简单性作为努力目标的设计方案对此最有帮助. 简单性可以通过两种方式来获取:一是减少在同一时间所关注的本质性复杂度的量,二是避免生成不必要的偶然的复杂度. 设计是一种启发式的过程.固执于某一种单一方法会损害创新能力,从而损害你的程序. 好的设计都是迭代的.你尝试设计的可能性越多,你的最终设计方案就会变得越好. 信息隐藏是个非常有价值的概念.通过询问"我应该隐藏些什么?"能够解决很多困难的设计问题.

代码大全学习笔记(二):第4-5章

1. 主要的构建实践 2. 软件构建中的设计是一个确定取舍和调整顺序的过程,处处都有tradeoff 3. 软件的首要技术使命就是 管理复杂度 将整个系统分解为多个子系统,子系统高内聚.低耦合,尽量减少在特定时间段所面临的复杂度,从而减少脑力负担 4. 高质量设计的具体特征: (1)   最小的复杂度:简洁.易于理解 (2)   易于维护:编程规范:命名.注释等 (3)   松散耦合 高内聚:类接口合理抽象.封装.信息隐藏 低耦合:减少各组成部分之间的关联 (4)   可扩展性 (5)   可重

代码大全学习笔记(什么是构建)

  构建有时也被认为是"coding"或者"programing".编码算不上是最贴切的词,因为它有一种"把已经存在的设计机械化的翻译成计算机语言"的意味,而构建并不是机械化的,需要可观的创造力和判断力,人们常常用编程代替构建.   构建的步骤: 1.验证前面的工作已经完成(如定义问题,需求分析). 2.确定如何去测试所写的代码. 3.设计并编写类或者子程序. 4.创建并命名变量和具名常量. 5.选择控制结构,组织语句块. 6.对你的代码进行单元

代码大全学习笔记(一):第1-3章

1. 本书全面阐述 软件构建活动的方方面面 2. 软件开发过程中的各种活动: (1)   定义问题 (2)   需求分析 (3)   规划构建 (4)   软件架构 (5)   详细设计 (6)   编码与调试 (7)   单元测试 (8)   集成测试 (9)   集成 (10)  系统测试 (11)  保障维护 3. 发现错误的时间要尽可能接近引入该错误的时间 4. 软件开发两种方式: (1)迭代式开发:需求不稳定或理解暂时不透彻,变动较多 (2)序列式开发:需求比较稳定,长期可预测性 5.

jquery学习(五)-jquery中的事件

参考锋利的jQuery第二版 1.加载DOM (1)执行时机 若想为某个DOM元素绑定事件(或者是其他操作),这需要文档加载完成后才能进行绑定(或其他操作),否则会报错.所以对于这种情况,javascript提供了,window.onload方法:而jQuery提供了,$(document).ready()(简写为$())方法. 虽然这两个方法有类似的功能,但是执行的时机方面还是有区别的.Window.onload方法是在网页所有的元素(包括元素的所有关联文件)完全加载到浏览器后才能执行,即ja

代码大全学习笔记(四):第7章--设计高质量的子程序

1. 子程序是为实现特定目的而编写的一个可被调用的方法(method)或过程(procedure),例如c++中的函数.java中的方法 子程序避免代码段重复,提高代码可读性,同时方便代码改动 2. 好的子程序名字 (1)   避免使用无意义.模糊不清的动词,例如processInput() (2)   根据需要确定子程序名字的长度,以清晰易懂为标准 (3)   子程序名称一般为 动词加宾语的形式 (4)   准确使用对仗词提供完整接口 3. 子程序的最佳长度 理论上最佳长度为50-150行,一

《Android第一行代码》学习记录02 - 在活动中使用Menu

必要步骤: 在res目录下新建menu文件夹,并新建菜单文件 在菜单项中添加菜单项,类似如下代码: <menu xmlns:android=”http://schema.android.com/apk/res/android”> <item android:id=”@+id/itemId1” android:title=”itemName1”/> <item android:id=”@+id/itemId2” android:title=”itemName2” /> &

六十五、SAP中通过BREAK-POINT下断点,进行调试

一.代码如下,有2个断点的按钮,可以可以写入BREAK-POINT人工断点 二.运行之后,程序会被断下来, 四个执行按钮,意思分别为:单步进入子程序,单步不进入子程序,返回外面,执行到断点处 三.我们双击变量中的ITAB5 四.在结构中可以看到他是由2个成员组成的结构体 五.我们双击内表图标 六.可以看到,此处为一个内表 七.遇到问题要沉着冷静,多调试. 原文地址:https://www.cnblogs.com/tianpan2019/p/11229187.html