zoukankan      html  css  js  c++  java
  • 分层 抽象 复杂 认知

    抽象与分层是计算机科学中的一种基本思想方法,是降低计算机系统复杂度的有效方法。 

    抽象,本质上是一种泛化与概括的思维方式。 

    在计算机中核心资源就是CPU和内存,我们对CPU计算过程抽象的就是函数,函数是计算过程的泛化。而对内存中数据的抽象就是数据结构,数据结构是数据组织方式的泛化,而对象的本质就是二者的结合,将一部分相关的数据看为一个整体,并且绑定一系列与数据相关的函数。 

    而编程中模块化,面向对象正是抽象这一概念的衍生。

    而分层就是基于抽象来进行的,我们对底层的数据和计算过程抽象之后,底层就可以通过调用接口对外提供某种服务,在这个基础上我们又可以进行更高一层的抽象,就这样一层一层的往上构建我们就可以得到内在结构高度自动化,对外通过接口提供强大的功能的虚拟机。

    --------------------- 

    作者:yz764127031 

    来源:CSDN 

    原文:https://blog.csdn.net/yz764127031/article/details/59062968 

    版权声明:本文为博主原创文章,转载请附上博文链接!

    抽象层次

    抽象层次是面向对象方法中极其重要,但是又非常难以掌握的技巧。学 会站在不同的抽象层次考虑问题是建立好模型的基础,所以笔者不能不在这里说一些与技术无关的“废话”。

    首先,抽象层次越高,具体信息越少,但是概括能力越强;反之,具体信息越丰富,结果越确定,但相应的概括能力越弱。从信息的表达能力上说,抽象层次越高表达能力越丰富,越容易理解。可能有人会对这个提出疑问,因为在人们的印象里,越是抽象的东西越难理解,相反越具体的事物越容易认识,难道不是吗?

    笔者认为,越具体的事物越容易理解这个说法是一种误解,因为人们所认识的事物概念都是抽象的,具象只是一个相对的概念。比如人们会觉得一块石头很容易认识,因为它有颜色,有大小,有硬度。可 是你有没有想过这些用来描述石头的概念都是具象的还是抽象的呢?什么叫硬度?是手摸上去的感觉?还是用它砸玻璃的结果?还是一个数字后面跟个物理学单位?你肯定不会去想这些,但你不会感到石头是硬的这个概念难于理解。你觉得它们很容易理解是因为经过多年的积累,这个抽象的概念被你消化和吸收了。

    事实上,这个你看来很具体的硬度是你从感觉、视觉、听觉、数字等综合起来以后得出的一个抽象概念。如果说它的硬度是摩氏5 级,非常具体,你却相反不能够很好地理解了。举例来说,对普通人很容易理解的颜色,对盲人来说就十分“抽象”。 再举一个例子,同样是长度的概念,天文学所用的光年相对于米、公里这些常见单位的概念要更抽象。但说太阳系距离银河系中心大约有27000 光年,就比说这个距离是255439722759681600000 米要容易理解,这是因为这个数字之大已经超过人们可以通过对比来理解的地步了。

    实际上,由于人脑对信息的处理能力是有限度的,如果信息量超过了人脑的处理能力,人就会失去对这个事物的理解能力。因此,越是具体的表达信息量越大,越接近人脑的处理极限,人们的理解能力越是下降(这也是面向过程方法为什么困难的原因之一)。对面向对象方法来说,这时就需要提高抽象层次,用一个新的概念来概括一部分相关的信息,一 旦人们像接受了光年概念一样消化了这个新的概念,理解起来就变得容易了。同时,这个新的概念就屏蔽了(或者说封装了)更多具体的信息。抽象层次越高,被屏蔽的信息也就越多,信息量越少,也就越容易理解和处理。这就是面向对象比面向过程具有优势的原因。读者可以回顾一下本书开头引用的 Grady Booch 的那段话,相信会有进一步的认识。

    但随之而来的另一个问题是如果抽象层次太高,信 息量过少的话,人们实施起来又会产生新的困难——信息量不足。因此,在面向对象的分析过程中,在适当的时候采用适当的抽象层次是十分重要的。几乎所有使用过UML 的朋友都会觉得选择用例的粒度是一件很困难的事,实际上用例粒度选择的困难本质上是由于没有找准抽象层次而产生的。

    抽象有两种方法,一种是自顶向下,另一种是自底向上。自顶向下的方法适用于让人们从头开始认识一个事物。例如介绍汽车的工作原理时,从发动机、传动装置、变速器等较高层次的抽象概念来讲就比较容易明白。如果降一个层次,从发动机原理讲起,一大部分听众就会开始迷惑;再降一个层次,从热力学原理和力学原理讲起,那就更没人能搞懂汽车是怎么工作的了。自底向上的方法适用于在实践中改进和提高认识。例如在实践中发现了发动机的问题,因而改进发动机结构,甚至采用新的发动机原理,最终能够提升汽车的质量。

    https://blog.csdn.net/ryelqy/article/details/77341195

  • 相关阅读:
    nginx概念
    leetcode——109.有序链表转换二叉搜索树
    leetcode——95.不同的二叉搜索树II
    leetcode——106.从中序和后序遍历序列构造二叉树
    leetcode——117. 填充每个节点的下一个右侧节点指针 II
    leetcode——99.恢复二叉搜索树
    leetcode——103.二叉树的锯齿形层次遍历
    leetcode——107.二叉树的层次遍历II
    leetcode——79.单词搜索
    leetcode——37.解数独
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10724338.html
Copyright © 2011-2022 走看看