Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐