Перейти к содержанию

🗒 Задача

В приложении есть экран, на котором можно рисовать различные фигуры, указывая координаты (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"
    }
}