如何理解软件的设计?一套流程:模型-接口-实现。
模型
找类与类之间的关系,绘制整体图,这个步骤就是找模型。有个整体地图。
接口
类中的各方法就是接口。
接口反映模型。
实现
类中方法的函数体就是实现。
这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下运行是遵循同样的进程模型的。其他系统上类似。