13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 26 — #64<br />

✐<br />

Capítulo 1. Introducción a los Objetos<br />

1.9.6. Fase 5: Evolución<br />

Este es el punto <strong>en</strong> el ciclo de desarrollo que se conoce tradicionalm<strong>en</strong>te como<br />

«mant<strong>en</strong>imi<strong>en</strong>to», un término amplio que puede significar de todo, desde «conseguir<br />

que funcione como se supone que debió hacerlo desde el principio» hasta<br />

«añadir características que el cli<strong>en</strong>te olvidó m<strong>en</strong>cionar» pasando por el tradicional<br />

«arreglar errores que han ido apareci<strong>en</strong>do» y «añadir nuevas características según se<br />

pres<strong>en</strong>tan las necesidades». Se han aplicado algunas ideas equivocadas al término<br />

«mant<strong>en</strong>imi<strong>en</strong>to» que se ha tomado <strong>en</strong> calidad de pequeño <strong>en</strong>gaño, <strong>en</strong> parte porque<br />

sugiere que realm<strong>en</strong>te ha construido un programa primitivo y todo lo que necesita<br />

hacer es cambiar partes, <strong>en</strong>grasarlo, e impedir que se oxide. Quizá haya un término<br />

mejor para describir esa tarea.<br />

Yo usaré el término evolución 14 . Es decir, «no podrá hacerlo bi<strong>en</strong> la primera vez,<br />

pero le dará la oportunidad de apr<strong>en</strong>der y volver atrás y hacer cambios». Puede que<br />

necesite hacer muchos cambios hasta que apr<strong>en</strong>da y <strong>en</strong>ti<strong>en</strong>da el problema con mayor<br />

profundidad. La elegancia que obt<strong>en</strong>drá si evoluciona hasta hacerlo bi<strong>en</strong> valdrá<br />

la p<strong>en</strong>a, tanto a corto como a largo plazo. La evolución es donde su programa pasa<br />

de bu<strong>en</strong>o a f<strong>en</strong>om<strong>en</strong>al, y donde estos usos, que realm<strong>en</strong>te no <strong>en</strong>ti<strong>en</strong>de <strong>en</strong> un primer<br />

mom<strong>en</strong>to, pasan a ser más claros después. Es también donde sus clases pued<strong>en</strong><br />

evolucionar de un uso de único-proyecto a recursos reutilizables.<br />

«Hacerlo bi<strong>en</strong>» no significa sólo que el programa funcione según los requisitos<br />

y los casos de uso. Significa que la estructura interna del código ti<strong>en</strong>e s<strong>en</strong>tido, y<br />

parece que <strong>en</strong>caja bi<strong>en</strong>, sin sintaxis difícil, objetos sobredim<strong>en</strong>sionados, o pedazos<br />

de código desgarbados. Además, debe t<strong>en</strong>er la s<strong>en</strong>sación de que la estructura del<br />

programa sobrevivirá a los cambios que inevitablem<strong>en</strong>te habrá durante su ciclo de<br />

vida, y estos cambios pued<strong>en</strong> hacerse fácil y limpiam<strong>en</strong>te. No es una tarea s<strong>en</strong>cilla.<br />

No sólo debe <strong>en</strong>t<strong>en</strong>der lo que está construy<strong>en</strong>do, sino también cómo evolucionará el<br />

programa (lo que yo llamo el vector de cambio 15 . Afortunadam<strong>en</strong>te, los l<strong>en</strong>guajes de<br />

programación ori<strong>en</strong>tados a objetos son particularm<strong>en</strong>te adecuados para dar soporte<br />

a este tipo de modificaciones continuas - los límites creados por los objetos son los<br />

que ti<strong>en</strong>d<strong>en</strong> a conservar la estructura fr<strong>en</strong>te a roturas. También le permit<strong>en</strong> hacer<br />

cambios - algunos pued<strong>en</strong> parecer drásticos <strong>en</strong> un programa procedural - sin causar<br />

terremotos <strong>en</strong> todo su código. En realidad, el soporte para la evolución puede que<br />

sea el b<strong>en</strong>eficio más importante de la POO.<br />

Con la evolución, el programador crea algo que al m<strong>en</strong>os se aproxima a lo que<br />

pi<strong>en</strong>sa que está construy<strong>en</strong>do, y luego busca defectos, lo compara con sus requisitos<br />

y ve lo que falta. Entonces puede volver y arreglarlo rediseñando y re-implem<strong>en</strong>tando<br />

las porciones del programa que no funcion<strong>en</strong> bi<strong>en</strong> 16 . Realm<strong>en</strong>te puede necesitar resolver<br />

el problema, o un aspecto del mismo, varias veces antes de dar con la solución<br />

correcta. (Un estudio de los Patrones de Diseño, descrito <strong>en</strong> el Volum<strong>en</strong> 2, normalm<strong>en</strong>te<br />

resulta útil aquí).<br />

La evolución también ocurre cuando construye un sistema, ve que <strong>en</strong>caja con<br />

14 Por lo m<strong>en</strong>os un aspecto de evolución se explica <strong>en</strong> el libro Refactoring: improving the design of existing<br />

code (Addison-Wesley 1999) de Martin Fowler. T<strong>en</strong>ga pres<strong>en</strong>te que este libro usa exlusivam<strong>en</strong>te ejemplos<br />

<strong>en</strong> Java.<br />

15 Este término se explica <strong>en</strong> el capítulo Los patrones de diseño <strong>en</strong> el Volum<strong>en</strong> 2<br />

16 Esto es algo como «prototipado rápido», donde se propone construir un borrador de la versión<br />

rápida y sucia que se puede utilizar para apr<strong>en</strong>der sobre el sistema, y <strong>en</strong>tonces puede tirar su prototipo y<br />

construir el bu<strong>en</strong>o. El problema con el prototipado rápido es que la g<strong>en</strong>te no tiró el prototipo, y construyó<br />

sobre él. Combinado con la falta de estructura <strong>en</strong> la programación procedural, esto producía a m<strong>en</strong>udo<br />

sistemas desord<strong>en</strong>ados que eran difíciles de mant<strong>en</strong>er.<br />

26<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!