"这是关于高级数据库系统的第三次作业习题解答,主要涉及面向对象编程中的重定义规则、类型兼容性以及操作的动态绑定问题。同时,也提及了第一次和第二次作业的部分问题,包括数据类型匹配、引用语义与复制语义的区别、类的操作定义以及持久化类型Cuboid的接口设计。"
在高级数据库系统的学习中,面向对象编程是一个重要的概念。在此次作业中,提到了一个关键的面向对象原则——重定义(Overriding)的合法性。重定义允许在子类中重新实现父类的方法,但必须遵循一定的规则:
1. 操作名保持不变,即重写的方法名要与被重写的方法名相同。
2. 参数个数不能改变,这意味着重写的方法必须接受与被重写方法相同数量的参数。
3. 操作的接受者类型是原操作中接受者类型的子类,即子类可以重写父类的方法。
4. 操作的返回值类型是原操作返回值的子类,或完全相同。这确保了类型安全性。
在给定的题目中,有一个例子违反了第四条规则。ConicalPipe是Pipe的子类,但是试图将一个ConicalPipe对象赋值给Pipe类型的变量并调用connect方法,这在编译时可能通过,但在运行时由于动态绑定(Dynamic Binding)导致错误,因为connect方法的参数类型期望的是Pipe的超类而不是子类。
此外,作业还讨论了引用语义和复制语义的差异。引用语义意味着变量实际上是指向对象的引用,修改引用所指向的对象会影响到所有引用该对象的变量。而在复制语义下,变量之间是独立的,修改其中一个不会影响另一个。例如,在7.4题中,前一种情况展示了引用语义,两个变量都指向同一个对象,而后者展示了复制语义,变量各自持有对象的副本,修改一个不会影响另一个。
在第二次作业中,涉及了Cuboid类的操作定义,如计算表面积(surface)、按比例放大/缩小尺寸(scale)、返回中心坐标(center)、计算对角线长度(diagonal)以及计算Vector参数到Cuboid的最短距离(minDistance)。这些操作对于理解和表示三维物体的特性至关重要。
最后,提到了Cuboid类的持久化类型定义,表明了类应该具有长度、宽度、高度、表面积、体积、重量等属性,并提供了如translate、scale、rotate等操作。同时,还定义了返回中心点坐标、对角线长度和最小距离的方法。
通过这些习题解答,学生可以深入理解面向对象编程中的关键概念,如继承、重定义、类型兼容性以及对象的操作,这些都是构建复杂系统,特别是数据库系统的基础。