Riepilogo - Calcolatore di forme
Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 33 di 87.
Sfida
FacileCostruiamo un calcolatore di forme che riunisce tutti i concetti di polimorfismo che hai imparato in questo capitolo. Creerai una classe astratta Shape con sottoclassi concrete, poi userai il polimorfismo per calcolare e visualizzare le aree in modo uniforme.
Organizzerai il codice in quattro file:
Shape.java: Crea una classe astratta che funge da base per tutte le forme. Ogni forma ha un camponame(String). Includi un costruttore per inizializzarlo, un metodo gettergetName()e un metodo astrattogetArea()che restituisce un double. Aggiungi anche un metododescribe()che restituisce:[name]: [area](dove area è formattata con 2 cifre decimali usandoString.format("%.2f", getArea())).Circle.java: Crea una classe concreta che estende Shape. I cerchi hanno un camporadius(double). Usasuperper passare "Circle" come nome. ImplementagetArea()in modo che restituisca l'area usandoMath.PI * radius * radius.Rectangle.java: Crea un'altra classe concreta che estende Shape. I rettangoli hanno i campiwidtheheight(entrambi double). Passa "Rectangle" come nome al costruttore della classe padre. ImplementagetArea()in modo che restituisca width moltiplicato per height.Main.java: Crea un calcolatore di forme che mostri il polimorfismo in azione. Riceverai tre input: un raggio per il cerchio, una larghezza e un'altezza per il rettangolo.Crea un Circle e un Rectangle, poi memorizzali in un array di riferimenti
Shape. Scorri l'array e, per ogni forma, stampa la sua descrizione usando il metododescribe().Dopo il ciclo, calcola e stampa l'area totale di tutte le forme nel formato:
Total area: [sum](anch'essa formattata con 2 cifre decimali). Usa un ciclo separato o un accumulatore per sommare le aree chiamandogetArea()su ogni riferimento alla forma.
Riceverai tre input: il raggio del cerchio (double), la larghezza del rettangolo (double) e l'altezza del rettangolo (double).
L'output deve mostrare tre righe: una descrizione per ogni forma, seguita dall'area totale. Nota come puoi trattare uniformemente forme diverse attraverso il tipo astratto Shape, mentre ogni forma calcola la propria area a modo suo!
Provalo tu
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leggi i valori di input
double radius = scanner.nextDouble();
double width = scanner.nextDouble();
double height = scanner.nextDouble();
// TODO: Crea un oggetto Circle usando radius
// TODO: Crea un oggetto Rectangle usando width e height
// TODO: Crea un array di riferimenti a Shape e memorizzaci entrambe le forme
// TODO: Scorri l'array e stampa la descrizione di ogni forma usando describe()
// TODO: Calcola l'area totale di tutte le forme
// Usa un ciclo o un accumulatore per sommare le aree chiamando getArea() su ogni forma
// TODO: Stampa l'area totale nel formato: "Total area: [sum]"
// Usa String.format("%.2f", totalArea) per la formattazione
}
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione a oggetti
File esterniIntroduzione alla programmazione a oggettiClassi e oggettiLa parola chiave thisMetodiCampi (attributi)Metodo costruttoreSovraccarico dei costruttoriRipasso - Calcolatrice semplice4Ereditarietà
Ereditarietà di base (extends)La parola chiave superSovrascrittura dei metodi (@Override)Concatenamento dei costruttoriLa classe ObjectEreditarietà singola e multilivelloPerché non esiste l'ereditarietà multipla delle classiRiepilogo: gerarchia dei dipendenti7Metodi speciali e classe Object
Metodo toString()equals() e hashCode()Metodo clone()compareTo() e ComparableInterfaccia ComparatorRiepilogo - Ordinamento personalizzato2Modificatori di accesso e incapsulamento
Panoramica dei livelli di accessoMetodi getter e setterNascondimento delle informazioniLa parola chiave finalRiepilogo - Gestore di conti bancari5Polimorfismo
Nozioni di base sull'overloading dei metodiOverride dei metodi (a runtime)Upcasting e downcastingL'operatore instanceofClassi e metodi astrattiRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàAggregazione vs composizioneClassi interne, annidate e anonimeEnum e metodi degli EnumRecord (Java 16+)Classi sealed (Java 17+)11Modelli di progettazione Parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern BuilderPattern ObserverPattern Strategy3Proprietà di classe e membri statici
Variabili di istanza e staticheMetodi staticiBlocchi staticiCostanti (static final)Riepilogo - Contatore e utility6Interfacce e classi astratte
Introduzione alle interfacceImplementazione delle interfacceImplementazione di più interfacceMetodi default e static nelle interfacceClassi astratte e interfacce a confrontoInterfacce funzionaliRiepilogo: sistema di pagamento9Tipi generici
Introduzione ai tipi genericiClassi genericheMetodi genericiParametri di tipo con limitiCaratteri jolly (?, extends, super)Riepilogo - Contenitore generico12Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern IteratorEsercitati da solo: Compilatore Java online