quando estou desenvolvendo um programa, faco varias classes dentro de um pacote (no netbeans por ex), que evidentemente se comunicam umas com as outras. como saber em qual classe devo colocar um metodo que utilize variaveis de instancia de uma determinada classe? faz diferenca em qual classe colocar, sendo que fazem parte do mesmo pacote?
Pacotes
6 Respostas
Você está acessando tudo diretamente, sem encapsulamento? Que falta de vergonha… Deixar variáveis de instância públicas (ou então “package-private”, ou seja, acessíveis por classes do mesmo pacote).
De qualquer forma:
- Variáveis de instância devem ser, de preferência, privadas (ou talvez “protected” se você tenciona usá-las em subclasses)
- Se você precisa expor uma variável de instância, crie os acessores (ou seja, getters e setters)
- Note que mesmo assim nem sempre é adequado escrever getters e setters cegamente (embora a IDE usualmente já tenha um atalho que gere esses 2 métodos automaticamente, he he he). Depende do que você está fazendo.
Isso vai depender muita sua logica. Geralmente se adota um design pattern, aonde cada camada da sua estrutura tem uma função bem definida.
ex::
VendasBO.java vai concentrar todos métodos para realizar uma venda.
ProdutoDAO.java vai ser responsável pelo crud de produtos (incluir, alterar,…)
Quanto aos pacotes, ele servem para organizar as coisas, portanto não economize o seu uso. Vc vai lembrar disso quando precisar dar manutenção no seu código!
Abs!
Uma coisa que me incomoda muito no Java é que quando você não especifica se algo é public, private ou protected, o padrão é “package-private”, que é uma bizarrice que só existe no Java. No .NET não existe isso, nem no C++.
Porque isso me incomoda muito, você não vai ver normalmente nos meus programas eu usando uma variável “package-private” (ou seja, algo que não tem definição de “public”, “private” ou “protected”. )
entanglement
Essa é uma confusão comum entre os desenvolvedores Java em pensar que “default” e “protected”.
veja que o modificador de acesso “default” (não colocar nada) é diferente do “protected” em um ponto:
o protected permite acesso aos membros da classe através do extends, já o default não.
Então se vc quiser realmente que algum membro ou a classe seja “package-private” deverá usar o modificador default (sem nada).
=]
entanglementEssa é uma confusão comum entre os desenvolvedores Java em pensar que “default” e “protected”.
veja que o modificador de acesso “default” (não colocar nada) é diferente do “protected” em um ponto:
o protected permite acesso aos membros da classe através do
extends, já o default não.Então se vc quiser realmente que algum membro ou a classe seja “package-private” deverá usar o modificador default (sem nada).
=]
Não é essa a diferença. O default não permite o acesso aos membros filhos que estejam em outro pacote. Como o entaglement ressaltou, no Java, todos os modificadores dão acesso ao mesmo pacote, EXCETO, o private.
Uma coisa que me incomoda muito no Java é que quando você não especifica se algo é public, private ou protected, o padrão é “package-private”, que é uma bizarrice que só existe no Java. No .NET não existe isso, nem no C++.Porque isso me incomoda muito, você não vai ver normalmente nos meus programas eu usando uma variável “package-private” (ou seja, algo que não tem definição de “public”, “private” ou “protected”. )
Faz mais sentido o similar do .net, internal, que ao invés de registringir ao pacote retringe ao binário todo (ao .jar).