Questão nº 58
Questão de Tecnologia da Informação · FGV TRF1 2024 (nº 58)
FGV2024Técnico Judiciário - Desenvolvimento de SistemasTecnologia da Informação
Gabarito: Aver comentário ↓
Considere o seguinte código em TypeScript (TS):
interface Orgao { print(): void; }
abstract class Tribunal implements Orgao {
protected nome: string;
constructor(nome: string) { this.nome = nome; }
abstract sigla(): string;
print(): void { console.log(this.nome); }
}
class TRF extends Tribunal {
private numRegiao: number;
constructor(nome: string, numRegiao: number) {
super(nome);
this.numRegiao = numRegiao;
}
sigla(): string {return `TRF\${this.numRegiao}`;}
}
let trf1 = new TRF("TRF", 1);
console.log(trf1.sigla());
Ao ser executado, o código acima irá:
- Aimprimir TRF1 na saída padrão do console; (alternativa correta)
- Bfalhar, pois em TS não há o encapsulamento protected;
- Cfalhar, pois em TS uma interface precisa ser prefixada com I;
- Dfalhar, pois em TS uma classe abstrata não pode implementar uma interface;
- Efalhar, pois em TS uma classe abstrata não pode conter outro método concreto além do construtor.
Resposta comentada
Gabarito Alternativa A
Em TypeScript, interfaces definem contratos de forma e comportamento que classes devem seguir, enquanto classes abstratas são classes que não podem ser instanciadas diretamente e podem conter métodos abstratos (sem implementação) que devem ser implementados por suas subclasses, além de métodos concretos.
- (A) Correta: O código está sintaticamente correto em TypeScript. A classe
TRFestendeTribunale implementa o método abstratosigla(). Ao criartrf1comnumRegiaoigual a 1 e chamartrf1.sigla(), o métodosigla()deTRFé executado, retornando a stringTRF1, que é então impressa no console. - (B) Incorreta: Em TypeScript, o modificador de acesso
protectedexiste e funciona exatamente como esperado: membrosprotectedsão acessíveis dentro da própria classe e em suas subclasses. A armadilha aqui é que alguns podem confundir TypeScript com JavaScript puro (que não temprotectednativo) ou não conhecerem bem os modificadores de acesso em TS. - (C) Incorreta: Prefixar interfaces com "I" (ex:
IOrgao) é uma convenção de estilo comum em algumas comunidades (como C#), mas não é um requisito de sintaxe em TypeScript. O código é perfeitamente válido sem o prefixo. - (D) Incorreta: Classes abstratas em TypeScript podem e frequentemente implementam interfaces. Isso permite que a classe abstrata declare que cumprirá um contrato, mas deixe a implementação de alguns de seus próprios métodos (ou dos métodos da interface) para suas subclasses concretas.
- (E) Incorreta: Classes abstratas em TypeScript podem conter métodos concretos (com implementação) além do construtor, bem como métodos abstratos. O método
print()na classeTribunalé um exemplo de método concreto em uma classe abstrata.
Fonte: FGV TRF1 2024 Técnico Judiciário - Desenvolvimento de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.