Sunteți pe pagina 1din 24

Fundamentos da Linguagem Java Modificadores de Acessos a Membros de Classe

Ncio de Lima Veras necioveras@gmail.com necio.veras@phb.fap.com.br


1

Royalties

Estes slides foram gentilmente cedidos pelo prof. Rgis Pires (IFPI-Parnaba) com algumas adaptaes do prof. Ncio de Lima Veras (IFPI-Parnaba).

Modificadores de Acesso ou de Visibilidade


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

Modificadores de Acesso ou de Visibilidade

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

Facilitar o aprendizado, pois o mnimo de funcionalidades exposta e requer aprendizado.

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

Motor a lcool, gasolina, diesel, ... GSM, TDMA, ...

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:

Controlar a quantidade de contas instanciadas. Simples, mas problemtica:

Solues:

Conta c = new Conta(); totalDeContas = totalDeContas + 1;

Atributo totalizador:

public class Conta { private int totalDeContas; // ... public Conta() { this.totalDeContas = this.totalDeContas + 1; } }
13

Atributos de classe

Problema do atributo totalizador:

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;

E agora? O que fazer?


14

Atributos de classe
public class Conta { private static int totalDeContas; // ... public Conta() { Conta.totalDeContas = Conta.totalDeContas + 1; } public int getTotalDeContas() { return Conta.totalDeContas; }

Como saber quantas contas existem?


Conta c = new Conta(); int total = c.getTotalDeContas();

15

Mtodos de classe

E como saber quantas contas temos, sem ser via objeto instanciado?

Criando um mtodo de classe.


public class Conta { private static int totalDeContas; // ... public Conta() { Conta.totalDeContas = Conta.totalDeContas + 1; } public static int getTotalDeContas() { return Conta.totalDeContas; } }

Usando o mtodo em outra classe:


// ... int total = Conta.getTotalDeContas(); // ...

16

Membros de instncia e membros de classe

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.

Membros de classe ou estticos

17

Membros de classe ou estticos

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

Mtodos com mesmo nome

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

Um objeto pode possuir mtodos definidos com o mesmo nome


Mtodos devem possuir nomes fceis para que programadores possam entender e dar manuteno Mtodos com finalidades semelhantes devem possuir nomes semelhantes ou iguais

A distino feita atravs da lista de parmetros


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

Modo tpico de declarar uma constante:


public static final <tipo> NOME_DA_CONSTANTE;

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;

Existem constantes static final em tempo de execuo:


public static final int val_dois = rand.nextInt(20);

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

Crie um JavaBean para uma classe Carro;

Crie uma forma de controlar quantas instncias de Carro existem;

Mostre o funcionamento disso atravs uma classe TestaCarros;

24

S-ar putea să vă placă și