Menu
Coddy logo textTech

Zusammenfassung – Formrechner

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

challenge icon

Aufgabe

Einfach

Lass uns ein Formrechnersystem erstellen, das abstrakte Klassen und Schnittstellen zusammenführt, um ein flexibles Geometrie-Toolkit zu entwickeln. Du entwirfst eine Klassenhierarchie, in der verschiedene Formen durch Abstraktion gemeinsames Verhalten teilen, während jede Form ihre eigenen Berechnungen bereitstellt.

Du organisierst deinen Code in drei Dateien:

  • shape.dart: Definiere hier deine abstrakte Basisklasse und Schnittstelle:
    • Eine abstrakte Klasse Shape mit einer Eigenschaft String name und einem Konstruktor. Füge die abstrakten Methoden double calculateArea() und double calculatePerimeter() hinzu. Ergänze eine reguläre Methode describe(), die [name] - Area: [calculateArea()], Perimeter: [calculatePerimeter()] ausgibt.
    • Eine Klasse Drawable mit einer Methode draw(), die Drawing shape... ausgibt.
  • shapes.dart: Importiere shape.dart und erstelle deine konkreten Formklassen:
    • Eine Klasse Rectangle, die Shape erweitert und Drawable implementiert. Füge die Eigenschaften double width und double height hinzu. Berechne die Fläche als width * height und den Umfang als 2 * (width + height). Die Methode draw() soll Drawing rectangle [width]x[height] ausgeben.
    • Eine Klasse Circle, die Shape erweitert und Drawable implementiert. Füge eine Eigenschaft double radius hinzu. Verwende 3.14159 für Pi. Berechne die Fläche als pi * radius * radius und den Umfang (Kreisumfang) als 2 * pi * radius. Die Methode draw() soll Drawing circle with radius [radius] ausgeben.
  • main.dart: Importiere shapes.dart und führe deinen Formrechner vor:
    • Erstelle ein Rectangle mit dem Namen 'Rectangle', der Breite 5.0 und Höhe 3.0.
    • Erstelle einen Circle mit dem Namen 'Circle' und dem Radius 4.0.
    • Rufe für jede Form zuerst draw() und anschließend describe() auf.
    • Gib eine leere Zeile zwischen den beiden Formen aus.

Diese Herausforderung zeigt, wie abstrakte Klassen eine gemeinsame Struktur definieren (jede Form verfügt über Berechnungen für Fläche und Umfang), 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 grundlegende Identitä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

Übe selbstständig: Online-Dart-Compiler