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