人对实际问题的抽象结构往往并不是"数据 + 操作"的结构,为了将实际问题的概念向计算机表达,人必须作概念的转换.书中的说法是establish the association between the machine model(in the solution space) and the model of problem(in the problem space).即我们要把问题域的概念与编程语言的概念联系起来.当使用结构化程序设计的时候,我们往往是将结题"过程"层层分解,直到它能细化到能使用编程语言来表达.这种概念的转换的思维成本很大.具体来说就是,当代码作为代码开发者与代码维护者之前沟通的语言时,开发者将问题域的概念转化为编程语言的概念,然后阅读者又需要将编程语言的概念转化为问题的概念,而后者的过程是很难进行的,对于抽象层次整齐,变量名有较强表达能力的代码来说,这会有所改善.当面对抽象层次混乱,变量名语义模糊的代码来说,维护工作就是灾难。

书中指出,为了减少这种思维成本,部分编程语言通过被设计成面对特定问题,来让代码与问题域的概念更接近.而面向对象编程语言通过提供把数据与对数据的操作绑在一起的表达方式,提供面向问题域概念的抽象能力,代码所表达的概念更接近问题域概念,人们期望通过使用这种抽象能力来降低概念转化的思维成本.注意,是降低,编程语言跟人类语言不可能表达一致的概念,因为我们总要思考编程语言的语义,在面向对象的语言中, 我们总要思考类,对象,方法。

《Thinking in C++》电子书籍下载地址:

Linux就该这么学

您只需扫描右侧二维码或微信搜索:"LinuxProbe"即可完成下载

该页面的验证码:

请关注《Linux就该这么学》的微信公众号,回复:“验证码”,获取该页面的验证码。