代码规范 : 抽象(ADT) 封装 与职责(1)

抽象(ADT)

抽象数据类型: 是指一些数据,以及对这些数据进行操作的集合.
这些操作既向程序描述了数据是怎么样的,也允许程序的其余部分改变数据

0.为什么使用抽象

假设在不存在抽象的情况下, 我们进行编程
例子: 对平面给出的 四个点的八个坐标(x,y) (m,n) (j ,k ) (d,b),来得到矩形(这里特指的是周长和面积的计算)

你可能会这么写,

    x = 1 ;
    y = 3 ;
    j = 3 ;
    k = 3 ;
    d = 1 ;
    b = 1 ;
    m = 3 ;
    n = 1 ;
    // 矩形的长
    length = ( j - x ) + ( k - y ) ;

如果要计算的是面积的话,你会得到这样的一堆数据集合

acrg = (( j - x ) + ( k - y )) * (( x - d ) + ( y - b ));

这样是无法做复杂的运算的

使用了抽象的情况
例子和上述相同
我们的想法,首先是想通过4个坐标的8个值,描述4条边(举这个例子并不是非常的实际,只是简单描述了一下)

    topBorder = ( j - x ) + ( k - y ) ; 
    bottomBorder = ( m - d ) + ( n - b ) ; 
    leftBorder = ( x - d ) + ( y - b ) ; 
    rightBorder = ( j - m ) + ( k - n ) ; 
    // 然后你就能轻松描述出 周长和面积了
    length = topBorder;
    width = leftBorder;
    perimeter = 2*(length+width);
    acrg = length * width ;

相同, 面向对象和函数式 都是建立在这一种思想上.


1.使用抽象的好处

我们还是那上面举的那个例子来描述

  • 隐藏实现的细节
    我需要知道上面的矩形的面积, 我只要拿到 acrg 即可, 我不需要知道它是通过什么计算得来的.

  • 改动不会影响到整个程序
    我修改了 x和 j 的坐标点 , 但是计算 周长 和 面试的过程还是那个过程, 只不过输出不一样了

  • 让程序的正确性显而易见
    只要我保证从线到 面的每一次计算 的 正确性,那么正个程序的计算就是对的

  • 程序更具有自我说明性
    我们使用了 length 和 width 去表示了 长和 宽 , 而不是一堆数值.

  • 你可以像现实世界中那样操纵实体,而不用再底层上操作它
    操纵的是概念,而不用关心底层实现,当我要用长 和 宽去 计算矩形面积的时候, 我们不需要知道如何去构造 长 和 宽

  • 让接口提供更多的信息,避免混淆
    m ,n 这样的数字放在别的环境中会有不同的含义,你不知道那究竟是要表达什么

  • 更容易提高性能
    当然上面个计算的过程你想要再加速,
    例如:
    你可以将计算的周长的方法写成
    perimeter = topBorder + bottomBorder + leftBorder + rightBorder ;
    (计算机中 直接加法比 乘法快)
    这样并不会影响到计算别的式的值.

  • 无须在程序内到处传递数据
    我不需要计算面积时多次使用到 同一个 i 的值.

    // 原先 
    acrg = (( j - x ) + ( k - y )) * (( x - d ) + ( y - b ));
    // 之后 
    acrg = length * width ;
  • 把常见的底层数据类型创建为抽象(一组数组的描述) 并使用这些抽象,而不再使用底层的数据类型
    我们是使用 length 和 width 去计算 面积 和 周长

  • 可以在数据结构的抽象层次上在构建一个现实的抽象层次
    首先我们得到了 四条边的抽象
    其次 我们得到长 和 宽的 抽象
    最后 我们得到了 面积 和 周长的抽象

最后

再仔细想想,将上面的表述用于程序的话, 你能得到什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值