gpt4 book ai didi

java - 共享四边形基的方形/矩形(具有约束不变量)之间的继承问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:21 27 4
gpt4 key购买 nike

我有一个接口(interface) Polygon,然后我有一个类 Quadrilateral。然后,我有两个类,Square 和 Rectangle,它们扩展了 Quadrilateral。

四边形由实例变量 sideA、sideB、sideC 和 sideD 组成。它包含方法 area() 和 perimeter() 来计算任何四边形的面积和周长。

考虑到这一点,Square 类有一个实例变量 lengthOfSides,而 Rectangle 类有两个实例变量,length 和 width。

由于 Quadrilateral 中的方法 area 和 perimeter 可以用于计算任何四边形的面积和周长,包括正方形和矩形,我认为最好只构造一个 Square 或 Rectangle 然后调用父类(super class)来分配边(在四边形中需要用于面积和周长计算)。此外,当 Square 或 Rectangle 中的实例变量发生变化时,setter 也会更新父类中的关联值。

这是 Square 类:

/**
* A model for a Square.
*
* @author BTKS
*/
public class Square extends Quadrilateral {

private static final double ANGLES_SUM = 180; // the total sum of two opposite angles in degrees

private double lengthOfSides; // the length of each side

/**
* Construct a new Square.
*
* @param lengthOfSides the length of each side
*/
public Square(double lengthOfSides) {
super(ANGLES_SUM, lengthOfSides, lengthOfSides, lengthOfSides, lengthOfSides);

this.lengthOfSides = lengthOfSides;
}

/**
* @return the length of each side
*/
public double getLengthOfSides() {
return lengthOfSides;
}

/**
* @param lengthOfSides the length of each side
*/
public void setLengthOfSides(double lengthOfSides) {
this.lengthOfSides = lengthOfSides;

super.setSideA(lengthOfSides);
super.setSideB(lengthOfSides);
super.setSideC(lengthOfSides);
super.setSideD(lengthOfSides);
}
}

这被认为是不好的做法吗?这是一份大学作业,她没有具体说明要找什么。如果我不在 Square 中使用任何来自 Quadrilateral 的东西,那么扩展 Quadrilateral 类似乎毫无用处。

最佳答案

这取决于你希望“继承”关系在这里表示什么。通常,最好不要使用所谓的“面向对象的继承”来表达一个人想要表达的内容(事实上,我发现这种继承的用途很少)。

在这种情况下,继承关系似乎表达了子类相对于父类(super class)具有“附加约束”的事实。如果 Polygon 本身是一个类而不是一个接口(interface):

  • 多边形(任何东西都可以,只要它是凸的)
  • 四边形(只有 4 条边的附加约束)
  • 矩形(具有 Pi/2 角的附加约束)
  • 正方形(具有相同边长的额外限制)

基本上,我会:

要么只是编程出 Quadrilateral,删除 setter 并使所有实例变量成为最终变量。这消除了如果有人单独更改边,您会在 Square 中发生不受控制的更改的现象。 (通常 final 是个好主意)。然后子类减少到只有特殊的构造函数。

或者只编写Quadrilateral,不要子类化,给它 boolean 检查:isRectangle()isSquare(),也许离开二传手。但这听起来不太优雅。

同时推荐 Bertrand Meyer 的 "The many faces of inheritance: a taxonomy of taxonomy" (1996) 如果你能找到它,它是付费的,但附近可能有人有 IEEE Xplore 访问权限。

关于java - 共享四边形基的方形/矩形(具有约束不变量)之间的继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32555441/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com