Powtórka — kalkulator kształtów
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 49 z 110.
Wyzwanie
ŁatwyZbudujmy system do obliczania parametrów figur, który łączy klasy abstrakcyjne i interfejsy, tworząc elastyczny zestaw narzędzi geometrycznych. Zaprojektujesz hierarchię klas, w której różne figury współdzielą wspólne zachowania dzięki abstrakcji, a każda figura udostępnia własne, unikalne obliczenia.
Podzielisz kod na trzy pliki:
shape.dart: Zdefiniuj tutaj abstrakcyjną klasę bazową i interfejs:- Abstrakcyjna klasa
Shapez właściwościąString namei konstruktorem. Dodaj metody abstrakcyjnedouble calculateArea()idouble calculatePerimeter(). Dodaj zwykłą metodędescribe(), która wypisuje[name] - Area: [calculateArea()], Perimeter: [calculatePerimeter()] - Klasa
Drawablez metodądraw(), która wypisujeDrawing shape...
- Abstrakcyjna klasa
shapes.dart: Zaimportujshape.darti utwórz konkretne klasy figur:- Klasa
Rectangle, która rozszerzaShapei implementujeDrawable. Dodaj właściwościdouble widthidouble height. Oblicz pole jakowidth * height, a obwód jako2 * (width + height). Metodadraw()powinna wypisywaćDrawing rectangle [width]x[height] - Klasa
Circle, która rozszerzaShapei implementujeDrawable. Dodaj właściwośćdouble radius. Przyjmij3.14159jako wartość pi. Oblicz pole jakopi * radius * radius, a obwód (długość okręgu) jako2 * pi * radius. Metodadraw()powinna wypisywaćDrawing circle with radius [radius]
- Klasa
main.dart: Zaimportujshapes.darti zaprezentuj działanie kalkulatora figur:- Utwórz
Rectangleo nazwie'Rectangle', szerokości5.0i wysokości3.0 - Utwórz
Circleo nazwie'Circle'i promieniu4.0 - Dla każdej figury wywołaj
draw(), a następniedescribe() - Wypisz pusty wiersz między dwiema figurami
- Utwórz
To wyzwanie pokazuje, jak klasy abstrakcyjne definiują wspólną strukturę (każda figura ma obliczane pole i obwód), a interfejsy dodają dodatkowe możliwości (figury, które można rysować). Każda konkretna klasa rozszerza klasę abstrakcyjną, aby określić swoją podstawową tożsamość, i implementuje interfejs, aby zapewnić dodatkową funkcjonalność.
Oczekiwany wynik:
Drawing rectangle 5.0x3.0
Rectangle - Area: 15.0, Perimeter: 16.0
Drawing circle with radius 4.0
Circle - Area: 50.26544, Perimeter: 25.13272Spróbuj swoich sił
import 'shapes.dart';
void main() {
// TODO: Utwórz Rectangle o nazwie 'Rectangle', szerokości 5.0 i wysokości 3.0
// TODO: Utwórz Circle o nazwie 'Circle' i promieniu 4.0
// TODO: Dla prostokąta wywołaj draw(), a następnie describe()
// TODO: Wypisz pustą linię
// TODO: Dla koła wywołaj draw(), a następnie describe()
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP
Pliki zewnętrzneBiblioteki i importyWprowadzenie do OOPKlasy a obiektySłowo kluczowe thisMetodyZmienne instancjiPodstawy konstruktorówPowtórka – prosty kalkulator4Bezpieczeństwo wartości null
Wprowadzenie do bezpieczeństwa wartości nullTypy dopuszczające null i niedopuszczające nullOperatory ? i !Słowo kluczowe late a bezpieczeństwo wartości nullOperatory uwzględniające nullBezpieczeństwo wartości null w klasachPodsumowanie — system profili użytkowników7Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjneMetody abstrakcyjneInterfejsy w DartInterfejsy niejawneImplementowanie a rozszerzanieWiele interfejsówPowtórka — kalkulator kształtów10Kolekcje i typy generyczne
Przegląd List, Set i MapKolekcje bezpieczne typowoKlasy generyczneMetody generyczneOgraniczenia typów generycznychIterable i IteratorPowtórka — generyczne przechowywanie danych13Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieMetody rozszerzająceKlasy wywoływalneKlasy zapieczętowane (Dart 3)Rekordy (Dart 3)Wzorce i dopasowywanie (3.0)Typy wyliczeniowe z metodami16Projekt: Zarządzanie biblioteką
Omówienie projektuKlasy książek i użytkowników2Konstruktory w Dart
Konstruktor domyślnyKonstruktory nazwaneListy inicjalizująceKonstruktory stałeKonstruktory fabryczneKonstruktory przekierowującePodsumowanie — budowanie kształtów5Hermetyzacja
Elementy publiczne a prywatneKonwencja prefiksu _Prywatność na poziomie bibliotekiGettery i settery — szczegółowoUkrywanie informacjiPodsumowanie — dane uczniów8Domieszki
Wprowadzenie do domieszekTworzenie domieszekKorzystanie z wielu domieszekSłowo kluczowe on w domieszkachDomieszka a dziedziczenieDomieszka a interfejsPodsumowanie – system zwierząt11Metody specjalne
Nadpisanie toString()Nadpisanie hashCode i ==Interfejs ComparableMetoda call()Nadpisanie noSuchMethodPodsumowanie — własna kolekcja14Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy3Właściwości klas
Elementy instancji a elementy statycznePola final i constZmienne inicjalizowane z opóźnieniemMetody i pola statyczneGettery i setteryPowtórzenie – menedżer kont bankowych6Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superPrzesłanianie metodAdnotacja @overrideSłowo kluczowe final dla klasKonstruktory i dziedziczeniePowtórzenie – hierarchia pracowników9Polimorfizm
Podstawy polimorfizmuPolimorfizm za pomocą interfejsówSprawdzanie typu w czasie działaniaOperatory is i asSłowo kluczowe covariantPodsumowanie — procesor płatnościPoćwicz samodzielnie: Kompilator Dart online