Archive for May, 2006

Porque C++ tem friend e struct?

Wednesday, May 24th, 2006

O Zé pergunta no blog dele e como não está funcionando no momento eu respondo aqui, espero que o trackback esteja habilitado por lá…

strutcs: Basicamente para manter compatibilidade com C. Tem que ser levado em consideração que C++ é uma linguagem multi-paradigma, é OO e Procedural, e numa linguagem procedural você vai precisar normalmente de estruturas de dados customizadas para serem manipuladas por funções.

friend: Isso é chamado de selective export, mas em C++ não é muito bem implementado. Basicamente o objeto parece uma coisa para um e outra para outro, depende do ponto de vista. Em Java podemos simular isso fazendo um objeto implementar múltiplas interfaces e fazer com que outros objetos conheçam-o por uma delas apenas.

WebDays 2006

Monday, May 22nd, 2006

O evento foi bem legal. O pessoal da DevMedia conseguiu fazer algo muito interessante com três públicos distintos e com toda a crise que a cidade passou semana passada.

Minha palestra foi a primeira e o públicou chegou até a parede. Quando chegou a vez do Urubatan tiveram que “expulsar” a galera do Delphi para pegar a sala deles também :) Ok, ok, a sala mais cheia era de .Net.

Interessante que pela primeira vez eu consegui terminar uma palestra no tempo certo. Também, eu fiz uma palestra para 45 minutos, chegando lá era pra ter 1:20 hora, o Jujo teve um problema para chegar e ainda tive que estender ela mais um pouquinho :)

No final, claro, teve encontro na sede oficial do GUJ em São Paulo.

Os slides serão passados para a organização hoje a noite, em breve devem estar online.

Project Semplice - Visual Basic for the Java Platform

Monday, May 22nd, 2006

Quem acompanha o JavaPosse lembra de Tor Norbye falando sobre sua misteriosa apresentação no JavaOne… bem o mistério foi resolvido.

O projeto Semplice traz VB6 diretamente para a JVM através de ferramentas disponíveis na suíte da Sun (i.e. Netbeans). Chamads nativas á APi do Windows e controles OCX não são suportados mas o projeto parece bastante promissor.

Antes de xingar a Sun por colocar algo “tão dummy” quanto VB na JVM pense no mar de aplicações e profissionais VB6 que estão com dificuldades para migrar para .Net. Aliás, o legado VB6 é um dos fatos mais citados por Bruce Tate no Beyond Java, o livro que ninguém leu e todo mundo xinga. Ao lado da minha equipe existem uns 20 programadores VB tentando migrar para Java. Com algo assim eles poderiam ser produtivos enquanto aprendem a plataforma.

E temos mais uma linguagem quase-oficial para a JVM. Bom, se a Sun liberar a engine de conversão para ser utilziada por outras IDEs vai ser *muito* bom, mas mesmo por enquanto parabéns ao pessoal da Sun.

RioJavaSummit: Slides Disponíveis

Thursday, May 18th, 2006

Devido à demora em disponibilizar as palestras do RioJavaSummit 2006 (sabe como é…) estou colocando o PDF aqui no site.

Avante JRuby!

Tuesday, May 16th, 2006

Se você acompanhou minha palestra no Rio Java Summit 2006 pôde ver um pouquinho do que linguagens dinâmicas podem fazer na sua aplicação. Um dos projetos mais interessantes nesta área, o JRuby, anuncia novidades. Basicamente teremos Rails na JVM em breve.

Get a Mac

Tuesday, May 16th, 2006

Ads muito bem bolados.

Agenda para Maio 2006

Tuesday, May 16th, 2006

Para quem estiver disponível, minhas próximas palestras:

Sexta-Feira, 19/05/2006 - São Paulo - DevMedia Web Days 2006

Aplicações Web em Java: Padrões, Técnicas e Arquiteturas

Os frameworks quase sempre compartilham uma infra-estrutura básica. O objetivo desta palestra é apresentar e discutir os padrões que formam esta estrutura. MVC, DAO, Command, Front Controller, Filtros, Session… os componentes fundamentais de uma aplicação web moderna. Com o conhecimento dos componentes utilizados, aprender um novo framework se torna apenas descobrir como implementar o padrão dentro dele.

Terça-Feira, 23/05/2006 - Rio de Janeiro - Unicarioca InfoWork 2006

Plataforma Java: Presente e Futuro

Java é a linguagem e plataforma que mais fez sucesso nos mundos coorporativo, acadêmico e científico nas últimas décadas. No seu décimo aniversário o mercado começa a repensar a tecnologia. O que isto significa? Java está ou não pronta para os novos tempos? Java é complexo demais? Ruby, Python, Groovy, MDA, DSL… as novas
tecnologias estão fazendo Java seguir para onde? Que futuro aguarda os profissionais Java? Estas e outras perguntas serão trabalhadas nesta sessão que traz uma visão atual e embasada em fatos sobre o que nos aguarda.

Se você for a um destes não seja tímido: vamos tomar um café e jogar conversa fora ;)

Strict POJOs

Tuesday, May 16th, 2006

Muito tem se falado em POJOs (Plain Old Java Objects), boas e más coisas. As boas coisas geralmente mencionam como é mais fácil desenvolver sem utilizar parafernalhas como EJB 2.x e sobre o poder que utilizar OO pura te dá. As coisas ruins falam sobre como a comunidade Java é formada por um bando de idiotas que acaba de descobrir que existe vida além de frameworks e dão para este conceito um nome estúpido.

Justificando a ‘abordagem POJO’, vamos tentar entender o porque do hype em cima de POJOs. Antes de mais nada vamos a uma definição:

Um POJO é um objeto java normal que não implementa nenhuma interface nem estende nenhuma classe específica de um framework.

Exemplificando, isso é um POJO:

public class Venda{

private List vendas = new ArrayList();

public void adicionarItem(Item i){
vendas.add(i);
}

}

Esta classe não depende de nenhum framework, ela lida apenas com os objetos do domínio em questão.

Mas isto não é um POJO:

public class AdicionarVendaServlet extends HttpServlet {
...
public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
venda.add(daoItens.get(req.getparameter("item"));
}
}

Porque para criar um Servlet você precisa estender uma classe do framework de Servlets.

E porque dar um nome para classes Java normais? Bem, segundo Fowler, um dos autores do termo, basicamente o termo surgiu como um vocabulário comum e cool para se referir a esta técnica. É aquela história de vocabulário comum que falamos outro dia.

Um sistema baseado em POJOs utilizando Camadas, DIP e outras técnicas para eliminar a dependência de frameworks e outras classes de infra-estrutura é bem interessante. Na revista Mundo Java deste mês há um artigo introdutório meu falando sobre como você pode aplicar POJOs no desenvolvimento do seu Domain Model, utilizando Patterns específicos.

Uma coisa que andei pensando estes dias é uma lei que restrinja ainda mais o acoplamento de POJOs na Camada de Negócios com a infra-estrutura. Taí o que eu chamo de Strict POJOs:

Um POJO só pode se relacionar diretamente com outro POJO ou com POJIs.

POJI são Plain Old java Interfaces, é o mesmo conceito de POJO aplicado a interfaces. A idéia é baseada no DIP (Dependency Inversion Principle, mais detalhes na revista) e a sua classe de infra-estrutura deve implementar uma POJI para poder ser utilizada por seu POJO. Confuso?

Exemplo:

Imagine que temos uma classe Usuario que precisa acessa o banco de dados para consultar seus grupos. Como é uma classe de negócio ela não deve nem pensar em encostar em hibernate, JDBC, JDO ou o que estiver utilizando. Normalmente alguém faria um DAO acessar o banco de dados e a classe de negócios utilizar o DAO. Bem, DAO é uma classe de infra-estrutura e para aplicarmos nosso conceito de Strict POJOs o Usuario não pode conversar com ela. E agora?

Abstraímos o banco de dados seguindo o padrão Repository:
public interface RepositorioGrupos{
public List listarGrupos(Usuario u);
}

Esta interface é uma POJI. Agora faremos nosso usuário lidar com esta interface ao invés de com o DAO:

public class Usuario{
private RepositorioGrupos repositorio=null;

/** Checa se o usuário pertence a um dado grupo */
public boolean pertenceA(Grupo g){
List meusGrupos = repositorio.listarGrupos(this);
boolean pertence = meusGrupos.contains(grupo);
return pertence;
}

}

E faremos o DAO implementar a interface RepositorioGrupos (essa parte foca para você).

A vantagem desta abordagem é separar completamente a infra-estrutura da sua aplicação. Se você trabalha com um processo onde se produzem diagramas antes de codificar, isto permite que você crie diagramas muito mais reais, já que neles você não precisa se preocupar com bancos de dados e etc. O uso de um framework como Spring ou Java EE 5.0 ajuda muito já que você não precisaria nem mesmo isntanciar seus objetos.

A idéia básica é que você deve manter seus objetos de negócio isolados de tudo que não seja regra de negócio.

Bom, espero que gostem do artigo ;)

NOTA: Os arquivos estarão disponíveis até o fim da semana. Deixe seu email aqui nos comentários e você será avisado.

Saindo da Inércia Comunitária 1

Friday, May 12th, 2006

Faz um tempo eu falei aqui sobre como a comunidade Java brasileira é enorme e apática para coisas que realmente fazem a diferença (que não são berrar e vestir bandeiras no JavaOne). Uma das coisas que falta hoje é um grupo real de pessoas produzindo conteúdo original, não traduzido, em português.

Então, iniciativas como a do Bruno Carvalho de montar um blog e compartilhar o que for descobrindo com pessoas diferentes devem ser seguidas.

RioJavaSummit 2006

Tuesday, May 9th, 2006

Bom, o evento foi muito legal. Scott Ambler e Gavin King msotraram porque são duas das pessoas mais importantes no cenário atual, além de diversas outras palestras e da sempre importante interação entre pessoas.

Claro que houveram problemas, mas enquanto um evento for organizado por programadores não dá para acreditar que será perfeito. O que importa é que com um orçamento mais de dez vezes menor do que um semelhante fizemos um grande dia de troca de conhecimentos e experiências. E mais virão!

Meus slides e outros estarão online em breve, aguarde.

Salao