Contructores en java(grupo 8)

14
CONSTRUCTORES EN JAVA INTRODUCCION.- A medida que progresa la revolución computacional, la programación "insegura" se ha convertido en uno de los mayores culpables del encarecimiento de la programación. Dos de estos aspectos de seguridad son la inicialización y la limpieza. Muchos de los fallos que se dan al programar ocurren cuando el programador olvida inicializar una variable, objeto, etc. Esto es especialmente habitual en todos los lenguajes de Programación, cuando los usuarios no saben cómo inicializar un componente, o incluso cuándo deben hacerlo. La eliminación es un problema especial porque es fácil olvidarse de un elemento una vez que ya no se utiliza, puesto que ya no tiene importancia. Por consiguiente, los recursos que ese elemento utilizaba quedan reservados y es fácil acabar quedándose sin recursos (y el más importante, la memoria). C++ introdujo el concepto de constructor, un método especial invocado automáticamente en la creación de un objeto. Java también adoptó el constructor, y además proporciona un método que cuando se especifica en el código libera automáticamente recursos de memoria cuando dejan de ser utilizados, este método se llama garbage collector. En java no es necesaria la definición de destructores, pues el mismo lenguaje se encarga de la eliminación y liberación

Transcript of Contructores en java(grupo 8)

Page 1: Contructores en java(grupo 8)

CONSTRUCTORES EN JAVA

INTRODUCCION.-

A medida que progresa la revolución computacional, la programación "insegura" se ha convertido en uno de los mayores culpables del encarecimiento de la programación.

Dos de estos aspectos de seguridad son la inicialización y la limpieza. Muchos de los fallos que se dan al programar ocurren cuando el programador olvida inicializar una variable, objeto, etc. Esto es especialmente habitual en todos los lenguajes de Programación, cuando los usuarios no saben cómo inicializar un componente, o incluso cuándo deben hacerlo.

La eliminación es un problema especial porque es fácil olvidarse de un elemento una vez que ya no se utiliza, puesto que ya no tiene importancia.

Por consiguiente, los recursos que ese elemento utilizaba quedan reservados y es fácil acabar quedándose sin recursos (y el más importante, la memoria).

C++ introdujo el concepto de constructor, un método especial invocado automáticamente en la creación de un objeto. Java también adoptó el constructor, y además proporciona un método que cuando se especifica en el código libera automáticamente recursos de memoria cuando dejan de ser utilizados, este método se llama garbage collector.

En java no es necesaria la definición de destructores, pues el mismo lenguaje se encarga de la eliminación y liberación de la memoria ocupada por un objeto, esto se realiza cada vez que un objeto pierde todas sus referencias.

Un punto clave de la Programación Orientada a Objetos es el evitar información incorrecta por no haber sido correctamente inicializadas las variables. Java no permite que haya variables miembro que no estén inicializadas ( Si puede haber variables locales de métodos sin inicializar, pero el compilador da un error si se intentan utilizar sin asignarlas previamente un valor).

Page 2: Contructores en java(grupo 8)

Pasos para la inicialización

1.- Java inicializa siempre con valores por defecto las variables que son miembros de la clases, métodos, etc.

2.- El segundo paso para la inicialización correcta de objetos es el uso de constructores.

3.-Java todavía dispone de una tercera línea de actuación para evitar que haya variables sin inicializar correctamente. Son los inicializadores.

DEFINICIÓN DE CONSTRUCTOR.-

El constructor de una clase es un tipo específico de método (especial y estándar) que se usa para inicializar los objetos de esa clase. Es una función que se ejecuta automáticamente siempre al crear un objeto.

Son mensajes que recibe la clase para crear e inicializar un objeto para que tenga valores correctos. Un objeto SIEMPRE debe tener valores correctos, desde que se crea hasta que se destruye. Al utilizar un constructor, el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos creado.

La principal misión del Constructor es reservar memoria e inicializar la variable miembro de la clase

En general, se los utiliza para inicializar los estados de las variables de instancia

TIPOS

1. Constructor por defecto (no-args)

Si no se define ningún constructor de una clase, el compilador generará un constructor por defecto. El constructor por defecto no tiene argumentos y simplemente sitúa ceros en cada byte de las variables instancia de un objeto. Si se definen constructores para una clase, el constructor por defecto no se genera.

Page 3: Contructores en java(grupo 8)

2. Constructor de copia

El constructor de copia se utilizan para inicializar un objeto con otro objeto de la misma clase.

Construye un nuevo objeto como una copia del que se le pasa

Cuenta(Cuenta otra){

codigo = otra.codigo;

saldo = otra.saldo;

titular = otra.titular;

}

No se usa mucho dentro de las bibliotecas de clases de Java.

Existe en la clase String y las colecciones.

La forma preferida de obtener la copia de un objeto es utilizar el método clone.

3. Constructor común(personalizado)

El constructor común es aquel que recibe parámetros para asignarles como valores iníciales a los datos miembros, o sea que al crear la instancia, se pasó unos parámetros para inicializar .Si se declara algún constructor, entonces ya no se puede usar el constructor personalizado. Es necesario usar el constructor declarado en la clase.

De entre todos los constructores que existan, tan sólo uno se ejecutará al crear un objeto de la clase.

DECLARACIÓN DE UN CONSTRUCTOR (SINTAXIS)

<modificador acceso> nombreClase ([lista de parámetros]) {[declaraciones de variables locales]sentencias}

Page 4: Contructores en java(grupo 8)

Donde

<[modificadores de acceso> Son los que permiten al programador quien accede a los datos y métodos miembro de una clase pueden ser: public, protected, private.

nombreClase.- Representa el mismo nombre de la clase.

Dentro del código de un constructor generalmente suele existir inicializaciones de variables y objetos, para conseguir que el objeto sea creado con dichos valores iniciales.

[lista de parámetros] es una lista de declaraciones de parámetros separadas por comas (,).

Cada una de las declaraciones de parámetros tiene la siguiente sintaxis:

tipo nomParametro

Donde tipo es el tipo del parámetro y puede ser uno de los tipos predefinidos(char, byte, short, int, long, float o double) o una clase.

nomParametro es el nombre del parámetro.Cada una de las declaraciones de variables locales tiene la siguiente sintaxis:

[declaracion de variables locales]

tipo nomVariable Donde tipo es el tipo de la variable local y puede ser uno de los tipos predefinidos (char, byte, short, int, long, float o double) o una clase.nomVariable es el nombre de la variable local.

Las sentencias pueden ser sentencias de expresión o simple, compuestas o bloques y de control.

Ejemplo:

public class Clase {

private int enteroPrivado;

public Clase() { // constructor por defecto

enteroPrivado = 0;

}

Page 5: Contructores en java(grupo 8)

public Clase(int entero) { // constructor personalizado

enteroPrivado = entero;

}

}

LLAMADA AL CONSTRUCTOR

nombreClase objeto = new nombreClase(<lista parametros >);

El constructor se invoca automáticamente cuando new crea un objeto de esa clase.

objeto es una variable de referencia.

La instancia (new) reserva el lugar de almacenamiento e invoca al constructor.

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

Antes de ser instanciada con new no se consume memoria, simplemente es una declaración de tipo.

Variable de Referencia.. una variable de referencia es usada para acceder al lugar en memoria donde se almacena un objeto. Array, Collection y String, son variables de referencia.

Ejemplo:

Clase elObjeto;

elObjeto = new Clase(); // llamada al constructor por medio de la variable de referencia elObjeto

O en una sola línea:

Clase elObjeto = new Clase();

Clase elObjeto = new Clase(5);

CARACTERÍSTICAS PRINCIPALES DE UN CONSTRUCTOR

Page 6: Contructores en java(grupo 8)

En Java, los objetos son construidos. Cada vez que “creamos” un nuevo objeto, al menos un constructor es invocado.

Se garantiza la inicialización de cada objeto (sus atributos) con un constructor

Java invoca al constructor al crear el objeto.Los Constructores no tienen valor de retorno (ni siquiera void). Esto se debe a que el tipo específico que debe devolver un constructor de clase es el propio tipo de la clase. Su nombre es el mismo que el de la clase. Su argumento implícito es el objeto que se está creando.Se puede definir cero, uno o más constructores para una clase. Si no se define un constructor, el compilador crea uno por ausencia, el cual no tiene parámetros llamado constructor por defecto.Pueden usarse cualquier modificador de acceso.Al igual que los demás métodos de una clase, los constructores pueden tener también los modificadores de acceso public, prívate, protected. Si un constructor es prívate, ninguna otra clase puede crear un objeto de esa clase. En este caso, puede haber métodos public y static (factory methods) que llamen al constructor y devuelvan un objeto de esa clase.Se llama Constructor por defecto al constructor que no tiene argumentos. El programador debe proporcionar en el código valores iniciales adecuados para todas las variables miembro.Una clase tiene varios constructores, que se diferencia por el tipo y el número de sus argumentos (son un ejemplo típico de métodos sobrecargados)Si ya tenemos un constructor con argumentos, no se generará uno sin argumentos automáticamente.Cada constructor tiene, como primera sentencia, una llamada a un constructor sobrecargado (this) o a un constructor de la superclase (super), aunque esta línea puede ser agregada automáticamente por el compilador.Un constructor de una clase puede llamar a otro constructor previamente definido en la misma clase por medio de la palabra this. En este contexto, la palabra this sólo puede aparecer en la primera sentencia de un constructor.El constructor de una sub-clase puede llamar al constructor de su súper-clase por medio de la palabra super, seguida de los argumentos apropiados entre paréntesis. De esta forma, un constructor sólo tiene que inicializar por si mismo las variables no heredadas.

Page 7: Contructores en java(grupo 8)

REFERENCIA THIS

Si un parámetro tiene el mismo identificador (nombre) que una variable de instancia se usa la palabra clave “this” para identificar cual es la variable de instancia:

Los métodos de instancia reciben el argumento this implícitamente se refiere al mismo objeto.

• Referencia al objeto actual.• Permite invocar métodos del objeto actual.• Permite referenciar atributos del objeto actual• Permite devolver una referencia al objeto actual• Permite invocaciones entre constructores • Al acceder a variables de instancia de una clase, la palabra clave this

hace referencia a los miembros de la propia clase

public class Pelicula { private String titulo; public void setTitulo(String titulo) { this.titulo = titulo;

} }

Se puede compartir código entre constructores usando la referencia this. Un constructor invoca a otro pasándole los argumentos que requiere.

public class Pelicula {

private String titulo; private String tipo;

public Pelicula() { this("Pelicula sin definir"); } public Pelicula (String titulo) { this.titulo = titulo; }

public String getTitulo() {

Page 8: Contructores en java(grupo 8)

return titulo; } }

TestThis.java public class TestThis {

public static void main (String[] args) { Pelicula pelicula1 = new Pelicula(); Pelicula pelicula2 = new Pelicula("Todo sobre mi madre"); System.out.println(pelicula1.getTitulo()); System.out.println(pelicula2.getTitulo()); } }

REFERENCIA SUPER

Hace referencia a la Herencia de clases. La nueva clase hereda de la primera todos los métodos y los atributos, con la posibilidad de definir unos atributos y unos métodos nuevos o de volver a definir otros.

Se usa para invocar constructores de la clase padre Debe ser la primera sentencia del constructor de la clase hijo Esta referencia también se usa para invocar cualquier método del padre. Si la superclase no tiene un constructor sin argumentos, se deberás definir

un constructor en la subclase dado que necesitarás un lugar desde donde llamar a super con los argumentos necesarios. Ejemplo

class Animal {Animal(String name) { }}class Horse extends Animal {Horse() {super(); // error}}

Page 9: Contructores en java(grupo 8)

super() llama al constructor de la clase de la que se hereda (extends). Recuerda que todas las clases heredan en última instancia a la clase Object.

public class Item { protected float precio = 0; Item (float precio) { this.precio = precio; } }

public class Pelicula extends Item { private String titulo = ""; Pelicula (float precio, String titulo) { super(precio); this.titulo = titulo; } }

Una subclase no hereda ningún constructor de la superclase, debe declararse explícitamente. Solo en caso no se declare explícitamente, se ejecutaran los constructores por defecto de las superclases y finalmente de la subclase.

Pelicula pelicula = new Pelicula (); // Inicia variables de la clase Item. Constructor por defecto. // Inicia variables de la clase Pelicula. Constructor por defecto.

GARBAGE COLLECTOR

Page 10: Contructores en java(grupo 8)

Se refiere a la limpieza de instancias (Objetos) las cuales han dejado de ser utilizadas en un programa Java. Este proceso llevado a cabo directamente por el JVM ("Java Virtual Machine") permite liberar recursos, en su mayoría de memoria ("RAM") para ser reutilizados por el sistema, sin embargo, este proceso trae consigo dos preguntas :

• Java podría ser el lenguaje más utilizados que depende de la recolección de basura .

• Los beneficios de Garbage Collector son indiscutibles. • El concepto de Garbage Collector fue inventado por John McCarthy en

1959. • El programador no tiene que invocar a una subrutina para liberar memoria.

Que instancias/objetos son elegidos y liberados por el proceso de "Garbage Collection" ?. Toda instancia/referencia que sea asignada un valor de null es elegible para "Garbage Collection", si la instancia/referencia no tiene un valor de null ésta no es elegible para "Garbage Collection". Aunque la instancia/referencia sea asignada con un valor de null ésta no será liberada ("Garbage Collected") inmediatamente, sino hasta que el proceso de "Garbage Collection" sea iniciado.

Quien invoca el proceso de "Garbage Collection" ? : El JVM ("Java Virtual Machine") se hace cargo de iniciar el proceso de "Garbage Collection" únicamente cuando éste (según sus algoritmos internos) determine que su memoria esta en proceso de agotamiento, es hasta entonces que es liberada la memoria de las instancias/referencias que se han declarado como elegibles para "Garbage Collection".

Cuando se invoca el recolector de basura, recorre la lista de espacios reservados observando el contador de referencias de cada espacio. Si un contador ha llegado a cero significa que ese espacio de memoria ya no se usa y, por tanto, puede ser liberado.

BIBLIOGRAFIA

Page 11: Contructores en java(grupo 8)

COMO PROGRAMAR JAVA, Deitel-Deitel, Quinta EdiciónAPRENDA JAVA COMO SI ESTUBIERA EN PRIMERO, Tencnum

http://slideshared.nethttp://javabasico.osmosislatina.com/curso/progbasico2/constructores.htmhttp://es.wikipedia.org/wiki/Constructor_%28inform%C3%A1tica%29http://www.mailxmail.com/curso-java/definicion-constructores-clase-1http://www.mitecnologico.com/Main/ElConstructorhttp://toolboxnet.blogspot.com/2010/03/la-referencia-super-en-java-050103.htmlhttp://javabasico.osmosislatina.com/curso/threadsgc.htmhttp://javabasico.osmosislatina.com/curso/progbasico2/constructores.htmhttp://www.arrakis.es/~abelp/ApuntesJava/ClasesII.htm