Aula 39
Classe Que Implementa Interface em TypeScript (implements)
Summary
# Aula de TypeScript: Classes e Interfaces
## Objetivo da Aula
Nesta aula de TypeScript, aprendemos que uma classe pode implementar uma interface utilizando a palavra-chave `implements`.
## Estrutura do Projeto
Criamos uma estrutura de arquivos dentro da pasta `SRC` chamada `Geometria`, com os seguintes arquivos:
- `figura-geométrica.ts`: Definição da interface para figuras geométricas.
- `quadrado.ts`: Implementação da classe `Quadrado`.
- `triângulo.ts`: Implementação da classe `Triângulo`.
- `index.tests.ts`: Código de exemplo para testar as figuras geométricas.
## Interface: figura geométrica
Definimos uma interface chamada `FiguraGeometrica` que possui:
- Uma propriedade `nome` do tipo `string`.
- Um método `area` que não recebe parâmetros e retorna um `number`.
### Exemplo de Implementação
Cada figura geométrica (ex: quadrado e triângulo) implementa a interface de forma diferente. Aqui estão os detalhes de implementação:
### Classe Quadrado
1. A classe `Quadrado` implementa a interface `FiguraGeometrica`.
2. Necessita ter uma propriedade `nome` e um método para calcular a área:
- A área do quadrado é obtida através da fórmula: lado ao quadrado.
```typescript
class Quadrado implements FiguraGeometrica {
public nome: string;
private lado: number;
constructor(nome: string, lado: number) {
this.nome = nome;
this.lado = lado;
}
public area(): number {
return this.lado * this.lado;
}
}
- Testamos a classe instanciando um
Quadrado
e chamando o métodoarea()
.
Classe Triângulo
- A classe
Triângulo
também implementa a interfaceFiguraGeometrica
. - Necessita ter uma propriedade
nome
e um método:- A área do triângulo é calculada usando a fórmula: (base * altura) / 2.
class Triangulo implements FiguraGeometrica {
public nome: string;
private base: number;
private altura: number;
constructor(nome: string, base: number, altura: number) {
this.nome = nome;
this.base = base;
this.altura = altura;
}
public area(): number {
return (this.base * this.altura) / 2;
}
}
- Também foi testada criando uma instância de
Triângulo
e chamando seu métodoarea()
.
Conclusão
Nesta aula, aprendemos como usar interfaces para estabelecer contratos para classes em TypeScript. As principais aprendizagens foram:
- Como implementar uma interface em classes.
- Como definir propriedades e métodos específicos que seguem o contrato da interface.
A implementação de cada classe respeita as regras definidas na interface, garantindo que cada uma possua suas propriedades e métodos corretos.
Até a próxima!
Video Transcript
Olá pessoal, estamos de volta com mais uma aula de TypeScript.
Nesta aula vamos aprender que uma classe em TypeScript pode implementar uma interface.
Nós vamos aprender sobre a palavra-chave Implementes.
Então, para ilustrar esse exemplo de uma classe implementando uma interface, no TypeScript
eu tenho aqui, eu criei uma nova parte do lado esquerdo da tela.
Dentro de SRC eu tenho uma parte nova chamada Geometria.
Eu criei quatro arquivos.
Primeiro figura-geométrica.ts vai ser o arquivo que eu vou criar uma interface para definir
uma figura geométrica, o contrato.
Eu criei o arquivo quadrado.ts e triângulo.ts para armazenar as classes quadrado e classes
triângulo.
Eu também tenho o index.tests para a gente fazer um código exemplo para testar tudo.
Então esse exemplo vai ser o seguinte, nós temos uma figura geométrica que vai ser
uma interface.
Agora tem vários tipos de figuras geométricas, tem quadrado, tem triângulo, círculo e assim
por diante.
Agora eles todos têm algo em comum que a gente se interessa.
Por exemplo, todas as figuras têm um nome, todas as figuras têm uma área, mas cada
figura geométrica tem nome diferente, tem seu próprio método de obter a área, quadrado,
a área do quadrado é lado ao quadrado.
A área do triângulo é base vezes altura dividido por dois e assim por diante.
Então eles têm algo em comum, mas a implementação é diferente para cada figura geométrica.
Então a gente vai fazer a seguinte organização, vai ter uma interface que é comum a todas
as figuras chamadas figura geométrica.
Interface figura geométrica que eu vou fazer aqui, tem aqui o arquivo figura geométrica
com testes do lado aqui no meio, o painel do meio.
Então e vou fazer como classe todas as figuras geométricas e vão implementar essa interface
aqui.
Então quadrado com o testes aqui do lado direito em cima, eu vou criar uma classe,
classe chamado quadrado e para o triângulo aqui embaixo vou chamar a classe triângulo.
E assim que a gente vai começar.
Agora vamos aqui focar na figura geométrica.
Então vamos definir aqui um contrato para que todas as casas que implementam a figura
geométrica vai ter que ter o seguinte, vai ter que ter o nome da figura geométrica
que é do tipo string, nome 2.string e também vai ter que ter uma função para a cálcula
área, eu vou chamar a função diária.
Se a função não tem nenhum argumento e eu vou deixar o valor de torno como number
que é a número.
E poderia ter muito mais outras propriedades e ou métodos, mas vamos simplificar e deixar
esses exemplos bem simples.
Então para toda a figura geométrica aqui no nosso programa nós queremos que ela siga
o seguinte contrato, tem que ter uma propriedade chamada nome e tem que ter um método chamado
área que retorna number.
Tem também um detalhe sobre interface que cada atributo aqui propriedade é de acesso
público, não é private, vai ter que ter acesso público, nessa maneira aqui eu fiz
o nome ser público e a área também meta do público.
O private vai ser a específico da implementação de cada figura geométrica, por exemplo quadrado
vai ter seu lado como um atributo private, mas a implementação do quadrado, a gente
não se importa com isso no ponto de vista da figura geométrica, interface.
O triângulo é a mesma coisa, o triângulo vai ter base e vai ter altura como um atributo
privado, mas a interface não se importa com isso, a interface só quer saber se você
definiu a função para obter a área, tá?
Só isso, e essa função retorna number, número.
Então essa vai ser a interface que a gente vai usar para o contrato, para quem quiser
implementar uma figura geométrica, tem que seguir esse contrato.
Agora como é que faz para dizer o TypeScript que você vai seguir esse contrato?
Bem, vamos começar com o quadrado aqui no lado direito em cima, vamos chamar, tem a
classe quadrado para poder você implementar a interface, isto é seguir aquele contrato,
você fala depois o nome da classe, implementes e o nome da interface, nesses casos figura
geométrica.
Tá?
E com isso o quadrado agora vai seguir o contrato da figura geométrica.
Agora se eu tiver assim, salva aqui, sem nada dentro da classe, vamos ver se dá erro,
TypeScript deve reclamar porque a gente fez o quadrado seguir o contrato, então tem
que obedecer as regras lá e se não tiver nome nem área vai dar problema, isto que
a gente espera, vamos rodar aqui no terminal, o TSC, ver se tem nenhum problema.
Então deu problema na quadrado.ts, linha 1, coluna 7, classe quadrado, incorretamente
implementa e até faz figura geométrica.
Então tá faltando o quê?
Tá faltando o nome e tá faltando o área.
Então é isso que a gente quer, isso que a gente quer que o TypeScript reclame e nos diga na
hora da transpilação que tem problema, em vez de esperar até o programa rodar lá no
run time, né?
Então vamos aqui consertar isso, primeiro vai precisar da propriedade nome, mas quando
a propriedade temos que iniciar com o constructor, construtor, passa aqui o nome pelo construtor,
string e associa, né?
Desse ponto nome vai ser o nome passado pelo construtor.
Vamos testar novamente se não teve mais reclamação, pelo menos o nome.
Pronto, agora só tem o erro dizendo que propriedade área está faltando no quadrado e
querida no tipo figura geométrica.
Tá, agora vamos definir a área, uma função, a função vai ser pública, public area, não
tem nenhum parâmetro, retorna o number e nesse caso é um quadrado, qual é a área do
quadrado?
Vamos retornar o lado ao quadrado, né?
Mas não tem o lado ainda, então a gente tem que adicionar.
Então vamos aqui lá em cima e vou adicionar uma propriedade privada e específica do quadrado,
tá?
Private, lado do tipo number e o lado vai ser iniciado, a atribuição lá vem do construtor,
vou adicionar mais um parâmetro, lado, number, desse ponto lado, igual ao lado que foi passado
como argumento quando cria a instância de um quadrado.
Com isso a gente vai ter agora a propriedade privada específica do quadrado, somente, e
vamos usar desse ponto lado, que lado ao quadrado é a área, o quadrado então vou falar desse
ponto lado, vezes a mesma coisa, desse ponto lado.
E isso vai retornar a área do quadrado.
Então com isso a gente satisfaz o contrato da figura geométrica que temos a propriedade
que é pública nesse caso, fico nome e temos a definição aqui do método área que retorna
a área do quadrado, que é lado ao quadrado.
Voltando aqui no terminal vamos testar aqui de novo teste C, tá?
O script compilado não teve nenhum erro, deu tudo certo, tá?
Vamos testar isso, vou aqui no arquivo index.teses e vou fazer o seguinte,
bem, eu quero usar o, criar um novo quadrado, new quadrado dessa maneira aqui,
e vou passar o nome aqui, na verdade o nome poderia até ser o método estático,
que o nome vai sempre ser quadrado, né?
Mas deixa assim, só como exemplo, você vai dar o nome ao seu quadrado, tá?
Eu vou falar quadrado mesmo, lado, fazer dois, agora, deixa eu vou dentro de uma variável,
que, igual.
Agora, como a gente está usando o quadrado aqui, que está em outro arquivo, a gente precisa dar um import.
Import quadrado, from, estava no mesmo pasta, ponto bar, quadrado, não precisa pôr ponto teste.
Agora, quando a gente tem o import, mas o quadrado não está sendo exportado,
por isso a gente tem que ir lá no quadrado.tesse adicionar export,
antes do nome da definição da classe, para poder disponibilizar e tornar esse arquivo um módulo.
Agora esse é um arquivo um módulo, e também um módulo, tá?
Agora, seria até melhor também a gente importar a figura geométrica daqui do quadrado,
para não ter que deixar no escopo global, então, lá do figura geométrica, pôr teste,
eu vou dar export interface, para exportar e tornar esse arquivo um módulo,
e do quadrado pôr teste, eu vou dar import, figura geométrica, from, ponto bar, figura geométrica.
Temos o módulo figura geométrica, módulo quadrado, e esse é o módulo index aqui, para testar o código.
De volta aqui ao index, depois de criar esse quadrado, vamos chamar aqui o que ponto área,
para ver se realmente calcular e corretamente, vou dar o console log nisso.
Salvar, vamos lá no terminal transpilar, vou rodar o node aqui no ssr, não, dist,
barra geometria, barra index, e note que obtemos 4 como resultado do console log, que está correto.
Tínhamos definido um novo quadrado, de lado 2, 2 vezes 2, é 4, a área do quadrado.
Agora nos resta a gente fazer triângulo, vamos fazer aí como exercício, vamos lá.
Então, classe triângulo, vamos implementar a interface geométrica, implementa,
as palavras-chave, depois o nome da classe, nome da interface.
Como a gente não tem importado ainda, vamos dar um import, figura geométrica,
não se esqueça da chave, from, ponto bar, figura geométrica, porque está no mesmo diretório.
Pronto, classe triângulo implementa a figura geométrica, primeiro vai ter que ter o nome,
para seguir o contrato, e vai ter que ter a área.
Pronto, agora vamos completar essas coisas, a área vai ser o método público,
vai, nenhum parâmetro, retorna o number, e a área do triângulo vai ser base vezes a altura,
dividir por 2, ainda não temos as propriedades no triângulo, então temos que adicionar.
Vamos fazer de conta que temos e depois a gente define, então vão des, ponto base,
vezes des, ponto altura, dividido por 2, a área de um triângulo.
Pronto, vamos adicionar essas propriedades base, altura, o triângulo, deixa eu aumentar aqui,
private, porque eu não quero expô essas propriedades específicas do triângulo,
base vai ser o number, e private, altura, vai ser também outro number.
Precisamos de um construtor para poder construir o nosso,
nosso instância do objeto, esse construtor primeiro leva o nome, que é um string,
depois leva o base e a altura, base number, altura number.
Vamos associar cada argumento do construtor à instância da classe,
des, ponto nome é nome, des, ponto base é base, e des, ponto altura,
vai ser a altura passada como argumento.
Não note que essas propriedades privadas, base e altura, são específicas do triângulo,
a figura geométrica, a interface, não se importa de como você implementa
a, de propriedades privadas, a sua classe tem.
A figura geométrica só se importa se você tem o nome como propriedade pública
e tem uma função área que retorna o number.
A implementação específica de como obter a área da figura geométrica
é, deixa para a classe que implementa a interface.
Pronto, vamos testar isso.
Eu quero testar do meu arquivo index.ts aqui, eu vou abrir aqui um lado esquerdo.
Para poder usar o triângulo, vou exportar na linha 3 do triângulo.ts, vou exportar.
Agora vou importar aqui do index.ts import, triângulo from.bar.triângulo.
E se refere ao triângulo.ts.
Com isso eu vou aqui embaixo, lett, t, new, triângulo.
Na outra instância, vou chamar o nome triângulo mesmo.
Qual é a base, vamos ver base 4, altura 5, por exemplo.
Vamos fazer a mesma coisa aqui, deixa eu comentar o console log
e comentar o negócio quadrado, a gente não vê.
Vou dar o console log aqui do que?
Do t.area chamada de função.
A gente espera base 4 vezes a altura 5, da 20, dividido por 2, da 10.
Vamos ver se dá certo.
Salvei tudo, salvei o triângulo.
TSC, node dist, bar geometria, bar index.js, deu 10 como a gente esperava.
A área do triângulo.
7.
Nesta aula nós aprendemos que uma classe pode implementar o interface.
Criamos a interface figura geometrica que tem como contrato, tem que ter o nome, tem que ter um método para a área.
Agora a implementação do método é específica a cada classe que a gente fez da classe quadrada, que implementa a figura geometrica.
E a classe tem algo que implementa a figura geometrica.
Cada classe tem suas próprias propriedades privadas que podem ser utilizadas para você fazer implementação do método a área,
que vai ser diferente para cada figura geometrica.
Por exemplo, quadrado, a área é obtida, calculada pelo tipo criação do lado, vezes o lado quadrado.
E do triângulo é diferente.
O triângulo tem uma base, tem uma altura, implementação específica que é diferente, mas também tem o mesmo método que é retornar a área.
A implementação da área do triângulo é a calcula de base vezes a altura, divido por 2.
Na ótica comum também o nome de cada figura geometrica tem o mesmo propriedade pública e foi definido no contrato também.
É por essa aula é só, e até a próxima.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: