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 538 — #576<br />

✐<br />

Apéndice B. Directrices de Programación<br />

52. Eleve las excepciones por valor y capturelas por refer<strong>en</strong>cia. Deje que el mecanismo<br />

de gestión de excepciones haga la gestión de memoria. Si eleva punteros<br />

como objetos <strong>en</strong> la excepción que han sido creados <strong>en</strong> el montículo, el que<br />

capture la excepción debe saber como liberar la excepción, lo cual implica un<br />

acoplami<strong>en</strong>to perjudicial. Si captura las excepciones por valor, causará que se<br />

cre<strong>en</strong> temporarios; peor, las partes derivadas de sus objetos-excepción se pued<strong>en</strong><br />

partir al hacer upcasting por valor.<br />

53. No escriba sus propias clases plantilla a m<strong>en</strong>os que debe. Mire primero <strong>en</strong> la Librería<br />

Estándar de <strong>C++</strong>, después <strong>en</strong> librerías de propósito específico. Adquiera<br />

habilidad <strong>en</strong> su uso y conseguirá increm<strong>en</strong>tar mucho su productividad.<br />

54. Cuando cree plantillas, escriba código que no dep<strong>en</strong>da del tipo y ponga ese código<br />

<strong>en</strong> una clase base no-plantilla para evitar que el código aum<strong>en</strong>te de tamaño<br />

sin necesidad. Por medio de her<strong>en</strong>cia o composición, puede crear plantillas<br />

<strong>en</strong> las que el volum<strong>en</strong> de código que conti<strong>en</strong><strong>en</strong> es dep<strong>en</strong>di<strong>en</strong>te del tipo y por<br />

tanto es<strong>en</strong>cial.<br />

55. No use las funciones de , como por ejemplo printf(). Apr<strong>en</strong>da a<br />

usar iostreams <strong>en</strong> su lugar; son FIXME:type-safe y type-ext<strong>en</strong>sible, y mucho<br />

más pot<strong>en</strong>tes. El esfuerzo se verá recomp<strong>en</strong>sado con regularidad. En g<strong>en</strong>eral,<br />

use siempre librerías <strong>C++</strong> antes que librerías C.<br />

56. Evite los tipos predefinidos de C. El soporte de <strong>C++</strong> es por compatibilidad<br />

con C, pero son tipos mucho m<strong>en</strong>os robustos que las clases <strong>C++</strong>, de modo que<br />

pued<strong>en</strong> complicar la depuración.<br />

57. Siempre que use tipos predefinidos para variables globales o automáticas, no<br />

los defina hasta que pueda inicializarlos. Defina una variable por línea. Cuando<br />

defina punteros, ponga el ’*’ al lado del nombre del tipo. Puede hacerlo de<br />

forma segura si define una variable por línea. Este estilo suele resultar m<strong>en</strong>os<br />

confuso para el lector.<br />

58. Garantize que ti<strong>en</strong>e lugar la inicialización <strong>en</strong> todos los aspectos de su programa.<br />

Inicialice todos los atributos <strong>en</strong> la lista de inicialización del constructor,<br />

incluso para los tipo predefinidos (usando los pseudo-constructores). Usar la<br />

lista de inicialización del constructor es normalm<strong>en</strong>te más efici<strong>en</strong>te cuando se<br />

inicializan subobjetos; si no se hace se invocará el constructor por defecto, y<br />

acabará llamando a otros métodos (probablemnte el operator=) para conseguir<br />

la inicialización que desea.<br />

59. No use la forma MyType a = b; para definir un objeto. Esta es una de la<br />

mayores fu<strong>en</strong>tes de confusión porque llama a un contructor <strong>en</strong> lugar de al operator=.<br />

Por motivos de claridad, sea específico y use mejor la forma MyType<br />

a(b);. Los resultados son idénticos, pero el lector no se podrá confundir.<br />

60. Use los moldes explícitos descritos <strong>en</strong> el Capítulo 3. Un molde reemplaza el<br />

sistema normal de tipado y es un punto de error. Como los moldes explícitos<br />

separan los un-molde-lo hace-todo de C <strong>en</strong> clases de moldes bi<strong>en</strong>-marcados,<br />

cualquiera que depure o mant<strong>en</strong>ga el código podrá <strong>en</strong>contrar fácilm<strong>en</strong>te todo<br />

los sitios <strong>en</strong> los que es más probable que sucedan errores lógicos.<br />

61. Para que un programa sea robusto, cada compon<strong>en</strong>te debe ser robusto. Use<br />

todas las herrami<strong>en</strong>tas que proporciona <strong>C++</strong>: control de acceso, excepciones,<br />

constantes, comprobación de tipos, etc <strong>en</strong> cada clase que cree. De ese modo podrá<br />

pasar de una forma segura al sigui<strong>en</strong>te nivel de abstracción cuando construya<br />

su sistema.<br />

538<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!