标签:turn ... 而且 round 相对 模块 data nat 方法
生活中有许多的事物具有复合结构,例如地理位置所用的经纬度,便是通过一个复合结构来代表位置,在我们的程序当中,我们设法将经度纬度组合成一对,我们既可以把他们当做一个整体单元来进行操作,而且也可以将他们视为独立的两个部分。这样便提高了我们程序的抽象化和模块化程度,我们便可以对于数据的各个部分进行隔离处理。使得程序更易于设计,维护,和修改。
数据的抽象化和函数的抽象化一样,可以使具体的实现细节封装起来。
数据的抽象化后有两部分:
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)
>>> 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 |
在此表格中的每一层中,高一层都通过调用低一层的功能来实现
作用
这样可以使得程序更易于维护,譬如即使我们更改了有理数的表示方法,也不必对相对于其的高级功能进行改动。
数据抽象化的复合结构:
通过选择器与构造函数来实现有效表示
数据抽象化各层之间存在着壁垒
标签:turn ... 而且 round 相对 模块 data nat 方法
原文地址:http://www.cnblogs.com/EliEyes/p/7073634.html