首先,要了解软件构造的对象是什么?如何刻画?如何构造?
将要从三个维度来看软件系统的构成,这是对软件系统的刻画,而软件构造可以看作是不同视图之间的转换
还有知道构造的结果和过程如何算好,这是质量目标
多个软件视图:
- 按阶段划分:构造时/运行时视图
- 按动态性划分:时刻/阶段视图
- 按构造对象的层次划分:代码/构件视图
三维视图
build-time阶段(构造阶段)
在build-time阶段:
code-level是代码的逻辑组织,是代码的关系
component-level是代码的物理组织,是文件、库等关系
Moment view:特定时刻的软件形态
Period view: 软件形态随时间的变化
Build-time, moment, and code-level view
在这个阶段,是构造阶段,某个时刻的编码视角,包括了三个层面:词汇层面、语法层面、语义层面
词汇层面是基于词汇的半结构化源代码,这是以近乎自然语言的风格+遵循特定的编程语法
语法层面是用树来表示源代码AST(Abstract Syntax Tree)
语义层面是用图形化或形式化的方式表达需求和设计思想
Build-time, period, and code-level view
代码变化
记录添加、修改或删除的行。
Build-time, moment, and component-level view
源代码被物理地组织成文件,文件又被目录组织;
文件封装为包,逻辑上封装为组件和子系统。
可重用模块以库的形式存在。
关于库的部分:编程时和build时,需告诉IDE和JVM在哪里寻找某些库
将库集成到可执行程序中的两种不同方法:静态链接、动态链接
静态链接中:库被拷贝进入代码形成整体,执行的时候无需提供库文件,静态链接发生在构造阶段
Build-time, period, and component-level view
表示整个系统的版本变化
Runtime Views
指的是运行时
代码层面:逻辑实体在内存中如何呈现?
构件层面:物理实体在物理硬件环境中如何呈现?
Moment view:e 逻辑/物理实体 在内存/硬件环境中特定时刻的形态如何?
Period view: 逻辑/物理实体在内存/ 硬件环境中的形态随时间如何变化?
可执行程序的几种实现形式
- Native Machine Codee (原生机器码):直接转换为机器的操作码,直接对CPU进行访问和操作,最快
- Full Program Interpretation (程序完全解释执行):运行时系统将整个源代码加载到内存中并对其进行解释,需要一个解释器
- Interpreted Byte Codes (解释型字节码):代码变成这种字节码,但是这种字节码CPU识别不出来,需要一个解释器或者是编译器来加载
- Perl/Python是解释器,Java的JVM也是解释器
库的动态链接:库文件不会在build阶段被加入可执行软件,仅仅做出标记,程序运行时,根据标记装载库至内存,发布软件时,记得将程序所依赖的所有动态库都 复制给用户
Run-time, moment, and code-level view
代码快照图:描述程序运行时内存里变量层面的状态
Run-time, period and code-level view
程序执行的调用次序
Run-time, moment, and component-level view
UML中部署图
Run-time, period, and component-level view
事件日志:系统层面
将被记录的事件的不同类别,以及将在事件消息中出现的详细信息,都将在开发周期中考虑。
-每一类事件被分配一个唯一的“代码”格式化和输出一个人类可读的消息