Construtores
Construtores são métodos chamados automaticamente sempre que um novo objeto é criado. O principal papel de um construtor é executar uma sequência de comandos que darão valores iniciais ao objeto. Vejam, na imagem abaixo, o exemplo de um método construtor:
A primeira observação importante é que os métodos construtores não possuem nenhum tipo de retorno de dado. Apenas relembrando, sempre que criamos uma função que processará alguma informação e enviará um resultado ao término de sua execução, devemos definir o tipo de retorno. Se a função fará um cálculo e retornará um número inteiro, a função deve especificar o tipo "int" em sua estrutura. Se vai retornar uma frase, palavra ou caractere, deve conter o tipo "string" na estrutura, enfim, é preciso que deixemos explícito o tipo de dado que será enviado. Caso ela não retorne nenhuma informação, devemos ainda assim especificar o tipo "void". Nos métodos construtores isso não é necessário, aliás, eles não devem conter esta especificação.
Na imagem acima podemos observar também que a partir da classe Carro, criada no tópico sobre Classes, defini alguns valores padrão para ela, que foram a cor Branca e a marca FIAT. Dessa forma, sempre que o método construtor for chamado e um novo objeto do tipo Carro surgir, ele terá esses dados inseridos automaticamente em seus atributos. Vejamos a execução disso com o seguinte código:
Vamos executar esse código e ver se, de fato, os valores que definimos como padrão são inseridos no objeto:
Aqui podemos ver que a cor Branca foi realmente inserida e, ao clicar no OK surge a nova caixa de diálogo, conforme imagem abaixo:
A imagem acima mostra que nos foi retornada a marca FIAT, que definimos como padrão no método construtor. Claro que esses são apenas os valores criados no “nascimento” do objeto e, conforme citei anteriormente, eles podem ser alterados. Vou chamar o método setCor alterando a cor para Azul, vejam:
E executando esse código temos o seguinte retorno:
Agora podemos observar que a nova cor realmente é o Azul. Com isso eu gostaria de deixar claro que o papel de método contrutor é criar o objeto e lhe atribuir valores iniciais, mas também é importante destacar que esses valores podem ser (e quase sempre serão) alterados ao longo da execução do programa.
Para encerrar o assunto Construtores, vale ressaltar que sempre que um objeto é criado o método construtor do mesmo é chamado. Bem, mas o que aconteceria se não fizéssemos o método construtor e mesmo assim tentássemos criar um objeto? Vou anular nosso método construtor, deixando o código da seguinte forma:
Agora vamos executar o código:
Notem que o código foi executado sem nenhum erro mas, quando a execução chega no trecho onde ele deveria mostrar a cor padrão do nosso objeto do tipo Carro, o campo aparece vazio. A primeira impressão que isso pode causar é que os métodos construtores não são essenciais, já que o código foi executado sem problemas e o valor não foi exibido apenas porque não havia nada na propriedade cor do objeto criado.
Bem, na verdade não é bem assim que as coisas acontecem. O C#, que é a linguagem usada nesses testes, é inteligente o suficiente para detectar que a classe Carro não possuía um método construtor, então, no momento da compilação ele cria um por conta própria e define todas as suas propriedades com valores vazios. Se fossem dados numéricos ele atribuiria valores zero como padrão. Então, o que é importante que fique claro é que mesmo que você não defina um método construtor, ele estará presente para inicilizar seu objeto, caso contrário não seria possível executar o código. De qualquer forma, deixar de criar esses métodos contando com o auxílio do compilador não é uma boa prática de programação. Lembre-se de sempre criá-lo, até porque pode haver situações em que os métodos construtores precisem receber parâmetros de inicialização e, nesse caso o compilador não poderá ajudar. Falarei mais sobre isso no próximo tópico.