You are on page 1of 7

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA

FACULTAD DE INGENIERA
ESCUELA DE CIENCIAS Y SISTEMAS
DESARROLLO DE TRANSFERENCIA TECNOLGICA DTT

Herencia en Cdigo de 3 Direcciones


Nombre:

Diego Alejandro Ros Sagastume

Correo
electrnico:

dalejrios@gmail.com

Tipo artculo:

Coecys

Fecha:

24/03/2015

Resumen:
La herencia es un mecanismo que utilizan los lenguajes de programacin para la
reutilizacin de cdigo previamente escrito. En cdigo de 3 direcciones debe mantenerse
esta idea, utilizando tcnicas que permitan reutilizar el cdigo de las clases padres,
basndonos para esto en la utilizacin correcta de los atributos y de la tabla de smbolos
para una correcta generacin de cdigo de 3 direcciones.
Palabras claves:
3 Direcciones, Compilador, Herencia, Objetos, Cdigo, Smbolos
Introduccin:
En el mundo de la programacin es imprescindible conocer la forma en que los
compiladores generan el cdigo objeto que luego ejecutamos. Con el auge de los
lenguajes de programacin orientados a objetos se hace necesario el conocer el mtodo
de herencia para la reutilizacin de clases. Hay que tener en cuenta que el objetivo
principal de la herencia es la reutilizacin de cdigo, por lo que necesitamos tener esto
presente para la correcta generacin de nuestro cdigo de 3 direcciones.
El presente artculo tiene como funcin principal mostrar la forma en que se debe generar
el cdigo de 3 direcciones al momento de la utilizacin del mtodo de herencia as como
tambin la forma de llenar la tabla de smbolos, basndonos para lograr nuestro objetivo
en una serie de pasos y 2 ejemplos prcticos.
La idea de realizar el presente artculo es que en mi experiencia como estudiante de
cursos de compiladores hay mucha falta de informacin con respecto al paradigma
orientado a objetos y se me hizo necesario un documento que explicara de manera
sencilla como funciona el mtodo de la herencia en el paradigma orientado a objetos.

Pgina 1 de 7

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA


FACULTAD DE INGENIERA
ESCUELA DE CIENCIAS Y SISTEMAS
DESARROLLO DE TRANSFERENCIA TECNOLGICA DTT

Paradigma Orientado a Objetos


No ahondaremos acerca de cmo generar cdigo de 3 direcciones para la creacin de
objetos, solo daremos una pequea introduccin del tema.
Sabemos que para generar un objeto se necesita una clase y luego esta clase puede ser
utilizada como un tipo de datos para instanciar un objeto. Ac entra una estructura de
datos nueva llamada heap, el cual me servir para almacenar los atributos de los objetos
y tambin entra en juego el constructor de clase el cual es un mtodo que ser el
encargado de inicializar los atributos de cada clase.

Ejemplo # 1

class Trabajador{
int Codigo = 101;
int Sueldo = 200;
}

class Principal{
void main(){
Trabajador T = new Trabajador();
}
}

void Trabajador(){
t1 = hptr +0;
Heap[t1] = 101;
t2 = hptr + 1;
Heap[t2] = 200;
}
void Principal_main(){
Trabajador();
t3 = ptr + 0;
Stack[t3] = hptr;
hptr = hptr +2;
}

En el ejemplo podemos apreciar que existe una clase Trabajador, la cual genera un
mtodo constructor que ser el encargado nicamente de inicializar los atributos de
clase. Luego podemos ver en el siguiente trozo de cdigo que se crea un nuevo objeto
de tipo Trabajador, lo que se hace ac es llamar al mtodo constructor y asignarle su
posicin en la pila para posteriormente mover 2 posiciones el puntero del heap. No est
dems mencionar que el puntero del heap siempre debe estar al final.

Pgina 2 de 7

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA


FACULTAD DE INGENIERA
ESCUELA DE CIENCIAS Y SISTEMAS
DESARROLLO DE TRANSFERENCIA TECNOLGICA DTT

Tabla de Smbolos
Como es sabido, la tabla de smbolos es una estructura de datos que me servir para
generar el cdigo objeto, nos sirve como un directorio y en ella se guardan nica y
exclusivamente todos los identificadores con algunas caractersticas. Para nuestro caso
consideraremos la siguiente tabla de smbolos.
Simbolo Rol

Puntero Tipo de Datos

Ambito Parametros Hereda

A manera de ejemplo, los cdigos anteriores quedaran de la siguiente manera en la


tabla de smbolos:

Smbolo
Trabajador
Codigo
Sueldo
Principal
main
T

Rol
Clase
Atributo
Atributo
Clase

Puntero

Tipo de Datos

hptr + 0
hptr + 1

Int
Int

Variable

ptr + 0

void
Trabajador

Tamao
2
1
1
0
1
1

Ambito

Parametros

Hereda

Trabajador
Trabajador
Principal
main

Como podemos ver, nicamente se ingresan los identificadores, los cuales simplemente
me servirn para generar cdigo, es decir, por ejemplo, la variable T en cdigo de 3
direcciones ya no se acceder a ella como T sino con su valor relativo en la pila (ptr + 0).
Adems cabe mencionar algo importante, el tamao en este caso de las variables int se
ha tomado como 1, el tamao de las clases es su nmero de atributos y el tamao de las
funciones es la cantidad de variables locales que se hayan declarado.

Herencia
La herencia no es difcil de implementar, mostrar paso a paso lo que se debe hacer
para implementarla.
1. El tamao inicial de la clase hija es el tamao de la clase padre y en la tabla de
smbolos debe haber una columna indicando de que clase hereda.
2. El puntero del heap para la posicin de los atributos en la clase hija deber
empezar en el tamao de la clase padre.
3. El constructor de la clase hija deber primero llamar al constructor de la clase
padre y luego ir el cdigo del constructor de la clase hija.
4. Para buscar un atributo de clase, se busca en la clase hija y si no se encuentra se
cambia el mbito y se busca en la clase padre de forma recursiva.

Pgina 3 de 7

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA


FACULTAD DE INGENIERA
ESCUELA DE CIENCIAS Y SISTEMAS
DESARROLLO DE TRANSFERENCIA TECNOLGICA DTT

Tomando en cuenta los pasos anteriores realizaremos el siguiente ejemplo # 2.

Ejemplo # 2
class Persona{
int DPI = 2077;
int Edad = 23;
}

class Trabajador extends Persona{


int Codigo = 1011;
}

class Principal(){
void main(){
Trabajador T = new Trabajador();
}
}

La tabla de smbolos cuando se empieza a analizar la clase Trabajador quedara as:


Smbolo
Persona
DPI
Edad
Trabajador

Rol
Clase
Atributo
Atributo
Clase

Puntero

Tipo de Datos

hptr + 0
hptr + 1

Int
Int

Tamao
2
1
1
2

Ambito

Parametros

Hereda

Persona
Persona
Persona

Ac tomamos el paso # 1, ya que el tamao inicial de la clase Trabajador es el tamao


de la clase Persona. Ahora continuaremos analizando el paso # 2, que indica que el
puntero que se deber contar es el tamao de la clase padre, por lo que el siguiente
atributo que analicemos en Trabajador empezar con el puntero hptr + 2.
Smbolo
Persona
DPI
Edad
Trabajador
Codigo

Rol
Clase
Atributo
Atributo
Clase
Atributo

Puntero

Tipo de Datos

hptr + 0
hptr + 1

Int
Int

hptr + 2

Int

Tamao
2
1
1
3
1

Ambito

Parametros

Hereda

Persona
Persona
Persona
Trabajador

Como podemos ver, la clase Trabajador se ha actualizado a tamao 3 debido a que est
tomando en cuenta sus atributos y los de la clase padre.
Pgina 4 de 7

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA


FACULTAD DE INGENIERA
ESCUELA DE CIENCIAS Y SISTEMAS
DESARROLLO DE TRANSFERENCIA TECNOLGICA DTT

Siguiendo con el paso # 3, nuestro cdigo de 3 direcciones de las 3 clases quedara as.

void Persona(){
t1 = hptr + 0;
Heap[t1] = 2077;
t2 = hptr +1;
Heap[t2] = 23;
}

void Trabajador(){
Persona();
t3 = hptr + 2;
Heap[t3] = 1011;
}

Podemos ver en el ejemplo anterior que realizamos el paso # 3, el cual es que el


constructor de la clase hija llama al constructor de la clase padre para inicializr los
atributos y luego inicializa los suyos.

Por ltimo en el paso # 4 si queremos acceder a un atributo de un objeto de la clase


Trabajador, lo buscaremos en la tabla de smbolos y si no lo encontramos con el mbito
Trabajador, cambiamos el mbito al de su clase padre (Persona) y volvemos a realizar
la bsqueda.
Por ltimo la clase Principal quedara as.
void Principal_main(){
Trabajador();
t4 = ptr + 0;
Stack[t4] = hptr;
hptr = hptr +3;
}

A manera de ejemplificar mejor, este sera el procedimiento que se realiza de forma


grfica:
1) Al instanciar la clase, primero se llama al constructor padre y ste mete sus
atributos en el heap:
2077

23
Pgina 5 de 7

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA


FACULTAD DE INGENIERA
ESCUELA DE CIENCIAS Y SISTEMAS
DESARROLLO DE TRANSFERENCIA TECNOLGICA DTT

2) Luego el constructor de la clase hija mete sus atributos en el heap:

2077 23

1011

Donde lo sombreado en verde son los atributos de la clase padre y lo de celeste son los
de la clase hija.

Consideraciones a Tomar
No repetir los atributos, a veces se tiene la tendencia a copiar todos los atributos
de la clase padre en la clase hija y volverlos a meter todos, esto genera cdigo
dems, ya que si sabemos de que clase hereda la clase hija podemos acceder a
los atributos de la clase padre sin volver a copiarlos.
Utilizando la forma anterior se puede tener muchas herencias, es decir se puede
tener lo siguiente: clase1 extends clase2, clase 3 extends clase1, etc.
No confundir el heap con el stack, en el stack van nicamente las variables locales,
en el heap van los atributos; cabe destacar que los objetos creados en funciones
tambin son variables locales.
Recordar que la tabla de smbolos no existe al momento de la ejecucin.
Lo visto en este artculo es en tiempo de compilacin no en tiempo de ejecucin,
no confundir las cosas, el stack y el heap existen nicamente en tiempo de
ejecucin, por lo que estas 2 estructuras deben ser accedidas por posiciones
relativas, no directamente con algn nmero.

Conclusiones:
La herencia es un mtodo para la reutilizacin de cdigo.
La tabla de smbolos sirve como directorio para generacin del cdigo objeto.
Lo nico que cambia en la tabla de smbolos en la herencia es agregar otra
columna para indicar de que clase hereda y empezar a contar los atributos
despus de los del padre.

Pgina 6 de 7

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA


FACULTAD DE INGENIERA
ESCUELA DE CIENCIAS Y SISTEMAS
DESARROLLO DE TRANSFERENCIA TECNOLGICA DTT

Referencias:
Alex Rodrguez. Concepto o Definicin de Herencia en JAVA.
http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=
651:concepto-o-definicion-de-herencia-en-java-programacion-orientada-aobjetos-ique-es-ejemplos-cu00684b&catid=68:curso-aprender-programacionjava-desde-cero&Itemid=188 (22 marzo de 2015)
Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman (2008). Compiladores,
principios, tcnicas y herramientas (Segunda Edicin) Mxico, S.A. de C.V:
Pearson Education.

Imgenes del artculo

Imagen 1. Herencia en UML.

Imagen 2. Compilador

Pgina 7 de 7

You might also like