[MÚSICA] [MÚSICA] Olá, bem vindo ao Curso Desenvolvimento Ágil com Padrões de Projeto. Eu sou o Clovis Fernandes e na aula de hoje vamos prosseguir com a parte três, apresentando problemas com o uso de construtores. Nós vimos que, na parte e na parte dois, construtor não é muito bom para expressar a intenção do programador. Isso foi o que nós mostramos na parte e parte dois. Nesta parte três, após terminar esta parte três, você vai ver que nós vamos exemplificar pouquinho mais esse problema de falta de expressão da intenção do programador e vamos apresentar novo problema, que é que você não pode ter dois construtores com a mesma assinatura, nós vamos ver isso mais claramente. Tentando tornar mais claro ainda, vamos colocar uma terceira intenção. Eu quero gerar inteiro aleatório que seja menor que o valor máximo. Para isso nós vamos criar novo construtor cujo parâmetro é valor máximo, que eu estou chamando de int max, e eu vou especificar valor mínimo. Esse valor mínimo eu chamei de VALOR_MINIMO vai ser igual a zero, porque eu tinha colocado uma restrição no meu gerador como todo que o mínimo tinha que ser maior ou igual a zero, só por causa disso. nada impediria, se eu estivesse usando por exemplo números negativos, ter colocado o integer min value, que é o menor valor, quer dizer é o valor, é o maior valor negativo, eu poderia ter usado isso. Para isso eu criei uma constante, que eu chamei de VALOR_MINIMO, e dei já o valor inicial que é exatamente zero, é uma constante definida Java. Vamos usar. Eu usei exatamente o mesmo exemplo do valor aleatório maior que o mínimo. Ou seja, olhando aí, como é que você sabe se ele é o valor maior que o mínimo ou o valor menor que o máximo? Ou seja, eu não consigo ver isso porque não está expresso explicitamente através do construtor, porque o construtor não permite você expressar a intenção do programador. Então esse é claramente, agora fica claro que eu não consigo fazer isso. Mas tem problema adicional: suponha que eu coloque no meu Eclipse os dois construtores aqui, o quê que vai acontecer com esses dois construtores na hora da compilação? Na verdade o Eclipse já vai apontar o problema, que é o código duplicado, ele tem o método, dois métodos com a mesma assinatura, que é isso o que ele está dizendo aí. Vamos examinar isso pouquinho mais de perto? Vocês vejam que eu tenho a assinatura, veja: os dois métodos são diferentes, no sentido que eu coloquei int min como parâmetro de e int max como parâmetro do outro, mas a assinatura, que é isso que o compilador olha, a assinatura é igual. Então vocês vejam que o int min a assinatura é o gerador int aleatório int. Para o construtor com o int max, o parâmetro int max, igualmente, a assinatura é a mesma. E essa é a conclusão que eu tenho que chegar ao final: eu não consigo colocar dois construtores que tenham a mesma assinatura. O java não permite isso, aliás nenhuma linguagem vai permitir isso. E aí? Como resolver esse problema? Então, nós temos nesse momento dois problemas, ou seja, no final dessas três partes nós identificamos dois problemas: nem sempre é possível com o construtor expressar a intenção do programador no construtor. Nós mostramos três intenções e não ficou claro isso, principalmente nas duas últimas. E também, quando dois construtores têm a mesma assinatura, eu não consigo compilar esse construtor, o programa não compila. É problema sério que nós temos que resolver. Como fazer isso? Obrigado. [MÚSICA] [MÚSICA]