Metoda obwodu
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 58 z 70.
Wyzwanie
ŁatwyRozszerzmy nasz Shape Manager, dodając metodę :getPerimeter() zarówno do klasy Rectangle, jak i Circle. Podobnie jak w przypadku :getArea(), każda figura oblicza swój obwód w inny sposób, ale obie używają tej samej nazwy metody: to doskonały przykład polimorfizmu w praktyce.
Kontynuuj pracę z istniejącymi plikami:
Shape.lua: Twoja bazowa klasa Shape pozostaje bez zmian.Rectangle.lua: Dodaj metodę:getPerimeter(), która zwraca obwód prostokąta, obliczony według wzoru 2 × (width + height).Circle.lua: Dodaj metodę:getPerimeter(), która zwraca obwód koła, obliczony według wzoru 2 × π × radius. Użyjmath.pijako wartości π.main.lua: Załaduj oba moduły figur, odczytaj wymiary z danych wejściowych, utwórz jeden prostokąt i jedno koło, a następnie wypisz sześć wierszy: nazwę, pole i obwód prostokąta, a potem nazwę, pole i obwód koła.
Obie figury mają teraz kompletny interfejs z metodami :getName(), :getArea() i :getPerimeter(): wszystkie są dostępne pod tymi samymi nazwami metod, mimo że ich implementacje są różne.
Dane wejściowe: Trzy wiersze: szerokość (liczba), wysokość (liczba) i promień (liczba).
Dane wyjściowe: Sześć wierszy w podanej kolejności: nazwa prostokąta, pole prostokąta, obwód prostokąta, nazwa koła, pole koła, obwód koła.
Spróbuj swoich sił
-- Załaduj moduł Rectangle
local Rectangle = require('Rectangle')
-- Załaduj moduł Circle
local Circle = require('Circle')
-- Wczytaj szerokość i wysokość z wejścia
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())
-- Utwórz nową instancję Rectangle o podanych wymiarach
local rect = Rectangle:new(width, height)
-- Utwórz nową instancję Circle o podanym promieniu
local circ = Circle:new(radius)
-- Wypisz nazwę, pole i obwód prostokąta
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())
-- Wypisz nazwę, pole i obwód koła
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())
Wszystkie lekcje w sekcji Programowanie obiektowe
1Koncepcja „self”
Tabele z funkcjamiJawne „self”Składnia z dwukropkiemKropka czy dwukropekPodsumowanie — poruszający się punkt4Projekt: Bank cyfrowy
Konfiguracja projektuMetoda wpłaty7Polimorfizm i nadpisywanie
Nadpisywanie metodWywoływanie metod klasy nadrzędnejTypowanie kaczeWspólny interfejsSprawdzanie typuPodsumowanie — role pracowników10Projekt: Menedżer kształtów
Konfiguracja projektuKlasa prostokątaKlasa kołaMetoda obwoduKolekcja kształtówPole całkowiteFiltrowanie kształtów2Wzorzec prototypu klasy
Koncepcja prototypuŁączenie za pomocą __indexKonstruktor :new()Inicjalizacja atrybutówNiezależne instancjePodsumowanie – fabryka samochodów5Przeciążanie operatorów w OOP
Dodawanie obiektówOdejmowanie obiektówŁączenie obiektówPorównywanie obiektów (<, >)Powtórka — działania na portfelu8Hermetyzacja
Konwencje nazewnictwaDomknięcia dla prywatnościDostęp za pomocą domknięćTabele tylko do odczytuLogika walidacjiPodsumowanie — bezpieczny sejf11Wzorce projektowe (podstawy)
Funkcje fabrykująceTabela SingletonWzorzec iteratoraObserwator (nasłuchujący)Powtórka — fabryka loggera3Stan i zachowanie obiektu
Zmienne instancjiMetody dostępoweMetody ustawiająceWłaściwości obliczaneFormatowanie ciągów znakówSprawdzanie równościPodsumowanie – ocena ucznia6Podstawy dziedziczenia
Konfiguracja dziedziczeniaDziedziczenie metodRozszerzanie konstruktoraDodawanie metod potomnychWspólne i unikalne elementyPowtórka — hierarchia kształtówPoćwicz samodzielnie: Kompilator Lua online