E ai pessoal.
Gostaria de saber a opiniao de vc p saber realmente oq é a otimizaçao de um codigo.
Na minha opinia otimizar um codigo significa fazer com que o codigo use as melhores alternativas da liguagem p fazer um promagrama mais legivel e TALVEZ um programa mais rapido.
Faço essa pergunta pois no livro OCA JAVA SE 7 - Programmer I - Study Guide - Exam 1Z0-803 do Robert Liguori e Edward Finegan tem uma pergunta q diz o seguinte:
Polymorphism helps to facilitate which of the following? (Choose all that apply.)
A. Highly optimized code
B. Code reuse
C. Code obfuscation
D. Code that is generic and flexible
Uma das alternativas q marquei é a “A”, porém o livro indica essa resposta como errada.
No livro ele explica pq cada resposta é certa ou errada e para a alternativa “A” ele responde. A is incorrect because polymorphism has no effect on the level of optimization of the code.
Continuo achando q o polimorfismo otimiza o codigo, talvez n otimiza o programa em si, mas o codigo sim.
PS: Eu nem sei onde colocar essa post, acho q é d java avançado, se vcs preferirem pode mudar o post d lugar.
Sim amigo. A boa escrita do código torna ele mais otimizado e legivel. Sempre evitar 2 coisas se pode-se fazer só com 1. Esse tipo de coisa torna o código mais robusto. Eu sempre utilizo a ferramenta PMD, para analisar meu código, e ver se tem algo a mais que eu possa retirar sem impacto.
D
devaney
Vou postar esse topico no java ranch tb, vamos ver oq o autor responde (as vezes ele responde).
E
entanglement
“Otimização de código” não está associada a “reutilização” ou “mantenabilidade” ou “flexibilidade”.
Está associada a “algoritmos eficientes” e a “adequação do programa aos recursos computacionais”.
Portanto, a resposta “A” está realmente errada.
Hebert_Coelho
entanglement:
devaney:
Polymorphism helps to facilitate which of the following? (Choose all that apply.)
A. Highly optimized code
B. Code reuse
C. Code obfuscation
D. Code that is generic and flexible
“Otimização de código” não está associada a “reutilização” ou “mantenabilidade” ou “flexibilidade”.
Está associada a “algoritmos eficientes” e a “adequação do programa aos recursos computacionais”.
Portanto, a resposta “A” está realmente errada.
+1
sergiotaborda
devaney:
E ai pessoal.
Gostaria de saber a opiniao de vc p saber realmente oq é a otimizaçao de um codigo.
Na minha opinia otimizar um codigo significa fazer com que o codigo use as melhores alternativas da liguagem p fazer um promagrama mais legivel e TALVEZ um programa mais rapido.
Faço essa pergunta pois no livro OCA JAVA SE 7 - Programmer I - Study Guide - Exam 1Z0-803 do Robert Liguori e Edward Finegan tem uma pergunta q diz o seguinte:
Polymorphism helps to facilitate which of the following? (Choose all that apply.)
A. Highly optimized code
B. Code reuse
C. Code obfuscation
D. Code that is generic and flexible
Uma das alternativas q marquei é a “A”, porém o livro indica essa resposta como errada.
No livro ele explica pq cada resposta é certa ou errada e para a alternativa “A” ele responde. A is incorrect because polymorphism has no effect on the level of optimization of the code.
Continuo achando q o polimorfismo otimiza o codigo, talvez n otimiza o programa em si, mas o codigo sim.
PS: Eu nem sei onde colocar essa post, acho q é d java avançado, se vcs preferirem pode mudar o post d lugar.
O problema é que vc parte de uma permissa errada : que otimização é fazer bom código. Não. Otimização não é isso.
Otimização é fazer a aplicação funcionar mais depressa. Ou seja, fazer o mesmo, em menos tempo. Portanto, polimorfismo que tem zero impacto na velocidade da aplicação não pode facilitar codigo otimizado.
Código bem escrito é conhecido como “good code” (código bom) e o uso da palavra “bom” não é aleatório. É que realmente tem que ver com a qualidade.
Existe uma diferença entre código eficiente (que é rápido) e código efetivo ( que é correto do ponto de vista da linguagem e das boas práticas)
A
andrielc
entanglement:
devaney:
Polymorphism helps to facilitate which of the following? (Choose all that apply.)
A. Highly optimized code
B. Code reuse
C. Code obfuscation
D. Code that is generic and flexible
“Otimização de código” não está associada a “reutilização” ou “mantenabilidade” ou “flexibilidade”.
Está associada a “algoritmos eficientes” e a “adequação do programa aos recursos computacionais”.
Portanto, a resposta “A” está realmente errada.
+1
ViniGodoy
Dependendo do caso, polimorfismo vai até contra a otimização do código.
As respostas corretas seriam B e D.
D
devaney
Se essas duas afirmaçoes sao verdadeiras, pq o polimorfismo existe ainda? Oq adianta fazer um codigo facil de fazer manutençao e mais facil de ler se depois n tem garantias q o objetivo final (o programa) n é rapido e eficiente?
Ta certo q tudo na vida tem aquela expresao “depende da situaçao”, mas na minha opiniao uma metodologia (n sei se posso chamar o polimorfismo de metodologia) tao conhecida por ser potente deveria em primeiro lugar fazer programas eficientes (como citado, algoritmos eficientes etc) e em segundo lugar deveria ter “mantenabilidade”.
Eu realmente ainda penso assim, posso mudar de idéia, mas penso assim. Porém acho q estamos falando d duas coisas um pouco diferente, no sentido q eu estou falando de otimizaçao d codigo e otimizaçao de programa e vc so’ ta falando de otimizaçao.
Otimizaçao de codigo é fazer um bom codigo q n quer dizer q o programa é otimizado.
Um programa otimizado (rapido e eficiente) pode ter um codigo todo bagunçado ou dificil de ler (p os humanos).
Por isso p mim, o polimorfismo otimiza o codigo, mas nem sempre otimiza o programa e por isso continuo achando q a “A” é certa.
M
mcarabolante
Você está confundindo as coisas, otimizar código X otimizar desenvolvimento.
O polimorfismo ajuda a otimizar desenvolvimento atravéz de reuso, e isto NÃO está no escopo da resposta A, portanto está errada.
Partir do principio de otimização prematura é considerado um AntiPattern, isto é, algo que vai acabar influenciando negativamente no seu sistema, um programa deve ser otimizado somente quando há a necessidade disto, não é frequente a necessidade de otimização de código …
sergiotaborda
O único problema está nas palavras que vc usa. Isso que vc fala de adotar boas práticas e “limpar” o código não se chama “Otimização de código” .
'Otimização" sempre é uma processo que vc realiza para poupar recursos no runtime ( memoria , cpu, etc… ) vc afeta o runtime modificando o código, mas vc está efetivamente otimizando o resultado final e não o código em si.
Deixar o código mais legivel, mais fácil de compreender, modificar e evoluir. Usar boas práticas, ter atenção aos truques e armadilhas da linguagem isso não é otimizar. Vc não faz isso para deixar o programa mais rápido. Vc faz isso para deixar o programa mais compreensível ao ser humano. OO foi criado para deixar o codigo mais compreensível, mas poder aumentar o reuso , facilitar a evolução. Esse é o papel de coisas como herança e polimorfismo ( e existem polimorfismos não relacionados a herança)
Criar um código limpo é simplesmente escreve melhor código.
A palavra “Otimização” implica em argumentos sobre a Performance do sistema. Escreve bom código implica na Qualidade do código. São duas coisas diferentes.
O seu raciocínio que de escrever bom código é importante está correto. E escrever bom código pode acelerar o sistema e deixá-lo com maior performance, mas isso não é o propósito principal de escrever bom código. o propósito principal é que outros seres humanos entendam o que vc escreveu e possam modificar.
Polimorfismo, herança, overloading, overriding, shadowing , lambdas e muitas outras coisas são criadas para escrever código melhor. Cada uma dessas cosias vai ter um impacto positivo ou negativo na performance do sistema, mas elas são necessárias mesmo que impactem negativamente pois o seu beneficio ao ser humano programador é maior que o seu custo de performance ao usuário.
É só compreender que está usando as palavras erradas para expressar sua opinião correta e vc entenderá que estamos todos de acordo. Apenas estamos tentando lhe fazer entender que vc está usando a expressão errada. É equivalente a vc dizer que uma carro com mais facilidades para o condutor é um carro mais rápido. Não tem que ver. Embora essas facilidades podem ajudar (injeção eletronica, por exemplo) ou atrapalhar (direção automática) a performance o obetivo delas é dar valor ao condutor, não impactar a performance.
ViniGodoy
Por que o impacto de performance dele é extremamente baixo, principalmente para aplicações comercais.
Apenas aplicação muitíssimo CPU Bound, como frameworks gráficos ou firmwares, vão sentir negativamente o impacto do polimorfismo. Os ganhos em termos de flexibilidade e extensibilidade mais do que compensam. E, em aplicações comerciais, você terá outros pontos de impacto bem mais negativo para se preocupar, como o delay da rede ou os gargalos do banco de dados.
Se você realmente pensa assim, deveria ir para o mercado de firmware e programar em C.
devaney:
Eu realmente ainda penso assim, posso mudar de idéia, mas penso assim. Porém acho q estamos falando d duas coisas um pouco diferente, no sentido q eu estou falando de otimizaçao d codigo e otimizaçao de programa e vc so’ ta falando de otimizaçao.
Otimizaçao de codigo é fazer um bom codigo q n quer dizer q o programa é otimizado.
Você até pode usar uma definição própria, do que você pense ser otimização. Pena que o resto do mundo não concorda com você. Nesse caso, não se impressione se o sentido da pergunta da sua certificação não acompanhar o que você pensa. Tem que responder pelo que é, não pelo que você acha.
E muitas vezes tem mesmo. Por isso no livro “refatoração”, o Martin Fowler recomenda colocar comentário explicando código somente nas situações em que a otimização gere um código desse tipo.
Otimização não tem a ver com qualidade de código, mas com eficiência: seja de velocidade de execução ou consumo de memória.
Polimorfismo não é uma ferramenta usada para garantir isso.