Menu
Coddy logo textTech

Rückblick – Shape Calculator

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 49 von 110.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Formberechnungssystem erstellen, das abstrakte Klassen und Schnittstellen kombiniert, um ein flexibles Geometrie-Toolkit zu schaffen. Sie werden eine Klassenhierarchie entwerfen, in der verschiedene Formen gemeinsames Verhalten durch Abstraktion teilen, während jede Form ihre eigenen einzigartigen Berechnungen bereitstellt.

Sie werden Ihren Code in drei Dateien organisieren:

  • shape.dart: Definieren Sie hier Ihre abstrakte Basisklasse und Schnittstelle:
    • Eine abstrakte Klasse Shape mit einer String name Eigenschaft und einem Konstruktor. Fügen Sie die abstrakten Methoden double calculateArea() und double calculatePerimeter() hinzu. Fügen Sie eine reguläre Methode describe() hinzu, die '$name - Area: ${calculateArea()}, Perimeter: ${calculatePerimeter()}' ausgibt.
    • Eine Drawable Klasse mit einer Methode draw(), die 'Drawing shape...' ausgibt.
  • shapes.dart: Importieren Sie shape.dart und erstellen Sie Ihre konkreten Form-Klassen:
    • Eine Rectangle Klasse, die Shape erweitert und Drawable implementiert. Fügen Sie die Eigenschaften double width und double height hinzu. Berechnen Sie die Fläche als width * height und den Umfang als 2 * (width + height). Die draw() Methode sollte 'Drawing rectangle ${width}x$height' ausgeben.
    • Eine Circle Klasse, die Shape erweitert und Drawable implementiert. Fügen Sie eine double radius Eigenschaft hinzu. Verwenden Sie 3.14159 für Pi. Berechnen Sie die Fläche als pi * radius * radius und den Umfang (Umfang) als 2 * pi * radius. Die draw() Methode sollte 'Drawing circle with radius $radius' ausgeben.
  • main.dart: Importieren Sie shapes.dart und demonstrieren Sie Ihr Formberechnungssystem:
    • Erstellen Sie ein Rectangle namens 'Rectangle' mit der Breite 5.0 und der Höhe 3.0.
    • Erstellen Sie einen Circle namens 'Circle' mit dem Radius 4.0.
    • Rufen Sie für jede Form zuerst draw() und dann describe() auf.
    • Geben Sie eine Leerzeile zwischen den beiden Formen aus.

Diese Herausforderung zeigt, wie abstrakte Klassen eine gemeinsame Struktur definieren (jede Form hat Flächen- und Umfangsberechnungen), während Schnittstellen zusätzliche Fähigkeiten hinzufügen (Formen, die gezeichnet werden können). Jede konkrete Klasse erweitert die abstrakte Klasse für ihre Kernidentität und implementiert die Schnittstelle für zusätzliche Funktionalität.

Erwartete Ausgabe:

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

Probier es selbst

import 'shapes.dart';

void main() {
  // TODO: Erstelle ein Rechteck namens 'Rectangle' mit der Breite 5.0 und der Höhe 3.0
  
  // TODO: Erstelle einen Kreis namens 'Circle' mit dem Radius 4.0
  
  // TODO: Rufe für das Rechteck draw() und dann describe() auf
  
  // TODO: Gib eine Leerzeile aus
  
  // TODO: Rufe für den Kreis draw() und dann describe() auf
}

Alle Lektionen in Objektorientierte Programmierung