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

Slides:



Advertisements
Apresentações semelhantes
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Advertisements

Programação Orientada a Objetos*
Paulo Marques Hernâni Pedroso
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 7 – Métodos avançados Capitulo 7 Métodos avançados.
Capítulo 1 – Conceitos Básicos 1 Segunda-feira, 22 de Outubro de 2007 UNIBRATEC – Ensino Superior e Técnico em Informática Aula 15 – Tipos de Dados Avançados.
Alocação Dinâmida de Memória
Orientação a Objetos: Encapsulamento e Classificação
Herança, sobrecarga e ligação dinâmica zHerança zReferência super zSobrecarga de métodos zSobreposição zLigação dinâmica de métodos zfinal.
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Generalização, Especialização e Conceitos
Iniciação ao Java – Márcio F. Campos
Programação Básica em Java
Coleta de resíduos. Sumário Resíduos Coleta de resíduos Contador de referências Marcação e varredura Parada e cópia Marcação e compactação Gerenciamento.
Alocação Dinâmica de Memória
INF Computação Gráfica
Políticas Curso de aprofundamento em linguagem C.
Expressões, controle de fluxo, wrappers e strings Profa
Construção de Compiladores
Aula 4 Nomes, Vinculações, Tipos e Escopos
Aula 8 Orientação à Objetos
1 Aula 5 Instâncias dinâmicas. 2003/2004 Programação Orientada para Objectos 2 Instâncias… int j = 20; int f() { int const i = 10; // … } Constante automática.
Herança e Polimorfismo
Classes e objetos P. O. O. Prof. Grace.
Estrutura de Dados em Java
Uma comparação segundo os princípios da Orientação à Objetos
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Aula prática 13 Orientação a Objetos – C++ Parte 1
Linguagens Orientadas a Objeto
Conceitos de Linguagem de Programação
Caio Argolo Luiz Daud Jorge Roberto
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Estruturas de Dados com Jogos
Atributos, Encapsulamento e Interface em Java
Programação I Aula 2 (Métodos)
Métodos de Construção de Software: Orientação a Objetos
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Tipos de Dados Paradigmas de Programação
Tipos Abstratos de Dados
Classes, Objetos, Atributos e Métodos JAVA
Linguagens de Programação II
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Ambiente de Execução - Rotinas
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 12 – Overloading X Overriding Prof.a.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Listas Simplesmente Encadeadas
Capítulo VIII Ambientes de Execução
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Orientação a Objetos usando Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Algoritmos e Estruturas de Dados
Herança e Arquitetura em camadas
Removing Unnecessary Synchronization in Java Sérgio Soares Gente.
Paradigmas de Programação –Aula 7 Lab 2 Professores: Eduardo Mantovani Fábio Paula Santos.
Construtores e Destrutores
Bruno Inojosa MCP .NET Framework
Atributos e Métodos Estáticos
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.
Herança.
Estrutura de Dados II Alocação Dinâmica. Alocação de memória Ao ser executado, um programa carrega seu código executável para a memória; Uma parte da.
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Compilação de Linguagens OO
Transcrição da apresentação:

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

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

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

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

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 p.move(1,1);

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

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

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

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