Les classes
Les classes sont natives en JS depuis ES6, et TypeScript les supporte également.
Une classe en TypeScript peut contenir des propriétés et des méthodes. La syntaxe de base ressemble beaucoup à celle d'autres langages orientés objet comme Java ou C#. Les classes supportent également des fonctionnalités avancées comme les constructeurs, l'encapsulation, l'héritage, et les polymorphismes.
3 éléments importants :
- Heritage
- Encapsulation
- Polymorphisme
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
describe(): string {
return `My name is ${this.name} and I am ${this.age} years old.`;
}
}
let person = new Person("Alice", 30);
console.log(person.describe());
- Il faut utiliser le mot clé
class
suivi du nom de la classe. Les propriétés et méthodes sont déclarées à l'intérieur de la classe. Les méthodes peuvent être appelées sur une instance de la classe. - Le constructeur (
constructor
) est une méthode spéciale appelée lors de la création d'une instance de la classe. A chaque fois qu'un objet est créé, le constructeur est appelé pour initialiser ses propriétés. this
est une référence à l'instance actuelle de la classe. Il est utilisé pour accéder aux propriétés et méthodes de l'instance.name
etage
sont des propriétés de la classePerson
.describe
est une méthode de la classePerson
.
Héritage
L'héritage permet à une classe de de récupérer les propriétés et méthodes d'une autre classe.
Il faut utiliser le mot clé extends
pour hériter d'une classe.
class Employee extends Person {
department: string;
company: string;
constructor(name: string, age: number, department: string, company: string) {
super(name, age); // Appel au constructeur de la classe parente
this.department = department;
this.company = company;
}
describe(): string {
return `${super.describe()} I work in ${this.department}, ${company}.`;
}
}
let employee = new Employee("Bob", 28, "Engineering", "ACME");
console.log(employee.describe());
super
est utilisé pour appeler les méthodes de la classe parente. Dans le constructeur,super
est utilisé pour appeler le constructeur de la classe parente.
Encapsulation
L'encapsulation est un principe fondamental de la POO (Programmation Orienté Objet) qui consiste à regrouper les données (variables) et les méthodes qui manipulent ces données dans une unité unique, tout en cachant certains détails internes du reste du programme.
class Account {
private balance: number;
constructor(initialBalance: number) {
this.balance = initialBalance;
}
deposit(amount: number): void {
this.balance += amount;
console.log(`Deposited ${amount}, total balance now is: ${this.balance}`);
}
private calculateInterest(rate: number): number {
return this.balance * rate;
}
addInterest(rate: number): void {
let interest = this.calculateInterest(rate);
this.deposit(interest);
}
}
Polymorphisme
Le polymorphimse permet d'appliquer a une meme methode des comportements differents en fonction du type de l'objet.
class Shape {
area(): number {
return 0;
}
}
class Circle extends Shape {
radius: number;
constructor(radius: number) {
super();
this.radius = radius;
}
area(): number {
return Math.PI * this.radius ** 2;
}
}
class Rectangle extends Shape {
width: number;
height: number;
constructor(width: number, height: number) {
super();
this.width = width;
this.height = height;
}
area(): number {
return this.width * this.height;
}
}