Contenuti del Corso
Java OOP
Java OOP
Principi OOP: Astrazione
Astrazione
Siamo arrivati all'ultimo, ma molto importante, principio della OOP: Astrazione. La parola "astrazione" suona piuttosto astratta e, in breve, questo principio ci dice che dovremmo dipendere dall'astrazione piuttosto che da un'implementazione specifica. Tuttavia, questo potrebbe sembrare complesso ora. Iniziamo guardando la definizione:
Ad esempio, abbiamo una classe chiamata Person,
e molte classi diverse derivano da essa. Person
possiede vari campi e metodi comuni a tutte le classi. Tuttavia, quando abbiamo una classe chiamata BasketballPlayer,
, la caratteristica height
diventa cruciale, mentre per una classe come Driver
, height
è irrilevante e non importante. È qui che entra in gioco l'astrazione. Ereditando da un'astrazione, possiamo rendere il parametro height
opzionale, così non dobbiamo utilizzarlo dove non è necessario.
Potrebbe sembrare complesso, quindi passiamo a un esempio:
Car.java
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
La classe Car
non rappresenta qualcosa di specifico. Non esiste semplicemente una Car
; esistono berline, camion, trattori. Pertanto, dipenderemo dall'astrazione chiamata Car
. Per semplificare ulteriormente:
Car
è un modello su cui creiamo classi di auto specifiche.
Presta attenzione alla sintassi:
Questa è la sintassi per dichiarare una classe astratta. Nota anche la sintassi per dichiarare un metodo astratto:
Un metodo astratto non ha un corpo; questa è la sua caratteristica principale. Le sottoclassi di una classe astratta sovrascriveranno questo metodo astratto per definire la propria implementazione, utilizzando il polimorfismo.
Analizziamo più da vicino cosa sia una classe astratta:
Nota che non possiamo creare un oggetto di una classe astratta; ciò genererà un errore:
Le classi astratte ci liberano dal trattare solo con "oggetti"; ci forniscono uno stato di base e un comportamento di base. Prendendo l'esempio delle auto, ogni auto dovrebbe avere un modello, anno di produzione, velocità massima e colore. Dovrebbero anche poter muoversi e fermarsi. Questo è tutto; da qui, progetterai le tue classi specifiche basandoti su questo modello astratto.
Regole per la creazione di una classe astratta
Una classe astratta è una classe che contiene almeno un metodo astratto. Puoi creare una classe astratta senza alcun metodo astratto, ma in tal caso non avrebbe uno scopo. Non potrai istanziare oggetti di una classe astratta;
I metodi astratti possono esistere solo all'interno di una classe astratta; non puoi creare metodi astratti al di fuori di una classe astratta;
I metodi all'interno di una classe astratta possono essere sia metodi astratti sia metodi con implementazione;
Una classe che eredita da una classe astratta deve sovrascrivere tutti i metodi astratti;
Puoi ereditare da un massimo di una classe (astratta o non astratta);
Una classe astratta dovrebbe rappresentare le proprietà e i comportamenti comuni delle sue classi derivate. Approfondiremo questo aspetto quando studieremo i principi SOLID.
Consideriamo un esempio per capire come le sottoclassi dovrebbero sovrascrivere i metodi astratti ereditando da una classe astratta, utilizzando l'esempio della classe figlia Truck
:
Ecco il codice dallo screenshot, riscritto per una migliore leggibilità e chiarezza:
Car.java
Truck.java
Main.java
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Analizziamo più da vicino quanto scritto sopra nel dettaglio:
Prima slide: Viene creata una sottoclasse
Truck
che eredita dalla classe astrattaCar
. Si può notare che l'IDE suggerisce di implementare i metodi richiesti;Seconda slide: Vengono sovrascritti i metodi necessari. Ad esempio, si indica che il
Truck
ha iniziato a muoversi e poi si è fermato;Terza slide: Si crea un oggetto nel metodo
main
. Prestare attenzione alla sintassi utilizzata:Car name = new Truck();
. Si inizia a creare l'oggetto tramite astrazione e si termina con un'implementazione specifica. Questo si chiama composizione. Successivamente si assegnano i valori ai campi secondo necessità e si richiamano i metodi sovrascritti.
Voilà! Se tutto è chiaro, hai appreso come utilizzare una classe astratta!
Sommario
L'astrazione è probabilmente il principio più difficile da comprendere della OOP, ed è molto probabile che tu non abbia ancora afferrato tutto in questo momento. Ma non pensare di essere solo in questo. L'astrazione è un concetto che inizialmente risulta difficile da comprendere per la maggior parte degli sviluppatori. Col tempo, capirai meglio come lavorare efficacemente con l'astrazione e le classi astratte. L'astrazione è un principio cruciale perché ci permette di rendere i nostri programmi estensibili e altamente flessibili.
1. Che cos'è l'astrazione nella Programmazione Orientata agli Oggetti?
2. Quali delle seguenti affermazioni sono vere riguardo l'astrazione?
3. Qual è lo scopo di una classe astratta in Java?
4. In che modo l'astrazione contribuisce alla manutenibilità del codice?
Grazie per i tuoi commenti!