Rodrigo Kumpera Weblog

Meus achados sobre tecnologia

Expressando relacionamentos entre objetos como uma característica da linguagem

January 31st, 2007 · 3 Comments

Dois pesquisadores, Gavin Bierman (Microsoft Research) e Alisdair Wren (University of Cambridge Computer Laboratory) propoem no artigo First-class relationships in an object-oriented language uma extensão de Java que permite expressar relacionamentos atraves de construções de primeira classe da linguagem.

A idéia é bem interessante pois permite que relacionamentos entre tipos que temos na modelagem conceitual (UML ou mesmo papel) sejam traduzidos de forma direta para programação. Da forma que eles criaram, o semântica fica muito mais clara e permite que o sistema seja mais claro e seguro.

O sistema de tipos possui ’soundness’ (alguém sabe o termo em portugues para isso?), ou seja, é provado que ele garante resultados corretos ou condições de erro bem definidas durante a execução. A vantagem dessa propriedade é facil de entender, quando comparamos Java com C++, a primeira garante em runtime as propriedades expressas estaticamente, a outra não possui qualquer garantia nesse sentido.

As partes que achei mais interessantes são que os relacionamentos poder possuir valores, assim como relações bidirecionais que funcionam – quem nunca usou hibernate e ficou frustrado com o fato de ter de atualizar os dois lados? O artigo é cheio de giberish científico, principalmente na parte da modelagem matemática da linguagem e do sistema de tipos. Mas se ignorado isso e toda parte dos teoremas que provam se tratar de um ’sound type system’ o artigo é uma leitura muito boa.

Tags: Programming · java

3 responses so far ↓

  • 1 Tiago Silveira // Feb 1, 2007 at 6:55 am

    Muito legal… o chato é ter os relacionamentos declarados fora de cada tipo. Uma das vantagens de usar OO é poder ver “tudo” que é acessível a partir de um tipo olhando a definição dele.

  • 2 Paulo Silveira // Feb 5, 2007 at 1:28 am

    Oi Kumpera!

    Nao entendi a parte do hibernate. Voce nao quis dizer o contrario?

  • 3 kumpera // Feb 5, 2007 at 7:44 am

    Paulo, eu me refiro ao fato de quando se mapeia um relacionamento bidirecional e quando alteramos um lado do relacionamento, o outro precisa também e manualmente.
    .
    Não seria muito mais simples se fosse possivel expressar relacionamentos bidirecionais de forma consistente, e sem precisar repetir a mesma operação nos dois lados?

Leave a Comment