1. Aula 14 – Classes
Norton Trevisan Roman
30 de mar¸co de 2020
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 1 / 35
2. Classes em Java
Queremos agora
calcular a ´area de 2
casas em regi˜oes
geogr´aficas
diferentes
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 2 / 35
3. Classes em Java
Queremos agora
calcular a ´area de 2
casas em regi˜oes
geogr´aficas
diferentes
Problema: o pre¸co do
m2
´e diferente entre as
regi˜oes
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 2 / 35
4. Classes em Java
Queremos agora
calcular a ´area de 2
casas em regi˜oes
geogr´aficas
diferentes
Problema: o pre¸co do
m2
´e diferente entre as
regi˜oes
Como fazer?
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 2 / 35
5. Classes em Java
Queremos agora
calcular a ´area de 2
casas em regi˜oes
geogr´aficas
diferentes
Problema: o pre¸co do
m2
´e diferente entre as
regi˜oes
Como fazer?
class Projeto {
...
public static void main(String[] args) {
double valorM2_ant = AreaCasa.valorM2;
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
// novo valor do m2
AreaCasa.valorM2 = 1270;
// pre¸co da casa 2 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
// restauro o valor anterior
AreaCasa.valorM2 = valorM2_ant;
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 2 / 35
6. Classes em Java
Guardamos o valor
anterior
class Projeto {
...
public static void main(String[] args) {
double valorM2_ant = AreaCasa.valorM2;
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
// novo valor do m2
AreaCasa.valorM2 = 1270;
// pre¸co da casa 2 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
// restauro o valor anterior
AreaCasa.valorM2 = valorM2_ant;
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 3 / 35
7. Classes em Java
Guardamos o valor
anterior
Modificamos o valor
do m2
class Projeto {
...
public static void main(String[] args) {
double valorM2_ant = AreaCasa.valorM2;
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
// novo valor do m2
AreaCasa.valorM2 = 1270;
// pre¸co da casa 2 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
// restauro o valor anterior
AreaCasa.valorM2 = valorM2_ant;
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 3 / 35
8. Classes em Java
Guardamos o valor
anterior
Modificamos o valor
do m2
Restauramos o valor
anterior
class Projeto {
...
public static void main(String[] args) {
double valorM2_ant = AreaCasa.valorM2;
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
// novo valor do m2
AreaCasa.valorM2 = 1270;
// pre¸co da casa 2 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
// restauro o valor anterior
AreaCasa.valorM2 = valorM2_ant;
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 3 / 35
9. Classes em Java
Trabalhoso e
Perigoso!
class Projeto {
...
public static void main(String[] args) {
double valorM2_ant = AreaCasa.valorM2;
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
// novo valor do m2
AreaCasa.valorM2 = 1270;
// pre¸co da casa 2 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
// restauro o valor anterior
AreaCasa.valorM2 = valorM2_ant;
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 4 / 35
10. Classes em Java
Trabalhoso e
Perigoso!
`A medida em que o
programa cresce,
podemos esquecer
de restaurar o valor
original
class Projeto {
...
public static void main(String[] args) {
double valorM2_ant = AreaCasa.valorM2;
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
// novo valor do m2
AreaCasa.valorM2 = 1270;
// pre¸co da casa 2 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
// restauro o valor anterior
AreaCasa.valorM2 = valorM2_ant;
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 4 / 35
11. Classes em Java
Podemos ent˜ao
mudar vari´aveis em
outras classes?
class Projeto {
...
public static void main(String[] args) {
double valorM2_ant = AreaCasa.valorM2;
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
// novo valor do m2
AreaCasa.valorM2 = 1270;
// pre¸co da casa 2 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
// restauro o valor anterior
AreaCasa.valorM2 = valorM2_ant;
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 5 / 35
12. Classes em Java
Podemos ent˜ao
mudar vari´aveis em
outras classes?
Nem sempre, mas
nesse caso, sim.
class Projeto {
...
public static void main(String[] args) {
double valorM2_ant = AreaCasa.valorM2;
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
// novo valor do m2
AreaCasa.valorM2 = 1270;
// pre¸co da casa 2 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
// restauro o valor anterior
AreaCasa.valorM2 = valorM2_ant;
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 5 / 35
13. Classes em Java
Como ´e poss´ıvel
conseguirmos
mudar o valor em
AreaCasa?
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 6 / 35
14. Classes em Java
Como ´e poss´ıvel
conseguirmos
mudar o valor em
AreaCasa?
Considere o
c´odigo de
Projeto:
public static void main(String[] args) {
...
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 6 / 35
15. Classes em Java
Ao chamarmos
AreaCasa pela primeira
vez, reservamos
mem´oria para seus
atributos e para o
m´etodo chamado,
atualizando os
parˆametros
public static void main(String[] args) {
...
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
...
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 7 / 35
16. Classes em Java
Ao chamarmos
AreaCasa pela primeira
vez, reservamos
mem´oria para seus
atributos e para o
m´etodo chamado,
atualizando os
parˆametros
public static void main(String[] args) {
...
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
...
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 7 / 35
17. Classes em Java
Ao chamarmos pela
segunda vez, alocamos
apenas para o m´etodo
public static void main(String[] args) {
...
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
...
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
375
valor
area
0xaa2
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 8 / 35
18. Classes em Java
Ao chamarmos pela
segunda vez, alocamos
apenas para o m´etodo
Atualizamos ent˜ao os
parˆametros
public static void main(String[] args) {
...
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
...
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 8 / 35
19. Classes em Java
Ao chamarmos pela
segunda vez, alocamos
apenas para o m´etodo
Atualizamos ent˜ao os
parˆametros
Ao atualizarmos o
campo valorM2,
simplesmente
colocamos valor
naquela regi˜ao de
mem´oria
public static void main(String[] args) {
...
// pre¸co da casa 1 (sem piscina)
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
...
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1270
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 8 / 35
20. Objetos em Java
Deixar o programa assim, al´em de trabalhoso, ´e
potencialmente perigoso, `a medida que o programa
cresce
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 9 / 35
21. Objetos em Java
Deixar o programa assim, al´em de trabalhoso, ´e
potencialmente perigoso, `a medida que o programa
cresce
Qual a alternativa?
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 9 / 35
22. Objetos em Java
Deixar o programa assim, al´em de trabalhoso, ´e
potencialmente perigoso, `a medida que o programa
cresce
Qual a alternativa?
Fazer com que o valor do m2
seja algo intr´ınseco a cada casa
espec´ıfica.
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 9 / 35
23. Objetos em Java
Deixar o programa assim, al´em de trabalhoso, ´e
potencialmente perigoso, `a medida que o programa
cresce
Qual a alternativa?
Fazer com que o valor do m2
seja algo intr´ınseco a cada casa
espec´ıfica.
Cada casa teria seu pr´oprio valor de m2
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 9 / 35
26. Objetos em Java
Como?
Criando objetos!
Uma entidade que represente uma ´unica casa na mem´oria
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 10 / 35
27. Objetos em Java
Como?
Criando objetos!
Uma entidade que represente uma ´unica casa na mem´oria
Classe → especifica¸c˜ao do c´odigo
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 10 / 35
28. Objetos em Java
Como?
Criando objetos!
Uma entidade que represente uma ´unica casa na mem´oria
Classe → especifica¸c˜ao do c´odigo
Papel desempenhado por atores
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 10 / 35
29. Objetos em Java
Como?
Criando objetos!
Uma entidade que represente uma ´unica casa na mem´oria
Classe → especifica¸c˜ao do c´odigo
Papel desempenhado por atores
Objeto → entidade na mem´oria que usa esse c´odigo
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 10 / 35
30. Objetos em Java
Como?
Criando objetos!
Uma entidade que represente uma ´unica casa na mem´oria
Classe → especifica¸c˜ao do c´odigo
Papel desempenhado por atores
Objeto → entidade na mem´oria que usa esse c´odigo
Cada ator espec´ıfico
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 10 / 35
31. Objetos em Java
Como?
Criando objetos!
Uma entidade que represente uma ´unica casa na mem´oria
Classe → especifica¸c˜ao do c´odigo
Papel desempenhado por atores
Objeto → entidade na mem´oria que usa esse c´odigo
Cada ator espec´ıfico
Diz-se que objetos instanciam as (s˜ao instˆancias das) classes
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 10 / 35
32. Classe × Objeto
Atributos e M´etodos da
classe:
Atributos e M´etodos do
objeto:
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 11 / 35
33. Classe × Objeto
Atributos e M´etodos da
classe:
S˜ao vis´ıveis dentro de
toda a classe
Atributos e M´etodos do
objeto:
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 11 / 35
34. Classe × Objeto
Atributos e M´etodos da
classe:
S˜ao vis´ıveis dentro de
toda a classe
Atributos e M´etodos do
objeto:
S˜ao vis´ıveis apenas pelo
objeto da classe
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 11 / 35
35. Classe × Objeto
Atributos e M´etodos da
classe:
S˜ao vis´ıveis dentro de
toda a classe
Podem tornar-se
vis´ıveis por outras
classes
Atributos e M´etodos do
objeto:
S˜ao vis´ıveis apenas pelo
objeto da classe
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 11 / 35
36. Classe × Objeto
Atributos e M´etodos da
classe:
S˜ao vis´ıveis dentro de
toda a classe
Podem tornar-se
vis´ıveis por outras
classes
Atributos e M´etodos do
objeto:
S˜ao vis´ıveis apenas pelo
objeto da classe
N˜ao s˜ao vis´ıveis por
outras classes (a n˜ao
ser via um objeto)
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 11 / 35
37. Classe × Objeto
Atributos e M´etodos da
classe:
S˜ao vis´ıveis dentro de
toda a classe
Podem tornar-se
vis´ıveis por outras
classes
Utilizam a palavra
reservada static
Atributos e M´etodos do
objeto:
S˜ao vis´ıveis apenas pelo
objeto da classe
N˜ao s˜ao vis´ıveis por
outras classes (a n˜ao
ser via um objeto)
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 11 / 35
38. Classe × Objeto
Atributos e M´etodos da
classe:
S˜ao vis´ıveis dentro de
toda a classe
Podem tornar-se
vis´ıveis por outras
classes
Utilizam a palavra
reservada static
Atributos e M´etodos do
objeto:
S˜ao vis´ıveis apenas pelo
objeto da classe
N˜ao s˜ao vis´ıveis por
outras classes (a n˜ao
ser via um objeto)
N˜ao podem ser static
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 11 / 35
39. Classe × Objeto
Atributos e M´etodos da
classe:
Atributos e M´etodos do
objeto:
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 12 / 35
40. Classe × Objeto
Atributos e M´etodos da
classe:
class AreaCasa {
static double valorM2 = 1500;
static double area(double lateral,
double cquarto) {
...
}
static double valor(double area) {
...
}
}
Atributos e M´etodos do
objeto:
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 12 / 35
41. Classe × Objeto
Atributos e M´etodos da
classe:
class AreaCasa {
static double valorM2 = 1500;
static double area(double lateral,
double cquarto) {
...
}
static double valor(double area) {
...
}
}
Atributos e M´etodos do
objeto:
class AreaCasa {
double valorM2 = 1500;
double area(double lateral,
double cquarto) {
...
}
double valor(double area) {
...
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 12 / 35
42. Classes
Atributos e M´etodos
da classe:
class AreaCasa {
static double valorM2 = 1500;
static double area(double lateral,
double cquarto) {
...
}
static double valor(double area) {
...
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 13 / 35
43. Classes
Atributos e M´etodos
da classe:
Acessados com
NomeDaClasse.
metodo
class AreaCasa {
static double valorM2 = 1500;
static double area(double lateral,
double cquarto) {
...
}
static double valor(double area) {
...
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 13 / 35
44. Classes
Atributos e M´etodos
da classe:
Acessados com
NomeDaClasse.
metodo
class AreaCasa {
static double valorM2 = 1500;
static double area(double lateral,
double cquarto) {
...
}
static double valor(double area) {
...
}
}
class Projeto {
...
public static void main(String[] args) {
System.out.println( AreaCasa.valor(
AreaCasa.area(15,10)) );
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 13 / 35
45. Objetos
Atributos e M´etodos
do objeto:
class AreaCasa {
double valorM2 = 1500;
double area(double lateral,double cquarto)
{
...
}
double valor(double area) {
...
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 14 / 35
46. Objetos
Atributos e M´etodos
do objeto:
Deve-se criar um
objeto
class AreaCasa {
double valorM2 = 1500;
double area(double lateral,double cquarto)
{
...
}
double valor(double area) {
...
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 14 / 35
47. Objetos
Atributos e M´etodos
do objeto:
Deve-se criar um
objeto
Ent˜ao acess´a-lo com
nome do objeto.
m´etodo
class AreaCasa {
double valorM2 = 1500;
double area(double lateral,double cquarto)
{
...
}
double valor(double area) {
...
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 14 / 35
48. Objetos
Atributos e M´etodos
do objeto:
Deve-se criar um
objeto
Ent˜ao acess´a-lo com
nome do objeto.
m´etodo
class AreaCasa {
double valorM2 = 1500;
double area(double lateral,double cquarto)
{
...
}
double valor(double area) {
...
}
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 14 / 35
49. Objetos
Atributos e M´etodos
do objeto:
Deve-se criar um
objeto
Ent˜ao acess´a-lo com
nome do objeto.
m´etodo
class AreaCasa {
double valorM2 = 1500;
double area(double lateral,double cquarto)
{
...
}
double valor(double area) {
...
}
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 14 / 35
50. Comportamento na mem´oria
class AreaCasa {
static double valorM2 = 1500;
static double area(double lateral,
double cquarto)...
static double valor(double area) ...
}
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
}
}
class AreaCasa {
double valorM2 = 1500;
double area(double lateral,
double cquarto) ...
double valor(double area) ...
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 15 / 35
51. Comportamento na mem´oria
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 16 / 35
52. Comportamento na mem´oria
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Projeto
main
args
0x23f
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 16 / 35
53. Comportamento na mem´oria
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Projeto
main
args
0x23f
Projeto
main
args
0x23f
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 16 / 35
54. Comportamento na mem´oria
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Projeto
main
args
0x23f
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 16 / 35
55. Comportamento na mem´oria
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 16 / 35
56. Comportamento na mem´oria
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 16 / 35
57. Comportamento na mem´oria
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 16 / 35
58. Comportamento na mem´oria
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
System.out.println(casa1.valor(
casa1.area(15,10)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 16 / 35
59. Objetos em Java
Note que: Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 17 / 35
60. Objetos em Java
Note que:
Enquanto AreaCasa ´e
vis´ıvel por todos, casa1
s´o ´e vista dentro do main
de Projeto
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 17 / 35
61. Objetos em Java
Note que:
Enquanto AreaCasa ´e
vis´ıvel por todos, casa1
s´o ´e vista dentro do main
de Projeto
Esse ´e seu escopo
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 17 / 35
62. Objetos em Java
Note que:
Enquanto AreaCasa ´e
vis´ıvel por todos, casa1
s´o ´e vista dentro do main
de Projeto
Esse ´e seu escopo
Projeto nada mais ´e que
mais uma classe dentro do
programa (tamb´em
chamado de processo)
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 17 / 35
63. Objetos em Java
Note que:
Enquanto AreaCasa ´e
vis´ıvel por todos, casa1
s´o ´e vista dentro do main
de Projeto
Esse ´e seu escopo
Projeto nada mais ´e que
mais uma classe dentro do
programa (tamb´em
chamado de processo)
Pode ser chamada por
outras classes, como
AreaCasa ou AreaPiscina
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 17 / 35
64. Objetos em Java
Note que:
Embora bastante
semelhantes, as diferen¸cas
ocorrem quando criamos
mais de um objeto
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 18 / 35
65. Objetos em Java
Note que:
Embora bastante
semelhantes, as diferen¸cas
ocorrem quando criamos
mais de um objeto
Podemos sim ter mais de
um objeto de uma mesma
classe
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 18 / 35
66. Objetos em Java
Note que:
Embora bastante
semelhantes, as diferen¸cas
ocorrem quando criamos
mais de um objeto
Podemos sim ter mais de
um objeto de uma mesma
classe
Ocupar˜ao por¸c˜oes
diferentes da mem´oria
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 18 / 35
67. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
68. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
69. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
Projeto
main
args
0x23f
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
70. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Projeto
main
args
0x23f
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
71. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad (0x0ad)
valorM2
0xf05
1500
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
72. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
casa2
0x2af
0x44f
(0x0ad)
valorM2
0xf05
1500
(0x44f)
valorM2
0xfaa
1500
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
73. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
casa2
0x2af
0x44f
(0x0ad)
valorM2
0xf05
1500
(0x44f)
valorM2
0xfaa
1270
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
74. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
casa2
0x2af
0x44f
(0x0ad)
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
(0x44f)
valorM2
0xfaa
1270
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
75. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
casa2
0x2af
0x44f
(0x0ad)
valorM2
0xf05
1500
area
lateral
0xfff
15 cquarto
0xfaf
10 areat
0x005
(0x44f)
valorM2
0xfaa
1270
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
76. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1500
valor
area
0xaa2
375
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
casa2
0x2af
0x44f
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
(0x44f)
valorM2
0xfaa
1270
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
77. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1270
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
casa2
0x2af
0x44f
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
(0x44f)
valorM2
0xfaa
1270
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
78. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1270
area
lateral
0xfff
18 cquarto
0xfaf
8 areat
0x005
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
casa2
0x2af
0x44f
(0x0ad)
valorM2
0xf05
1500
valor
area
0xaa2
375
(0x44f)
valorM2
0xfaa
1270
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
79. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1270
area
lateral
0xfff
18 cquarto
0xfaf
8 areat
0x005
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
casa2
0x2af
0x44f
(0x0ad)
valorM2
0xf05
1500
(0x44f)
valorM2
0xfaa
1270
area
lateral
0xf11
18 cquarto
0x25f
8 areat
0x23a
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
80. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1270
valor
area
0xaa2
468
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
casa2
0x2af
0x44f
(0x0ad)
valorM2
0xf05
1500
(0x44f)
valorM2
0xfaa
1270
area
lateral
0xf11
18 cquarto
0x25f
8 areat
0x23a
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
81. Mem´oria com mais de um objeto
class Projeto {
...
public static void main(String[] args)
{
System.out.println(AreaCasa.valor(
AreaCasa.area(15,10)));
AreaCasa.valorM2 = 1270;
System.out.println(AreaCasa.valor(
AreaCasa.area(18,8)));
}
}
class Projeto {
...
public static void main(String[] args)
{
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Projeto
main
args
0x23f
AreaCasa
valorM2
0xf05
1270
valor
area
0xaa2
468
Projeto
main
args
0x23f
casa1
0x2fa
0x0ad
casa2
0x2af
0x44f
(0x0ad)
valorM2
0xf05
1500
(0x44f)
valorM2
0xfaa
1270
valor
area
0xf2f
468
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 19 / 35
82. Construtores
Revisitando a classe Projeto:
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 20 / 35
83. Construtores
Revisitando a classe Projeto:
Tivemos que mudar o
valor do m2
ap´os
criarmos o objeto
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 20 / 35
84. Construtores
Revisitando a classe Projeto:
Tivemos que mudar o
valor do m2
ap´os
criarmos o objeto
Seria interessante
fornecermos esse valor
ao criarmos o objeto
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 20 / 35
85. Construtores
Revisitando a classe Projeto:
Tivemos que mudar o
valor do m2
ap´os
criarmos o objeto
Seria interessante
fornecermos esse valor
ao criarmos o objeto
Como?
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa();
casa2.valorM2 = 1270;
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println(casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 20 / 35
88. Construtores
Construtores
Construtores s˜ao m´etodos chamados quando da cria¸c˜ao
do objeto
Servem para inicializa¸c˜ao de atributos
Ou execu¸c˜ao de algum m´etodo, antes de qualquer
outra coisa
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 21 / 35
89. Construtores
Construtores
Construtores s˜ao m´etodos chamados quando da cria¸c˜ao
do objeto
Servem para inicializa¸c˜ao de atributos
Ou execu¸c˜ao de algum m´etodo, antes de qualquer
outra coisa
Toda classe tem seu construtor
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 21 / 35
90. Construtores
Construtores
Construtores s˜ao m´etodos chamados quando da cria¸c˜ao
do objeto
Servem para inicializa¸c˜ao de atributos
Ou execu¸c˜ao de algum m´etodo, antes de qualquer
outra coisa
Toda classe tem seu construtor
Se n˜ao for explicitamente declarado, o Java fornecer´a um
padr˜ao
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 21 / 35
91. Construtores
Construtores s˜ao
definidos com o
mesmo nome da
classe
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa(1500);
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 22 / 35
92. Construtores
Construtores s˜ao
definidos com o
mesmo nome da
classe
Com qualquer
n´umero de atributos
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa(1500);
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 22 / 35
93. Construtores
Construtores s˜ao
definidos com o
mesmo nome da
classe
Com qualquer
n´umero de atributos
Executando qualquer
c´odigo dentro dele
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa(1500);
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 22 / 35
94. Construtores
Permitem que se crie
o objeto com o
atributo atualizado
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa(1500);
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 23 / 35
95. Construtores
Permitem que se crie
o objeto com o
atributo atualizado
Reduzem a
possibilidade de
erros
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa(1500);
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 23 / 35
96. Construtores
Permitem que se crie
o objeto com o
atributo atualizado
Reduzem a
possibilidade de
erros
Deixam mais leg´ıvel
o c´odigo
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa(1500);
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 23 / 35
97. Construtores
Por que tivemos que
por o 1500?
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa(1500);
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 24 / 35
98. Construtores
Por que tivemos que
por o 1500?
E se fiz´essemos:
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 24 / 35
99. Construtores
Por que tivemos que
por o 1500?
E se fiz´essemos:
Projeto.java:24: cannot find symbol
symbol : constructor AreaCasa()
location: class AreaCasa
AreaCasa casa1 = new AreaCasa();
^
1 error
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 24 / 35
100. Construtores
Quando ´e definido
um construtor, n˜ao ´e
mais poss´ıvel usar o
construtor padr˜ao
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 25 / 35
101. Construtores
Quando ´e definido
um construtor, n˜ao ´e
mais poss´ıvel usar o
construtor padr˜ao
(O construtor sem
parˆametros)
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 25 / 35
102. Construtores
A menos que
implementemos um:
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa() {}
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 26 / 35
103. Construtores
A menos que
implementemos um:
Uma classe pode ter
mais de um
construtor
class AreaCasa {
/* valor do metro quadrado da casa */
double valorM2 = 1500;
AreaCasa() {}
AreaCasa(double val) {
valorM2 = val;
}
...
}
class Projeto {
...
public static void main(String[] args) {
AreaCasa casa1 = new AreaCasa();
AreaCasa casa2 = new AreaCasa(1270);
System.out.println(casa1.valor(
casa1.area(15,10)));
System.out.println( casa2.valor(
casa2.area(18,8)));
}
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 26 / 35
104. This
E se mudarmos o nome do
parˆametro, o que
acontece?
class AreaCasa {
double valorM2 = 1500;
AreaCasa() {}
AreaCasa(double valorM2) {
valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 27 / 35
105. This
E se mudarmos o nome do
parˆametro, o que
acontece?
O compilador modifica o
parˆametro, n˜ao o atributo
class AreaCasa {
double valorM2 = 1500;
AreaCasa() {}
AreaCasa(double valorM2) {
valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 27 / 35
106. This
E se mudarmos o nome do
parˆametro, o que
acontece?
O compilador modifica o
parˆametro, n˜ao o atributo
Que fazer?
class AreaCasa {
double valorM2 = 1500;
AreaCasa() {}
AreaCasa(double valorM2) {
valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 27 / 35
107. This
E se mudarmos o nome do
parˆametro, o que
acontece?
O compilador modifica o
parˆametro, n˜ao o atributo
Que fazer?
class AreaCasa {
double valorM2 = 1500;
AreaCasa() {}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 27 / 35
108. This
E se mudarmos o nome do
parˆametro, o que
acontece?
O compilador modifica o
parˆametro, n˜ao o atributo
Que fazer?
this ´e uma referˆencia ao
pr´oprio objeto
class AreaCasa {
double valorM2 = 1500;
AreaCasa() {}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 27 / 35
110. This
Tamb´em usada para
substituir algum outro
construtor
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 28 / 35
111. This
Tamb´em usada para
substituir algum outro
construtor
Ocupa mem´oria no objeto
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 28 / 35
112. This
Tamb´em usada para
substituir algum outro
construtor
Ocupa mem´oria no objeto
Um atributo deste (que
exclu´ımos dos desenhos para
simplificar)
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 28 / 35
113. This
Tamb´em usada para
substituir algum outro
construtor
Ocupa mem´oria no objeto
Um atributo deste (que
exclu´ımos dos desenhos para
simplificar)
´Util em ambiguidades:
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
quando h´a dois elementos com mesmo nome
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 28 / 35
114. This
Tamb´em usada para
substituir algum outro
construtor
Ocupa mem´oria no objeto
Um atributo deste (que
exclu´ımos dos desenhos para
simplificar)
´Util em ambiguidades:
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
quando h´a dois elementos com mesmo nome
Do contr´ario pode ser omitida
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 28 / 35
115. M´ultiplos Construtores
Quando h´a mais de um
construtor na classe:
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 29 / 35
116. M´ultiplos Construtores
Quando h´a mais de um
construtor na classe:
Tˆem o mesmo nome –
diferem apenas nos
parˆametros
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 29 / 35
117. M´ultiplos Construtores
Quando h´a mais de um
construtor na classe:
Tˆem o mesmo nome –
diferem apenas nos
parˆametros
O compilador escolhe o
construtor correto conforme a
assinatura
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 29 / 35
118. M´ultiplos Construtores
A assinatura de um m´etodo ou
construtor corresponde a seu
nome, tipo dos parˆametros e
ordem dos parˆametros
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 30 / 35
119. M´ultiplos Construtores
A assinatura de um m´etodo ou
construtor corresponde a seu
nome, tipo dos parˆametros e
ordem dos parˆametros
O mesmo procedimento ´e
seguido com m´etodos de
mesmo nome, por´em com
parˆametros diferentes
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 30 / 35
120. M´ultiplos Construtores
A assinatura de um m´etodo ou
construtor corresponde a seu
nome, tipo dos parˆametros e
ordem dos parˆametros
O mesmo procedimento ´e
seguido com m´etodos de
mesmo nome, por´em com
parˆametros diferentes
Polimorfismo de nome
class AreaCasa {
double valorM2;
AreaCasa() {
this(1500.0);
}
AreaCasa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 30 / 35
121. M´ultiplos Construtores
Considere agora que o pre¸co dos materiais da
piscina deixar´a de ser um atributo da classe e
passar´a a ser um atributo dos objetos.
Poderemos ter diferentes pre¸cos por material para cada uma
das nossas piscinas.
Como ficaria AreaPiscina, nessa nova forma?
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 31 / 35
122. Classes e Objetos
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’}};
AreaPiscina() {
double[] aux = {1500, 1100, 750,
500};
this.precos = aux;
}
AreaPiscina(double[] precos) {
this.precos = precos;
}
double area(double raio) ...
double valor(double area, int material)
...
void carregaVal(double[][] m) ...
double[][] calculaFinal(double[][] val,
double[][] desc) ...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 32 / 35
123. Construtores
Repare no construtor
padr˜ao de
AreaPiscina:
class AreaPiscina {
...
double[] precos;
...
AreaPiscina() {
double[] aux = {1500, 1100,
750, 500};
this.precos = aux;
}
AreaPiscina(double[] precos) {
this.precos = precos;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 33 / 35
124. Construtores
Repare no construtor
padr˜ao de
AreaPiscina:
Tivemos que criar um
auxiliar, para usar o atalho
da inicializa¸c˜ao (os { })
class AreaPiscina {
...
double[] precos;
...
AreaPiscina() {
double[] aux = {1500, 1100,
750, 500};
this.precos = aux;
}
AreaPiscina(double[] precos) {
this.precos = precos;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 33 / 35
125. Construtores
Repare no construtor
padr˜ao de
AreaPiscina:
Tivemos que criar um
auxiliar, para usar o atalho
da inicializa¸c˜ao (os { })
Do contr´ario, ter´ıamos
que abastecer elemento
por elemento
class AreaPiscina {
...
double[] precos;
...
AreaPiscina() {
double[] aux = {1500, 1100,
750, 500};
this.precos = aux;
}
AreaPiscina(double[] precos) {
this.precos = precos;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 33 / 35
126. Construtores
Repare no construtor
padr˜ao de
AreaPiscina:
Tivemos que criar um
auxiliar, para usar o atalho
da inicializa¸c˜ao (os { })
Do contr´ario, ter´ıamos
que abastecer elemento
por elemento
Atribu´ımos diretamente o
novo arranjo a precos
class AreaPiscina {
...
double[] precos;
...
AreaPiscina() {
double[] aux = {1500, 1100,
750, 500};
this.precos = aux;
}
AreaPiscina(double[] precos) {
this.precos = precos;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 33 / 35
127. Construtores
N˜ao poder´ıamos ter
feito algo assim?
class AreaPiscina {
...
double[] precos;
...
AreaPiscina() {
double[] aux = {1500,1100,
750, 500};
this(aux);
}
AreaPiscina(double[] precos) {
this.precos = precos;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 34 / 35
128. Construtores
N˜ao poder´ıamos ter
feito algo assim?
call to this must be first
statement in constructor
this(aux);
^
1 error
class AreaPiscina {
...
double[] precos;
...
AreaPiscina() {
double[] aux = {1500,1100,
750, 500};
this(aux);
}
AreaPiscina(double[] precos) {
this.precos = precos;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 34 / 35
129. Construtores
N˜ao poder´ıamos ter
feito algo assim?
call to this must be first
statement in constructor
this(aux);
^
1 error
this, se usado para
referenciar um construtor,
deve sempre ser o primeiro
comando no construtor
class AreaPiscina {
...
double[] precos;
...
AreaPiscina() {
double[] aux = {1500,1100,
750, 500};
this(aux);
}
AreaPiscina(double[] precos) {
this.precos = precos;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 34 / 35
130. Construtores
N˜ao poder´ıamos ter
feito algo assim?
call to this must be first
statement in constructor
this(aux);
^
1 error
this, se usado para
referenciar um construtor,
deve sempre ser o primeiro
comando no construtor
Solu¸c˜ao:
class AreaPiscina {
...
double[] precos;
...
AreaPiscina() {
this(new double[] {1500,1100,
750,500});
}
AreaPiscina(double[] precos) {
this.precos = precos;
}
...
}
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 34 / 35