Un cuento de nuestro tiempo

tostadora

Erase una vez, en un reino no muy lejano, un rey que convocó a dos de sus consejeros para una prueba. Les mostro a ambos una caja metalica brillante con dos ranuras en la parte superior, un botón de control y una palanca. "¿Que pensais que es eso?", les preguntó.

Uno de los consejeros, que era ingeniero, contestó el primero. "Es una tostadora", dijo. El rey le pregunto "? Como le diseñarías un ordenador incorporado ?". El ingeniero respondió: "Muy fácil. Utilizando un controlador de cuatro bits, escribiria un sencillo programa que leyera el boton de control de la tostadora y cuantificaria su posicion a uno de los 16 diferentes niveles de tostado, desde el blanco nieve al negro carbon. El programa utilizaria el nivel de tostado como un indice a una tabla de 16 elementos con los valores iniciales del temporizador. Luego conectaria los elementos calefactores y pondria en marcha el temporizador con el tiempo inicial seleccionado en la tabla anterior. Al finalizar dicho tiempo, desconectaria los calefactores y haria saltar las tostadas. Vuelva la semana que viene y le mostrare un prototipo funcionado".

El segundo consejero, un cientifico informático, reconoció inmediatamente el peligro de un razonamiento tan corto de vista y dijo : "Las tostadoras no sólo transforman el pan en tostada, tambien se utilizan para calentar reposteria 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 mas sofisticados, pediran mas funcionalidad. Necesitarán un preparador de desayunos que tambien pueda freir, cocer e incluso preparar puddings de cereales. Una tostadora que haga sólo tostadas, pronto se convertira 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 mas inteligente al problema. Primero, crearemos el conjunto de comidas para desayuno: Especializando este conjunto en subclases : grano, porciones y puddings. El proceso de especializacion continuaría con el grano dividido en tostadas, bollos, gofres y bizcochos; las porciones en fritas, revueltas o a la plancha ; y los puddings en gachas, papillas o tortillas.

"Por otro lado, preparaciones como gachas de avena con fresas, merecen especial atención porque debe heredar caracteristicas de los conjuntos: pudding y porciones. Vemos por tanto, que el problema no puede ser resuelto adecuadamente sin herencias multiples. A tiempo de ejecucion, el programa debe crear el objeto adecuado e invocarle un método que diga ¡Cocínate!. La semántica del mensaje depende, evidentemente, de la clase de objeto de manera que tenga un significado diferente para el objeto tostada con mantequilla de cacahuete que para el objeto croissant relleno de compota de manzana a la canela".

"Revisando el proceso hasta ahora, vemos que la fase de analisis ha revelado que el requisito principal es cocinar gran variedad de comida para desayuno. En la fase de diseño, hemos descubierto algunos requisitos derivados. Especificamente, necesitamos un lenguaje orientado al objeto con herencia múltiple. Es evidente, que los usuarios no desean que se les enfrien las tostadas mientras se preparan unas gachas, por tanto tambien se requiere la capacidad de poder tener procesos concurrentes".

"No debemos olvidar la interface con el usuario. La palanca para introducir la comida no tiene versartilidad y el boton de control es confuso. Los usuarios no comprarán el producto a menos que tenga una interfaz gráfica amigable. Necesariamente debe contar con un display táctil, y, de ser posible, con reconocimiento de gestos. Cuando el preparador de desayunos se enchufe, los usuarios verán una bota de vaquero en el display durante un segundo y el mensaje "Booting Android(tm) V 8.3" aparecera debajo. (Por cierto, la version 8.3 de Android deberia de salir antes de que el producto aparezca al mercado). Entonces el usuario apuntaría con la vista en un menu tipo Pull-Down aquellos alimentos que desea cocinar y cuando parpadee, la interfaz gráfica de usuario indicará al núcleo lógico la orden de empezará a cocinar el alimento".

"Habiendo tomado la sabia decision de especificar primero el software en la fase de diseño, todo lo que queda es escoger una plataforma hardware adecuada para la fase de implementación. Una estación CRAY XC30 con 4800 GiB de memoria, 3000 TiB de disco duro y dieciseis monitores de 26" deberia ser suficiente para un equipo de 8 a 10 programadores. Si se selecciona un lenguaje multi-tarea, orientado a objetos, que soporte herencia multiple con un GUI (Graphical User Interface) incorporado, la escritura del programa se arma en un visto y no visto. (Imagínese S.M. la dificultad que habríamos tenido si hubieramos adoptado alocadamente una estrategia con diseño previo del hardware que nos habria condenado a un micro-controlador de 4 bits )".

Una vez escuchados sus consejeros, el rey mandó encerrar al científico informático en los calabozos de por vida... y todos vivieron felices y comieron tostadas -incluído el científico informático-.