Recap – Shape Calculator
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy — Lektion 30 von 70.
Aufgabe
EinfachLassen 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 namensIShapeim NamespaceShapes. Jede Form muss in der Lage sein, ihre Fläche zu berechnen und sich selbst zu beschreiben. Deklarieren Sie zwei Methoden:CalculateArea(), die eindoublezurückgibt, undGetDescription(), die einenstringzurückgibt.Circle.cs: Erstellen Sie eine KlasseCircleim NamespaceShapes, dieIShapeimplementiert. Ein Kreis hat eine EigenschaftRadius(double), die über seinen Konstruktor gesetzt wird. Die Flächenformel lautetMath.PI * Radius * Radius. Die Beschreibung sollte"Circle with radius {Radius}"zurückgeben.Rectangle.cs: Erstellen Sie eine KlasseRectangleim NamespaceShapes, dieIShapeimplementiert. Ein Rechteck hat die EigenschaftenWidthundHeight(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 vonIShape-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.00Beachten 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
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjekt-InitialisiererZusammenfassung - Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (:) SyntaxDas 'base'-SchlüsselwortVirtual & Override SchlüsselwörterVersiegelte KlassenDie 'object'-BasisklasseZusammenfassung – Mitarbeiter-Hierarchie7Fortgeschrittene Funktionen
OperatorüberladungIndexer (this[])ToString() überschreibenErweiterungsmethodenZusammenfassung - Benutzerdefinierte Liste2Eigenschaften & Statische Member
Automatisch implementierte EigenschaftenRead-Only- & Write-Only-EigenschaftenStatische Felder & MethodenStatische KlassenExpression-Bodied Member5Polymorphismus & Interfaces
Compile- vs. Runtime-PolymorphismusInterface vs. abstrakte KlasseMehrfache InterfacesExplizite InterfacesUpcasting & DowncastingRecap – Shape Calculator3Klassenarchitektur
Instanz- vs. statische Daten'readonly' & 'const' SchlüsselwörterBacking FieldsZusammenfassung - Bankkonto-Manager6Kapselung
ZugriffsmodifikatorenProperties zur KapselungImplementierung von Data HidingImmutability-MusterRückblick – Studierendendaten