Você está na página 1de 38
Principales conceptos que se abordan en este capitulo m clases abstractas im interfaces Construcciones Java que se abordan en este capitulo abstract, implements interface, instanceof En este capitulo examinamos otras técnicas relacionadas con la herencia, que se pueden usar para perfeccionar las estructuras de clases y mejorar la mantenibilidad y la exten- sibilidad. Estas técnicas introducen un mejor método de representacién de las abstrac- ciones en los programas orientados a objetos En los dos capitulos anteriores hemos discutido los aspectos mas importantes de la herencia en el disefio de una aplicacién, pero hasta ahora se han ignorado varios pro- blemas y usos mas avanzados. Completaremos el cuadro de la herencia mediante un nuevo ejemplo. El proximo proyecto que usaremos en este capitulo es una simulacién; lo usamos para discutir nuevamente sobre herencia y para ver que nos enfrentamos con algunos pro- blemas nuevos. Apuntando a resolver estos problemas, se presentan las clases abstractas y las interfaces. Simulaciones Las computadoras se usan frecuentemente para ejecutar simulaciones de un sistema real. Esto incluye simulaciones del trafico de una ciudad, el informe meteorolégico, la simulacién de explosiones nucleares, el analisis del stock, simulaciones ambientales y muchas otras mas. De hecho, varias de las computadoras mas potentes del mundo se usan para ejecutar algin tipo de simulacién. Al crear una simulacién por computadora tratamos de modelar el comportamiento. de un subconjunto del mundo real en un modelo de software. Cada simulacipf{ es nts riamente, una simplificacién del objeto real. La decisién sobre los sae 3c 300 Capitulo 10 ll Mas técnicas de abstraccion dejan de lado y los que se incluyen en el modelo es, generalmente, una tarea des fiante. Cuanto mas detallada es una simulacién, resulta més seguro que los resultados del comportamiento pronosticado se ajusten mas a los del sistema real, pero el incre- mento en el nivel de detalle aumenta los requerimientos: se necesitan computadoras més poderosas y mas tiempo de programacién. Un ejemplo muy conocido es el pro néstico meteorolégico: los modelos climéticos para la simulacién de las condiciones del tiempo han sido mejorados en las tltimas décadas aumentando la cantidad de deta- lles que se incluyen, Como resultado, el pronéstico meteorol6gico ha mejorado si ficativamente su nivel de certeza (pero estin lejos de ser perfectos, como todos bien sabemos por experiencia); muchas de estas mejoras han sido posibles debido a los avances en la tecnologia de la computacién. El beneficio de las simulaciones es que podemos Ilevar a cabo experimentos que no podriamos hacer en un sistema real, ya sea porque no tenemos el control sobre lo real (por ejemplo, el clima) 0 porque es demasiado costoso, peligroso o irreversible en caso de desastre. Podemos usar una simulacién para investigar el comportamiento del sis- tema bajo ciertas circunstancias 0 para investigar cuestiones del estilo aque pasaria si...» imulaciones del medio ambiente, por ejemplo, podrian utilizarse para intentar pre- decir los efectos de la actividad humana en su habitat natural. Considere el caso de un Parque nacional que contenga especies en extincién y el propésito de construir una autopista que lo atraviese completamente separindolo en dos partes. Los partidarios de construir la autopista postularian que el hecho de dividir el parque en dos mitades no afectard a los animales que viven en él pero los ambientalistas proclamarian Io con- trario. {Como podemos decir cual serd el efecto probable sin construir la autopista? La cuestién que subyace a la pregunta es: si es significativo para la supervivencia de las especies el hecho de tener una zona de habitat conectada o si les resulta bueno dis- poner de dos areas desconectadas (con el mismo tamafio total). Antes de construir pri- mero la autopista y luego observar qué ocurre, podriamos simular el efecto con el fin de tomar una decisién bien informada!. (Dicho sea de paso, en este caso particular, este asunto importa: el tamaiio de un parque natural tiene un impacto significativo sobre su utilidad como habitat para los animales.) Nuestro ejemplo principal en este capitulo describe una simulacién ambiental que sera necesariamente mas simple que el escenario que hemos descrito porque lo usamos, principalmente, para ilustrar nuevas caracteristicas del disefio orientado a objetos y su implementacién. Por lo tanto, no tendra el potencial para simular con certeza varios aspectos de la naturaleza, pero algunas cosas son bastante interesantes; en particular, demostrari la estructura de las simulaciones tipicas. were La simulacion de zorros y conejos El escenario de simulacién que hemos seleccionado para trabajar en este capitulo con- ste en la evolucién de poblaciones de zorros y de conejos dentro de un campo cerrado, que justamente es un caso particular de lo que se conoce como el modelo de simula- "Una euestién pendiente en todos los casos de este tipo es, por supuesto, la calidad de la simu- lacién. Uno puede «probar» sobre cualquier cosa con una simulacién demasiado simplificada © con una simulacién mal disefiada. Es esencial obtener la verdad de la simulacién mediante experimentos controlados. 10.2.1 10.2 La simulacién de zorros y conejos 301 cién predador-presa. Esta simulacién se usa frecuentemente para modelar las varia ciones de los tamaiios de poblacién de especies predadoras que se alimentan a base de especies presa. Entre tales especies existe un delicado balance. Una poblacién grande de presas puede proveer potencialmente de gran cantidad de alimento a una poblacién pequefia de predadores. Sin embargo, un nimero excesivamente grande de predadores podria terminar con todas las presas y quedarse sin nada para comer. Los tamafios de las poblaciones podrian también estar influenciadas por el tamaiio y la naturaleza del ambiente, Por ejemplo, un medio ambiente pequefio y cerrado podria conducir a una superpoblacién de modo tal que resulte muy facil para los predadores localizar a sus presas, 0 un ambiente contaminado podria reducir el ntimero de presas y en este caso, una poblacién modesta de predadores podria tomar prevenciones para sobrevivit. Dado que, con frecuencia, los predadores son en si mismos presas de otras especies, la pér- dida de una parte de la cadena alimenticia puede tener efectos dramaticos en la super- vivencia de las otras partes. Tal como lo hemos hecho en capitulos anteriores, comenzaremos con una versién de una aplicacién que funciona perfectamente bien desde el punto de vista del usuario, pero cuya vista interna no es tan buena cuando se Ia juzga mediante los principios de tun buen disefio orientado a objetos y de la implementacién. Usaremos esta versién base para desarrollar varias versiones mejoradas que progresivamente introducen nuevas téenicas de abstraccién. Un problema en particular de la versién base que deseamos resaltar es que no hace un buen uso de las técnicas de herencia presentadas en el Capitulo 8. Sin embargo, comen- zaremos por examinar el mecanismo de la simulacién sin hacer demasiadas criticas a su implementacién. Una vez que comprendamos cémo funciona, estaremos en una buena posicién para realizar algunas mejoras. El proyecto zorros-y-conejos Abra el proyecto zorros-y-conejos-v1. La Figura 10.1 muestra el diagrama de clases del proyecto. Las principales clases en las que centraremos nuestra discusién son Simulador, Zorro y Conejo. Las clases Zorro y Conejo proporcionan modelos sencillos del compor- tamiento de un predador y de una presa respectivamente. En esta implementacién en particular, no pretendemos dar un modelo biolégico, real y exacto de los zorros y de os conejos, simplemente tratamos de ilustrar los principios de las simulaciones del tipo predador-presa, La clase Simulador es la responsable de crear el estado inicial de la simulacién y luego de controlarla y ejecutarla. La idea bsica es sencilla: el simulador contiene una coleceién de zorros y conejos y lleva a cabo una secuencia de pasos. Cada paso permite mover a cada zorro y a cada conejo. Después de cada paso (cuando se movié cada animal) se despliega en la pantalla el estado actual del campo. Podemos resumir el propésito de las restantes clases como sigue: Campo representa un terreno cerrado de dos dimensiones. El campo esté compuesto por un niimero fijo de direcciones organizadas en filas y columnas. Cada direccién del campo puede ser ocupada por un animal como maximo. Cada direccién del campo puede contener una referencia a un animal 0 estar vacia. 1m Ubicacion representa una posicién bidimensional en el campo. La posicién esti determinada por un valor para la fila y un valor para la columna.