jueves, 24 de abril de 2008

Informática aplicada

Erase una vez, en un reino no muy lejano, un rey que convocó a dos de sus consejeros para una prueba. Les mostró a ambos una caja metálica brillante con dos ranuras en la parte superior, un botón de control y una palanca.

"¿Qué pensais que es esto?", les preguntó.

Uno de los consejeros, que era ingeniero (y rector de la Universidad Tecnológica del Reino), contestó el primero. "Es una tostadora", dijo.

El rey le preguntó "¿Cómo le diseñarías un ordenador incorporado?".

El ingeniero respondió: "Muy fácil. Utilizando un controlador de cuatro bits, escribiría un sencillo programa que leyera el botón de control de la tostadora y cuantificaría su posición a uno de los 16 diferentes niveles de tostado, desde el blanco nieve al negro carbón. Con 16 niveles creo que es suficiente.

El programa utilizaría el nivel de tostado como un índice a una tabla de 16 elementos con los valores iniciales del temporizador. Luego conectaría los elementos calefactores y pondría en marcha el temporizador con el tiempo inicial seleccionado en la tabla anterior. Al finalizar dicho tiempo, desconectaría los calefactores y haría saltar las tostadas. Vuelva la semana que viene y le mostraré un prototipo funcionando".


El segundo consejero, un científico informático (y principal accionista de una gran empresa de software), reconoció inmediatamente el peligro de un razonamiento tan corto de vista y dijo:

"Las tostadoras no sólo transforman el pan en tostada, también se utilizan para calentar repostería congelada.

Lo que su majestad ve delante suyo es, en realidad, un preparador de comida para desayunos. A medida que los súbditos de su reino se vuelvan más sofisticados, pedirán más funcionalidad.

Necesitarán un preparador de desayunos que también pueda cocinar salchichas, freír tocino y hacer huevos revueltos. Una tostadora que haga sólo tostadas pronto se convertirá en algo obsoleto. Si no miramos al futuro, tendremos que rediseñar la tostadora completamente en poco tiempo".

"Con esto en mente", prosiguió el consejero, "podemos formular una solución más inteligente al problema.

Primero, crearemos un conjunto de comidas para desayuno; especializando este conjunto en subclases: grano, cerdo y producto avícola.

El proceso de especialización debería continuar con el grano dividido en tostadas, bollos, tortas y bizcochos; el cerdo dividido en salchichas, tocino y salchichas; y los productos avícolas en huevos revueltos, huevos duros, huevos fritos y varias clases de tortillas".

"La clase de tortilla de jamón y queso, merece especial atención porque debe heredar características de los conjuntos cerdo, productos lácteos y avícolas.

Vemos por tanto, que el problema no puede ser resuelto adecuadamente sin herencias múltiples. Es obvio que, a tiempo de ejecución, el programa debe crear el objeto adecuado y enviarle un mensaje que diga: '¡Cocínate!'".

"La semántica del mensaje dependerá, en una adecuada previsión, de la clase de objeto; de manera que tenga un significado diferente para el objeto tostada que para el objeto huevos revueltos.

Revisando el proceso hasta ahora, vemos que la fase de análisis ha revelado que el requisito principal es cocinar cualquier clase de comida para desayuno".

"En la fase de diseño, hemos descubierto algunos requisitos derivados.

Específicamente, necesitamos un lenguaje orientado al objeto con herencia múltiple. Es evidente, que los usuarios no desean que se les enfríen los huevos mientras se cocina el tocino, por tanto también se requiere la capacidad de poder tener procesos concurrentes".

"No debemos olvidar la interfaz con el usuario. La palanca para introducir la comida no tiene versatilidad y el botón de control es confuso. Los usuarios no comprarán el producto a menos que tenga una interfaz gráfica amigable.

Cuando el preparador de desayunos se enchufe, los usuarios deberían -por ejemplo- ver una bota de vaquero en la pantalla (si la elección, por defecto, es jamón con huevos).

El usuario podría apuntar con el ratón y un msg tipo: "Botando ULTRIX (tm) V 8.3. ¡Buenos Dias! Espero que hayas dormido como los ángeles. Dentro de unos instantes tendrás el desayuno que te mereces..." aparecería en la pantalla. (Por cierto, la versión 8.3 de ULTRIX aún no existe, por lo que debería implementarsela antes del que el producto aparezca en el mercado. Aunque siempre cabe la posibilidad de un parche posterior). Luego de la presentación, el usuario se encontraría con un clásico menú tipo Pull-Down que le permitiría seleccionar aquellos alimentos que desea cocinar, si descarta la opción por defecto".

"Una vez tomada la inteligente decisión de especificar primero el software en la fase de diseño, todo lo que queda es escoger una plataforma de hardware adecuada para la fase de implementación. Propongo, como requisitos mínimos, una VAXStation 7000 con 256 Mb de memoria, 100 Gigas de disco duro y un monitor VT2000, baja radiación, con píxels de 0,18 debería ser suficiente.

Si se selecciona un lenguaje multitarea, orientado al objeto, que soporte herencia múltiple con un GUI (Graphical User Interface) incorporado, la escritura del programa se arma en un visto y no visto. Lo demás es un juego de niños.

(Pienso por un momento, Su Majestad, la dificultades que tendríamos que resolver si adoptáramos alocadamente una estrategia que nos condene, por anticipado, a un microcontrolador de 4 bits)".

Una vez escuchados con la atención debida, el rey mandó, sin otros preámbulos, arrojar a sus técnicos-consejeros a los cocodrilos.

Posteriormente, asegura la leyenda, el rey y sus cortesanos vivieron felices, los años que les quedaban de vida, desayunando todas las mañanas perdices y otros manjares (acompañados de crujientes tostadas preparadas al estilo tradicional).

========
Date: Sat, 23 Jun 2001 20:37:00 +0200
--------