Académique Documents
Professionnel Documents
Culture Documents
Orientada a Objetos
GCC110 Turmas 10A/22A
2016-2
2
Atributos Estticos
Imagine que voc est desenvolvendo um jogo e nele as tropas inimigas atacam em grupos.
Voc gostaria que a estratgia de ataque dessas tropas dependesse da quantidade de
inimigos, ou seja, se a tropa for grande seguir uma estratgia, se for pequena ser outra.
Voc definiu uma classe Inimigo para tratar os comportamentos de cada um dos soldados
das tropas inimigas. Essa classe precisa de alguma forma saber quantos inimigos existem no
momento para que o soldado siga a estratgia adequada.
3
Atributos Estticos
O ideal ento que a prpria classe Inimigo controlasse essa informao no seu
construtor, pois assim seria garantido que toda vez que um objeto fosse criado, ele
seria contabilizado.
Ento t fcil...
Suponha por exemplo que sejam criados dois Pilha de Execuo HEAP
(ou Stack) 0x98
objetos da classe Inimigo.
... ...
Qual seria o valor do atributo nroInimigos? soldado1 0x98 nroInimigos 1
soldado2 0xC3 0xC3
... ...
nroInimigos 1
Ns j sabemos que cada objeto pode ter um valor diferente para os atributos. Isso porque, na memria,
cada objeto tem seu espao para guardar os valores dos seus atributos.
Dessa forma, quando criado um objeto da classe Inimigo reservado um novo espao para armazenar os
valores de nroInimgos.
Concluso: posso ter milhares de objetos que todos eles vo ter valores independentes do atributo
nroInimigos com valor 1. 5
Atributos Estticos
Quando um atributo declarado como esttico, ele reservado na memria (Heap) uma nica vez e pode
ser acessado por todos objetos naquela classe.
Dessa forma, se um objeto alterar o valor do atributo, todos os demais podero acessar esse novo valor.
6
Atributos Estticos
Vamos usar um atributo
esttico em nosso jogo.
0x81 HEAP
Pilha de Execuo
(ou Stack) nroInimigos 021
Como agora existe apenas uma cpia atributo nroInimigos na memria, o incremento dentro do construtor
executado nessa cpia. Assim quando um segundo objeto criado, o atributo j est com valor 1 e ao ser
incrementado ele passa para 2. 7
Atributos Estticos
8
Constantes e Atributos Estticos
Mas existem algumas constantes, como o valor de PI, para as quais seria
desperdcio de recursos e desempenho exibir a criao de um objeto
apenas para consultar seus valores.
Em Java existe uma classe chamada Math. Ela tem o atributo esttico, pblico e
constate PI. Dessa forma, voc pode acessar o valor de pi, usando: Math.PI
Cuidado:
Usar atributos constantes de tipos primitivos (int, float, etc.)
tranquilo.
Mas atributos constates do tipo objeto exigem ateno. Objetos
constantes no so imutveis!
10
Objetos Constantes
Isso significa que no posso atribuir um novo objeto varivel soldadoFixo (seu
endereo constante), mas nada me impede que eu chame um mtodo desse objeto
e assim eu mude seu estado.
A linguagem Java possui um mtodo para potncia. Ele usado conforme exemplo
abaixo:
Repare que o mtodo est sendo chamado sem utilizao de um objeto. Est sendo
chamado no formato Classe.mtodo. Isso te lembra alguma coisa?
Alm de um atributo, eu
tambm queria muito ter um
mtodo, para exercer meus
comportamentos sabe...
13
Exemplo de Mtodo Esttico
Vocs concordam que eu poderia querer usar esse mtodo, mesmo se no tiver
nenhum carro?
Talvez o usurio da classe precise apenas dessa converso e no de um carro
propriamente dito.
Se tal mtodo no for esttico eu obrigaria o usurio a criar um carro s pra isso (j
pensou se fosse no mundo real)?
No faz sentido criar um carro falso apenas para chamar um mtodo desses.
Obs: em uma boa modelagem um mtodo como esse provavelmente ficaria em uma classe
utilitria e no em uma classe Carro, mas aqui vale como exemplo didtico.
14
Esteja atento!
15
Limitaes dos Mtodos Estticos
16
Limitaes dos Mtodos Estticos
Os objetos so
egostas e no me
deixam acessar seus
atributos?
A questo que um mtodo no-esttico pode acessar um atributo tambm no-esttico. E assim se um
mtodo esttico pudesse chamar um mtodo no-esttico, seria possvel fazer uma chamada ao mtodo
esttico sem instanciar um objeto e acessar um atributo no-esttico (o que j vimos que no possvel).
18
Mtodos estticos e o this
ERRADO!
Por que?
19
Por que o mtodo main esttico?
Por que voc acha que o mtodo main precisa ser estico?
Ns executamos nossos programas usando a JVM e O que a JVM faz realizar a chamada abaixo:
passando o nome da classe que tem o mtodo MinhaClasse.main(...)
main como parmetro:
Que s possvel pelo fato do mtodo main ser
java MinhaClasse esttico.
a)
public static int getNroCarros()
b)
public static double calcularHipotenusa(double cateto1, double cateto2)
c)
public static void main(String[] args)
Exerccio Resolvido 02
Suponha que voc est fazendo pretende fazer um jogo no qual vrias bolas caem do alto e
picam no cho e o jogador precisar realizar certa sequncia de movimentos para obter pontos.
Para que o jogo fique interessante voc quer implementar a fsica da gravidade e, dependendo
dos itens que o jogador coletar, a gravidade do ambiente pode ser alterada (tornando o
movimento de todas as bolas diferentes).
Sabendo que as bolas devem possuir coordenadas X e Y inteiras e que a gravidade deve comear
com o valor 10, implemente a classe Bola com seus atributos e construtor (e ignore os mtodos).
Exerccio Resolvido 02
Suponha que voc est fazendo pretende fazer um jogo no qual vrias bolas caem do alto e
picam no cho e o jogador precisar realizar certa sequncia de movimentos para obter pontos.
Para que o jogo fique interessante voc quer implementar a fsica da gravidade e, dependendo
dos itens que o jogador coletar, a gravidade do ambiente pode ser alterada (tornando o
movimento de todas as bolas diferentes).
Sabendo que as bolas devem possuir coordenadas X e Y inteiras e que a gravidade deve comear
com o valor 10, implemente a classe Bola com seus atributos e construtor (e ignore os mtodos).
public class Bola {
private int posicaoX;
private int posicaoY;
private static int gravidade = 10; O atributo gravidade deve ser declarado
como esttico, porque ele valer para
public Bola(int posicaoX, int posicaoY) { todas as bolas do jogo.
this.posicaoX = posicaoX;
this.posicaoY = posicaoY;
}
}
Parte 6
Destrutores e Garbage Collector
25
Garbage Collector
Em um programa Java, o que acontece na memria com uma varivel local (de tipo
primitivo) quando um mtodo termina?
E o que acontece se um essa varivel local referencia um objeto?
Mas no caso de variveis que referenciam objetos, a varivel ser deslocada significa
que o local que guarda o endereo do objeto foi desalocado, mas e a memria
alocada para o objeto em si, na HEAP, o que acontece?
26
Garbage Collector
27
Garbage Collector
Eu entendo
minha senhora.
Mas no
adianta ligar, eu
passo na hora
que eu quiser.
28
Garbage Collector
public class ClasseQualquer {
Mas o que acontece
private Carro carro;
quando o mtodo
public ClasseQualquer() { termina, mas algum
carro = new Carro(); referenciava o mesmo
} objeto fora do mtodo?
31
Memory Leaky
Em programas que voc usa por pouco tempo e logo o fecha isso pode no ser to grave.
Mas imagine, por exemplo, que seu navegador de internet tenha problema com alocao de memria e a
cada pgina que voc entra ele desperdia um pouco de memria. Em pouco tempo seu computador
ficar lento, por ocupar toda a memria disponvel.
Isso pior ainda em um sistema comercial (de controle de operaes, por exemplo) que precise funcionar
24h por dia. Como ele nunca desligado o Memory Leaky vai consumindo memria pra sempre (at a
aplicao ou o computador travar na verdade).
32
Memory Leaky
O Garbage Collector ajuda a evitar vrios casos de Memory Leaky, pois ele
desaloca memria de objetos que no esto mais sendo referenciados.
Esteja atento ao uso de memria do seu programa. Sempre que verificar que um objeto
no ser mais necessrio, garanta que no tem nenhuma varivel referenciando-o.
33
Exemplo Garbage Collector
34
Passagem de parmetros
No, no pode.
Mas como fao ento
caso um mtodo
precise retornar mais
de uma informao?
38
Destrutores
39
Destrutores
Mesmo no tendo destrutor em Java, pode ser que eu precise fazer algumas coisas antes
do objeto ser destrudo (como fechar uma conexo com o banco de dados por ex.).
Para isso Java tem o mtodo Finalize().
40
Tempo de vida de um objeto
Quanto tempo
eu tenho de
vida??
Tempo de vida de um objeto nada mais que o tempo desde a sua criao at a
sua destruio.
41
Exerccio 1
Assuma que queiramos trocar os valores de duas variveis inteiras, a e b, e para fazer isso
implementamos o mtodo abaixo.
A variveis a e b foram trocadas depois da chamada? Se voc testar, voc ver que no! Por que
esse mtodo no funciona? Explique em detalhes.
Exerccio 2
Faa a implementao em Java das classes necessrias para tratar a situao abaixo. Voc
precisa definir os atributos que fazem parte do cenrio e as assinaturas dos mtodos (no
necessrio implement-los).
Estou muito feliz, fui contratado pela empresa Arati
para desenvolver um jogo de aventura chamado
DragonRife. No jogo o jogador controla um heri
que capaz de se movimentar pra cima, pra baixo,
pra direita e pra esquerda e comea o jogo com
100% de sade. Ele deve recolher tesouros que esto
espalhados na tela e fugir de um drago que lana
labaredas de fogo (que retiram 20% da sade do
heri de cada vez). Os tesouros podem possuir cores
e valores monetrios diferentes. Em cada fase existe
um drago diferente (variando sua cor e seu
tamanho), mas todos eles andam apenas na parte
debaixo da tela pra esquerda e/ou pra direita. O
objetivo do heri juntar o maior valor monetrio
possvel, evitando ser morto pelo drago.
44