软件开发中常用的计算机思想总结

    思想是对无数实践之后的高度抽象,上升到理论高度,因此具有普遍适用、一般化的特征,进而可以指导实践。计算机思想同样如此,它们如此重要,又无处不在,好比一颗大树的根,是基石。软硬件中均能找到它们的身影,且一次又一次的重复出现。因此关注这些思想,养成这种思维方式,对于解决问题帮助非常大。
 
    本文尝试总结在软件开发中常见的计算机思想及应用:
  1. 输入输出模型
  2. 抽象
  3. 分治
  4. 分层
  5. 迭代
  6. 黑盒、白盒
 
一、输入输出模型
    对一个系统给定一组输出,会产生一组输出。
  1. 图灵机是计算机科学的基石:一组输入,一组输出,内部包含运算状态,以及运算规则。
  2. 计算机交互体现了输入输出思想:人发出控制命令(输入),显示器返回结果(输出)
  3. 软件:运行指令,输出响应
  4. 算法:输入一组数据,输出结果
 
   本模型不仅计算机中常见,其他领域依然适用:
  1. 汽车发动机:输入的是油、电或其他能源,输出的是动力
  2. 学习过程:输入的是知识,输出则是认知
 
二、抽象:
    抽象是对一组对象提取共性的、本质性的特征,从而简化对一个具体对象的理解。如人有四肢,直立行走,智力远高于其他动物,会使用工具,有不错的记忆力,会用语言沟通等共同特征。这些抽象将人与一般的动物区分开。因此当说起人,意味着具备上述一长串的特征,而不用一一说明。这就是抽象的好处。
 
  1. 操作系统中常见抽象:文件是对I/O设备的抽象表示,虚拟内存是对程序存储器的抽象,而进程则是对一个正在运行的程序的抽象。虚拟机是对整个计算机的抽象【1】
  2. 领域建模:领域模型是对问题领域的抽象
  3. 类设计:类是对对象的抽象
 
三、分治
    分治思想体现在大而化之,各个击破,对付复杂问题尤为有效。解决复杂问题时,一次只关注一部分,最后整合各个部分,形成完整的解决方案。
 
  1. 架构设计:4+1视图架构模型就体现这种分治思想,将架构设计分为:部署视图、逻辑视图、实现视图、进程视图、用例视图
  2. 子系统划分:如一个数据采集展示程序,划分如下子系统:数据采集、存储、逻辑处理、通信、展示,则具体开发每个子系统时,能集中处理一类问题,整个系统理解起来也更容易
 
四、分层
   将不同的功能划分到不同的层级中,每个层级关注的焦点不同,降低了认识事物的复杂度。因此分层依然是解决复杂问题的有效手段。
 
  1. TCP/IP分层:应用层、运输层、网络层、链路层
  2. 架构分层:展示层、领域层、持久层、基础设施层,不同层次职责不同
 
五、迭代
    迭代是对完成一件事需要反复多次执行的过程,上一次的迭代的结果是下一次迭代的前提,经过一次次迭代,逐渐逼近目标。软件不是一步到位能做出来的,问题领域的复杂性及软件本身的复杂性决定了软件要多次进化才能逐步变为合格的程序,迭代是一个非常符合实际的办法,每次迭代,系统会完成一部分功能,整个系统逐步清晰起来。小步慢跑,可以观测到系统稳步向前推进。
 
  1. 采集需求:需求本身通常是模糊的,无论是外部项目还是内部项目,初始需求都相当简单,无法根据笼统需求编写需求说明,因此需要与需求方,领域专家共同提取需求,通过迭代逐步确定需求。
  2. 界面设计:界面是供用户直接与系统交互的窗口,界面设计的合理性、易用性直接关系到用户体验,因此迭代设计界面也十分必要
 
六、黑盒、白盒
    黑盒,一个系统或模块只能看到对外提供的接口或功能,看不清内部结构及运行;白盒,能看清一个系统或模块内部结构及运行情况。软件开发经常在这两种观察视角中来回切换。
 
  1. 设计模块功能:关注模块提供的功能则使用黑盒视角,当深入到模块内部的实现及组织结构又要用白盒视角;
  2. 软件测试:单元测试体现了白盒视角,需要测试逻辑分支等已知细节;组件测试体现了黑盒视角,针对组件提供的功能测试,不关心组件内部的实现
 
 
引用:
1、《深入理解计算机系统》
2、《面向对象的分析与设计》
posted @ 2021-06-27 18:19  T-Evan  阅读(361)  评论(0)    收藏  举报