Vai al contenuto
eLearner.app
Modulo 2 · Lezione 1 di 23/14 nel corso~12 min
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).

Code
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:

Code
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):

Code
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:

  1. 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.
  2. 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 myDog viene creato nello Stack.
  • L'oggetto reale Dog con i suoi dati viene creato nell'Heap.
  • La variabile myDog punta alla posizione dell'oggetto nell'Heap.

Prova tu

Esercizio#java.m2.l1.e1
Tentativi: 0Caricamento…

Completa la classe Person aggiungendo il campo name e un costruttore appropriato. Poi nel main crea un oggetto Person chiamato p con nome Alice.

Caricamento editor…
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

Esercizio#java.m2.l1.e2
Tentativi: 0Caricamento…

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.

Caricamento editor…
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

Esercizio#java.m2.l1.e3
Tentativi: 0Caricamento…

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.

Caricamento editor…
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