A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Compilação de Linguagens OO

Apresentações semelhantes


Apresentação em tema: "Compilação de Linguagens OO"— Transcrição da apresentação:

1 Compilação de Linguagens OO
Marco Simões (macs3) André Santos (alms) Compiladores

2 Compilação de Linguagens OO
Tópicos da Aula Alocação de Objetos e Classes Herança e Polimorfismo Verificação de Tipos Garbage Collection Compiladores

3 Revisando alocação de dados ...
Alocação Estática Variáveis Globais Alocação na Pilha Variáveis Locais e Passagem de Argumentos Alocação no Heap Variáveis Dinâmicas

4 Alocação de Dados numa Linguagem OO
Exemplo: 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.x += dx; this.y += 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); }

5 Alocação das Instâncias
Construtor move area dist Objeto de Classe Point x y Instâncias Heap

6 Variáveis e Invocação de Métodos
Heap p 2 3 Construtor move area dist q Point p = new Point(2,3); Point q = new Point(0,0);

7 Variáveis e Invocação de Métodos
Heap p 3 4 Construtor move area dist q Point p = new Point(2,3); Point q = new Point(0,0); p.move(1,1);

8 Atribuições p 3 4 Construtor move area q dist
Heap p 3 4 q Construtor move area dist Point p = new Point(2,3); Point q = new Point(0,0); p.move(1,1); q = p;

9 Herança: exemplo 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 int radius() { return this.r; } public double area() { double pi=3.1416; return pi*this.r*this.r; 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.d=d; this.w = w; } public int width() { return this.w; } public int depth() { return this.d; } public double area() { return (double) this.w * this.d;

10 Alocação de Classes e Objetos com Herança
Construtor move(herdado) area(sobreposto) dist(herdado) radius Heap p 12 4 c b Construtor move(herdado) dist(herdado) area(sobreposto) width depth 4 8 Point p = null; Circle c = new Circle(0,12,4); Box b = new Box(0,4,8,8);

11 Polimorfismo Construtor move(herdado) area(sobreposto) dist(herdado)
radius Heap p c 20 32 b a 50.3 Construtor move(herdado) dist(herdado) area(sobreposto) width depth 4 8 p = c; p.move(20,20); double a = p.area();

12 Verificação de Tipos No exemplo anterior, tentativas de acessar o atributo p.r devem ser identificadas como erro de tipo. Da mesma forma, qualquer tentativa de invocar o método p.radius() será identificada pelo Verificador de Tipos como erro de tipo. Se a Linguagem não for type-safe uma série de outros erros de tipo poderão ocorrer. Ex: C++

13 Considerações O deslocamento de cada variável de instância em relação à base de cada objeto é constante O deslocamento de cada método de instância relativo à base da do objeto-classe também é constante Variáveis de classe podem ser tratadas como variáveis globais, mas devem estar associadas ao objeto-classe Métodos de classe podem ser tratados como procedimentos comuns, mas devem estar associados ao objeto-classe

14 Garbage Collection: questões
O que é considerado lixo (Garbage) ? Quais problemas podem acontecer se o lixo(Garbage) não for eliminado ? Que problemas podem surgir em decorrência da desalocação explícita ? A desalocação automática ou coleta de lixo (Garbage Collection) pode ser implementada através de vários algoritmos

15 Garbage Collection: algoritmo Mark-sweep
Marque todas as variáveis do Heap como inacessíveis Siga todas as cadeias de ponteiros a partir da pilha, marcando cada variável de Heap atingida como acessível Ao final do passo anterior, todas as variáveis que ainda estiverem marcadas como inacessíveis devem ser desalocadas

16 Algoritmo Mark-sweep: um exemplo
... a b c d e X ... a c e ... a b c d e ... a b c d e X

17 Considerações sobre o algoritmo
O algoritmo deve ser capaz de visitar todas as variáveis de Heap O algoritmo precisa saber o tamanho de todas as variáveis de Heap O algoritmo precisar ter permissão para marcá-las como inacessíveis ou acessíveis Possível solução: campos tamanho, link e acessibilidade escondidos Ponteiros precisam ser distinguidos de outros tipos


Carregar ppt "Compilação de Linguagens OO"

Apresentações semelhantes


Anúncios Google