Menu
Coddy logo textTech

Wiederholung – Formenrechner

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

challenge icon

Aufgabe

Einfach

Lass uns einen Formrechner erstellen, der alles zusammenführt, was du über Schnittstellen und Polymorphismus gelernt hast. Du erstellst ein System, in dem verschiedene Formen einheitlich über eine gemeinsame Schnittstelle verarbeitet werden können, und demonstrierst damit die Leistungsfähigkeit des Laufzeit-Polymorphismus.

Du wirst deinen Code auf vier Dateien verteilen:

  • IShape.cs: Definiere eine Schnittstelle namens IShape im Namespace Shapes. Jede Form muss ihre Fläche berechnen und sich selbst beschreiben können. Deklariere zwei Methoden: CalculateArea(), die ein double zurückgibt, und GetDescription(), die einen string zurückgibt.
  • Circle.cs: Erstelle eine Klasse Circle im Namespace Shapes, die IShape implementiert. Ein Kreis besitzt eine Eigenschaft Radius (double), die über seinen Konstruktor festgelegt wird. Die Formel für die Fläche lautet Math.PI * Radius * Radius. Die Beschreibung soll "Circle with radius {Radius}" zurückgeben.
  • Rectangle.cs: Erstelle eine Klasse Rectangle im Namespace Shapes, die IShape implementiert. Ein Rechteck besitzt die Eigenschaften Width und Height (beide double), die über seinen Konstruktor festgelegt werden. Die Fläche ist einfach die Breite multipliziert mit der Höhe. Die Beschreibung soll "Rectangle {Width}x{Height}" zurückgeben.
  • Program.cs: Erstelle in deiner Hauptdatei anhand von Eingabewerten einen Kreis und ein Rechteck und speichere sie anschließend in einem Array aus IShape-Referenzen. Durchlaufe das Array und gib für jede Form ihre Beschreibung gefolgt von ihrer auf zwei Dezimalstellen gerundeten Fläche aus. Dies zeigt, wie du völlig unterschiedliche Formen über dieselbe Schnittstelle verarbeiten kannst!

Du erhältst drei Eingaben:

  • Radius des Kreises (double)
  • Breite des Rechtecks (double)
  • Höhe des Rechtecks (double)

Gib 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 lauten, sollte die Ausgabe wie folgt aussehen:

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

Beachte, dass deine Schleife nicht wissen muss, ob sie einen Kreis oder ein Rechteck verarbeitet – sie ruft einfach die Methoden der Schnittstelle auf und überlässt den Rest dem Polymorphismus. 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

Übe selbstständig: Online-C#-Compiler