(Sebesta, 2000) Considere o seguinte programa:
public class Test {
private int x, y, z, w;
public void sub1() { int a, y, z, w; }
public void sub2() { int a, b, z, w; }
public void sub3() { int a, b, c, w; }
public void sub4() { int a, b, c, d; }
public static void main(String[] args) { }
}
Dadas as seguintes sequências de chamada e supondo-se que seja usado o escopo dinâmico, quais variáveis são visíveis durante a execução da última função chamada? Inclua, em cada variável visível, o nome da função em que ela foi definida
main
chama sub1
; sub1
chama sub2
; sub2
chama sub3
.main
chama sub2
; sub2
chama sub3
; sub3
chama sub4
.main
chama sub2
; sub2
chama sub3
; sub3
chama sub1
.main
chama sub4
; sub4
chama sub3
; sub3
chama sub1
.main
chama sub3
; sub3
chama sub2
; sub2
chama sub1
.
a. main
chama sub1
; sub1
chama sub2
; sub2
chama sub3
.
x
de Test
, y
de sub1
, z
de sub2
e a
, b
, c
e w
de sub3
(y
, z
e w
de Test
, a
, z
e w
de sub1
e a
, b
e w
de sub2
estão ocultos)
b. main
chama sub2
; sub2
chama sub3
; sub3
chama sub4
.
x
e y
de Test
, z
de sub2
, w
de sub3
e a
, b
, c
e d
de sub4
(z
e w
de Test
, a
, b
e w
de sub2
e a
, b
e c
de sub3
estão ocultos)
c. main
chama sub2
; sub2
chama sub3
; sub3
chama sub1
.
x
de Test
, b
e c
de sub3
e a
, y
, z
e w
de sub1
(y
, z
e w
de Test
, a
, b
, z
e w
de sub2
e a
e w
de sub3
estão ocultos)
d. main
chama sub4
; sub4
chama sub3
; sub3
chama sub1
.
x
de Test
, d
de sub4
, b
e c
de sub3
e a
, y
, z
e w
de sub1
(y
, z
e w
de Test
, a
, b
e c
de sub4
e a
e w
de sub3
estão ocultos)
e. main
chama sub3
; sub3
chama sub2
; sub2
chama sub1
.
x
de Test
, c
de sub3
, b
de sub2
e a
, y
, z
e w
de sub1
(y
, z
e w
de Test
, a
, b
e w
de sub3
e a
, z
e w
de sub2
estão ocultos)
Sebesta, Robert W. (2000). Conceitos de Linguagens de Programação. 4ª edição. Porto Alegre: Bookman. 624 páginas.