You are on page 1of 7

UNIVERSIDAD CATLICA

DE CUENCA
UNIDAD ACADMICA DE INGENIERA
CIVIL, ARQUITECTURA Y DISEO
FACULTAD DE INGENIERA CIVIL
CURSO:
CUARTO CICLO
MATERIA:
PROGRAMACIN
TEMA:
DESTRUCTORES
PROFESOR:
ING. HCTOR MEJA
NOMBRE:
DIEGO RAMN
FECHA DE ENTREGA:
29 DE JULIO DE 2015

CUENCA-ECUADOR

Que es un destructor
Un destructor en programacin orientada a objetos es una funcin miembro
especial llamadas automticamente en la ejecucin del programa, y por
tanto no tienen por qu ser llamadas explcitamente por el programador.
Sus principales cometidos son:

liberar los recursos computacionales que el objeto de dicha clase

haya adquirido en su tiempo de ejecucin al expirar ste.


quitar los vnculos que pudiesen tener otros recursos u objetos con
ste.

Los destructores son invocados automticamente al alcanzar el flujo del


programa el fin del mbito en el que est declarado el objeto.
Los destructores son un tipo especial de funcin miembro, estrechamente
relacionados con

los constructores.

Son

tambin

funciones que no

devuelven nada (ni siquiera void). Tampoco aceptan ningn parmetro, ya


que la destruccin de un objeto no acepta ningn tipo de opcin o
especificacin particular y es idntica para todos los objetos de la clase. Los
destructores no pueden ser heredados, aunque una clase derivada puede
llamar a los destructores de su superclase si no han sido declarados
privados (son pblicos o protegidos). Lo mismo que ocurre con los
constructores, tampoco puede obtenerse su direccin, por lo que no es
posible establecer punteros a este tipo de funciones.
La misin ms comn de los destructores es liberar la memoria asignada
por los constructores, aunque tambin puede consistir en desasignar y/o
liberar determinados recursos asignados por estos. Por ejemplo, cerrar un
fichero; una lnea de comunicacin, o desbloquear un recurso compartido
que hubiera sido bloqueado previamente por el constructor.
Se ha sealado que, si el programador no define uno explcitamente, el
compilador C++ proporciona un destructor de oficio, que es declarado
pblico y puede ser invocado sin argumentos. Por lo general en la mayora
de los casos este destructor de oficio es suficiente, por lo que el
programador no necesita definir uno por s mismo, a no ser que la clase
incluya la inicializacin de objetos persistentes. Por ejemplo, matrices que
necesiten del operador new en el constructor para su inicializacin, en cuyo
caso es responsabilidad del programador definir un destructor adecuado.

Los destructores son invocados automticamente (de forma implcita) por el


programa en multitud de ocasiones; de hecho es muy raro que sea
necesario invocarlos explcitamente. Su misin es limpiar los miembros del
objeto antes que el propio objeto se auto-destruya.
Existen destructores en java
En java no existen los destructores, esto es gracias al recolector de basura
de la mquina virtual de java. Como su nombre lo dice, el recolector de
basura recolecta todas las variables u objetos que no se estn utilizando y
que no haya ninguna referencia a ellos por una clase en ejecucin, liberando
as automticamente la memoria de nuestra computadora.
Para este fin se crea un mtodo, denominado finalize, con las siguientes
caractersticas:
protected void finalize() throws throwable
{
cuerpo del destructor
}
Java soporta los finalizadores, pero que estn destinados a ser utilizados
slo como una salvaguardia para los objetos de la celebracin de un
identificador de recursos nativos, como sockets, identificadores de archivo
de identificadores de ventana, etc. Cuando el recolector de basura recoge
un objeto sin un finalizador simplemente marca la memoria de la regin
como libre y eso es todo. Cuando el objeto tiene un finalizador, la primera
copia en una ubicacin temporal (recuerden, estamos de recoleccin de
basura aqu), entonces es que est en cola en espera-para-ser-finalizado la
cola y, a continuacin, un Finalizador hilo de las encuestas de la cola con
prioridad muy baja y se ejecuta el finalizador.
Mtodo finalize
Los finalizadores son mtodos que vienen a completar la labor del garbage
collector. Un finalizador es un mtodo que se llama automticamente
cuando se va a destruir un objeto (antes de que la memoria sea liberada de
modo automtico por el sistema).

Se utilizan para ciertas operaciones de terminacin distintas de liberar


memoria (por ejemplo: cerrar ficheros, cerrar conexiones de red, liberar
memoria reservada por funciones nativas, etc.).
Hay que tener en cuenta que el garbage collector slo libera la memoria
reservada con new. Si por ejemplo se ha reservado memoria con funciones
nativas en C (por ejemplo, utilizando la funcin malloc()), esta memoria hay
que liberarla explcitamente utilizando el mtodo finalize().
Un finalizador es un mtodo de objeto (no static), sin valor de retorno (void),
sin argumentos y que siempre se llama finalize(). Los finalizadores se llaman
de modo automtico siempre que hayan sido definidos por el programador
de la clase. Para realizar su tarea correctamente, un finalizador debera
terminar siempre llamando al finalizador de su super-clase.
Tampoco se puede saber el momento preciso en que los finalizadores van a
ser llamados. En muchas ocasiones ser conveniente que el programador
realice esas operaciones de finalizacin de modo explcito mediante otros
mtodos que l mismo llame.
El mtodo System.runFinalization() sugiere a la JVM que ejecute los
finalizadores de los objetos pendientes (que han perdido la referencia).
Parece ser que para que este mtodo se ejecute, en Java 1.1 hay que llamar
primero a gc() y luego a runFinalization().
Cmo funciona la finalizacin
La clase de Object no proporciona ninguna implementacin del mtodo de
Finalize , y el recolector de elementos no utilizados no marca los tipos
derivados de Object para la finalizacin a menos que reemplazan el mtodo
de Finalize .
Si un tipo invalida el mtodo de Finalize , el recolector de elementos no
utilizados agrega una entrada para cada instancia de tipo a una estructura
interna denominada cola de finalizacin. La cola de finalizacin contiene
entradas para todos los objetos del montn administrado cuyo cdigo de
finalizacin debe ejecutarse antes de que el recolector de elementos no
utilizados pueda reclamar la memoria. El recolector de elementos no
utilizados llama al mtodo de Finalize automticamente en las condiciones
siguientes:

Despus de que un objeto est inaccesible, a menos que el objeto ha


sido eximido de finalizacin mediante una llamada al mtodo de

GC::SuppressFinalize .
Durante el cierre de un dominio de aplicacin, a menos que el objeto
est exento de finalizacin. Durante el cierre, incluso se concluyen los
objetos que an estn accesibles.

Finalize automticamente slo se llama una vez en una instancia


determinada, a menos que el objeto re- se registra mediante un mecanismo
como GC::ReRegisterForFinalize y el mtodo de GC::SuppressFinalize no se
ha llamado posteriormente.
Las operaciones de Finalize tienen las siguientes limitaciones:

El momento exacto en que se ejecuta el finalizador durante la


recoleccin de elementos no utilizados no est definido. Para
garantizar la versin determinista de los recursos de las instancias de
la clase, implemente un mtodo de Close o proporcione una

implementacin de IDisposable::Dispose .
No se garantiza que los finalizadores de dos objetos se ejecuten en un
orden determinado, aunque un objeto haga referencia al otro. Es
decir, si el objeto A tiene una referencia a b del objeto y tienen
finalizadores, b de objeto podra haberse concluida ya cuando el

finalizador del objeto A inicia.


El subproceso en el que el finalizador se ejecuta est sin especificar.

El mtodo de Finalize podra no ejecutarse hasta su finalizacin ni podra


ejecutarse en absoluto en circunstancias excepcionales siguientes:

Si otros bloques finalizador indefinidamente (entra en un bucle


infinito, intenta obtener un bloqueo que nunca puede obtener, etc.).
Como

el

runtime

finalizadores

no

intenta
pueden

finalizadores
llamar

si

un

completamente,
finalizador

otros

bloqueos

indefinidamente.
Si el proceso finaliza sin dar al tiempo de ejecucin una oportunidad
de limpiar. En este caso, la primera notificacin de terminacin del
proceso por parte del motor en tiempo de ejecucin es una
notificacin DLL_PROCESS_DETACH.

El tiempo de ejecucin contina finaliza objetos durante el cierre solo


mientras el nmero de objetos susceptible contina disminuyendo.

Si Finalize o un reemplazo de Finalize produce una excepcin, el runtime no


se hospeda en una aplicacin que reemplace la directiva predeterminada, el
runtime finalizar el proceso y ningn tryactivo/finally bloqueos ni se
ejecutan los finalizadores. Este comportamiento garantiza la integridad del
proceso si el finalizador no puede liberar ni destruir recursos.
Ejemplo del mtodo Finalize
public class Finalizando{

String nombre;

Finalizando (String pNombre){

this.nombre = pNombre;

protected void finalize(){


System.out.println(this.nombre);
}
public void pasarGarbageCollector(){

Runtime garbage = Runtime.getRuntime();


garbage.gc();
}
public static void main (String[] args){

Finalizando persona = new Finalizando("Marta");

persona = null;
this.pasarGarbageCollector();

}
}
El resultado de esto sera imprimir por consola Marta

Linkografia
https://msdn.microsoft.com/eses/library/system.object.finalize(v=vs.110).aspx?cs-save-lang=1&cslang=fsharp#code-snippet-1
http://www.academia.edu/3831912/Metodo_constructor_y_destructor_en_jav
a

You might also like