SlideShare uma empresa Scribd logo
1 de 106
Baixar para ler offline
Aula 15 – Classes e Arranjos
Norton Trevisan Roman
30 de mar¸co de 2020
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 1 / 25
Construtores
Podemos simplificar o uso dos m´etodos de
AreaPiscina
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 2 / 25
Construtores
Podemos simplificar o uso dos m´etodos de
AreaPiscina
Tornando suas dimens˜oes (raio) parte do objeto
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 2 / 25
Construtores
Podemos simplificar o uso dos m´etodos de
AreaPiscina
Tornando suas dimens˜oes (raio) parte do objeto
N˜ao precisaremos mais passar as dimens˜oes como
parˆametros dos m´etodos
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 2 / 25
Construtores
class AreaPiscina {
static final int ALVENARIA = 0;
static final int VINIL = 1;
static final int FIBRA = 2;
static final int PLASTICO = 3;
double[] precos;
static char[][] nomes = {{’A’,’l’,’v’,
’e’,’n’,’a’,’r’,’i’,’a’},
{’V’,’i’,’n’,’i’,’l’},
{’F’,’i’,’b’,’r’,’a’},
{’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}};
double raio;
AreaPiscina() {
double[] aux = {1500,1100,750,500};
this.precos = aux;
this.raio = 10;
}
AreaPiscina(double[] precos) {
this.precos = precos;
this.raio = 10;
}
AreaPiscina(double raio) {
this();
this.raio = raio;
}
AreaPiscina(double[] precos,
double raio) {
this.precos = precos;
this.raio = raio;
}
double area() {
return((this.raio >= 0) ? Math.PI *
Math.pow(this.raio,2) : -1);
}
...
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 3 / 25
Construtores
Fa¸camos o mesmo com AreaCasa
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 4 / 25
Construtores
Fa¸camos o mesmo com AreaCasa
Podemos inicializar os atributos com os
valores padr˜ao, em vez de fazermos isso no objeto
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 4 / 25
Construtores
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa() {}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double
cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
AreaCasa(double lateral, double
cquarto, double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
double valor(double area) {
if (area >= 0) return(this.valorM2*
area);
return(-1);
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 5 / 25
Classes em Java
Vimos objetos
diferentes para a
mesma classe
class Projeto {
public static void main(String[] args) {
AreaCasa casaPrinc1 = new AreaCasa(10,5);
AreaCasa casaPrinc2 = new AreaCasa(20,5);
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 6 / 25
Classes em Java
Vimos objetos
diferentes para a
mesma classe
Podemos tamb´em
ter objetos para
classes diferentes
class Projeto {
public static void main(String[] args) {
AreaCasa casaPrinc1 = new AreaCasa(10,5);
AreaCasa casaPrinc2 = new AreaCasa(20,5);
AreaPiscina piscina1 = new AreaPiscina(10);
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 6 / 25
Classes em Java
Vimos objetos
diferentes para a
mesma classe
Podemos tamb´em
ter objetos para
classes diferentes
Usados como
bem entendermos
class Projeto {
static double area(AreaCasa casa,
AreaPiscina piscina) {
return(casa.area() + piscina.area());
}
public static void main(String[] args) {
AreaCasa casaPrinc1 = new AreaCasa(10,5);
AreaCasa casaPrinc2 = new AreaCasa(20,5);
AreaPiscina piscina1 = new AreaPiscina(10);
System.out.println(area(casaPrinc1, piscina1))
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 6 / 25
Classes em Java
Mas ser´a que devemos sempre passar tudo para
objeto?
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 7 / 25
Classes em Java
Mas ser´a que devemos sempre passar tudo para
objeto?
Tirar os static do c´odigo?
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 7 / 25
Classes em Java
Mas ser´a que devemos sempre passar tudo para
objeto?
Tirar os static do c´odigo?
N˜ao, apenas os m´etodos e atributos espec´ıficos do
objeto
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 7 / 25
Classes em Java
Mas ser´a que devemos sempre passar tudo para
objeto?
Tirar os static do c´odigo?
N˜ao, apenas os m´etodos e atributos espec´ıficos do
objeto
Ou seja, da instˆancia particular, e n˜ao da classe
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 7 / 25
Classes em Java
Mas ser´a que devemos sempre passar tudo para
objeto?
Tirar os static do c´odigo?
N˜ao, apenas os m´etodos e atributos espec´ıficos do
objeto
Ou seja, da instˆancia particular, e n˜ao da classe
Os demais (gerais), devem continuar como est˜ao...
com static
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 7 / 25
Classe × Objeto (recapitulando)
M´etodos e Atributos da
Classe
M´etodos e Atributos do
Objeto
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
Classe × Objeto (recapitulando)
M´etodos e Atributos da
Classe
Utilizam a palavra
reservada static
M´etodos e Atributos do
Objeto
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
Classe × Objeto (recapitulando)
M´etodos e Atributos da
Classe
Utilizam a palavra
reservada static
M´etodos e Atributos do
Objeto
N˜ao utilizam a palavra
reservada static
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
Classe × Objeto (recapitulando)
M´etodos e Atributos da
Classe
Utilizam a palavra
reservada static
Acessados diretamente
com Nome da classe.
m´etodo ou Nome da
classe.atributo
M´etodos e Atributos do
Objeto
N˜ao utilizam a palavra
reservada static
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
Classe × Objeto (recapitulando)
M´etodos e Atributos da
Classe
Utilizam a palavra
reservada static
Acessados diretamente
com Nome da classe.
m´etodo ou Nome da
classe.atributo
M´etodos e Atributos do
Objeto
N˜ao utilizam a palavra
reservada static
Acessados somente via
objeto, com
objeto.m´etodo ou
objeto.atributo
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
Classe × Objeto (recapitulando)
M´etodos e Atributos da
Classe
Utilizam a palavra
reservada static
Acessados diretamente
com Nome da classe.
m´etodo ou Nome da
classe.atributo
C´opia ´unica na
mem´oria
M´etodos e Atributos do
Objeto
N˜ao utilizam a palavra
reservada static
Acessados somente via
objeto, com
objeto.m´etodo ou
objeto.atributo
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
Classe × Objeto (recapitulando)
M´etodos e Atributos da
Classe
Utilizam a palavra
reservada static
Acessados diretamente
com Nome da classe.
m´etodo ou Nome da
classe.atributo
C´opia ´unica na
mem´oria
M´etodos e Atributos do
Objeto
N˜ao utilizam a palavra
reservada static
Acessados somente via
objeto, com
objeto.m´etodo ou
objeto.atributo
Uma c´opia por objeto
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
Classe × Objeto (recapitulando)
M´etodos e Atributos da
Classe
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
...
AreaCasa(double valorM2) ...
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args)
{
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
M´etodos e Atributos do
Objeto
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
...
AreaCasa(double valorM2) ...
AreaCasa(double lateral, double
cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args)
{
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 9 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
10
main
args
0x23f
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
10
main
args
0x23f
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
10
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1500 lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
10
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270 lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
10
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270 lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1500
cquarto
0xfaf
10
lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
10
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270 lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
10
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270 lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cq
0x992
20
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
10
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270 lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cq
0x992
20
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
20
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270 lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cq
0x992
20
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
20
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270 lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cq
0x992
20
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cquarto
0xac2
20
cquarto
0x83f
10
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
20
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270 lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cq
0x992
20
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cquarto
0xac2
20
cquarto
0x83f
10
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
20
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270 lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cq
0x992
20
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cquarto
0xac2
20
cquarto
0x83f
20
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Funcionamento na mem´oria
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
static double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cq) {
this.lateral = lateral;
cquarto = cq;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
cquarto
0xfaf
20
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270 lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cq
0x992
20
class AreaCasa {
double valorM2 = 1500;
double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cquarto
0xac2
20
cquarto
0x83f
20
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
Garbage Collection
Considere o c´odigo
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Considere o c´odigo
O que aconteceria se
fiz´essemos
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Considere o c´odigo
O que aconteceria se
fiz´essemos
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Considere o c´odigo
O que aconteceria se
fiz´essemos
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1500
cquarto
0xfaf
10
lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Considere o c´odigo
O que aconteceria se
fiz´essemos
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
(construtor)
valorM2
0xaa2
1270
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Considere o c´odigo
O que aconteceria se
fiz´essemos
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cquarto
0xac2
20
cquarto
0x83f
10
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Considere o c´odigo
O que aconteceria se
fiz´essemos
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cquarto
0xac2
20
cquarto
0x83f
10
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Considere o c´odigo
O que aconteceria se
fiz´essemos
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xdaf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
(construtor)
lateral
0x992
10 cquarto
0xac2
20
cquarto
0x83f
20
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Considere o c´odigo
O que aconteceria se
fiz´essemos
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xccf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
cquarto
0x83f
20
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Considere o c´odigo
O que aconteceria se
fiz´essemos
Perder´ıamos o endere¸co
do segundo objeto
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xccf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
cquarto
0x83f
20
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Considere o c´odigo
O que aconteceria se
fiz´essemos
Perder´ıamos o endere¸co
do segundo objeto
Mas ele continua na
mem´oria...
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xccf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
cquarto
0x83f
20
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
Garbage Collection
Ficar´a assim
eternamente?
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xccf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
cquarto
0x83f
20
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 12 / 25
Garbage Collection
Ficar´a assim
eternamente?
N˜ao. Ser´a levado pelo
lixeiro
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xccf
(0xdaf)
valorM2
0xfd5
1500 lateral
0xf00
10
cquarto
0x83f
20
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 12 / 25
Garbage Collection
Ficar´a assim
eternamente?
N˜ao. Ser´a levado pelo
lixeiro
Garbage Collector
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xccf
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 12 / 25
Garbage Collection
Ficar´a assim
eternamente?
N˜ao. Ser´a levado pelo
lixeiro
Garbage Collector
Servi¸co provido pela JVM,
com o objetivo de limpar
a mem´oria de referˆencias
perdidas
class AreaCasa {
double valorM2 = 1500; double lateral = 10;
double cquarto = 10;
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
AreaCasa(double lateral, double cquarto) {
this.lateral = lateral;
this.cquarto = cquarto;
}
public static void main(String[] args) {
AreaCasa a = new AreaCasa(1270);
AreaCasa a2 = new AreaCasa(10,20);
a2 = a;
}
}
AreaCasa
main
args
0x23f
a
0xa3f
0xccf
(0xccf)
valorM2
0xf05
1270
cquarto
0xfaf
10
lateral
0xfff
10
a2
0xbcf
0xccf
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 12 / 25
Garbage Collection
De tempos em tempos, o Garbage Collector varre os
objetos na mem´oria
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 13 / 25
Garbage Collection
De tempos em tempos, o Garbage Collector varre os
objetos na mem´oria
Anotando quantas referˆencias existem para cada objeto, em
contadores
Com isso, sabe quantas referˆencias h´a para aquele peda¸co da
mem´oria
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 13 / 25
Garbage Collection
De tempos em tempos, o Garbage Collector varre os
objetos na mem´oria
Anotando quantas referˆencias existem para cada objeto, em
contadores
Com isso, sabe quantas referˆencias h´a para aquele peda¸co da
mem´oria
Quando um contador atinge zero, o objeto
correspondente ´e varrido da mem´oria!
N˜ao h´a ningu´em referenciado ele
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 13 / 25
Garbage Collection
O Garbage Collector ´e nativo – varia de JVM para
JVM
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 14 / 25
Garbage Collection
O Garbage Collector ´e nativo – varia de JVM para
JVM
N˜ao pode ser invocado
N˜ao podemos obrig´a-lo a rodar
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 14 / 25
Garbage Collection
O Garbage Collector ´e nativo – varia de JVM para
JVM
N˜ao pode ser invocado
N˜ao podemos obrig´a-lo a rodar
Podemos, no m´aximo, fazer uma requisi¸c˜ao para
que rode
System.gc();
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 14 / 25
Garbage Collection
O GC limpa apenas tipos abstratos (Arranjos,
Objetos etc), n˜ao primitivos (int, float etc)
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 15 / 25
Garbage Collection
O GC limpa apenas tipos abstratos (Arranjos,
Objetos etc), n˜ao primitivos (int, float etc)
A menos que estejam dentro de um abstrato
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 15 / 25
Garbage Collection
O GC limpa apenas tipos abstratos (Arranjos,
Objetos etc), n˜ao primitivos (int, float etc)
A menos que estejam dentro de um abstrato
Lembrando...
Vari´aveis de tipo primitivo armazenam o pr´oprio
conte´udo.
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 15 / 25
Garbage Collection
O GC limpa apenas tipos abstratos (Arranjos,
Objetos etc), n˜ao primitivos (int, float etc)
A menos que estejam dentro de um abstrato
Lembrando...
Vari´aveis de tipo primitivo armazenam o pr´oprio
conte´udo.
Isso n˜ao acontece com tipos abstratos (objetos complexos)!
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 15 / 25
Garbage Collection
O GC limpa apenas tipos abstratos (Arranjos,
Objetos etc), n˜ao primitivos (int, float etc)
A menos que estejam dentro de um abstrato
Lembrando...
Vari´aveis de tipo primitivo armazenam o pr´oprio
conte´udo.
Isso n˜ao acontece com tipos abstratos (objetos complexos)!
Tipos abstratos podem ser complexos e ocupar
muito espa¸co de mem´oria.
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 15 / 25
Garbage Collection
Lembrando...
Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do
objeto, mas o endere¸co de mem´oria no qual o
objeto est´a armazenado.
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
Garbage Collection
Lembrando...
Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do
objeto, mas o endere¸co de mem´oria no qual o
objeto est´a armazenado.
Por isso, diz-se que vari´aveis associadas a objetos
s˜ao referˆencias a esses objetos.
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
Garbage Collection
Lembrando...
Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do
objeto, mas o endere¸co de mem´oria no qual o
objeto est´a armazenado.
Por isso, diz-se que vari´aveis associadas a objetos
s˜ao referˆencias a esses objetos.
Por exemplo, o que significa...
a == b (ambos inteiros)?
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
Garbage Collection
Lembrando...
Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do
objeto, mas o endere¸co de mem´oria no qual o
objeto est´a armazenado.
Por isso, diz-se que vari´aveis associadas a objetos
s˜ao referˆencias a esses objetos.
Por exemplo, o que significa...
a == b (ambos inteiros)? Compara os valores
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
Garbage Collection
Lembrando...
Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do
objeto, mas o endere¸co de mem´oria no qual o
objeto est´a armazenado.
Por isso, diz-se que vari´aveis associadas a objetos
s˜ao referˆencias a esses objetos.
Por exemplo, o que significa...
a == b (ambos inteiros)? Compara os valores
obj1 == obj2 ?
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
Garbage Collection
Lembrando...
Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do
objeto, mas o endere¸co de mem´oria no qual o
objeto est´a armazenado.
Por isso, diz-se que vari´aveis associadas a objetos
s˜ao referˆencias a esses objetos.
Por exemplo, o que significa...
a == b (ambos inteiros)? Compara os valores
obj1 == obj2 ? Compara as referˆencias (endere¸cos)
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
Arranjos de Objetos
Suponha que nosso
projeto agora envolva
um condom´ınio de
residˆencias
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
Arranjos de Objetos
Suponha que nosso
projeto agora envolva
um condom´ınio de
residˆencias
Cada uma com uma casa
e uma piscina
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
Arranjos de Objetos
Suponha que nosso
projeto agora envolva
um condom´ınio de
residˆencias
Cada uma com uma casa
e uma piscina
O que fazer?
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
Arranjos de Objetos
Suponha que nosso
projeto agora envolva
um condom´ınio de
residˆencias
Cada uma com uma casa
e uma piscina
O que fazer?
Conjuntos de casa e piscina → esse ´e o bloco b´asico
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
Arranjos de Objetos
Suponha que nosso
projeto agora envolva
um condom´ınio de
residˆencias
Cada uma com uma casa
e uma piscina
O que fazer?
Conjuntos de casa e piscina → esse ´e o bloco b´asico
Ent˜ao...
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
Arranjos de Objetos
Suponha que nosso
projeto agora envolva
um condom´ınio de
residˆencias
Cada uma com uma casa
e uma piscina
O que fazer?
class Residencia {
AreaCasa casa;
AreaPiscina piscina;
Residencia(AreaCasa casa,
AreaPiscina piscina) {
this.casa = casa;
this.piscina = piscina;
}
}
Conjuntos de casa e piscina → esse ´e o bloco b´asico
Ent˜ao... fazemos disso uma classe
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
Arranjos de Objetos
E agora?
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 18 / 25
Arranjos de Objetos
E agora?
Nosso projeto
conter´a um
arranjo de objetos
dessa classe
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo <
this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 18 / 25
Arranjos de Objetos
E como usamos
isso?
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 19 / 25
Arranjos de Objetos
E como usamos
isso?
class Projeto {
...
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
for (Residencia re : proj.condominio) {
System.out.println("´Area da Casa: "+re.casa.area());
System.out.println("´Area da Psicina: "+
re.piscina.area());
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 19 / 25
Arranjos de Objetos
E como usamos
isso?
Repare que
reusamos as
vari´aveis para os
objetos
class Projeto {
...
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
for (Residencia re : proj.condominio) {
System.out.println("´Area da Casa: "+re.casa.area());
System.out.println("´Area da Psicina: "+
re.piscina.area());
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 19 / 25
Arranjos de Objetos
E como usamos
isso?
Repare que
reusamos as
vari´aveis para os
objetos
Com isso, n˜ao
iremos perder o
endere¸co na
mem´oria?
class Projeto {
...
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
for (Residencia re : proj.condominio) {
System.out.println("´Area da Casa: "+re.casa.area());
System.out.println("´Area da Psicina: "+
re.piscina.area());
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 19 / 25
Arranjos de Objetos
Via essa vari´avel,
sim
class Projeto {
...
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
for (Residencia re : proj.condominio) {
System.out.println("´Area da Casa: "+re.casa.area());
System.out.println("´Area da Psicina: "+
re.piscina.area());
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 20 / 25
Arranjos de Objetos
Via essa vari´avel,
sim
Mas antes passamos
esse endere¸co a
outras vari´aveis, via
parˆametros
class Projeto {
...
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
for (Residencia re : proj.condominio) {
System.out.println("´Area da Casa: "+re.casa.area());
System.out.println("´Area da Psicina: "+
re.piscina.area());
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 20 / 25
Arranjos de Objetos
Via essa vari´avel,
sim
Mas antes passamos
esse endere¸co a
outras vari´aveis, via
parˆametros
c e p em r = new
Residencia(c,p)
class Projeto {
...
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
for (Residencia re : proj.condominio) {
System.out.println("´Area da Casa: "+re.casa.area());
System.out.println("´Area da Psicina: "+
re.piscina.area());
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 20 / 25
Arranjos de Objetos
Via essa vari´avel,
sim
Mas antes passamos
esse endere¸co a
outras vari´aveis, via
parˆametros
c e p em r = new
Residencia(c,p)
r em proj.
adicionaRes(r)
class Projeto {
...
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
for (Residencia re : proj.condominio) {
System.out.println("´Area da Casa: "+re.casa.area());
System.out.println("´Area da Psicina: "+
re.piscina.area());
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 20 / 25
Arranjos: Recapitulando
Um arranjo ´e definido como tipo[]
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
Arranjos: Recapitulando
Um arranjo ´e definido como tipo[]
Se tipo ´e um tipo primitivo (int, double, char...)
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
Arranjos: Recapitulando
Um arranjo ´e definido como tipo[]
Se tipo ´e um tipo primitivo (int, double, char...)
cada elemento tem o tamanho deste tipo primitivo
cada elemento armazena um valor deste tipo
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
Arranjos: Recapitulando
Um arranjo ´e definido como tipo[]
Se tipo ´e um tipo primitivo (int, double, char...)
cada elemento tem o tamanho deste tipo primitivo
cada elemento armazena um valor deste tipo
Se tipo ´e um tipo abstrato (uma classe, por
exemplo)
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
Arranjos: Recapitulando
Um arranjo ´e definido como tipo[]
Se tipo ´e um tipo primitivo (int, double, char...)
cada elemento tem o tamanho deste tipo primitivo
cada elemento armazena um valor deste tipo
Se tipo ´e um tipo abstrato (uma classe, por
exemplo)
cada elemento tem o tamanho de uma referˆencia (endere¸co)
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
Arranjos: Recapitulando
Um arranjo ´e definido como tipo[]
Se tipo ´e um tipo primitivo (int, double, char...)
cada elemento tem o tamanho deste tipo primitivo
cada elemento armazena um valor deste tipo
Se tipo ´e um tipo abstrato (uma classe, por
exemplo)
cada elemento tem o tamanho de uma referˆencia (endere¸co)
cada elemento armazena a referˆencia para um objeto de tipo
tipo
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
Arranjos de Objetos
Voltemos ent˜ao ao
c´odigo de Projeto
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo <
this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
for (Residencia re : proj.condominio) {
System.out.println("Endere¸co do objeto: "
+re);
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 22 / 25
Arranjos de Objetos
Voltemos ent˜ao ao
c´odigo de Projeto
condominio ´e
arranjo de objetos
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo <
this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
for (Residencia re : proj.condominio) {
System.out.println("Endere¸co do objeto: "
+re);
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 22 / 25
Arranjos de Objetos
Voltemos ent˜ao ao
c´odigo de Projeto
condominio ´e
arranjo de objetos
Arranjo de endere¸cos
de mem´oria
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo <
this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
for (Residencia re : proj.condominio) {
System.out.println("Endere¸co do objeto: "
+re);
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 22 / 25
Arranjos de Objetos
Voltemos ent˜ao ao
c´odigo de Projeto
condominio ´e
arranjo de objetos
Arranjo de endere¸cos
de mem´oria
O que acontece
quando o alocamos
sem inicializar?
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo <
this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
for (Residencia re : proj.condominio) {
System.out.println("Endere¸co do objeto: "
+re);
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 22 / 25
Arranjos de Objetos
O compilador ir´a
inicializ´a-lo com
um valor padr˜ao
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo <
this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
for (Residencia re : proj.condominio) {
System.out.println("Endere¸co do objeto: "
+re);
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 23 / 25
Arranjos de Objetos
O compilador ir´a
inicializ´a-lo com
um valor padr˜ao
null – o endere¸co
nulo
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo <
this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
for (Residencia re : proj.condominio) {
System.out.println("Endere¸co do objeto: "
+re);
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 23 / 25
Arranjos de Objetos
O compilador ir´a
inicializ´a-lo com
um valor padr˜ao
null – o endere¸co
nulo
Sa´ıda do main:
$ java Projeto
Endere¸co do objeto: null
Endere¸co do objeto: null
Endere¸co do objeto: null
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo <
this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
for (Residencia re : proj.condominio) {
System.out.println("Endere¸co do objeto: "
+re);
}
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 23 / 25
Arranjos de Objetos
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo < this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
}
}
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
Arranjos de Objetos
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo < this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
System.out.println(proj.condominio[1].casa.area());
}
}
Podemos acessar um
´unico elemento do
arranjo
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
Arranjos de Objetos
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo < this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
System.out.println(proj.condominio[1].casa.area());
}
}
Podemos acessar um
´unico elemento do
arranjo
M´etodo area
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
Arranjos de Objetos
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo < this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
System.out.println(proj.condominio[1].casa.area());
}
}
Podemos acessar um
´unico elemento do
arranjo
M´etodo area do objeto
casa
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
Arranjos de Objetos
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo < this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
System.out.println(proj.condominio[1].casa.area());
}
}
Podemos acessar um
´unico elemento do
arranjo
M´etodo area do objeto
casa do segundo objeto
de condominio (classe
Residencia)
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
Arranjos de Objetos
class Projeto {
Residencia[] condominio;
int ultimo = -1; // ´ultimo alocado
boolean adicionaRes(Residencia r) {
if (this.ultimo < this.condominio.length-1) {
ultimo++;
this.condominio[ultimo] = r;
return(true);
}
return(false);
}
Projeto(int tam) {
condominio = new Residencia[tam];
}
public static void main(String[] args) {
Projeto proj = new Projeto(3);
AreaCasa c = new AreaCasa(10,5);
AreaPiscina p = new AreaPiscina(5);
Residencia r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(12,7);
p = new AreaPiscina(6);
r = new Residencia(c, p);
proj.adicionaRes(r);
c = new AreaCasa(10,6);
p = new AreaPiscina(3.5);
r = new Residencia(c, p);
proj.adicionaRes(r);
System.out.println(proj.condominio[1].casa.area());
}
}
Podemos acessar um
´unico elemento do
arranjo
M´etodo area do objeto
casa do segundo objeto
de condominio (classe
Residencia) do objeto
proj
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
Videoaula
https://www.youtube.com/watch?v=C-2jVnvSI_U
e
https://www.youtube.com/watch?v=NUKflTnntcw
Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 25 / 25

Mais conteúdo relacionado

Mais de Norton Trevisan Roman

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

PPP6_ciencias final 6 ano ano de 23/24 final
PPP6_ciencias final 6 ano ano de 23/24 finalPPP6_ciencias final 6 ano ano de 23/24 final
PPP6_ciencias final 6 ano ano de 23/24 final
carlaOliveira438
 

Último (20)

ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdfROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
ROTINA DE ESTUDO-APOSTILA ESTUDO ORIENTADO.pdf
 
bem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animalbem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animal
 
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
Slides Lição 8, Betel, Ordenança para confessar os pecados e perdoar as ofens...
 
prova do exame nacional Port. 2008 - 2ª fase - Criterios.pdf
prova do exame nacional Port. 2008 - 2ª fase - Criterios.pdfprova do exame nacional Port. 2008 - 2ª fase - Criterios.pdf
prova do exame nacional Port. 2008 - 2ª fase - Criterios.pdf
 
O que é, de facto, a Educação de Infância
O que é, de facto, a Educação de InfânciaO que é, de facto, a Educação de Infância
O que é, de facto, a Educação de Infância
 
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptxEB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
EB1 Cumeada Co(n)Vida à Leitura - Livros à Solta_Serta.pptx
 
Geometria para 6 ano retas angulos .docx
Geometria para 6 ano retas angulos .docxGeometria para 6 ano retas angulos .docx
Geometria para 6 ano retas angulos .docx
 
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptxSlides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
Slides Lição 07, Central Gospel, As Duas Testemunhas Do Final Dos Tempos.pptx
 
CONCORDÂNCIA NOMINAL atividade ensino médio ead.pptx
CONCORDÂNCIA NOMINAL atividade ensino médio  ead.pptxCONCORDÂNCIA NOMINAL atividade ensino médio  ead.pptx
CONCORDÂNCIA NOMINAL atividade ensino médio ead.pptx
 
Aparatologia na estética - Cavitação, radiofrequência e lipolaser.pdf
Aparatologia na estética - Cavitação, radiofrequência e lipolaser.pdfAparatologia na estética - Cavitação, radiofrequência e lipolaser.pdf
Aparatologia na estética - Cavitação, radiofrequência e lipolaser.pdf
 
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptxEBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
 
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdfAs Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
As Mil Palavras Mais Usadas No Inglês (Robert de Aquino) (Z-Library).pdf
 
Conteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persaConteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persa
 
Enunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdf
Enunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdfEnunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdf
Enunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdf
 
PPP6_ciencias final 6 ano ano de 23/24 final
PPP6_ciencias final 6 ano ano de 23/24 finalPPP6_ciencias final 6 ano ano de 23/24 final
PPP6_ciencias final 6 ano ano de 23/24 final
 
Atividade do poema sobre mãe de mário quintana.pdf
Atividade do poema sobre mãe de mário quintana.pdfAtividade do poema sobre mãe de mário quintana.pdf
Atividade do poema sobre mãe de mário quintana.pdf
 
Enunciado_da_Avaliacao_1__Sistemas_de_Informacoes_Gerenciais_(IL60106).pdf
Enunciado_da_Avaliacao_1__Sistemas_de_Informacoes_Gerenciais_(IL60106).pdfEnunciado_da_Avaliacao_1__Sistemas_de_Informacoes_Gerenciais_(IL60106).pdf
Enunciado_da_Avaliacao_1__Sistemas_de_Informacoes_Gerenciais_(IL60106).pdf
 
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
 
Semana Interna de Prevenção de Acidentes SIPAT/2024
Semana Interna de Prevenção de Acidentes SIPAT/2024Semana Interna de Prevenção de Acidentes SIPAT/2024
Semana Interna de Prevenção de Acidentes SIPAT/2024
 
Descrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamenteDescrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamente
 

(ACH2001) Introdução à Programação - Aula 15

  • 1. Aula 15 – Classes e Arranjos Norton Trevisan Roman 30 de mar¸co de 2020 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 1 / 25
  • 2. Construtores Podemos simplificar o uso dos m´etodos de AreaPiscina Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 2 / 25
  • 3. Construtores Podemos simplificar o uso dos m´etodos de AreaPiscina Tornando suas dimens˜oes (raio) parte do objeto Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 2 / 25
  • 4. Construtores Podemos simplificar o uso dos m´etodos de AreaPiscina Tornando suas dimens˜oes (raio) parte do objeto N˜ao precisaremos mais passar as dimens˜oes como parˆametros dos m´etodos Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 2 / 25
  • 5. Construtores class AreaPiscina { static final int ALVENARIA = 0; static final int VINIL = 1; static final int FIBRA = 2; static final int PLASTICO = 3; double[] precos; static char[][] nomes = {{’A’,’l’,’v’, ’e’,’n’,’a’,’r’,’i’,’a’}, {’V’,’i’,’n’,’i’,’l’}, {’F’,’i’,’b’,’r’,’a’}, {’P’,’l’,’´a’,’s’,’t’,’i’,’c’,’o’}}; double raio; AreaPiscina() { double[] aux = {1500,1100,750,500}; this.precos = aux; this.raio = 10; } AreaPiscina(double[] precos) { this.precos = precos; this.raio = 10; } AreaPiscina(double raio) { this(); this.raio = raio; } AreaPiscina(double[] precos, double raio) { this.precos = precos; this.raio = raio; } double area() { return((this.raio >= 0) ? Math.PI * Math.pow(this.raio,2) : -1); } ... } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 3 / 25
  • 6. Construtores Fa¸camos o mesmo com AreaCasa Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 4 / 25
  • 7. Construtores Fa¸camos o mesmo com AreaCasa Podemos inicializar os atributos com os valores padr˜ao, em vez de fazermos isso no objeto Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 4 / 25
  • 8. Construtores class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa() {} AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } AreaCasa(double lateral, double cquarto, double valorM2) { this(lateral, cquarto); this.valorM2 = valorM2; } double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } double valor(double area) { if (area >= 0) return(this.valorM2* area); return(-1); } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 5 / 25
  • 9. Classes em Java Vimos objetos diferentes para a mesma classe class Projeto { public static void main(String[] args) { AreaCasa casaPrinc1 = new AreaCasa(10,5); AreaCasa casaPrinc2 = new AreaCasa(20,5); } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 6 / 25
  • 10. Classes em Java Vimos objetos diferentes para a mesma classe Podemos tamb´em ter objetos para classes diferentes class Projeto { public static void main(String[] args) { AreaCasa casaPrinc1 = new AreaCasa(10,5); AreaCasa casaPrinc2 = new AreaCasa(20,5); AreaPiscina piscina1 = new AreaPiscina(10); } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 6 / 25
  • 11. Classes em Java Vimos objetos diferentes para a mesma classe Podemos tamb´em ter objetos para classes diferentes Usados como bem entendermos class Projeto { static double area(AreaCasa casa, AreaPiscina piscina) { return(casa.area() + piscina.area()); } public static void main(String[] args) { AreaCasa casaPrinc1 = new AreaCasa(10,5); AreaCasa casaPrinc2 = new AreaCasa(20,5); AreaPiscina piscina1 = new AreaPiscina(10); System.out.println(area(casaPrinc1, piscina1)) } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 6 / 25
  • 12. Classes em Java Mas ser´a que devemos sempre passar tudo para objeto? Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 7 / 25
  • 13. Classes em Java Mas ser´a que devemos sempre passar tudo para objeto? Tirar os static do c´odigo? Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 7 / 25
  • 14. Classes em Java Mas ser´a que devemos sempre passar tudo para objeto? Tirar os static do c´odigo? N˜ao, apenas os m´etodos e atributos espec´ıficos do objeto Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 7 / 25
  • 15. Classes em Java Mas ser´a que devemos sempre passar tudo para objeto? Tirar os static do c´odigo? N˜ao, apenas os m´etodos e atributos espec´ıficos do objeto Ou seja, da instˆancia particular, e n˜ao da classe Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 7 / 25
  • 16. Classes em Java Mas ser´a que devemos sempre passar tudo para objeto? Tirar os static do c´odigo? N˜ao, apenas os m´etodos e atributos espec´ıficos do objeto Ou seja, da instˆancia particular, e n˜ao da classe Os demais (gerais), devem continuar como est˜ao... com static Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 7 / 25
  • 17. Classe × Objeto (recapitulando) M´etodos e Atributos da Classe M´etodos e Atributos do Objeto Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
  • 18. Classe × Objeto (recapitulando) M´etodos e Atributos da Classe Utilizam a palavra reservada static M´etodos e Atributos do Objeto Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
  • 19. Classe × Objeto (recapitulando) M´etodos e Atributos da Classe Utilizam a palavra reservada static M´etodos e Atributos do Objeto N˜ao utilizam a palavra reservada static Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
  • 20. Classe × Objeto (recapitulando) M´etodos e Atributos da Classe Utilizam a palavra reservada static Acessados diretamente com Nome da classe. m´etodo ou Nome da classe.atributo M´etodos e Atributos do Objeto N˜ao utilizam a palavra reservada static Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
  • 21. Classe × Objeto (recapitulando) M´etodos e Atributos da Classe Utilizam a palavra reservada static Acessados diretamente com Nome da classe. m´etodo ou Nome da classe.atributo M´etodos e Atributos do Objeto N˜ao utilizam a palavra reservada static Acessados somente via objeto, com objeto.m´etodo ou objeto.atributo Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
  • 22. Classe × Objeto (recapitulando) M´etodos e Atributos da Classe Utilizam a palavra reservada static Acessados diretamente com Nome da classe. m´etodo ou Nome da classe.atributo C´opia ´unica na mem´oria M´etodos e Atributos do Objeto N˜ao utilizam a palavra reservada static Acessados somente via objeto, com objeto.m´etodo ou objeto.atributo Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
  • 23. Classe × Objeto (recapitulando) M´etodos e Atributos da Classe Utilizam a palavra reservada static Acessados diretamente com Nome da classe. m´etodo ou Nome da classe.atributo C´opia ´unica na mem´oria M´etodos e Atributos do Objeto N˜ao utilizam a palavra reservada static Acessados somente via objeto, com objeto.m´etodo ou objeto.atributo Uma c´opia por objeto Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 8 / 25
  • 24. Classe × Objeto (recapitulando) M´etodos e Atributos da Classe class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; ... AreaCasa(double valorM2) ... AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } M´etodos e Atributos do Objeto class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; ... AreaCasa(double valorM2) ... AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 9 / 25
  • 25. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 26. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 10 main args 0x23f class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 27. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 10 main args 0x23f class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 28. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 10 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1500 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 29. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 10 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 30. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 10 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1500 cquarto 0xfaf 10 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 31. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 10 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 32. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 10 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cq 0x992 20 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 33. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 10 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cq 0x992 20 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 34. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 20 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cq 0x992 20 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 35. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 20 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cq 0x992 20 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cquarto 0xac2 20 cquarto 0x83f 10 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 36. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 20 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cq 0x992 20 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cquarto 0xac2 20 cquarto 0x83f 10 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 37. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 20 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cq 0x992 20 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cquarto 0xac2 20 cquarto 0x83f 20 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 38. Funcionamento na mem´oria class AreaCasa { double valorM2 = 1500; double lateral = 10; static double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cq) { this.lateral = lateral; cquarto = cq; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa cquarto 0xfaf 20 main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cq 0x992 20 class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cquarto 0xac2 20 cquarto 0x83f 20 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 10 / 25
  • 39. Garbage Collection Considere o c´odigo class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 40. Garbage Collection Considere o c´odigo O que aconteceria se fiz´essemos class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 41. Garbage Collection Considere o c´odigo O que aconteceria se fiz´essemos class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 42. Garbage Collection Considere o c´odigo O que aconteceria se fiz´essemos class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1500 cquarto 0xfaf 10 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 43. Garbage Collection Considere o c´odigo O que aconteceria se fiz´essemos class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 (construtor) valorM2 0xaa2 1270 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 44. Garbage Collection Considere o c´odigo O que aconteceria se fiz´essemos class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cquarto 0xac2 20 cquarto 0x83f 10 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 45. Garbage Collection Considere o c´odigo O que aconteceria se fiz´essemos class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cquarto 0xac2 20 cquarto 0x83f 10 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 46. Garbage Collection Considere o c´odigo O que aconteceria se fiz´essemos class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xdaf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 (construtor) lateral 0x992 10 cquarto 0xac2 20 cquarto 0x83f 20 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 47. Garbage Collection Considere o c´odigo O que aconteceria se fiz´essemos class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xccf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 cquarto 0x83f 20 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 48. Garbage Collection Considere o c´odigo O que aconteceria se fiz´essemos Perder´ıamos o endere¸co do segundo objeto class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xccf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 cquarto 0x83f 20 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 49. Garbage Collection Considere o c´odigo O que aconteceria se fiz´essemos Perder´ıamos o endere¸co do segundo objeto Mas ele continua na mem´oria... class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xccf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 cquarto 0x83f 20 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 11 / 25
  • 50. Garbage Collection Ficar´a assim eternamente? class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xccf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 cquarto 0x83f 20 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 12 / 25
  • 51. Garbage Collection Ficar´a assim eternamente? N˜ao. Ser´a levado pelo lixeiro class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xccf (0xdaf) valorM2 0xfd5 1500 lateral 0xf00 10 cquarto 0x83f 20 Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 12 / 25
  • 52. Garbage Collection Ficar´a assim eternamente? N˜ao. Ser´a levado pelo lixeiro Garbage Collector class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xccf Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 12 / 25
  • 53. Garbage Collection Ficar´a assim eternamente? N˜ao. Ser´a levado pelo lixeiro Garbage Collector Servi¸co provido pela JVM, com o objetivo de limpar a mem´oria de referˆencias perdidas class AreaCasa { double valorM2 = 1500; double lateral = 10; double cquarto = 10; AreaCasa(double valorM2) { this.valorM2 = valorM2; } AreaCasa(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } public static void main(String[] args) { AreaCasa a = new AreaCasa(1270); AreaCasa a2 = new AreaCasa(10,20); a2 = a; } } AreaCasa main args 0x23f a 0xa3f 0xccf (0xccf) valorM2 0xf05 1270 cquarto 0xfaf 10 lateral 0xfff 10 a2 0xbcf 0xccf Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 12 / 25
  • 54. Garbage Collection De tempos em tempos, o Garbage Collector varre os objetos na mem´oria Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 13 / 25
  • 55. Garbage Collection De tempos em tempos, o Garbage Collector varre os objetos na mem´oria Anotando quantas referˆencias existem para cada objeto, em contadores Com isso, sabe quantas referˆencias h´a para aquele peda¸co da mem´oria Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 13 / 25
  • 56. Garbage Collection De tempos em tempos, o Garbage Collector varre os objetos na mem´oria Anotando quantas referˆencias existem para cada objeto, em contadores Com isso, sabe quantas referˆencias h´a para aquele peda¸co da mem´oria Quando um contador atinge zero, o objeto correspondente ´e varrido da mem´oria! N˜ao h´a ningu´em referenciado ele Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 13 / 25
  • 57. Garbage Collection O Garbage Collector ´e nativo – varia de JVM para JVM Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 14 / 25
  • 58. Garbage Collection O Garbage Collector ´e nativo – varia de JVM para JVM N˜ao pode ser invocado N˜ao podemos obrig´a-lo a rodar Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 14 / 25
  • 59. Garbage Collection O Garbage Collector ´e nativo – varia de JVM para JVM N˜ao pode ser invocado N˜ao podemos obrig´a-lo a rodar Podemos, no m´aximo, fazer uma requisi¸c˜ao para que rode System.gc(); Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 14 / 25
  • 60. Garbage Collection O GC limpa apenas tipos abstratos (Arranjos, Objetos etc), n˜ao primitivos (int, float etc) Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 15 / 25
  • 61. Garbage Collection O GC limpa apenas tipos abstratos (Arranjos, Objetos etc), n˜ao primitivos (int, float etc) A menos que estejam dentro de um abstrato Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 15 / 25
  • 62. Garbage Collection O GC limpa apenas tipos abstratos (Arranjos, Objetos etc), n˜ao primitivos (int, float etc) A menos que estejam dentro de um abstrato Lembrando... Vari´aveis de tipo primitivo armazenam o pr´oprio conte´udo. Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 15 / 25
  • 63. Garbage Collection O GC limpa apenas tipos abstratos (Arranjos, Objetos etc), n˜ao primitivos (int, float etc) A menos que estejam dentro de um abstrato Lembrando... Vari´aveis de tipo primitivo armazenam o pr´oprio conte´udo. Isso n˜ao acontece com tipos abstratos (objetos complexos)! Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 15 / 25
  • 64. Garbage Collection O GC limpa apenas tipos abstratos (Arranjos, Objetos etc), n˜ao primitivos (int, float etc) A menos que estejam dentro de um abstrato Lembrando... Vari´aveis de tipo primitivo armazenam o pr´oprio conte´udo. Isso n˜ao acontece com tipos abstratos (objetos complexos)! Tipos abstratos podem ser complexos e ocupar muito espa¸co de mem´oria. Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 15 / 25
  • 65. Garbage Collection Lembrando... Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do objeto, mas o endere¸co de mem´oria no qual o objeto est´a armazenado. Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
  • 66. Garbage Collection Lembrando... Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do objeto, mas o endere¸co de mem´oria no qual o objeto est´a armazenado. Por isso, diz-se que vari´aveis associadas a objetos s˜ao referˆencias a esses objetos. Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
  • 67. Garbage Collection Lembrando... Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do objeto, mas o endere¸co de mem´oria no qual o objeto est´a armazenado. Por isso, diz-se que vari´aveis associadas a objetos s˜ao referˆencias a esses objetos. Por exemplo, o que significa... a == b (ambos inteiros)? Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
  • 68. Garbage Collection Lembrando... Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do objeto, mas o endere¸co de mem´oria no qual o objeto est´a armazenado. Por isso, diz-se que vari´aveis associadas a objetos s˜ao referˆencias a esses objetos. Por exemplo, o que significa... a == b (ambos inteiros)? Compara os valores Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
  • 69. Garbage Collection Lembrando... Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do objeto, mas o endere¸co de mem´oria no qual o objeto est´a armazenado. Por isso, diz-se que vari´aveis associadas a objetos s˜ao referˆencias a esses objetos. Por exemplo, o que significa... a == b (ambos inteiros)? Compara os valores obj1 == obj2 ? Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
  • 70. Garbage Collection Lembrando... Ent˜ao, Java n˜ao guarda nas vari´aveis uma c´opia do objeto, mas o endere¸co de mem´oria no qual o objeto est´a armazenado. Por isso, diz-se que vari´aveis associadas a objetos s˜ao referˆencias a esses objetos. Por exemplo, o que significa... a == b (ambos inteiros)? Compara os valores obj1 == obj2 ? Compara as referˆencias (endere¸cos) Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 16 / 25
  • 71. Arranjos de Objetos Suponha que nosso projeto agora envolva um condom´ınio de residˆencias Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
  • 72. Arranjos de Objetos Suponha que nosso projeto agora envolva um condom´ınio de residˆencias Cada uma com uma casa e uma piscina Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
  • 73. Arranjos de Objetos Suponha que nosso projeto agora envolva um condom´ınio de residˆencias Cada uma com uma casa e uma piscina O que fazer? Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
  • 74. Arranjos de Objetos Suponha que nosso projeto agora envolva um condom´ınio de residˆencias Cada uma com uma casa e uma piscina O que fazer? Conjuntos de casa e piscina → esse ´e o bloco b´asico Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
  • 75. Arranjos de Objetos Suponha que nosso projeto agora envolva um condom´ınio de residˆencias Cada uma com uma casa e uma piscina O que fazer? Conjuntos de casa e piscina → esse ´e o bloco b´asico Ent˜ao... Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
  • 76. Arranjos de Objetos Suponha que nosso projeto agora envolva um condom´ınio de residˆencias Cada uma com uma casa e uma piscina O que fazer? class Residencia { AreaCasa casa; AreaPiscina piscina; Residencia(AreaCasa casa, AreaPiscina piscina) { this.casa = casa; this.piscina = piscina; } } Conjuntos de casa e piscina → esse ´e o bloco b´asico Ent˜ao... fazemos disso uma classe Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 17 / 25
  • 77. Arranjos de Objetos E agora? Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 18 / 25
  • 78. Arranjos de Objetos E agora? Nosso projeto conter´a um arranjo de objetos dessa classe class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 18 / 25
  • 79. Arranjos de Objetos E como usamos isso? Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 19 / 25
  • 80. Arranjos de Objetos E como usamos isso? class Projeto { ... public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); for (Residencia re : proj.condominio) { System.out.println("´Area da Casa: "+re.casa.area()); System.out.println("´Area da Psicina: "+ re.piscina.area()); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 19 / 25
  • 81. Arranjos de Objetos E como usamos isso? Repare que reusamos as vari´aveis para os objetos class Projeto { ... public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); for (Residencia re : proj.condominio) { System.out.println("´Area da Casa: "+re.casa.area()); System.out.println("´Area da Psicina: "+ re.piscina.area()); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 19 / 25
  • 82. Arranjos de Objetos E como usamos isso? Repare que reusamos as vari´aveis para os objetos Com isso, n˜ao iremos perder o endere¸co na mem´oria? class Projeto { ... public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); for (Residencia re : proj.condominio) { System.out.println("´Area da Casa: "+re.casa.area()); System.out.println("´Area da Psicina: "+ re.piscina.area()); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 19 / 25
  • 83. Arranjos de Objetos Via essa vari´avel, sim class Projeto { ... public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); for (Residencia re : proj.condominio) { System.out.println("´Area da Casa: "+re.casa.area()); System.out.println("´Area da Psicina: "+ re.piscina.area()); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 20 / 25
  • 84. Arranjos de Objetos Via essa vari´avel, sim Mas antes passamos esse endere¸co a outras vari´aveis, via parˆametros class Projeto { ... public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); for (Residencia re : proj.condominio) { System.out.println("´Area da Casa: "+re.casa.area()); System.out.println("´Area da Psicina: "+ re.piscina.area()); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 20 / 25
  • 85. Arranjos de Objetos Via essa vari´avel, sim Mas antes passamos esse endere¸co a outras vari´aveis, via parˆametros c e p em r = new Residencia(c,p) class Projeto { ... public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); for (Residencia re : proj.condominio) { System.out.println("´Area da Casa: "+re.casa.area()); System.out.println("´Area da Psicina: "+ re.piscina.area()); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 20 / 25
  • 86. Arranjos de Objetos Via essa vari´avel, sim Mas antes passamos esse endere¸co a outras vari´aveis, via parˆametros c e p em r = new Residencia(c,p) r em proj. adicionaRes(r) class Projeto { ... public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); for (Residencia re : proj.condominio) { System.out.println("´Area da Casa: "+re.casa.area()); System.out.println("´Area da Psicina: "+ re.piscina.area()); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 20 / 25
  • 87. Arranjos: Recapitulando Um arranjo ´e definido como tipo[] Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
  • 88. Arranjos: Recapitulando Um arranjo ´e definido como tipo[] Se tipo ´e um tipo primitivo (int, double, char...) Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
  • 89. Arranjos: Recapitulando Um arranjo ´e definido como tipo[] Se tipo ´e um tipo primitivo (int, double, char...) cada elemento tem o tamanho deste tipo primitivo cada elemento armazena um valor deste tipo Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
  • 90. Arranjos: Recapitulando Um arranjo ´e definido como tipo[] Se tipo ´e um tipo primitivo (int, double, char...) cada elemento tem o tamanho deste tipo primitivo cada elemento armazena um valor deste tipo Se tipo ´e um tipo abstrato (uma classe, por exemplo) Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
  • 91. Arranjos: Recapitulando Um arranjo ´e definido como tipo[] Se tipo ´e um tipo primitivo (int, double, char...) cada elemento tem o tamanho deste tipo primitivo cada elemento armazena um valor deste tipo Se tipo ´e um tipo abstrato (uma classe, por exemplo) cada elemento tem o tamanho de uma referˆencia (endere¸co) Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
  • 92. Arranjos: Recapitulando Um arranjo ´e definido como tipo[] Se tipo ´e um tipo primitivo (int, double, char...) cada elemento tem o tamanho deste tipo primitivo cada elemento armazena um valor deste tipo Se tipo ´e um tipo abstrato (uma classe, por exemplo) cada elemento tem o tamanho de uma referˆencia (endere¸co) cada elemento armazena a referˆencia para um objeto de tipo tipo Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 21 / 25
  • 93. Arranjos de Objetos Voltemos ent˜ao ao c´odigo de Projeto class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); for (Residencia re : proj.condominio) { System.out.println("Endere¸co do objeto: " +re); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 22 / 25
  • 94. Arranjos de Objetos Voltemos ent˜ao ao c´odigo de Projeto condominio ´e arranjo de objetos class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); for (Residencia re : proj.condominio) { System.out.println("Endere¸co do objeto: " +re); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 22 / 25
  • 95. Arranjos de Objetos Voltemos ent˜ao ao c´odigo de Projeto condominio ´e arranjo de objetos Arranjo de endere¸cos de mem´oria class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); for (Residencia re : proj.condominio) { System.out.println("Endere¸co do objeto: " +re); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 22 / 25
  • 96. Arranjos de Objetos Voltemos ent˜ao ao c´odigo de Projeto condominio ´e arranjo de objetos Arranjo de endere¸cos de mem´oria O que acontece quando o alocamos sem inicializar? class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); for (Residencia re : proj.condominio) { System.out.println("Endere¸co do objeto: " +re); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 22 / 25
  • 97. Arranjos de Objetos O compilador ir´a inicializ´a-lo com um valor padr˜ao class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); for (Residencia re : proj.condominio) { System.out.println("Endere¸co do objeto: " +re); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 23 / 25
  • 98. Arranjos de Objetos O compilador ir´a inicializ´a-lo com um valor padr˜ao null – o endere¸co nulo class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); for (Residencia re : proj.condominio) { System.out.println("Endere¸co do objeto: " +re); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 23 / 25
  • 99. Arranjos de Objetos O compilador ir´a inicializ´a-lo com um valor padr˜ao null – o endere¸co nulo Sa´ıda do main: $ java Projeto Endere¸co do objeto: null Endere¸co do objeto: null Endere¸co do objeto: null class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); for (Residencia re : proj.condominio) { System.out.println("Endere¸co do objeto: " +re); } } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 23 / 25
  • 100. Arranjos de Objetos class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); } } Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
  • 101. Arranjos de Objetos class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); System.out.println(proj.condominio[1].casa.area()); } } Podemos acessar um ´unico elemento do arranjo Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
  • 102. Arranjos de Objetos class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); System.out.println(proj.condominio[1].casa.area()); } } Podemos acessar um ´unico elemento do arranjo M´etodo area Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
  • 103. Arranjos de Objetos class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); System.out.println(proj.condominio[1].casa.area()); } } Podemos acessar um ´unico elemento do arranjo M´etodo area do objeto casa Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
  • 104. Arranjos de Objetos class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); System.out.println(proj.condominio[1].casa.area()); } } Podemos acessar um ´unico elemento do arranjo M´etodo area do objeto casa do segundo objeto de condominio (classe Residencia) Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25
  • 105. Arranjos de Objetos class Projeto { Residencia[] condominio; int ultimo = -1; // ´ultimo alocado boolean adicionaRes(Residencia r) { if (this.ultimo < this.condominio.length-1) { ultimo++; this.condominio[ultimo] = r; return(true); } return(false); } Projeto(int tam) { condominio = new Residencia[tam]; } public static void main(String[] args) { Projeto proj = new Projeto(3); AreaCasa c = new AreaCasa(10,5); AreaPiscina p = new AreaPiscina(5); Residencia r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(12,7); p = new AreaPiscina(6); r = new Residencia(c, p); proj.adicionaRes(r); c = new AreaCasa(10,6); p = new AreaPiscina(3.5); r = new Residencia(c, p); proj.adicionaRes(r); System.out.println(proj.condominio[1].casa.area()); } } Podemos acessar um ´unico elemento do arranjo M´etodo area do objeto casa do segundo objeto de condominio (classe Residencia) do objeto proj Norton Trevisan Roman Aula 15 – Classes e Arranjos 30 de mar¸co de 2020 24 / 25