101、前一个是False,后一个是True
102、
103、面向复用编程:开发出可复用的软件
基于复用编程:利用已有的可复用软件搭建应用系统。
104、各个类的复用度:
105、软件构造过程中任实体都可能被复用:需求,设计/规约,数据,测试用例,文档。
106、白盒复用:源代码可见,可修改和扩展(复制已有代码到正在开发的系统,进行修改,可定制化程度高,其修改增加了软件的复杂度,且需要对其内部充分了解)
107、黑盒复用:源代码不可见,不能修改(只能通过API接口来使用,无法修改代码,简单清晰但适应性差)
108、
109、
110、
111、复用类:继承:只能增加不能减少。委托:对象之间通过调用产生相关关系。
112、API:库,Framework(把每一步都给好)
113、白盒框架通过代码层面的继承进行框架扩展,黑盒框架,通过实现特定接口/delegation(委托)进行框架扩展。
114、LSP主要针对子类型多态(只要对象具备相同行为,就可以统一调用):
115、这些都可以保证就可以用子类型替换父类型。
116、保持了不变性,可以替换。
前置条件更弱,后置条件更强,可以替换。
可替换。
可替换。
在子类型中没有重写方法setWidth,那么违反了子类型中w = h。不可替换。
后置条件h改变没法比较强弱关系,不成立:
117、协变(变化方向一致,更精细)
118、反协变:
119、泛型不支持协变:
可采用通配符实现两个泛型类的协变。
120、
121、
122、
123、委托发生在object层面,继承发生在class层面。
124、软件的外部质量因素:正确性(符合规约),健壮性/鲁棒性(针对异常),可扩展性(修改规约),可复用性()一次开发多次使用,兼容性,性能,可移植性,易用性,功能性,及时性。
125、内部质量因素:源码方面:行数、逻辑复杂度。结构方面:耦合内聚,除此之外还有代码可读性、易于理解、清晰、大小等。
126、
127、
此外:git commit也是静态的。
128、
129、
130、软件配置项Sci是软件演化过程中发生变化和SCM管理变化的基本单元,不划分。
131、一个git仓库分为三个部分:.git目录:本地的CMDB,工作目录:本地文件系统暂存区:.git目录中的一个文件,隔离工作仓库和Git仓库。
132、git是分布式版本控制系统,不是分布式配置管理系统。
133、
134、
135、ADT中某个final方法不能在子类型中被重写,某个final的类不能从其派生出子类型。某个final的immutabl变量其值不能被修改。
136、sb是final的,其指向不可变,该代码段不能通过动态检测。
137、接口规定了ADT所需的未实现的操作(方法),这是用户所关注的。类真正地在代码层面实现了接口规定的ADT操作,并且实现了ADT内部的数据存储。
138、接口中的方法不能用final修饰(用在类的继承里),不能出现implements关键词,可以用privat和static。
139、更强规约(前置更弱,后置更强)外圈的生效,内圈一定生效。
140、
141、
142、
143、hashcode对等价的对象具有相同的哈希值,但是不等价对象的哈希值是可以一样的。
144、
145、
146、接口里的默认public不是一定要写出来。
147、某个类是不可变的,它可以派生出一个可变的子类(父类不可变意味着其所有rep都不能修改,但这不影响子类新增的rep可以被修改。)
148、
149、应该把车辆自己功能和驾驶员功能分开。
150、开放封闭原则(OCP):一个实体(类、函数、模块等)应该对外扩展开放,对内修改封闭。某实体应该易于扩展,在扩展某类的功能时应该通过添加新的代码来实现而不是修改其内部的代码。
151、Liskov替换原则(LSP)任何基类可以出现的地方,子类一定可以出现。可以用来检验继承是否合理。
152、
153、正则表达式使用: