Académique Documents
Professionnel Documents
Culture Documents
TESIS
ABSTRACCIÓN EN EL DESARROLLO DE
SOFTWARE INDEPENDIENTE DE LA
PLATAFORMA
PRESENTADA POR:
SOLEDAD BENAVENTE RAMOS
PUNO – PERU
2013
UNIVERSIDAD NACIONAL DEL ALTIPLANO
ESCUELA DE POST GRADO
MAESTRÍA EN INFORMÁTICA
MENCIÓN GERENCIA DE TECNOLOGÍAS DE INFORMACIÓN Y
COMUNICACIONES
TESIS
“ABSTRACCIÓN EN EL DESARROLLO DE SOFT-
WARE INDEPENDIENTE DE LA
PLATAFORMA”
PRESENTADA POR LA BACHILLER:
SOLEDAD BENAVENTE RAMOS
PARA OPTAR EL GRADO ACADEMICO DE
MAGÍSTER SCIENTIAE EN: INFORMÁTICA
CON MENCIÓN EN GERENCIA DE TECNOLOGÍAS DE
INFORMACIÓN Y COMUNICACIONES.
Presidente: _____________________________________
Asesor: _____________________________________
___________________________________________
AGRADECIMIENTOS
A mis padres Teodoro y Ángela por sus consejos, amor y comprensión.
Todo lo que soy y he logrado es gracias a ustedes, a su esfuerzo y sacrificio.
Gracias por su apoyo incondicional y aconsejarme en cada una de las eta-
pas de mi vida.
A mis hermanos Leonidas y Aydee por sus consejos y apoyo para seguir
adelante en todo lo que me proponía.
A Junior, gracias por apoyarme, por tu paciencia y comprensión en los mo-
mentos que lo requería. Comparto contigo este logro y esta etapa de mi
vida.
__________________________________________________
ÍNDICE
ÍNDICE DE FIGURAS
ÍNDICE DE TABLAS
RESUMEN
Esta tesis describe el modo en el que un sistema computacional de programación
universal para ello se estudió distintos sistemas así como la raíz computacional
mente del lenguaje en el que hayan sido creadas. La flexibilidad dinámica del
This thesis describes the way in which a computer system programming dy-
language without modifying the implementation of the system low and hence
without losing their code portability. All abstractions offered by the extension
of the platform, using their own language, they are adaptable to any applica-
can interact with each other under the computational model, regardless of the
language in which they were created. Dynamic flexibility of the system created
tigated about the performance of existing systems, which will contribute to the
palmente, por los requisitos que los futuros usuarios demandarán de dicha
ción, así como el propósito para el que éste haya sido diseñado, restringe de
algún modo la sencillez con la que pueda emplearse para resolver un deter-
fueron creados. Por otro lado, los denominados lenguajes de propósito gene-
análoga, pueden ser elegidos, por ejemplo, para desarrollar aplicaciones por-
tables y distribuidas en el primer caso, o bien para crear aquéllas en las que
fue creada, para poder amoldarse a nuevos requisitos que puedan surgir a lo
cionalidad principal.
algo fijo e invariable a lo largo del ciclo de vida de las aplicaciones codificadas
PROBLEMA DE LA INVESTIGACIÓN
virtual heterogénea.
quiera que sea su lenguaje de programación, como por cualquier otro pro-
presar su adaptación.
1.2. JUSTIFICACIÓN
llar sobre estos Cross Platform Support Middleware, un Middleware que ga-
en todas las plataformas con las que es compatible. Así como el describir el
de compromiso, para de este modo poder optar por la mejor alternativa en una
futura implementación.
1.3. OBJETIVOS
1.3.1 OBJETIVO GENERAL.
lenguaje y plataforma.
quier plataforma.
CAPITULO II.
MARCO TEÓRICO
actividades humanas. Una manera de explicar esto es que hacen uso de he-
bian información.
rios sobre todo a aquellos que no tienen los conocimientos técnicos adecua-
dos para reconfigurar sus dispositivos cada vez que se cambian de entorno.
2.2.3 ABSTRACCION
ha sido el nivel de abstracción del que cada uno de ellos hace uso.
Los lenguajes de programación son las herramientas mediante las cuales los
tinguen al objeto de los demás. Además de distinguir entre los objetos provee
objeto tiene más características de las necesarias los mismos resultarán difí-
a un objeto.
muy parecidas que resolvían una y otra vez los mismos problemas. Para con-
seguir que sus esfuerzos pudiesen ser utilizados por otras personas se creó
dad entre usuarios de manera que el código se pueda reutilizar una y otra vez.
(Bobak, 1993).
FORMA
emplear.
aplicación, así como entre distintas aplicaciones dentro del sistema, ha de lle-
utilizadas.
2.2.6 EXTENSIBILIDAD
nocer dinámicamente los servicios existentes para poder ampliar éstos, si así
forma.
Una aplicación podrá hacer uso de los servicios desarrollados que extiendan
programación y plataforma.
fuente, y reanudarla.
lenguaje de programación.
sistema computacional.
se agregan las nuevas características (etapa alfa), después una etapa donde
se han quitado todos los bugs importantes (etapa estable). Las etapas inter-
regular formalmente por los desarrolladores del producto, pero los términos
2.2.9 CROSS-PLATFORM
dividirse en dos tipos; requiere una compilación individual para cada plata-
como todas las plataformas existentes o en tan pocos como dos plataformas.
En informática, una plataforma es un sistema que sirve como base para hacer
compatible. Dicho sistema está definido por un estándar alrededor del cual se
usuario compatibles.
gramas que permiten ejecutar desde una plataforma programas de otra emu-
2.2.11 COMPILADOR
mano, para luego compilarlo a un programa más manejable por una compu-
tadora.
manera lo más sencilla posible para una persona. El primer compilador fue
1950 John Backus dirigió una investigación en IBM sobre un lenguaje alge-
METODOLOGIA
del desempeño.
del sistema diseñado así como el estudio de los distintos sistemas existentes
similares al buscado. Los requisitos del sistema nos permiten reconocer los
ampliaciones.
La especificación de los requisitos nos ayudará a establecer los objetivos bus-
ción e implantación de éstos será una tarea crítica, puesto que todo el sistema
procesamiento.
de programación.
ceso de compilación deberá ser factible una traducción desde diversos len-
tamaño reducido.
tación deberá ser lo más sencilla posible. Esta semántica es la descripción del
conseguimos reducir al máximo la plataforma raíz para que pueda ser implan-
quier problema.
blema.
tar el número de primitivas sobre las existentes para añadir un mayor nivel de
Una aplicación portable deberá ser capaz de conocer las funcionalidades exis-
una aplicación podrá saber si las operaciones que demanda han sido desa-
nos encontramos.
lenguaje.
TIVO
primitivas.
La reducida parte del sistema que sea dependiente de la plataforma deberá
acceso bien definida. La migración del sistema a una plataforma física distinta,
del correcto nivel 3 Cuanto más reducido sea el tamaño de código implemen-
computación es una tarea difícil: Un bajo nivel de abstracción hace más com-
dinámicamente.
(EXTENSIBILIDAD)
(ADAPTABILIDAD)
ficar o elegir éstas en función de las necesidades del programador. Si, por
entorno de programación.
drá una parte mínima del entorno de programación. Por esta razón, en un
realmente exista.
El principal objetivo del sistema buscado en esta tesis, es obtener sistema con
máquina abstracta.
pítulo, dejando los aspectos de seguridad como una capa adicional que res-
mente.
ción del comportamiento del sistema. Muchos sistemas poseen esta capaci-
aplicación.
tación sin necesidad de que la especificación del lenguaje tenga que existir
previamente en el sistema.
cia.
deberá tener un acceso directo –sin ningún artificio o middleware– a todas las
será necesario construir una aplicación de un modo especial para que pueda
Definiremos brevemente todos los requisitos que debe cumplir nuestro sis-
concreto.
ceso a la plataforma deberá tener una interfaz similar para cada una de los
table de nuestra plataforma podrá acceder a los recursos propios del sistema
real en ejecución.
neos.
1.3.4.5. HETEROGENEIDAD
ción o una parte de ella podrán desplazarse en función de una serie de con-
ción.
para obtener esta flexibilidad no debe imponer ningún tipo de restricción pre-
via.
con distintos procesos, todos ellos interactuando entre sí. El acceso, modifi-
dos en los requisitos del sistema, destacando los requisitos logrados y las ca-
rencias existentes.
Una vez descritos y analizados los distintos sistemas, identificaremos qué re-
quisitos han sido cumplidos por los casos prácticos existentes y cómo adap-
tarlos a nuestros objetivos, así como sus insuficiencias y las necesidades sur-
que el código desarrollado para esta plataforma puede ser ejecutado en cual-
Máquina-p
digo-p (Campbell,1983). La única parte del sistema que había que implemen-
tiempo de ejecución.
OCODE
una máquina abstracta diseñada como una máquina de pila. Se utilizaba como
brado a AmigaDOS.
10 Stack Frame Oriented: Por cada bloque se apila un marco o contexto pro-
Forth
pila de datos: los parámetros de una operación son tomados del tope de la
una invocación a una subrutina, para poder retornar al punto de ejecución ori-
Parlog Machine) (Gregory, 1987) es una máquina virtual del lenguaje de pro-
Code War
La portabilidad del código es utilizada para crear programas que “luchen” entre
que sea capaz de eliminar todos los procesos de los programas contrarios que
moria de la máquina.
organización de campeonatos siendo “King of the Hill” uno de los más cono-
cada turno. Una vez evaluada la instrucción de un programa, toma otro código
wdney, 1990).
cesos son almacenados por la máquina virtual en una pila de tareas. Cuando
dad del código escrito para una plataforma virtual: requisito. En la mayoría de
los casos, los distintos lenguajes de programación son compilados a una pla-
Esto rompe con el requisito, que impone el diseño de una plataforma de forma
aplicaciones.
res utilizados.
ción de un programa.
tación sobre una plataforma concreta, podrá asociar ésta a una máquina
en particular.
sas tareas.
realizan una parte del trabajo global, y todas ellas se comunican entre sí
Cada plataforma UNIX que desee utilizar PVM deberá ejecutar el proceso de-
(Booch, 1994).
PerDiS
1998).
ordenadores.
bases de datos orientadas a objetos. PerDiS permite, al igual que en los en-
tornos de programación de memoria compartida (Li, 1989) desarrollar aplica-
cada nodo ordenador del sistema se comporta al mismo tiempo como cliente
y servidor. La Figura 4 muestra los componentes propios de la arquitectura
del sistema:
gramación.
Una única librería, independiente del lenguaje, que sirve como nexo entre
y en cada nodo existe parte del almacenamiento global del sistema aunque
que tratan de ofrecer una plataforma de computación virtual. Para ello, no de-
finen una máquina abstracta con todos los requisitos identificados, sino que
La unión de todos los accesos desde las distintas plataformas existentes con-
zada como una sola entidad para la resolución de un problema. Este requisito
es definido como global del sistema final; si bien busca una única entidad de
de sistema.
El principal inconveniente de los sistemas estudiados reside en que su diseño
Smalltalk-80
rox, Palo Alto. Empezó en la década de los setenta, pasando por la implemen-
sistema que fuese manejable por personas no informáticas. Para llegar a esto,
de basura de objetos.
dos de Class) del sistema (del diccionario Smalltalk) y nos visualiza la in-
formación de ésta:
Sus métodos.
Sus atributos.
Figura 5 Acceso al método “inspect” del grupo “user interface”, propio del objeto“Ob-
ject” perteneciente ñal grupo “Kernel-Objects”.
El aplicar estos criterios con todos los programas del sistema hace que la pro-
máquina virtual, una integración entre todas sus aplicaciones, una indepen-
Self
proyecto Self (Ungary, 1987). Se especificó una máquina abstracta que redu-
talk. El criterio principal de diseño fue representar el sistema sólo con objetos,
(Sun, 1998).
sea o no, representación gráfica; esta facilidad es definida como “live editing”.
Los objetos existentes en el sistema son compartidos por todos los usuarios y
aplicaciones.
Uno de los proyectos para los que se utilizó fue el proyecto Merlin: un sistema
1993). Self fue ampliado para obtener un grado de flexibilidad mayor, ofrecido
Java
la máquina abstracta (Sun, 1995). Estas clases son utilizadas por el progra-
diseñador del simulador, que podrá utilizar las ventajas propias de la plata-
forma real.
1Si bien no define exactamente su arquitectura, supone la existencia de determinados elementos de ésta
como una pila [Sun95].
La característica de definir una plataforma independiente está implícita en la
centralizar todo el código en una sola máquina y ser cargado desde los pro-
ser un virus distribuido, que se ejecute en nuestra máquina una vez deman-
es el “code verifier” (Sun, 1995). Una vez que el código ha sido cargado, entra
ners, 1998).
quina virtual, el acceso a todos los recursos que se estime oportuno2. Se pue-
den definir así los límites del software obtenido; ver la ejecución de un applet
duro.
dos.
2 Este concepto ha sido definido como caja de arena o “sandbox”. Debido lo estricto que resul-
taba para el desarrollo de applets, en Java2 se ha hecho más flexible mediante la utilización de
archivos de políticas en el “Java Runtime Environment” del cliente Dageforde2000].
En un determinado equipo servidor, se diseña una aplicación y se compila al
la especificación.
Figura 7 Arquitectura interna de la máquina virtual de Java.
ejecución de la máquina.
clases de la aplicación.
ejecución. Por cada hilo en ejecución, se crea una zona de pila, un registro
de este tipo.
capacidades reducidas, hasta amplias APIs para los entornos más potentes.
.NET
física utilizada. La versión final de .NET está anunciada para el año 2002. Una
marco de trabajo base: código base, válido para cualquier plataforma, que
desde una aplicación web con un navegador de Internet o bien desde una
sito.
ner una serie de resultados con su utilización, ninguna se desarrolló para so-
un problema ad hoc.
diadas, Self, posee más de 100.000 líneas de código C++ y 3.000 líneas de
tiempo de ejecución.
vas, pero para ello hay que modificar la implementación de la máquina virtual.
quina.
tiva. La única máquina abstracta que lleva a cabo este requerimiento es Java,
localizan los métodos de forma agrupada, sino que hay que analizar si poseen
ción. Esto hace que la traducción desde otros sistemas sea compleja, si éstos
ción de la plataforma .NET por Microsoft, indica, de alguna forma, que es ne-
diversas alternativas para crear este tipo de aplicaciones, pero no existe una
solución global. Los objetivos buscados por Microsoft con .NET y los objetivos
MULTIPLATAFORMA
ciones para este tipo de sistemas operativos adoptan todas las ventajas indi-
plataforma.
En este apartado, estudiaremos un conjunto de sistemas operativos que ha-
nas virtuales.
Merlin
1993).
La flexibilidad obtenida para el sistema hace que esta máquina, al no ser mo-
nolíticas”.
Inferno El sistema operativo Infern ha sido diseñado para ser implantado en
taciones tradicionales. Las ventajas que ofrece este sistema operativo son
(Dorward, 1997):
operativo único para una máquina, como coexistir con otro sistema opera-
tivo como Windows NT, Windows 95, Irix, Solaris, Linux, AIX, HP/UX y Net-
BSD.
independiente de la plataforma.
máquina abstracta como motor de ejecución: Dis, “the Inferno Virtual Machine”
(Winterbottom, 1997).
El diseño de esta máquina abstracta, al estar enfocado al desarrollo de un
a cabo como un intérprete, sino como la raíz de todas las arquitecturas de los
procesadores modernos.
posible.
de computación.
Oviedo3
tegral orientado a objetos. Las características que soporta son las propias de
Encapsulamiento.
Herencia.
Polimorfismo.
Concurrencia.
Persistencia.
Distribución.
zar los requisitos inherentes al sistema, surgen otros conceptos como el paso
con direcciones físicas de memoria, sino que cada área se puede considerar
información está compuesta por los métodos que tiene, las variables miem-
Área de Instancias. Los objetos son ubicados en esta área. Cuando se crea
relaciona con el área de clases de manera que cada objeto puede acceder
cia, podremos pasarle al objeto los mensajes pertinentes para que éste los
interprete.
Referencias del Sistema. Son una serie de referencias que posee la má-
ción.
la excepción lanzada.
de retorno.
Self/R, los sistemas son también independientes del lenguaje: se puede ac-
cesador utilizado.
han sido evaluados en función de estos criterios. Para llevar a cabo la valora-
nado, del conjunto global de sistemas estudiados en esta tesis, los más pró-
en:
(Goldberg, 1983).
dos en MOPs.
forma:
lenguaje preestablecido.
las plataformas.
de primitivas operacionales.
la propia plataforma.
punto.
I. Nivel de abstracción del modelo de computación. La elección de su modelo
GRAMACIÓN.
lenguaje de programación.
dos localmente.
en tiempo de ejecución.
tiempo de ejecución.
canismo estándar.
1.6. EVALUACIÓN
de la evaluación, consúltese.
A.1 1 1 1 1 1
A.2 0 1 1/2 0 1
A.3 1 1 1 1 1
A.6 1 0 1 0 1
A.7 0 1 1/2 1 1
A.8 1 0 1/2 0 1
Criterios de Plataformas de
Computación
10.00 9
8.00 6.75
6.03 Smalltalk
5.53
6.00 Self
3.53 Java
4.00
MtaXa
2.00 nitrO
0.00
Plataformas
B.1 1 1 1/2 1 1
B.2 1 1 0 1 1
B.3 1 1 1 1 1
B.4 1 1 1/2 0 1
TOTAL 4 4 2 3 4
torno de programación:
3.5
3
3
Smalltalk
2.5 Self
2
Java
2
MetaXa
nitrO
1.5
0.5
0
Plataformas
C.1 1 1 1 1 1
C.2 1 1 0 1 1
C.3 0 1 1/2 1 1
C.4 0 0 0 0 1
C.5 0 0 0 0 1
C.6 1 1 0 0 1
total 3 4 1.5 3 6
del sistema:
Criterios de Flexibilidad
6
6
4
Smalltalk
4
Self
3 3 Java
3
MetaXa
nitrO
2 1.5
0
Plataformas
Figura 14 Evaluación de los criterios de flexibilidad.
D.1 0 0 1/2 0 1
D.2 0 0 1 0 1
D.3 0 0 0 0 1
Total 0 0 1.50 0 3
2.5
Smalltalk
2
Self
1.50
Java
1.5
MetaXa
nitrO
1
0.5
0 0 0
0
Plataformas
B 4 4 2 3 4
C 3 4 1.5 3 6
D 0 0 1.5 0 3
25
22
20
Smalltalk
14.75
Self
15 12.525
Java
11.03
9.53 MetaXa
10 nitrO
0
Plataformas
RESULTADOS Y DISCUSIONES
dos.
FORMA DE COMPUTACIÓN.
mación para el que fueron creadas por ejemplo bloques (Smalltalk) o even-
C. Aunque alguna de las plataformas haya sido creada para dar soporte
definido.
D. El número de primitivas computacionales es 240 para Smalltalk, 8 para Self,
200 para Java y MetaXa y 6 para nitrO. Normalizando los valores entre cero
posee su interfaz de acceso nativo (JNI, Java Native Interface) (Sun, 1997);
cución.
FLEXIBILIDAD.
sus objetos.
estas restricciones.
F. Las aplicaciones dentro del sistema Self, Smalltalk y nitrO, son ejecutadas
operativo utilizado.
4.5. DISCUSIONES
cipal problema de esta plataforma es que ha sido diseñada para ofrecer re-
Para cumplir los objetivos de este grupo de requisitos, los dos sistemas que
de un mecanismo de codificación.
taformas Self, Smalltalk y nitrO, las hacen óptimas para construir sobre ellas
talk ofrece interacción directa entre aplicaciones; MetaXa carece de esta po-
sibilidad, pero ofrece 86 Por ejemplo, el hecho de que una aplicación pueda
2001).
tador, y que sea flexible. Self, Smalltalk y MetaXa son sistemas totalmente
cerrados, cuya interacción con el mundo exterior es compleja y dependiente
tipos).
a utilizar.
CONCLUSIONES
mación.
cambios establecidos.
ción de una aplicación a otra sucede como si fuese la misma, cualquiera que
tigación futuras, además de existir puntos en los que ampliar y mejorar las
BIBLIOGRAFÍA
Abelson H.( 2000) “Scheme. Revised Report on the Algorithmic Language Scheme”.
R. Kelsey, W. Clinger, and J. Rees Editors.
Álvarez Gutiérrez Dario, Tajes Martínez Lourdes, Álvarez García Fernando, Díaz
Fondón María Ángeles, Cueva Lovelle Juan Manuel & Izquierdo Castanedo Raúl.
(1996) Un Sistema Operativo para el Sistema Orientado a Objetos Integral Oviedo3”.
II Jornadas de Informática. Almuñécar, Granada.
Álvarez Gutiérrez Darío, Tajes Martínez Lourdes, Álvarez García Fernando, Díaz
Fondón María Ángeles, Cueva Lovelle Juan Manuel & Izquierdo Castanedo Raúl.
(1997) “An Object-Oriented Abstract Machine as the Substrate for an Object-Oriented
Operating System”. Workshop in Object Oriented Operating Systems. Jyväskylä, Fin-
landia.
Assumpcao Jr. Jecel & Takeo Kufuji Sergio. (1995) “Bootstrapping the Object- Ori-
ented Operating System Merlin: Just add Reflection”. Workshop on Advances in Met-
aobject Protocols and Reflection.
Bancilhon François, Belobel Claude & Kanellakis Paris. ( 1992) “Building an Object-
Oriented Database System – The store of O2”. Morgan Kaufman.
Beners-Lee Tim, Fielding R. & Frystyk H.(1996) “Hypertext Transfer Protocol – HTTP
1.0”. HTTP Working Group.
Booch Grady. (1994) “Análisis y diseño orientado a objetos con aplicaciones”. Edito-
rial Addison-Wesley / Díaz de Santos.
Brodie Leo. (1987) “Starting Forth: an Introduction to the Forth language and Operat-
ing System for Beginners and Professionals”. Prentice Hall.
Chambers Craig & Ungar David. (1991) “Making Pure Object-Oriented Languages
Practical”. OOPSLA ’91 Conference Proceedings, Phoenix, AZ.
Clark K. L.& Gregory S.(1983) “Parlog: A Parallel Logic Programming Language”. Im-
perial College, London.
Cueva Lovelle Juan Manuel, Izquierdo Castanedo Raúl y Álvarez Gutiérrez Darío.
(1996) “Oviedo3: Acercando las Tecnologías Orientadas a Objeto al Hardware”. I Jor-
nadas de Trabajo en Ingeniería del Software. Sevilla.
Geist Al, Beguelin Adam, Dongarra Jack, Jiang Weicheng, Mancheck Robert & Sun-
deram Vaidy. (1994) “PVM: Parallel Virtual Machine – A Users’ Guide and Tutorial for
Networked Parallel Computing”. The MIT Press. Cambridge, Massachusetts, EE.UU.
Goldberg A. & Robson D. (1983) “Smalltalk-80: The language and its Implementa-
tion”. Addison-Wesley.
Gosling James, Joy Bill & Seele Guy (1996). The Java Language Specification.
Addison-Wesley.
Gregory S. (1987) “Parallel Logic Programming in Parlog, The Language and its Im-
plementation”. Addison-Wesley.
Jensen K. y Wirth N. (1991) “PASCAL User Manual and Report ISO Pascal Standard”.
4º Edición Springer-Verlag.
Johnston Stuart J. (2000) “The Future of COM+ –Microsoft’s .NET Revealed”. The
XML Magazine.
Keleher Pete. ( 1996) “CVM: The Coherent Virtual Machine”. University of Maryland.
Kleinöder Jügen & Golm Michael. (1996) “MetaJava: An Efficient Run-Time Meta Ar-
chitecture for Java™”. Proceedings of the International Workshop on Object Orienta-
tion in Operating Systems. Seattle, Washington (EE.UU.).
Kloosterman Sytse & Shapiro Marc. (1998) “Large Scale Distributed Object Program-
ming Made Easy”. www.perdis.esprit.es.org.
Koelbel Charles H., Loveman David B., Schreiber Robert S., Steele Guy L. & Zosel
Mary E. (1994) “The High Performance Fortran Handbook”. Editorial Zosel.
Kramer Douglas. (1996) “The Java Platform. A White Paper”. Sun Micro- Systems
JavaSoft.
Li Kai & Hudak Pal. (1989) “Memory coherence in shared virtual memory systems”.
ACM Transactions on Computer Systems.
Martínez Ana Belén, Álvarez Darío, Cueva Juan Manuel, Ortín Francisco & Pérez
José Arturo. ( 1998)“Incorporating an Object-Oriented DBMS into an Integral Object
Oriented System”. Proceedings 4th International Conference on Information Sys-
tems, Analysis and Synthesis. Vol. 2. EE.UU.
Mével A. & Guéguen T. (1987) “Smalltalk-80”. Mac Millan Education, Houndmills, Ba-
singstoke.
Nori K. V., Ammann U., Jensen K., Nageli H. H. & Jacobi C. (1976) “The Pascal-P
Compiler: Implementation Notes”. Bericht 10, Eidgengössische Technische
Hochschule. Zurich, Suiza.
Orfali Robert, Harkey Dan & Edwards Jeri. (1996) “The Essential Client / Server Sur-
vival Guide”. Second Edition. Wiley.
Ortín Soler Francisco, Martínez Prieto Ana Belén, Álvarez Gutiérrez Darío & Cueva
Lovelle Juan Manuel. ( 2000) “Diseño de un Sistema de Persistencia Implícita me-
diante Reflectividad Computacional”. IV Jornadas de Ingeniería del Software y Bases
de Datos (JISBD). Cáceres (España).
Richards Martin. (1971) “The Portability of the BCPL Compiler”. Software Practice
and Experience.
Richards Martin & Whitby-Stevens Colin. (1979) “BCPL – The Language and its Com-
piler”. Cambridge University Press.
Sun Microsystems, Inc. (1995)“The Java Virtual Machine Specification”. Release 1.0
Beta Draft. Sun Microsystems Computer Corporation.
Sun Microsystems, Inc. (1997) “picoJava I Data Sheet. Java Processor Core”. Sun
Microsystems.
Sun Microsystems, Inc. (1998) “The Java HotSpot Virtual Machine Architecture”.
White Paper. Sun Microsystems.
Ungary David, Chambers Craig, Chang Bay-wei & Hölzle Urs. (1991) “Organizing
Programs Without Classes”. Lisp and Symbolic Computation: An International Jour-
nal.
Venners Bill. (1998) “Inside the Java Virtual Machine”. Java Masters. McGraw Hill.
Winterbottom Philip & Pike Rob. (1997) “The Design of the Inferno Virtual Machine”.
Bell Labs, Luncent Technologies.
Wolczko Mario, Agesen Ole & Ungar Davied. (1996) “Towards a Universal Implemen-
tation Substrate for Object-Oriented Languages”. Sun Microsystems Laboratories.
ANEXOS I
CODE ::BLOCK
La Versión MetaXa
Entorno de desarrollo para MetaXa,con el respectivo código fuente de prueba.
Figura 17 Entorno de desarrollo para MetaXa
Linux
Figura 18 Sistemas gráficos GNOME, KDE, X11, XFCE
Debido a que Dev-C++ es un IDE para los lenguajes C y C++ y está creado
Versión Windows
Figura 19 Multi-plataforma. Funciona Mac , Windows.
El IDE de código abierto, multiplataforma y libre para C++.
PROGRAMA MXFRACTAL
sobre Windows.
Código fuente:
Archivo: Fractal.cpp
01 /////////////////////////////////////////////////////////////////////
02 // Name: fractal.cpp
02 // Modified by:
03 // Created: 05.04.94
07 /////////////////////////////////////////////////////////////////////
08
09
10 #include "wx/wxprec.h"
11
12 #ifdef __BORLANDC__
13 #pragma hdrstop
14 #endif
15
16 #ifndef WX_PRECOMP
17 #include "wx/wx.h"
19
20 #include "wx/math.h"
21 #include "wx/stockitem.h"
22
23 #include <stdlib.h>
24 #include <time.h>
25
28
30
33
36 {
37 public:
38 bool OnInit();
39 };
40
41 IMPLEMENT_APP(MyApp)
42
45 {
46 public:
49
52
53 DECLARE_EVENT_TABLE()
54 };
55
58 {
59 public:
60 MyCanvas(wxFrame *frame);
62
63 private:
65 void Fractal(wxDC& dc, int X1, int Y1, int X2, int Y2, int Z1, int Z2, int Z3,
68 wxBrush WaterBrush;
69 int Sealevel;
70
71 DECLARE_EVENT_TABLE()
72 };
73
74 // `Main program' equivalent, creating windows and returning main app frame
75 bool MyApp::OnInit()
76 {
80
81 // Make a menubar
83 file_menu->Append(wxID_EXIT, wxGetStockLabel(wxID_EXIT));
85 menuBar->Append(file_menu, _T("&File"));
86 frame->SetMenuBar(menuBar);
87
89 frame->GetClientSize(&width, &height);
90
92
94 frame->Show(true);
95
96 return true;
97 }
98
99 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
100 EVT_CLOSE(MyFrame::OnCloseWindow)
102 END_EVENT_TABLE()
103
108 | wxFULL_REPAINT_ON_RESIZE )
109 {
110 }
111
114 {
115 this->Destroy();
116 }
117
119 {
121 if (destroyed)
122 return;
123
124 this->Destroy();
125
127 }
128
130 EVT_PAINT(MyCanvas::OnPaint)
131 END_EVENT_TABLE()
132
139
142
145
148 }
149
151 {
153 PrepareDC(dc);
154 Draw(dc);
155 }
156
158 {
159 if (running) return;
160
163
164 Randomize();
165
166 dc.SetBackground(*wxLIGHT_GREY_BRUSH);
167 dc.Clear();
168
171
174 Left = 0;
176
183 dc.SetBrush(WaterBrush);
185
191
193
196 }
197
198 void MyCanvas::Fractal(wxDC& dc, int X1, int Y1, int X2, int Y2, int Z1, int
199 Z2, int Z3, int Z4, int Iteration, double Std, double Ratio)
200 {
206 Std);
207
208 if (--Iteration)
209 {
213
214 Fractal(dc, Xmid, Y1, X2, Ymid, Z12, Z2, Z23, Newz, Iteration, Stdmid,
215 Ratio);
216 Fractal(dc, X1, Y1, Xmid, Ymid, Z1, Z12, Newz, Z41, Iteration, Stdmid,
217 Ratio);
Fractal(dc, Xmid, Ymid, X2, Y2, Newz, Z23, Z3, Z34, Iteration, Stdmid,
218
Ratio);
219
Fractal(dc, X1, Ymid, Xmid, Y2, Z41, Newz, Z34, Z4, Iteration, Stdmid,
220
Ratio);
221
}
222
else
223
{
224
if (Newz <= Sealevel)
225
{
226
wxPoint P[4];
227
228 P[0].x = Y1 / 2 + X1; P[0].y = Y1 + Z1;
232
235
237
239 dc.SetPen(GreenPen);
241 dc.SetPen(MtnPen);
242 else
243 dc.SetPen(SnowPen);
244
246 }
247 }
248 }
249
250
251
252
253
254
255
256
257
258
259
260