Métodos abstratos em POO em TypeScript

Às vezes acontece que classes derivadas devem ter um método comum, porém, a implementação desse método depende da derivada específica. Neste caso, este método pode ser declarado na classe abstrata pai, sem escrever sua implementação. E então as classes derivadas serão obrigadas a implementar esses métodos. Tais métodos são chamados de métodos abstratos e também são declarados usando a palavra-chave abstract.

Vamos, por exemplo, pegar nossa classe abstrata User. Suponha que as classes que herdam desta classe devem obrigatoriamente ter um método show, que exibe os dados do objeto.

A implementação deste método, no entanto, dependerá da classe derivada. Vamos na classe User declarar este método como abstrato:

typescriptabstract class User {
  public name: string;
  
  constructor(name: string) {
    this.name = name;
  }
  
  public abstract show(): string;
}

Vamos implementar este método na classe derivada Student:

typescriptclass Student extends User {
  public course: number;

  constructor(name: string, course: number) {
    super(name);
    this.course = course;
  }
  
  show() {
    return this.name + ' ' + this.course;
  }
}

Vamos implementar este método na classe derivada Employee:

typescriptclass Employee extends User {
  public salary: number;

  constructor(name: string, salary: number) {
    super(name);
    this.salary = salary;
  }
  
  show() {
    return this.name + ' ' + this.salary;
  }
}
Задание 1

Na classe abstrata Figure, crie métodos abstratos para obter a área e o perímetro.

Задание 2

Nas classes derivadas Square e Rectangle, escreva a implementação desses métodos.