Está en la página 1de 9

Yez Aguilar Vctor Hugo

No. De Control: 12590421 Materia: POO Carrera: ISC Grupo: A

Mtodo constructor

Definicin
El constructor es un mtodo especial de una clase. El objetivo fundamental del constructor es inicializar los atributos del objeto que creamos. Las ventajas de implementar un constructor en lugar del mtodo inicializar son: 1. El constructor es el primer mtodo que se ejecuta cuando se crea un objeto. 2. El constructor se llama automticamente. Es decir es imposible de olvidarse de llamarlo ya que se llamar automticamente. 3. Quien utiliza POO (Programacin Orientada a Objetos) conoce el objetivo de este mtodo. Otras caractersticas de los constructores son:

El constructor se ejecuta inmediatamente luego de crear un objeto y no puede ser llamado nuevamente. Un constructor no puede retornar dato. Un constructor puede recibir parmetros que se utilizan normalmente para inicializar atributos. El constructor es un mtodo opcional, de todos modos es muy comn definirlo.

Declaracin
Cuando se declara una clase en Java, se pueden declarar uno o ms constructores opcionales que realizan la inicializacin cuando se instancia (se crea una ocurrencia) un objeto de dicha clase. Cuando se crea una nueva instancia por ejemplo de (MiClase), se crean (instancias) todos los mtodos y variables, y se llama al constructor de la clase: MiClase mc; mc = new MiClase(); La palabra clave new se usa para crear una instancia de la clase. Antes de ser instanciada con new no consume memoria, simplemente es una declaracin de tipo.

Despus de ser instanciado un nuevo objeto mc, el valor de i en el objeto mc ser igual a 10. Se puede referenciar la variable (de instancia) i con el nombre del objeto: mc.i++; // incrementa la instancia de i de mc Al tener mc todas las variables y mtodos de MiClase, se puede usar la primera sintaxis para llamar al mtodo Suma_a_i() utilizando el nuevo nombre de clase mc: mc.Suma_a_i( 10 ); y ahora la variable mc.i vale 21. Luego, en Java, cuando se instancia un objeto, siempre se hace una llamada directa al constructor como argumento del operador new. Este operador se encarga de que el sistema proporcione memoria para contener al objeto que se va a crear. En C++, los objetos pueden instanciarse de diferentes formas, pero en Java solamente se pueden instanciar en la pila de memoria, es decir, solamente se pueden instanciar utilizando el operador new para poder solicitar memoria al sistema en tiempo de ejecucin y utilizar el constructor para instanciar el objeto en esa zona de memoria. Si al intentar instanciar un objeto, la Mquina Virtual Java (JVM) no puede localizar la memoria que necesita ese objeto, bien inmediatamente o haciendo ejecutarse al reciclador de memoria, el sistema lanzar un OutOfMemoryError. Tanto en Java como en C++, si no se proporciona explcitamente un constructor, el sistema proporciona uno por defecto que inicializar automticamente todas las variables miembro a cero o su equivalente, en Java. En C++, el constructor de defecto no realiza ningn tipo de inicializacin. Se puede pensar en el constructor de defecto en Java como un mtodo que tiene el mismo nombre que la clase y una lista de argumentos vaca. Y en C++, el constructor de defecto sera como la llamada cuando se instancia un objeto sin parmetros MiClase objeto; En ambos lenguajes, si se proporciona uno o ms constructores, el constructor de defecto no se proporciona automticamente y si fuese necesaria su utilizacin, tendra que proporcionarlo explcitamente el programa. Las dos sentencias siguientes muestran cmo se utiliza el constructor en Java para declarar, instanciar y, opcionalmente, inicializar un objeto: MiClase miObjeto = new MiClase(); MiClase miObjeto = new MiClase( 1,2,3 );

Las dos sentencias devuelven una referencia al nuevo objeto que es almacenada en la variable miObjeto. Tambin se puede invocar al constructor sin asignar la referencia a una variable. Esto es til cuando un mtodo requiere un objeto de un tipo determinado como argumento, ya que se puede incluir una llamada al constructor de este objeto en la llamada al mtodo: miMetodo( new MiConstructor( 1,2,3 ) ); Aqu se instancia e inicializa un objeto y se pasa a la funcin. Para que el programa compile adecuadamente, debe existir una versin de la funcin que espere recibir un objeto de ese tipo como parmetro. Tanto en Java como en C++, cuando un mtodo o una funcin comienza su ejecucin, todos los parmetros se crean como variables locales automticas. En este caso, el objeto es instanciado en conjuncin con la llamada a la funcin que ser utilizada para inicializar esas variables locales cuando comience la ejecucin y luego sern guardadas. Como son automticas, cuando el mtodo concluye su ejecucin, se destruir (en C++) o ser marcado para su destruccin (en Java). class MiClase { int varInstancia; // Este es el constructor parametrizado MiClase( int dato ) { // rellenamos la variable de instancia con los datos // que se pasan al constructor varInstancia = dato; } void verVarInstancia() { System.out.println( "El Objeto contiene " + varInstancia ); } }

Utilidad
Una muy importante utilidad es remplazar al mtodo que se haiga propuesto.

Mtodo destructor Definicin

Cuando un objeto no va a ser utilizado, el espacio de memoria de dinmica que utiliza ha de ser explcitamente. El recolector de basura ser el encargado de liberar una zona de memoria dinmica que haba sido reservada mediante el operador new, cuando el objeto ya no va a ser utilizado ms durante el programa (por ejemplo, sale del mbito de utilizacin, o no es referenciado nuevamente). El sistema de recogida de basura se ejecuta peridicamente, buscando objetos que ya no estn referenciados. A veces una clase mantiene un recurso que no es de Java como un descriptor de archivo o un tipo de letra del sistema de ventanas. En este caso sera acertado el utilizar la finalizacin explcita, para asegurar que dicho recurso se libera. Esto se hace mediante la destruccin personalizada, un sistema similar a los destructores de C++. Para especificar una destruccin personalizada se aade un mtodo a la clase con el nombre finalice.

Declaracin
Java no utiliza destructores (al contrario que C++) ya que tiene una forma de recoger automticamente todos los objetos que se salen del alcance. No obstante proporciona un mtodo que, cuando se especifique en el cdigo de la clase, el reciclador de memoria (garbage collector) llamar:

// Cierra el canal cuando este objeto es reciclado protected void finalize() { close(); } Cada objeto tiene el mtodo finalize(), que es heredado de la claseObject. Si se necesitase realizar alguna limpieza asociada con la memoria, se puede sobreescribir el mtodo finalize() y colocar en l el cdigo que sea necesario. Los programadores C++ deben tener en cuenta que el mtodofinalize() no es un destructor. En C++, si existe un destructor, ste ser invocado siempre que el objeto se salga de mbito o vaya a ser destruido. En Java, aunque el mtodo finalize() siempre se invocar antes de que el reciclador de memoria libere la zona de memoria ocupada por el objeto, no hay garanta alguna de que el reciclador de memoria reclame la memoria de un determinado objeto, es decir, no hay garanta de que el mtodo finalize() sea invocado. La regla de oro a seguir es que no se debe poner ningn cdigo que deba ser ejecutado en el mtodo finalize(). Por ejemplo, si se necesita concluir la comunicacin con un servidor cuando ya no se va a usar un objeto, no debe ponerse el cdigo de desconexin en el mtodo finalize(), porque puede que nunca se llamado. Luego, en Java, es responsabilidad del programador escribir mtodos para realizar limpieza que no involucre a la memoria ocupada por el objeto y ejecutarlos en el instante preciso. El mtodo finalize() y el reciclador de memoria son tiles para liberar la memoria de la pila y debera restringirse su uso solamente a eso, y no depender de ellos para realizar ningn otro tipo de limpieza.

Utilidad
Sirve para que un objeto ejecute una accin (o grupo de acciones) antes de terminar su ciclo vital.

Sobrecarga de mtodos

En qu consiste?

En crear varios mtodos en la misma clase, con el mismo nombre y tipo de retorno, pero que efecten diferentes funciones. Lo que diferenciar a un mtodo de otro ser el nmero y tipo de los parmetros que reciban. El compilador se encargar de hacer la diferencia. Ejemplo:

class Suma { int a,b, suma; public Suma(int n1, int n2) { a=n1; b=n2; suma=0; } public Suma() //constructor sobrecargado con el anterior { suma=0; } int sumar() //mtodo sobrecargado { suma=a+b; return(suma); } int sumar(int x, int y) //metodo sobrecargado { return(x+y); }

int sumar(int x, int y, int z) //mtodo sobrecargado { return (x+y+z) } float sumar (float a, float b) //mtodo NO sobrecargado { return(a+b); } } Java diferencia los mtodos sobrecargados en base al nmero y tipo de argumentos que recibe el mtodo y no por el tipo que devuelve.

Para qu sirve?

Para reutilizar el nombre de un mtodo pero con diferentes argumentos (opcionalmente un tipo diferente de retorno). Las reglas para sobrecargar un mtodo son las siguientes: + Los mtodos sobrecargados debe de cambiar la lista de argumentos. + Pueden cambiar el tipo de retorno. + Pueden cambiar el modificador de acceso. + Pueden declarar nuevas o ms amplias excepciones. + Un mtodo puede ser sobrecargado en la misma clase o en una subclase.

Sobrecarga de operadores

En qu consiste?
En redefinir ciertos operadores, como "+" y "-". Se llama sobrecarga de operadores porque estamos reutilizando el mismo operador con un nmero de usos diferentes, y el compilador decide cmo usar ese operador dependiendo sobre qu opera.

La sobrecarga de operadores slo se puede utilizar con clases, no se pueden redefinir los operadores para los tipos simples predefinidos.

Los operadores lgicos && y || pueden ser sobrecargados para las clases definidas por el programador, pero no funcionarn como operadores de short circuit. Todos los miembros de la construccin lgica sern evaluados sin ningn problema en lo que se refiere a la salida. Naturalmente los operadores lgicos predefinidos continuarn siendo operadores de short circuit como era de esperar, pero no los sobrecargados. Los siguientes operadores no pueden ser sobrecargados: El operador ternario? El operador de acceso a una clase o estructura : . El operador scope :: .

Para qu sirve?
Combinar y comparar los tipos utilizando operadores como "+", "-", "=" y "!=". No se debera utilizar para proporcionar un acceso directo sintctico para las operaciones no intuitivas.

Bibliografas
http://xtremepoo.blogspot.mx/2009/06/concepto-de-destructor-y-constructor.html http://pythonya.appspot.com/detalleconcepto?deta=Metodo%20constructor%20de%20una%20cl ase http://xtremepoo.blogspot.mx/2009/06/declaracion-de-metodo-constructor-y.html Object-Oriented Programming With Java, Escrito por Barry J. Holmes,Daniel T. Joyce

También podría gustarte