Organização do Ambiente de
Execução para Linguagens OO
• Objeto:
– Grupo de variáveis de instância, aos quais métodos de
instância estão atachados;
• Variável de Instância:
– Componente de um objeto particular;
• Método de Instância:
– Operação nomeada, ligada a um objeto particular que
acessa suas variáveis de instância locais;
• Classe de Objetos:
– Família de objetos com variáveis de instância similares e
métodos idênticos;
Organização do Ambiente de
Execução para Linguagens OO
• Linguagens OO puras:
– Todas as variáveis de instâncias são privadas;
– Somente métodos podem acessá-las;
– Na prática: existências de variáveis públicas;
• Chamada de método de instância:
– E0.I(E1, ..., En);
• E0: objeto receptor;
• I: método de instância do objeto;
• E1, ..., En: argumentos;
Organização do Ambiente de
Execução para Linguagens OO
• Class Point {
protected int x, y;
public Point(int x, int y) {
this.x = x; this.y = y;
}
public void move(int dx, int dy){
this += dx; this +=dy;
}
public float area(){
return 0.0;
}
public float dist(Point that) {
int dx = this.x – that.x;
int dy = this.y – that.y;
return Math.sqrt(dx*dx + dy*dy)
}
}
Organização do Ambiente de
Execução para Linguagens OO
Classe de Objeto Point
Point
constructor (1)
move
method (2)
area
method (3)
dist
method (4)
Organização do Ambiente de
Execução para Linguagens OO
Objeto Point
class tag
x
y
Classe de Objeto Point
Organização do Ambiente de
Execução para Linguagens OO
Point p = new Point(2,3)
Point q = new Point(0,0)
p.move(1,1)
p
q
class tag
x
y
Classe de Objeto Point
class tag
x
y
Organização do Ambiente de
Execução para Linguagens OO
q = p
p
q
class tag
x
y
Classe de Objeto Point
class tag
x
LIXO
y
Organização do Ambiente de
Execução para Linguagens OO
• Chamada a E0.I(E1, ..., En)
– Endereço do método é encontrado seguindo-se
o ponteiro da classe de objeto (class-tag) e
usando o deslocamento apropriado;
– Traduzido para I(E0, E1, ..., En);
• O objeto é passado como argumento para a chamada
do método, sendo associado ao nome this;
• E0.I(this, a1, ..., an);
Organização do Ambiente de
Execução para Linguagens OO
• Sub-classes:
– Seja C uma classe de objetos;
– Uma sub-classe S da classe C é uma família de
objetos similares aos objetos de C, porém com:
• Variáveis de instância extra;
• Métodos adicionais;
• Métodos substituídos.
– Objetos S podem ser tratados como objetos C;
• Ignorando suas variáveis e métodos particulares;
• Porém, considerando seus métodos substituídos;
– Herança simples;
Organização do Ambiente de
Execução para Linguagens OO
• Class Circle extends Point {
protected int r;
public Circle(int x, int y, int r) {
this.x = x; this.y = y; this.r = r;
}
public void radius(){
return this.r;
}
public double area(){
double pi = 3.1416;
return pi * this.r * this.r;
}
}
Organização do Ambiente de
Execução para Linguagens OO
• Class Box extends Point {
protected int w, d;
public Box(int x, int y, int w, int d) {
this.x = x; this.y = y;
this.w = w; this.d = d;
}
public void width(){
return this.w;
}
public void depth(){
return this.d;
}
public double area(){
return (double) (this.w * this.d);
}
}
Organização do Ambiente de
Execução para Linguagens OO
Circle
Classe de
Objeto
Circle
constructor (5)
move
method (2)
area
method (7)
dist
method (4)
radius
method (6)
Organização do Ambiente de
Execução para Linguagens OO
Box
Classe de
Objeto
Box
constructor (8)
move
method (2)
area
method (11)
dist
method (4)
width
method (9)
depth
method (10)
Organização do Ambiente de
Execução para Linguagens OO
class tag
Classe de Objeto Circle
x
y
r
Objeto Circle
Organização do Ambiente de
Execução para Linguagens OO
class tag
Classe de Objeto Box
x
y
Objeto Box
w
d
Organização do Ambiente de
Execução para Linguagens OO
int s = 4;
Point p = null;
Circle c = new Circle(0, 3*s, s);
Box b = new Box(0,s,2*s,2*s);
p
c
b
class tag
Classe de Objeto Circle
x
0
y
12
r
4
class tag
Classe de Objeto Box
x
0
y
4
w
8
d
8
Organização do Ambiente de
Execução para Linguagens OO
p = c
p.move(20,20)
p
c
b
class tag
Classe de Objeto Circle
x
20
y
32
r
4
class tag
Classe de Objeto Box
x
0
y
4
w
8
d
8
Download

Runtime4_OOh