Você está na página 1de 33

Programao Orientada Objeto

Campos e mtodos estticos

Stephenson Galvo
stepgalvao[at]gmail[dot]com

Roteiro

Introduo

Campos Estticos.

Mtodos Estticos.

Fbrica de Instncias.

Introduo

Objetos possuem reas independentes


Pessoa

- String nome
- int idade

:paula

:joao
- nome: Joo
- idade:45

- nome: Paula
- idade:25

:maria
- nome: Maria
- idade:36

Memria Heap

Introduo

Objetos possuem reas independentes


:maria

...
Pessoa maria = new Pessoa(Paula,25);
Pessoa paula = new Pessoa(Maria,36);
maria.nome = Maria Chiquinha
paula.nome = Paula Fernades;
...

- nome: Maria
- idade:36

:paula
- nome: Paula
- idade:25

Memria Heap

Introduo

Objetos possuem reas independentes

...
Pessoa maria = new Pessoa(Paula,25);
Pessoa paula = new Pessoa(Maria,36);
maria.nome = Maria Chiquinha
paula.nome = Paula Fernades;
...

:maria
- nome: Maria
- idade:36

:paula
- nome: Paula
- idade:25

Instncias de uma classe so


independetes entre si.
O objeto maria no possui acesso aos
campos do objeto paula e vice-versa
Memria Heap

Introduao

Aula de hoje

Campos/metodos que so acessados por todas


instncias de uma classe.
:joao
- nome: Joo
- idade:45

:paula
- nome: Paula
- idade:25

:maria
- nome: Maria
- idade:36

Pessoa
Campos Estticos
Mtodos Estticos

Memria Heap

Campos Estticos

Campos estticos

So compartilhados por todas instncias da classe.

Conhecidos como: Campo da classe.

Anteriores: Campos de Instncia.

Finalidade:

Troca de informaes entreas instncias de uma classe.


Armazenar valores, referente a classe, que no sero
alterados durante o programa, valores constantes.

Campos Estticos

Utilizao.
public class Pessoa {
private String nome;
private int idade;
static public int num;
...
}
Palavra static antes do modificador de acesso

Campos Estticos

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 Estticos

Perguntas

Quais so 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 Estticos
:p1
- campoObj: 0

:p2
- campoObj: 0

:Pessoa

CampoClasse:0

Memria Heap

Campos Estticos

Exerccio
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 Estticos

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 Estticos

Qual a forma mais correta

referencia.campoClasse.

NomeClasse.campoClasse.

Quando o campo de classe criado na memria e


inicializado?

Quando a classe inicializada/Primeiro acesso


classe.

Campos Estticos

Criao de constantes da classe.

Valores que so imutveis;

No podem ser alterados aps sua inicializao;


class Matematica{
public static final double PI = 3,14159265
}

Campos Estticos
class Circulo{
private double raio;

class Matematica{
public static final double PI = 3,14159265
}

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

Mtodos Estticos

Objetos possuem reas independentes


Pessoa

- String nome
- int idade
+String toString();
+void alterarNome();
+String informarNome();

:paula

:joao
- nome: Joo
- idade:45

- nome: Paula
- idade:25

+toString()
+alterarNome()
+informarNome()

+toString()
+alterarNome()
+informarNome()
:maria

- nome: Maria
- idade:36
+toString()
+alterarNome()
+informarNome()

Memria Heap

Mtodos Estticos

Objetos possuem reas independentes


:maria

...
Pessoa maria = new Pessoa(Paula,25);
Pessoa paula = new Pessoa(Maria,36);
System.out.println(maria.toString());
System.out.println(paula.toString());
...

- nome: Maria
- idade:36
+String toString()
:paula
- nome: Paula
- idade:25
+String toString()

Memria Heap

Mtodos Estticos

Sempre necessria a criao do objeto para


a execulso do mtodo;
class Tela{
public void imprimir(String msg){
System.out.println(msg);
}
}
Tela.java

...
Tela tela= new Tela();
tela.imprimir(Ola mundo);
...
Aplicacao.java

Mtodos Estticos

Mtodos Estticos

Conhecidos como mtodos de classe

Anteriores eram mtodos de objetos.

Podem ser invocados sem a criao de um objeto.

Adequados para implementar:

Rotinas independetes do dados das instncias.


Rotinas com resultados independete da instncia.

Server para criao de bibliotecas de mtodos:

Classe somente com mtodos estticos.

Mtodos Estticos

Utilizao
class Tela{
public static void imprimir(String msg){
System.out.println(msg);
}
}

Palavra static antes do tipo


de retorno do mtodo.

No necessita a
criao de um objeto.

...
Tela.imprimir(Ola mundo);
...
Aplicacao.java

Mtodos Estticos

Exerccio
Pessoa
- int idade;
- String nome;
- int id;
+ Pessoa(int nome, String idade);
+ int informaProxId();

Altere a classe pessoa para que o prximo id seja


informado por um mtodo esttico que informa o
prximo id e incrementa o campo proxId.

Mtodos Estticos

Exercio.

Crie a biblioteca de mtodos Converso responsvel


por converte unidades, tais como:

Converter de Ps para Centmetros.


Converter de Milhas para Quilmetros.
Converter de Polegadas para centmetros.

Mtodos Estticos
:joao
- nome: Joo
- idade:45

:paula
- nome: Paula
- idade:25

:maria
- nome: Maria
- idade:36

Pessoa
Campos Estticos
Mtodos Estticos

Memria Heap

Mtodos Estticos

Desafio Fcil (0,1 pt)

Antes de conhecer os mtodos estticos, voc j


havia utilizado algum mtodos esttico? Se sim, D
exemplos.

Mtodos Estticos

Desafio Mdio(0,2 pt)

Eu posso utilizar variveis de classe dentro dos


mtodos de objetos?
Eu posso utilizar variveis de classe dentro dos
mtodos de classe?
Eu posso utilizar variveis de objetos dentro dos
mtodos de classe?
Eu posso utilizar mtodos de classe dentro dos
mtodos de objetos?
Eu posso utilizar mtodos de objetos dentro dos
mtodos de classe?

Mtodos Estticos

Desafio Difcil(0,4 pt).

Por que eu no posso utilizar mtodo de objeto e


campos de objetos dentro dos mtodos de classe.

Mtodos Estticos

Fbrica de instncias

Mtodos estticos que retornam instncias.

Muito utilizado em padres de projetos.

Exemplo Single.

Criao de instncia comuns a todos programas.

Mtodos Estticos

Fbrica de instncias

Imagine voc fazer um programa que simule um


calendrio. Uma data que sempre ter no
calendrio o natal.

Mtodos Estticos
class Data{
private int dia;
private int mes;
private int ano;
public Data(int dia, int ms, 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);


..

Referncias

Introduo a Programao Orientada a Objetos Rafael


Santos Editora Campus Cap 6.
A linguagem de programao Java Ken Arnold Quarta
Edio- Pag. 66,67,76 e 77.

Introduo

Programa da Aula

Caixa de Banco.
C1

C2

C3

C4

Introduo

Programa da Aula

Caixa de Banco.
C1

C2

C3

C4