El Paradigma del Intermediario (un poco de historia)

Este artículo lo publiqué en un medio universitario hace 10 años ahora (de ahí el tono tan formal del texto). .NET estaba apareciendo y al releerlo, me ha sorprendido que, a pesar del tiempo transcurrido (un mundo, 10 años) creo que sigue siendo válido en lo fundamental.

<ARTICULO>

Desde los tiempos de los mainframes, la evolución en las estructuras y soluciones de software, parece haberse basado en dos conceptos básicos:

  • Disgregación o Intercalación (o cómo sacar factor común)
  • La comunicación entre los elementos disgregados, que ahora denominamos mecanismos de integración de sistemas, orquestación de soluciones, etc.

Dicha comunicación plantea básicamente un problema de lenguaje y además, afecta la forma en que se escribe el software, tanto estructural como específicamente.

Una breve memoria histórica, nos lleva a tiempos del DOS, cuando se hicieron populares las aplicaciones TSR (Terminate & Stay Resident), que, como su nombre indica, permanecían en memoria pudiendo ser recuperadas más adelante con una combinación de teclas. Los problemas de colisión que surgieron entonces, podían resolverse mediante la aportación de un intermediario, el conocido como Extensor del DOS, un programa que se cargaba al lanzarse el sistema operativo, y permitía administrar la memoria de forma que cuando una aplicación necesitaba una ubicación en memoria extendida, no la tomaba directamente, sino que la solicitaba a través del extensor, quien la administraba, evitando colisiones entre zonas ocupadas por distintos programas. Ciertos enlazadores (linkers) de la época tenían bien en cuenta esta circunstancia (por ejemplo, Blinker).

Pero la idea puede extenderse: pongámonos de acuerdo en el paquete funcional que da acceso a cada origen de información, de forma que el cambio de dicho origen no suponga la modificación de la aplicación que lo utiliza. Se populariza a partir de ahí la estructura fragmentada, que incluso hoy ha llegado a su máxima expresión en lo que conocemos como arquitectura multicapa.

Con el advenimiento de Windows, el concepto de DLL se convierte en el principal ejemplo del intermediario, esta vez en su versión sacar factor común. Las DLL de Windows, almacenan un conjunto funcional común que pasará a denominarse API de Windows, y que permiten a cualquier programa instalado en el sistema, utilizar los mismos recursos. Los programas no tienen que incorporar ya en sus ejecutables lo que el sistema les proporciona por defecto.

Sin embargo, el paradigma del intermediario como solución, no llegaría a su madurez hasta el advenimiento de ciertos estándares de intermediación llamados modelos de objetos: COM y CORBA son sólo dos ejemplos, a los que seguirían los modelos de acceso a datos,  tales como ODBC y OLE-DB, o el propio modelo de objetos de documento (DOM), que convierte lo que es texto plano (HTML) en un sistema de objetos en el cliente capaz de ser programado mediante un lenguaje de script.

Desde el punto de vista del programador, incluso el concepto de interfaz descansa en varios sentidos en el concepto de intercalación. Pero, los principales lenguajes de programación lo han estado usando desde el principio: las MFC y posteriores WFC y .NET Framework, no son otra cosa que inmensas jerarquías de clases comunes a las que un lenguaje puede hacer referencia. Por eso, la importancia del lenguaje se minimiza, reduciéndose a una mera cuestión de afinidad sintáctica. Las capacidades del actual Visual Basic .NET son prácticamente idénticas a las que posee el novísimo  lenguaje C#. Al final, todo es MS-IL (código intermedio: el gran intermediario en .NET) y lo que realmente facilita la programación es el conocimiento de la jerarquía (o mejor aún, de los mecanismos de búsqueda y manipulación, dentro de ella), más que la adhesión a un lenguaje concreto.

Y MS-IL tiene una contrapartida externa: el recién aparecido estándar XML, una sintaxis (que no lenguaje) común -autodefinido, mediante Schemas- para permitir el transporte y la comunicación de datos entre sistemas y plataformas distintos. Y en eso, comparte algo en común con MSIL que resulta fundamental: ambos disponen de metadatos: de un sistema de autodescripción.

Tenemos pues, un modelo de arquitectura que se repite por doquier. De hecho, una de las más relevantes novedades de .NET, es el sistema de comunicación entre objetos, basado en el concepto de delegado (delegate). Un delegado es el intermediario por excelencia al estilo de los viejos extensores del DOS: se sitúa en una zona intermedia y vela por la correcta comunicación entre métodos de objetos distintos, garantizando la presencia del receptor, y la compatibilidad de los tipos de datos recibidos por éste.

Es la solución aportada por Hejlsberg al problema de los punteros nulos (si queremos tener garantía que un mecanismo de comunicación es eficaz, garanticemos, primero, la presencia de los sujetos de la comunicación (tipos emisor y receptor) y después, al de la coherencia de la información transmitida: los tipos de datos pasados entre uno y otro. Eso posibilita gran parte de la seguridad asociada .a NET, y la garantía de la ejecución administrada de programas: de nuevo el paradigma del intermediario, ha sido la solución a un problema de software.

</ARTICULO>

Saludos

Published 1/2/2011 12:40 por Marino Posadas
Comparte este post: