Astrazione Nei Principi OOP
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 una specifica implementazione. 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 fondamentale, 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 siamo obbligati a utilizzarlo dove non è necessario.
Potrebbe sembrare complesso, quindi passiamo a un esempio:
Car.java
123456789public 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, ci baseremo sull'astrazione chiamata Car. Per semplificare ulteriormente:
Car è un modello su cui vengono create classi di auto specifiche.
Presta attenzione alla sintassi:
public abstract class className{ }.
Questa è la sintassi per dichiarare una classe astratta. Nota anche la sintassi per dichiarare un metodo astratto:
public abstract returnValue methodName();
Un metodo astratto non ha un corpo; questa è la sua caratteristica principale. Le sottoclassi di una classe astratta sovrascrivono questo metodo astratto per definire la propria implementazione, utilizzando il polimorfismo.
Analizziamo più da vicino cosa sia una classe astratta:
Nota che non è possibile 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. Prendendo l'esempio delle automobili, ogni automobile dovrebbe avere un modello, anno di produzione, velocità massima e colore. Dovrebbero anche essere in grado di muoversi e fermarsi. Questo è tutto; da qui, progetterai le tue classi specifiche basandoti su questo schema 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 sarà possibile 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 che metodi con implementazioni;
- Una classe che eredita da una classe astratta deve sovrascrivere tutti i metodi astratti;
- È possibile 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 comprendere 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
123456789public 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
Truckche 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 specifica che il
Truckha 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!
Riepilogo
L'astrazione è probabilmente il principio più complesso dell'OOP da comprendere, ed è molto probabile che in questo momento non sia tutto chiaro. Tuttavia, non pensare di essere l'unico. L'astrazione è un concetto che inizialmente risulta difficile da assimilare per la maggior parte degli sviluppatori. Con il tempo, si acquisirà una migliore comprensione su come lavorare efficacemente con l'astrazione e le classi astratte. L'astrazione è un principio fondamentale perché consente di rendere i 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!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Can you explain the difference between abstraction and encapsulation?
Can you give more real-world examples of abstraction in Java?
How do interfaces relate to abstraction in OOP?
Awesome!
Completion rate improved to 4.76
Astrazione Nei Principi OOP
Scorri per mostrare il menu
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 una specifica implementazione. 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 fondamentale, 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 siamo obbligati a utilizzarlo dove non è necessario.
Potrebbe sembrare complesso, quindi passiamo a un esempio:
Car.java
123456789public 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, ci baseremo sull'astrazione chiamata Car. Per semplificare ulteriormente:
Car è un modello su cui vengono create classi di auto specifiche.
Presta attenzione alla sintassi:
public abstract class className{ }.
Questa è la sintassi per dichiarare una classe astratta. Nota anche la sintassi per dichiarare un metodo astratto:
public abstract returnValue methodName();
Un metodo astratto non ha un corpo; questa è la sua caratteristica principale. Le sottoclassi di una classe astratta sovrascrivono questo metodo astratto per definire la propria implementazione, utilizzando il polimorfismo.
Analizziamo più da vicino cosa sia una classe astratta:
Nota che non è possibile 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. Prendendo l'esempio delle automobili, ogni automobile dovrebbe avere un modello, anno di produzione, velocità massima e colore. Dovrebbero anche essere in grado di muoversi e fermarsi. Questo è tutto; da qui, progetterai le tue classi specifiche basandoti su questo schema 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 sarà possibile 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 che metodi con implementazioni;
- Una classe che eredita da una classe astratta deve sovrascrivere tutti i metodi astratti;
- È possibile 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 comprendere 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
123456789public 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
Truckche 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 specifica che il
Truckha 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!
Riepilogo
L'astrazione è probabilmente il principio più complesso dell'OOP da comprendere, ed è molto probabile che in questo momento non sia tutto chiaro. Tuttavia, non pensare di essere l'unico. L'astrazione è un concetto che inizialmente risulta difficile da assimilare per la maggior parte degli sviluppatori. Con il tempo, si acquisirà una migliore comprensione su come lavorare efficacemente con l'astrazione e le classi astratte. L'astrazione è un principio fondamentale perché consente di rendere i 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!