SlideShare uma empresa Scribd logo
1 de 131
Baixar para ler offline
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Objetos em Java
Como?
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 10 / 35
Objetos em Java
Como?
Criando objetos!
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 10 / 35
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Construtores
Construtores
Construtores s˜ao m´etodos chamados quando da cria¸c˜ao
do objeto
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 21 / 35
Construtores
Construtores
Construtores s˜ao m´etodos chamados quando da cria¸c˜ao
do objeto
Servem para inicializa¸c˜ao de atributos
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 21 / 35
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
This
Tamb´em usada para
substituir algum outro
construtor
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 28 / 35
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Videoaula
https://www.youtube.com/watch?v=yAl4m5hvaAU
e
https://www.youtube.com/watch?v=C-2jVnvSI_U
Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 35 / 35

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

O Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhosoO Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhoso
VALMIRARIBEIRO1
 
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdfHistoria-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
andreaLisboa7
 
Manual dos Principio básicos do Relacionamento e sexologia humana .pdf
Manual dos Principio básicos do Relacionamento e sexologia humana .pdfManual dos Principio básicos do Relacionamento e sexologia humana .pdf
Manual dos Principio básicos do Relacionamento e sexologia humana .pdf
Pastor Robson Colaço
 

Último (20)

Livro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-criançasLivro infantil: A onda da raiva. pdf-crianças
Livro infantil: A onda da raiva. pdf-crianças
 
Campanha 18 de. Maio laranja dds.pptx
Campanha 18 de.    Maio laranja dds.pptxCampanha 18 de.    Maio laranja dds.pptx
Campanha 18 de. Maio laranja dds.pptx
 
Descrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamenteDescrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamente
 
O Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhosoO Reizinho Autista.pdf - livro maravilhoso
O Reizinho Autista.pdf - livro maravilhoso
 
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....
 
Apresentação sobre Robots e processos educativos
Apresentação sobre Robots e processos educativosApresentação sobre Robots e processos educativos
Apresentação sobre Robots e processos educativos
 
Planejamento 2024 - 1º ano - Matemática 38 a 62.pdf
Planejamento 2024 - 1º ano - Matemática  38 a 62.pdfPlanejamento 2024 - 1º ano - Matemática  38 a 62.pdf
Planejamento 2024 - 1º ano - Matemática 38 a 62.pdf
 
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
 
Alemanha vs União Soviética - Livro de Adolf Hitler
Alemanha vs União Soviética - Livro de Adolf HitlerAlemanha vs União Soviética - Livro de Adolf Hitler
Alemanha vs União Soviética - Livro de Adolf Hitler
 
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos AnimaisNós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
Nós Propomos! Canil/Gatil na Sertã - Amigos dos Animais
 
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
 
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdfHistoria-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
Historia-em-cartaz-Lucas-o-menino-que-aprendeu-a-comer-saudavel- (1).pdf
 
Abuso Sexual da Criança e do adolescente
Abuso Sexual da Criança e do adolescenteAbuso Sexual da Criança e do adolescente
Abuso Sexual da Criança e do adolescente
 
análise obra Nós matamos o cão Tinhoso.pdf
análise obra Nós matamos o cão Tinhoso.pdfanálise obra Nós matamos o cão Tinhoso.pdf
análise obra Nós matamos o cão Tinhoso.pdf
 
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...
 
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHASMARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
MARCHA HUMANA. UM ESTUDO SOBRE AS MARCHAS
 
"Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande""Nós Propomos! Escola Secundária em Pedrógão Grande"
"Nós Propomos! Escola Secundária em Pedrógão Grande"
 
Manual dos Principio básicos do Relacionamento e sexologia humana .pdf
Manual dos Principio básicos do Relacionamento e sexologia humana .pdfManual dos Principio básicos do Relacionamento e sexologia humana .pdf
Manual dos Principio básicos do Relacionamento e sexologia humana .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
 

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

  • 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
  • 24. Objetos em Java Como? Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 10 / 35
  • 25. Objetos em Java Como? Criando objetos! Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 10 / 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
  • 86. Construtores Construtores Construtores s˜ao m´etodos chamados quando da cria¸c˜ao do objeto Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 21 / 35
  • 87. Construtores Construtores Construtores s˜ao m´etodos chamados quando da cria¸c˜ao do objeto Servem para inicializa¸c˜ao de atributos Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 21 / 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
  • 109. This Tamb´em usada para substituir algum outro construtor Norton Trevisan Roman Aula 14 – Classes 30 de mar¸co de 2020 28 / 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