Programação Orientada Objeto
Campos e métodos estáticos
Stephenson Galvãostepgalvao[at]gmail[dot]com
Roteiro
● Introdução● Campos Estáticos.● Métodos Estáticos.● Fábrica de Instâncias.
Introdução
● Objetos possuem áreas independentes
Pessoa
- String nome- int idade
Memória Heap
:joao
- nome: João- idade:45
:maria
- nome: Maria- idade:36
:paula
- nome: Paula- idade:25
Introdução
● Objetos possuem áreas independentes
Memória Heap
:maria
- nome: Maria- idade:36
:paula
- nome: Paula- idade:25
...Pessoa maria = new Pessoa(“Paula”,25);Pessoa paula = new Pessoa(“Maria”,36);maria.nome = “Maria Chiquinha”paula.nome = “Paula Fernades”;...
Introdução
● Objetos possuem áreas independentes
Memória Heap
:maria
- nome: Maria- idade:36
:paula
- nome: Paula- idade:25
...Pessoa maria = new Pessoa(“Paula”,25);Pessoa paula = new Pessoa(“Maria”,36);maria.nome = “Maria Chiquinha”paula.nome = “Paula Fernades”;...
● Instâncias de uma classe são independetes entre si.
● O objeto maria não possui acesso aos campos do objeto paula e vice-versa
Introduçao
● Aula de hoje● Campos/metodos que são acessados por todas
instâncias de uma classe.
Memória Heap
:joao
- nome: João- idade:45
:maria
- nome: Maria- idade:36
:paula
- nome: Paula- idade:25
Pessoa
Campos Estáticos
Métodos Estáticos
Campos Estáticos
● Campos estáticos● São compartilhados por todas instâncias da classe.● Conhecidos como: Campo da classe.
– Anteriores: Campos de Instância.● Finalidade:
– Troca de informações entreas instâncias de uma classe.– Armazenar valores, referente a classe, que não serão
alterados durante o programa, valores constantes.
Campos Estáticos
● Utilização.
public class Pessoa {
private String nome; private int idade;
static public int num; ...
}
Palavra static antes do modificador de acesso
Campos Estáticos
● Exemplo
Pessoa
- int campoObj;+ int campoClasse;
+ void incrementar();+ int informarCampoObj();
...Pessoa p1 = new Pessoa();Pessoa p2 = new Pessoa();
p1.incrementar();p1.incrementar();
System.out.println(p1.informarCampoObj());System.out.println(p1.campoClasse);
p2.incrementar();
System.out.println(p2.informarCampoObj());System.out.println(p2.campoClasse);...
Aplicacao.java
Campos Estáticos
● Perguntas● Quais são os valores exibidos nas linhas em destaque.
Pessoa p1 = new Pessoa();Pessoa p2 = new Pessoa();
p1.incrementar();p1.incrementar();
System.out.println(p1.informarCampoObj());System.out.println(p1.campoClasse);
p2.incrementar();
System.out.println(p2.informarCampoObj());System.out.println(p2.campoClasse);
Campos Estáticos
Memória Heap
:p1
- campoObj: 0
:p2
- campoObj: 0
:Pessoa
CampoClasse:0
Campos Estáticos
● Exercício
Pessoa
- int idade;- String nome;- int id;
+ Pessoa(int nome, String idade);...
● Criar uma classe Pessoa com id único onde, a cada objeto, criado um id e atribuido de forma incremental.
Campos Estáticos
● Forma de acesso a campos de classe.● referencia.campoClasse.● NomeClasse.campoClasse.
Pessoa p1 = new Pessoa();Pessoa p2 = new Pessoa();
p1.incrementar();p1.incrementar();
System.out.println(p1.informarCampoObj());System.out.println(Pessoa.campoClasse);
p2.incrementar();
System.out.println(p2.informarCampoObj());System.out.println(Pessoa.campoClasse);
Campos Estáticos
● Qual a forma mais correta● referencia.campoClasse.● NomeClasse.campoClasse.
● Quando o campo de classe é criado na memória e inicializado?
● Quando a classe é inicializada/Primeiro acesso à classe.
Campos Estáticos
● Criação de constantes da classe.● Valores que são imutáveis;● Não podem ser alterados após sua inicialização;
class Matematica{public static final double PI = 3,14159265
}
Campos Estáticos
class Circulo{private double raio;
public Circulo(double raio){this.raio=raio;
}public double informarArea(){
return Matematica.PI * raio * raio;}public double informarRaio(){
return raio;}public void alterarRaio(double raio){
this.raio=raio;}
}
class Matematica{public static final double PI = 3,14159265
}
Métodos Estáticos
● Objetos possuem áreas independentes
Pessoa
- String nome- int idade
+String toString();+void alterarNome();+String informarNome();
Memória Heap
:joao
- nome: João- idade:45
+toString()+alterarNome()+informarNome()
:maria
- nome: Maria- idade:36
+toString()+alterarNome()
+informarNome()
:paula
- nome: Paula- idade:25
+toString()+alterarNome()
+informarNome()
Métodos Estáticos
● Objetos possuem áreas independentes
Memória Heap
:maria
- nome: Maria- idade:36
+String toString()
:paula
- nome: Paula- idade:25
+String toString()
...Pessoa maria = new Pessoa(“Paula”,25);Pessoa paula = new Pessoa(“Maria”,36);System.out.println(maria.toString());System.out.println(paula.toString());...
Métodos Estáticos
● Sempre é necessária a criação do objeto para a execulsão do método;
class Tela{public void imprimir(String msg){
System.out.println(msg);}
}
...Tela tela= new Tela();tela.imprimir(“Ola mundo”);...
Tela.java
Aplicacao.java
Métodos Estáticos
● Métodos Estáticos● Conhecidos como métodos de classe
– Anteriores eram métodos de objetos.● Podem ser invocados sem a criação de um objeto.● Adequados para implementar:
– Rotinas independetes do dados das instâncias.– Rotinas com resultados independete da instância.
● Server para criação de bibliotecas de métodos:– Classe somente com métodos estáticos.
Métodos Estáticos
● Utilização
class Tela{public static void imprimir(String msg){
System.out.println(msg);}
}
Palavra static antes do tipo de retorno do método.
...Tela.imprimir(“Ola mundo”);...
Aplicacao.javaNão necessita a criação de um objeto.
Métodos Estáticos
● Exercício
Pessoa
- int idade;- String nome;- int id;
+ Pessoa(int nome, String idade);+ int informaProxId();
● Altere a classe pessoa para que o próximo id seja informado por um método estático que informa o próximo id e incrementa o campo proxId.
Métodos Estáticos
● Exerício.● Crie a biblioteca de métodos Converso responsável
por converte unidades, tais como:– Converter de Pés para Centímetros.– Converter de Milhas para Quilômetros.– Converter de Polegadas para centímetros.
Métodos Estáticos
Memória Heap
:joao
- nome: João- idade:45
:maria
- nome: Maria- idade:36
:paula
- nome: Paula- idade:25
Pessoa
Campos Estáticos
Métodos Estáticos
Métodos Estáticos
● Desafio Fácil (0,1 pt)● Antes de conhecer os métodos estáticos, você já
havia utilizado algum métodos estático? Se sim, Dê exemplos.
Métodos Estáticos
● Desafio Médio(0,2 pt)● Eu posso utilizar variáveis de classe dentro dos
métodos de objetos?● Eu posso utilizar variáveis de classe dentro dos
métodos de classe?● Eu posso utilizar variáveis de objetos dentro dos
métodos de classe?● Eu posso utilizar métodos de classe dentro dos
métodos de objetos?● Eu posso utilizar métodos de objetos dentro dos
métodos de classe?
Métodos Estáticos
● Desafio Difícil(0,4 pt).● Por que eu não posso utilizar método de objeto e
campos de objetos dentro dos métodos de classe.
Métodos Estáticos
● Fábrica de instâncias● Métodos estáticos que retornam instâncias.● Muito utilizado em padrões de projetos.
– Exemplo Single.● Criação de instância comuns a todos programas.
Métodos Estáticos
● Fábrica de instâncias● Imagine você fazer um programa que simule um
calendário. Uma data que sempre terá no calendário é o natal.
Métodos Estáticos
class Data{private int dia;private int mes;private int ano;
public Data(int dia, int mês, int ano){this.dia=dia;this.mes=mes;this.ano=ano;
}
public Data criarNatal(int ano){return new Data(25,12,ano);
}
}
…Data natal = Data.criarNatal(2011);..
Referências
● Introdução a Programação Orientada a Objetos – Rafael Santos – Editora Campus – Cap 6.
● A linguagem de programação Java – Ken Arnold – Quarta Edição- Pag. 66,67,76 e 77.
Introdução
● Programa da Aula● Caixa de Banco.
C1 C2 C3 C4
1
2
3
2 1
2
3
2
3
Introdução
● Programa da Aula● Caixa de Banco.
C1 C2 C3 C4
1
5
6
2 3 4