Menu
Coddy logo textTech

Recap – Shape Calculator

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 30 von 70.

challenge icon

Aufgabe

Einfach

Lassen Sie uns einen Formenrechner erstellen, der alles zusammenführt, was Sie über Schnittstellen und Polymorphismus gelernt haben. Sie werden ein System erstellen, in dem verschiedene Formen einheitlich über eine gemeinsame Schnittstelle verarbeitet werden können, was die Leistungsfähigkeit des Laufzeit-Polymorphismus demonstriert.

Sie werden Ihren Code über vier Dateien organisieren:

  • IShape.cs: Definieren Sie eine Schnittstelle namens IShape im Namespace Shapes. Jede Form muss in der Lage sein, ihre Fläche zu berechnen und sich selbst zu beschreiben. Deklarieren Sie zwei Methoden: CalculateArea(), die ein double zurückgibt, und GetDescription(), die einen string zurückgibt.
  • Circle.cs: Erstellen Sie eine Klasse Circle im Namespace Shapes, die IShape implementiert. Ein Kreis hat eine Eigenschaft Radius (double), die über seinen Konstruktor gesetzt wird. Die Flächenformel lautet Math.PI * Radius * Radius. Die Beschreibung sollte "Circle with radius {Radius}" zurückgeben.
  • Rectangle.cs: Erstellen Sie eine Klasse Rectangle im Namespace Shapes, die IShape implementiert. Ein Rechteck hat die Eigenschaften Width und Height (beide double), die über seinen Konstruktor gesetzt werden. Die Fläche ist einfach Breite mal Höhe. Die Beschreibung sollte "Rectangle {Width}x{Height}" zurückgeben.
  • Program.cs: Erstellen Sie in Ihrer Hauptdatei einen Kreis und ein Rechteck unter Verwendung von Eingabewerten und speichern Sie diese dann in einem Array von IShape-Referenzen. Durchlaufen Sie das Array in einer Schleife und geben Sie für jede Form ihre Beschreibung gefolgt von ihrer auf zwei Dezimalstellen gerundeten Fläche aus. Dies zeigt, wie Sie völlig unterschiedliche Formen über dieselbe Schnittstelle verarbeiten können!

Sie erhalten drei Eingaben:

  • Kreisradius (double)
  • Rechteckbreite (double)
  • Rechteckhöhe (double)

Geben Sie die Ausgabe für jede Form in diesem Format aus:

{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}

Wenn die Eingaben beispielsweise 5, 4 und 6 sind, sollte die Ausgabe wie folgt aussehen:

Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00

Beachten Sie, dass Ihre Schleife nicht wissen muss, ob sie es mit einem Kreis oder einem Rechteck zu tun hat – sie ruft einfach die Schnittstellenmethoden auf und lässt den Polymorphismus den Rest erledigen. Das ist die Eleganz der Programmierung gegen Schnittstellen!

Probier es selbst

using System;
using Shapes;

class Program
{
    public static void Main(string[] args)
    {
        // Eingabewerte lesen
        double circleRadius = Convert.ToDouble(Console.ReadLine());
        double rectWidth = Convert.ToDouble(Console.ReadLine());
        double rectHeight = Convert.ToDouble(Console.ReadLine());
        
        // TODO: Erstellen Sie ein Circle-Objekt mit dem angegebenen Radius
        
        // TODO: Erstellen Sie ein Rectangle-Objekt mit der angegebenen Breite und Höhe
        
        // TODO: Erstellen Sie ein Array von IShape, das beide Formen enthält
        
        // TODO: Durchlaufen Sie das Array und für jede Form:
        // - Geben Sie die Beschreibung mit GetDescription() aus
        // - Geben Sie "Area: " gefolgt von CalculateArea() gerundet auf 2 Dezimalstellen aus
    }
}

Alle Lektionen in Objektorientierte Programmierung