zoukankan      html  css  js  c++  java
  • 构建之法阅读笔记06

    这次主要读了构建之法的第十一章:分析和设计方法

          其实在上课的时候,就特别想了解这一章节的主要内容了。当时老师讲到了鸡兔同笼的问题,这种问题的解法其实很多,这就考验了我们分析问题的能力。如果仔细去思考,除了列出公式之外,小时候还曾听过这样的方法:就是让所有动物先立起一只脚,将所有脚的数量减一,再立起一只脚,再减一。因为兔子有四只脚,而鸡只有两只脚,所以这时,鸡就已经一屁股坐到地上,而兔子没有,这样一来,剩下的所有脚便都是兔子的了。

          问题虽然简单,其实里面有一个很浅显的道理。只要思路找到了,便可以将复杂的问题简化。列出公式和矩阵就是思路的构建方法之一。所以我们要学会去分析问题,在解决问题的时候分析问题和设计思路往往最为重要。但是,我认为,如果要有这样的能力,首先,应该积累觉绝对的代码量。其次,应该掌握一定的方法,方法和经验往往是解决问题最快的出路。第三,理应有一颗热衷于探索并且不屈不挠的心。以下是我从书里找到的一些分析和设计的方法:

    图形建模表达实体和实体之间的关系:

     1.思维导图:“一图胜千言”,人们经常用图形来帮助他们了解概念,强化记忆。思维导图是其中的一个例子。思维导图没有严格的语法定义,一般来说是从图形的正中开始写下一个概念,然后按照绘图者所关心的属性扩展,几乎每个人都能马上开始画图。这个看似简单的工具其实很适合团队一起讨论和理解核心概念——例如,我们的主要用户有什么特点、什么需求。

    2.实体关系图:如果我们着重于表达现实世界中的实体和它们之间的关系,那么实体关系图ERD是最自然的表达方式。

    书中所提到的一些设计方法:

    1.形式化的方法
    很多软件需求(例如计算机语言的编译器)可以抽象为对符号的运算和变换,很多软件的某些核心功能需要严密地验证,保证没有问题。一些科学家一直在努力,希望用无歧义的、形式化的语言描述我们要解决的问题,然后用严密的数学推理和变换一步一步把软件实现出来,或者证明我们的实现的确完整和正确地解决了问题。在这个领域一个比较成熟和经过实践考验的方法是Vienna DevelopmentMethod(VDM)

    2. 文学化编程
    程序员在写程序的时候,要理解在文档中的需求,同时还要在程序里写相关的注释,这些不同目的的“写作”各有价值,但是一旦需求或程序发生变化,这些不同的文档很难保持同步。更不用说程序员最常见的毛病“我以后会加上注释的……”Donald Knuth在20世纪70年代末开始尝试并提倡Literate Programming的思想并在自己的软件项目中身体力行。这一方法和常见的“写程序,时不时加上一些注释”相反,它是“写文档,时不时有些代码”。它使用了宏(Macro)来进行抽象和信息隐藏。通过工具的支持,它的源代码可以提取出让计算机编译执行的部分以及文档。

          对于构建之法这本书自然只是学了一些皮毛,不过在接下来的时间里,必然细细研读,这对于正走在程序员之路上的我来说,必定获益匪浅。

  • 相关阅读:
    广域网(ppp协议、HDLC协议)
    0120. Triangle (M)
    0589. N-ary Tree Preorder Traversal (E)
    0377. Combination Sum IV (M)
    1074. Number of Submatrices That Sum to Target (H)
    1209. Remove All Adjacent Duplicates in String II (M)
    0509. Fibonacci Number (E)
    0086. Partition List (M)
    0667. Beautiful Arrangement II (M)
    1302. Deepest Leaves Sum (M)
  • 原文地址:https://www.cnblogs.com/hph1313/p/5589800.html
Copyright © 2011-2022 走看看