🗒 Задача¶
В программе хранятся данные о посылках. Нужно написать иерархию классов, описывающих коробки. Чтобы рассчитывать упаковку для посылок, в классе должен быть метод, возвращающий площадь поверхности посылки.
Если посылка прямоугольная, она должна создаваться с длиной, шириной и высотой. Если посылка – куб, то только с длиной ребра.
❌ Ошибки¶
-
используют неверную формулу для расчета площади прямоугольника
-
для куба умножают на 2, а не возводят в степень
✏️ Комментарии¶
Произведение длины, ширины и глубины вычисляет объем, а не площадь. Нужно использовать другую формулу.
Приведение к строке toString() тут излишнее действие. Принт под капотом принимает тип Any и из любого объекта достает строковое значение.
Можно сделать более элегантно, не проставляя значений по умолчанию в базовом классе. Либо вообще отказаться от свойств в родителе.
Почему бы тут не упростить формулу: внутри скобок складывать и перемножать, а потом все умножать на 2
🧾 Решение¶
open class Parcel {
open fun calculateSurfaceArea(): Double {
return 0.0
}
}
class RectangularParcel(
private val length: Double,
private val width: Double,
private val height: Double
) : Parcel() {
override fun calculateSurfaceArea(): Double {
return 2 * (length * width + length * height + width * height)
}
}
class CubicParcel(sideLength: Double) : RectangularParcel(sideLength, sideLength, sideLength)
fun main() {
val rectangularParcel = RectangularParcel(10.0, 5.0, 3.0)
val cubicParcel = CubicParcel(7.0)
println("Площадь поверхности прямоугольной посылки: ${rectangularParcel.calculateSurfaceArea()}")
println("Площадь поверхности кубической посылки: ${cubicParcel.calculateSurfaceArea()}")
}