Organizando seu código Classes, pacotes, modificadores. Padrões.
-
Upload
thereza-bastos-angelim -
Category
Documents
-
view
216 -
download
0
Transcript of Organizando seu código Classes, pacotes, modificadores. Padrões.
Organizando seu códigoClasses, pacotes, modificadores.
Padrões
Davi Pires {[email protected]}
Revisão
• Classes• Atributos• Métodos• Construtores• Palavras-chave
– class, void, return, new, this, null
Davi Pires {[email protected]}
Pacotes
• Permitem organizar um projeto com diversas classes de forma mais intuitiva.
docentes disciplinas
Professor
CadastroProfessor
RepositorioProfessor
ProfessorAdjunto
Disciplina
CadastroDisciplina
RepositorioDisciplina
DisciplinaDaPos
Davi Pires {[email protected]}
Pacotes
• Não há sub-pacotes. Mas podemos ligar pacotes “semanticamente”– Usando o nome.– Servidor projeto.rede
projeto.rede projeto.rede.servidor
Conexao
ConexaoHandler
ConexaoFinalizer
AbstractProtocol
Servidor
ServidorHTTP
ServidorFTP
ServidorIRC
redeprojetoservidorredeprojeto .,.. servidorredeprojetoredeprojeto ..,.
Davi Pires {[email protected]}
Porque usar pacotes?
• Isola declarações de nomes.
• Ligação semântica entre as classes.
• Ligação entre a classes e o modo como elas estão fisicamente armazenadas.– Pacotes e estrutura
de diretórios
projetorede
servidor
ConexaoConexaoHandlerConexaoFinalizerAbstractProtocol
ServidorServidorHTTPServidorFTPServidorIRC
Davi Pires {[email protected]}
Ligando classes e pacotes
• Cláusula package:– Se estiver presente, deve ser a primeira
cláusula num arquivo.
projeto.rede
Conexao
ConexaoHandler
ConexaoFinalizer
AbstractProtocol
package projeto.rede;
class Conexao { AbstractProtocol protocol; // ...}
Davi Pires {[email protected]}
Como ligar pacotes?
• Cláusula import– Usada para importar para dentro do pacote
atual as definições de classes contidas em outro pacote.
projeto.rede projeto.rede.servidor
Conexao
ConexaoHandler
ConexaoFinalizer
AbstractProtocol
Servidor
ServidorHTTP
ServidorFTP
ServidorIRC
package projeto.rede.servidor;
class Servidor { Conexao conexao; // ...}
import projeto.rede.Conexao;
Davi Pires {[email protected]}
Cláusula import
• Versão genérica:– import projeto.rede.*;– Não carrega todas as classes. Somente
aquelas que você precisa.
projeto.rede projeto.rede.servidor
Conexao
ConexaoHandler
ConexaoFinalizer
AbstractProtocol
Servidor
ServidorHTTP
ServidorFTP
ServidorIRC
package projeto.rede.servidor;
import projeto.rede.*;
class Servidor { Conexao conexao; ConexaoHandler handler; // ...}
Davi Pires {[email protected]}
Pacotes
• Fundamentais em projetos grandes.– Organização das classes.– Divisão de tarefas dentro da equipe.
• Melhora a geração de documentação.• Ajuda a implantação do tópico que
veremos no slide seguinte...
Davi Pires {[email protected]}
Controle de Acesso
• Como controlar a “visibilidade” de um atributo?
• Porque controlar a visibilidade de um atributo?
Davi Pires {[email protected]}
Modificadores de Acesso
• Atributos– private – só é visto dentro da classe.– public – acessíveis de qualquer outra
parte do projeto.– default – visibilidade de pacote.
• Métodos– private – auxiliares; visíveis só na classe.– public – acessíveis de qualquer outra
parte do projeto.– default – visibilidade de pacote.
Davi Pires {[email protected]}
Modificadores de Acesso
• Classes– public – acessível de qualquer parte.– private – acessível apenas no arquivo.– default – visibilidade de pacote.
• Pacotes– são sempre visíveis.
Davi Pires {[email protected]}
Modificadores de Acesso
• Tentando acessar conteúdo private– PrivateExample.java– PrivateAcessor.java
• Tente compilar ambas as classes.– O que acontece?
Davi Pires {[email protected]}
Corrigindo o erro...
• Será uma boa tornar o atributo public?– Resposta: NÃO!
• Razões– E se mudarmos o tipo ou a forma de
armazenamento do atributo?– E se queremos ele read-only?– Ou write-only?
Davi Pires {[email protected]}
Encapsulamento
• Solução: métodos get/set public!– Torne o atributo private– Crie métodos public que permitam acessar
o valor da variável, ou alterá-lo.
Davi Pires {[email protected]}
Exemplos
// típico método getprivate int atributoSecreto;
public int getAtributoSecreto( ) { return atributoSecreto;}
// típico método setprivate int atributoSecreto;
public void getAtributoSecreto (int parametro ) { atributoSecreto = parametro;}
Davi Pires {[email protected]}
Encapsulamento
• Solução largamente encontrada em diversas aplicações (reais!).
• Tornando os atributos private você concentra os erros nos métodos public.– Facilita a detecção dos erros.
Davi Pires {[email protected]}
Encapsulamento
• Exercício:– Altere os arquivos PrivateExample.java e
PrivateAcessor.java.– Aplique encapsulamento nos campos de
PrivateExample e altere o código em PrivateAcessor para que ele funcione com essas alterações.
Davi Pires {[email protected]}
Padrão de Codificação
• Padrão de codificação Java.• Variáveis e Métodos:
– 1ª palavra minúscula; palavras subjacentes maiúsculas.
• Classes– Sem underlines; todas palavras
começando com maiúscula.• Pacotes
– letras minúsculas.
Davi Pires {[email protected]}
Padrão de Codificação
• Nomes significativos para variáveis– Evite declarações como:
• int i = 0;• boolean v; //para representar se o usuário é VIP
– Prefira• int contador = 0;• boolean ehUsuarioVIP;
Davi Pires {[email protected]}
Exercício
• Voltem à modelagem do restaurante da aula passada.
• Organize suas classes em pacotes.• Reflita sobre a facilidade da implantação
de mudanças neste design.
Este trabalho está licenciado sob uma Licença Creative Commons Atribuição-Uso Não-Comercial-Compatilhamento pela mesma licença. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nc-sa/2.0/br/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.