[SEM AUDIO DE VOZ] Olá
bem-vindo ao curso de Desenvolvimento Ágil com Padrões de Projeto.
Eu sou Clóvis Fernandes e na aula de hoje daremos prosseguimento
ao que nós apresentamos na parte 1.
E é o uso de métodos estáticos para resolver os
dois primeiros problemas que a gente tem com construtores.
Primeiro, a falta de poder expressar a intenção do programador,
usando o construtor e a impossibilidade de ter mais do que construtor,
dado que eles têm uma mesma assinatura.
Na aula de hoje nós vamos então mostrar como
proceder para que aquelas duas intenções novas que a gente
tinha exemplificado anteriormente e mostrando que aqueles problemas
todos são resolvidos através de métodos de fábrica, métodos estáticos de fábrica.
Vamos começar então pela segundo intenção,
quero gerar inteiro aleatório que seja maior que valor mínimo.
Nós estamos vendo aqui o construtor que eu usei anteriormente,
eu tenho até os comentários que mostram a intencionalidade,
a minha intenção que eu estava querendo.
Como é que eu vou transformar isso usando métodos estáticos de fábrica.
Vou criar novo, porque, para cada intenção que eu tiver,
crio novo método estático de fábrica.
Então eu vou criar novo, lembrando que eu já coloquei aquele
construtor inicial como privado, então não estou reapresentado ele aqui,
só estou mostrando então agora que estou fazendo método estático de fábrica,
que eu estou chamando aqui de "maiorQue" o valor mínimo.
Vamos representar separadamente,
vocês vejam que eu coloquei o
"min" e vou passar esse parâmetro para o construtor privado.
E como valor máximo eu vou colocar "Integer.MAX_VALUE".
Com isso, o método estático de
fábrica "maiorQue" vai me criar objeto
GeradorIntAleatório para esse valor mínimo que eu quero colocar
e o máximo o valor maior inteiro que eu quero representar.
Vamos mostrar agora aquele exemplo que eu, usando o construtor antigo,
eu queria criar gerador que fosse para
gerar números que fossem maiores que o valor mínimo que eu coloco,
que eu exemplifiquei até como valor 15, seja maior que 15.
Então logo baixo vocês estão vendo que é método estático,
eu coloco o nome da classe, e é GeradorIntAleatório e maiorQue 15.
Passo esse valor, esse valor vai gerar o
construtor que eu quero, pela intenção.
Eu quero gerar números aleatórios que sejam maiores que 15,
então a minha intenção ficou claramente expressa.
Ficou muito claro aqui, o que eu estava querendo criar, era gerador de números
aleatórios inteiros maiores que o número 15.
Vamos mostrar agora aquela terceira intenção, lembra que,
quando eu tentei usar construtor para criar essa terceira
intenção não conseguia fazer porque
as assinaturas dos dois construtores era a mesma, então eu não podia fazer.
Agora usando o método estático de fábrica, isso vai resolver naturalmente,
ou seja, além de eu colocar a intenção explícita eu posso criar
aqui que não vai haver nenhum conflito nenhum, por causa da
assinatura do método estático é diferente do outro, como nós iremos notar aqui.
Novamente, apresento aquele construtor antigo, que eu não consegui construir,
vamos deixar isso bem claro, mas cujo comentário está mostrando
a intenção que eu estava querendo, que é gerar número inteiro, aleatório,
menor que o valor máximo, então o que eu faço?
Vou construir método estático de fábrica,
novamente lembro que não estou apresentando o construtor privado que eu
já defini, e que faço uso dentro do meu método de fábrica,
agora eu estou pondo o método de fábrica menor que valor máximo
que eu especificar, a intencionalidade foi colocada aí.
Então vamos, olhando ele detalhadamente,
que agora o nome dele demonstra toda a intenção que eu estou querendo fazer.
E aí eu simplesmente faço uso do meu construtor privado,
passando o valor mínimo,
que eu defini com aquela constante, valor mínimo,
e o valor máximo é o máximo que eu estou passando para aquele construtor,
então o resultado desse método estático de fábrica é criar gerador
que vai gerar números inteiros menores que o valor máximo que eu colocar ali.
Agora vamos exemplificar comparando com o outro exemplo
que eu dei, já usando o método de fábrica.
Já usando o método de fábrica para vocês verem que a intencionalidade vai ficar
clara quando eu comparar método de fábrica com outro, o uso deles.
Mas vocês vejam que eu tenho cima o maiorQue(15) e
baixo eu estou fazendo o gerador para menorQue(15),
então ficou claro a intencionalidade do menorQue,
cima também ficou claro que era o maiorQue, eu não tenho mais duvida.
Antes eu não nem conseguia criar, mas teoricamente eu ia confundir,
esse construtor é para maior que quinze ou menor que quinze, agora não tenho duvida
porque isso está expresso, explicitamente no nome do método estático de fábrica.
Eu consigo compilar tudo, então eu estou ai mostrando para vocês,
e tudo isso é compilável, ou seja tenho agora o método,
o construtor da classe privada e tenho três métodos de fábrica e todos eles vão,
como o nome diz, de método estático de fábrica,
ele vai voltar objeto da classe gerador IntAleatório.
Mas cada com a sua intencionalidade.
Ao fazer isso, ao dar essa intencionalidade
vocês vejam que cada tem a sua intencionalidade,
eu não preciso mais usar aqueles comentários para explicitar
a intencionalidade porque ela está explícita no próprio código.
E ao mesmo tempo eu não tenho aquele problema de ter
assinaturas idênticas dos construtores,
porque agora o simples facto de tornar explícito a intencionalidade
cada método estático de fábrica, me dá uma assinatura diferente.
Vocês vejam que o maiorQue o int min, a assinatura é maior que int.
E o do menorQue int max,
a assinatura é menorQue int.
Pronto, os nomes são diferentes,
embora os parâmetros sejam iguais.
Com isso você aprendeu nesta aula que com o uso de
métodos estáticos de fábrica você resolve
os problemas de explicitar a intenção
do usuário, do programador, ao colocar,
fazer nomes apropriados usando os métodos estáticos de fábrica e ao mesmo tempo,
resolvendo aquele problema dos construtores
que é impossível gerar dois construtores com a mesma assinatura.
Os outros problemas dos construtores, do três até ao seis,
também são solúveis através de métodos estáticos de fábrica,
mas numa mistura, alguns deles, com padrões,
outros padrões de projeto, como a gente espera vendo neste curso.
Obrigado [MÚSICA]