Modularidade com Java 9 – Parte 1

Neste primeiro momento vamos falar sobre a motivação principal funcionalidade que será liberada no Java 9 que é o sistema de módulos chamado Project Jigsaw. O nome já diz tudo, Jigsaw em inglês significa Quebra-cabeça e essa é a ideia do Projeto!

Este texto é a primeira parte de um conjunto de publicações das anotações dos meus estudos sobre as novidades do Java 9. Vamos lá!

Motivação

A linguagem Java até o momento possui alguns modificadores de acesso que são utilizados para definir a visibilidade dos componentes que são public, protected, private e package. Quando desejamos desenvolver uma biblioteca que será disponibilizada via .jar precisamos compartilhar alguns vários componentes para todos e muito provavelmente precisamos reutilizar alguns destes componentes internamente entre os pacotes do nosso próprio código. Para isso nós precisamos definir nossa classe e métodos com o modificador de acesso public, já que nenhum dos outros modificadores permite este comportamento..

O problema é que desta forma estamos compartilhando com todos alguns artefatos que deveriam fazer sentido apenas dentro do módulo mas que precisaram ser públicos para permitir a comunicação entre pacotes. Isso afetou inclusive a própria plataforma que teve de expor as classes de implementação interna do JDK e que são utilizadas para construção de ferramentas como a objenesis que tem a finalidade de criar objetos sem invocar o construtor por meio de uma classe chamada sun.misc.Unsafe.

Embora a utilização de classes do pacotes sun.* não seja recomendada e Unsafe tenha sido projetada como um singleton de construtor privado e acessível via um método de acesso que verifica até o ClassLoader que está chamando o método, o pessoal consegue burlar este mecanismo de segurança aplicado ao singleton via reflection!

O código acima, em geral, define a visibilidade à um atributo privado da classe Unsafe chamado theUnsafe que é a referência singleton da classe! Esta classe permite realizar outras coisas bastante “estranhas” como por exemplo, lançar exceções verificadas em um método sem a necessidade de declarar a exceção, até coisas mais perigosas como atuar diretamente na alocação de memória nativa!

Sendo assim, o JDK 9 irá incluir um novo elemento na linguagem, que são os módulos, que vai expandir o entendimento da visibilidade ‘estática’ public em três situações:

  • público para todos
  • públic para módulos específicos
  • público apenas dentro do módulo.

Dessa forma o operador public não significa mais que sua classe estará acessível para toda JVM! Esta encapsulação forte é a possibilidade de um componente declarar quais dos seus tipos públicos serão acessíveis para outros componentes e quais não. Ou seja, o desenvolvedor não será capaz nem ao menos de importar uma classe de um pacote que não seja exportado, causando erro de compilação.

Esta funcionalidade irá beneficiar, além da própria implementação da plataforma Java que irá poder ocultar componentes e utilizá-los internamente sem preocupação, os desenvolvedores de aplicações, bibliotecas.

Ainda sobre a acessibilidade, a API de reflexão também irá respeitar as regras da imposta pelo sistema de módulos. As operações de reflexão irão realizar as mesmas checagens realizadas pelo compilador em tempo de execução. Ou seja, ao chamar métodos da API como o setAcessible(true) em um objeto qualquer, será verificado se a classe do objeto está em um módulo diferente e se o pacote que define a classe foi exportado para o módulo em questão. Com isso, situações de acesso indevido de objetos como a sun.misc.Unsafe não devem mais ocorrer.

Considerações finais

Vimos que alguns problemas enfrentados no encapsulamento de componentes no Java e como o Java pretende tratar esta situação com o uso do sistema de módulos introduzido no JDK 9. Nos próximos posts será descrito outros assuntos relacionados, entre eles:

  • Resolução de módulos e Grafo de módulos
  • Legibilidade e Acessibilidade Implícita de Componentes
  • Detalhes da sintaxe de um módulo.

Se você gostou, deixe um comentário e compartilhe com seus amigos. Até a próxima.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: