Carmine2898 ha scritto:
... Non mi è chiara invece l'utilità di questa cosa. ....
Mettiamola in un'altro modo.
E' abbastanza ovvio che lavorare con una
singola figura geometrica non e' molto utile: qualunque disegno tu voglia realizzare richiede
molte figure geometriche.
Quindi, da qualche parte, avrai la necessita' di usare una
collezione di figure geometriche.
Ovviamente tale collezione NON POTRA ESSERE una
collezione di rettangoli, perche' non tutte le figure geometriche saranno rettangoli. Vabbe', ci puo' essere il caso super semplice in cui il tuo disegno conterra' solo rettangoli, ma puoi tranquillamente immaginare disegni che contengono ANCHE ALTRE figure geometriche.
Non potra' essere una
collezione di triangoli oppure una
collezione di cerchi, per lo stesso motivo.
Potresti pensare di gestire collezioni specifiche per ogni tipo di figura geometrica, ma poiche' su queste collezioni dovrai fare esattamente le stesse cose, se hai TRE tipi di figure geometriche, dovrai scrivere lo stesso codice TRE volte.
Se aggiungi nuove figure geometriche (pentagono, esagono, la stella, la freccia, ...) dovrai scrivere N volte lo stesso codice.
Ovviamente questo risulterebbe DECISAMENTE scomodo: devi fare n-mila volte copia/incolla, e se correggi l'implementazione per una figura geometriche, poi ti devi ricordare di fare la stessa cosa per tutte le altre N figure geometriche, con rischio di dimenticarti pezzi per strada.
Per ovviare a questo problema, ci sono DUE soluzioni possibili:
1) usare una
classe base (molto probabilmente
astratta) da cui TUTTE le TUE figure geometriche derivano, ed in cui implementare le funzionalita' COMUNI a tutte le figure
Ma usare una classe base ha un piccolo inconveniente: NON E' DETTO che tu voglia avere TUTTE le tue figure geometriche derivate da questa classe.
Immagina, ad esempio, di avere un oggettone che descrive una
stella (oggetto astronomico): per poterla disegnare ti serve avere una figura geometrica. Potresti, ad esempio, implementare un metodo "getFiguraGeometrica()" che ti ritorna la corrispondente figura.
2) un'altra soluzione e' quella di usare un'
interfaccia: se una classe implementa l'interfaccia, allora quella classe DEVE implementare i metodi definiti dall'interfaccia, MA NON C'E' nessun obbligo a derivare da una specifica classe base.
Il tuo oggetto
stella, quindi, essendo un oggetto astronomico, non deriva, ovviamente, dalla classe base delle figure geometriche, ma per poterlo utilizzare come figura geometrica, e' sufficiente che implementi i metodi dell'interfaccia.
Come ha detto @andbin, per poter fare della programmazione ad oggetti, FONDAMENTALE e' capire che cosa e' una classe, un'interfaccia, l'ereditarieta', l'overloading ecc. Sono STRUMENTI FONDAMENTALI.
E' come voler realizzare sculture senza saper usare martello e scalpello.