Documente Academic
Documente Profesional
Documente Cultură
Royalties
Estes slides foram gentilmente cedidos pelo prof. Rgis Pires (IFPI-Parnaba) com algumas adaptaes do prof. Ncio de Lima Veras (IFPI-Parnaba).
Utilizados para garantir o encapsulamento em Java Podem ser aplicados tanto a classes quanto a seus membros (atributos e mtodos) individualmente Java possui os seguintes modificadores de visibilidade
public package visvel em qualquer lugar. Default. S visvel em classes do mesmo pacote. No existe modificador com este nome. A ausncia de modificador o torna package. S visvel dentro da mesma classe. protected S visvel na mesma classe e em suas subclasses.
private
Dicas
Use public apenas para mtodos e constantes que formam parte da API pblica da classe. prtica comum tornar campos no-public e encapsul-los com mtodos de acesso public. Utilize protected para atributos e mtodos que no so necessrios para quem usa a classe, mas que podem ser teis para quem cria uma subclasse como parte de um outro pacote Use o modificador de visibilidade padro (package) para atributos e mtodos que voc deseja esconder dentro de um pacote. O modificador de visibilidade private deve ser usado para atributos e mtodos que so disponibilizados apenas dentro da prpria classe onde so definidos.
Encapsulamento
Encapsular
Esconder membros de uma classe. Esconder como funcionam as rotinas (no caso mtodos) do nosso sistema. Para diminuir o acoplamento e assim:
Para que?
Facilitar alteraes na aplicao. Uma regra de negcio s precisa ser modificada em um nico
lugar. Evitar trade-offs
Interface
O conjunto de mtodos pblicos de uma classe tambm chamado de i nt er f ace da cl as s e, pois esta a nica maneira a qual voc se comunica com objetos dessa classe. Programar voltado para a interface e no para a implementao.
sempre bom programar pensando na interface da sua classe, como seus usurios estaro utilizando ela, e no somente como ela ir funcionar. A implementao no tem tanta importncia para o usurio, uma vez que ele s precisa saber o que cada mtodo pretende fazer, e no como ele faz, pois isto pode mudar com o tempo.
Interface - Exemplos
Dirigir um carro
Usar um celular
Encapsulamento
public class Cliente { private String nome; private String endereco; private String cpf; private int idade; public void mudaCPF(String cpf) { validaCPF(cpf); this.cpf = cpf; } private void validaCPF(String cpf) { // Regras aqui, falha caso nao seja vlido } // .. }
8
Getters e Setters
Para permitir o acesso aos atributos (j que eles so private) de uma maneira controlada, a prtica mais comum de criar dois mtodos, um que retorna o valor e outro que muda o valor. O padro para esses mtodos de colocar a palavra get ou set antes do nome do atributo. O padro dos mtodos get e set no vale para as variveis de tipo boolean.
Esses atributos so acessados via is e set. Exemplo: para verificar se um carro est ligado seriam criados os mtodos isLigado e setLigado.
Getters e Setters
public class Conta { private double saldo; private Cliente dono; public Cliente getDono() { return dono; } public void setDono(Cliente dono) { this.dono = dono; } public double getSaldo() { return saldo; } public void setSaldo(double saldo) { this.saldo = saldo; }
10
JavaBeans
Um JavaBean um componente reutilizvel que tem como finalidade representar um modelo de dados.
Define convenes para que atributos de dados sejam tratados como "propriedades"; Reconhecido por frameworks;
Basicamente, um JavaBean uma classe Java qualquer, que tem as seguintes caractersticas:
Construtor pblico default (sem argumentos) Atributos de dados private. Usa-se por conveno os getters e os setters;
11
JavaBeans
Exemplo:
public class Loja { private String nome; public Loja() { // Construtor vazio } public Loja(String nome) { this.nome = nome; } public void setNome(String nome) { this.nome = nome; } public String getNome() { return this.nome; } }
12
Membros de classe
Problema:
Solues:
Atributo totalizador:
public class Conta { private int totalDeContas; // ... public Conta() { this.totalDeContas = this.totalDeContas + 1; } }
13
Atributos de classe
Cada objeto tem o seu e a no se sabe o total de objetos instanciados. O atributo totalDeContas de todas as contas ter a valor 1 e o problema inicial no foi resolvido. A soluo seria ter um atributo que fosse compartilhado por todas as instncias da classe Conta. Para fazer isso em Java, declaramos a varivel como static. private static int totalDeContas;
14
Atributos de classe
public class Conta { private static int totalDeContas; // ... public Conta() { Conta.totalDeContas = Conta.totalDeContas + 1; } public int getTotalDeContas() { return Conta.totalDeContas; }
15
Mtodos de classe
E como saber quantas contas temos, sem ser via objeto instanciado?
16
Membros de instncia
Cada objeto instanciado tem membros de instncia alocados para si. Membros de instncia s podem ser usados atravs de objetos. Existe apenas uma nica cpia de um membro de classe associado a uma determinada classe. No so replicados quando novos objetos so instanciados. Podem ser usados atravs da classe, independente da instanciao de objetos. Declarados com a palavra chave static antes da declarao usual de um membro.
17
Atributos de classe
Varivel nica, compartilhada por todos os objetos da classe. Preferivelmente invocados usando o nome da classe e no atravs de instncias da classe.
String cpf = Formatador.formataCPF(cpfNaoFormatado);
Mtodos de classe
No podem utilizar a referncia this. No podem acessar nenhum atributo ou mtodo de instncia.
Atributo de instncia: private String nome; Mtodo de instncia: public Atributo de classe: Mtodo de classe: public String getNome() {...} static String formataCPF() {...} private static int contador;
Declarao
18
Sobrecarga de Mtodos
Em Java, mtodos podem ter o mesmo nome desde que no sejam ambguos, isso , que exista uma maneira de distinguir no momento da chamada. Isso se chama sobrecarga de mtodo (overloading). No confundir com sobrescrita (overriding), que um conceito completamente diferente envolvendo herana.
19
Sobrecarga de Mtodos
Mtodos devem possuir nomes fceis para que programadores possam entender e dar manuteno Mtodos com finalidades semelhantes devem possuir nomes semelhantes ou iguais
Cada mtodo deve possuir uma lista nica de parmetros A ordem dos tipos dos parmetros suficiente para identificar um mtodo
Essa abordagem no recomendada por causar maiores dificuldades durante o uso e manuteno
20
Sobrecarga de Mtodos
Exemplo
public class App { // Construtor public App() { // ... } public void init() { this.init("default", new Usuario()) } public int init(String appName, Usuario usuario) { // ... } // Esta abordagem deve ser evitada public void init(Usuario usuario, String appName) { // ... } }
21
Constantes
A palavra reservada final geralmente quer dizer Isto no pode ser alterado ou s pode ser alterado em sua inicializao. Normalmente evita-se mudanas em um membro por duas razes: projeto ou eficincia. Constantes so usadas em duas situaes: Constante em tempo de compilao que nunca ser mudada. Inicializada em tempo de execuo e depois disso no mais alterada. Declaradas com a palavra chave final antes da declarao usual de um atributo. static final: local de armazenamento nico que no pode ser alterado. final com tipos primitivos: torna o valor constante. final com objetos: torna a referncia constante, no podendo mais apontar para outro objeto. No entanto, o objeto pode ser alterado. No possvel definir um objeto constante, a no ser sua classe seja escrita de modo a evitar alteraes.
22
Constantes
Por conveno, tipos primitivos static final (constantes em tempo de compilao) so nomeados com caixa alta e com as palavras separadas por underline.
public static final int VAL_UM = 39;
Argumento final: a referncia para onde o argumento aponta no pode ser alterada.
void testeFinal(final Loja l) { l = new Loja(); // Ilegal -- g final }
23
Exerccio
24