Brook Preloader

OOP in Typescript, classi ed ereditarietà

Creazione di classi

In TypeScript, le classi possono essere create utilizzando la sintassi delle classi di JavaScript, ovvero class ClassName { ... }. Le classi possono contenere proprietà, metodi e costruttori, e possono essere utilizzate per creare oggetti che rappresentano entità del mondo reale.

 

class Person {
  name: string;
  age: number;

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

  hello() {
    console.log(`Ciao, sono ${this.name} e ho ${this.age} anni.`);
  }
}

let person = new Person("Giovanni Pace", 36);
person.greet();

 

Ereditarietà

In TypeScript, le classi possono ereditare le proprietà e i metodi da altre classi utilizzando la sintassi dell’operatore extends. Questo consente di creare gerarchie di classi e di evitare la duplicazione del codice.

 

class Animal {
  name: string;

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

  static move(animal: Animal, distance: number = 0) {
    console.log(`${animal.name} ha percorso ${distance} metri.`);
  }
}

class Dog extends Animal {
  bark() {
    console.log(`${this.name} sta abbaiando.`);
  }
}

let dog = new Dog("Fido");
dog.bark();
Animal.move(dog, 10);

 

Modificatori di accesso

In TypeScript, i modificatori di accesso possono essere utilizzati per specificare la visibilità delle proprietà e dei metodi delle classi. Ci sono tre modificatori di accesso disponibili: public, private e protected. Il modificatore di accesso public è il valore predefinito, il che significa che le proprietà e i metodi sono accessibili ovunque. Il modificatore di accesso private rende le proprietà e i metodi accessibili solo all’interno della classe, mentre il modificatore di accesso protected rende le proprietà e i metodi accessibili alle classi figlie.

 

class Person {
  private name: string;

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

  getName() {
    return this.name;
  }

  setName(name: string) {
    this.name = name;
  }
}

class Employee extends Person {
  private salary: number;

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

  getSalary() {
    return this.salary;
  }
}

let employee = new Employee("Giovanni", 100000);
console.log(employee.getName()); // OK, getName è pubblico
employee.setName("Mario"); // ERRORE, setName è privato
console.log(employee.getSalary()); // OK, getSalary è protetto

 

Metodi statici

In TypeScript, i metodi statici possono essere definiti all’interno delle classi utilizzando la parola chiave static. I metodi statici sono metodi che possono essere richiamati direttamente sulla classe, senza la necessità di creare un’istanza della classe.

 

class Math {
  static sum(num1: number, num2: number): number {
    return num1 + num2;
  }
}

console.log(Math.sum(2, 3)); // 5