Lezioni del modulo (1/2)
Classi e Oggetti
Java è un linguaggio incentrato sulla Programmazione Orientata agli Oggetti (OOP). Nella OOP, modelliamo il mondo reale usando oggetti. Un oggetto possiede uno stato (i dati) e dei comportamenti (le azioni).
Classi e Oggetti
- Classe: È un modello (o blueprint) che definisce le caratteristiche e il comportamento di un tipo di oggetto.
- Oggetto: È un'istanza concreta creata a partire da una classe.
Ad esempio, se Car è la classe, la tua auto nel garage è l'oggetto reale.
Campi Istanza e Costruttori
I dati all'interno di una classe sono chiamati campi istanza (o attributi). Per inizializzare lo stato di un oggetto al momento della sua creazione, si usa un metodo speciale chiamato costruttore.
Un costruttore ha lo stesso nome della classe e non ha un tipo di ritorno (nemmeno void).
class Dog {
// Campi istanza
String name;
int age;
// Costruttore
public Dog(String name, int age) {
this.name = name; // 'this' fa riferimento al campo dell'oggetto corrente
this.age = age;
}
}
Creare un Oggetto con new
Per creare un oggetto in memoria, usiamo la parola chiave new seguita dal costruttore della classe:
public class Main {
public static void main(String[] args) {
// Creazione di un oggetto Dog
Dog myDog = new Dog("Fido", 3);
// Accesso ai campi
System.out.println(myDog.name + " ha " + myDog.age + " anni.");
}
}
Il Riferimento this
La parola chiave this in Java fa riferimento all'oggetto corrente su cui viene eseguito il costruttore o un metodo. Viene utilizzata principalmente per evitare ambiguità quando i parametri del costruttore hanno lo stesso nome dei campi istanza dell'oggetto (ombreggiatura delle variabili):
class User {
String username;
public User(String username) {
this.username = username; // this.username è il campo istanza, username è il parametro
}
}
Allocazione di Memoria: Stack vs Heap
Comprendere come Java alloca la memoria è fondamentale:
- Stack: È un'area di memoria veloce e organizzata in cui vengono memorizzate le variabili primitive e i riferimenti agli oggetti (indirizzi di memoria) locali all'interno dei metodi.
- Heap: È un'area di memoria più grande e dinamica in cui vengono allocati gli oggetti effettivi (con la parola chiave
new).
Quando dichiariamo Dog myDog = new Dog("Fido", 3);:
- Il riferimento
myDogviene creato nello Stack. - L'oggetto reale
Dogcon i suoi dati viene creato nell'Heap. - La variabile
myDogpunta alla posizione dell'oggetto nell'Heap.
Prova tu
Completa la classe Person aggiungendo il campo name e un costruttore appropriato. Poi nel main crea un oggetto Person chiamato p con nome Alice.
Mostra suggerimento
Scrivi `String name;` dentro la classe, dichiara il costruttore `public Person(String name) { this.name = name; }` e istanzia con `new Person('Alice')`.
Soluzione disponibile dopo 3 tentativi
Crea una classe Book con i campi title (String) e pages (int), un costruttore completo, ed istanzia nel main un libro chiamato b con titolo Moby Dick e 600 pagine.
Mostra suggerimento
Ricorda di definire entrambi i campi in Book, mapparli nel costruttore usando `this.title = title;` e `this.pages = pages;`, e usare `new Book('Moby Dick', 600)`.
Soluzione disponibile dopo 3 tentativi
Crea una classe Product con i campi name (String) e price (double), e un costruttore che inizializza entrambi i campi. Nel main, crea un oggetto Product chiamato p con nome Laptop e prezzo 999.99.
Mostra suggerimento
Dichiara i campi `String name;` e `double price;` in Product, assegnali nel costruttore con `this.name = name;` e `this.price = price;`, e infine crea l'oggetto nel main.
Soluzione disponibile dopo 3 tentativi