Klasa koła
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 57 z 70.
Wyzwanie
ŁatwyKontynuujmy budowanie naszego Shape Managera, dodając klasę Circle obok klasy Rectangle utworzonej w poprzedniej lekcji.
Będziesz pracować z czterema plikami, aby uporządkować swoje kształty:
Shape.lua: podstawowa klasa Shape z metodami:new(name)i:getName().Rectangle.lua: klasa Rectangle z poprzedniego wyzwania, zawierająca metodę:getArea().Circle.lua: utwórz klasę Circle dziedziczącą po Shape. Konstruktor powinien przyjmowaćradius, wywoływać konstruktor klasy nadrzędnej z nazwą"Circle"i zapisywać promień. Dodaj metodę:getArea(), która oblicza pole koła według wzoru πr². Użyjmath.pijako wartości π.main.lua: załaduj moduły Rectangle i Circle. Odczytaj z wejścia trzy wartości: szerokość prostokąta, wysokość prostokąta i promień koła. Utwórz po jednej instancji każdego kształtu i wypisz cztery wiersze: nazwę prostokąta, pole prostokąta, nazwę koła i pole koła.
Oba kształty mają teraz wspólny interfejs dzięki dziedziczeniu: każdy ma metodę :getName() z klasy Shape i własną implementację metody :getArea(). Ten wspólny interfejs przyda się w kolejnych lekcjach.
Wejście: Trzy wiersze: szerokość (liczba), wysokość (liczba) i promień (liczba).
Wyjście: Cztery wiersze: nazwa prostokąta, pole prostokąta, nazwa koła i pole koła.
Spróbuj swoich sił
-- Załaduj moduł Rectangle
local Rectangle = require('Rectangle')
-- Załaduj moduł Circle
-- TODO: Załaduj tutaj moduł Circle
-- Odczytaj szerokość i wysokość z wejścia
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: Odczytaj promień z wejścia
-- Utwórz nową instancję Rectangle o podanych wymiarach
local rect = Rectangle:new(width, height)
-- TODO: Utwórz nową instancję Circle o podanym promieniu
-- Wypisz nazwę i pole prostokąta
print(rect:getName())
print(rect:getArea())
-- TODO: Wypisz nazwę i pole koła
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