🗒 Задача¶
В приложении есть экран, на котором можно рисовать различные фигуры, указывая координаты (x, y). Фигурами могут быть круг, квадрат и точка. Координаты могут быть представлены типами данных Int и Float.
Создайте класс Screen, который будет содержать методы draw для рисования каждой фигуры с координатами типов Int и Float. Каждый метод должен возвращать строку, указывающую, какая фигура нарисована и в каких координатах. Используйте перегрузку методов для реализации.
❌ Ошибки¶
- не добавляют дополнительные функции, чтобы принимать Int или Float (разные значения вписывать в одну функцию не нужно)
✏️ Комментарии¶
Нам скорее не нужно именно создавать объекты и хранить в них координаты.
Специфика рисования (на примере метода андройд метода отрисовки onDraw) заключается в том, чтобы только принимать координаты и рисовать определенные объекты.
В приложении есть экран. Мы можем рисовать в нем разные объекты, указывая координаты (x, y) и сам объект. Объектами выступают круг, квадрат и точка. Координаты могут быть как Int, так и Float.
Реализуй классы точки, квадрата и круга, а также класс Screen со всеми перегруженными методами draw(...).
Концептуально не совсем корректная иерархия классов.
Давай попробуем ответить на вопросы:
является ли точка экраном?
является ли квадрат экраном? и т.д.
Не является, поэтому получается не совсем корректная абстракция. Можно было бы сделать базовый класс Shape, но задачка про другое.
Идея в том, что у класса Screen нужно сделать функции с **одинаковыми** названиями, но **разными** параметрами. То есть - перегрузить функции. Это пример так называемого [специального полиморфизма](https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)#%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC) (**Ad-hoc**)
Ты почти решил задачку, методов должно быть 6 - Int и float для каждой фигуры.
🧾 Решение¶
fun main() {
val screen = Screen()
println(screen.drawCircle(1.5f, 3.0f))
println(screen.drawCircle(2, 1))
println(screen.drawSquare(4.2f, 7.1f))
println(screen.drawSquare(6, 9))
println(screen.drawDot(3.3f, 5.5f))
println(screen.drawDot(8, 2))
}
class Screen {
fun drawCircle(x: Int, y: Int): String {
return "Нарисован круг в координатах: x = $x, y = $y"
}
fun drawCircle(x: Float, y: Float): String {
return "Нарисован круг в координатах: x = $x, y = $y"
}
fun drawSquare(x: Int, y: Int): String {
return "Нарисован квадрат в координатах: x = $x, y = $y"
}
fun drawSquare(x: Float, y: Float): String {
return "Нарисован квадрат в координатах: x = $x, y = $y"
}
fun drawDot(x: Int, y: Int): String {
return "Нарисована точка в координатах: x = $x, y = $y"
}
fun drawDot(x: Float, y: Float): String {
return "Нарисована точка в координатах: x = $x, y = $y"
}
}