[quote=ViniGodoy][quote=sergiotaborda]Porque o java é desenhado para hierarquia de pacotes e a herança pode ser cross-package. O pacote é um membro importante do java porque é usado para várias coisas na jvm. Segurança, entre elas. O Package é um conjunto de Class.
Não faltam modificadores no java, o que falta é o conceito de pacote filho. normalmente criamos o pacote X e depois o pacote X.Y onde Y serve para alguma coisa particular de X, por exemplo, X é interfaces e Y é implementações. Este vicio é levou a considerar que o java é imcompleto, quando na realidade é esta prática que está errada. Apenas classes da API que podem ser usadas fora do pacote devem ser publicas. O resto deve ser tudo package. É por isso que o package é o default, porque é assim que deveria ser feito. [/quote]
Claro, siga essa recomendação e você acabará com pacotes enormes, cheios de classes, o que vai contra qualquer prática sensata de modelagem.
[/quote]
Não vejo onde está o problema disso. Nem vejo que isso seja um problema de modelagem. Organização de pacotes está longe de ser um problema de modelagem a menos que vc siga o padrão proposto pelo Java ( eu disse java, não sun).
Ao construir uma API grande como a do java é necessário tem em consideração que existem classes escondidas que vc não vê. A API publica é publica exatamente porque é que vc precisa usar, mas exste a API privada que tem apenas detalhes de implementação. Esta deve ser “secreta”.
Eu nunca vi muita utilidade na visibilidade padrão, até que comecei a criar API grandes como o MiddleHeaven. Existem coisas que vc precisa fazer mas que vc não quer publicar (até porque vc quer minimiar a superficie da API). Então o nivel default é realmente util na prática.
Em pacotes de negocio obviamente terá pouca utilidade já que os pacotes de dominio são os mais publicos que ha (afinal eles representam conceitos que existem na realidade e não detalhes de implementação).
Ter muitas classes num pacote não significa desordem. É esse conceito errado que leva as pessoas a criarem muitos subpacotes idiotas. Eu odeio especialmente o pacote impl. Um verdadeiro cancer. Não ha razão logica para segregar as implementações para outro pacote.
A regra base é muito simples ( tudo é private, apenas é aumentada a visibilidade quando necessário) mas - quase - ninguém a usa. e depois culpam o java …