Ir al contenido

Programación en Erlang/Implementación y uso de la programación orientada a objetos

De Wikilibros, la colección de libros de texto de contenido libre.

Objetos

[editar]

Erlang no tiene explícitamente incorporado características de lenguaje orientado a objetos. Un estilo de programación orientado a objetos se puede lograr por otros medios fácilmente. Es especialmente fácil de hacer programación orientada a objetos, si nos limitamos a la herencia simple. Se puede utilizar procesos para representar a las clases y mensajes para representar a los métodos. Para ello, cada objeto cuando se creó puede crear una cadena de procesos que representan a sus antepasados en la cadena de herencia. Los métodos (mensajes) se puede pasar por la cadena hasta llegar a un proceso que tiene un método de emparejamiento. Si el mensaje llega a la cima de la cadena (la clase objeto o superior que dev_nul), entonces podemos generar una excepción para el “nombre de un método malo". Cada clase (proceso) mantendrá sus propios atributos (variables) en su propia lista recursiva de la llamada de argumentos. Estos atributos se pueden acceder y actualizar con mensajes así como get y set. Los atributos son almacenados en un diccionario llamado Bundle, en cada proceso de clase.

Se incluye un código de ejemplo que crea Programación Orientada a Objetos utilizando la técnica descrita. En el programa, creamos una instancia de la clase entero. Su padre real, sabe cómo tomar la raíz cuadrada de números reales. su padre complejo, sabe cómo tomar la raíz cuadrada de números negativos. Su padre matriz, sabe cómo tomar la raíz cuadrada de una matriz diagonal.

Lógicamente, la relación de clase tradicional es sotenida en el diagrama de clase. Un entero es un Real. un Real (float) es un (subconjunto de) complejo. Un número complejo es un (subconjunto de) matrices complejas, si pensamos en una matriz (1 por 1) como un solo número.

Un mensaje (método) es enviado a una instancia de un objeto. Si un proceso no sabe cómo hacer algo, pasa un mensaje (método) a su padre (proceso en esta situación). Si tratamos de hacer algo como tomar la raíz cuadrada de una matriz diagonal será pasada hasta dev_nul y generara un error.

La función inicial crea una instancia de la clase entero. Después le pregunta a la instancia que calcule la raíz cuadrada de 4 números: 4, 0.04, -4 y la matriz 4,0,0,9. Las respuestas son: 2, 0.2, {2,i} y 2,0,0,3.