You are on page 1of 7

Taller Docente: Ing. Orlando Barcia MSc. Actividad Taller: Clases y objetos avanzados.

Uso de static, this, Metodologa: constructivista y reflexin final Productos entregables: contestacin de preguntas, ejercicios

1 Uso de miembros static (variables, mtodos), destructor finalize


1.1 Definiciones.
Miembros de clase static, campo static o variable de clase. A diferencia de las variables de instancia (objeto), una variable static representa informacin para toda la clase, por lo cual todos los objetos comparten el mismo dato. Una variable static no es variable de instancia (requiere un objeto para utilizarla). La variable static tiene mbito o alcance a nivel de clase. Un miembro static existe as no hayan objetos. La variable static debe ser utilizada cuando todos los objetos tengan que utilizar el mismo dato de esa variable. Adicional a los mtodos de instancia, tambin existen mtodos static. Para acceder a un mtodo static la forma es Clase.metodo( ). Esta forma se debe utilizar cuando no hay objetos, aunque un mtodo static si puede ser accedido desde un objeto con la forma objeto.metodo( ) Interrogante: Un mtodo normal (de instancia) puede acceder a variables normales y static, pero un mtodo static debe utilizar solo variables static?

1.2 Actividad. Requerimiento


Sea un Empleado con atributos primer Nombre, primer Apellido y contador que contar cada empleado. Realice una aplicacin que al inicializar cada empleado muestre los datos ingresados y el nmero de empleado creado. En el package: ups.prog2 . Crear la clase solicitada con atributos, mtodos. La variable contador debe ser static. Crear dos mtodos de instancia getter para obtener el primer Nombre y apellido. Adems crear un mtodo static getCuenta para obtener los datos de la cuenta Posteriormente crear una clase PruebaE que realice: Verificar cuantos empleados hay antes de crearlos Crear dos objetos de la clase. En cada objeto verificar cuantos empleados hay. Confirme el nmero de empleados con el mtodo static de clase

1.3 Actividad. Codificacin de la clase Empleado.


Digite el cdigo a continuacin, omita los comentarios 5 public class Empleado 6{ 7 private String primerNombre; 8 private String apellidoPaterno; 9 private static int cuenta = 0; // nmero de objetos en memoria 10 11 // inicializa empleado, suma 1 a la variable static cuenta e 12 // imprime objeto String que indica que se llam al constructor 13 public Empleado( String nombre, String apellido ) 14 { 15 primerNombre = nombre; 16 apellidoPaterno = apellido; 17 18 cuenta++; // incrementa la variable static cuenta de empleados 19 System.out.printf( "Constructor de Empleado: %s %s; cuenta = %d\n", 20 primerNombre, apellidoPaterno, cuenta ); 21 } // fin de constructor de Empleado 22 23 // resta 1 a la variable static cuenta cuando el recolector 24 // de basura llama a finalize para borrar el objeto; 25 // confirma que se llam a finalize 26 protected void finalize() 27 { 28 cuenta--; // decrementa la variable static cuenta de empleados 29 System.out.printf( "Finalizador de Empleado: %s %s; cuenta = %d\n", 30 primerNombre, apellidoPaterno, cuenta ); 31 } // fin del mtodo finalize 32 33 // obtiene el primer nombre 34 public String obtenerPrimerNombre() 35 { 36 return primerNombre; 37 } // fin del mtodo obtenerPrimerNombre 38 39 // obtiene el apellido paterno 40 public String obtenerApellidoPaterno() 41 { 42 return apellidoPaterno; 43 } // fin del mtodo obtenerApellidoPaterno 44 45 // mtodo static para obtener el valor de la variable static cuenta 46 public static int obtenerCuenta() 47 { 48 return cuenta; 49 } // fin del mtodo obtenerCuenta

50 } // fin de la clase Empleado

1.4 Actividad. Contestar inquietud inicial


Un mtodo normal (de instancia) puede acceder a variables normales (de instancia) y static (de clase), pero un mtodo static debe utilizar solo variables static (de clase)? Aadir la variable de clase (static) en uno de los mtodos de instancia. Indique la experiencia Aadir una variable de instancia en el mtodo de clase (static). Indique la experiencia. Conclusin: .

1.5 Actividad. Codificacin de la clase PruebaE


Digite el cdigo a continuacin, omita los comentarios 4 public class PruebaEmpleado 5{ 6 public static void main( String args[] ) 7{ 8 // muestra que la cuenta es 0 antes de crear Empleados 9 System.out.printf( "Empleados antes de instanciar: %d\n", 10 Empleado.obtenerCuenta() ); 11 12 // crea dos Empleados; la cuenta debe ser 2 13 Empleado e1 = new Empleado( "Susan", "Baker" ); 14 Empleado e2 = new Empleado( "Bob", "Blue" ); 15 16 // muestra que la cuenta es 2 despus de crear dos Empleados 17 System.out.println( "\nEmpleados despues de instanciar: " ); 18 System.out.printf( "mediante e1.obtenerCuenta(): %d\n", e1.obtenerCuenta() ); 19 System.out.printf( "mediante e2.obtenerCuenta(): %d\n", e2.obtenerCuenta() ); 20 System.out.printf( "mediante Empleado.obtenerCuenta(): %d\n", 21 Empleado.obtenerCuenta() ); 22 23 // obtiene los nombres de los Empleados 24 System.out.printf( "\nEmpleado 1: %s %s\nEmpleado 2: %s %s\n\n", 25 e1.obtenerPrimerNombre() , e1.obtenerApellidoPaterno(), 26 e2.obtenerPrimerNombre() , e2.obtenerApellidoPaterno() ); 27 28 // en este ejemplo, slo hay una referencia a cada Empleado, 29 // por lo que las siguientes dos instrucciones hacen que la JVM 30 // marque a cada objeto Empleado para la recoleccin de basura 31 e1 = null; 32 e2 = null; 33 34 System.gc(); // pide que la recoleccin de basura se realice ahora 35

36 // muestra la cuenta de Empleados despus de llamar al recolector de basura; 37 // la cuenta a mostrar puede ser 0, 1 o 2 dependiendo de si el recolector de 38 // basura se ejecuta de inmediato, y del nmero de objetos Empleado recolectados 39 System.out.printf( "\nEmpleados despues de System.gc(): %d\n", 40 Empleado.obtenerCuenta() ); 41 } // fin de main 42 } // fin de la clase PruebaEmpleado

1.6 Actividad. Preguntas de reflexin


Qu es un miembro de instancia?Atributos y mtodos? Qu es un miembro de clase?Atributos y mtodos? Indique diferencias entre miembros de instancia y clase. Cundo utilizara un miembro static?

2 Uso de this implcito y explcito. Variables de instancia final


2.1 Definiciones
IMPORTANTE. El parmetro OCULTA al atributo. Cuando no hay parmetros con igual nombre del atributo (variable de instancia) en su mbito o alcance (clase, constructor o mtodo) se refiere directamente al atributo, por lo cual se omite this. (es implcito) Cuando hay parmetros con igual nombre del atributo (variable de instancia) en su mbito o alcance (clase, constructor o mtodo) se refiere al parmetro, por lo cual este OCULTA al atributo. Se debe utilizar explcitamente this. SUGERENCIA Establezca nombres de parmetros diferentes que los atributos

2.2 Actividad. Requerimiento


Crear una clase Cuadrado, con atributo lado. Utilizar un constructor por defecto de lado 1 y un constructor sobrecargado con el mismo nombre de parmetro que el atributo (variable de instancia). Crear un mtodo setter con el mismo nombre de parmetro que atributo. Crear un mtodo getter y un mtodo que calcule solo el permetro del Cuadrado. Utilice referencia this para diferenciar los nombres.

2.3 Actividad. Codificacin. Digite lo siguiente


public class Cuadrado { private int lado; //creacin del atributo //constructor por defecto

public Cuadrado( ) { lado=1 ; // uso implcito de this. No se requiere digitarlo. this.lado = 1 ; }// fin constructor por defecto // constructor sobrecargado public Cuadrado ( int lado ) { this.lado = lado ; // uso de this explcito. // Si no lo ubico sera lado = lado. Esto es un error. Cul sera el atributo? // Al utilizar this.lado , se est refiriendo al atributo // IMPORTANTE. El parmetro OCULTA al atributo } public void setL( int lado) { this.lado = lado ; //uso de this explcito } public int getL( ) { return lado ; } public int getPerimetro( ) { return lado*4 ; } } // fin clase

2.4 Actividad. Codificacin Clase Principal Digite lo siguiente


public class PrincipalS { public static void main( String[ ] args) { Cuadrado c1 = new Cuadrado(3); System.out.println( El cuadrado su lado es + c1.getL ( ) ) ; System.out.println( El cuadrado su permetro es + c1.getPerimetro ( ) ) ; c1.setL( 8) ; System.out.println( F2 : El cuadrado su lado es + c1.getL ( ) ) ; System.out.println( F2 :El cuadrado su permetro es + c1.getPerimetro ( ) ) ;

} }

2.5 Actividad. Preguntas de reflexin


Qu debera hacer cuando hay parmetros con igual nombre de atributos y SI puede cambiar el identificador de uno de ellos? Qu debera hacer cuando hay parmetros con igual nombre de atributos y NO puede cambiar el identificador de uno de ellos? Si un atributo p no est ocultado por un parmetro en su mbito. Cuntas y cuales formas existen para acceder al atributo p? Si un atributo p si est ocultado por un parmetro en su mbito. Cuntas y cuales formas existen para acceder al atributo p?

3 CONSTANTES. Variables de instancia final


3.1 Definicin
Las variables por definicin pueden variar. Si utiliza la palabra clave final , est especificando que no vare o que no pueda modificarse. Desde el punto de vista matemtico es una CONSTANTE. Todo intento por modificarla sera un error. Se puede ubicar el valor inicial al momento de declararse (UNA SOLA VEZ) o en los constructores. La forma de codificacin es: acceso final tipo NOMBRE ; El identificador debe ser todo en mayscula en base a estndares de codificacin. Ejemplo: private final int AUMENTO;

3.2 Requerimiento.
Crear un constante con valor fijo de 2, que cada vez que se cree el objeto tenga 2 unidades ms del valor inicial.

3.3 Codificacin.
Al cdigo del ejercicio anterior. Aada lo siguiente public class Cuadrado { private int lado; //creacin del atributo private final int AUMENTO = 2; //constructor por defecto

public Cuadrado( ) { lado=1+ AUMENTO ; // uso implcito de this. } // constructor sobrecargado public Cuadrado ( int lado ) { this.lado = lado + AUMENTO; // uso de this explcito. } public void setL( int lado) { this.lado = lado ; //uso de this explcito } public int getL( ) { return lado ; } public int getPerimetro( ) { return lado*4 ; } } // fin clase

3.4 Ejecucin.
Ejecute la clase PrincipalS , no requiere modificar Indique los cambios .

4 Reflexione y concluya las actividades realizadas.


..