Namespace (.NET) e Package (Java)

Julho 29, 2008 at 5:00 am (C#, Java, Programação) (, , , , , , , )

À medida que um programa cresce, temos alguns problemas como por exemplo: muito código é mais difícil de entender e manter; mais código normalmente significa mais nomes, mais dados nomeados, mais métodos nomeados e mais classes nomeadas. à medida que o número de nomes aumenta, aumentam também as chances da compilação do projeto falhar porque dois ou mais nomes estão em conflito.

Antigamente, os programadores tentavam resolver o conflito pré-fixando os nomes com algum tipo de qualificador. Essa solução não é boa porque não é escalável, os nomes tornam-se maiores e você gasta menos tempo escrevendo o software e mais tempo digitando e lendo e relendo nomes longos e incompreensíveis.

Para resolver este problema, tanto no .NET quanto no Java, podemos criar um “contêiner” nomeado, desta forma duas classes com o mesmo nome não serão confundidas entre si se elas estiverem em “contêiners” diferentes. É uma boa prática definir todas as suas classes em “contêiners”.

Os contêiners podem ser utilizados tanto no .NET quanto no Java, no .NET chamamos de “namespaces” e no Java chamamos de “packages” (pacotes).

Conceitualmente não existem diferenças entre as duas linguagens, porém, sintaticamente existem diferenças, mas nada que não seja de fácil assimilação. Veja:

  • Em Java, um package representa fisicamente uma pasta (ou diretório para os puristas);
  • Em .NET um namespace não está relacionado a uma pasta. É possível ter uma pasta com um nome e dentro desta pasta, classes que pertençam a um namespace com outro nome, ou ainda, em uma pasta é possível existirem classes com namespaces diferente.  

Exemplo .NET:

namespace Financeiro
{
     class Calculo
     {
           ……
     }
}

namespace Estoque
{
     class Calculo
     {
           ……
     }
}

Exemplo Java:

package br.com.meusistema.financeiro;
public class calculo {
     …….
}

package br.com.meusistema.estoque;
public class calculo {
     …….
}

Nos dois exemplos acima (.NET e Java), conseguimos ter duas classes com o mesmo nome, porém em contêiners diferentes dentro do mesmo sistema.

.NET
     Financeiro.calculo
     Estoque.calculo

Java
    br.com.meusistema.financeiro.calculo
    br.com.meusistema.estoque.calculo

Comente