Está en la página 1de 10

MIGUEL .

TOLEDO MARTNEZ
SUGERENCIAS, OBSERVACIONES Y CONSEJ OS: PRIMERA PARTE
SUGERENCIAS-1
ERRORES COMUNES DE PROGRAMACIN


BUENAS PRCTICAS DE PROGRAMACIN


PROPUESTAS DE DESEMPEO


SUGERENCIAS DE PORTABILIDAD


OBSERVACIONES DE INGENIERA DE SOFTWARE


INDICACIONES DE PRUEBA Y DEPURACIN
MIGUEL . TOLEDO MARTNEZ
SUGERENCIAS, OBSERVACIONES Y CONSEJ OS: PRIMERA PARTE
SUGERENCIAS-2
ERRORES COMUNES DE PROGRAMACIN

Bajo el ttulo de buenas prcticas de programacin se incluirn muchas sugerencias a
lo largo de las lecciones para subrayar las prcticas que ayudarn a escribir programas
ms claros, comprensibles y fciles de mantener, probar y depurar. Estas prcticas son
slo guas; sin duda usted desarrollar su propio estilo de programacin. Tambin
subrayaremos varios errores comunes de programacin (problemas que prever para
evitar caer en estos errores en sus programas), consejos dedesempeo (tcnicas que le
ayudarn a escribir programas ms rpidos y de menor consumo de memoria),
explicaciones de portabilidad (tcnicas que le ayudarn a escribir programas que
puedan ejecutarse con pocos o ningn cambio en diferentes tipos de computadora),
observaciones sobreingeniera de software (ideas y conceptos que afectan y mejoran la
arquitectura general de un sistema de software y, en particular, en el caso de los
sistemas de software grandes), as como indicaciones de prueba y depuracin
(sugerencias para probar sus programas y ayudarle a aislar y eliminas bugs)

1. Los errores como la divisin entre cero suceden durante la ejecucin del programa, por lo que se
llaman errores en tiempo de ejecucin. La divisin entre cero por lo general es un error fatal, es
decir, un error que provoca que el programa termine de inmediato sin haber concluido de manera
apropiada su trabajo. Los errores no fatales permiten que los programas se ejecuten hasta el fin,
generalmente produciendo resultados incorrectos. (Nota: en algunos sistemas, la divisin entre cero
no es un error fatal. Lea la documentacin del sistema con el que est trabajando).
2. Si olvida incluir el archivo iostream.h en un programa que acepta entrada desde el teclado o enva
datos a la pantalla, el compilador emitir un mensaje de error.
3. La omisin del punto y coma al final de una instruccin es un error de sintaxis. Los errores de
sintaxis se producen cuando el compilador no puede reconocer una instruccin. El compilador
normalmente emite un mensaje de error que ayuda al programador a localizar y corregir la
instruccin incorrecta. Los errores de sintaxis son violaciones al lenguaje. Tambin se les conoce
como errores de compilacin y errores en tiempo de compilacin, debido a que aparecen durante la
fase de compilacin.
4. Si intenta utilizar el operador de mdulo, %, con operandos que no son enteros, se producir un error
de sintaxis.
5. Si cualquiera de los operadores ==, !=, >= y <= aparece con espacios entre el par de smbolos,
suceder un error de sintaxis.
6. La inversin del orden del par de operadores de los operadores !=, >= y <= (al escribirlos como =!,
=> o =<) normalmente es un error de sintaxis. En algunos casos, escribir != como =! no ser un
error de sintaxis, pero casi con toda seguridad ser un error de lgica.
7. No confunda el operador de igualdad ==con el operador de asignacin =. El primero debe leerse
como es igual que y el segundo como obtiene, obtiene el valor de o se le asigna el valor de. Algunas
personas prefieren leer el operador de igualdad como doble igual. Como veremos pronto, la
confusin de estos operadores no necesariamente causa un error de sintaxis fcil de reconocer, pero
puede provocar errores muy sutiles de lgica.
8. Es un error utilizar el operador AND lgico (&&) en vez del operando AND a nivel de bits (&) y
viceversa.
9. Utilizar el operador OR lgico ( || ) en vez del operador OR a nivel de bits ( | ) y viceversa.
10. El resultado del desplazamiento de un valor es indefinido si el operando derecho es negativo o si el
operando derecho es ms grande que el nmero de bits en los que est almacenado el operando
izquierdo.
MIGUEL . TOLEDO MARTNEZ
SUGERENCIAS, OBSERVACIONES Y CONSEJ OS: PRIMERA PARTE
SUGERENCIAS-3
11. Las funciones de manipulacin de cadenas diferentes a memmove() que copian caracteres tienen
resultados indefinidos cuando el copiado se realiza entre partes de la misma cadena.
12. La colocacin de un punto y como (;) justo despus del parntesis derecho tras la condicin de una
estructuraif con frecuencia es un error de lgica (aunque no un error de sintaxis). El punto y coma
provocar que el cuerpo de la estructura if est vaci,, por lo que la estructura misma no llevara a
cabo ninguna accin, sin importar si la condicin es verdadera o no. Peor an, la instruccin original
del cuerpo de la estructura if ahora se volver una instruccin en secuencia con la estructura if y
siempre se ejecutar, causando muchas veces que el programa genere resultados incorrectos.
13. Dividir los identificadores insertando caracteres de espacios en blanco (por ejemplo, escribiendo
main como ma in) es un error de sintaxis.
14. El empleo de una palabra reservada como identificador es un error de sintaxis.
15. Si olvida una o ambas llaves delimitadoras de una instruccin compuesta, pueden producirse errores
de sintaxis o de lgica en el programa.
16. Un punto y coma tras la condicin de una estructura if genera un error de lgica en las estructuras if
de seleccin nica y un error de sintaxis en las estructuras if de doble seleccin (si la parte if
contiene una instruccin en su cuerpo).
17. Si no se indica en el cuerpo de una estructura while una accin que en algn momento provoque que
la condicin se vuelva false, lo comn es que se presente un error llamado ciclo infinito, en el que la
estructura de repeticin nunca termina.
18. La palabra reservada while no se debe escribir con W mayscula (como While), ya que es un error de
sintaxis (recuerde que C++ es un lenguaje sensible a las maysculas y minsculas). Todas las
palabras reservadas de C++, como while, if y else, slo utilizan minsculas.
19. Si los contadores y totales no se inicializan, el resultado del programa probablemente sea incorrecto.
Este es un ejemplo de error de lgica.
20. En los ciclos controlados por contador, debido a que el contador de ciclo tiene un valor mayor en uno
que su ltimo valor legtimo (es decir 11, en el caso de que se est contando del 1 al 10), es comn
que, si se toma el valor del contador para efectuar un clculo tras terminar el ciclo, se genere un
error por diferencia de uno.
21. La seleccin de un valor centinela que tambin es un valor de datos vlido es un error de lgica.
22. Los intentos por dividir entre cero causan errores fatales.
23. El uso de nmeros de punto flotante de una manera que suponga que se representan con precisin
puede dar resultados incorrectos. La mayora de las computadoras slo representan de manera
aproximada a los nmeros de punto flotante.
24. Utilizar el operador de incremento o decremento en una expresin que no sea un nombre de variable
simple (por ejemplo, ++(x+1)) es un error de sintaxis.
25. Dado que los valores de punto flotante pueden ser aproximados, el control de los ciclos con contador
mediante variables de punto flotante puede dar como resultado valores de contador imprecisos y
pruebas de terminacin incorrectas.
26. El empleo de un operador relacional incorrecto o de un valor final de contador de ciclo equivocado
en la condicin de una estructura while o for puede provocar errores por diferencia de uno.
27. Cuando la variable de control de una estructura for se define desde el principio en la seccin de
iniciacin del encabezado de la estructura for, el empleo de la variable de control fuera del cuerpo de
la estructura es un error de sintaxis.
28. Indicar comas en lugar de los dos puntos y coma en el encabezado for es un error de sintaxis.
29. Un punto y coma inmediatamente a la derecha del parntesis derecho de un encabezado for hace que
el cuerpo de dicha estructura sea una instruccin vaca. Comnmente ste es un error de lgica.
30. No emplear el operador relacional adecuado para la condicin de continuacin de un ciclo que
cuenta hacia abajo (como cuando se utiliza incorrectamentei <= 1 en un ciclo que cuenta hacia abajo
hasta 1) podra generar un error de lgica que producira resultados incorrectos al ejecutarse el
programa.
MIGUEL . TOLEDO MARTNEZ
SUGERENCIAS, OBSERVACIONES Y CONSEJ OS: PRIMERA PARTE
SUGERENCIAS-4
31. Si no se incluye el archivo math.h en un programa que maneje funciones de la biblioteca matemtica
se generar un error de sintaxis.
32. Olvidar una instruccin break cuando es necesaria en una instruccin switch es un error de lgica.
33. La omisin del espacio entre la palabra case y el valor entero que se est probando en una estructura
switch puede provocar un error de lgica. Por ejemplo, escribir case3: en lugar de case 3:
simplemente crea una etiqueta no usada. El problema es que la estructura switch no efectuar las
acciones correctas cuando la expresin de control del switch tenga un valor de3.
34. Si no se procesan los caracteres de salto de lnea y otros caracteres de espacio en blanco que
aparecen en la entrada durante la lectura de caracteres uno por uno, es posible que sucedan errores
de lgica.
35. Indicar varias etiquetas case iguales en una estructura switch es un error de programacin.
36. Los ciclos infinitos suceden cuando la condicin de continuacin del ciclo de una estructura while,
for o do/while nunca se vuelve false. Para evitarlos, asegrese de que el valor de la condicin
cambie en algn lugar del encabezado o del cuerpo del ciclo, para que la condicin pueda, en algn
momento volverse false.
37. Aunque 3 < x < 7 es una condicin matemticamente correcta, en C++ no se evala correctamente.
Para obtener en C++ la evaluacin correcta, utilice (3 < x && x < 7)
38. En las expresiones que utilizan el operador &&, es posible que una condicin (a la que llamaremos
condicin dependiente) requiera que otra condicin sea true para que tenga sentido evaluar la
condicin dependiente. En este caso, dicha condicin debe ponerse tras la otra condicin o podra
suceder un error.
39. Emplear el operador == para realizar una asignacin o utilizar el operador = para realizar una
igualdad son errores de lgica.
40. Es un error tratar de leer de un ostream (o de cualquier otro flujo de slo salida)
41. Es un error tratar de escribir a un istream (o a cualquier otro flujo de slo entrada)
42. Es un error no colocar parntesis para forzar la precedencia adecuada cuando se utiliza el operador
de insercin de flujo << o el operador de extraccin de flujo >> que tienen una precedencia
relativamente alta.
43. El establecimiento de anchura se aplica slo para la siguiente insercin o extraccin. Despus de ello
la anchura se establece implcitamente a 0, es decir, los valores de salida sern tan anchos como
necesiten serlo. La funcin width sin argumentos devuelve el valor actual. Suponer que el
establecimiento de anchura se aplica a todas las salidas es un error de lgica.
44. Cuando no se proporciona un campo lo suficientemente ancho para manejar las salidas, stas se
imprimirn tan anchas como necesiten serlo lo que causar, posiblemente, que sean difciles de leer.
45. Es un error abrir un archivo existente para salida (ios::out) cuando, de hecho, el usuario quiere
conservar dicho archivo, ya que el contenido de ste se descarta sin aviso alguno.
46. El uso de un objeto ofstream incorrecto para referirse a un archivo.
47. Es un error no abrir un archivo antes de intentar referenciarlo en un programa.

BUENAS PRCTICAS DE PROGRAMACIN

1. Escriba sus programas de C++ sencillo y directamente. Esto a veces se conoce como mantelo simple.
No estire el lenguaje intentando usos raros.
2. Lea los manuales de la versin de C++ que est empleando. Consulte estos manuales con frecuencia
para asegurar que tenga presente el rico conjunto de caractersticas de C++ y que est empleando
correctamente estas caractersticas.
3. Su computadora y su compilador son buenos maestros. Si tras la lectura de su manual del lenguaje
C++ no est seguro del funcionamiento de alguna caracterstica de C++, experimente con un
pequeo programa de prueba y vea lo que sucede. Ajuste las opciones de su compilador para que le
MIGUEL . TOLEDO MARTNEZ
SUGERENCIAS, OBSERVACIONES Y CONSEJ OS: PRIMERA PARTE
SUGERENCIAS-5
devuelva el mximo de avisos. Estudie cada mensaje que aparezca al compilar sus programas y
corrjalos para eliminar los mensajes.
4. Cada programa debe comenzar con un comentario que describa su propsito.
5. Muchos programadores hacen que el ltimo carcter impreso por una funcin sea un saldo de lnea
(\n) Esto asegura que la funcin dejar el cursor al inicio de una nueva lnea. Las convenciones de
esta naturaleza promueven la reutilizacin del software, meta clave en los entornos de desarrollo de
software.
6. Dentro de los corchetes que definen el cuerpo de una funcin, sangre el cuerpo de la funcin un
nivel. Esto resalta la estructura funcional de los programas y ayuda a simplificar su lectura.
7. Establezca una convencin para el tamao de las sangras y luego aplquela de manera uniforme. La
tecla Tab sirve para crear sangras, pero las tabulaciones pueden variar. Recomendamos manejar
tabulaciones de de pulgada o (de preferencia) de tres espacios por cada nivel de sangra.
8. Algunos programadores prefieren declarar las variables en lneas separadas. Este formato permite la
fcil insercin de comentarios descriptivos junto a cada declaracin.
9. Para hacer ms legibles sus programas, ponga espacios despus de las comas (, )
10. La declaracin de variables con nombres significativos ayuda a que los programas estn auto
documentados, es decir, que resulte ms fcil entenderlos simplemente leyndolos en lugar de tener
que consultar manuales o hacer referencia a demasiados comentarios.
11. Evite los identificadores que comiencen con uno o dos caracteres de subrayado, pues podra ser que
el compilador de C++ utilice nombres de este tipo para fines internos. Esto evitar que los nombres
que usted determine se confundan con los nombres que el compilador seleccione.
12. Siempre inserte una lnea en blanco antes de una declaracin que aparezca entre instrucciones
ejecutables. Esto resalta las declaraciones y contribuye a la claridad del programa.
13. Si prefiere poner declaraciones al inicio de una funcin, seprelas de las instrucciones ejecutables de
la funcin por medio de una lnea en blanco que resalte el punto donde terminan las declaraciones e
inician las instrucciones ejecutables.
14. Ponga espacios en ambos lados de los operadores binarios. Con esto se resalta el operador y se
simplifica la lectura del programa.
15. Como en lgebra, para hacer ms clara a una expresin es aceptable agregarle parntesis
innecesarios. Dichos parntesis se llaman parntesis redundantes. Estos se emplean normalmente
para agrupar subexpresiones de expresiones ms grandes.
16. Sangre la instruccin del cuerpo de una estructura if para que resalte la estructura y simplificar la
lectura del programa.
17. En los programas no debe haber ms que una instruccin por lnea.
18. Es posible distribuir una instruccin grande sobre varias lneas. Si tiene que dividir una instruccin
sobre varias lneas, seleccione puntos de ruptura que tengan sentido, como despus de una coma en
el caso de una lista separada por comas o despus de un operador en el caso de una expresin larga.
Si necesita dividir una instruccin en varias lneas, sangre todas las lneas subsecuentes.
19. Al escribir expresiones que contengan muchos operadores, consulte la tabla de precedencia de los
operadores. Confirme que los operadores de la expresin se ejecutan en el orden que espera. Si no
est seguro del orden de evaluacin de una expresin compleja, coloque parntesis para forzar el
orden, justo igual como lo hara en una expresin algebraica. Adems, observe que algunos
operadores, como el de asignacin (=), se asocian de derecha a izquierda, y no de izquierda a
derecha.
20. La consistencia en la aplicacin razonable de convenciones de sangrado a sus programas simplificar
notablemente su lectura. Sugerimos una tabulacin fija de de pulgada o tres espacios en blanco por
cada sangra.
21. El seudo cdigo se emplea con frecuencia para pensar el programa durante el proceso de diseo.
Luego el programa en seudo cdigo se convierte a su equivalente en C++.
22. Sangre las instrucciones de ambos cuerpos de las estructuras if/else.
MIGUEL . TOLEDO MARTNEZ
SUGERENCIAS, OBSERVACIONES Y CONSEJ OS: PRIMERA PARTE
SUGERENCIAS-6
23. Si hay varios niveles de sangrado, todos deben sangrarse con espacios iguales.
24. Siempre ponga llaves en las estructuras if/else (y en cualquier estructura de control) para ayudarle a
evitar su omisin accidental, especialmente si despus le agrega instrucciones a una clusula if o
else.
25. Algunos programadores prefieren colocar primero las llaves izquierda y derecha y despus introducir
las instrucciones que van dentro de ellas. Con esto se evita la omisin de alguna de dichas llaves.
26. Inicialice los contadores y totales.
27. Declare cada variable en una lnea diferente.
28. Al efectuar divisiones entre una expresin cuyo valor podra ser cero, busque explcitamente esta
condicin y manjela de manera adecuada (imprimiendo un mensaje de error) en lugar de permitir
que suceda el error fatal.
29. Mediante un mensaje pdale al usuario todas las entradas de teclado. Dicho mensaje debe especificar
la forma de la entrada y los valores especiales que pueda tener (como el valor centinela que debe
indicar el usuario para terminar algn ciclo)
30. En los ciclos controlados por un valor centinela, las solicitudes de entrada de informacin deben
recordarle explcitamente al usuario dicho valor centinela.
31. No compare la igualdad o desigualdad de los valores de punto flotante. En cambio, pruebe que el
valor absoluto de la diferencia sea menor que un valor pequeo especificado.
32. La iniciacin de variables cuando se declaran ayuda al programador a evitar los problemas
provocados por datos no inicializados.
33. Los operadores unarios deben ponerse junto a sus operandos, sin espacios intermedios.
34. Controle los ciclos con contadores por medio de variables enteras.
35. Sangre las instrucciones del cuerpo de cada estructura de control
36. Ponga una lnea en blanco antes y despus de cada estructura de control, con el fin de resaltarlas en
el programa.
37. Si hay demasiados niveles de anidamiento puede volverse difcil entender el programa. Como regla
general, trate de evitar codificar ms de tres niveles de sangrado.
38. El espaciado vertical de las estructuras de control, as como el sangrado de los cuerpos de las
estructuras de control dentro de sus encabezados, le da al programa una apariencia bidimensional que
simplifica en gran medida su lectura.
39. Para ayudarle a evitar los errores por diferencia de uno, utilice el valor final en la condicin de una
estructura while o for y el operador relacional <=. Por ejemplo, para un ciclo que imprime los
valores 1 a 10, la condicin de continuacin del ciclo debera ser contador <= 10, en lugar de
contador < 10 (lo que es un error por diferencia de uno) o contador < 11 (que, sin embargo, es
correcta) No obstante, muchos programadores prefieren el llamado conteo basado en cero, en el que
para contar 10 veces, habra que inicializar contador a cero y la prueba de continuacin del ciclo
sera contador < 10.
40. En las secciones de iniciacin e incremento de las estructuras for slo ponga expresiones
relacionadas con las variables de control. Las manipulaciones de otras variables deben aparecer antes
del ciclo (si slo se ejecutan una vez, como las instrucciones de inicializacin) o en el cuerpo del
ciclo (si se ejecutan una vez por repeticin, como en el caso de las instrucciones de incremento o
decremento)
41. Aunque el valor de la variable de control puede cambiarse en el cuerpo del ciclo for, evite hacerlo,
pues esta prctica puede generar sutiles errores de lgica.
42. Aunque las instrucciones que preceden a un ciclo for y las del cuerpo de ste con frecuencia pueden
insertarse en el encabezado del for, evite hacerlo, pues podra hacer ms difcil la lectura del
programa.
43. De ser posible, limite a una sola lnea el tamao de los encabezados de las estructuras de control.
44. No emplee variables de tipo float o double para efectuar clculos monetarios. La imprecisin de los
nmeros de punto flotante puede provocar errores que generarn valores monetarios incorrectos.
MIGUEL . TOLEDO MARTNEZ
SUGERENCIAS, OBSERVACIONES Y CONSEJ OS: PRIMERA PARTE
SUGERENCIAS-7
Nota: estn apareciendo bibliotecas de clases de C++ para manejar adecuadamente los clculos
monetarios.
45. Agregue un caso default en las instrucciones switch. Los casos no probados explcitamente en una
instruccin switch que no tenga un caso default son ignorados. Al incluir el caso default se enfoca al
programador en la necesidad de procesar condiciones excepcionales. Hay situaciones en las que no
es necesario el procesamiento default.
46. Aunque las clusulas case y el caso default de la estructura switch pueden suceder en cualquier
orden, se considera una buena prctica de programacin poner la clusula default al ltimo.
47. En las estructuras switch, cuando la clusula default se lista al ltimo, no es necesaria la instruccin
break. Algunos programadores incluyen este break por claridad y simetra con los dems case.
48. Algunos programadores siempre incluyen llaves en las estructuras do/while, incluso cuando no son
necesarias. Esto ayuda a eliminar las ambigedades entre la estructura while y la estructura do/while
que contiene una sola instruccin.
49. Algunos programadores sienten que break y continue violan la programacin estructurada. Y no las
utilizan debido a que los efectos de estas instrucciones pueden lograrse por medio de tcnicas de
programacin estructurada.
50. En los programas C++ utilice exclusivamente la forma de E/S de C++, a pesar de que los
programadores de C++ tienen disponible la E/S estilo C.
51. Cuando enve a la salida expresiones, colquelas entre parntesis para impedir problemas de
precedencia de operadores entre los operadores de la expresin y el operador <<.
52. Abra un archivo un archivo para entrada (utilizando ios::in) solamente si el contenido del archivo no
debe ser modificado. Esto impide una modificacin no intencional del contenido del archivo. Este es
un ejemplo del principio de menor privilegio.

PROPUESTAS DE DESEMPEO

1. Utilizar las funciones y clases de la biblioteca estndar, en lugar de escribir sus propias versiones
comparables, puede mejorar el desempeo de sus programas, debido a que han sido escritas
cuidadosamente para que su desempeo sea eficiente.
2. La estructuraif/else anidada puede ser mucho ms rpida que una serie de estructuras if de seleccin
nica, pues existe la posibilidad de salir con rapidez de la estructura una vez que se satisfacen las
condiciones.
3. En la estructura ilf/else, pruebe hacia el principio de la estructura las condiciones que ms
probablemente sean true. Esto permite que dicha estructura se ejecute con mayor rapidez y salga
antes que en los casos que suceden con menos frecuencia.
4. Cuando se emplean operadores de asignacin abreviados, los programadores pueden escribir sus
programas con un poco ms de rapidez y los compiladores pueden compilar los programas a una
velocidad un poco mayor. Algunos compiladores generan cdigos que se ejecuta ms rpido cuando
se utilizan dichos operadores.
5. Muchos de las propuestas de desempeo que mencionados en estas lecciones generan mejoras
marginales, por lo que el lector podra estar tentado a ignorarlos. Sin embargo, cuando se pone una
mejora supuestamente marginal en un ciclo que se repite muchas veces, se suele lograr un mejor
desempeo.
6. Evite poner dentro de los ciclos expresiones cuyos valores no cambien. Pero si lo hace, muchos de
los compiladores refinados optimizadores actuales colocarn automticamente tales expresiones
fuera de los ciclos, cuando se genere el cdigo de lenguaje de mquina.
7. Muchos compiladores contienen caractersticas de optimizacin que mejorar el cdigo que usted
escribe, pero sigue siendo mejor que escriba un buen cdigo desde el principio.
8. En situaciones en las que la prioridad es el desempeo y donde la memoria es escasa o la velocidad
de ejecucin es crucial, podra ser necesario manejar enteros pequeos.
MIGUEL . TOLEDO MARTNEZ
SUGERENCIAS, OBSERVACIONES Y CONSEJ OS: PRIMERA PARTE
SUGERENCIAS-8
9. Utilizar enteros de tamao pequeo puede provocar la ejecucin ms lenta del programa si las
instrucciones de la mquina que los manipulan no son tan eficientes como aqullas que manipulan
los enteros de tamao natural (por ejemplo, cuando debe efectuarse la extensin del signo en ellos)
10. Las instrucciones break y continue bien empleadas se ejecutan ms rpido que sus tcnicas
estructuradas correspondientes.
11. En las expresiones que utilizan el operador &&, si las condiciones individuales son independientes
entre ellas, haga que la condicin que ms probablemente sea false quede a la izquierda. En las
expresiones que utilizan el operador ||, haga que la condicin que ms probablemente sea true sea la
de la izquierda. Con esto es posible reducir el tiempo de ejecucin del programa.
12. Utilice la E/S sin formato para obtener el mejor desempeo en el procesamiento de archivos de alto
volumen.
13. Cierre explcitamente cada archivo tan pronto como sepa que el archivo ya no volver a hacer
referencia al mismo. Esto puede reducir el uso de recursos de un programa que continuar
ejecutndose despus de que ya no necesite un archivo particular. Esta prctica tambin mejora la
claridad del programa.

SUGERENCIAS DE PORTABILIDAD

1. Debido a que C es un lenguaje estandarizado, independiente del hardware y ampliamente difundido,
es frecuente que las aplicaciones escritas en C puedan ejecutarse con pocas o ninguna modificacin
en un gran rango de sistemas de cmputo.
2. El empleo de funciones y clases de la biblioteca estndar, en lugar de escribirlas usted mismo, puede
mejorar la portabilidad de los programas, debido a que dicho software est incluido en prcticamente
todas las implementaciones de C++.
3. Aunque es posible escribir programas portables, hay muchos problemas entre los distintos
compiladores de C y C++ y las distintas computadoras que pueden hacer difcil lograr la
portabilidad. El simple hecho de escribir programas en C y C++ no lo garantizan. El programador
con frecuencia tendr que encarar directamente las variaciones entre compiladores y computadoras.
4. C++ permite identificadores de cualquier longitud, pero el sistema y/o tipo de implementacin de
C++ podran aplicar algunas restricciones a la longitud de los identificadores. Utilice identificadores
de 31 caracteres o menos, para asegurar la portabilidad.
5. Las manipulaciones de datos al nivel de bits son dependientes de la mquina.
6. El resultado de desplazar a la derecha un valor con signo depende de la mquina. Algunas mquinas
rellanan con ceros y otras utilizan el bit de signo.
7. El tipo size_t es un alias dependiente del sistema para el tipo unsigned long o el tipo unsigned int.
8. El mensaje que strerror() genera es dependiente del sistema.
9. En el nuevo estndar preliminar de C++, el alcance de la variable de control declarada en la seccin
de inicializacin de una estructura for es diferente del alcance en los compiladores de C++
anteriores,. El cdigo C++ creado con los viejos compiladores de C++ podra fallar al compilarse en
los compiladores que son compatibles con el estndar preliminar de C++. Las siguientes son dos
estrategias de defensa para evitar este problema: defina las variables de control con nombres
diferentes en cada estructurafor o, si prefiere emplear el mismo nombre para las variables de control
de varias estructuras for, defina la variable de control fuera y antes del primer ciclo for.
10. Las combinaciones de teclas para dar el fin de archivo son dependientes del sistema.
11. Probar por la constante simblica EOF en lugar de 1 hace a los programas ms portables. El
estndar ANSI indica que EOF es un valor entero negativo (pero no necesariamente 1) Por lo tanto,
EOF podra tener valores diferentes, segn el sistema.
12. Dado que el tamao de los int vara segn el sistema, emplee enteros long si espera procesar enteros
que caigan fuera del rango 32767 y si desea ejecutar el programa en diferentes sistemas de
cmputo.
MIGUEL . TOLEDO MARTNEZ
SUGERENCIAS, OBSERVACIONES Y CONSEJ OS: PRIMERA PARTE
SUGERENCIAS-9
13. Por compatibilidad con las versiones anteriores de estndar C++, el valor booleano true tambin
puede representarse mediante cualquier valor distinto de cero y el valor booleano false como 0.
14. Cuando le indique al usuario cmo terminar la entrada desde el teclado, pdale que teclee un fin de
archivo para terminar la entrada, en vez de pedirle <ctrl>d (para UNIX y Macintosh) o <ctrl>z (PC
y VAX).

OBSERVACIONES DE INGENIERA DE SOFTWARE

1. Utilice un enfoque de bloques de construccin para crear programas. Evite reinventar la rueda.
Utilice las partes existentes donde sea posible; a esto se le llama reutilizacin de software, lo cual es
crucial en la programacin orientada a objetos.
2. Al programar en C++, normalmente utilizar los siguientes bloques de construccin: clases y
funciones de la biblioteca estndar de C++, clases y funciones creadas por usted mismo y clases y
funciones de diversas bibliotecas no estndar comunes.
3. Cualquier programa en C++ puede construirse con los siete tipos de estructuras de control: if, if/else,
switch, while, do/while y for, combinndolas nicamente de dos maneras (apilamiento de estructuras
de control y anidamiento de estructuras de control)
4. Las instrucciones compuestas pueden ponerse en cualquier lugar del programa en el que pueda ir una
instruccin sencilla.
5. As como pueden ponerse instrucciones compuestas en cualquier lugar donde pueda ir una
instruccin sencilla, tambin es posible no tener ninguna instruccin, es decir, tener una instruccin
vaca. Esta se representa poniendo un punto y coma(;) donde normalmente ira una instruccin.
6. Cada refinamiento, as como la parte superior misma, es una especificacin completa del algoritmo;
lo que vara es el nivel de detalle.
7. Muchos programas pueden dividirse lgicamente en tres fases: Una de inicio, que inicializa las
variables del programa; otra de procesamiento, que acepta los datos de entrada y ajusta las variables
de programa correspondientes; y otra de terminacin, que calcula e imprime el resultado final.
8. El programador termina el proceso de refinamiento descendente paso a paso cuando especifica el
algoritmo con el detalle suficiente para poder convertir el seudo cdigo en cdigo de C++; a partir de
aqu, la implementacin del programa en C++ suele ser directa.
9. La experiencia ha mostrado que la parte ms difcil de resolver un problema en una computadora es
desarrollar el algoritmo de solucin. Una vez que se ha especificado un algoritmo correcto, el
proceso de generacin de un programa C++ funcional a partir de dicho algoritmo suele ser directo.
10. Muchos programadores experimentados escriben programas sin emplear herramientas de desarrollo
como el seudo cdigo. Estos programadores sienten que su meta es revolver el problema en la
computadora y que la escritura del seudo cdigo simplemente retrasa la obtencin de resultados.
Aunque esto podra funcionar en el caso de problemas sencillos y conocidos, puede provocar errores
serios y retrasar proyectos grandes y complejos.
11. A veces se pone un punto y como justo despus de un encabezado for para crear un ciclo de retardo.
Tal ciclo for con un cuerpo vaco efecta la cantidad indicada de ciclos sin hacer nada ms que
contar. Puede utilizar un ciclo de retardo, por ejemplo, para reducir la velocidad de un programa que
genera salidas a la pantalla a una velocidad demasiado alta para poderlas leer.
12. Existe un conflicto entre conseguir una ingeniera de software de calidad y lograr el mejor
desempeo del software. Es frecuente que se logre una de estas metas a expensas de la otra.
13. El estilo deE/S de C++ es a prueba de tipos.
14. C++ permite un tratamiento comn de la E/S de tipos predefinidos y tipos definidos por el usuario.
Este tipo de comunidad facilita el desarrollo de software en general y la reutilizacin del software en
particular.
MIGUEL . TOLEDO MARTNEZ
SUGERENCIAS, OBSERVACIONES Y CONSEJ OS: PRIMERA PARTE
SUGERENCIAS-10
INDICACIONES PARA PRUEBA Y DEPURACIN

1. Los programadores normalmente escriben condiciones como x == 7 con el nombre de la variable a la
izquierda y la constante a la derecha. Si el programador las invierte de modo que la constante est a
la izquierda y el nombre de la variable a la derecha como en 7 == x, el reemplazo accidental del
operador == con = quedar protegido por el compilador. Este tratar esto como error sintctico, pues
a la izquierda de una instruccin de asignacin slo se puede poner un nombre de variable. Esto
cuando menos evitar el desastre potencial de un error de lgica en tiempo de ejecucin.

2. Utilice su editor de texto para buscar todas las apariciones de = en el programa y comprueba que
cada operador est en el lugar correcto.

También podría gustarte