数据的抽象

生活中有许多的事物具有复合结构,例如地理位置所用的经纬度,便是通过一个复合结构来代表位置,在我们的程序当中,我们设法将经度纬度组合成一对,我们既可以把他们当做一个整体单元来进行操作,而且也可以将他们视为独立的两个部分。这样便提高了我们程序的抽象化和模块化程度,我们便可以对于数据的各个部分进行隔离处理。使得程序更易于设计,维护,和修改。

数据的抽象化和函数的抽象化一样,可以使具体的实现细节封装起来。

数据的抽象化后有两部分:

  1. 对于抽象化数据的操作
  2. 抽象化数据的具体实现细节

例子——有理数:

    • 有理数是任意整数的比值
    • 但由于浮点逼近的存在,会使存在误差
  • 有理数复合结构的构建:
    1. 假设有理数的复合结构已经构建完成

      • 我们可以精确表示有理数
      • 任意一个有理数,我们有办法选择他的分子和分母
    2. 有理数加,减,乘,除的实现
      • def add_rationals(x, y):
        nx, dx = numer(x), denom(x)
        ny, dy = numer(y), denom(y)
        return rational(nx * dy + ny * dx, dx * dy) def mul_rationals(x, y):
        return rational(numer(x) * numer(y), denom(x) * denom(y)) def print_rational(x):
        print(numer(x), '/', denom(x)) def rationals_are_equal(x, y):
        return numer(x) * denom(y) == numer(y) * denom(x)
    3. 复合结构的构建
      • 使用list结构
      • list的两种访问方式
        • 多重分配法

          • >>> pair
            [10, 20]
            >>> x, y = pair
            >>> x
            10
            >>> y
              20
        • 下标访问法

          • >>> pair[0]
            10
            >>> pair[1]
            20
      • >>> def rational(n, d):
        return [n, d]
        >>> def numer(x):
        return x[0]
        >>> def denom(x):
        return x[1]

        约分的实现:

        >>> from fractions import gcd
        >>> def rational(n, d):
        g = gcd(n, d)
        return (n//g, d//g)

抽象壁垒:

Parts of the program that... Treat rationals as... Using only...
Use rational numbers to perform computation whole data values add_rational, mul_rational, rationals_are_equal, print_rational
Create rationals or implement rational operations numerators and denominators rational, numer, denom
Implement selectors and constructor for rationals two-element lists list literals and element selection

    在此表格中的每一层中,高一层都通过调用低一层的功能来实现

  作用

    这样可以使得程序更易于维护,譬如即使我们更改了有理数的表示方法,也不必对相对于其的高级功能进行改动。

总结:

  数据抽象化的复合结构:

    通过选择器与构造函数来实现有效表示

    数据抽象化各层之间存在着壁垒

SICP-2.2-数据的抽象的更多相关文章

  1. php PDO:数据访问抽象层

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. PDO数据访问抽象层

    PDO数据访问抽象层: 我们使用的mysqli是针对mysql这个数据库扩展的一个类,如果要用到别的数据库的话就可以用PDO来做 1.操作数据库 先来代码 <!--PDO--> <! ...

  3. PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05

    之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的:那么如果访问其他类型的数据库呢? 那么这就用到了PDO(数据访问抽象层). 一.关于PDO基本 ...

  4. PHP中关于PDO数据访问抽象层的功能操作

    PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库  所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: <?php //1.造PD ...

  5. PDO:数据访问抽象层

    <?php //PDO:数据访问抽象层 //带有事务功能: //dsn:数据源 $dsn="mysql:host=localhost;dbname=aaas"; //造pdo ...

  6. SICP— 第一章 构造过程抽象

    SICP  Structure And Interpretation Of Computer Programs 中文第2版 分两部分  S 和 I 第一章 构造过程抽象 1,程序设计的基本元素 2,过 ...

  7. Spark 读写数据、抽象转换 拾遗

    读 package com.test.spark import org.apache.spark.sql.{Dataset, Row, SaveMode, SparkSession} /** * @a ...

  8. PDO 数据访问抽象层

    1.操作其它数据库 (1)造对象 $dsn = "mysql:dbname=test3;host=localhost"; //数据源:两个参数:数据库驱动,链接数据库 $pdo = ...

  9. PDO(数据访问抽象层)

    自带事务功能,多条sql同时执行时,如果其中一条执行失败,那么所有的都执行失败.开启了事务,可以进行回滚操作,让程序变得更安全. 1.访问不同的数据库2.自带事务功能3.防止SQL注入:分两次发送 / ...

  10. php 之 PDO数据访问抽象层(0513)

    PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口. PDO与mysqli曾经被建议用来取代原本PHP在用的mysql相关函数, 基于数据库使用的安全性,因为后者欠缺对于S ...

随机推荐

  1. 浅谈OA办公软件市场行情

    3.原文:http://www.jiusi.net/detail/472__776__3999__1.html 关键词:oa系统,OA办公软件 浅谈OA办公软件市场行情 中国的OA办公软件市场历经20 ...

  2. mysql的一些使用操作

    1:如果空闲时间很长导致mysql报错: Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last pa ...

  3. js事件触发(一)

    今日和一位前端童鞋聊了下js触发事件的两种形式: 第一种在jsp/vm上做类似onClick=functionName()的触发:另一种是在js文件中增加对应节点的监听事件触发.前者页面掺杂了js的内 ...

  4. 使用WebGL加载Google街景图

    我们要实现的功能比较简单:首先通过坐标定位.我的位置.地址搜索等方式,调用google map api获取地址信息.然后根据地址信息中的全景信息获取当前缩放级别的全景信息.最终把这些全景信息通过Web ...

  5. 转:简单的Mysql主从复制设置

    步骤如下: 1.主从服务器分别作以下操作:  1.1.版本一致  1.2.初始化表,并在后台启动mysql  1.3.修改root的密码 2.修改主服务器master: #vim /etc/my.cn ...

  6. bash shell中测试命令

    bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径.如果test命令中列出的条件成立,test命令就会退出并返回退出状态吗0 .这样if-than语句就与其他编程 ...

  7. php如何应对秒杀抢购高并发思路

    我们常用QPS(Query Per Second,每秒处理请求数)来衡量一个web应用的吞吐率,解决每秒数万次的高并发场景,这个指标非常关键. 举个栗子:假设一个业务请求平均为100ms,同时系统内有 ...

  8. 关于EF中直接执行sql语句的参数化问题

    某天 , 在review项目中代码的时候, 发现有哥们直接通过 Database.ExecuteSqlCommand("select * from order_info where  com ...

  9. nginx源码分析——线程池

    源码: nginx 1.13.0-release   一.前言      nginx是采用多进程模型,master和worker之间主要通过pipe管道的方式进行通信,多进程的优势就在于各个进程互不影 ...

  10. TextView 实现跑马灯效果

    在String.xml中添加: <string name="txt">跑马灯效果,我跑啊跑</string>在layout/mian.xml中添加TextV ...