Vai al contenuto
eLearner.app
Modulo 4 · Lezione 1 di 27/14 nel corso~15 min
Lezioni del modulo (1/2)

Classi e Modificatori

TypeScript estende le classi standard di ES6 con funzionalità potenti del paradigma orientato agli oggetti (OOP), come la tipizzazione statica, i modificatori di accesso e le proprietà abbreviate.

Classi e Modificatori di Accesso

In TypeScript, puoi controllare la visibilità di membri, proprietà e metodi usando tre parole chiave principali:

  • public (default): il membro è accessibile da qualsiasi luogo.
  • private: il membro è accessibile solo all'interno della classe che lo definisce.
  • protected: il membro è accessibile all'interno della classe e dalle sue sottoclassi (ereditarietà).
TS
class Animal {
  public name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public getAge(): number {
    return this.age;
  }
}

Proprietà Parametro (Parameter Properties)

TypeScript offre una sintassi abbreviata per dichiarare e inizializzare i membri di una classe direttamente nel costruttore. Aggiungendo un modificatore di accesso davanti al parametro del costruttore, la proprietà viene creata e assegnata automaticamente:

TS
// Questa sintassi fa esattamente la stessa cosa dell'esempio precedente!
class Animal {
  constructor(
    public name: string,
    private age: number,
  ) {}
}

Implementazione di Interfacce

Una classe può implementare una o più interfacce usando la parola chiave implements. Questo garantisce che la classe rispetti un contratto specifico definendo tutti i metodi e le proprietà richiesti:

TS
interface Flyable {
  fly(altitude: number): void;
}

class Bird implements Flyable {
  constructor(public name: string) {}

  fly(altitude: number): void {
    console.log(`${this.name} sta volando a ${altitude} metri.`);
  }
}

Ereditarietà e super

TypeScript supporta pienamente l'ereditarietà delle classi. Una classe può estendere un'altra classe usando la parola chiave extends. Se la sottoclasse definisce un costruttore, questo deve richiamare il costruttore della classe base usando la funzione super() prima di poter accedere a this:

TS
class Person {
  constructor(public name: string) {}
}

class Student extends Person {
  constructor(
    name: string,
    public grade: number,
  ) {
    super(name); // Chiama il costruttore di Person
  }
}

Prova tu

Esercizio 1: Classe Car e Modificatore Private

Esercizio#ts.m4.l1.e1
Tentativi: 0Caricamento…

Dichiara una classe chiamata Car. Deve avere una proprietà readonly model (stringa) definita nel costruttore, una proprietà privata mileage (numero) inizializzata a 0, un metodo pubblico drive(miles: number): void che incrementa mileage di miles, e un getter o metodo getMileage(): number che restituisce mileage.

Caricamento editor…
Mostra suggerimento

Usa private mileage: number = 0; per rendere la variabile privata, e constructor(public readonly model: string) {} come abbreviazione.

Soluzione disponibile dopo 3 tentativi

Esercizio 2: Interfaccia Shape e Classe Circle

Esercizio#ts.m4.l1.e2
Tentativi: 0Caricamento…

Completa il codice implementando la classe Circle che implementa l'interfaccia Shape. La classe deve avere una proprietà readonly radius (numero) impostata tramite costruttore, e implementare getArea(): numero (restituendo Math.PI * radius * radius).

Caricamento editor…
Mostra suggerimento

Usa implements Shape sulla classe Circle e definisci il metodo getArea(): number.

Soluzione disponibile dopo 3 tentativi

Esercizio 3: Classe Astratta Vehicle e Sottoclasse Motorcycle

Esercizio#ts.m4.l1.e3
Tentativi: 0Caricamento…

Dichiara una classe chiamata Motorcycle che estende la classe astratta Vehicle. Deve implementare il metodo start() per restituire la stringa 'Motorcycle ' seguita dalla marca (this.make) e da ' started'.

Caricamento editor…
Mostra suggerimento

Usa class Motorcycle extends Vehicle e implementa il metodo start(): string che restituisce la stringa corretta.

Soluzione disponibile dopo 3 tentativi

Esercizio 4: Parameter Properties ed Ereditarietà

Esercizio#ts.m4.l1.e4
Tentativi: 0Caricamento…

Crea una classe chiamata Employee che definisce una proprietà di sola lettura id (numero) e una proprietà pubblica name (stringa) tramite scorciatoia nel costruttore. Dopodiché, crea una classe Developer che estende Employee e aggiunge una proprietà pubblica department (stringa) tramite costruttore.

Caricamento editor…
Mostra suggerimento

Usa super(id, name) nel costruttore di Developer e usa public department per definire la proprietà tramite costruttore.

Soluzione disponibile dopo 3 tentativi