Classi Astratte

Last Updated on 2 anni | Published: 25/04/2024

Classi Astratte

Le classi astratte in Java rappresentano un concetto fondamentale nella programmazione orientata agli oggetti e servono come base per creare altre classi.

Una classe astratta non può essere istanziata direttamente, ma può avere metodi astratti, che sono dichiarati ma non implementati. Questi metodi astratti devono essere implementati nelle classi concrete che estendono la classe astratta.

Le classi astratte sono utili per fornire una struttura comune e condivisa tra le classi figlie, garantendo una maggiore coerenza e coesione nel codice. Possono contenere sia metodi astratti che metodi con implementazioni concrete, e possono avere variabili di istanza, costruttori, metodi statici e metodi final.

Alcune caratteristiche e regole delle classi astratte includono:

  1. Impossibilità di Istanziamento Diretto: Una classe astratta non può essere istanziata direttamente con l’operatore new.
  2. Metodi Astratti: Una classe astratta può contenere metodi astratti, che devono essere dichiarati senza implementazione e devono essere implementati nelle sottoclassi.
  3. Metodi con Implementazione: Una classe astratta può anche contenere metodi con implementazione concreta, che possono essere ereditati dalle sottoclassi senza necessità di override.
  4. Ereditarietà: Le classi astratte possono essere estese da altre classi, che ereditano sia i metodi concreti che i metodi astratti dalla classe astratta.
  5. Polimorfismo: Le classi astratte supportano il polimorfismo, permettendo di utilizzare riferimenti di tipo classe astratta per riferirsi a oggetti di classi concrete.

Ecco un esempio di utilizzo di classi astratte in un modello JavaBean ispirato al dominio del commercio elettronico:

public abstract class Prodotti {
     private String nome;
     private double prezzo;
     private boolean disponibile;
 
     public Prodotti(String nome, double prezzo, boolean disponibile) {
           super();
           this.nome = nome;
           this.prezzo = prezzo;
           this.disponibile = disponibile;
     }
      public void setPrezzo(double prezzo) {
          this.prezzo = prezzo;
     }
      public String getNome() {
          return nome;
     }
     public double getPrezzo() {
          return prezzo;
      }
      public boolean isDisponibile() {
          return disponibile;
      }
      public abstract double calcolaSconto();

}

public class Libri extends Prodotti{
      private String autore;
      private String genere;
 
      public Libri(String nome, double prezzo, boolean disponibile, String autore, String genere) {
            super(nome, prezzo, disponibile);
            this.autore = autore;
            this.genere = genere;
      }
      public String getAutore() {
           return autore;
      }
      public void setAutore(String autore) {
            this.autore = autore;
      }
      public String getGenere() {
           return genere;
      }
      public void setGenere(String genere) {
           this.genere = genere;
      }
     @Override
      public double calcolaSconto() {
           return getPrezzo() * 0.1;  // sconto 10%
      }
}
public static void main(String[] args) {
      // Creazione di un oggetto Libro
     Libri libro = new Libri(“Il Signore degli Anelli”, 29.99, true, “J.R.R.
                                              Tolkien”, “Fantasy”);
      // Utilizzo dei metodi per ottenere informazioni sul libro
      System.out.println(“Nome del libro: ” + libro.getNome());
      System.out.println(“Autore: ” + libro.getAutore());
      System.out.println(“Genere: ” + libro.getGenere());
      System.out.println(“Prezzo: €” + libro.getPrezzo());
      System.out.println(“Disponibile: ” + (libro.isDisponibile() ? “Sì” : “No“));
      // Calcolo dello sconto per il libro
     double sconto = libro.calcolaSconto();
      System.out.println(“Sconto applicato: €” + sconto);
      // Aggiornamento del prezzo del libro
      libro.setPrezzo(libro.getPrezzo() – sconto);
      System.out.println(“Prezzo scontato: €” + libro.getPrezzo());
}

Nel prossimo articolo parleremo del principio del Polimorfismo in Java che è anch’ esso uno dei concetti fondamentali della programmazione ad oggetti (OOP), che offre estensibilità e chiarezza ne design del software …….

LABORATORIO

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *