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

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

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

Apresentações semelhantes


Apresentação em tema: "Compilação de Linguagens OO Marco Simões (macs3) André Santos (alms)"— Transcrição da apresentação:

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

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

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 x y x y InstânciasHeap

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

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

8 Atribuições Construtor move area dist Heap Point p = new Point(2,3); Point q = new Point(0,0); p q 0 0 3 4 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 Construtor move(herdado) dist(herdado) area(sobreposto) width depth Heap 0 12 4 0 4 8 8 Point p = null; Circle c = new Circle(0,12,4); Box b = new Box(0,4,8,8); p c b

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

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 a b c d e X X X X X a b c d e  X  X  a c e   

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 Marco Simões (macs3) André Santos (alms)"

Apresentações semelhantes


Anúncios Google