[LUG.ro Mix] Tostadora orientada a Objetos

Alejandro Gomez Fernandez lugro-mix@lugro.org.ar
15 Oct 2003 08:13:08 -0300


La Tostadora Orientada al Objeto
Érase una vez, en un reino no muy lejano, un rey convocó a dos de sus
consejeros para una prueba. Les mostró un brillante rectángulo de metal con
dos ranuras en la tapa, una ruleta de control, y una palanca.
-¿Qué creen ustedes que es esto?
Uno de los consejeros, un ingeniero eléctrico, contestó primero:
- Es una tostadora - dijo.
- ¿Cómo diseñarías un ordenador empotrado para ella? - preguntó el
rey.
- Usando un microcontrolador de cuatro bits - respondió el consejero
escribiría un sencillo programa que tomara los datos de la ruleta de
tueste, y cuantificara su posición en uno de 16 posibles grados de
oscuridad, del blanco como la nieve al negro como el carbón. El programa
utilizaría ese nivel de oscuridad como índice de un vector de 16 elementos
que contendría los valores iniciales del temporizador. Entonces activaría
los elementos calefactores e inicializaría la cuenta del temporizador con
el
valor seleccionado en el vector. Una vez hubiera transcurrido el intervalo
de tiempo asociado, apagaría las resistencias y expulsaría la tostada por
arriba. Vuelva la semana próxima, y le mostraré un prototipo completamente
funcional.
El segundo consejero, un desarrollador de software, inmediatamente advirtió
el peligro que suponía pensar de un modo tan miope. Entonces dijo:
- Las tostadoras no sólo convierten el pan en tostada; también se
utilizan para calentar galletas congeladas... Lo que Vuestra Majestad ve
ante sí es realmente un Calentador de Desayunos. A medida que los súbditos
de su reino vayan siendo más sofisticados, exigirán mayores capacidades.
Necesitarán un Calentador de Desayunos que pueda también cocinar
salchichas,
freír tocino, y hacer huevos revueltos. Una tostadora que solamente haga
tostadas quedará pronto obsoleta. Si no pensamos en el futuro, tendremos
que
rediseñar completamente la tostadora en apenas unos pocos años.
Teniendo esto en cuenta, podemos formular una solución más
inteligente al problema. Primero, creemos una clase de Alimentos para
Desayuno. Especialicemos esta clase en subclases: Cereal, Cerdo, y Aves de
Corral. El proceso de especialización debe repetirse con Cereal, que
quedará
dividido en Tostadas, Bollos, Crepes y Galletas; Cerdo, que se divide en
Salchichas, Torrezno y Tocino; y Aves, que se divide en Huevos Revueltos,
Huevos Duros, Huevos Escalfados, Huevos Fritos, y varias clases de
Tortilla.
La clase de Tortilla de Jamón y Queso requiere una atención
especial, pues debe heredar características de las clases Cerdo, Lácteos y
Aves de Corral. Así pues, podemos ver que el problema no puede resolverse
correctamente sin Herencia múltiple. En tiempo de ejecución, el programa ha
de crear el objeto apropiado y enviar un mensaje a dicho objeto que diga:
Cocínate a ti mismo".
La semántica de este mensaje depende, por supuesto, de la clase de
objeto, de modo que tenga un significado diferente para un pedazo de
o para unos huevos revueltos.
Repasando el proceso hasta ahora, vemos que la fase de Análisis ha
revelado que el requisito fundamental es cocinar cualquier clase de
Alimento
para el Desayuno. En la fase de Diseño, hemos descubierto algunos requisitos
Herencia múltiple. Por supuesto, los usuarios no querrían que los huevos se
quedasen fríos mientras tocino se está friendo, así que se requiere
capacidad de procesamiento simultáneo, también.
No debemos olvidar el Interfaz de Usuario. Usar una palanca para
bajar el alimento carece de flexibilidad, y la ruleta de control es confusa.
Los usuarios no comprarán el producto a menos que tenga un interfaz
amigable, gráfico. Cuando se enchufe la Cocina para Desayunos, los usuarios
deben ver una bota de vaquero en la pantalla. El usuario hará clic sobre
ella, y el mensaje "Botando UNIX v.8.3 " aparecerá en la pantalla. (UNIX
8..3
debería haber salido para cuando el producto llegue al mercado). El usuario
podrá desplegar un menú y hacer clic sobre los alimentos que desee cocinar.
Al haber tomado la sabia decisión de especificar primero el software
en la fase de Diseño, lo único que queda es escoger una plataforma hardware
adecuada para la fase de Implementación. Un Pentium de Intel con 48MB de
memoria, un disco duro de 1.2GB, y un monitor SVGA debería ser suficiente.
Si se elige un lenguaje orientado al objeto, con capacidad de multitarea,
que soporte Herencia múltiple y tenga un Interfaz Gráfico incorporado,
escribir el programa será cosa de coser y cantar.
Sabiamente, el rey hizo decapitar al desarrollador de software, y todos
vivieron felices para siempre.