lunes, 9 de agosto de 2010

Erlang y OOP

Mi primera experiencia de programación fue con Erlang, un lenguaje de programación orientado a la concurrencia (Concurrency Oriented Programming) y cuyo énfasis es la confiabilidad. Se trata de un lenguaje funcional.
El modelo de memoria está basado en "tail-call optimization" de unidades con estado llamadas "procesos". Estos procesos no guardan información de estado compartida, comunicándose únicamente mediante mensajes. Si un proceso es modificado y algo falla, se restituye a su estado previo (parecido a la destrucción y vuelta a crear del objeto, pero en memoria.)
Estas características permiten actualizaciones en caliente de la aplicación, cosa que no se ve en los ambientes OOP.

Sin entrar a realizar una introducción al lenguaje; existe una cierta correspondencia entre los modelos Erlang y OOP. Por ejemplo, una clase con propiedades y métodos:

public class myClass
{
   private string myProperty;

   public myClass(string argInit) {
      myProperty = argInit;
   }

   public myMethod(string arg1, int arg2) {
      //do something
      myProperty = arg1 + arg2.toString();
   }
}

En un proceso en Erlang:

myClass(myProperty) ->
   receive
      {myMethod, Arg1, Arg2 } ->
         myClass(Arg1 ++ Arg2)
   end.

Cuyo constructor queda implícito en el desove (spawn) del proceso:

spawn( myClass, [argInit ]).

Asi que un método de un objeto (OOP) es un mensaje en Erlang, tal como se describe en los diagramas de secuencia UML.

No hay comentarios: