软件构造复习1
1 Override与Overload
可以看到重载必须满足的特点是:与原方法要么参数数量不同,要么参数类型不同,要么这两者都不同。对于返回值,异常和方法是public还是private都没有要求。
而对于“复合要求的”重写(override)必须满足:LisKov原则:1.返回值和原函数类型一样或是子类型,2参数是和原函数类型一样或是父类型,3不能抛出更宽泛的异常,可以抛出原异常或其子类,也可以不抛出异常。
注:协变:可以理解为变得具体(子类)
反协变:可以理解为变得抽象(父类)
参数类型反协变,返回值类型协变
注:在JDK1.5以后override允许上述关于返回值的要求但是不允许改变参数。
2 Spec的强弱
泛泛而言若干spec1比spec2强表明下属条件至少拥有一条:
-
前置条件更弱
-
后置条件更强(在满足spec2前置条件的前提下)
如果可以用spec1替换spec2但是减少了client的要求,家中有了编程人员的任务量,可以认为spec1比spec2强。
3 SCM和VCS
软件配置管理 SCM(Software Configuration Management):追踪和控制软件的变化。包括修订控制和基线的建立。软件配置项 SCI(Software Configuration Item):软件中发生变化 的基本单元(例如:文件);基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版 本);配置管理数据库 CMDB:存储软件的各配置项随时间发生变化的信息+基线;版本:为 软件的任一特定时刻(Moment)的形态指派一个唯一的编号,作为“身份标识”
古老的版本控制方法(Version Control System):通过复制文件并修改文件名;现在可以 回退、比较差异、备份版本历史、获取备份、合并,多个开发者之间共享和协同,记录每个 开发者的动作,便于审计;多个版本之间,形成线性或分支结构
本地版本控制系统(Local VCS):仓库存储于开发者本地机器无法共享和协作
集中式版本控制系统(Centralized VCS):仓库存储于独立的服务器,支持多开发者之 间的协作
分布式版本控制系统(Distributed VCS):仓库存储于独立的服务 器+每个开发者的本地 机器