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 15 — #53<br />
✐<br />
1.7. Creación y destrucción de objetos<br />
un objeto, el objeto hará lo correcto, incluso cuando esté involucrado el upcasting.<br />
1.7. Creación y destrucción de objetos<br />
Técnicam<strong>en</strong>te, el dominio de la POO son los tipos abstractos de datos, la her<strong>en</strong>cia<br />
y el polimorfismo, pero otros asuntos pued<strong>en</strong> ser al m<strong>en</strong>os igual de importantes. Esta<br />
sección ofrece una visión g<strong>en</strong>eral de esos asuntos.<br />
Es especialm<strong>en</strong>te importante la forma <strong>en</strong> que se crean y se destruy<strong>en</strong> los objetos.<br />
¿Dónde está el dato para un objeto y cómo se controla la vida de este objeto Difer<strong>en</strong>tes<br />
l<strong>en</strong>guajes de programación usan distintas filosofías al respecto. <strong>C++</strong> adopta<br />
el <strong>en</strong>foque de que el control de efici<strong>en</strong>cia es la cuestión más importante, pero eso<br />
delega la elección al programador. Para una velocidad máxima de ejecución, el almac<strong>en</strong>ami<strong>en</strong>to<br />
y la vida se determinan mi<strong>en</strong>tras el programa se escribe, colocando<br />
los objetos <strong>en</strong> la pila o <strong>en</strong> almac<strong>en</strong>ami<strong>en</strong>to estático. La pila es un área de memoria<br />
usada directam<strong>en</strong>te por el microprocesador para almac<strong>en</strong>ar datos durante la ejecución<br />
del programa. A veces las variables de la pila se llaman variables automáticas o<br />
de ámbito (scoped). El área de almac<strong>en</strong>ami<strong>en</strong>to estático es simplem<strong>en</strong>te un parche fijo<br />
de memoria alojado antes de que el programa empiece a ejecutarse. Usar la pila o<br />
el área de almac<strong>en</strong>ami<strong>en</strong>to estático fija una prioridad <strong>en</strong> la rapidez de asignación y<br />
liberación de memoria, que puede ser valioso <strong>en</strong> algunas situaciones. Sin embargo,<br />
se sacrifica flexibilidad porque se debe conocer la cantidad exacta, vida, y tipo de<br />
objetos mi<strong>en</strong>tras el programador escribe el programa. Si está int<strong>en</strong>tando resolver un<br />
problema más g<strong>en</strong>eral, como un diseño asistido por computadora, gestión de almacén,<br />
o control de tráfico aéreo, eso también es restrictivo.<br />
El segundo <strong>en</strong>foque es crear objetos dinámicam<strong>en</strong>te <strong>en</strong> un espacio de memoria<br />
llamado montículo (heap). En este <strong>en</strong>foque no se sabe hasta el mom<strong>en</strong>to de la ejecución<br />
cuántos objetos se necesitan, cuál será su ciclo de vida, o su tipo exacto. Estas<br />
decisiones se toman de improviso mi<strong>en</strong>tras el programa está <strong>en</strong> ejecución. Si necesita<br />
un nuevo objeto, simplem<strong>en</strong>te creelo <strong>en</strong> el montículo cuando lo necesite, usando la<br />
palabra reservada new. Cuando ya no necesite ese espacio de almac<strong>en</strong>ami<strong>en</strong>to, debe<br />
liberarlo usando la palabra reservada delete.<br />
Como la memoria se administra dinámicam<strong>en</strong>te <strong>en</strong> tiempo de ejecución, la cantidad<br />
de tiempo requerido para reservar espacio <strong>en</strong> el montículo es considerablem<strong>en</strong>te<br />
mayor que el tiempo para manipular la pila (reservar espacio <strong>en</strong> la pila a m<strong>en</strong>udo<br />
es una única instrucción del microprocesador para mover el puntero de la pila hacia<br />
abajo, y otro para moverlo de nuevo hacia arriba). El <strong>en</strong>foque dinámico asume que<br />
los objetos ti<strong>en</strong>d<strong>en</strong> a ser complicados, por eso la sobrecarga extra de <strong>en</strong>contrar espacio<br />
para alojarlos y después liberarlos, no ti<strong>en</strong>e un impacto importante <strong>en</strong> la creación<br />
de un objeto. Además, el aum<strong>en</strong>to de flexibilidad es es<strong>en</strong>cial para resolver problemas<br />
g<strong>en</strong>erales de programación.<br />
Hay otra cuestión, sin embargo, y es el tiempo de vida de un objeto. Si crea un<br />
objeto <strong>en</strong> la pila o <strong>en</strong> espacio estático, el compilador determina cuánto tiempo dura<br />
el objeto y puede destruirlo automáticam<strong>en</strong>te. Pero si lo crea <strong>en</strong> el montículo, el compilador<br />
no ti<strong>en</strong>e conocimi<strong>en</strong>to de su tiempo de vida. En <strong>C++</strong>, el programador debe<br />
determinar programáticam<strong>en</strong>te cuándo destruir el objeto, y <strong>en</strong>tonces llevar a cabo la<br />
destrucción usando la palabra reservada delete. Como alternativa, el <strong>en</strong>torno puede<br />
proporcionar una característica llamada recolector de basura (garbage collector) que<br />
automáticam<strong>en</strong>te descubre qué objetos ya no se usan y los destruye. Naturalm<strong>en</strong>te,<br />
escribir programas usando un recolector de basura es mucho más conv<strong>en</strong>i<strong>en</strong>te, pero<br />
requiere que todas las aplicaciones sean capaces de tolerar la exist<strong>en</strong>cia del recolector<br />
de basura y la sobrecarga que supone. Eso no <strong>en</strong>caja <strong>en</strong> los requisitos del diseño del<br />
15<br />
✐<br />
✐<br />
✐<br />
✐