Menu
Coddy logo textTech

Ripasso: calcolatore di forme

Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 30 di 70.

challenge icon

Sfida

Facile

Costruiamo 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 chiamata IShape nello spazio dei nomi Shapes. Ogni forma deve poter calcolare la propria area e descrivere se stessa. Dichiara due metodi: CalculateArea(), che restituisce un double, e GetDescription(), che restituisce una string.
  • Circle.cs: Crea una classe Circle nello spazio dei nomi Shapes che implementi IShape. 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 classe Rectangle nello spazio dei nomi Shapes che implementi IShape. Un rettangolo ha le proprietà Width e Height (entrambe double) 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 riferimenti IShape. 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.00

Nota 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

Esercitati da solo: Compilatore C# online