Ripasso: calcolatore di forme
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 30 di 70.
Sfida
FacileCostruiamo un calcolatore di forme che metta insieme tutto ciò che hai imparato sulle interfacce e sul polimorfismo. Creerai un sistema in cui forme diverse possono essere elaborate in modo uniforme tramite un'interfaccia comune, dimostrando la potenza del polimorfismo a runtime.
Organizzerai il codice in quattro file:
IShape.cs: Definisci un'interfaccia chiamataIShapenello spazio dei nomiShapes. Ogni forma deve poter calcolare la propria area e descrivere se stessa. Dichiara due metodi:CalculateArea(), che restituisce undouble, eGetDescription(), che restituisce unastring.Circle.cs: Crea una classeCirclenello spazio dei nomiShapesche implementiIShape. Un cerchio ha una proprietàRadius(double) impostata tramite il costruttore. La formula dell'area èMath.PI * Radius * Radius. La descrizione deve restituire"Circle with radius {Radius}".Rectangle.cs: Crea una classeRectanglenello spazio dei nomiShapesche implementiIShape. Un rettangolo ha le proprietàWidtheHeight(entrambedouble) impostate tramite il costruttore. L'area è semplicemente la larghezza moltiplicata per l'altezza. La descrizione deve restituire"Rectangle {Width}x{Height}".Program.cs: Nel file principale, crea un cerchio e un rettangolo usando i valori di input, quindi inseriscili in un array di riferimentiIShape. Scorri l'array e, per ogni forma, stampa la sua descrizione seguita dalla sua area arrotondata a due cifre decimali. In questo modo dimostrerai come puoi elaborare forme completamente diverse tramite la stessa interfaccia!
Riceverai tre input:
- Raggio del cerchio (
double) - Larghezza del rettangolo (
double) - Altezza del rettangolo (
double)
Stampa l'output nel formato seguente per ogni forma:
{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}Ad esempio, se gli input sono 5, 4 e 6, l'output dovrebbe essere:
Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00Nota che il tuo ciclo non deve sapere se sta gestendo un cerchio o un rettangolo: chiama semplicemente i metodi dell'interfaccia e lascia che il polimorfismo si occupi del resto. Questa è l'eleganza della programmazione basata sulle interfacce!
Provalo tu
using System;
using Shapes;
class Program
{
public static void Main(string[] args)
{
// Leggi i valori di input
double circleRadius = Convert.ToDouble(Console.ReadLine());
double rectWidth = Convert.ToDouble(Console.ReadLine());
double rectHeight = Convert.ToDouble(Console.ReadLine());
// TODO: Crea un oggetto Circle con il raggio fornito
// TODO: Crea un oggetto Rectangle con la larghezza e l'altezza fornite
// TODO: Crea un array di IShape contenente entrambe le forme
// TODO: Scorri l'array e, per ogni forma:
// - Stampa la descrizione usando GetDescription()
// - Stampa "Area: " seguito dal risultato di CalculateArea() arrotondato a 2 cifre decimali
}
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniNamespace e direttiveIntroduzione a classi e oggettiLa parola chiave "this"Metodi e parametriCampi e proprietàCostruttoriInizializzatori di oggettiRiepilogo - Calcolatrice semplice4Ereditarietà
Sintassi di base dell'ereditarietà (:)La parola chiave 'base'Parole chiave virtual e overrideClassi sealedLa classe base 'object'Riepilogo - Gerarchia dei dipendenti7Funzionalità avanzate
Sovraccarico degli operatoriIndicizzatori (this[])Override di ToString()Metodi di estensioneRiepilogo - Lista personalizzata10Pattern di progettazione Parte 1
Introduzione ai pattern di progettazioneSingleton thread-safePattern FactoryPattern Observer (eventi)Pattern Strategy2Proprietà e membri statici
Proprietà implementate automaticamenteProprietà di sola lettura e di sola scritturaCampi e metodi staticiClassi staticheMembri con corpo di espressione5Polimorfismo e interfacce
Polimorfismo a compile time e runtimeInterfaccia o classe astrattaInterfacce multipleInterfacce espliciteUpcasting e downcastingRipasso: calcolatore di forme8Concetti avanzati di programmazione a oggetti
Composizione invece dell'ereditarietàTipi generici (classi e metodi)Delegati ed eventiAttributi e reflectionIDisposable e istruzione usingNozioni di base sull'iniezione delle dipendenze11Pattern di progettazione, parte 2
Pattern del ComandoPattern dell’AdattatorePattern del DecoratorePattern Template MethodPattern dello StatoPattern Composito3Architettura delle classi
Dati di istanza vs staticiParole chiave 'readonly' e 'const'Campi di supportoRiepilogo - Gestore di conti bancari6Incapsulamento
Modificatori di accessoProprietà per l'incapsulamentoImplementazione dell'occultamento dei datiModelli di immutabilitàRiepilogo - Registri degli studentiEsercitati da solo: Compilatore C# online