Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Programmazione in Java - Parte 6 - Oggetti, Schemi e mappe concettuali di Programmazione Java

ARGOMENTI: - Oggetto - Classe - Variabili d'Istanza e Variabili di Classe 3. I Costruttori 4. I Metodi 5. Overloading 1. Polimorfismo 2. Upcast e Downcast 3. L'operatore instanceof 4. Dynamic Binding 5. Metodi final e classi final 6. Limiti del Dynamic Binding 7. La Superclasse Universale Object 8. I metodi equals e toString 1. Le Classi Astratte 2. Metodi Astratti 3. Regole delle Classi Astratte 4. Variabili di tipo astratto 5. Perché usare le classi astratte 6. Le Interfacce 7. Implementare un'interfaccia 8. Ereditarietà multipla con le interfacce 9. Interfacce come tipo riferimento 10. Ereditarietà tra interfacce 11. Riepilogo comparativo • 1. Concetti di base sull'Ereditarietà • 2. Overriding • 3. Overriding vs Overloading • 4. Modalità d'accesso: Variabili e Metodi Privati 1. Concetti base sulle Eccezioni • 2. Tipi di Eccezioni • 3. Catturare un'Eccezione (try / catch / finally) • 4. Propagare un'Eccezione (throws)

Tipologia: Schemi e mappe concettuali

2025/2026

In vendita dal 17/04/2026

airruh
airruh 🇮🇹

4.7

(17)

73 documenti

1 / 53

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Programmazione in Java Classi e Oggetti Introduzione alla Programmazione a Oggetti Argomenti trattati Cos'è un Oggetto • Cos'è una Classe • Come creare un Oggetto Dispensa didattica
Indice degli Argomenti
1. Cos'è un Oggetto pag. 2
2. Cos'è una Classe pag. 5
3. Come creare un Oggetto pag. 7
4. Riepilogo dei concetti chiave pag. 11
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35

Anteprima parziale del testo

Scarica Programmazione in Java - Parte 6 - Oggetti e più Schemi e mappe concettuali in PDF di Programmazione Java solo su Docsity!

Indice degli Argomenti

    1. Cos'è un Oggetto pag.
    1. Cos'è una Classe pag.
    1. Come creare un Oggetto pag.
    1. Riepilogo dei concetti chiave pag.

Classi e Oggetti — Dispensa didattica Java Pagina 2

1. Cos'è un Oggetto

Nella programmazione, i programmi gestiscono spesso insiemi di informazioni che sono tra loro correlate. Queste informazioni potrebbero essere raggruppate in un'unica entità: tali entità prendono il nome di Oggetti.

1.1 Il problema con le sole variabili

Si consideri il caso di un programma che debba memorizzare le informazioni di una lista di persone. Usando solo variabili primitive, per ogni persona dovremmo dichiararne una distinta per ciascuna caratteristica:

Caratteristica Tipo Java suggerito

Nome String

Cognome String

Età int

Altezza double

Peso double

Residenza String

Data di Nascita String

Domicilio String

Con 8 caratteristiche per persona e 10 persone, occorrerebbero 80 variabili separate , senza alcun collegamento logico tra loro. Il programmatore dovrebbe ricordare manualmente quale variabile appartiene a quale persona.

1.2 La soluzione: raggruppare in Oggetti

La programmazione a oggetti risolve questo problema permettendo di raggruppare tutte le informazioni correlate in un'unica entità chiamata Oggetto. Invece di 80 variabili sparse, avremo 10 oggetti ordinati, ciascuno contenente i propri dati:

PERSONA 1 PERSONA 2 PERSONA 3 Giuseppe / Rossi 32 anni / 180 cm

Maurizio / Verdi 42 anni / 170 cm Francesca / Sapori 24 anni / 175 cm

Classi e Oggetti — Dispensa didattica Java Pagina 4

2. Cos'è una Classe

Gli oggetti non nascono dal nulla: vengono prodotti da strutture chiamate Classi. Le classi sono le fabbriche degli oggetti.

2.1 Definizione di Classe

Una Classe è un'astrazione che rappresenta le proprietà comuni (struttura e comportamento) di un insieme di oggetti concreti. Dal punto di vista della programmazione, la classe funge da tipo di dato per gli oggetti che ne sono istanze.

Concetto Spiegazione

Classe Descrive la struttura (attributi) e il comportamento (metodi) comuni a un gruppo di oggetti. È il "modello" o "stampo".

Oggetto Una specifica realizzazione (istanza) della classe, con valori concreti per ogni attributo.

Istanza Termine tecnico per indicare un particolare oggetto appartenente a una classe. Si dice che l'oggetto è un'istanza della classe.

Tipo di dato Quando si dichiara una variabile di tipo oggetto, il tipo è il nome della classe stessa (es. Persona p1).

2.2 Dalla Classe agli Oggetti: il diagramma

La classe Persona definisce attributi e metodi in modo astratto. Ogni oggetto (istanza) creato a partire da essa contiene valori concreti per quegli stessi attributi e può invocare gli stessi metodi:

CLASSE Persona Attributi: nome, cognome, eta, altezza peso, residenza, statoCivile, domicilio Metodi: stampaPersona() aggiornaEta(data)

OGGETTO — istanza 1 (attributi con valori concreti) stampaPersona() aggiornaEta(data)

OGGETTO — istanza 2 (attributi con valori concreti) stampaPersona() aggiornaEta(data)

OGGETTO — istanza 3 (attributi con valori concreti) stampaPersona() aggiornaEta(data)

La freccia dalla classe verso ciascun oggetto rappresenta il legame di istanziazione: la classe è il modello, l'oggetto è la sua realizzazione concreta.

Classi e Oggetti — Dispensa didattica Java Pagina 5

3. Come creare un Oggetto

3.1 L'operatore new

Per creare un oggetto a partire da una classe è necessario utilizzare l'operatore new. Il processo che crea un nuovo oggetto si chiama costruzione.

// Dichiarazione della variabile e costruzione dell'oggetto Persona p1 = new Persona(); // Equivalente in due passi separati: Persona p1; // 1. dichiarazione (p1 punta a null) p1 = new Persona(); // 2. costruzione (p1 punta all'oggetto)

Elemento Significato

Persona (prima occorrenza)

Tipo della variabile: indica che p1 conterrà un riferimento a un oggetto di tipo Persona.

p1 Nome della variabile (riferimento all'oggetto).

new Operatore che costruisce l'oggetto in memoria.

Persona() Chiamata al costruttore della classe (può accettare parametri).

3.2 Le variabili oggetto sono riferimenti

IMPORTANTE: quando si dichiara una variabile con tipo-classe, la variabile non contiene l'oggetto, ma un riferimento (indirizzo) all'oggetto in memoria. Due variabili possono riferirsi allo stesso oggetto.

Se si assegna una variabile oggetto a un'altra variabile dello stesso tipo, non si copia l'oggetto : entrambe le variabili punteranno allo stesso oggetto in memoria. Le modifiche effettuate tramite una variabile saranno visibili anche attraverso l'altra:

Persona p1 = new Persona(...); // p1 → oggetto A Persona p2 = new Persona(...); // p2 → oggetto B p2 = p1; // p2 ora punta allo stesso oggetto di p1 (oggetto A) // l'oggetto B non è più raggiungibile tramite p

Classi e Oggetti — Dispensa didattica Java Pagina 7

// Passo 1 – dichiarazione Persona p1; Persona p2; // Passo 2 – costruzione p1 = new Persona(); p2 = new Persona(); // Passo 3 – utilizzo p1.nome = "Mario"; p1.cognome = "Bianchi"; p1.stampaPersona(); // stampa i dati di p // Assegnazione di riferimento (NON è una copia!) p2 = p1; p2.nome = "Luigi"; // modifica anche p1.nome! p1.stampaPersona(); // stampa: Luigi Bianchi

Classi e Oggetti — Dispensa didattica Java Pagina 8

4. Riepilogo dei Concetti Chiave

Termine Definizione

Oggetto Entità che raggruppa informazioni correlate (attributi) e comportamenti (metodi). Viene creato a partire da una classe con l'operatore new.

Attributo Variabile interna all'oggetto che ne descrive le proprietà (es. nome, età, peso).

Metodo Funzione interna all'oggetto che ne definisce il comportamento (es. stampaPersona(), aggiornaEta(data)).

Classe Modello (o stampo) che definisce struttura e comportamento comuni a un insieme di oggetti. Funge da tipo di dato per le variabili oggetto.

Istanza Un oggetto concreto creato a partire da una classe. Si dice che l'oggetto è un'istanza della classe.

Operatore new Costrutto Java che crea (costruisce) un nuovo oggetto in memoria e restituisce un riferimento ad esso.

Riferimento Il valore contenuto in una variabile oggetto: non è l'oggetto stesso, ma l'indirizzo in memoria in cui l'oggetto si trova.

null Valore speciale che indica l'assenza di un riferimento valido. Accedere a un oggetto null provoca NullPointerException a runtime.

Costruzione Il processo che crea un nuovo oggetto tramite l'operatore new e il costruttore della classe.

NullPointerExceptio n

Errore a runtime generato quando si tenta di invocare metodi o accedere ad attributi di una variabile che vale null.

Schema decisionale rapido

Devo creare un nuovo oggetto? Usa new NomeClasse() e assegnalo a una variabile del tipo corretto.

Devo accedere agli attributi o ai metodi? Usa la notazione punto: variabile.attributo o variabile.metodo().

Ho bisogno dei dati dopo la costruzione? La variabile deve essere dichiarata nello scope giusto (prima del blocco in cui se

Devo copiare un oggetto? Assegnare p2 = p1 non copia l'oggetto: crea un secondo riferimento allo

Anatomia di un Oggetto Java

Programmazione Orientata agli Oggetti in Java Documento educativo — Corso Java da Zero

Argomenti trattati

  1. L'Anatomia di un Oggetto Java
  2. Variabili d'Istanza e Variabili di Classe
  3. I Costruttori
  4. I Metodi
  5. Overloading dei Metodi

1. L'Anatomia di un Oggetto Java

Un oggetto in Java è composto da una serie di componenti fondamentali che ne definiscono la struttura e il comportamento. Questi componenti sono:

  • Variabili d'istanza e variabili di classe : i dati che descrivono lo stato dell'oggetto.
  • Costruttori : i metodi speciali utilizzati per creare e inizializzare nuovi oggetti.
  • Metodi : le operazioni che l'oggetto è in grado di eseguire.

L'insieme di variabili d'istanza, costruttori e metodi d'istanza forma quella che viene definita l'anatomia di un Oggetto Java.

Schema strutturale di una classe Java:

Componente Parola chiave / Caratteristica Scopo

Variabile d'istanza private / public (campo) Memorizza lo stato dell'oggetto

Variabile di classe static Valore condiviso tra tutti gli oggetti

Costruttore Stesso nome della classe, no return Crea e inizializza l'oggetto

Metodo d'istanza Legato all'oggetto (this) Definisce le azioni dell'oggetto

Metodo di classe static Agisce sulla classe, non su un'istanza

nn Modificare una variabile static attraverso un'istanza aggiorna il valore per tutti gli oggetti della classe, non solo per quell'istanza.

Esempio — dichiarazione di variabili d'istanza e di classe:

public class Prodotto { // Variabili d'istanza (ogni oggetto ha il proprio valore) private String nome; private float prezzo; // Variabile di classe (condivisa da tutti gli oggetti) public static String nomeProduttore; }

3. I Costruttori

Il costruttore è un metodo speciale di una classe il cui scopo è creare una nuova istanza e inizializzarne lo stato, ovvero assegnare valori iniziali alle variabili d'istanza. Viene invocato automaticamente da Java quando si utilizza l'operatore new.

  • Il nome del costruttore è sempre uguale al nome della classe.
  • I costruttori non hanno tipo di ritorno (nemmeno void).
  • In Java possono esistere più costruttori per la stessa classe, ciascuno con parametri diversi.
  • Se il programmatore non definisce alcun costruttore, il compilatore aggiunge automaticamente un costruttore di default (senza argomenti, senza istruzioni).
  • I costruttori sono generalmente dichiarati public per consentire la creazione di oggetti da qualsiasi punto del programma.

La parola chiave this

All'interno di un costruttore (o di un qualsiasi metodo d'istanza), la parola chiave this fa riferimento all'oggetto corrente. È particolarmente utile per distinguere le variabili d'istanza dai parametri del costruttore quando hanno lo stesso nome.

nn IMPORTANTE: la parola chiave this ha senso solo quando dalla classe viene generato un oggetto (non nei metodi statici).

Esempio — classe con tre costruttori:

public class Prodotto { private String nome; private float prezzo; public static String nomeProduttore; // Costruttore 1: nome e prezzo public Prodotto(String nome, float prezzo) { this.nome = nome; this.prezzo = prezzo; } // Costruttore 2: solo nome public Prodotto(String nome) { this.nome = nome; } // Costruttore 3: senza parametri (default) public Prodotto() { } }

Come Java seleziona il costruttore:

Java determina quale costruttore invocare in base al numero e al tipo dei parametri passati con l'operatore new:

Prodotto p1 = new Prodotto("Pane", 2); // -> Costruttore 1 Prodotto p2 = new Prodotto("Latte"); // -> Costruttore 2 Prodotto p3 = new Prodotto(); // -> Costruttore 3

4.2 Metodi di Classe (static)

I metodi di classe sono definiti con la parola chiave static e agiscono sulla classe nel suo insieme, non su una specifica istanza. Possono essere invocati direttamente tramite il nome della classe, senza creare un oggetto:

  • Non accedono alle variabili d'istanza.
  • Possono accedere solo a variabili e altri metodi statici.
  • Vengono invocati con la sintassi: NomeClasse.nomeMetodo(parametri).

Esempio — metodi statici:

public class Operazioni { public static int somma(int a, int b) { return a

  • b; } public static int sottrazione(int a, int b) { return a - b; } } // Chiamata senza istanziare la classe: int risultato1 = Operazioni.somma(2, 3); // 5 int risultato2 = Operazioni.sottrazione(5, 2); // 3

5. Overloading dei Metodi

In Java ogni metodo è identificato dalla propria firma (o signature ), che comprende il nome del metodo e la lista dei tipi dei parametri. La firma deve essere unica all'interno di una classe.

L' overloading consiste nel definire più metodi con lo stesso nome ma con firme diverse, cioè con numero e/o tipi di parametri differenti. Sarà il compilatore a selezionare automaticamente il metodo corretto in base agli argomenti passati al momento della chiamata.

Regole fondamentali:

  • Due metodi possono avere lo stesso nome se differiscono per numero e/o tipo dei parametri.
  • Il tipo di ritorno NON fa parte della firma : due metodi con stessa lista di parametri ma tipo di ritorno diverso costituiscono un errore di compilazione.
  • I nomi dei parametri non fanno parte della firma.
  • L'overloading si applica sia ai metodi d'istanza sia ai metodi di classe.

Esempio — overloading valido:

public void stampa(char x) { ... } // OK: tipo diverso public void stampa(int x) { ... } // OK: tipo diverso public void stampa(int x, int y) { ... } // OK: numero diverso

Esempio — overloading NON valido (errore di compilazione):

public int getNumero(int lato) { ... } public float getNumero(int lato) { ... } // ERRORE: stessa firma!

I due metodi hanno la stessa firma (nome + lista tipi parametri = getNumero(int)), quindi non sono ammissibili. Per risolvere occorre usare un nome diverso, un numero di parametri diverso o tipi di parametri diversi.

L'overloading e i costruttori:

Il concetto di overloading si applica anche ai costruttori: è proprio grazie all'overloading che una classe può avere più costruttori con parametri diversi, come visto nell'esempio della classe Prodotto nella sezione 3.

Riepilogo — L'insieme di variabili d'istanza, costruttori e metodi d'istanza forma l' anatomia di un Oggetto Java.

1. Concetti di base sull'Ereditarietà

L' ereditarietà è uno dei pilastri fondamentali della programmazione orientata agli oggetti. Permette di definire una classe generale e, successivamente, di creare classi specializzate che aggiungono nuovi dettagli alla classe di partenza, ereditando automaticamente metodi e variabili di istanza già definiti.

Vantaggi principali:

  • Riutilizzo del codice: la classe specializzata eredita tutte le proprietà della classe generale, riducendo la quantità di codice da scrivere.
  • Estendibilità: si aggiungono solo le nuove caratteristiche proprie della classe derivata.
  • Gerarchia naturale: le classi riflettono le relazioni del mondo reale.

Caso di studio – Sistema universitario

Si consideri un programma per la gestione delle informazioni di un'università. Il sistema deve trattare studenti, docenti e altro personale. Tutti questi soggetti condividono informazioni comuni (nome, cognome, ecc.) perché sono, anzitutto, Persone.

Gerarchia di classi:

Classe Superclasse Note Persona — Classe radice con attributi comuni Studente Persona Aggiunge la matricola Dipendente Persona Include docenti e impiegati NonLaureato Studente Studente senza laurea LaureatoTriennale Studente Laurea di primo livello LaureatoMagistrale LaureatoTriennale Laurea di secondo livello Docente Dipendente Personale docente Impiegati Dipendente Personale amministrativo

La classe Persona in Java:

La classe Persona contiene le variabili di istanza e i metodi comuni a tutti i tipi di persona gestiti dal sistema:

public class Persona { private String nome; private String cognome; public Persona(String nome, String cognome) { this.nome = nome; this.cognome = cognome; } public Persona() { } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getCognome() { return cognome; } public void setCognome(String cognome) { this.cognome = cognome; } public void stampaInfo() { System.out.println("Nome: " + nome + "\nCognome: " + cognome); } }

La classe Studente – classe derivata:

La classe Studente estende Persona con la parola chiave extends. Una classe derivata (o sottoclasse ) è una classe definita aggiungendo variabili e metodi a una classe esistente, chiamata classe base (o superclasse ).

public class Studente extends Persona { private int matricola; public Studente(String nome, String cognome, int matricola) { super(nome, cognome); // invoca il costruttore di Persona this.matricola = matricola; } public Studente() { super(); } public int getMatricola() { return matricola; } public void setMatricola(int matricola) { this.matricola = matricola; } }

Grazie all'ereditarietà, un oggetto Studente possiede già tutti i metodi pubblici di Persona senza doverli ridichiarare:

Studente s = new Studente(); s.setNome("Mario"); // metodo ereditato da Persona s.setMatricola(12345);

La parola chiave super nei costruttori

Quando si scrive il costruttore di una classe derivata, la prima azione tipica è invocare un costruttore della superclasse tramite super:

  • super deve essere sempre la prima istruzione all'interno del costruttore della classe derivata.
  • Il costruttore della superclasse viene scelto in base al numero e al tipo dei parametri passati.
  • Se super viene omesso, Java invoca automaticamente il costruttore di default (vuoto) della superclasse. Attenzione: se la superclasse non ha un costruttore di default e si omette la chiamata a super, si ottiene un errore di compilazione.

Ereditarietà singola in Java

A differenza di linguaggi come C++, Java supporta solo l' ereditarietà singola : una classe può estendere una sola classe base. È tuttavia possibile creare catene di ereditarietà (A → B → C), ma questo non è ereditarietà multipla.

Terminologia

Termine Sinonimi Significato Classe base Superclasse, Classe padre La classe da cui si eredita Classe derivata Sottoclasse, Classe figlia La classe che eredita Riepilogo – Sintassi della classe derivata: public class NomeClasseDerivata extends NomeClasseBase { // dichiarazione variabili aggiuntive // costruttori della classe derivata // definizione metodi aggiuntivi }