循环结构是imperative language的重要组成部分,一般也是程序中比较难以理解的部分。特别是没有软件技术背景的朋友,明显对于循环的理解力较弱。在Von Neumann体系结构中,赋值语句是必须的,因而引出了存储概念,也引入了时间概念,因为我们可以区分出赋值前和赋值后的时刻。引入时间之后,本质性的 影响是程序串行化,而强迫我们从并行思考转入串行处理。很多时候这是一种不自然的情况,在我们的自然思维中,我们看到的或想到的也许只是一组静态结构,但 在程序中表达的时候却往往不可避免的需要引入一个动态过程。而我们控制动态结构的能力总是不足的。最近对于函数式语言及处理风格的越来越强烈的要求可能也 从侧面反映了大家对这种结构失配的不满。
但是串行思维毫无疑问也是我们正常思维模式的一部分(当然这种思维模式在多大程度上是因为Von Neumann 体系造成的,也是个很有趣的问题)。例如在页面渲染的时候,我们可能希望预先把所有用到的数据都转载到内存中,赋予不同的变量名,然后在页面模板中我们只 要知道如何把这些数据变量表现出来就可以了。先做完A再做B,这是分层的思想,也是典型的串行思维。而基于数据进行处理,也是Von Nenuman体系的基本思想。但是如果处处要求预先计算并赋值,往往增加了很多额外的步骤(glue code),并且增大了对内存(计算空间)的需求。分层之后,还存在着一个各个层次之间结构匹配的维护问题。
面向对象在结构表达方面是一种 巨大的进步。经过多年的发展,我们在表达静态结构关系方面已经是驾轻就熟了。通过属性关联,我们可以沿着对象图进行结构遍历。如果使用成员函数,在这种遍 历过程中还可以包容更多的动态特性。而在数据持久化方面,ORM的盛行也在一定程度上证明了对象图的有效性。使用对象图可以大大降低对赋值语句的需求,减 轻了明确建模的压力(每一次赋值都要求着一个明确的变量名,一个概念),也缓解了Von Neuman体系结构的束缚。例如,我们不再需要
var user = loadUser(userId);
var userOrgnization = loadOrgnization(user.orgId);
var userOrgnizationName = userOrgnization.name
而是直接使用 user.orgnization.name
[导入]程序中的结构表达
最新推荐文章于 2025-12-01 14:38:10 发布
博客指出循环结构是imperative language重要且难理解部分,Von Neumann体系使程序串行化,导致结构失配。串行思维是正常思维一部分,但会增加额外步骤和内存需求。面向对象在结构表达上进步大,ORM证明对象图有效,可降低赋值需求,缓解体系束缚。

5179

被折叠的 条评论
为什么被折叠?



