Wiederholung – Formenrechner
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 30 von 70.
Aufgabe
EinfachLass 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 namensIShapeim NamespaceShapes. Jede Form muss ihre Fläche berechnen und sich selbst beschreiben können. Deklariere zwei Methoden:CalculateArea(), die eindoublezurückgibt, undGetDescription(), die einenstringzurückgibt.Circle.cs: Erstelle eine KlasseCircleim NamespaceShapes, dieIShapeimplementiert. Ein Kreis besitzt eine EigenschaftRadius(double), die über seinen Konstruktor festgelegt wird. Die Formel für die Fläche lautetMath.PI * Radius * Radius. Die Beschreibung soll"Circle with radius {Radius}"zurückgeben.Rectangle.cs: Erstelle eine KlasseRectangleim NamespaceShapes, dieIShapeimplementiert. Ein Rechteck besitzt die EigenschaftenWidthundHeight(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 ausIShape-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.00Beachte, 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
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjektinitialisiererWiederholung – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbungs-(:)-SyntaxDas „base“-Schlüsselwort„virtual“- und „override“-SchlüsselwörterVersiegelte KlassenDie „object“-BasisklasseWiederholung – Mitarbeiterhierarchie7Erweiterte Funktionen
Überladen von OperatorenIndexer (this[])ToString()-ÜberschreibungErweiterungsmethodenRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterThread-sicheres SingletonFactory-MusterObserver-Muster (Events)Strategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformKomponente für SpielfigurenFahrzeugvermietungsdienst2Eigenschaften & statische Member
Automatisch implementierte EigenschaftenNur lesbare/schreibbare EigenschaftenStatische Felder & MethodenStatische KlassenMember mit Ausdruckskörpern5Polymorphie & Interfaces
Compile- vs. Laufzeit-PolymorphieInterface vs. abstrakte KlasseMehrere InterfacesExplizite InterfacesUpcasting & DowncastingWiederholung – Formenrechner3Klassenarchitektur
Instanz- vs. statische DatenSchlüsselwörter 'readonly' & 'const'Backing FieldsRückblick – Bankkontenverwaltung6Kapselung
ZugriffsmodifikatorenEigenschaften zur KapselungImplementierung der DatenkapselungMuster für UnveränderlichkeitRückblick – SchülerdatenÜbe selbstständig: Online-C#-Compiler