美文网首页
JavaScript语言精髓与编程实践笔记(3)

JavaScript语言精髓与编程实践笔记(3)

作者: a_pioneer | 来源:发表于2017-07-09 23:11 被阅读0次

    结构化程序设计语言

    命令式语言的演化分为结构化编程面向对象编程两个阶段

    1. 对结构的解释包括三部分
    概念 详情
    控制结构 顺序,分支,循环
    组织结构 表达式,语句,过程,单元,包
    数据结构 基本数据结构,复合数据结构
    1. ‘冯·诺伊曼‘ 体系的核心是存储处理,前者被抽象成内存,后者被抽象成运算。所以,命令式语言的核心就是通过运算去改变内存(中的数据)

    2. 命令式语言的实质是面向存储的编程,这一类语言比其他语言更加关注存储的方式。在程序设计的经典法则“算法+数据结构=程序”中,命令式语言是首先关注结构(数据结构)的。

    3. 命令式语言在运算上也是基于上述的存储结构来进行算法设计。
      总结:命令式的程序语言的核心是数据结构,算法是围绕这数据结构而设计的。

    如何抽象数据存储

    命令式语言的发展最终都必然面临的问题是“如何抽象数据存储”

    1. 结构体:面向机器世界的存储描述。抽象程度明显过低,带来如下问题
    • 结构体和实体直接相关(面临数据的具体含义与关系)。并且不具备隐藏数据域的特性(可见性)
    • 脱离了具体环境与算法的结构体缺乏通用性。在大多数情况下,结构一旦设定,算法也就确定了。
    • 强类型导致僵化的类型与僵化的逻辑并存,影响了业务逻辑的表达。(由范型运算来解决这个问题)

    强类型与范型出现的真正原因,仍然是‘结构体’面向存储进行的数据抽象。只有抽象层次更高些,抽象不会影响到存储本身时,这个矛盾才会被真正解决。

    1. 面向对象
    • 指定确切的可见性,极大程度避免不相干的子系统了解到更多的结构的细节。
    • 继承被用来解决结构体的通用性问题
    • 多态性,如果一个对象结构的相关逻辑是确定的,那么这个结构无论如何衍生,逻辑仍旧是确定的。

    面向对象的基础是“结构确定,则算法确定”。即无论怎样的进行衍生,都不会影响到‘已经确定的类的设计’。
    所基于的,仍是对结构的认可,如果基类设计的不合理,仍会带来不好的影响。
    '结构化'的抽象是实体到结构体的直接映射;‘面向对象’的抽象是实体到类、衍生关系到‘类继承树’的映射。

    1. 接口
      我们将对象系统理解为3个元素的复合体
    • 数据,对象封装了数据体以及数据的存储逻辑。
    • 行为,对象向外表现了数据上可以进行的运算与运算逻辑。
    • 关系,对象系统设定了一些交互关系。

    问题:数据系统与业务系统的耦合度还是过高(接口解决这个问题)

    接口提出的观点:只暴露数据体的逻辑行为能力,而不暴露这种能力的实现方法和基于的数据特性。
    有了接口,我们会发现系统间的关系变得清晰明朗:用或者不用。
    接口首次从系统或模块中剥离了“数据”的概念,进而把与数据有关的关系也清理了出去,例如引用。它是目标系统与计算机系统的功能特性的投影:如果二者的投影一致,则必然是一个能够互换或互证的系统。
    接口关注于行为的描述而不是结构的描述。接口基于的原则不是“结构确定,算法确定”,而是“在共同的规约描述下的(算法的)功能,是确定的”。突破了“结构影响算法”的边界。

    相关文章

      网友评论

          本文标题:JavaScript语言精髓与编程实践笔记(3)

          本文链接:https://www.haomeiwen.com/subject/tfuehxtx.html