如何理解软件的设计?一套流程:模型-接口-实现。

模型
找类与类之间的关系,绘制整体图,这个步骤就是找模型。有个整体地图。

接口
类中的各方法就是接口。
接口反映模型。

实现
类中方法的函数体就是实现。

这3个步骤在面向对象的程序中是一贯的,正常的阅读代码过程。
岔个题外话,这适不适用面向过程(结构化编程)的程序呢?我觉得适用,只是变一下,模型就是分层、框架,接口和实现一样。

模型-接口-实现用来理解程序设计语言
1.程序设计语言的模型
汇编语言—>c—>c++/java—>python等。
从低级到高级,从静态到动态,从过程(结构化)到面向对象再到函数式编程,
语言模型的发展是朝着不断脱离硬件,而向解决问题的方向前进。

2.程序设计语言的接口
程序设计语言的接口不只包含语法,还有程序库。
学习一种程序设计语言提供的模型时,不仅仅要看语法本身有什么,还要了解有语言特性的一些程序库。
Andrew Koenig 和 Barbara Moo 写过一本书《C++ 沉思录》,有两章的标题分别是“语言设计就是程序库设计 ”和“程序库设计就是语言设计 ”。

提升软件设计能力,可以从编写程序库入手。
编写程序库也是提升构建模型的能力。

3.程序设计语言的实现
实现就是说这本程序设计语言是怎么运行的。
运行时代表了程序的实现。
怎么运行由程序员写的程序决定。
运行时是如何运行的?比如JAVA运行的过程是JVM对java字节码的解析,python运行过程是python解释器对python代码的解析。在linux下java的JVM和python的python解释器都是“运行程序的程序”——该程序在linux下运行实质是linux下创建的进程模型,所以符合linux进程模型——linux进程内存模型、调度等等。同样在其他操作系统上JVM和python解释器类似。

c和c++语言属于静态语言,也叫编译型语言,由编译器编译成固定了的对应cpu的指令集ISA的一大堆指令了,cpu直接运行这些指令。当然和JVM和python解释器类似,linux下运行是遵循同样的进程模型的。其他系统上类似。

《如何了解软件的设计》学习笔记0——模型-接口-实现相关推荐

  1. 多层高速PCB设计学习笔记(五)四层板实战(下)之阻抗控制计算(SI9000)

    系列文章目录 多层高速PCB设计学习(一)初探基本知识(附单层设计补充) 多层高速PCB设计学习笔记(二)基本设计原则及EMC分析 多层高速PCB设计学习笔记(三) GND的种类及PCB中GND布线实 ...

  2. MATLAB学习笔记0:学习须知

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  3. KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记3——串口Stdio实现

    KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记3--串口Stdio实现 一.介绍 任务目标 二.工程创建 三.软件设计 第一步,BSP构建 1, 添加前面的pll_config文件 2 ...

  4. KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记4——Directives

    KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记4--Directives 一.若干重要的DIRECTIVE介绍 二.一些概念 三.Directives详细介绍 1,GET/INCLUD ...

  5. 《软件需求》学习笔记

    为什么80%的码农都做不了架构师?>>>    <软件需求>学习笔记 前几天读了Karl E.Wiegers<软件需求>,书的内容写得非常好.我这里谈谈读了此 ...

  6. 模电设计学习笔记(二)——反相放大电路

    模电设计学习笔记(二) 反向放大电路设计 反向放大电路:输出信号与输入信号的相位相反并且电压或电流值成一定比例. 如下图就是一个简单的反向放大电路. 设计反向放大电路,同样的需要先清除需求,然后定量的 ...

  7. 数字IC设计学习笔记_Formality 形式验证

    数字IC设计学习笔记 Formality 形式验证 1. 基本特点 2. Reference Design 和Implementation Design 3. container 4. 读入共享技术库 ...

  8. 软件制造工程学习笔记(详尽版)

    软件制造工程学习笔记 第一章 软件工程学概述 软件危机 软件工程 第二章 软件设计基本概念 设计过程 设计原理* 模块化 抽象 第三章 详细设计 结构程序设计 人机界面设计 过程设计工具 程序流程图 ...

  9. 多层高速PCB设计学习笔记(四)四层板实战(上)之常见模块要求

    系列文章目录 多层高速PCB设计学习(一)初探基本知识(附单层设计补充) 多层高速PCB设计学习笔记(二)基本设计原则及EMC分析 多层高速PCB设计学习笔记(三) GND的种类及PCB中GND布线实 ...

最新文章

  1. Relay外部库使用
  2. blur失焦方法会触发两次_中央空调维修过程中,晶闸管和电容器的检测方法
  3. Linux Priority VS Nice
  4. 使用Visual Studio(VS)开发Qt程序代码提示功能的实现
  5. go语言快速刷《程序员面试金典》(2)
  6. 从零开始学习python编程-从零开始学Python程序设计
  7. #include 和前置声明
  8. VS2010打开VS2013、VS2015建立的工程,各种版本之间转换
  9. matlab是一门什么语言,为什么有些程序员认为MATLAB不是一门语言?
  10. springboot开发微信公众号(一)创建、查询、删除菜单(附源码)
  11. linux网络编程(一)
  12. SIMD and Avx2
  13. Ubuntu 20.04换阿里源
  14. 使用功能点估算模型评估软件测试的工作量
  15. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)
  16. 地铁三号线 - 搬家故事
  17. ZZULIOJ 1197: 考试排名(一)(结构体专题)
  18. PAT 1157 Anniversary
  19. 一般与特殊结构关系 整体与部分结构关系
  20. 从rocketmq到kafka:集群、一致性与重平衡

热门文章

  1. iOS 将16进制字符串转换成UIColor
  2. easydialog中对js的修改
  3. android-swipelistview的开源项目的配置
  4. ASP.NET实现页面传值的几种方法
  5. 极限挑战logo的制作教程
  6. java 指针 引用_java中的引用与c中的指针
  7. useradd: cannot open /etc/passwd解决办法记录
  8. python 鸭子类型_Python中的鸭子输入是什么?
  9. 创建维护计划失败_如何善于创建和维护大型系统
  10. raspberry pi_2018十大Raspberry Pi故事