( Draft 2 )Programe voltado a interface, não a implementação  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
Marcio Duran
GUJ Master
[Avatar]

Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline

Trecho do livro Arquitetura e Design de Software

"O que você usa para armazenar um punhado de objetos? Um ArrayList? Uma LinkedList? Um HashSet?

Apesar disso, grande parte dos desenvolvedores opta por ArrayList diretamente sem nenhum critério."


ArraryList para ArryIterator, critério aceito ???


Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven
[WWW]
ccaneta
JavaBaby
[Avatar]

Membro desde: 26/03/2006 20:30:54
Mensagens: 97
Offline

Fala ai Marciao,

Well... existem varios casos a serem analisados, mas te digo o ArrayList e o mais rapido para consultar elementos atraves do indice.

Posso garantir isso, pois realizei varios testes de profiling, e este e o que ocupa menos memoria e tem melhor tempo de resposta.

Abraçaooooo

Marcio Duran
GUJ Master
[Avatar]

Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline

ccaneta wrote:Fala ai Marciao,

Well... existem varios casos a serem analisados, mas te digo o ArrayList e o mais rapido para consultar elementos atraves do indice.

É ai que mora a questão !!!!, não existe uma resposta exata mas objetos podem ter comportamentos ( de X objetos para Y coleção ) em pontos já observados ao modelo de dominio,no que vai envolver um DAO ao exemplo exposto do livro ( observado X para Ys ) usando determinado pattern para determinado situção criação, estrutura ou comportamento ( que atende o dominio ) que vai combinar para essa gerencia ( programação voltado a interface ) que melhor atendeu em pontos da sua arquitetura, por consequencia os patterns regem os objetos , mas usar a Coleção é puro estado já observado ( requisitos aceitos ) em pontos de uma arquitetura ou solução que já se observou ( objetos atendeu o modelo ) ou melhor já deu certo.

Posso garantir isso, pois realizei varios testes de profiling, e este e o que ocupa menos memoria e tem melhor tempo de resposta.
Abraçaooooo


Veja quanto ao Profiling fica um mecanismo que é de pura instrumentação mas não vai ainda em si lhe provar tal tese a não ser que você já tenha isso simulado ou observado em arquiteturas anteriores.

Profiling é o Marketing !!!

This message was edited 12 times. Last update was at 29/07/2009 19:56:48


Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven
[WWW]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Os critérios que ele fala são quando você dá um peso maior à uma característica específica que a implementação provê.

No caso de Lists, o ArrayList tem a melhor performance para selecionar aleatóriamente um elemento, LinkedList é a melhor opção se você for trabalhar pesadamente com inserções no começo ou no final da lista, mas ela é ruim com acessos aleatórios. Vector utilizaria se precisasse de sincronização na lista (ou Collections.synchronizedList). Queues para FIFO, Stacks para LIFO...

Maps e Sets também podemos usar, mas tem usos específicos completamente diferentes.

Teoria, performance, tempo de processador, gasto de memória, propósito, todos são critérios a se considerar.

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
Marcio Duran
GUJ Master
[Avatar]

Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline

Bruno Laturner wrote:Os critérios que ele fala são quando você dá um peso maior à uma característica específica que a implementação provê.

No caso de Lists, o ArrayList tem a melhor performance para selecionar aleatóriamente um elemento, LinkedList é a melhor opção se você for trabalhar pesadamente com inserções no começo ou no final da lista, mas ela é ruim com acessos aleatórios. Vector utilizaria se precisasse de sincronização na lista (ou Collections.synchronizedList). Queues para FIFO, Stacks para LIFO...

Maps e Sets também podemos usar, mas tem usos específicos completamente diferentes.

Teoria, performance, tempo de processador, gasto de memória, propósito, todos são critérios a se considerar.


Agora eu pergunto, como achar o ponto certo ao uso dessas coleções para determinadas parte de seu Framework de sua Arquitetura, e que Design Pattern iria melhor prover resultados combinados com ela.Sera que isso é regra ?

Veja a situação aqui do Tiny Types como gerou um contrasenso ao seu uso, será que temos uma regra ou isso decorre de outras observações

This message was edited 1 time. Last update was at 30/07/2009 07:41:32


Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven
[WWW]
bKn
Java Ninja

Membro desde: 07/04/2009 15:22:18
Mensagens: 288
Offline

Onde você quer chegar? Mal da pra entender seus posts, leio e não sei se é uma pergunta ou uma afirmação.
Juk
JavaChild
[Avatar]

Membro desde: 14/07/2006 18:09:33
Mensagens: 104
Offline

bKn wrote:Onde você quer chegar? Mal da pra entender seus posts, leio e não sei se é uma pergunta ou uma afirmação.

Fato! Não consigo entender nada dos posts dele!

Meu blog: http://blogdojuk.blogspot.com
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Marcio Duran wrote:Agora eu pergunto, como achar o ponto certo ao uso dessas coleções para determinadas parte de seu Framework de sua Arquitetura, e que Design Pattern iria melhor prover resultados combinados com ela. Sera que isso é regra ?


Primeiro, é saber qual problema que você tem e o que solução precisa ter para resolvê-lo. Isso tanto em níveis de código, quanto de design, e até na concepção, é comum um cliente só saber que ele tem um desconforto que ele quer resolver, mas não sabe as causas dele. Aí entram as consultorias para ajudá-lo.

Segundo, é leitura para conhecer as possíveis soluções, ou pelo menos ouvir falar delas. O que canso de ver é gente subestimando o Javadoc das APIs do Java.


Sobre usar Design Patterns: Experiência

e o que a falta de experiência faz nesses casos:

RT @AkitaOnRails Design Patterns considered Harmful (for newbies) http://blog.jovan-s.com/2009/07/29/do-not-use-design-patterns-upfront/
http://c2.com/cgi/wiki?DesignPatternsConsideredHarmful
http://developers.slashdot.org/comments.pl?sid=33602&cid=3636102

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

Bruno Laturner wrote:Os critérios que ele fala são quando você dá um peso maior à uma característica específica que a implementação provê.

No caso de Lists, o ArrayList tem a melhor performance para selecionar aleatóriamente um elemento, LinkedList é a melhor opção se você for trabalhar pesadamente com inserções no começo ou no final da lista, mas ela é ruim com acessos aleatórios. Vector utilizaria se precisasse de sincronização na lista (ou Collections.synchronizedList). Queues para FIFO, Stacks para LIFO...

Maps e Sets também podemos usar, mas tem usos específicos completamente diferentes.

Teoria, performance, tempo de processador, gasto de memória, propósito, todos são critérios a se considerar.


E depois dizem que otimização permatura é a raiz de todo o mal (balela). A escolha de qual implementação usar para um Lsit ou um Set e até se usar List ou Collection é vital.

só um adendo : LinkedList não é só melhor para inserções no inicio e no final. ele é bom para inserções normais (add) melhor que arraylist.
É raro, excepto em algum algoritmo muito especial ( como sorting) que faça acesso aleatório à lista. E nesse caso LinkedList sempre ganha porque normalmente o que vc quer fazer é adicionar um monte de objetos e depois iterá-los. É aqui que LinkedList é melhor.
Só existe um caso em que ArrayList é preferivel (tirando fora o acesso aleatorio) : quando vc sabe quantos elementos a lista vai ter.

Este codiog


é uma má prática.
Se vc sabe quantos elementos vai ter , use


Se vc não sabe , use LinkeList.

Um caso particular de saber quantos elementos ha é a copia de collecções, por exemplo



Usar ArrayList por padrão é errado. Com as opções que temos hoje em dia, é preciso saber o que estamos fazendo.
Este é um exemplo de que otimização permantura não é problema quando é OO.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
ccaneta
JavaBaby
[Avatar]

Membro desde: 26/03/2006 20:30:54
Mensagens: 97
Offline

Eu sou mais um ArrayList em cenarios de alto perfomance....

Marcio Duran
GUJ Master
[Avatar]

Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline

bKn wrote:Onde você quer chegar? Mal da pra entender seus posts, leio e não sei se é uma pergunta ou uma afirmação.


"Este é um exemplo de que otimização permantura não é problema quando é OO", concordo plenamente com a colocação do Sergio Taborda.

E acredito que linguagens tenha comportamento estratégicos com determinados Design Pattern e no que se refere também ao uso de suas regras, isso pode variar no contexto do FrameWork ou Arquitetura orientada ao Domínio ou Arquitetura orientado a Dados.

This message was edited 4 times. Last update was at 30/07/2009 09:10:25


Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven
[WWW]
Marcio Duran
GUJ Master
[Avatar]

Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline

ccaneta wrote:Eu sou mais um ArrayList em cenarios de alto perfomance....


Mas o que vem a ser cenários de alta performance, isso se reflete para que padrões de projetos ?

Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven
[WWW]
ccaneta
JavaBaby
[Avatar]

Membro desde: 26/03/2006 20:30:54
Mensagens: 97
Offline

Marcio Duran wrote:

Mas o que vem a ser cenários de alta performance, isso se reflete para que padrões de projetos ?



Fala ai Marciao,

Entao Projetos de alta Perfomance sao aquelas situaçoes em que temos muita pouca memoria disponivel e precisamos de perfomance extrema, e qualquer otimizaçao q possa ser feita para evitar acessos de IO ou mais objetos na HEAP e mais que necessaria.

Como vc ja deve ter vivenciado nos clientes de mercado, as vezes a carga de usuarios referente junto com a má arquitetura projetada para aquela aplicaçao num servidor, podem virar uma verdadeira bomba atomica que ninguem sabe onde arrumar. No final isso vira o famoso Patinho feio!!

por isso, as vezes temos abrir mao de um bom design e projetarmos somente o extremo necessario.

abraçaoooo

Rubem Azenha
GUJ Master
[Avatar]

Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline

sergiotaborda wrote:
E depois dizem que otimização permatura é a raiz de todo o mal (balela). A escolha de qual implementação usar para um Lsit ou um Set e até se usar List ou Collection é vital.



Mas você pegaria um projeto legado e sairia indiscriminadamente trocando as ArrayLists por LinkedList?



Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
[WWW]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Rubem Azenha wrote:
sergiotaborda wrote:
E depois dizem que otimização permatura é a raiz de todo o mal (balela). A escolha de qual implementação usar para um Lsit ou um Set e até se usar List ou Collection é vital.


Mas você pegaria um projeto legado e sairia indiscriminadamente trocando as ArrayLists por LinkedList?


Heh, um problema de pegar esses legados é que tem sempre um que inventa de fazer coerção forçada de List para Vector(ou pior, só usar Vector), e quando você quer mudar a implementação, lá vem um ClassCastException.

Se realmente tivesse programado voltado para interfaces, poderia mudar as implementações de boa.

This message was edited 2 times. Last update was at 30/07/2009 09:44:59


A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team