Talleres POO en Java

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

    @