Menu
Coddy logo textTech

Powtórka — kalkulator kształtów

Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 49 z 110.

challenge icon

Wyzwanie

Łatwy

Zbudujmy 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 Shape z właściwością String name i konstruktorem. Dodaj metody abstrakcyjne double calculateArea() i double calculatePerimeter(). Dodaj zwykłą metodę describe(), która wypisuje [name] - Area: [calculateArea()], Perimeter: [calculatePerimeter()]
    • Klasa Drawable z metodą draw(), która wypisuje Drawing shape...
  • shapes.dart: Zaimportuj shape.dart i utwórz konkretne klasy figur:
    • Klasa Rectangle, która rozszerza Shape i implementuje Drawable. Dodaj właściwości double width i double height. Oblicz pole jako width * height, a obwód jako 2 * (width + height). Metoda draw() powinna wypisywać Drawing rectangle [width]x[height]
    • Klasa Circle, która rozszerza Shape i implementuje Drawable. Dodaj właściwość double radius. Przyjmij 3.14159 jako wartość pi. Oblicz pole jako pi * radius * radius, a obwód (długość okręgu) jako 2 * pi * radius. Metoda draw() powinna wypisywać Drawing circle with radius [radius]
  • main.dart: Zaimportuj shapes.dart i zaprezentuj działanie kalkulatora figur:
    • Utwórz Rectangle o nazwie 'Rectangle', szerokości 5.0 i wysokości 3.0
    • Utwórz Circle o nazwie 'Circle' i promieniu 4.0
    • Dla każdej figury wywołaj draw(), a następnie describe()
    • Wypisz pusty wiersz między dwiema figurami

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.13272

Spró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

Poćwicz samodzielnie: Kompilator Dart online