Menu
Coddy logo textTech

Метод Perimeter

Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 58 из 70.

challenge icon

Задание

Легко

Давайте расширим наш Shape Manager, добавив метод :getPerimeter() в классы Rectangle и Circle. Как и в случае с :getArea(), каждая фигура вычисляет свой периметр по-разному, но они используют одно и то же имя метода — отличный пример полиморфизма в действии.

Вы продолжите работу с существующими файлами:

  • Shape.lua: Ваш базовый класс Shape остается без изменений.
  • Rectangle.lua: Добавьте метод :getPerimeter(), который возвращает периметр прямоугольника по формуле 2 × (width + height).
  • Circle.lua: Добавьте метод :getPerimeter(), который возвращает длину окружности по формуле 2 × π × radius. Используйте math.pi для π.
  • main.lua: Подключите оба модуля фигур, считайте размеры из входных данных, создайте один Rectangle и один Circle, затем выведите шесть строк: имя, площадь и периметр прямоугольника, а затем имя, площадь и периметр круга.

Теперь обе фигуры имеют полный интерфейс с методами :getName(), :getArea() и :getPerimeter() — все они доступны через одни и те же имена методов, несмотря на различные реализации.

Ввод: Три строки — ширина (число), высота (число) и радиус (число).

Вывод: Шесть строк по порядку: имя прямоугольника, площадь прямоугольника, периметр прямоугольника, имя круга, площадь круга, периметр круга.

Попробуйте сами

-- Подключить модуль Rectangle
local Rectangle = require('Rectangle')

-- Подключить модуль Circle
local Circle = require('Circle')

-- Считать ширину и высоту из ввода
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- Создать новый экземпляр Rectangle с заданными размерами
local rect = Rectangle:new(width, height)

-- Создать новый экземпляр Circle с заданным радиусом
local circ = Circle:new(radius)

-- Вывести имя, площадь и периметр прямоугольника
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())

-- Вывести имя, площадь и периметр круга
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())

Все уроки раздела Object Oriented Programming