Compilação de Linguagens OO

Slides:



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

Ambiente de Execução - Rotinas
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.
VII – Conceitos avançados Garbage Collection Linguagens orientadas a objectos Bibliografia aconselhada: –Apontamentos LFA 1999/ Jorge Morais.
Conceitos de OO em Java Parte I
Tratamento de exceções em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
INE5408 Estruturas de Dados Alocação Dinâmica de Memória.
Linguagens de Programação Conceitos e Técnicas Amarrações Prof. Isabel Cafezeiro
Linguagens de Programação Conceitos e Técnicas Variáveis Prof. Isabel Cafezeiro
Atributos e Métodos Restrições de Acesso Encapsulamento Herança.
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Alocação Dinâmica de Memória.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Linguagens de Programação Conceitos e Técnicas Expressões Prof. Isabel Cafezeiro
Estrutura de Dados (DPADF 0056) Aula 7 – Encadeamento de Memória Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Classes Objetos Atributos Métodos Coletor de Lixo (Garbage Collector ) Confraria do Java Nivelamento. Caroline, Marcelo e Luiz 12/05/2007.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal
Estruturas de Dados Aula 2: Estruturas Estáticas
Polimorfismo e suas aplicações em C++.
Linguagens de Programação Conceitos e Técnicas
INF1007: Programação 2 2 – Alocação Dinâmica
Introdução OO.
Linguagens de Programação Conceitos e Técnicas
INE5408 Estruturas de Dados
Curso básico de linguagem Java
Geração automática de testes de caixa branca
TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit.
Introdução Java.
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
INF1007: Programação 2 9 – Tipos Abstratos de Dados
Aula 4 Estruturas.
Linguagem Orientada a Objetos 2
POO - Classes Dilvan Moreira.
Estruturas de Dados Aula 5: Matrizes
Java: Interfaces Alcides Calsavara.
Singleton e Template Method
Programador/a de Informática
CONCEITO DE VARIÁVEIS ESTÁTICAS
Criação e manipulação de objetos
Kroton Educacional Universidade uniderp (Unidade Matriz)
Departamento de Estatística e Informática
INE 5201 – INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO
Programação Orientada a Objetos
Algoritmos e Programação MC102

Listas Encadeadas.
Desenvolvimento de Sistemas Orientados a Objetos
Fundamentos de Programação 1
Técnicas de Programação
Estruturas de Dados Dinâmicas
Wrappers.
Programação Orientada a Objetos*
Programação Orientada a Objetos*
3.2 Sobrecarga de Métodos (Overloading)
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos
3.1.7 Variáveis de Classe e Instância
Programação Orientada a Objetos
Laboratório I Mateus Raeder.
Orientação a Objetos - Programação em C++
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Algoritmos e Estruturas de Dados I – Ponteiros
Estruturas de Dados em C
Estruturas definidas pelo programador
Tipos Primitivos de Dados
Estruturas de Dados Aula 5: Matrizes 16/03/2015. Matrizes Conjuntos bidimensionais declarados estaticamente float mat[4][3]; acesso de elemento: mat[2][0]
CALCULADORA CARACTERE E VARIÁVEIS COMPOSTAS OU VETORES EM JAVA
Sistemas de Tipo Paradigmas de Linguagens Computacionais
Compiladores – análise semântica
Ambiente de execução.
Transcrição da apresentação:

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

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

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

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); }

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

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);

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);

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;

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;

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);

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();

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++

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

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

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

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

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