SICP-2.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)
- 复合结构的构建
- 使用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-数据的抽象的更多相关文章
- php PDO:数据访问抽象层
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- PDO数据访问抽象层
PDO数据访问抽象层: 我们使用的mysqli是针对mysql这个数据库扩展的一个类,如果要用到别的数据库的话就可以用PDO来做 1.操作数据库 先来代码 <!--PDO--> <! ...
- PDO(数据访问抽象层)、pdo事务功能和预处理功能---2017-05-05
之前所学的数据访问都是用mysqli做成类来访问的,但是mysqli这个类只是针对mysql这个数据库的:那么如果访问其他类型的数据库呢? 那么这就用到了PDO(数据访问抽象层). 一.关于PDO基本 ...
- PHP中关于PDO数据访问抽象层的功能操作
PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库 所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: <?php //1.造PD ...
- PDO:数据访问抽象层
<?php //PDO:数据访问抽象层 //带有事务功能: //dsn:数据源 $dsn="mysql:host=localhost;dbname=aaas"; //造pdo ...
- SICP— 第一章 构造过程抽象
SICP Structure And Interpretation Of Computer Programs 中文第2版 分两部分 S 和 I 第一章 构造过程抽象 1,程序设计的基本元素 2,过 ...
- Spark 读写数据、抽象转换 拾遗
读 package com.test.spark import org.apache.spark.sql.{Dataset, Row, SaveMode, SparkSession} /** * @a ...
- PDO 数据访问抽象层
1.操作其它数据库 (1)造对象 $dsn = "mysql:dbname=test3;host=localhost"; //数据源:两个参数:数据库驱动,链接数据库 $pdo = ...
- PDO(数据访问抽象层)
自带事务功能,多条sql同时执行时,如果其中一条执行失败,那么所有的都执行失败.开启了事务,可以进行回滚操作,让程序变得更安全. 1.访问不同的数据库2.自带事务功能3.防止SQL注入:分两次发送 / ...
- php 之 PDO数据访问抽象层(0513)
PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口. PDO与mysqli曾经被建议用来取代原本PHP在用的mysql相关函数, 基于数据库使用的安全性,因为后者欠缺对于S ...
随机推荐
- 浅谈OA办公软件市场行情
3.原文:http://www.jiusi.net/detail/472__776__3999__1.html 关键词:oa系统,OA办公软件 浅谈OA办公软件市场行情 中国的OA办公软件市场历经20 ...
- mysql的一些使用操作
1:如果空闲时间很长导致mysql报错: Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last pa ...
- js事件触发(一)
今日和一位前端童鞋聊了下js触发事件的两种形式: 第一种在jsp/vm上做类似onClick=functionName()的触发:另一种是在js文件中增加对应节点的监听事件触发.前者页面掺杂了js的内 ...
- 使用WebGL加载Google街景图
我们要实现的功能比较简单:首先通过坐标定位.我的位置.地址搜索等方式,调用google map api获取地址信息.然后根据地址信息中的全景信息获取当前缩放级别的全景信息.最终把这些全景信息通过Web ...
- 转:简单的Mysql主从复制设置
步骤如下: 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql 1.3.修改root的密码 2.修改主服务器master: #vim /etc/my.cn ...
- bash shell中测试命令
bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径.如果test命令中列出的条件成立,test命令就会退出并返回退出状态吗0 .这样if-than语句就与其他编程 ...
- php如何应对秒杀抢购高并发思路
我们常用QPS(Query Per Second,每秒处理请求数)来衡量一个web应用的吞吐率,解决每秒数万次的高并发场景,这个指标非常关键. 举个栗子:假设一个业务请求平均为100ms,同时系统内有 ...
- 关于EF中直接执行sql语句的参数化问题
某天 , 在review项目中代码的时候, 发现有哥们直接通过 Database.ExecuteSqlCommand("select * from order_info where com ...
- nginx源码分析——线程池
源码: nginx 1.13.0-release 一.前言 nginx是采用多进程模型,master和worker之间主要通过pipe管道的方式进行通信,多进程的优势就在于各个进程互不影 ...
- TextView 实现跑马灯效果
在String.xml中添加: <string name="txt">跑马灯效果,我跑啊跑</string>在layout/mian.xml中添加TextV ...