In questa lezione impari a
- comprendere cosa sono classi e oggetti
- capire la differenza tra classe e oggetto
- creare la prima classe personalizzata
- istanziare oggetti e usarli
- definire attributi e metodi
Cos'è una classe?
Una classe è un modello (o "template") che definisce le caratteristiche e i comportamenti di un tipo di oggetto.
Pensa alla classe come al progetto di una casa: descrive come deve essere fatta, ma non è la casa vera e propria.
Cos'è un oggetto?
Un oggetto è un'istanza di una classe, cioè una realizzazione concreta del modello definito dalla classe.
Se la classe è il progetto della casa, l'oggetto è la casa costruita seguendo quel progetto. Puoi costruire tante case diverse usando lo stesso progetto!
Confronto con il C. In C usavi le
structper raggruppare dati:struct Persona { char nome[50]; int eta; }; struct Persona p1; strcpy(p1.nome, "Mario"); p1.eta = 18;In Java usi le
classche possono contenere sia dati (attributi) che funzioni (metodi):class Persona { String nome; int eta; void saluta() { System.out.println("Ciao, sono " + nome); } } Persona p1 = new Persona(); p1.nome = "Mario"; p1.eta = 18; p1.saluta(); // "Ciao, sono Mario"
Anatomia di una classe
Una classe è composta da:
1. Attributi (o campi o proprietà). Sono le variabili che rappresentano le caratteristiche dell'oggetto.
Esempio: una classe
Autopuò avere attributi comemarca,modello,velocita
2. Metodi (o funzioni). Sono le funzioni che definiscono il comportamento dell'oggetto.
Esempio: la classe
Autopuò avere metodi comeaccelera(),frena(),visualizzaInfo()
Esempio pratico: classe Studente
Creiamo la nostra prima classe completa:
public class Studente {
// ATTRIBUTI - caratteristiche dello studente
String nome;
String cognome;
int eta;
double mediaVoti;
// METODI - azioni che lo studente può fare
// Metodo per stampare le informazioni
void stampaInfo() {
System.out.println("Nome: " + nome + " " + cognome);
System.out.println("Età: " + eta);
System.out.println("Media voti: " + mediaVoti);
}
// Metodo per verificare se è promosso
boolean ePromosso() {
return mediaVoti >= 6.0;
}
// Metodo per studiare (aumenta la media)
void studia(double miglioramento) {
mediaVoti = mediaVoti + miglioramento;
if (mediaVoti > 10) {
mediaVoti = 10; // La media non può superare 10
}
System.out.println(nome + " ha studiato! Nuova media: " + mediaVoti);
}
}
Usare la classe: creare oggetti
Ora creiamo e usiamo oggetti della classe Studente:
public class TestStudente {
public static void main(String[] args) {
// Creare un oggetto (istanziare la classe)
Studente studente1 = new Studente();
// Impostare gli attributi
studente1.nome = "Mario";
studente1.cognome = "Rossi";
studente1.eta = 17;
studente1.mediaVoti = 7.5;
// Chiamare i metodi
studente1.stampaInfo();
// Verificare se è promosso
if (studente1.ePromosso()) {
System.out.println(studente1.nome + " è promosso!");
}
// Far studiare lo studente
studente1.studia(0.5);
System.out.println("\n--- Secondo Studente ---\n");
// Creare un secondo oggetto dalla stessa classe
Studente studente2 = new Studente();
studente2.nome = "Giulia";
studente2.cognome = "Bianchi";
studente2.eta = 16;
studente2.mediaVoti = 8.5;
studente2.stampaInfo();
}
}
Nome: Mario Rossi
Età: 17
Media voti: 7.5
Mario è promosso!
Mario ha studiato! Nuova media: 8.0
--- Secondo Studente ---
Nome: Giulia Bianchi
Età: 16
Media voti: 8.5
Analisi del codice
Creazione dell'oggetto.
Studente studente1 = new Studente();
Studente→ tipo della variabile (la classe)studente1→ nome della variabile (riferimento all'oggetto)new→ operatore per creare un nuovo oggetto in memoriaStudente()→ chiamata al costruttore (lo vedremo nella prossima lezione)
Accesso agli attributi.
studente1.nome = "Mario";Usiamo l'operatore punto (.) per accedere agli attributi e ai metodi dell'oggetto.
Chiamata ai metodi.
studente1.stampaInfo();Anche per chiamare i metodi usiamo l'operatore punto.
Esempio completo: classe Auto
Vediamo un altro esempio pratico:
public class Auto {
// Attributi
String marca;
String modello;
int anno;
double velocitaAttuale;
double velocitaMassima;
boolean accesa;
// Metodo per accendere l'auto
void accendi() {
if (!accesa) {
accesa = true;
velocitaAttuale = 0;
System.out.println("L'auto è stata accesa. Vroom!");
} else {
System.out.println("L'auto è già accesa!");
}
}
// Metodo per spegnere l'auto
void spegni() {
if (accesa && velocitaAttuale == 0) {
accesa = false;
System.out.println("Auto spenta.");
} else if (velocitaAttuale > 0) {
System.out.println("Ferma l'auto prima di spegnerla!");
} else {
System.out.println("L'auto è già spenta!");
}
}
// Metodo per accelerare
void accelera(double incremento) {
if (!accesa) {
System.out.println("Accendi prima l'auto!");
return;
}
velocitaAttuale += incremento;
if (velocitaAttuale > velocitaMassima) {
velocitaAttuale = velocitaMassima;
System.out.println("Hai raggiunto la velocità massima!");
}
System.out.println("Velocità attuale: " + velocitaAttuale + " km/h");
}
// Metodo per frenare
void frena(double decremento) {
velocitaAttuale -= decremento;
if (velocitaAttuale < 0) {
velocitaAttuale = 0;
}
System.out.println("Velocità attuale: " + velocitaAttuale + " km/h");
}
// Metodo per visualizzare le informazioni
void mostraInfo() {
System.out.println("=== Informazioni Auto ===");
System.out.println("Marca: " + marca);
System.out.println("Modello: " + modello);
System.out.println("Anno: " + anno);
System.out.println("Velocità massima: " + velocitaMassima + " km/h");
System.out.println("Velocità attuale: " + velocitaAttuale + " km/h");
System.out.println("Stato: " + (accesa ? "Accesa" : "Spenta"));
System.out.println("========================");
}
}
Test della classe Auto
public class TestAuto {
public static void main(String[] args) {
// Creare un'auto
Auto miaAuto = new Auto();
// Impostare gli attributi
miaAuto.marca = "Ferrari";
miaAuto.modello = "F40";
miaAuto.anno = 1987;
miaAuto.velocitaMassima = 324;
miaAuto.velocitaAttuale = 0;
miaAuto.accesa = false;
// Mostrare le info
miaAuto.mostraInfo();
System.out.println("\n--- Provo ad accelerare ---");
miaAuto.accelera(50); // Non funzionerà, auto spenta!
System.out.println("\n--- Accendo l'auto ---");
miaAuto.accendi();
System.out.println("\n--- Accelero ---");
miaAuto.accelera(80);
miaAuto.accelera(100);
miaAuto.accelera(150); // Raggiungo la velocità max
System.out.println("\n--- Freno ---");
miaAuto.frena(50);
System.out.println("\n--- Info finali ---");
miaAuto.mostraInfo();
}
}
=== Informazioni Auto ===
Marca: Ferrari
Modello: F40
Anno: 1987
Velocità massima: 324.0 km/h
Velocità attuale: 0.0 km/h
Stato: Spenta
========================
--- Provo ad accelerare ---
Accendi prima l'auto!
--- Accendo l'auto ---
L'auto è stata accesa. Vroom!
--- Accelero ---
Velocità attuale: 80.0 km/h
Velocità attuale: 180.0 km/h
Hai raggiunto la velocità massima!
Velocità attuale: 324.0 km/h
--- Freno ---
Velocità attuale: 274.0 km/h
--- Info finali ---
=== Informazioni Auto ===
Marca: Ferrari
Modello: F40
Anno: 1987
Velocità massima: 324.0 km/h
Velocità attuale: 274.0 km/h
Stato: Accesa
========================
Esercizi guidati
⭐ Facile
Esercizio 1 – classe Libro.
Obiettivo: Creare una classe Libro con attributi e metodi.
Requisiti:
- Crea una classe
Librocon questi attributi:- titolo (String)
- autore (String)
- numeroPagine (int)
- prezzoEuro (double)
- Aggiungi un metodo
stampaDettagli()che stampa tutte le informazioni - Aggiungi un metodo
applicaSconto(double percentuale)che riduce il prezzo - Nel main, crea 2 libri diversi e prova i metodi
Schema di partenza:
public class Libro {
// Attributi
String titolo;
String autore;
int numeroPagine;
double prezzoEuro;
// Metodo per stampare i dettagli
void stampaDettagli() {
// Completa tu
}
// Metodo per applicare uno sconto
void applicaSconto(double percentuale) {
// Completa tu
// Suggerimento: prezzoEuro = prezzoEuro - (prezzoEuro * percentuale / 100)
}
}
⭐⭐ Medio
Esercizio 2 – classe ContoBancario.
Obiettivo: Creare una classe per gestire un conto bancario.
Requisiti:
- Attributi:
intestatario,numeroConto,saldo - Metodo
deposita(double importo)- aggiunge soldi al saldo - Metodo
preleva(double importo)- toglie soldi se ci sono fondi sufficienti - Metodo
visualizzaSaldo()- mostra il saldo attuale - Metodo
bonifico(ContoBancario destinatario, double importo)- trasferisce soldi
Suggerimenti:
- Nel metodo preleva, controlla che il saldo sia sufficiente prima di prelevare
- Nel metodo bonifico, usa preleva sul conto corrente e deposita sul destinatario
Esercizi da svolgere
⭐ Facile
Esercizio 3 – classe Rettangolo.
Crea una classe Rettangolo con:
- Attributi:
base,altezza - Metodo
calcolaArea()che restituisce l'area - Metodo
calcolaPerimetro()che restituisce il perimetro - Metodo
eQuadrato()che restituisce true se base == altezza
⭐⭐ Medio
Esercizio 4 – classe Prodotto.
Crea una classe Prodotto per un negozio:
- Attributi: nome, codice, prezzo, quantitaDisponibile
- Metodo per vendere (riduce la quantità)
- Metodo per rifornire (aumenta la quantità)
- Metodo per verificare disponibilità
- Metodo per calcolare il valore totale in magazzino
⭐⭐ Medio
Esercizio 5 – classe temperatura.
Crea una classe Temperatura:
- Attributo:
celsius(double) - Metodo
toFahrenheit()- restituisce la temperatura in Fahrenheit - Metodo
toKelvin()- restituisce la temperatura in Kelvin - Metodo
eSottoZero()- restituisce true se < 0°C - Metodo
aumenta(double gradi)- aumenta la temperatura
Formule: F = C * 9/5 + 32, K = C + 273.15
⭐ Facile
Esercizio 6 – classe Cerchio.
Crea una classe Cerchio con:
- Attributo:
raggio - Metodo
calcolaArea()(formula: π * r²) - Metodo
calcolaCirconferenza()(formula: 2 * π * r) - Usa
Math.PIper il valore di π
Concetti chiave da ricordare
- Una classe è un modello, un oggetto è un'istanza concreta di quel modello
- Gli attributi rappresentano le caratteristiche (dati)
- I metodi rappresentano i comportamenti (azioni)
- Si usa
newper creare un nuovo oggetto- L'operatore punto (.) serve per accedere ad attributi e metodi
- Dalla stessa classe possiamo creare tanti oggetti diversi
- Ogni oggetto ha i suoi propri valori per gli attributi
Domande di autovalutazione
- Qual è la differenza tra una classe e un oggetto?
- Come si crea un nuovo oggetto in Java?
- A cosa serve l'operatore punto (.)?
- Quanti oggetti posso creare da una classe?
- Gli oggetti condividono gli stessi valori degli attributi?