《编程原本 》一1.6 规范过程

简介: 本节书摘来自华章出版社《编程原本 》一书中的第1章,第1.6节,作者(美)斯特潘诺夫(Stepanov, A.),(美)麦克琼斯(McJones, P.),更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.6 规范过程

一个过程是规范的,当且仅当将其输入替换为任何相等的对象,它给出的结果
与以前相等.就像值类型一样,在定义一个对象类型时,必须在如何实现类型里的相等,以及哪些过程应该具有规范性方面有一种统一的考虑.练习
1.1请将规范的概念扩展到过程的输入输出对象(即那些既读又修改的
对象).虽然规范性应该是最基本的选择,也有些因素要求有非规范过程.
1.返回一个对象的地址的过程;例如,内部函数addressof.

2.返回由真实世界的状态确定值的过程,如返回时钟或其他设备的值.

3.返回依赖于自己拥有的状态的值的过程;例如伪随机数生成器.

4.返回与一个对象的表示相关的某些属性的值的过程,例如为数据结构保留的存储量.

函数式过程(functionalprocedure)是在规范类型上定义的一类规范过程,它们有一个或几个直接输入和一个作为过程结果的返回值.函数式过程的规范性使我们可以采用两种技术为其传递输入.如果参数的规模较小,或者过程里需要参数的可修改拷贝,那么可以用值的方式传递它,做出参数的一个局部拷贝.否则可以用常量引用的方式传递它.函数式过程可以实现为C++的函数、函数指针或者函数对象.4
下面是一个函数式过程:

int plus 0(int a, int b) 
{ 
return a + b; 
}

下面是一个语义等价的函数式过程:

int plus 1(const int& a, const int& b) 
{ 
return a + b; 
}

下面过程的语义也与上面两个等价,但它不是函数式的,其输入和输出参数都是间接传递的:

void plus 2(int* a, int* b, int* c) 
{ 
*c    = *a + *b; 
}

在plus2里,a和b是输入对象,c是输出对象.函数式过程的概念是语法性质而不是语义性质:按我们的术语,plus2是规范的但不是函数式的.
4.C++ 的函数不是对象,不能作为参数传递;C++函数指针和函数对象是对象,可以作为参数传递.
一个函数式过程的定义空间(de.nitionspace)是其预设的可能输入值集合的一个子集.函数式过程对于其定义空间里的输入总终止;而对超出其定义空间的输入,它可能不终止,也或许不能返回有意义的值.
同源的(homogeneous)函数式过程的输入对象都属于同一个类型.同源函数式过程的定义域(domain)是其输入的类型.我们并不把非同源的函数式过程的定义域说成是其输入类型的直积,而是个别地讨论过程的各个输入类型.
一个函数式过程的值域(codomain)是其输出的类型.函数式过程的结果空间(resultspace)是其值域的一个子集,是该过程从其定义空间取得输入后返回的所有可能值的集合.
考虑函数式过程

int square(int n) { return n * n; }

其定义域和值域都是int,其定义空间是平方值在此类型里可以表示的所有整数的集合,而其结果空间是这个类型里可以表示的平方整数的集合.

练习1.2假设int 是32-位的模二补码类型,请精确给出上面函数式过程的定义空间和结果空间.

相关文章
|
XML JSON 算法
【软件设计师备考 专题 】编写内部设计文档:构件划分图和接口
【软件设计师备考 专题 】编写内部设计文档:构件划分图和接口
52 0
|
4月前
|
数据安全/隐私保护
如何把DDD应用到实际项目中来,例子中需要包含具体的领域模型设计,这么做的理由,以及一位这个设计而引进的坑
如何把DDD应用到实际项目中来,例子中需要包含具体的领域模型设计,这么做的理由,以及一位这个设计而引进的坑
|
3月前
|
安全 前端开发 测试技术
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
【测开方法论】当老功能代码命名不规范的时候...如何安全增加新功能
|
10月前
|
设计模式 Java
【Java设计模式 规范与重构】 一 重构的目的、内容、时机、方法
【Java设计模式 规范与重构】 一 重构的目的、内容、时机、方法
119 0
|
容器
框架设计思维符合语义即可使用,而不用关心底层的实现
框架设计思维符合语义即可使用,而不用关心底层的实现
99 0
框架设计思维符合语义即可使用,而不用关心底层的实现
|
设计模式 Java 程序员
怎样才能写出规范的好代码?
最近发现一件事情,自己写的代码和公司里工作5到10年的前辈写的代码虽然功能一样,但是他们的代码更规范,更优雅。比如有时候我会给一个需求写一个方法,但是有些人就可以好几个需求通过同一个方法实现。因此有了今天这个疑问,怎样才能写出规范的好代码?
|
前端开发 JavaScript API
[译]为什么在使用了类之后会使得组合变得愈发困难(软件编写)(第九部分)
本文讲的是[译]为什么在使用了类之后会使得组合变得愈发困难(软件编写)(第九部分),前文中,我们仔细审视了工厂函数,并且也看到了在使用了函数式 mixins 之后,它们能很好地服务于函数组合。现在,我们还将更加仔细地看看类,验证 class 的机制是如何妨碍了组合式软件编写。
1341 0
|
程序员
《编程原本 》一1.4 过程
本节书摘来自华章出版社《编程原本 》一书中的第1章,第1.4节,作者(美)斯特潘诺夫(Stepanov, A.),(美)麦克琼斯(McJones, P.),更多章节内容可以访问云栖社区“华章计算机”公众号查看
900 0

热门文章

最新文章