Menu
Coddy logo textTech

Riepilogo - Calcolatore di forme

Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 49 di 110.

challenge icon

Sfida

Facile

Costruiamo un sistema per calcolare le proprietà delle forme geometriche, che unisce classi astratte e interfacce per creare un toolkit geometrico flessibile. Progetterai una gerarchia di classi in cui le diverse forme condividono comportamenti comuni tramite l'astrazione, mentre ciascuna forma fornisce i propri calcoli specifici.

Organizzerai il codice in tre file:

  • shape.dart: definisci qui la classe base astratta e l'interfaccia:
    • Una classe astratta Shape con una proprietà String name e un costruttore. Includi i metodi astratti double calculateArea() e double calculatePerimeter(). Aggiungi un metodo normale describe() che stampa [name] - Area: [calculateArea()], Perimeter: [calculatePerimeter()]
    • Una classe Drawable con un metodo draw() che stampa Drawing shape...
  • shapes.dart: importa shape.dart e crea le classi concrete delle forme:
    • Una classe Rectangle che estende Shape e implementa Drawable. Aggiungi le proprietà double width e double height. Calcola l'area come width * height e il perimetro come 2 * (width + height). Il metodo draw() dovrebbe stampare Drawing rectangle [width]x[height]
    • Una classe Circle che estende Shape e implementa Drawable. Aggiungi una proprietà double radius. Usa 3.14159 per pi. Calcola l'area come pi * radius * radius e il perimetro (circonferenza) come 2 * pi * radius. Il metodo draw() dovrebbe stampare Drawing circle with radius [radius]
  • main.dart: importa shapes.dart e mostra il funzionamento del tuo calcolatore di forme:
    • Crea un Rectangle chiamato 'Rectangle' con larghezza 5.0 e altezza 3.0
    • Crea un Circle chiamato 'Circle' con raggio 4.0
    • Per ogni forma, chiama draw() e poi describe()
    • Stampa una riga vuota tra le due forme

Questa sfida mostra come le classi astratte definiscono una struttura condivisa (ogni forma prevede calcoli dell'area e del perimetro), mentre le interfacce aggiungono ulteriori capacità (le forme che si possono disegnare). Ogni classe concreta estende la classe astratta per la propria identità fondamentale e implementa l'interfaccia per le funzionalità aggiuntive.

Output previsto:

Drawing rectangle 5.0x3.0
Rectangle - Area: 15.0, Perimeter: 16.0

Drawing circle with radius 4.0
Circle - Area: 50.26544, Perimeter: 25.13272

Provalo tu

import 'shapes.dart';

void main() {
  // TODO: Crea un Rectangle chiamato 'Rectangle' con larghezza 5.0 e altezza 3.0
  
  // TODO: Crea un Circle chiamato 'Circle' con raggio 4.0
  
  // TODO: Per il rettangolo, chiama draw() e poi describe()
  
  // TODO: Stampa una riga vuota
  
  // TODO: Per il cerchio, chiama draw() e poi describe()
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Dart online