Classes, Métodos e Campos Abstratos - TypeScript

Classes Abstratas

Classes abstratas representam classes definidas com a palavra-chave abstract. Elas são muito semelhantes a classes normais, com a exceção de que não podemos criar diretamente um objeto de uma classe abstrata usando seu construtor.

Em geral, classes abstratas descrevem entidades que na realidade não têm uma implementação concreta. Por exemplo, uma figura geométrica pode ser um círculo, um quadrado ou um triângulo, mas uma figura geométrica por si só não existe. Trabalhamos com figuras concretas. Ao mesmo tempo, todas as figuras podem compartilhar alguma funcionalidade comum. Nesse caso, podemos definir uma classe abstrata Figure, colocar nela a funcionalidade comum e herdar dela classes de figuras geométricas específicas:

abstract class Figure {
  getArea(): void {
      console.log("Not Implemented");
  }
}
class Rectangle extends Figure {

  constructor(public width: number, public height: number) { 
      super();
  }

  getArea(): void {
      let square = this.width * this.height;
      console.log("area =", square);
  }
}

let someFigure: Figure = new Rectangle(20, 30);
someFigure.getArea();   // area = 600

Neste exemplo, a classe abstrata define o método getArea(), que calcula a área da figura. A classe Rectangle implementa sua própria versão desse método.

Métodos Abstratos

No entanto, nesse caso, o método getArea na classe base não realiza nenhum trabalho útil, já que uma figura abstrata não pode ter área. Portanto, é melhor definir esse método como abstrato:

abstract class Figure {
  abstract getArea(): void;
}
class Rectangle extends Figure {

  constructor(public width: number, public height: number) { 
      super();
  }

  getArea(): void {
      let square = this.width * this.height;
      console.log("area =", square);
  }
}

let someFigure: Figure = new Rectangle(20, 30);
someFigure.getArea();

Um método abstrato não define nenhuma implementação. Se uma classe contém métodos abstratos, ela deve ser abstrata. Além disso, ao herdar, as classes derivadas são obrigadas a implementar todos os métodos abstratos.

Campos Abstratos

Uma classe abstrata também pode ter campos abstratos, ou seja, campos definidos com o modificador abstract. Ao herdar, a classe derivada também é obrigada a fornecer uma implementação para eles:

abstract class Figure {
  abstract x: number;
  abstract y: number;
  abstract getArea(): void;
}
class Rectangle extends Figure {

  constructor(public x: number, public y: number, public width: number, public height: number) { 
      super();
  }

  getArea(): void {
      let square = this.width * this.height;
      console.log("area =", square);
  }
}

let someFigure: Figure = new Rectangle(10, 10, 20, 25);
someFigure.getArea();

Neste caso, a classe Figure define dois campos abstratos x e y, que representam a posição inicial da figura:

abstract x: number;
abstract y: number;

A classe Rectangle fornece a implementação para eles ao defini-los nos parâmetros do construtor:

constructor(public x: number, public y: number, public width: number, public height: number)

Conclusão

Classes abstratas são úteis quando você deseja criar uma classe base que serve como um modelo ou esqueleto para outras classes. Elas permitem definir métodos e campos abstratos que devem ser implementados por classes derivadas.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com