Transformação em C a partir de código em Java

Propaganda
Transformação em C a partir de
código em Java
Modelo de dados de suporte a uma linguagem object oriented
Centro de Cálculo
Instituto Superior de Engenharia de Lisboa
João Pedro Patriarca ([email protected])
Hierarquia de classe Java
Point
# x, y: int
+ Point()
+ Point( x,y:int )
+ add(p: Point)
+ print()
+ equal(p1:Point, p2:Point): boolean
<<final>>
Color
Pixel
- c: Color
+ Pixel( x,y : int, r,g,b : byte )
+ print()
CCISEL
- r,g,b : byte
+ BLACK : Color
+ Color( r,g,b : byte )
+ print()
Programação em Sistemas Computacionais
Suporte à criação, iniciação e destruição de objectos
• Atributos de instância reunidos numa estrutura
• Atributos de tipo (static) definidos como variáveis globais
• Construção de um objecto
– Alocação de espaço para o objecto independente da inicialização
• Como é resolvida a sobrecarga?
– Mangling de nomes
– O mesmo problema/resolução se coloca na definição de atributos de tipo
• Definição de um destrutor
– Necessário sempre que existam acções a realizar na fase de destruição
do objecto (ex: libertar espaço alocado dinamicamente na construção)
CCISEL
Programação em Sistemas Computacionais
Métodos
• Métodos de instância necessitam da adição do parâmetro implícito
correspondente à referência para o objecto (this)
void point_add( Point * this, const Point * p );
• Métodos estáticos não acedem a estado do objecto logo não
precisam da referência para o objecto
CCISEL
Programação em Sistemas Computacionais
Herança
• A estrutura que representa o tipo especializado inclui a estrutura do
tipo derivado
– A definição da estrutura do tipo derivado como primeiro campo facilita a
conversão para tipos base e do tipo base para o tipo especializado
• Aplica-se o mesmo suporte à criação, iniciação e destruição
• A chamada do construtor do tipo base deverá anteceder a iniciação
do estado do tipo especializado
• A adição de novos métodos de instância não constitui problema. Mas
como é resolvida a sobreposição?
– Numa linguagem object oriented o método de instância a executar
depende do tipo do objecto e não do tipo da variável que guarda a
referência para o objecto (polimorfismo)
CCISEL
Programação em Sistemas Computacionais
Polimorfismo
• Em tempo de compilação não é possível determinar a função a chamar; a
decisão da função a executar terá de ser adiada para tempo de execução
– a mesma variável poderá guardar, em momentos diferentes,
referências para objectos de tipos diferentes (relação is-a)
• O objecto terá que ter associado ao seu estado qual o tipo que representa
(e portanto quais as funções/métodos de instância que deverá executar)
• Introdução da tabela de métodos virtuais (vtable)
– Implementada à custa de um estrutura ou um array de ponteiros para função
– Definida ao nível do tipo / cada objecto mantém uma referência para a mesma
tabela
– Tal como na herança de estado, novas Vtables deverão incluir a Vtable do tipo
base
• Métodos a incluir na Vtable
– Métodos sujeitos a sobreposição (métodos virtuais)
– Destrutores cujas acções a realizar dependam do tipo criado e no momento da
destruição não se conheça o tipo do objecto
• Métodos em Java numa classe base marcados como final não estão
sujeitos a sobreposição
CCISEL
Programação em Sistemas Computacionais
Download