0
点赞
收藏
分享

微信扫一扫

1141_SICP学习笔记_作为黑盒抽象的函数

Mhhao 2022-02-12 阅读 37
lispsicp

    全部学习汇总:GitHub - GreyZhang/g_SICP: learn SICP and hack lisp.

    首先得注意到,前面求解平方根的重复过程其实是递归的过程。程序的设计依赖于自己本身的功能,在执行的过程中需要不断进行自欧文调用。其实,这种方式倒是让我觉得有那么一点反馈调节的意思。另外一点就是这个平方根的求解过程其实是一系列函数的组合,这个也与前面我自己想到的整体到局部的设计其实算是同样的描述。

    这里有一个澄清说明还是很有参考的意义的,在设计前面的平方根求取的时候用到了几个函数。软件的设计其实是把一个功能拆分成了几个。但是,这种分解的策略关键点其实并不是在于把一个功能拆分成不同的功能,毕竟如果强制进行拆分的话,一个函数可以十行十行进行拆分,一个大型程序可以拆分成若干个函数。这样的意义不是很大。拆分的前提应该是拆出来的这个功能可以成为一个独立的甚至是可以不断重用的模块。另一点就是,这种黑盒的设计应用很可能是在前面学习的过程中考虑到的总体描绘阶段使用。在这个阶段,我们可以假设一些功能的存在而不用过多思考其实现的方式。函数模块的设计可以隐藏细节,这也带来了另一个思考点:如果使用C语言进行类似的设计,其实尽量应该避免使用全局量进行不同函数之间的交互。或者说,不同的函数尽量不要用同一个变量,不然功能的耦合性就会增强。而软件的理解就不容易把一些函数的调用直接考虑成黑盒。

    虽然这部分的标题叫做局部名称,但是其实跟局部变量没有什么关系。这里主要是讲了形参以及实参的关系,而不是局部量的表述。而形参,只有在有相应的信息与之绑定的时候才会有一个作用域发挥其相应的作用。

    最初的程序实现是一组函数,可能存在常用函数的冲突问题。比如,足够好的方法可能在很多方面都用得到,但是判断的内容却不同。这样,设计不同的软件功能的时候就可能出现冲突。而上面给出了一种不冲突的方式,那就是把这些内容做成函数中的子函数。这样,其作用域也就限制在了一个函数的内部。

    进一步,由于每一个函数都用到了相同的参数。因此这里的设计可以直接省略一个参数,直接使用相同的参数。这种设计的确是简单了不少,不过想来在C语言的设计中实现起来或许还是偏难。但是,后面这两种无论是哪一种实现,其实更加进一步隐藏了设计的细节,让整个的函数设计更加黑盒化了。

举报

相关推荐

0 条评论