segunda-feira, 29 de junho de 2009

Download do Netbeans 6.7


Foi liberada a versão final do Netbeans 6.7 para download. Para saber um pouco mais sobre todas as novas funcionalidades dessa versão acesse essa página.
Ainda não pude relizar nenhum teste nessa versão, mas em breve algum integrante do blog deve postar suas conclusões.

Até a próxima.

quarta-feira, 24 de junho de 2009

IDE Eclipse

O Lançamento do Eclipse Galileo está prometido para hoje 24.06.09.

Dentre outras coisas a atualização do JUnit para o 4.5.

Outra coisa são as melhorias para quem usa MAC OS X.

terça-feira, 23 de junho de 2009

Site com Treinamentos gravados

Mais um site daqueles que achei que todo mundo conhece.

http://www.treinatom.com.br/pt/cafe-com-o-tom

Nesse site tem alguns treinamentos (palestras) gratuitos e online.

Ao final do evento eles disponibilizam o evento gravado para download.

Palestras interessantes como:
Flex e Java
GIT
Scrum
e etc.

sexta-feira, 19 de junho de 2009

Site sobre PMI e Gerencia de Projetos

Talvez mais um site que todos já devem conhecer, mas não custa apresentar o dono do site:

Ricardo Vargas | MSc, IPMA-B, PMP
Especialista em gerenciamento de projetos, riscos e portefólio. É autor de dez livros em português e inglês. Consultor em projetos, administra um portfólio de investimentos gerenciados superior a US$18 bilhões mundialmente. É Chairman do Project Management Institute (PMI), maior associação do mundo em gerenciamento de projetos.


http://www.ricardo-vargas.com/


Vale a pena o acesso la tem muito material sobre gerência de projeto. Ele faz um podcast semanal bem interessante, alem das apresentações e entrevistas disponíveis para download.

quarta-feira, 17 de junho de 2009

Fusion Tables: Google lança oficialmente um banco de dados

A google lançou oficialmente um banco de dados "nas nuvens". Essa notícia da IDGNow explica melhor como foi esse lançamento. Como não poderia deixar de ser, a google não lança simplesmente um produto, ela lança uma forma de dominar o mercado:

"A idéia é driblar as limitações dos bancos de dados tradicionais e simplificar as operações de relacionamento de informações. O Google afirmou que, com a implementação em cloud computing, simplificará também a possibilidade de colaboração em grupos de dados."

Não que eu seja a favor de nenhum tipo de discórdia entre rivais, mas a notícia ainda traz o texto:

"Se você é a IBM, a Microsoft e Oracle, seu pior pesadelo está vivo. O Google irá criar espaços de dados automaticamente e implementar novos tipos de pesquisas."

Apesar dessa expectativa toda, o produto ainda é um embrião, está apenas no comecinho. Quem se interessou pode acessar esse tour da própria Google e ter uma prévia.

terça-feira, 16 de junho de 2009

Idiomas Java

Aproveitando a abordagem de Mário sobre padrões de projeto, vou falar um pouco sobre idiomas. Um idioma é um conjunto de práticas, assim como padrões de projeto, mas específico de uma linguagem de programação. Ou seja, existe para Java, C++, C#, PHP... Estranhamente não é um princípio muito conhecido(eu pessoalmente nunca tinha ouvido falar até fazer uma pós graduação). Se você, por exemplo, buscar no google "idiomas java" vai se deparar com links relativos a cursos de inglês, dúvidas de gramáticas e outros resultados irrelevantes. Nada relacionado a boas práticas de desenvolvimento.
Para clarear as idéias(ou ideias de acordo com as novas regras gramaticais) vou apresentar um exemplo conhecido como "Double Brace Initialization" ou Inicialização Dupla Chave.
Vejam o código abaixo:

private Set JaliVE = new TreeSet(){{
add("Fábio");
add("Mário");
add("Diego");
add("Ian");
}};


Repararam nas duas chaves? Apesar de não ser muito comum, essa abordagem é uma maneira bastante conveniente de inicializar coleções em Java.

Espero que tenham gostado. Em breve postarei mais sobre esse interessante assunto.

domingo, 14 de junho de 2009

Padrões de Projeto: Observer + Aspectos

Apresentamos o Padrão de Projeto Observer em 2 versões. Implementando todas as classes do padrão ou implementando com o uso das classes da API. Nos dois casos existem problemas para o reuso do código.
Para implementar o Padrão de Projeto podemos definir uma interface ou uma classe abstrata para o Subject. A classe concreta nos 2 casos vai ter "código extra" que não faz parte do negócio. Com o uso da interface Subject a classe Concreta deve implementar os métodos do padrão de projeto. Se utilizar a classe abstrata Suject a classe Concreta deve estender dessa classe impedindo que se faça reuso da classe por meio de herança (Java não permite herança múltipla).



/**
* Estendendo de uma classe abstrata Subject.
* Em vermelho código adicionado em virtude do padrão.
*
*/
public class ConcreteSubject extends Subject {

private int estado = 0;

public int getEstado() {
return estado;
}

public void setEstado(int estado) {
this.estado = estado;
this.notifyObservers(estado);
}

}


Isso levanta uma discussão quanto ao uso desse padrão e a possibilidade de reuso das classes. Uma outra forma de implementar o padrão é utilizando aspectos, dessa maneira a classe a ser observada não ficaria com nenhum código estranho.



/**
* Utilizando Aspectos.
* O padrão é implementado sem interferir diretamente na classe ConcreteSubject.
*/
public class ConcreteSubject {
private int estado = 0;

public int getEstado() {
return estado;
}

public void setEstado(int estado) {
this.estado = estado;
}
}


Faça o download da versão utilizando Aspectos: PadraoObserverImpl_3.zip

No post anterior temos download de 2 formas de implementação do padrão e um exemplo de aplicação do padrão.

quinta-feira, 11 de junho de 2009

Padrões de Projeto: Observer

Os Padrões de Projeto são soluções genéricas para problemas recorrentes, “cada padrão descreve um problema no nosso ambiente e o cerne da solução, de tal forma que você possa usar essa solução mais de um milhão de vezes, sem nunca fazê-lo da mesma maneira”(Alexander, C. et al. apud Gamma, E. et al., 2000).

Ao utilizar um padrão de projeto na solução de um problema no desenvolvimento do software significa que optamos por uma solução de boa qualidade e já testada.

O padrão Observer é também conhecido como Publish-Subscribe, Event Generator ou Dependents (Salve, J.,2008). Esse padrão é endereçado a família de problemas que tem a intenção de “definir uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda de estado todos os seus dependentes são notificados e atualizados automaticamente” (Gamma, E. et al., 2000 ).

O padrão Observer que é aplicável quando a alteração no estado de um objeto implica em notificar ou alterar outros objetos. Além disso, os objetos que vão sofrer alteração ou ser notificados não são conhecidos pelo objeto que sofreu a mudança, conseguindo assim um fraco acoplamento.

No padrão Observer temos um objeto que será observado, chamado de Subject. Na API Java temos as classes java.util.Observable e java.swing.EventSource são implementações do Subject. Temos também o objeto que observa e é notificado chamado de Observer, em Java as classes que o implementam são java.util.Observer e o java.swing.Listener. Java usa o padrão na API de duas formas diferentes (Sauvé, J.,2006).



Download de uma implementação do Observer completa: PadraoObserverImpl_1.zip
Download de uma implementação do Observer com uso das classes da API java.util.Observable e java.util.Observer : PadraoObserverImpl_2.zip

Para exemplificar o uso do padrão de projeto Observer definimos uma aplicação que vamos chamar de “Bolsa de Valores”. Essa aplicação obtém o índice da bolsa de valores e exibe em formato texto ou em um gráfico. (Exemplo completo disponível no artigo download)

Download da implementação do Observer aplicado ao exemplo da Bolsa de Valores: PadroObserverBolsa.zip




Considerações:

O padrão atende as expectativas reduzindo bastante o acoplamento entre as abstrações. No entanto, em java, quando o ConcreteSubject precisa estender a classe Subject não pode estender de outra classe dificultando sua reutilização.

Na solução do padrão Observer apresentada existe apenas um método de atualização onde devemos passar o Subject ou o estado do Subject. Isso torna a missão de descobrir quem disparou a mudança no estado uma tarefa árdua (Sauvé, J., 2006).

A solução de proposta utilizando o Listner (equivalente ao Observer) é implementa pelo Java Swing. Permite a criação de vários eventos que são disparados executando os métodos associados. Ela também facilita a descoberta da fonte do evento. Conseguimos obter um código mais claro e os observares são registrados de forma mais específicada (Sauvé, J., 2006).

As duas implementações do padrão Observer citadas tem problemas pois tanto o ConcreteSubject quanto o ConcreteObserver não estão apenas com seus métodos de “negócio”. É necessário inserir código para tratar o problema da notificação dos observadores não sendo possível a reutilização direta desses objetos.

Espero ter contribuído para seus estudos sobre padrões de projeto.