Objetos con Ocaml

Ocaml es un lenguaje de permite la programación orientada a objetos. Es muy facil crear clases y objetos, pero obviamente no dispone de un extenso API como el de Java, así que la POO en Ocaml se suele quedar más bien en una mera curiosidad.
Si no sabes lo que es una clase, probablemente quieras ver antes esta introducción a la programación orientada a objetos que hice para Java, donde me detuve más para explicar de forma práctica qué son.

He estado echando un vistazo al manual (el capítulo dedicado a la POO es el 3) y desde luego, siguiendo su linea habitual, Ocaml ofrece una sintaxis bastante simple para crear clases.
Imaginemos que queremos modelar una clase “Persona” que contenga los atributos “nombre” y “edad”.
El codigo necesario sería el siguiente:
# class persona =
    object
      (* atributos *)
      val mutable nombre = "";
      val mutable edad = 0;
 
      (* metodos de escritura *)
      method setNombre n = nombre <- n
      method setEdad e = edad <- e
 
      (* metodos de lectura *)
      method getNombre = nombre
      method getEdad = edad
 
  (* fin de la clase *)
  end;;

Quizás lo que más llame la atención sea la necesidad de marcar los atributos como “mutables”. Esto es así para poder modificar su valor en algún momento, ya que sino serían simplemente valores constantes.
También resulta novedosa (en Ocaml) la forma de declarar los parámetros de los métodos y cómo estos son grabados en una variable mediante una flecha hacia la derecha como ésta: <-

Por supuesto, podemos crear un objeto de esta clase simplemente así:
# let p = new persona;;
Y operar con sus métodos de la siguiente manera:
# p#setNombre "Juan";;
# p#setEdad 20;;

Más simple no podría ser. Por supuesto, sería interesante crear clases cuyos métodos fuesen realmente orientados a objetos. Se me ocurre, por ejemplo, una clase “triangulo” que se podría implementar para realizar cálculos geométricos y trigonométricos sobre instancias de un triángulo.

Más adelante intentaré volver sobre el asunto, pero creo que no está mal para ir abriendo boca 🙂

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s