segunda-feira, 4 de maio de 2009

Agile Weekend 2009

Fiz um post no blog do TáSafo sobre o evento Porto Alegre Agile Weekend 2009, que
aconteceu nos dias 25 e 26 de abril em Porto Alegre. Esse foi o primeiro evento que o TáSafo fez a cobertura oficial.

Nesse post eu comento as palestras e discussões que rolaram por lá de uma forma um pouco diferente.

Quem quiser pode conferir em http://tasafo.wordpress.com/2009/05/03/agile-weekend-2009-melhor-impossivel/.

quinta-feira, 30 de abril de 2009

Evento: Visão Ágil Academic Meeting 2009

É com grande prazer que nós do TaSafo! convidamos a todos para participar do primeiro evento sobre métodos ágeis do Pará, que acontecerá no dia 30 de maio de 2009. Com a presença do nosso conterrâneo Manoel Pimentel, que vai apresentar uma palestra e um workshop, esse evento vai marcar o início da participação do grupo no programa Visão Ágil Academic Leaders e uma nova fase do TaSafo. Temos muitos planos para este ano, alguns deles já estão acontecendo, como a cobertura do Porto Alegre Agile Weekend 2009 e este evento. Por tudo isso, o TaSafo! promete se destacar bastante esse ano.

O evento é gratuito. Quem tiver interesse em participar, segue o link para o nosso blog, onde vocês podem ver a programação e também se inscrever:
http://tasafo.wordpress.com/2009/04/30/evento-visao-agil-academic-meeting-2009/

terça-feira, 21 de abril de 2009

Usando as interfaces Comparable e Comparator para classificar listas

O que fazer quando queremos iterar sobre uma lista e mostrar os seus elementos em alguma ordem específica? Por exemplo, podemos querer mostrar as pessoas cadastradas no sistema por ordem alfabética. Em Java, as únicas coleções que realizam alguma classificação automaticamente são TreeMap e TreeSet. Ou seja:




Repare que mesmo que a ordem de inserção tenha sido aleatória, ao iterar sobre a coleção, o resultado são elementos em ordem alfabética. O mesmo acontece quando o tipo é alterado para Integer:



Porém, não queremos usar TreeMap porque ela perde muito em performance, então geralmente usamos a implementação ArrayList, que não é classificada, ou seja, não ordena automaticamente seus elementos. Então:




Mas não se preocupe, pois ainda podes classificar teu ArrayList (ou qualquer implementação de List). Para isso utilizamos a classe utilitária Collections.java:




Pronto, fácil assim. Repare que quando classificamos uma lista do tipo String e Integer, os elementos String ficam armazenados em ordem alfabética, e os Integer na ordem crescente. O mesmo vale para Byte, Short, Long e BigDecimal. Chamamos isso de ordem natural.

Voltemos então para a nossa suposição inicial. Queremos mostrar uma lista de pessoas ordenada por ordem alfabética. Mas, se formos tentar classificar a nossa classe Pessoa.java do mesmo modo que fizemos com nossa coleção de nomes, ocorrerá um erro de compilação:




O que acontece aqui é que a classe Pessoa não fornece nenhum mecanismo de classificação natural. Para tornar a classe Pessoa classificável, temos duas opções: implementar a interface Comparable ou a interface Comparator.

Implementando Comparable
Como o próprio nome já diz, ao implementar essa interface, tornamos a classe comparável. Para isso, devemos sobrescrever o método compareTo(), e informar qual será o critério de classificação:



O método Colletions.sort
() usa compareTo() para classificar a lista. Agora veremos o resultado disso:




Perfeito! Nossa coleção agora está ordenada do jeitinho que queríamos. Mas e se nós não pudéssemos modificar a classe Pessoa?

Implementando Comparator
Algumas vezes não temos acesso ou permissão para mudar alguma classe. É aí que entra a interface Comparator, que nos permite fornecer um critério de classificação para um classe sem ter que alterá-la. Veja o exemplo abaixo:


Assim nem tocamos em Pessoa e obtemos o mesmo resultado. A única diferença é que agora, ao classificar Pessoa, precisamos dizer qual será o Comparator utilizado:




Assim podemos criar quantos critérios quisermos para Pessoa, basta implementar Comparator em várias classes, e fornecer um critério diferente em cada uma.





Pode ser que a necessidade de classificar uma coleção seja tão pontual, que talvez criar uma nova classe só para isso possa ser desnecessário. Surge então uma boa oportunidade para criar uma classe interna anônima:



Uma dica: para ordenar de forma descendente, basta trocar os objetos de lugar no método compare(), como no exemplo anterior.

Classificar listas foi uma das muitas coisas interessantes que aprendi estudando para a certificação Java. A partir de então, já utilizei esse recurso várias vezes. Qual interface implementar dependerá do contexto de desenvolvimento da aplicação. Algumas vezes a classe a ser classificada não pode ser alterada, forçando-o a implementar Comparable. Às vezes essa classe nem pertence ao teu projeto, como uma API. Muitas vezes nem precisamos implementar nada porque já trazemos a lista do banco de dados ordenada.

Para aprender mais sobre coleções, visite o site da sun.

quarta-feira, 15 de abril de 2009

Minicurso "Introdução aos métodos ágeis de desenvolvimento de software"

Minicurso que eu e Silvana Rossy ministramos na semana de empreendedorismo no IESAM, em abril de 2007. Já faz tempo mais pode ser importante para alguém.

O minicurso foi muito bacana, fizemos algumas dinâmicas no início, para ajudar o pessoal a se soltar e para mostrar algumas dificuldades dos projetos de desenvolvimento de software. Falamos de métodos tradicionais e ágeis (Scrum e XP), mas principalmente enfatizamos um dos pontos que está presente em todas as metodologias ágeis: a comunicação.

Nos divertimos muito também com as metáforas.

sexta-feira, 26 de setembro de 2008

Palestra "Hibernate: do básico às aplicações reais"

Palestra apresentada por mim e pelo Leonardo Pessoa no Bel Jungle V (Belém-PA), em setembro de 2008.

Hibernate Bel Jungle V
View SlideShare presentation or Upload your own. (tags: beljungle java)