00 01 actividad clases objetos static uso this

10
Taller Docente: Ing. Orlando Barcia MSc. Actividad Taller: Clases y objetos avanzados. Uso de static, this, Metodología: constructivista y reflexión final Productos entregables: contestación de preguntas, ejercicios 1 Uso de miembros static (variables, métodos), 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 información 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 métodos de instancia, también existen métodos static. Para acceder a un método static la forma es Clase.metodo( ). Esta forma se debe utilizar cuando no hay objetos, aunque un método static si puede ser accedido desde un objeto con la forma objeto.metodo( ) Interrogante: ¿Un método normal (de instancia) puede acceder a variables normales y static, pero un método 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 aplicación que al

Upload: obarcia

Post on 26-Nov-2015

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 00 01 Actividad Clases Objetos Static Uso This

Taller

Docente: Ing. Orlando Barcia MSc.

Actividad Taller: Clases y objetos avanzados. Uso de static, this,

Metodología: constructivista y reflexión final

Productos entregables: contestación de preguntas, ejercicios

1 Uso de miembros static (variables, métodos), 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 información 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 métodos de instancia, también existen métodos static. Para acceder a un método static la forma es Clase.metodo( ). Esta forma se debe utilizar cuando no hay objetos, aunque un método static si puede ser accedido desde un objeto con la forma objeto.metodo( )

Interrogante: ¿Un método normal (de instancia) puede acceder a variables normales y static, pero un método static debe utilizar solo variables static?

1.2 Actividad. RequerimientoSea un Empleado con atributos primer Nombre, primer Apellido y contador que contará cada empleado. Realice una aplicación que al inicializar cada empleado muestre los datos ingresados y el número de empleado creado.

En el package: ups.prog2 . Crear la clase solicitada con atributos, métodos. La variable contador debe ser static. Crear dos métodos de instancia getter para obtener el primer Nombre y apellido. Además crear un método 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 número de empleados con el método static de clase

Page 2: 00 01 Actividad Clases Objetos Static Uso This

1.3 Actividad. Codificación de la clase Empleado.

Digite el código a continuación, omita los comentarios

5 public class Empleado6 {7 private String primerNombre;8 private String apellidoPaterno;9 private static int cuenta = 0; // número de objetos en memoria1011 // inicializa empleado, suma 1 a la variable static cuenta e12 // imprime objeto String que indica que se llamó al constructor13 public Empleado( String nombre, String apellido )14 {15 primerNombre = nombre;16 apellidoPaterno = apellido;1718 cuenta++; // incrementa la variable static cuenta de empleados19 System.out.printf( "Constructor de Empleado: %s %s; cuenta = %d\n",20 primerNombre, apellidoPaterno, cuenta );21 } // fin de constructor de Empleado2223 // resta 1 a la variable static cuenta cuando el recolector24 // de basura llama a finalize para borrar el objeto;25 // confirma que se llamó a finalize26 protected void finalize()27 {28 cuenta--; // decrementa la variable static cuenta de empleados29 System.out.printf( "Finalizador de Empleado: %s %s; cuenta = %d\n",30 primerNombre, apellidoPaterno, cuenta );31 } // fin del método finalize3233 // obtiene el primer nombre34 public String obtenerPrimerNombre()35 {36 return primerNombre;37 } // fin del método obtenerPrimerNombre3839 // obtiene el apellido paterno40 public String obtenerApellidoPaterno()41 {42 return apellidoPaterno;43 } // fin del método obtenerApellidoPaterno4445 // método static para obtener el valor de la variable static cuenta46 public static int obtenerCuenta()47 {48 return cuenta;

Page 3: 00 01 Actividad Clases Objetos Static Uso This

49 } // fin del método obtenerCuenta50 } // fin de la clase Empleado

1.4 Actividad. Contestar inquietud inicial¿Un método normal (de instancia) puede acceder a variables normales (de instancia) y static (de clase), pero un método static debe utilizar solo variables static (de clase)?

Añadir la variable de clase (static) en uno de los métodos de instancia. Indique la experiencia

Añadir una variable de instancia en el método de clase (static). Indique la experiencia. Conclusión: ……………………………….

1.5 Actividad. Codificación de la clase PruebaE

Digite el código a continuación, omita los comentarios

4 public class PruebaEmpleado5 {6 public static void main( String args[] )7 {8 // muestra que la cuenta es 0 antes de crear Empleados9 System.out.printf( "Empleados antes de instanciar: %d\n",10 Empleado.obtenerCuenta() );1112 // crea dos Empleados; la cuenta debe ser 213 Empleado e1 = new Empleado( "Susan", "Baker" );14 Empleado e2 = new Empleado( "Bob", "Blue" );1516 // muestra que la cuenta es 2 después de crear dos Empleados17 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() );2223 // obtiene los nombres de los Empleados24 System.out.printf( "\nEmpleado 1: %s %s\nEmpleado 2: %s %s\n\n",25 e1.obtenerPrimerNombre() , e1.obtenerApellidoPaterno(),26 e2.obtenerPrimerNombre() , e2.obtenerApellidoPaterno() );2728 // en este ejemplo, sólo hay una referencia a cada Empleado,29 // por lo que las siguientes dos instrucciones hacen que la JVM30 // marque a cada objeto Empleado para la recolección de basura31 e1 = null;32 e2 = null;33

Page 4: 00 01 Actividad Clases Objetos Static Uso This

34 System.gc(); // pide que la recolección de basura se realice ahora3536 // muestra la cuenta de Empleados después de llamar al recolector de basura;37 // la cuenta a mostrar puede ser 0, 1 o 2 dependiendo de si el recolector de38 // basura se ejecuta de inmediato, y del número de objetos Empleado recolectados39 System.out.printf( "\nEmpleados despues de System.gc(): %d\n",40 Empleado.obtenerCuenta() );41 } // fin de main42 } // fin de la clase PruebaEmpleado

1.6 Actividad. Preguntas de reflexión ¿Qué es un miembro de instancia?¿Atributos y métodos? ¿Qué es un miembro de clase?¿Atributos y métodos? Indique diferencias entre miembros de instancia y clase. ¿Cuándo utilizaría un miembro static?

2 Uso de this implícito y explícito. Variables de instancia final

2.1 DefinicionesIMPORTANTE. El parámetro OCULTA al atributo.Cuando no hay parámetros con igual nombre del atributo (variable de instancia) en su ámbito o alcance (clase, constructor o método) se refiere directamente al atributo, por lo cual se omite this. (es implícito)Cuando hay parámetros con igual nombre del atributo (variable de instancia) en su ámbito o alcance (clase, constructor o método) se refiere al parámetro, por lo cual este OCULTA al atributo. Se debe utilizar explícitamente this.SUGERENCIA Establezca nombres de parámetros diferentes que los atributos

2.2 Actividad. RequerimientoCrear una clase Cuadrado, con atributo lado. Utilizar un constructor por defecto de lado 1 y un constructor sobrecargado con el mismo nombre de parámetro que el atributo (variable de instancia). Crear un método setter con el mismo nombre de parámetro que atributo. Crear un método getter y un método que calcule solo el perímetro del Cuadrado. Utilice referencia this para diferenciar los nombres.

2.3 Actividad. Codificación. Digite lo siguientepublic class Cuadrado{

private int lado; //creación del atributo

Page 5: 00 01 Actividad Clases Objetos Static Uso This

//constructor por defectopublic Cuadrado( ) { lado=1 ; // uso implícito de this. No se requiere digitarlo. this.lado = 1 ;

}// fin constructor por defecto

// constructor sobrecargadopublic Cuadrado ( int lado ){ this.lado = lado ; // uso de this explícito. // Si no lo ubico sería lado = lado. Esto es un error. ¿Cuál sería el atributo?// Al utilizar this.lado , se está refiriendo al atributo// IMPORTANTE. El parámetro OCULTA al atributo}

public void setL( int lado){ this.lado = lado ; //uso de this explícito}

public int getL( ){ return lado ;}

public int getPerimetro( ){ return lado*4 ;}

} // fin clase

2.4 Actividad. Codificación Clase Principal Digite lo siguientepublic 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 perímetro es “ + c1.getPerimetro ( ) ) ;

c1.setL( 8) ;System.out.println( “F2 : El cuadrado su lado es “ + c1.getL ( ) ) ;

Page 6: 00 01 Actividad Clases Objetos Static Uso This

System.out.println( “F2 :El cuadrado su perímetro es “ + c1.getPerimetro ( ) ) ;

}

}

2.5 Actividad. Preguntas de reflexión

¿Qué debería hacer cuando hay parámetros con igual nombre de atributos y SI puede cambiar el identificador de uno de ellos?

¿Qué debería hacer cuando hay parámetros con igual nombre de atributos y NO puede cambiar el identificador de uno de ellos?

Si un atributo p no está ocultado por un parámetro en su ámbito. ¿Cuántas y cuales formas existen para acceder al atributo p?

Si un atributo p si está ocultado por un parámetro en su ámbito. ¿Cuántas y cuales formas existen para acceder al atributo p?

3 CONSTANTES. Variables de instancia final

3.1 DefiniciónLas variables por definición pueden variar. Si utiliza la palabra clave final , está especificando que no varíe o que no pueda modificarse. Desde el punto de vista matemático es una CONSTANTE. Todo intento por modificarla sería un error. Se puede ubicar el valor inicial al momento de declararse (UNA SOLA VEZ) o en los constructores. La forma de codificación es:

acceso final tipo NOMBRE ;El identificador debe ser todo en mayúscula en base a estándares de codificación.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 más del valor inicial.

3.3 Codificación. Al código del ejercicio anterior. Añada lo siguiente

public class Cuadrado{

private int lado; //creación del atributo

Page 7: 00 01 Actividad Clases Objetos Static Uso This

private final int AUMENTO = 2;//constructor por defectopublic Cuadrado( ) { lado=1+ AUMENTO ; // uso implícito de this. }

// constructor sobrecargadopublic Cuadrado ( int lado ){ this.lado = lado + AUMENTO; // uso de this explícito. }

public void setL( int lado){ this.lado = lado ; //uso de this explícito}

public int getL( ){ return lado ;}

public int getPerimetro( ){ return lado*4 ;}

} // fin clase

3.4 Ejecución. Ejecute la clase PrincipalS , no requiere modificar Indique los cambios …………………………….

4 Reflexione y concluya las actividades realizadas.…………………………………………………………………………………..