|
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 cocinar salchichas, freir bacon y hacer huevos revueltos. 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, cerdo y producto avícola. El proceso de especializacion continuaría con el grano dividido en tostadas, bollos, tortas y bizcochos; el cerdo dividido en salchichas, bacon y longanizas; y los productos avícolas en huevos revueltos, huevos duros, huevos fritos y varias clases de tortillas". "La clase de tortilla de jamon y queso, merece especial atención porque debe heredar caracteristicas de los conjuntos: cerdo, productos lacteos y avícolas. 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 y enviarle un mensaje 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 que para el objeto huevos revueltos". "Revisando el proceso hasta ahora, vemos que la fase de analisis 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. Especificamente, necesitamos un lenguaje orientado al objeto con herencia múltiple. Es evidente, que los usuarios no desean que se les enfrien los huevos mientras se cocina el bacon, 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 interfase gráfica amigable. Cuando el preparador de desayunos se enchufe, los usuarios verán una bota de vaquero en la pantalla. El usuario la apuntará con el raton y el mensaje "Botando ULTRIX (tm) V 8.3" aparecera en la pantalla. (Por cierto, la version 8.3 de ULTRIX deberia de salir antes de que el producto aparezca al mercado). Entonces el usuario apuntaría con el raton en un menu tipo Pull-Down aquellos alimentos que desea cocinar". "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 VAXStation 7000 con 48 Mb de memoria, 300 Mb de disco duro y un monitor VT2000 deberia ser suficiente. Si se selecciona un lenguaje multi-tarea, orientado al objeto, 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 disenyo previo del hardware que nos habria condenado a un micro-controlador de 4 bits )". Una vez escuchados sus consejeros, el rey manda arrojar al científico informático a los cocodrilos. Y vivieron felices y comieron perdices ( y tostadas ).
|