今天软件构造的内容结束了,回过头来重新看最开始学习的“三维度与八视图”,发现已经能从刚开始的不理解,到现在可以在某一个视图中找到对应的知识和内容。这篇文章即用来总结一下“三维度与八视图”。
先给出一张关于“三维度八视图”的总体图:
多维度视图主要包括构造时/运行时视图(按阶段划分)、时刻/阶段视图(按动态性划分)、代码/构件视图(按构造对象的层次划分)。
现在从八个视图逐一来分析。
1.Build-time, moment, and code-level view
这一部分主要是源码层面的,根据表达“需求和“设计”思想设计AST(code),即将源码彻底结构化,变成一棵树。下面是一棵AST的图。
而这一部分就包括后面学习到的测试优先的编程(test),面向对象的编程(继承、委派)和ADT的一些设计包括spec、RI、AF、checkRep。
2.Build-time, period, and code-level view
这个视图从源码层面转移到了整个源码文件层面,关注源码的一些变化(Code Churn)。下面一张图是我自己GitHub仓库中的一段代码,其中红色的部分是删除的,而绿色的部分则是新添加的。
3.Build-time, moment, and component-level view
这一部分关注构建过程中的组件:lib、link,Java中就有许多库(lib)。还有许许多多的第三方库,比如经常会使用的Junit4就是一个第三方库。通过导入相应的库,使开发者能像使用编程语言一样使用库中的功能。
link和lib功能一样,只不过导入的方式不同,是通过静态或者动态链接告诉IDE和JVM在哪寻找某些库。
而谈到库不得不提的就是Maven Repository。Maven是 Apache 下的一个纯 Java 开发的开源项目。是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。同时,Maven 也可被用于构建和管理各种项目。有了maven便不许每次都导入相应的库,直接添加对应的依赖即可。
4.Build-time, period, and component-level view
该视图主要介绍的就是版本管理控制系统。
版本管理是一种记录文件变化的方式,以便将来查阅特定版本的文件内容。Git是一个版本管理控制系统(缩写VCS),它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点,将更新记录恢复回来。
Git 基本工作流程
git仓库 | 暂存区 | 工作目录 |
---|---|---|
用于存放提交记录 | 临时存放被修改文件 | 被Git管理的项目目录 |
5.Run-time, moment, and code-level view
该视图涉及到的是关于代码在内存中的表现形式,主要介绍代码快照图(Code Snapshot)和内存信息转存(即代码的内存储存信息)。代码快照图在学习ADT时介绍可变数据类型和不可变数据类型时经常使用。数据类型不可变用双线圆,可变用单线圆;引用不可变用双线箭头,可变用单线箭头。
6.Run-time, period and code-level view
关注运行时程序的运行过程,主要包括调用方法的次序。而Java程序调用方法是根据栈来调用,并会用日志的方式记录程序执行的调用次序,方便开发人员进行调试。
7.Run-time, moment, and component-level view
这一部分指开发过程整体的UML文档,帮助其他开发人员理解。
8.Run-time, period, and component-level view
主要指整个程序的系统层面的事件日志,记录程序运行过程中的整个系统层面的过程。
总结:
软件构造课程的总体目标就是让学生学会从三个维度看软件系统的构成,学会用怎样的模型/视图描述软件系统,可以将“软件构造”看成是“不同视图之间的转换”。要先搞清楚:软件构造的对象是什么、如何刻画,然后再关注:如何构造。