Paso de mensajes

En ciencias de la computación, el paso de mensajes es un paradigma de programación ampliamente usado en el software moderno. Sus aplicaciones cubren un amplio campo, y puede usarse desde para garantizar que los diferentes objetos que constituyen un programa informático puedan trabajar de forma coherente entre ellos hasta para permitir que una tarea pueda ejecutarse de forma sincronizada entre varios ordenadores. Es uno de los conceptos clave en modelos de programación concurrente, programación distribuida y programación orientada a objetos.

De forma abstracta, se llama mensaje a una porción de información que un proceso emisor envía a un destinatario (El cual puede ser otro proceso, un actor o un objeto). El modelo de paso de mensajes es el que define los métodos y funciones para poder llevar a cabo el envío de un mensaje de un proceso emisor a un destinatario. Supone un enfoque opuesto al paradigma tradicional en el cual los procesos, funciones y subrutinas sólo podían ser llamados directamente a través de su nombre.

Introducción

El paso de mensajes es una técnica que se usa para, desde un proceso, invocar de forma abstracta un comportamiento concreto por parte de otro actor (Por ejemplo, ejecutar una función o un programa). Esto supone un gran cambio con respecto al modelo tradicional en el cual se llamaba a los programas y funciones sólo por su nombre, el paso de mensajes constituye un mecanismo esencial para distinguir una función de su implementación interna— El emisor envía un mensaje solicitando una acción abstracta al destinatario, y es el destinatario el que, al recibir el mensaje, decidirá la acción que debe ejecutar para cumplir la petición.

Entre las ventajas que proporciona este mecanismo destacan el alto nivel de encapsulamiento y la distribución. En programación, la filosofía de encapsular la información consiste en que los objetos software deben poder invocar servicios a otros objetos, sin tener por qué conocer ni preocuparse ni de cómo ni de qué manera está implementada en su interior la resolución de dicha demanda. Esto deriva en un código más limpio, corto y fácil de comprender y mantener.

Caso práctico en programación orientada a objetos

Un ejemplo clásico de aplicación del modelo de paso de mensajes podría ser en el ámbito informática gráfica. Por ejemplo, si el programador está creando un programa que trabaja con diversos tipos de formas geométricas de un clase Forma, el programa contendrá varios objetos instancias de dicha clase, como por ejemplo cuadrado, rombo o triangulo.

Imaginemos el caso en que el programador desea conocer el área de los objetos de la clase Forma declarados. Como el cálculo del área de dichas formas no es el mismo para todas y cada una tendrá un algoritmo matemático distinto para calcularla, en un modelo tradicional el programador se vería obligado a crear una estructura condicional IF-ELSE que consultase una a una el tipo de forma de cada objeto para ejecutar la operación matemática correspondiente.

En lugar de eso, en el modelo de paso de mensajes el programador simplemente debe enviar un mensaje a cada objeto consultando su área, y sería la implementación interna de la clase Forma la que se encargaría de escoger y calcular de forma correcta dicho dato. El objeto respondería a la petición enviando de vuelta otro mensaje al destinatario con el área resultante del cálculo. Como es natural, para que esto sea posible, la clase destinataria debe tener implementado previamente un método por el cual pueda interpretar los mensajes de forma normalizada, así como las funciones necesarias para llevar a cabo el cálculo del área.[1]

Caso práctico en programación concurrente y distribuida

Otra de las aplicaciones donde este modelo supone una clara ventaja es en la programación concurrente y distribuida. En los casos en los que tengamos varios procesos ejecutándose en un mismo o en diferentes ordenadores con características y velocidad de trabajo dispares y estos procesos requieran comunicarse entre ellos para poder cumplir su función, el paso de mensajes entre ellos es uno de las formas más ampliamente aceptadas de mantener una sincronización constante y coherente entre ellos. Una de las aplicaciones más conocidas es internet, donde una red de ordenadores dispares se comunican entre ellos para intercambiar datos en diferentes lugares y momentos.

El protocolo más extendido para acceder a páginas web — HTTP — también funciona bajo este modelo: en su caso, un ordenador al que se conoce como "servidor" contiene un dato (por ejemplo, una página web), y varios ordenadores independientes (llamados "clientes") desean acceder a dicho dato. Para llevar a cabo dicho propósito se produce un intercambio de mensajes normalizados cliente-servidor: En primer lugar el cliente debe enviar un mensaje al servidor informando de que desea acceder a un dato concreto de los que él tiene. El servidor recibe y ejecuta por su lado el código necesario para llevar a cabo la petición. A continuación, el servidor responde al cliente mediante el paso de otro mensaje, otorgándole el dato (en este caso, la página web) que ha solicitado.

Uno de los estándares de paso de mensajes más ampliamente utilizados en programación concurrente y distribuida es MPI (Message Passing Interface).

Other Languages