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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

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

✐<br />

13. Recuerde una regla fundam<strong>en</strong>tal de la ing<strong>en</strong>iería del software 1 : Todos los problemas<br />

del diseño de software se puede simplificar introduci<strong>en</strong>do una nivel más de<br />

indirección conceptual. Esta única idea es la pase de la abstracción, la principal<br />

cualidad de la programación ori<strong>en</strong>tada a objetos.<br />

14. Haga clases tan atómicas como sea posible: Es decir, dé a cada clase un propósito<br />

único y claro. Si el diseño de su clase o de su sistema crece hasta ser<br />

demasiado complicado, divida las clases complejas <strong>en</strong> otras más simples. El<br />

indicador más obvio es tamaño total: si una clase es grande, FIXME: chances<br />

are it’s doing demasiado y debería dividirse.<br />

15. Vigile las definiciones de métodos largos. Una función demasiado larga y complicada<br />

es dificil y cara de mant<strong>en</strong>er, y es problema que esté int<strong>en</strong>tado hacer<br />

demasiado trabajo por ella misma. Si ve una función así, indica que, al m<strong>en</strong>os,<br />

debería dividirse <strong>en</strong> múltiples funciones. También puede sugerir la creación de<br />

una nueva clase.<br />

16. Vigile las listas de argum<strong>en</strong>tos largas. Las llamadas a función se vuelv<strong>en</strong> difíciles<br />

de escribir, leer y mant<strong>en</strong>er. En su lugar, int<strong>en</strong>te mover el método a una<br />

clase donde sea más apropiado, y/o pasele objetos como argum<strong>en</strong>tos.<br />

17. No se repita. Si un trozo de código se repite <strong>en</strong> muchos métodos de las clases<br />

derivadas, ponga el código <strong>en</strong> un método de la clase base e invóquelo desde<br />

las clases derivadas. No sólo ahorrará código, también facilita la propagación<br />

de los cambios. Puede usar una función inline si necesita efici<strong>en</strong>cia. A veces<br />

el descubrimi<strong>en</strong>to de este código común añadirá funcionalidad valiosa a su<br />

interface.<br />

18. Vigile las s<strong>en</strong>t<strong>en</strong>cias switch o cad<strong>en</strong>as de if-else. Son indicadores típicos<br />

de código dep<strong>en</strong>di<strong>en</strong>te del tipo, lo que significa que está decidi<strong>en</strong>do qué código<br />

ejecutar basándose <strong>en</strong> alguna información de tipo (el tipo exacto puede no ser<br />

obvio <strong>en</strong> principio). Normalem<strong>en</strong>te puede reemplazar este tipo de código por<br />

her<strong>en</strong>cia y polimorfismo; una llamada a una función polimórfica efectuará la<br />

comprobación de tipo por usted, y hará que el código sea más fiable y s<strong>en</strong>cillo<br />

de ext<strong>en</strong>der.<br />

19. Desde el punto de vista del diseño, busque y distinga cosas que cambian y<br />

cosas que no cambian. Es decir, busque elem<strong>en</strong>tos <strong>en</strong> un sistema que podrían<br />

cambiar sin forzar un rediseño, después <strong>en</strong>capsule esos elem<strong>en</strong>tos <strong>en</strong> clases.<br />

Puede apr<strong>en</strong>der mucho más sobre este concepto <strong>en</strong> el capítulo Dessign Patterns<br />

del Volum<strong>en</strong> 2 de este libro, disponible <strong>en</strong> www.BruceEckel.com 2<br />

20. T<strong>en</strong>ga cuidado con las FIXME discrepancia. Dos objetos semánticam<strong>en</strong>te difer<strong>en</strong>tes<br />

puede t<strong>en</strong>er acciones idénticas, o responsabilidades, y hay una t<strong>en</strong>d<strong>en</strong>cia<br />

natural a int<strong>en</strong>tar hacer que una sea subclase de la otra sólo como b<strong>en</strong>eficio<br />

de la her<strong>en</strong>cia. Ese se llama discrepancia, pero no hay una justificación real para<br />

forzar una relación superclase/subclase donde no existe. Un solución mejor<br />

es crear una clase base g<strong>en</strong>eral que produce una her<strong>en</strong>cia para las dos como<br />

clases derivadas - eso require un poco más de espacio, pero sigue b<strong>en</strong>eficiandose<br />

de la her<strong>en</strong>cia y probablem<strong>en</strong>te hará un importante descubrimi<strong>en</strong>to sobre<br />

el diseño.<br />

1 Que me explicó Andrew Ko<strong>en</strong>ing.<br />

2 (N. de T.) Está prevista la traducción del Volum<strong>en</strong> 2 por parte del mismo equipo que ha traducido<br />

este volum<strong>en</strong>. Visite FIXME<br />

533<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!