organizando seu código classes, pacotes, modificadores. padrões

23
Organizando seu código Classes, pacotes, modificadores. Padrões

Upload: thereza-bastos-angelim

Post on 07-Apr-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Organizando seu código Classes, pacotes, modificadores. Padrões

Organizando seu códigoClasses, pacotes, modificadores.

Padrões

Page 2: Organizando seu código Classes, pacotes, modificadores. Padrões

Davi Pires {[email protected]}

Revisão

• Classes• Atributos• Métodos• Construtores• Palavras-chave

– class, void, return, new, this, null

Page 3: Organizando seu código Classes, pacotes, modificadores. Padrões

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

Page 4: Organizando seu código Classes, pacotes, modificadores. Padrões

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 ..,.

Page 5: Organizando seu código Classes, pacotes, modificadores. Padrões

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

Page 6: Organizando seu código Classes, pacotes, modificadores. Padrões

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; // ...}

Page 7: Organizando seu código Classes, pacotes, modificadores. Padrões

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;

Page 8: Organizando seu código Classes, pacotes, modificadores. Padrões

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; // ...}

Page 9: Organizando seu código Classes, pacotes, modificadores. Padrões

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...

Page 10: Organizando seu código Classes, pacotes, modificadores. Padrões

Davi Pires {[email protected]}

Controle de Acesso

• Como controlar a “visibilidade” de um atributo?

• Porque controlar a visibilidade de um atributo?

Page 11: Organizando seu código Classes, pacotes, modificadores. Padrões

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.

Page 12: Organizando seu código Classes, pacotes, modificadores. Padrões

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.

Page 13: Organizando seu código Classes, pacotes, modificadores. Padrões

Davi Pires {[email protected]}

Modificadores de Acesso

• Tentando acessar conteúdo private– PrivateExample.java– PrivateAcessor.java

• Tente compilar ambas as classes.– O que acontece?

Page 14: Organizando seu código Classes, pacotes, modificadores. Padrões

Davi Pires {[email protected]}

Corrigindo o erro...

• Sugestões?

Page 15: Organizando seu código Classes, pacotes, modificadores. Padrões

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?

Page 16: Organizando seu código Classes, pacotes, modificadores. Padrões

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.

Page 17: Organizando seu código Classes, pacotes, modificadores. Padrões

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;}

Page 18: Organizando seu código Classes, pacotes, modificadores. Padrões

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.

Page 19: Organizando seu código Classes, pacotes, modificadores. Padrões

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.

Page 20: Organizando seu código Classes, pacotes, modificadores. Padrõ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.

Page 21: Organizando seu código Classes, pacotes, modificadores. Padrões

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;

Page 22: Organizando seu código Classes, pacotes, modificadores. Padrões

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.

Page 23: Organizando seu código Classes, pacotes, modificadores. Padrões

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.