• Nenhum resultado encontrado

A Memória e as variáveis

N/A
N/A
Protected

Academic year: 2022

Share "A Memória e as variáveis"

Copied!
67
0
0

Texto

(1)

SISTEMAS DE INFORMAÇÃO

1 1

1 SISTEMAS DE 1

INFORMAÇÃO

1 SISTEMAS DE 1

INFORMAÇÃO

1 1

1

Professoras:

Ariane Machado Lima Fátima L.S. Nunes

A Memória e as

variáveis

(2)

SISTEMAS DE INFORMAÇÃO

2 2

2 SISTEMAS DE 2

INFORMAÇÃO

2 SISTEMAS DE 2

INFORMAÇÃO

2 2

2

O que vimos até agora

• Conceitos de POO usando Java

• Comandos de seleção (if...else, switch)

• Comandos de repetição (while, do...while)

• Variáveis int, double e boolean

• Caracteres e cadeias de caracteres

(3)

SISTEMAS DE INFORMAÇÃO

3 3

3 SISTEMAS DE 3

INFORMAÇÃO

3 SISTEMAS DE 3

INFORMAÇÃO

3 3

3

O que veremos nesta aula

• Aprofundamento na organização da memória do computador

• O que são variáveis

• Como Java trabalha com variáveis

• Passagem de parâmetro por valor x

passagem de parâmetro por referência

(4)

SISTEMAS DE INFORMAÇÃO

4 4

4 SISTEMAS DE 4

INFORMAÇÃO

4 SISTEMAS DE 4

INFORMAÇÃO

4 4

4

• Matemático húngaro que  desenvolveu modelos de 

computação que levou à arquitetura  do computador moderno.

• ?

1945

John Von Neumann

Relembrando a história

(5)

SISTEMAS DE INFORMAÇÃO

5 5

5 SISTEMAS DE 5

INFORMAÇÃO

5 SISTEMAS DE 5

INFORMAÇÃO

5 5

5

• Matemático húngaro que  desenvolveu modelos de 

computação que levou à arquitetura  do computador moderno.

• O programa deve ser guardado no  mesmo lugar que os dados: na 

memória.

1945

John Von Neumann

Relembrando a história

(6)

SISTEMAS DE INFORMAÇÃO

6 6

6 SISTEMAS DE 6

INFORMAÇÃO

6 SISTEMAS DE 6

INFORMAÇÃO

6 6

6

1945

Relembrando arquitetura do computador

ULA

UC

Registradores CPU

Memória

Disco Fita Impressora

Vídeo Teclado

Barramento de Sistema

Dispositivos de Entrada/Saída

Dispositivos de Entrada/Saída

(7)

SISTEMAS DE INFORMAÇÃO

7 7

7 SISTEMAS DE 7

INFORMAÇÃO

7 SISTEMAS DE 7

INFORMAÇÃO

7 7

7

Memória

 Comumente chamada de memória principal ou RAM

(Random Access Memory – memória de acesso aleatório).

 Usada para armazenar os programas a serem executados pelo computador e os dados

manipulados por esses programas.

 Consiste em uma sequência finita de unidades de armazenamento de dados, cada qual com o seu endereço.

 Normalmente implementada como um conjunto de

registradores implementados por flip-flops (circuitos

que armazenam um bit).

(8)

SISTEMAS DE INFORMAÇÃO

8 8

8 SISTEMAS DE 8

INFORMAÇÃO

8 SISTEMAS DE 8

INFORMAÇÃO

8 8

8

Memória

 Principal: RAM

 acesso mais rápido

 dados perdidos quando computador é desligado

 Secundária:

 discos rígidos ou flexíveis, CD, DVD, pendrive

 acesso mais lento

 persistência – dados permanentes

(9)

SISTEMAS DE INFORMAÇÃO

9 9

9 SISTEMAS DE 9

INFORMAÇÃO

9 SISTEMAS DE 9

INFORMAÇÃO

9 9

9

O que acontece quando acessamos o DrJava?

 DrJava também é um programa (ambiente para programação)

 Programa do ambiente é carregado do disco para memória principal

Código DrJava Código DrJava Código DrJava ...

Código DrJava 0000

0001 0002 0003

....

F...FF

(10)

SISTEMAS DE INFORMAÇÃO

10 10

10 SISTEMAS DE 10

INFORMAÇÃO

10 SISTEMAS DE 10

INFORMAÇÃO

10 10

10

O que acontece quando acessamos o DrJava?

 DrJava também é um programa (ambiente para programação)

 Programa do ambiente é carregado do disco para memória principal

0000 0001 0002 0003

....

FFFF

endereços

Endereços

Espaços de  armazenamento

Código DrJava Código DrJava Código DrJava ...

Código DrJava

(11)

SISTEMAS DE INFORMAÇÃO

11 11

11 SISTEMAS DE 11

INFORMAÇÃO

11 SISTEMAS DE 11

INFORMAÇÃO

11 11

11

O que acontece quando acessamos o DrJava?

 Todas as informações que digitamos no ambiente são armazenadas na memória

0000 0001 0002 0003

....

1010 F...FF

endereços

Código DrJava Código DrJava Código DrJava ...

Código DrJava

Classe GeradorDePrimos (continua com o código)

(12)

SISTEMAS DE INFORMAÇÃO

12 12

12 SISTEMAS DE 12

INFORMAÇÃO

12 SISTEMAS DE 12

INFORMAÇÃO

12 12

12

O que acontece quando acessamos o DrJava?

 Quando acionamos opção Salvar , os dados da memória principal são copiados para o disco

0000 0001 0002 0003

....

1010 F...FF

endereços

Código DrJava Código DrJava Código DrJava ...

Código DrJava

Classe GeradorDePrimos (continua com o código)

GeradorDePrimos.java

(13)

SISTEMAS DE INFORMAÇÃO

13 13

13 SISTEMAS DE 13

INFORMAÇÃO

13 SISTEMAS DE 13

INFORMAÇÃO

13 13

13

Como é a memória

 Cada endereço armazena um byte (8 bits): números de 0 a 255

 Combinando 2 posições adjacentes, é possível armazenar números de 16 bits

0000

0001 0002 0003

....

1010 F...FF

endereços

1ª parte do número 16 bits2ª parte do número 16 bits

(14)

SISTEMAS DE INFORMAÇÃO

14 14

14 SISTEMAS DE 14

INFORMAÇÃO

14 SISTEMAS DE 14

INFORMAÇÃO

14 14

14

Exemplo

 int : ocupa 4 bytes

 Exemplo: int contadorDeAluno;

0000 0001 0002 0003

....

1010 F...FF

endereços

Espaço reservado para a  variável 

contadorDeAluno

00000000

(15)

SISTEMAS DE INFORMAÇÃO

15 15

15 SISTEMAS DE 15

INFORMAÇÃO

15 SISTEMAS DE 15

INFORMAÇÃO

15 15

15

Armazenamento na memória

 Usando bytes adjacentes e outros tipos de codificação, é possível armazenar qualquer tipo de informação:

 números negativos e positivos

 textos

 imagens

 etc

 Tamanho da memória reflete no endereçamento

 Exemplo:

1GigaByte = 2

30

bytes = 1.073.741.824 bytes

0000 0001 0002 0003

....

230-2 230-1

(16)

SISTEMAS DE INFORMAÇÃO

16 16

16 SISTEMAS DE 16

INFORMAÇÃO

16 SISTEMAS DE 16

INFORMAÇÃO

16 16

16

Variáveis em Java

 Nomes associados a dados em um programa de computador

 Java: atributos de objetos e classes, parâmetros de métodos e variáveis locais

 Quando um programa é executado, cada variável é associada, em tempo de execução, a um determinado endereço de memória

0000 0001 0002 0003

....

1010 F...FF

endereços

Espaço reservado  para a variável  contadorDeAluno

int contadorDeAluno;

00000000

(17)

SISTEMAS DE INFORMAÇÃO

17 17

17 SISTEMAS DE 17

INFORMAÇÃO

17 SISTEMAS DE 17

INFORMAÇÃO

17 17

17

Variáveis em Java

 Quando atribuímos um valor para a variável, o valor ocupa o espaço reservado

0000 0001 0002 0003

....

1010 F...FF

endereços

00001010

Espaço reservado  para a variável  contadorDeAluno

contadorDeAluno = 10;

(18)

SISTEMAS DE INFORMAÇÃO

18 18

18 SISTEMAS DE 18

INFORMAÇÃO

18 SISTEMAS DE 18

INFORMAÇÃO

18 18

18

Variáveis em Java

 Importante:

 Variável de tipo primitivo (byte, short, int, float, double, boolean e char) tem comportamento diferente de

variáveis associadas a tipos abstratos (objetos complexos como Strings, arrays ou objetos

pertencentes a classes definidas pelo programador)

 Dados de tipos primitivos ocupam pouco espaço na

memória → é fácil guardar as posições de memória

correspondentes a eles

(19)

SISTEMAS DE INFORMAÇÃO

19 19

19 SISTEMAS DE 19

INFORMAÇÃO

19 SISTEMAS DE 19

INFORMAÇÃO

19 19

19

Variáveis em Java

 Importante:

 Variável de tipo primitivo (byte, short, int, float, double, boolean e char) tem comportamento diferente de

variáveis associadas a tipos abstratos (objetos complexos como Strings, arrays ou objetos

pertencentes a classes definidas pelo programador)

 Dados de tipos primitivos ocupam pouco espaço na memória → é fácil guardar as posições de memória correspondentes a eles

 Assim, se a e b são variáveis do mesmo tipo:

 a = b copia em a o valor que está em b

 copia o conteúdo!

(20)

SISTEMAS DE INFORMAÇÃO

20 20

20 SISTEMAS DE 20

INFORMAÇÃO

20 SISTEMAS DE 20

INFORMAÇÃO

20 20

20

Variáveis em Java

 Importante:

 Dizemos que a e b armazenam diretamente o seu conteúdo

0000

0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

ocupado anteriormente ocupado anteriormente

ocupado anteriormente

int a; Espaço reservado 

para variável a

00000000

(21)

SISTEMAS DE INFORMAÇÃO

21 21

21 SISTEMAS DE 21

INFORMAÇÃO

21 SISTEMAS DE 21

INFORMAÇÃO

21 21

21

Variáveis em Java

 Importante:

 Dizemos que a e b armazenam diretamente o seu conteúdo

0000

0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

ocupado anteriormente ocupado anteriormente

ocupado anteriormente

00000010

int b = 2; Espaço reservado 

para variável a

Espaço reservado  para variável b

00000000

(22)

SISTEMAS DE INFORMAÇÃO

22 22

22 SISTEMAS DE 22

INFORMAÇÃO

22 SISTEMAS DE 22

INFORMAÇÃO

22 22

22

Variáveis em Java

 Importante:

 Dizemos que a e b armazenam diretamente o seu conteúdo

0000

0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

ocupado anteriormente ocupado anteriormente

00000010 ocupado anteriormente

00000010

a = b; Espaço reservado 

para variável a

Espaço reservado 

para variável b

(23)

SISTEMAS DE INFORMAÇÃO

23 23

23 SISTEMAS DE 23

INFORMAÇÃO

23 SISTEMAS DE 23

INFORMAÇÃO

23 23

23

Variáveis em Java

 Por isso: dizemos que a mudança em um parâmetro de tipo primitivo dentro de um método não se reflete fora dele: variáveis locais

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

int y = 1;

obj.fazAlgo(y);

Espaço reservado  para variável y void fazAlgo (int x)

{

(…) x++;

(…) }

ocupado anteriormente ocupado anteriormente

00000010 ocupado anteriormente

(24)

SISTEMAS DE INFORMAÇÃO

24 24

24 SISTEMAS DE 24

INFORMAÇÃO

24 SISTEMAS DE 24

INFORMAÇÃO

24 24

24

Variáveis em Java

 Por isso: dizemos que a mudança em um parâmetro de tipo primitivo dentro de um método não se reflete fora dele: variáveis locais

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

int y = 1;

obj.fazAlgo(y);

Espaço reservado  para variável y void fazAlgo (int x)

{

(…) x++;

(…) }

ocupado anteriormente ocupado anteriormente

00000010 ocupado anteriormente

00000010

Espaço reservado 

para variável x

(25)

SISTEMAS DE INFORMAÇÃO

25 25

25 SISTEMAS DE 25

INFORMAÇÃO

25 SISTEMAS DE 25

INFORMAÇÃO

25 25

25

Variáveis em Java

 Por isso: dizemos que a mudança em um parâmetro de tipo primitivo dentro de um método não se reflete fora dele: variáveis locais

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

int y = 1;

obj.fazAlgo(y);

Espaço reservado  para variável y void fazAlgo (int x)

{

(…) x++;

(…) }

ocupado anteriormente ocupado anteriormente

00000010 ocupado anteriormente

00000011

Espaço reservado 

para variável x

(26)

SISTEMAS DE INFORMAÇÃO

26 26

26 SISTEMAS DE 26

INFORMAÇÃO

26 SISTEMAS DE 26

INFORMAÇÃO

26 26

26

Variáveis em Java

 Por isso: dizemos que a mudança em um parâmetro de tipo primitivo dentro de um método não se reflete fora dele: variáveis locais

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

int y = 1;

obj.fazAlgo(y);

Espaço reservado  para variável y void fazAlgo (int x)

{

(…) x++;

(…) }

ocupado anteriormente ocupado anteriormente

00000010 ocupado anteriormente

(27)

SISTEMAS DE INFORMAÇÃO

27 27

27 SISTEMAS DE 27

INFORMAÇÃO

27 SISTEMAS DE 27

INFORMAÇÃO

27 27

27

Variáveis em Java

 Passagem de parâmetro por VALOR: o argumento é avaliado e COPIADO para o parâmetro

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

int y = 1;

obj.fazAlgo(y);

Espaço reservado  para variável y void fazAlgo (int x)

{

(…) x++;

(…) }

ocupado anteriormente ocupado anteriormente

00000010 ocupado anteriormente

(28)

SISTEMAS DE INFORMAÇÃO

28 28

28 SISTEMAS DE 28

INFORMAÇÃO

28 SISTEMAS DE 28

INFORMAÇÃO

28 28

28

Variáveis em Java

 Passagem de parâmetro por VALOR: o argumento é avaliado e COPIADO para o parâmetro

int y = 1;

obj.fazAlgo((y*4) % 3);

void fazAlgo (int x) {

(…) x++;

(…)

} Avaliado!!!!

(29)

SISTEMAS DE INFORMAÇÃO

29 29

29 SISTEMAS DE 29

INFORMAÇÃO

29 SISTEMAS DE 29

INFORMAÇÃO

29 29

29

NÃO em Java!!!!! - Ex: C++

 Passagem de parâmetro por REFERÊNCIA: o

parâmetro é um apelido (“atalho”) para o argumento (os dois apontam para o mesmo endereço em

memória!!!)

(30)

SISTEMAS DE INFORMAÇÃO

30 30

30 SISTEMAS DE 30

INFORMAÇÃO

30 SISTEMAS DE 30

INFORMAÇÃO

30 30

30

NÃO em Java!!!!! - Ex: C++

 Passagem de parâmetro por REFERÊNCIA: o

parâmetro é um apelido (“atalho”) para o argumento (os dois apontam para o mesmo endereço em

memória!!!)

int y = 1;

obj.fazAlgo(y);

void fazAlgo (int& x) {

(…) x++;

(…) }

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

Espaço reservado  para variável y

ocupado anteriormente ocupado anteriormente

00000010 ocupado anteriormente

(31)

SISTEMAS DE INFORMAÇÃO

31 31

31 SISTEMAS DE 31

INFORMAÇÃO

31 SISTEMAS DE 31

INFORMAÇÃO

31 31

31

NÃO em Java!!!!! - Ex: C++

 Passagem de parâmetro por REFERÊNCIA: o

parâmetro é um apelido (“atalho”) para o argumento (os dois apontam para o mesmo endereço em

memória!!!)

int y = 1;

obj.fazAlgo(y);

void fazAlgo (int& x) {

(…) x++;

(…) }

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

Espaço reservado  para variável y

ocupado anteriormente ocupado anteriormente

00000010 ocupado anteriormente

x

(32)

SISTEMAS DE INFORMAÇÃO

32 32

32 SISTEMAS DE 32

INFORMAÇÃO

32 SISTEMAS DE 32

INFORMAÇÃO

32 32

32

NÃO em Java!!!!! - Ex: C++

 Passagem de parâmetro por REFERÊNCIA: o

parâmetro é um apelido (“atalho”) para o argumento (os dois apontam para o mesmo endereço em

memória!!!)

int y = 1;

obj.fazAlgo(y);

void fazAlgo (int& x) {

(…) x++;

(…) }

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

Espaço reservado  para variável y

ocupado anteriormente ocupado anteriormente

00000011 ocupado anteriormente

x

(33)

SISTEMAS DE INFORMAÇÃO

33 33

33 SISTEMAS DE 33

INFORMAÇÃO

33 SISTEMAS DE 33

INFORMAÇÃO

33 33

33

NÃO em Java!!!!! - Ex: C++

 Passagem de parâmetro por REFERÊNCIA: o

parâmetro é um apelido (“atalho”) para o argumento (os dois apontam para o mesmo endereço em

memória!!!)

int y = 1;

obj.fazAlgo(y);

void fazAlgo (int& x) {

(…) x++;

(…) }

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

Espaço reservado  para variável y

ocupado anteriormente ocupado anteriormente

00000011 ocupado anteriormente

(34)

SISTEMAS DE INFORMAÇÃO

34 34

34 SISTEMAS DE 34

INFORMAÇÃO

34 SISTEMAS DE 34

INFORMAÇÃO

34 34

34

Java não possui passagem por

referência!!!

(35)

SISTEMAS DE INFORMAÇÃO

35 35

35 SISTEMAS DE 35

INFORMAÇÃO

35 SISTEMAS DE 35

INFORMAÇÃO

35 35

35

Variáveis em Java

 Como já dissemos, variáveis de tipo primitivo armazenam o próprio conteúdo

 Isso não acontece com tipos abstratos (objetos complexos)!

 Como o nome diz, podem ser complexos e ocuparem muito espaço de memória.

 Então, a linguagem Java não guarda nas variáveis

uma cópia do objeto, mas o endereço de memória no qual o objeto está armazenado

 Por isso, diz-se que variáveis associadas a objetos

são referências a estes objetos

(36)

SISTEMAS DE INFORMAÇÃO

36 36

36 SISTEMAS DE 36

INFORMAÇÃO

36 SISTEMAS DE 36

INFORMAÇÃO

36 36

36

Objetos em Java

GeradorDePrimos gerador;

null

•  O conteúdo da variável gerador está  armazenado no endereço 0006;

•  armazena a referência para um objeto  da classe (tipo) GeradorDePrimos;

•  valor default de uma referência: null

0006

(37)

SISTEMAS DE INFORMAÇÃO

37 37

37 SISTEMAS DE 37

INFORMAÇÃO

37 SISTEMAS DE 37

INFORMAÇÃO

37 37

37

Objetos em Java

234

...

objeto da classe GeradorDePrimos

•  O conteúdo da variável gerador está  armazenado no endereço 0006;

•  armazena a referência para um objeto  da classe (tipo) GeradorDePrimos;

0006

GeradorDePrimos gerador;

gerador = new GeradorDePrimos();

0234

(38)

SISTEMAS DE INFORMAÇÃO

38 38

38 SISTEMAS DE 38

INFORMAÇÃO

38 SISTEMAS DE 38

INFORMAÇÃO

38 38

38

Variáveis em Java

 No momento que um objeto é usado:

 interpretador Java (JVM) o localiza a partir de

uma referência para ele armazenada em uma variável

 variável com referência também está

armazenada em um endereço de memória.

234

...

objeto da classe GeradorDePrimos 0002

0234

gerador

(39)

SISTEMAS DE INFORMAÇÃO

39 39

39 SISTEMAS DE 39

INFORMAÇÃO

39 SISTEMAS DE 39

INFORMAÇÃO

39 39

39

Variáveis em Java

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

ocupado anteriormente ocupado anteriormente ocupado anteriormente

0003

Espaço reservado  para m a partir daqui

Matematica m = new Matematica()

referência para m guardada neste 

endereço

(40)

SISTEMAS DE INFORMAÇÃO

40 40

40 SISTEMAS DE 40

INFORMAÇÃO

40 SISTEMAS DE 40

INFORMAÇÃO

40 40

40

Variáveis em Java

 Isto pode gerar algumas surpresas!!!

class Produto { double preco;

int codigo;

void preco (double p) { preco = p;

}

void codigo (int c) { codigo = c;

}

double retornaPreco () { return preco;

}

int retornaCodigo () { return codigo;

} }

> Produto arroz = new Produto();

> arroz.preco(10);

> Produto feijao = arroz;

> feijao.preco(42);

Qual é o preço do arroz?

(41)

SISTEMAS DE INFORMAÇÃO

41 41

41 SISTEMAS DE 41

INFORMAÇÃO

41 SISTEMAS DE 41

INFORMAÇÃO

41 41

41

Variáveis em Java

 Isto pode gerar algumas surpresas!!!

class Produto { double preco;

int codigo;

void preco (double p) { preco = p;

}

void codigo (int c) { codigo = c;

}

double retornaPreco () { return preco;

}

int retornaCodigo () { return codigo;

} }

> Produto arroz = new Produto();

> arroz.preco(10);

> Produto feijao = arroz;

> feijao.preco(42);

> arroz.retornaPreco() 42.0

Por que isso ocorreu ???

(42)

SISTEMAS DE INFORMAÇÃO

42 42

42 SISTEMAS DE 42

INFORMAÇÃO

42 SISTEMAS DE 42

INFORMAÇÃO

42 42

42

Variáveis em Java

 Isto pode gerar algumas surpresas!!!

> Produto arroz = new Produto();

> arroz.preco(10);

00000001

0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

ocupado anteriormente ocupado anteriormente

arroz

Espaço reservado para arroz a 

0002

partir daqui

referência para arroz

guardada neste endereço

(43)

SISTEMAS DE INFORMAÇÃO

43 43

43 SISTEMAS DE 43

INFORMAÇÃO

43 SISTEMAS DE 43

INFORMAÇÃO

43 43

43

Variáveis em Java

 Isto pode gerar algumas surpresas!!!

> Produto feijao = arroz;

> feijao.preco(42);

> arroz.retornaPreco() 42.0

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

ocupado anteriormente ocupado anteriormente

arroz

0002

0002

Espaço reservado para arroz a  partir daqui

referência para arroz guardada neste endereço

referência para feijao

guardada neste endereço

(44)

SISTEMAS DE INFORMAÇÃO

44 44

44 SISTEMAS DE 44

INFORMAÇÃO

44 SISTEMAS DE 44

INFORMAÇÃO

44 44

44

Variáveis em Java

 Isto pode gerar algumas surpresas!!!

> Produto feijao = arroz;

> feijao.preco(42);

> arroz.retornaPreco() 42.0

0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 ...

F....FF

ocupado anteriormente ocupado anteriormente

arroz

0002

0002

Espaço reservado para arroz a  partir daqui

referência para arroz guardada neste endereço

referência para feijao guardada neste endereço

Esta linha faz com que feijao e  arroz passam a ser referência para 

o mesmo objeto (mesmo  endereço) na memória. Funciona 

como se houvesse dois apelidos 

para a mesma pessoa.

(45)

SISTEMAS DE INFORMAÇÃO

45 45

45 SISTEMAS DE 45

INFORMAÇÃO

45 SISTEMAS DE 45

INFORMAÇÃO

45 45

45

Variáveis em Java

 Portanto:

 com objetos complexos, qualquer atribuição significa dar nome diferente para o mesmo objeto;

 o que alterar para um objeto, será refletido no outro;

 isso explica porque alterações em objetos

complexos dentro de um método podem se

propagar para fora – o que não acontece com

variáveis de tipos primitivos!

(46)

SISTEMAS DE INFORMAÇÃO

46 46

46 SISTEMAS DE 46

INFORMAÇÃO

46 SISTEMAS DE 46

INFORMAÇÃO

46 46

46

Variáveis em Java

 Portanto:

 essa diferença também fica evidente quando fazemos comparações (operador ==):

 para tipos primitivos: a == b?

 para objetos complexos: obj1 == obj2 ?

(47)

SISTEMAS DE INFORMAÇÃO

47 47

47 SISTEMAS DE 47

INFORMAÇÃO

47 SISTEMAS DE 47

INFORMAÇÃO

47 47

47

Variáveis em Java

 Portanto:

 essa diferença também fica evidente quando fazemos comparações (operador ==):

 para tipos primitivos: verifica valores dos mesmos

 para objetos complexos: compara as

referências.

(48)

SISTEMAS DE INFORMAÇÃO

48 48

48 SISTEMAS DE 48

INFORMAÇÃO

48 SISTEMAS DE 48

INFORMAÇÃO

48 48

48

Variáveis em Java

 Portanto:

 essa diferença também fica evidente quando fazemos comparações (operador ==):

 para tipos primitivos: verifica valores dos mesmos

> int a = 10;

> int b = 3 * 4;

> a == b false

> a = 12;

> a == b

true

(49)

SISTEMAS DE INFORMAÇÃO

49 49

49 SISTEMAS DE 49

INFORMAÇÃO

49 SISTEMAS DE 49

INFORMAÇÃO

49 49

49

Variáveis em Java

 Portanto:

 essa diferença também fica evidente quando fazemos comparações (operador ==):

 para objetos complexos: compara as referências.

> String s1 = "Oi alunos queridos”;

> String s2 = "Oi alunos queridos”;

> s1 == s2 false

> s1 = s2;

> s1 == s2

true

(50)

SISTEMAS DE INFORMAÇÃO

50 50

50 SISTEMAS DE 50

INFORMAÇÃO

50 SISTEMAS DE 50

INFORMAÇÃO

50 50

50

Método equals

 recebe como entrada uma String

 Retorna true se Strings forem iguais

> String s1 = "Oi alunos queridos"

> String s2 = "Oi alunos queridos"

> s1 == s2 false

> s1.equals(s2)

true

(51)

SISTEMAS DE INFORMAÇÃO

51 51

51 SISTEMAS DE 51

INFORMAÇÃO

51 SISTEMAS DE 51

INFORMAÇÃO

51 51

51

Variáveis em Java

 alterações em objetos complexos dentro de um método podem se propagar para fora – o que não acontece com variáveis de tipos primitivos!

Por que PODEM?

(52)

SISTEMAS DE INFORMAÇÃO

52 52

52 SISTEMAS DE 52

INFORMAÇÃO

52 SISTEMAS DE 52

INFORMAÇÃO

52 52

52

Variáveis Java

String s1 = “Bom dia“;

String s2 = s1;

s1 = “Boa noite“;

Quanto vale s2?

(53)

SISTEMAS DE INFORMAÇÃO

53 53

53 SISTEMAS DE 53

INFORMAÇÃO

53 SISTEMAS DE 53

INFORMAÇÃO

53 53

53

String s1 = “Bom dia“;

String s2 = s1;

s1 = “Boa noite“;

Quanto vale s2?

ocupado anteriormente ocupado anteriormente

Objeto String : cadeia “Bom dia”

...

...

0002 ...

s1 ~ 0126

...

0002

0126

Variáveis Java

(54)

SISTEMAS DE INFORMAÇÃO

54 54

54 SISTEMAS DE 54

INFORMAÇÃO

54 SISTEMAS DE 54

INFORMAÇÃO

54 54

54

String s1 = “Bom dia“;

String s2 = s1;

s1 = “Boa noite“;

Quanto vale s2?

ocupado anteriormente ocupado anteriormente

Objeto String : cadeia “Bom dia”

...

...

0002 ...

...

s1 ~ 0126

0002

0002

0126

s2 ~ 1644

1644

Variáveis Java

(55)

SISTEMAS DE INFORMAÇÃO

55 55

55 SISTEMAS DE 55

INFORMAÇÃO

55 SISTEMAS DE 55

INFORMAÇÃO

55 55

55

Passagem por valor x por referência

String s1 = “Bom dia“;

String s2 = s1;

s1 = “Boa noite“;

ocupado anteriormente ocupado anteriormente

Objeto String : cadeia “Bom dia”

...

Objeto String : cadeia “Boa noite”

0034

0002

Quanto vale s2?

s1 ~ 0126 s2 ~ 1644

0002

0126

1644 0034

(56)

SISTEMAS DE INFORMAÇÃO

56 56

56 SISTEMAS DE 56

INFORMAÇÃO

56 SISTEMAS DE 56

INFORMAÇÃO

56 56

56

Em uma chamada de método:

class SeiLaOQue {

void metodoQueRecebeString (String y) {

y = “Nova String”;

} }

String x = “Velha String”;

SeiLaOQue obj = new SeiLaOQue();

obj.metodoQueRecebeString(x);

System.out.println(x);

O que será impresso?

(57)

SISTEMAS DE INFORMAÇÃO

57 57

57 SISTEMAS DE 57

INFORMAÇÃO

57 SISTEMAS DE 57

INFORMAÇÃO

57 57

57

Em uma chamada de método:

class SeiLaOQue {

void metodoQueRecebeString (String y) {

y = “Nova String”;

} }

String x = “Velha String”;

SeiLaOQue obj = new SeiLaOQue();

obj.metodoQueRecebeString(x);

System.out.println(x);

O que será impresso? Velha String 

(58)

SISTEMAS DE INFORMAÇÃO

58 58

58 SISTEMAS DE 58

INFORMAÇÃO

58 SISTEMAS DE 58

INFORMAÇÃO

58 58

58

Em uma chamada de método:

class SeiLaOQue {

void metodoQueRecebeString (String y) {

y = “Nova String”;

} }

String x = “Velha String”;

SeiLaOQue obj = new SeiLaOQue();

obj.metodoQueRecebeString(x);

System.out.println(x);

equivale a 

String x = “Velha String”;

String y = x;

y = “Nova String”;

System.out.println(x);

(59)

SISTEMAS DE INFORMAÇÃO

59 59

59 SISTEMAS DE 59

INFORMAÇÃO

59 SISTEMAS DE 59

INFORMAÇÃO

59 59

59

Em uma chamada de método:

class SeiLaOQue {

void metodoQueRecebeString (String y)

{

y = “Nova String”;

} }

String x = “Velha String”;

SeiLaOQue obj = new SeiLaOQue();

obj.metodoQueRecebeString(x);

System.out.println(x);

equivale a 

String x = “Velha String”;

String y = x;

y = “Nova String”;

System.out.println(x);

Referências são passadas 

por valor!!!

(x é copiada para

a nova variável y)

(60)

SISTEMAS DE INFORMAÇÃO

60 60

60 SISTEMAS DE 60

INFORMAÇÃO

60 SISTEMAS DE 60

INFORMAÇÃO

60 60

60

Em Java, TUDO É PASSADO POR VALOR!!!!

• Embora o que seja passado como parâmetro seja chamado de “referência” do objeto, essa referência é passada por valor!!! (uma cópia da referência é feita)

• Um objeto nunca é passado como parâmetro em Java (o que é passado é a sua

referência)!

(61)

SISTEMAS DE INFORMAÇÃO

61 61

61 SISTEMAS DE 61

INFORMAÇÃO

61 SISTEMAS DE 61

INFORMAÇÃO

61 61

61

Resumindo

• Quando um “objeto passado como

parâmetro” pode ser alterado dentro do

método?

(62)

SISTEMAS DE INFORMAÇÃO

62 62

62 SISTEMAS DE 62

INFORMAÇÃO

62 SISTEMAS DE 62

INFORMAÇÃO

62 62

62

Resumindo

• Quando um objeto, cuja referência foi

passada como parâmetro de um método, pode ser alterado dentro desse método?

– Quando seus métodos (que alteram seus atributos) são invocados dentro do método,

USANDO A REFERÊNCIA QUE FOI PASSADA COMO

PARÂMETRO!!!

(63)

SISTEMAS DE INFORMAÇÃO

63 63

63 SISTEMAS DE 63

INFORMAÇÃO

63 SISTEMAS DE 63

INFORMAÇÃO

63 63

63

Exercício 1

Se eu tenho duas variáveis do tipo int, a e b,

como eu faço para trocar seus valores?

(64)

SISTEMAS DE INFORMAÇÃO

64 64

64 SISTEMAS DE 64

INFORMAÇÃO

64 SISTEMAS DE 64

INFORMAÇÃO

64 64

64

Exercício 2

Simule o seguinte código (teste de mesa):

> TesteTroca teste = new TesteTroca();

> int a = 1;

> int b = 2;

> teste.troca(a, b);

> System.out.println (“a = “ + a + “ e b = “ + b);

class TesteTroca{

void troca (int x, int y) {

int temp = x;

x = y;

y = temp;

}

}

(65)

SISTEMAS DE INFORMAÇÃO

65 65

65 SISTEMAS DE 65

INFORMAÇÃO

65 SISTEMAS DE 65

INFORMAÇÃO

65 65

65

Exercício 3

Simule o seguinte código (teste de mesa):

> TesteTroca teste = new TesteTroca();

> int a = 1;

> int b = 2;

> teste.troca(a, b);

> System.out.println (“a = “ + a + “ e b = “ + b);

class TesteTroca{

void troca (int a, int b) {

int temp = a;

a = b;

b = temp;

}

}

(66)

SISTEMAS DE INFORMAÇÃO

66 66

66 SISTEMAS DE 66

INFORMAÇÃO

66 SISTEMAS DE 66

INFORMAÇÃO

66 66

66

Exercício 4

Como seria possível fazer um método em Java

que troca os valores de 2 inteiros ?

(67)

SISTEMAS DE INFORMAÇÃO

67 67

67 SISTEMAS DE 67

INFORMAÇÃO

67 SISTEMAS DE 67

INFORMAÇÃO

67 67

67

Professoras:

Ariane Machado Lima Fátima L.S. Nunes

A Memória e as

variáveis

Referências

Documentos relacionados

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Com o objetivo de compreender como se efetivou a participação das educadoras - Maria Zuíla e Silva Moraes; Minerva Diaz de Sá Barreto - na criação dos diversos

Este trabalho teve por objetivo o estudo da dimensão das doenças crônicas, especificamente o diabetes mellitus, visando à elaboração de um modelo de processo

Com relação ao CEETEPS, o tema desta dissertação é interessante por se inserir no Programa de Educação de Jovens e Adultos (PROEJA), sob a tutela da Coordenação de

Figura 4.10 – Fluxo de CO2 para as áreas de footprint de três torres localizadas em unidades experimentais submetidas a diferentes tipos de manejo pastoril Rotativo,

A Figura 17 apresenta os resultados obtidos por meio da análise de DSC para a amostra inicial da blenda PBAT/PHBH-0 e para as amostras PBAT/PHBH-4, PBAT/PHBH-8 e

O estudo múltiplo de casos foi aplicado para identificar as semelhanças e dissemelhanças na forma como as empresas relacionam seus modelos de negócios e suas

Na apresentação dos dados estatísticos, ficou demonstrada à todos os participantes a dimensão da pesquisa, abrangendo o setor produtivo como um todo, enfocando a produção