Cursos / Redes de Computadores / Programação Orientada a Objetos / Aula
Antes de tudo, é preciso ter em mente que objetos são construídos, você NÃO pode criar um novo objeto sem invocar um construtor. Construtores representam o código que roda sempre que você usa a palavra-chave new.
Toda classe DEVE ter um construtor. Mas isso não significa que o programador tem que necessariamente codificar um. Caso não seja explicitamente declarado, o compilador criará um por padrão. Exemplo de uso do construtor padrão:
let c = new Carro();
c.cor = "Vermelho";
console.log(c.cor);
Observe que quando utilizamos o operador new não existem argumentos (ou parâmetros) dentro dos parênteses. Isso significa que podemos usar o construtor padrão (ou, em inglês, default).
Ele inicializa o novo objeto e seus atributos
export class Carro{
modelo: string;
_cor: string;
placa: string;
numPortas: number;
constructor(modelo:string, cor: string, placa: string, numPortas: number){
this.modelo = modelo;
this._cor = cor;
this.placa = placa;
this.numPortas = numPortas;
}
}
Você consegue notar o que está faltando? Cadê o tipo de retorno? Existem dois pontos importantes que devemos notar a respeito dos construtores. Primeiro, é que eles não têm tipo de retorno, segundo, que devemos utilizar a palavra reservada constructor.
Mas, se a classe não tiver método construtor? O objeto ainda pode ser criado usando a instrução (ou operador) new. Mas, nesse caso, será provavelmente necessário chamar métodos de acesso (set) para definir valores para os atributos da classe.
Criando um objeto a partir do construtor definido anteriormente:
let c = new Carro("Fiesta","Vermelha","AEC-9898",4);
Observe que quando criamos o objeto já passamos os valores como parâmetro para o construtor, com isso definindo na hora da criação do objeto os valores dos atributos.
Até agora vimos que é possível definir construtor com parâmetros e construtor padrão, vazio, sem nenhum parâmetro passado no momento da criação do objeto. Mas, se o problema que estivermos trabalhando exigir diferentes construtores para diferentes momentos? O Typescript não permite sobrecarga de construtores, porém para resolver esse problema podemos utilizar um recurso que a linguagem disponibiliza: parâmetro opcional. Os parâmetros opcionais são definidos com um sinal de interrogação após o nome do parâmetro e devem ser sempre o último ou os últimos parâmetros. Vejamos um exemplo:
constructor(modelo:string, cor: string, placa?: string, numPortas?: number){
this.modelo = modelo;
this.cor = cor;
this.placa = placa;
if(numPortas != undefined){
this.numPortas = numPortas;
}else{
this.numPortas = 2;
}
}
Importante: Quando temos parâmetros opcionais é preciso tratá-los para não receber valores undefined e provocar erros futuros no código. Veremos mais adiante uma outra forma de tratá-los, que é utilizando parâmetro com valor padrão.
Abaixo, segue um exemplo de como criar uma instância do objeto carro na variável c que recebe todos os parâmetros, porém a variável c2 só recebe os parâmetros obrigatórios.
let c = new Carro("Fiesta","Vermelha","AEC-9898",4);
let c2 = new Carro("Gol","Branca");
Versão 5.3 - Todos os Direitos reservados