Está en la página 1de 5

LENGUAJE Y PARADIGMAS DE LA PROGRAMACIÓN, JULIO 2013 1

Lenguaje de Programación OZ
Cristián Mauricio Faúndez Maripangue

Abstract—Oz es un lenguaje multiparadigma y a la vez, es un Saarland, el Instituto Sueco de Ciencias de la Computación,


lenguaje esotérico que puede combinar en sus programas tantas y la Universidad Católica de Louvain). Finalmente en 2005,
herramientas que los lenguajes más estructurados no pueden. el desarrollo de Mozart queda a cargo de un grupo base, el
Según Bjarne Stroustrup (famoso por desarrollar el lenguaje de
programación de C++) permite “crear programas usando más Tablero de Mozart, con el fin de expandir los márgenes de
de un estilo de programación”. desarrollo de Mozart.
Conceptos Clave—Multiparadigma, esotérico, kernel, progra-
mación lógica, funcional, imperativa, orientada a objetos, con 2) Caracterı́sticas especiales: Oz posee variadas carac-
restricciones, distribuida, concurrente. terı́sticas que lo hacen ser único en la forma en la cual está
diseñado. Entre las caracterı́sticas más llamativas están:
I. I NTRODUCCI ÓN • Esotérico o exótico: Se dice que un lenguaje posee
esta caracterı́stica cuando son creados por el pasatiempo
Z es un lenguaje de programación multiparadigma que
O brinda a sus desarrolladores la oportunidad de crear
programas utilizando varios estilos de programación, como
de los desarrolladores, quienes buscan crear lenguajes
alejados del razonamiento humano intentando, a la vez,
conseguir que dicho lenguaje sea un Turing Completo.
son orientada a objetos/funcional/lógica/imperativa/con restric- Éste concepto es aplicado cuando algo posee un poder
ciones/distribuida/concurrente. Dada su variabilidad de estilo, computacional equivalente con la máquina universal de
este lenguaje fue concebido para el diseño de aplicaciones Turing.
avanzadas, concurrentes, redes, tiempo real, reactivas, entre • Kernel: Un kernel en un lenguaje de programación es un
otras. Pero sus caracterı́sticas no llegan solo hasta aquı́, lenguaje base del mismo, es decir, en términos simples
también es caracterı́stico de este lenguaje la utilización de se puede considerar como la gramática base del lenguaje,
un kernel del lenguaje, además de poseer la caracterı́stica de la cual permite extenderlo hacia cada tipo de aplicación
ser un lenguaje esotérico (caracterı́sticas detalladas posterior- que se desea realizar. Dado esto, los lenguajes con kernel
mente). Como en todos los lenguajes, el ejemplo introductorio se denominan “lenguaje expandibles”. El kernel de Oz se
es hello world, en Oz, dicha frase serı́a implementada como: presenta a continuación:
{Browse ’Hello World’} <Statement> ::= <Statement1> <Statement2>
%o tambien | X = f(l1:Y1 ... ln:Yn)
{Show ’Hello World’} | X = <number>
| X = <atom>
Julio 4, 2013
| X = <boolean>
| {NewName X}
II. O Z | X = Y
A. Historia y Caracterı́sticas | local X1 ... Xn in S1 end
| proc {X Y1 ... Yn} S1 end
En esta sección se detallarán los aspectos más relevantes
| {X Y1 ... Yn}
de este lenguaje en cuanto a historia, caracterı́sticas que lo
| {NewCell Y X}
hacen diferente a otros lenguajes y especificaciones respecto a
| Y=@X
los conceptos claves que permiten conocer el funcionamiento
| X:=Y
(de forma global) de Oz.
| {Exchange X Y Z}
| if B then S1 else S2 end
1) Historia: El lenguaje de programación Oz nace en
| thread S1 end
1990 en la Universidad de Saarland en los laboratorios de
| try S1 catch X then S2 end
Programación de Sistemas con el fin de crear un lenguaje que
| raise X end
pudiese combinar múltiples herramientas de otros lenguajes
para darle la posibilidad de desarrollar software de diversas • Multiparadigma: Se dice que un lenguaje es
formas. Originalmente fue creado por el profesor Gert Smolka multiparadigma cuando es capaz de utilizar más de
y sus estudiantes, sin embargo pasaron años antes que otro un paradigma de programación.
equipo de desarrollo lo tomara y mejorara, lo que ocurrió
en 1996 con el grupo de investigación de Seif Haride en el 3) Multiparadigma: Oz, como ya se ha mencionado, está
Instituto Sueco de Ciencias de la Computación. Continuando creado en base a varios paradigmas de programación, sin
en el tiempo, en 1999 el desarrollo de Oz se hace contı́nuo a embargo, su enfoque central haya silo en el paradigma con-
cargo del Consorcio Mozart (compuesto por Universidad de currente y distribuido con tintes de orientación a objetos
LENGUAJE Y PARADIGMAS DE LA PROGRAMACIÓN, JULIO 2013 2

y funcional, sin embargo Oz presenta muchas formas de ende, si X=3 no se puede colocar X=”hola”. En caso de
desarrollo que son soportados por los paradigmas que se ejecutar el nuevo X, se lanzará de inmediato un error en
detallan a continuación. tiempo de ejecución.
• Orientado a Objetos: Utiliza la interacción de objetos • Scope: Oz posee un Lexical Scope (también llamado
instanciados de clases, con el fin de disminuir el nivel estático) ya que el valor de las variables dentro de una
de acoplamiento de los programas, dado que se puede función o procedimiento viven y mueren allı́, indepen-
distribuir en módulos. Aquı́ un breve ejemplo: diente que posean el mismo nombre que una variable
declare ClaseEjemplo global.
local Atributo in local Imprimir X Y in
Atributo = ’Hola’ proc{Imprimir X}
end {Browse X}
• Funcional: Utiliza funciones con retornos para cumplir Y=2
con los requisitos de los programas, si bien no utiliza end
asignación estructurada ni ciclos while/for, suple esta X = 5
ausencia con la implementación de nuevas funciones y {Imprimir X}
el uso de la recursión. Aquı́ un breve ejemplo: {Browse Y}
fun{AndThen VariableX VariableY} end
if {VariableX} then {VariableY} En este ejemplo imprime 5 la primera vez y 2 la segunda
else false end vez (con Browse), dado que Y es asignado en el pro-
end cedimiento Imprimir. Ahora bien, si X=2 es declarado al
• Lógico: Se basa en funciones de predicado, las cuales interior de Imprimir, lanzará error al imprimir Browse X
poseen una ı́ndole binaria, solo retornan true o false. porque predominan las asignaciones y decir X=5 y luego
Oz es capaz de distinguir entre estilos dirigidos y no X=2 no es aceptable.
dirigidos de este tipo de paradigma declarativo, por lo • Compilado: Es un lenguaje compilado y no interpretado,
tanto, permite especificar semántica lógica de un pro- el cual utiliza como compilador de “Sistema de Compi-
grama separado de su estrategia de resolución. lación Mozart”. Oz es conocido por ser compatible con
• Imperativo: Se basa en instrucciones que van senten- la mayorı́a de los SO Unix y también en Windows.
ciando los estados del programa ası́ como sus condiciones • Lazy evaluation: Posee una Lazy evaluation ya que solo
de corte. Tı́picamente se asocia este paradigma al hecho ejecuta y evalúa las acciones que son llamadas. Por
de leer o construir una receta de cocina. Básicamente sus ende, en caso de encontrar algún tipo de error, como por
ejecuciones son paso a paso. Un ejemplo simple es: ejemplo intentar cambiar el tipado de una variable, el
... compilador lanzará el error en tiempo de ejecución. Si
C = 1 dicha variable no es usada nunca, nunca lanzará el error.
{Show ’Hola Mundo’}
... 5) Ventajas y desventajas en el uso de Oz: Este lenguaje
• Con Restricciones: Las relaciones entre variables están funciona especialmente en aplicaciones de redes y tiempo real,
dadas por restricciones o ecuaciones. Oz permite a sus puesto que al utilizar mayormente el paradigma concurrente
desarrolladores restringir variables lógicas, dominios fini- y distribuido, sus propiedades sobre esta área (en especial
tos, conjuntos finitos, árboles y restricciones de registro. redes) se maximiza. Además es apoyado por el paradigma
Ejemplo son los dominios booleanos (solo poseen true orientado a objetos el cual le brinda propiedades como objetos,
o false como respuesta), dominios en variables enteras y clases abstractas y herencia. Al ser multiparadigma, puede ser
racionales, entre otros. utilizado para solucionar casi cualquier problema, sin embargo,
• Distribuido: Está enfocado en desarrollar sistemas dis- una de sus caracterı́sticas lo hace poco apetecible para los
tribuidos, abiertos y tolerantes a fallos. Su uso es común desarrolladores:
en los software de redes. La caracterı́stica de los lenguajes • Es un Lenguaje Esotérico.

que utilizan este paradigma es que el sistema puede tener Esta caracterı́stica especial lo hace poseer una sintaxis poco
acceso total al hardware. afable para el programador, por lo que es mejor utilizar otros
• Concurrente: Básicamente permite la ejecución de varias lenguajes en las aplicaciones que se orienten en el uso de
tareas simultáneas. Está firmemente relacionada con la paradigmas mas tradicionales como orientación a objetos e
programación paralela (llamada también paralelismo). imperativo.
En definitiva, Oz es altamente recomendable para programas
4) Caracterı́sticas del Lenguaje: El lenguaje presenta las que requieran un alto nivel de flexibilidad.
siguientes caracterı́sticas que permiten comprender mejor su
funcionamiento, como son su tipado, scope, forma de ejecutar B. Funcionamiento
y tipo de evaluación de funciones. Ahora se detallarán los aspectos más básicos de la sintaxis
• Tipado: Es un lenguaje fuertemente tipado, aunque no se del lenguaje Oz, tales como variables, funciones, procedimien-
necesite una función de declaración de las variables. Por tos, entre otros. Resulta una extrañeza no encontrar ciclos en
LENGUAJE Y PARADIGMAS DE LA PROGRAMACIÓN, JULIO 2013 3

este lenguaje, dado que se pueden remplazar con los otros determinada acción, es decir, los procedimientos son a Oz
paradigmas con técnicas como recursión. como los métodos son a Java. Su sintaxis está definida por:
1) Variables: La forma de declarar variables dentro de
Clases es con la función local la cual declara en primer lugar proc{Nombre A B ... Z ... Var ... Etc}
dichas variables. ...
A = 1
local A B in ...
.... end
....
end La función predefinida proc se encarga de la construcción e
inicio del procedimiento, a la vez que end se encarga de marcar
Se aprecia como las variables empiezan con mayúsculas y se su término. En el interior del procedimiento puede ir cualquier
separan con simples espacios. Luego se les puede asignar un tipo de sentencia. Cabe señalar que el nombre de dicho
valor. procedimiento se coloca al inicio de las llaves y es seguido por
local A B C D in los atributos, los cuales son separados con espacios. Existen
A = 5 además los llamados procedimientos anónimos los cuales son
B = 5.5 utilizados para usar los procedimientos como variables, para
C = ’Hola Mundo’ poder darles privacidad en una clase determinada.
D = &t Pro = proc{$ A B} ... end
end
Eso es igual a:
De este modo se inicializan variables como enteros, float,
strings y char, las cuales corresponden a las funciones básicas. proc{Pro A B} ... end
Caso especial son las listas, en donde pueden declararse de
distintas formas, las cuales son: Sin embargo, pueden ser incluidos en la declaración de atrib-
utos conjunto a la declaración instantánea de variables.
local A B C D E in
A = [1 2 3] local
B = 1|2|3|nil Pro = proc{$ A B}
C = 1|2|3|x {Browse A+B}
D = "o z" end
E = [’o’ ’z’] A = 1
end B = 2
in
En A y B se imprimirá lo mismo, la lista [1 2 3], en el caso {Pro A B}
C agrega un x al final, para términos de corte [1 2 3 x]. end
En el D imprime la notación del string, es decir enteros, en
este caso es [79 90] y finalmente E es una lista de string, 4) Case: En la mayorı́a de los lenguajes existe la sentencia
la cual contiene [o z]. Para concatenar listas se utiliza |num|nil. case, la cual cumple la misma función que varios if consecu-
tivos. Dicha función es expresada de la siguiente forma:
2) Condiciones: Las condiciones básicas son if y else, y
combinando con la declaración de variables, podemos crear case E of AccionA then S1
lógica de primer orden. [] AccionB then S2
[] AccionC then S3
local A B in [] ...
A = 2 else S end
B = 3
if A >= B then {Browse A} De esta forma, si se cumple AccionA entonces termina, de
else {Browse B} end lo contrario y dada la sintaxis [] continua con la AccionB y
end ası́ sucesivamente hasta encontrar un else y finalizar si las
condiciones no se cumplen.
Nótese con especial énfasis que las condiciones no poseen
ningún tipo de señalización de identación, sólo Oz lo reconoce 5) Funciones: Las funciones son herramientas similares a
dado espacios y caracteres bien marcados (como el then). los procedimientos, pero presentan un retorno diferente, el
Además todas las condicionales (y en general en todo Oz) se cual es una expresión en la función y un comunicado en el
termina con un end la sentencia. Se puede ademas usar la procedimiento.
sentencia elseif y se puede evitar el uso del else al terminar
con end luego del if. fun {AndThen A B}
if {A} then {B}
3) Procedimientos: Llamados “Procedural Abstraction” else false end
son los procedimientos que se realizan en Oz para una end
LENGUAJE Y PARADIGMAS DE LA PROGRAMACIÓN, JULIO 2013 4

Mientras que en un procedimiento, debiese incluirse la variable {ObjetoHe imprimir}


del comunicado, por ende seria: end
proc{AndThen A B C} Lo que dada la herencia, utiliza el método imprimir de la
C = if {A} then {B} clase padre e imprime ’Hi’. Cabe señalar que si se escribe
else false end un método con el mismo nombre y firma en la clase hijo, se
end sobreescribirá, por lo que al momento de llamarlo, se utilizará
el que se encuentre en la clase hijo y no en la clase padre.
6) Clases: Las clases en Oz, al igual que en otros lenguajes,
9) Comentarios: Nunca es irrelevante mencionar la forma
poseen un conjunto de métodos y atributos para subsistir.
de comentar en un lenguaje, por ende se hace necesario dejarlo
Si bien existen los procedimientos, estos son locales y no
explı́citamente documentado. Los comentarios en Oz se hacen
permiten su llamada desde fuera de la clase, por ende, existen
con %
métodos que si pueden ser llamados desde fuera. El ejemplo
más simple de sintaxis de clases es: %Este es el procedimiento que compara
%quien es mayor, A o B
declare class Clase
proc{Pro A B} ... end
attr Atributo
meth init(ValorAtributo)
Atributo:=ValorAtributo C. Ejemplos
end
meth imprimir Se implementará una clase con herencia.
(Browse @Atributo) declare class Animal
end attr x y
end meth init(ValorX ValorY)
En este ejemplo es posible observar que no existe un x := ValorX
“Constructor” especı́fico de la clase, sino que es un método y := ValorY
llamado init (pudo llamarse de cualquier forma) en donde end
attr corresponde a la declaración del atributo de la clase, meth mover(MovX MovY)
meth corresponde a los métodos de la misma. Las clases x := @x+MovX
pueden extenderse tanto como se quiera y utilizar en ellas y := @y+MovY
procedimientos, condicionantes y funciones como se estime {Browse [’Está en X=’ @x
conveniente. No obstante hay que señalar que los atributos se ’está en Y=’ @y]}
declaran hacia el lado (si es que es más de uno) y se utiliza end
la notación como una especie de this en Java para poder end
referenciar los atributos al interior de un método.
declare class Perro from Animal
7) Objetos: Son la forma de abstracción de las clases, las meth ladrar
cuales permiten otorgarle todas las propiedades del paradigma {Browse ’guau’}
orientado a objetos. La forma en la que se instancia un objeto, end
es (y utilizando la clase construida con anterioridad): end

local Objeto in local Perro in


Objeto = {New Clase init(’Hola Mundo’)} Perro = {New Perro init(0 0)}
{Objeto imprimir} {Perro mover(1 2)}
end {Perro ladrar}
end
8) Herencia: La herencia es tratada de forma simple por
Oz, la cual solo debe añadir a la declaración de la clase: En este ejemplo, el perro pasará de estar en la posición (0,0)
a la posición (1,2) y ladrara (’guau’). Se utilizó herencia para
declare class HeredoDe from Clase
este ejemplo, a la vez que muestra abstracción y comprueba el
meth nohagonada(Nada)
paradigma orientado a objetos. Para continuar con un ejemplo
skip
clásico, el Fibonacci en Oz:
end
end fun{Fib X}
case X
Dada la unión de herencia por la palabra from, la clase
of 0 then 1
HeredoDe posee los atributos y métodos de la clase princial
[] 1 then 1
Clase.
else thread {Fib X-1} end +
local ObjetoHe in {Fib X-2} end
ObjetoHe = {New HeredoDe init(’Hi’)} end
LENGUAJE Y PARADIGMAS DE LA PROGRAMACIÓN, JULIO 2013 5

Aquı́ se aprecia un claro ejemplo del paradigma de concurren-


cia, el cual, gracias al thread, permite una bifurcación en la
ejecución, dando la posibilidad de ejecución a los subprocesos
llamado. Ası́ es construida la recursión en Oz.

III. C ONCLUSI ÓN


Básicamente se puede concluir que Oz presenta una gran
gama de herramientas para resolver problemas y dado que es
multiparadigma no es restrictivo en cuanto a las soluciones.
Si bien lo expuesto es una pequeña parte del lenguaje, se
puede apreciar que tiene muchas similitudes con los grandes
y famosos lenguaje Java o C#. La sintaxis de Oz es un tanto
más complicada pues no fue concebido con el fin de ser masi-
vamente desarrollado. Finalmente agregar que es sumamente
recomendable utilizar este lenguaje en tareas que requieran
mucha flexibilidad por parte del software, aprovechando al
máximo la concurrencia de este lenguaje (que permite utilizar
paralelismo por ejemplo), dado esto, es utilizado en la actual-
idad en el desarrollo de sistemas de redes.

R EFERENCIAS
[1] S EIF H ARIDI Y N ILS F RANZ ÉN, Tutorial of Oz, Versión 1.4.0, 2008.
[2] A BDIEL E. C ÁCERES G ONZ ÁLEZ, Lenguajes de Programación, Instituto
Tecnológico de Monterrey, México, 2004.
[3] El sistema de Programación Mozart, Sitio oficial (http://www.mozart-oz.
org/)
[4] O SVALDO C L ÚA, Técnicas de Programación Concurrente II, 2004

También podría gustarte