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

Post on 07-Apr-2016

216 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Organizando seu códigoClasses, pacotes, modificadores.

Padrões

Davi Pires {dpr@cin.ufpe.br}

Revisão

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

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

Davi Pires {dpr@cin.ufpe.br}

Pacotes

• Permitem organizar um projeto com diversas classes de forma mais intuitiva.

docentes disciplinas

Professor

CadastroProfessor

RepositorioProfessor

ProfessorAdjunto

Disciplina

CadastroDisciplina

RepositorioDisciplina

DisciplinaDaPos

Davi Pires {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

Controle de Acesso

• Como controlar a “visibilidade” de um atributo?

• Porque controlar a visibilidade de um atributo?

Davi Pires {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

Modificadores de Acesso

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

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

Davi Pires {dpr@cin.ufpe.br}

Corrigindo o erro...

• Sugestões?

Davi Pires {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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 {dpr@cin.ufpe.br}

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.

top related