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

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 />

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

Saved successfully!

Ooh no, something went wrong!