Upload
alvaro-rivera-miranda
View
220
Download
0
Embed Size (px)
Citation preview
8/6/2019 Talleres POO en Java
1/9
Fundacin Universitaria Tecnolgico Comfenalco Tecnologa en Sistemas de Informacin
Taller de programacin I Ing. Juan Jos Puello Fuentes
1. Restriccin de Acceso en la definicin de clases
Cuando se define una clase se forma una capsula alrededor de sus miembros (atributos y mtodos). A travs
de la instanciacin de la clase se crean los objetos, cada objeto encapsula todos los miembros de la clase y
solo se pueden acceder por medio de una variable de referencia. Esta variable solo puede ver los miembros
que tienen accesibilidad publica los dems son invisibles y no se pueden acceder.
La accesibilidad se de los miembros se especifica en el momento de definir la clase y existen varios tipos:friendly: amistoso (por omisin), private: privado, protected: protegido (herencia) y public: pblico.
public class reloj{ Capsula formada por classpublic int hora;public int minuto;public int segundo;
}
La forma en que est definida la clase reloj crea una capsula que une los miembros bajo cualquier instancia
pero permite que todos sean visibles y accesibles directamente por la variable de referencia.
Reloj r = new Reloj( );
r.hora = 27;r.minuto = 77;r.segundo = - 7;
El control de accesibilidad a los miembros tiene como propsito garantizar la integridad de los datos (valor de
los atributos) y el comportamiento (mtodos) adecuado del objeto. En el cdigo anterior se observa que al
manipular directamente los atributos no hay garanta de que los valores sean correctos por lo tanto ser un
objeto con informacin errnea.
Para que el control de accesibilidad sea garantizado tienen que hacerse algunas restricciones a los miembros,principalmente a los atributos y dejar en manos de los mtodos la manipulacin de estos. Observemos elcambio hecho a la clase Reloj.
public class Reloj{private int hora;private int minuto;private int segundo;private boolean horaValida ( int h){
if( h >= 0 && h
8/6/2019 Talleres POO en Java
2/9
Fundacin Universitaria Tecnolgico Comfenalco Tecnologa en Sistemas de Informacin
Taller de programacin I Ing. Juan Jos Puello Fuentes
Nota: Si los mtodos fueran protegidos o privados tampoco se podran acceder, estos casos se presentan
cuando los mtodos son para heredar o auxiliares para otros mtodos internos de la clase.
Reloj r = new Reloj( );
Objeto
Referencia
r.hora = 12; =>Error de compilacin, miembro no accesible.r.setHora( 27 ); => No hay error de compilacin, pero en ejecucin el mtodo no acepta el valor.
El mtodo setHora verifica que el valor sea valido antes de asignar al atributo hora, en el caso contrario solo
muestra un mensaje que alerta al usuario del error.
Nota: El control de accesibilidad solo es externo (entre clases y paquetes), dentro de la misma clase no hay
restricciones.
Laboratorio (Punto 1)
a) Completar la clase Reloj con los miembros que hagan falta para que sea funcional. Observe que hay un mtodo
privado auxiliar para el mtodo setHora( ) que ayuda a comprobar la validez de la hora, realice algo similar para el
resto de mtodos incluyendo constructores. Adems complete y agregue los dos mtodos a continuacin para
mostrar la hora completa cuando sea requerida. El primero ser privado y mostrar la hora en formato (12 horas am-
pm) y el segundo es pblico y recibir como parmetro (1) si se quiere mostrar formato (12 horas am-pm) y cualquier
otro valor si se quiere mostrar formato (24 horas).
private void mostrarHoraFormato12( ){String hr;if( hora == 12)
hr = hora + : + minuto + : + segundo + m ;else
if( hora > 12)hr = (hora - 12) + : + minuto + : + segundo + p.m ;
elsehr = hora + : + minuto + : + segundo + a.m ;
System.out.println( hr );}
public void mostrarHora(int formato){if (formato == 1)// Colocar aqu instruccin faltante para que funcione
elseSytem.out.println(hora + : + minuto + : + segundo)
}
prvate int hora;
private int minuto;private int segundo;
private boolean horaValida(int h)public void setHora(int hora)
r
8/6/2019 Talleres POO en Java
3/9
Fundacin Universitaria Tecnolgico Comfenalco Tecnologa en Sistemas de Informacin
Taller de programacin I Ing. Juan Jos Puello Fuentes
b) Con la clase Reloj terminada completamente, realice la siguientes pruebas en el programa Principal
public class Principal {
public static void main(String [ ] arg ) {
Reloj r = new Reloj();
xxxxxxxxxxxxxxxxxx;
}
}
Remplace las xxxxxxxxxxxxxxxxxx por las instrucciones en el cuadro y escriba los resultados de compilacin y/o
ejecucin, sean errores o datos de salida, en caso de error explique por qu?
Instrucciones Resultados Explicacin
r.hora = 7;
r.minuto = 37;
r.segundo = 33;
System.out.println(r.hora:r.minuto:r.segundo);
Int h = 27;
If(r.horaValida(h)){
r.setHora(h);
}System.out.println(r.getHora():r.getMinuto():r.getSegundo());
r.setHora(27);
r.setMinuto(61);
r.setSegundo(60);
System.out.println(r.getHora():r.getMinuto():r.getSegundo());
r.setHora(19);
r.setMinuto(5);
r.setSegundo(17);
System.out.println(r.mostrarHoraFormato12());
r.setHora(19);
r.setMinuto(5);
r.setSegundo(17);
System.out.println(r.mostrarHora(1));
System.out.println(r.mostrarHora(2));
8/6/2019 Talleres POO en Java
4/9
Fundacin Universitaria Tecnolgico Comfenalco Tecnologa en Sistemas de Informacin
Taller de programacin I Ing. Juan Jos Puello Fuentes
2. Principios bsicos de herencia
La programacin orientada a objetos toma de la realidad el concepto de herencia y lo aplica su estructura de clases. ElAPI
oApplication Programming Interface de Java contiene un nmero muy importante de clases que forman parte del propio
lenguaje y que estn optimizadas a travs de una adecuada relacin de herencia.
El objetivo de este tema aprender y aprovechar la relacin de herencia en la estructura de clases del propio lenguaje java y
las clases creadas por el usuario programador.
La herencia permite que los miembros (atributos y mtodos) de una clase (madre, base o superClase) sean transferidos a
otras clases (hijas, derivadas o subClases).
En Java siempre que se crea una clase hay un proceso de herencia implcito a partir de la clase Object, esto quiere decir
que aunque no lo especifiquemos, los miembros de la clase Object pasan a hacer parte de las clases que nosotros
creamos. Tenga en cuenta que esto hace a la clase object la madre de todas las clases tanto de Java como de las que
nosotros creamos.
Observe que la clase Relojtiene los miembros de Object
Mas los propios.
Object
Fraccionario Estudiante Fecha Reloj
Object
Object clone()
boolean equals(Object obj)
voidfinalize()
Class getClass()
int hashCode()
voidnotify()
voidnotifyAll()
String toString()voidwait()
Madre
Hija -1 Hija -2 Hija -3 Hija -n
Object
String Date File Exception
protected Object clone()
boolean equals(Objectobj)
protected voidfinalize()
Class getClass()
int hashCode()
voidnotify()
voidnotifyAll()
String toString()
voidwait()
Relo
private int hora
private int minuto
private int segundo
private boolean horaValida(int h)
public void setHora(int hora)
private void mostrarHoraFormato12()
public void mostrarHora(int formato)
http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23clone()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23equals(java.lang.Object)http://d/Software%20Libre/Java/docs/api/java/lang/Object.htmlhttp://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23finalize()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23getClass()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23hashCode()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notify()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notifyAll()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23wait()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23clone()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23clone()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23equals(java.lang.Object)http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23equals(java.lang.Object)http://d/Software%20Libre/Java/docs/api/java/lang/Object.htmlhttp://d/Software%20Libre/Java/docs/api/java/lang/Object.htmlhttp://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23finalize()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23finalize()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23getClass()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23getClass()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23hashCode()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23hashCode()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notify()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notify()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notifyAll()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notifyAll()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23wait()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23wait()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23wait()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notifyAll()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notify()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23hashCode()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23getClass()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23finalize()http://d/Software%20Libre/Java/docs/api/java/lang/Object.htmlhttp://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23equals(java.lang.Object)http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23clone()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23wait()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notifyAll()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notify()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23hashCode()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23getClass()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23finalize()http://d/Software%20Libre/Java/docs/api/java/lang/Object.htmlhttp://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23equals(java.lang.Object)http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23clone()8/6/2019 Talleres POO en Java
5/9
Fundacin Universitaria Tecnolgico Comfenalco Tecnologa en Sistemas de Informacin
Taller de programacin I Ing. Juan Jos Puello Fuentes
Si estudiamos los mtodos de Objectlos podramos utilizar en nuestros propios objetos, por ejemplo:
Reloj r = new Reloj(10,40,17);
System.out.println( r.toString()); => Muestra informacin relacionada con el objeto Reloj
El mtodo toString() no fue especificado al momento de definir la clase Reloj, pero se puede invocar por una variable de
referencia a un objeto Reloj porque la clasereloj hered todos los miembros de la clase Object.
Uno de los aspectos mas importantes que podemos manejar al tener claro la relacin de herencia entre las clases, son las
variables que pueden referenciar a diferentes clases de objetos. Esto solo puede suceder si hay una relacin de herencia
entre las diferentes clases que instancian estos objetos. En la relacin de herencia existe una estructura jerrquica
Una variable de clase superior puede referirse a objetos de clases inferiores, por ejemplo una variable de clase Persona
puede referenciar a objetos de clase Estudiante y Profesor. Esto se conoce como conversin implcita de referencias
porque solo se hace la asignacin sin ningn tipo de especificacin.
Persona p1 = new Estudiante(); => Una referencia de Persona guarda un Estudiante
Profesor pr = new Profesor();
Persona p2 = pr; => Una referencia de Persona guarda un Profesor
Mientras mas arriba este una clase en la estructura de jerarqua sus referencias pueden referenciar todos los objetos de
las clases inferiores, por lo que se deduce que una variable clase Objectpuede referenciar cualquier objeto.
Object ob = new Estudiante(); => Una referencia de Objectguarda un Estudiante
Para que son tiles estas referencias? para tener contenedores de objetos como los arreglos guardando objetos de
distintas clases. Una variable o vector de clase Objectpuede guardar cualquier variedad de objetos.
Object v = new Object[5];v[0] = new Estudiante();
v[1] = new Fecha();
v[2] = new Reloj();
Despus de haber guardados los objetos en el vector es necesario recuperarlos para hacer las respectivas operaciones. Por
ejemplo mostrar la hora en formato 12 del reloj que est referenciado por el ndice 2 de vector (v).
Object
Persona
Estudiante Profesor
DateReloj String
0
1
2
3
4
Reloj
hora
minuto
segund
Fecha
dia
mes
ao
Estudiante
codigo
nombre
programa
v
8/6/2019 Talleres POO en Java
6/9
Fundacin Universitaria Tecnolgico Comfenalco Tecnologa en Sistemas de Informacin
Taller de programacin I Ing. Juan Jos Puello Fuentes
V[2].mostrarHora(1); => Error en tiempo de ejecucin, el mtodo mostrarHora() no es reconocido
Esta instruccin debera mostrar la hora completa en formato 12 (a.m-p.m) pero no es as, recordemos que (v) es un
vector Objecty que cada posicin es una referencia Object, y las referencias de una clase solo reconocen los miembros
que pertenecen a su clase, por lo tanto las referencias Objectsolo reconocen los mtodos de su clase (equals, getClass,
toString, etc.) que ahora tambin hacen parte de el objeto reloj por herencia.
Lo que quiere decir, que lo nico que se puede hacer con esta referencia es: v[2].toString(); v[2].equals(v[1]); o cualquier
otro mtodo heredado de Object. Para quitar esta restriccin y tener acceso a las funciones especificas de Reloj es
necesario hacer una conversin explicita de Objecta Reloj.
Reloj r = v[2]; => (Error) A pesar de que en v[2] hay un Reloj la referencia (r) no lo acepta porque no se ha convertido
Reloj r = (Reloj) v[2]; => La direccin que tiene v[2] es convertida a (Reloj) y despus guardada en (r)Por ser (r) una variable Reloj puede reconocer todos los miembros de la clase incluyendo los de Object.
Siempre que una variable de una clase ubicada debajo en la estructura jerrquica de clases se le quiera asignar la direccin
que tiene una variable de clase mas alta se tiene que especificar entre parntesis a cual clase se refiere.
Objectob = new Estudiante(); => Aqu hay una conversin implcita pero la variable ob no es completamente funcional.
Persona p = (Persona) ob; => Aqu hay una conversin explicita de Objecta Persona, sigue siendo incompleta
Estudiante e = (Estudiante) p; => Aqu hay una conversin explicita de Persona a Estudiante pero pudo haber sido directa
de Object a Estudiante
Object
Persona
Estudiant
Profesor
DateRelo Strin
v
0
1
2
3
4
protected Object clone()
boolean equals(Objectobj)
protected voidfinalize()
Class getClass()
int hashCode()
voidnotify()
voidnotifyAll()
String toString()
voidwait()
Relo
private int hora
private int minutoprivate int segundo
private boolean horaValida(int h)
public void setHora(int hora)
private void mostrarHoraFormato12()
public void mostrarHora(int formato)
http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23clone()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23clone()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23equals(java.lang.Object)http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23equals(java.lang.Object)http://d/Software%20Libre/Java/docs/api/java/lang/Object.htmlhttp://d/Software%20Libre/Java/docs/api/java/lang/Object.htmlhttp://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23finalize()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23finalize()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23getClass()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23getClass()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23hashCode()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23hashCode()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notify()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notify()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notifyAll()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notifyAll()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23wait()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23wait()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23wait()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notifyAll()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notify()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23hashCode()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23getClass()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23finalize()http://d/Software%20Libre/Java/docs/api/java/lang/Object.htmlhttp://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23equals(java.lang.Object)http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23clone()8/6/2019 Talleres POO en Java
7/9
Fundacin Universitaria Tecnolgico Comfenalco Tecnologa en Sistemas de Informacin
Taller de programacin I Ing. Juan Jos Puello Fuentes
En el caso de la recuperacin de la direccin de un Reloj de la posicin (2) del vector Object (v) y del Estudiante en la
variable Object (ob), sabamos que objeto especficamente estaba guardado e hicimos las respectiva especificacin para la
conversin, pero cuando no sabemos que objeto est referenciado en cada posicin del vector (v) o en la variable (ob) es
necesario usar el operador instanceofpara asegurarnos que haremos una conversin correcta. Por ejemplo si queremos
mostrar todas las horas en formato 12 de los relojes guardados en el vector hacemos el siguiente cdigo:
Reloj r;
for(int i=0; i Verifica que lo que est en la posicin (i) del vector (v) es un objeto de clase Reloj
r = ( Reloj ) v[ i ]; => Despus de hecha la verificacin se realiza la correspondiente conversin
System.out.println(r.mostrarHora(1)); => Hecha la conversin (r) tiene complete dominio sobre los mtodos.
}
}
Nota: Las variables genricas comnmente Object son muy utilizadas en el paso de parmetros de las funciones. La
clausula extendses usada para herencia explicita como en el ejemplo siguiente pero este tema ser mejor tratado en el
siguiente curso (Taller de programacin II).
class Persona{ // Aqu no se especifica un extends pero implcitamente tiene extenedsObject
private String codigo;
private String nombre;
public String getCodigo(){return codigo;}
public String getNombre(){return nombre;}
public void setCodigo(String codigo){this.codigo=codigo;}
public void setNombre(String nombre){this.nombre=nombre;}
}
class Estudiante extends Persona{ //Aqu se espacifica un extends que adiciona los miembros de Persona a Estudiante.
private String programa;
public String getPrograma(){return programa;}
public void setPrograma(String programa){this.programa=programa;}
}
class Profesor extends Persona{ //Aqu se espacifica un extends que adiciona los miembros de Persona a Profesor.
private String asignatura;public String getAsignatura(){return asignatura;}
public void setAsignatura(String asignatura){this.asignatura=asignatura;}
}
Diagrama jerarqua de herencia para las clases anteriores
Ob ect
Persona
Estudiante Profesor
8/6/2019 Talleres POO en Java
8/9
Fundacin Universitaria Tecnolgico Comfenalco Tecnologa en Sistemas de Informacin
Taller de programacin I Ing. Juan Jos Puello Fuentes
Laboratorio (Punto 2)
a) De acuerdo al cdigo de las clases anteriores (Persona, Estudiante y profesor) dibuje grficos con todos sus miembros,
incluyendo los heredados.
b) Escriba una lista de los miembros que podran ser reconocidos por la variable que apunta al objeto en la grafica
siguiente.
c) Desarrollar un programa java con men que haga lo siguiente:
1. Guardar estudiante
2. Guardar profesor
3. Mostrar lista estudiantes
4. Mostrar lista profesores
5. Salir.
Especificaciones de diseo: Un solo Vector Objectpara guardar ambas clases de objetos, use el operador instanceof
para poder identificar la clase de objeto en la respectiva posicin del vector y hacer el casting para los listados.
Ejemplo: if ( v[ i ] instanceof Profesor ){
p = (Profesor) v [ i ];
System.out.println(p.getCodigo()+ +p.getNombre()+ +p.getAsignatura());
}
protected Object clone()
boolean equals(Object obj)
protected voidfinalize()
Class getClass()
int hashCode()
voidnotify()
voidnotifyAll()
String toString()
voidwait()
Pro esor
private String codigoprivate String nombre
public String getCodigo()
public String getNombre()
public void setCodigo(String codigo)
public void setNombre(String nombre)
private String asignatura
public String getAsignatura ()
public void setAsignatura (String asignatura)
Persona p
v
0
1
2
3
4
Estudiante
08115321
Luisa
Finanzas
Profesor
73452586
Jos
Estructura
Estudiante
08134456
Carlos
DerechoProfesor
17954007
Juan
Taller 1
Estudiante
08117542
Mara
Sistemas
http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23clone()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23equals(java.lang.Object)http://d/Software%20Libre/Java/docs/api/java/lang/Object.htmlhttp://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23finalize()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23getClass()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23hashCode()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notify()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notifyAll()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23wait()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23wait()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23toString()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notifyAll()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23notify()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23hashCode()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23getClass()http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23finalize()http://d/Software%20Libre/Java/docs/api/java/lang/Object.htmlhttp://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23equals(java.lang.Object)http://d/Software%20Libre/Java/docs/api/java/lang/Object.html%23clone()8/6/2019 Talleres POO en Java
9/9
Fundacin Universitaria Tecnolgico Comfenalco Tecnologa en Sistemas de Informacin
Taller de programacin I Ing. Juan Jos Puello Fuentes
c) Clases envolventesComo vimos en el tema anterior, cuando necesitamos guardar variedad de objetos usamos contenedores Object, como el
vector de la grafica. Pero que pasa si tambin necesitamos guardar datos primitivos (int, double, char, boolean, etc.) en el
mismo contenedor.
Object v = new Object[5];
v[0] = new Estudiante();v[1] = new Fecha();
v[2] = new Reloj();
v[3] = 7; => Error de sintaxis
v*4+ = @; => Error de sintaxis
Si se trata de guardar un dato primitivo en una referencia aunque sea Object, se produce un error de compatibilidad, por
lo que es necesario convertir los datos primitivos a objetos para que sean compatibles (en versiones anteriores a JDK 5).
Este proceso se hace a travs de unas clases que estn contenidas en el API de java, para cada tipo primitivo existe una
clase envolvente. (En versiones superiores a JDK 4, la envoltura se hace implcitamente cuando se asigna el primitivo a
una variable Object.)
TIPO PRIMITIVO CLASE ENVOLVENTE
Int Integer
float Float
double Double
char Character
boolean Boolean
Object v = new Object[5];
v[0] = new Estudiante();
v[1] = new Fecha();
v[2] = new Reloj();
v[3] = new Integer(7);
v[4] = new Character(@);
Si observa hay una diferencia en las dos ltimas instrucciones que almacenan referencias en el vector (V) con respecto a la
primera grafica, esta ltima es la forma en que quedan contenidos datos primitivos en contenedores Objects
Laboratorio (Punto 3)
Desarrolle cdigo java para almacenar nmeros enteros en un vector Object y caracteres en otro vector Object. Luego
recorrer el vector con nmeros para calcular y mostrar el promedio, tambin recorrer el vector con caracteres para formar
una cadena y mostrarla.
Sugerencias: Hacer casting para recuperar los Objetos, use los mtodos intValue() de la clase Integerpara recuperar el
dato entero, charValue()de la claseCharacterpara recuperar el dato carcter y con el smbolo+ concatene los caracteres
para formar la cadena (String). Investigue estos mtodos y como concatenar cadenas y caracteres.
0
1
2
3
4
Reloj
hora
minuto
segund
Fecha
dia
mes
ao
Estudiante
codigonombre
programa
v
v
0
1
2
3
4
Reloj
19
15
07
Fecha
21
11
2008
Estudiante
08117214
Carlos
Sistemas
Integer
7Character
@