在对课件和实验进行总体复习后,针对其中的重难点以及此前忽视的点进行复习补充和描述
1.编译看左边,运行看右边
继承作为OOP的一大特征具有广泛应用空间,子类继承父类的所有方法和成员变量,子类可以调用父类中的方法或变量。同时,在实例化父类的时候,也可以使用子类的构造器。
在编译过程中,可能会以子类构造器示例化父类对象,这时产生的仍是父类对象,但其执行有两种情况:
在调用成员变量以及静态方法时,“编译看左边,运行看左边”,即程序编译时创建了一个父类对象,并且使用子类构造器这个对象赋值,但最终得到的还是一个父类对象,只需要看“=”左边的对象类型即可。
但是要调用非静态方法时,由于父类的对象是用子类构造器来实例化的,这个非静态方法在运行时会被重写,从而输出子类中方法重写后的结果。这就是“编译看左边,运行看右边”。
2.无漏洞\易于理解\可拓展的
题目中的三个标准在软件构造的方方面面,包括但不限于spec设计、测试编写、继承和委派处理,设计模式分析,异常处理等,下面对其进行一个概要的解读:
Safe for Bugs:这个标准意味着开发的软件系统在实际运行时没有明显的错误、缺陷或故障。它要求开发团队通过有效的测试和质量保证措施,确保软件的稳定性和可靠性。这包括使用合适的开发工具、编码标准和测试方法,以及进行严格的代码审查和单元测试,以最大程度地减少可能导致软件错误的问题。
Easy to Understand:这个标准要求开发的软件系统具有良好的可读性和可理解性。在软件构造中,它意味着使用清晰、一致且易于理解的代码结构和命名约定,使开发人员能够快速理解和维护代码。此外,良好的文档和注释也是确保软件易于理解的重要因素。
Ready for Change:这个标准强调软件系统的可扩展性和可维护性。在软件构造中,它要求开发的软件系统能够轻松地进行修改和扩展,以适应变化的需求和新的功能要求。为实现这一目标,采用模块化的设计和松耦合的组件架构,以及遵循设计原则和最佳实践,可以提高软件的可变动性和可维护性。此外,良好的测试覆盖率和自动化测试也有助于确保对软件进行修改时不会引入新的错误。
三、前置条件precondition
1.前置条件的使用:
是否使用前置条件取决于:1.check的代价 2.方法的使用范围
如果只在类的内部使用该方法(private),那么可以不使用前置条件,而是在方法的各个位置进行check,讲责任交给内部client
如果在其他地方使用该方法(public),那么必须使用前置条件,当client不满足时让方法抛出异常。
2. 可以用ADT不变量取代复杂的前置条件,即将前置条件封装到ADT内部
四、一些零碎的知识点
1. 继承与实现
接口可以extends 多个接口
类不能extends多个类
类可以implements多个接口
2.隔离舱
外部函数使用异常处理,内部函数使用断言处理
3.final
final 标记的方法不可被子类重写
final 标记的类不可被继承
接口不能有final方法
4.质量因素
外部质量因素:正确性、健壮性、可拓展性、可复用性、高效性、及时性
内部质量因素:与源代码有关的因素,如代码行数(LOC)、循环复杂性等。架构相关的因 素,如 耦合、内聚力等
内部质量因素常用于外部质量因素的部分测量
5.多态
特殊多态:重载
参数化多态:泛型
子类型多态:继承、子类、LSP