Os pilares da programação orientada a objetos (POO)
Abstração
Definição
Permite isolar somente as propriedades de um objeto que são necessários para o funcionamento do programa.
O isolamentos de membros é feita a partir de um modificador de acesso, como o private
.
Exemplo
export class Person {
private name: string;
private lastName: string;
constructor(name: string, lastName: string) {
this.name = name;
this.lastName = lastName;
}
}
Encapsulamento
Definição
Visa ocultar a lógica de um comportamento de um objeto, afim de exibir apenas o necessário para o uso externo.
Exemplo
export class RemoteControl {
constructor(private powerStatus = false) {}
public turnOn(): void {
this.powerStatus = true;
}
public turnOff(): void {
this.powerStatus = false;
}
public getStatus(): boolean {
return this.powerStatus;
}
}
Herança
Definição
Visa transmitir características e comportamentos de um objeto “pai” para outro (“filho”).
Essa prática, se implementada de forma correta, permite a reutilização de código.
Exemplo
export abstract class Animal {
constructor(public name: string) {}
abstract makeNoise(): void;
}
export class Dog extends Animal {
makeNoise(): void {
console.log(`${this.name} está fazendo AU AU...`);
}
}
export class Cat extends Anime {
makeNoise(): void {
console.log(`${this.name} está fazendo MIAU...`);
}
}
Polimorfismo
Definição
Polimorfismo significa “várias formas”, dessa forma, algo polimorfo tem a capacidade de assumir diferentes formas.
Exemplo
class AnimalSounds {
public playSound(animal: Animal): void {
animal.makeNoise();
}
}
const dog = new Dog("Tina");
const cat = new Cat("Suzy");
const animalSounds = new AnimalSounds();
animalSounds.playSound(dog); // Tina está fazendo AU AU...
animalSounds.playSound(cat); // Suzy está fazendo MIAU...