Klasa prostokąta
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 56 z 70.
Wyzwanie
ŁatwyTeraz rozbudujemy nasz Shape Manager, tworząc klasę Rectangle, która dziedziczy po klasie bazowej Shape, utworzonej przez Ciebie w poprzedniej lekcji.
Będziesz pracować z trzema plikami, aby zachować porządek w kodzie:
Shape.lua: Twoja bazowa klasa Shape z poprzedniego wyzwania (z metodami:new(name)i:getName()).Rectangle.lua: Utwórz klasę Rectangle, która dziedziczy po Shape. Konstruktor powinien przyjmowaćwidthiheight, wywoływać konstruktor klasy nadrzędnej z nazwą"Rectangle"i przechowywać wymiary. Dodaj metodę:getArea(), która oblicza i zwraca pole prostokąta.main.lua: Załaduj moduł Rectangle, odczytaj szerokość i wysokość z wejścia, utwórz instancję Rectangle i wypisz jej nazwę, a następnie pole, w osobnych wierszach.
Pamiętaj, aby poprawnie skonfigurować dziedziczenie, tak by instancje Rectangle mogły uzyskiwać dostęp do metod Shape poprzez łańcuch prototypów.
Wejście: Dwa wiersze: pierwszy zawierający szerokość (liczbę), drugi zawierający wysokość (liczbę).
Wyjście: Dwa wiersze: nazwa prostokąta zwrócona przez :getName(), a następnie jego pole zwrócone przez :getArea().
Spróbuj swoich sił
-- Załaduj moduł Rectangle
local Rectangle = require('Rectangle')
-- Odczytaj szerokość i wysokość z wejścia
local width = tonumber(io.read())
local height = tonumber(io.read())
-- Utwórz nową instancję Rectangle o podanych wymiarach
local rect = Rectangle:new(width, height)
-- Wypisz nazwę i pole prostokąta
print(rect:getName())
print(rect:getArea())
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