Curso de JAVA - CIases y Objetos 1 WiIson PeIez Hernndez
' ' ' '
WiIson PeIez Hernndez WiIson PeIez Hernndez Curso de JAVA - CIases y Objetos 2 WiIson PeIez Hernndez CLASES Y OBJETOS CLASES Y OBJETOS Curso de JAVA - CIases y Objetos 3 WiIson PeIez Hernndez Contenido - Concepto de clase en JAVA - Declaracin de una clase - Caractersticas de las clases en JAVA - Representacin en UML - Sintaxis para declarar una variable - Sintaxis para declarar un mtodo - Variables miembro de objeto - Mtodos de objetos - Variables y mtodos de clase - Clases, variables y mtodos finales - Ejemplo clase Rectngulo - Constructores Curso de JAVA - CIases y Objetos 4 WiIson PeIez Hernndez Contenido - Constructores de la clase rectangulo - Los objetos - Envo de mensajes - Destruccin de objetos - Ciclo de vida de un objecto - Finalizadores - Inicializadores estaticos - Resumen de cmo se carga una clase/objeto Curso de JAVA - CIases y Objetos 5 WiIson PeIez Hernndez -Una clase es una agrupacin de datos (variables) y de funciones que operan sobre esos datos (mtodos). -[public] class Classname{ //definicin de variables y mtodos . } -Un objeto es un ejemplar concreto de una clase. Las clases son como tipos de variables, mientras que los objetos son como variables concretas de un tipo determinado. -Classname unObjeto; -Classname otroObjeto; Concepto de clase Concepto de clase Curso de JAVA - CIases y Objetos 6 WiIson PeIez Hernndez -Todas las variables y funciones de Java deben pertenecer a una clase. No hay variables ni funciones globales. -Si una clase deriva de otra (extends), hereda todas sus variables y mtodos. -Java tiene una jerarqua de clases estndar de la que pueden derivar las clases que crean los usuarios. -Por defecto, las clases de usuario derivan de una clase de Java llamada Object Concepto de clase Curso de JAVA - CIases y Objetos 7 WiIson PeIez Hernndez [pubIic][finaI][abstract] cIass Nclace [extends Cmadre][impIements Int1, int2.] { } eclaracin de una clase !:ede ser :sada por c:alq:ier clase en c:alq:ier parte No p:ede tener clases hijas No p:ede ser instanciada Indica de q:e clase desciende Indica q:e interface implementa Curso de JAVA - CIases y Objetos 8 WiIson PeIez Hernndez Caractersticas de las clases -Slo se puede heredar de una clase (en Java no hay herencia multiple) -En un fichero no puede haber ms de una clase public. Este fichero se llama como la clase public con extencion *.java. -Con algunas excepciones, lo habitual es escribir una sola clase por fichero. -Si una clase contenida en un fichero no es public, no es necesario que el fichero se llame como la clase. Curso de JAVA - CIases y Objetos 9 WiIson PeIez Hernndez Caractersticas de las clases -Los mtodos de una clase pueden referirse de modo global al objeto de esa clase al que se aplican por medio de la referencia this. -Las clases se pueden agrupar en packages, introduciendo una linea al comienzo del fichero (package packageName;). -Una interface es un conjunto de declaraciones de funciones. Si una clase implementa una interface, debe definir todas las funciones especificadas por la interface. Una clase puede implementar ms de una interface. Curso de JAVA - CIases y Objetos 10 WiIson PeIez Hernndez Caracteristicas de las clases de Java -Las interfaces pueden definir tambin variables finales. -Una interface puede derivar de otra interface o incluso de varias interfaces. -Una interface sirve para crear referencias a objetos. Cuando el nombre de un objeto es de un tipo de interface, a travs de dicho nombre slo se puede utilizar los mtodos declarados por dicha interface. Curso de JAVA - CIases y Objetos 11 WiIson PeIez Hernndez #epresentacin UML Curso de JAVA - CIases y Objetos 12 WiIson PeIez Hernndez Sintaxis para declarar una variable miembro Curso de JAVA - CIases y Objetos 13 WiIson PeIez Hernndez Sintaxis para mtodos Curso de JAVA - CIases y Objetos 14 WiIson PeIez Hernndez 'ariables miembros de objetos -Las variables miembros de una clase pueden ser tipos primitivos (int, long, double,.) u objetos de otra clase (composicin). -Las variables miembros se inicializan en el orden en que aparecen en el cdigo de la clase. -Importante, porque unas variables pueden apoyarse en otras variables previamente definidas. Curso de JAVA - CIases y Objetos 15 WiIson PeIez Hernndez 'ariables miembros de objetos -Las variables miembros de tipos primitivos se inicializan siempre de modo automtico, incluso antes de llamar al constructor. -Los tipos booleam se inicializan a false -Los tipos char se inicializan al carcter nulo \u0000 -Los tipos numericos (byte, short, int, long, float, double) se inicializan a cero. Curso de JAVA - CIases y Objetos 16 WiIson PeIez Hernndez 'ariables miembros de objetos -Las variables miembros de tipo referencia se inicializan a null. -Tambin pueden inicializarse explcitamente en la declaracin, como las variables locales, por medio de constanates o llamadas a mtodos. -double x=0.0, y=0.0, r=1.0; -De todas formas, lo ms adecuado es inicializarlas en el constructor. Curso de JAVA - CIases y Objetos 17 WiIson PeIez Hernndez Mtodos de Objeto -Los mtodos son funciones definidas dentro de una clase, que se aplican siempre a un objeto de la clase (excepto los mtodos de la clase), que es su argumeto implcito. -La primera linea de la definicin de un mtodo se llama declaracin o hearder el cdigo comprendido entre la llaves {.} es el cuerpo o body de la funcin. -Los mtodos tienen visibilidad directa de las variables miembro. Curso de JAVA - CIases y Objetos 18 WiIson PeIez Hernndez Mtodos de Objeto -Se puede acceder a ellas medianate la referencia this si hay alguna variable local o argumento explcito que las oculta. -El valor de retorno puede ser un valor de tipo primitivo o una referencia. -Se puede devolver tambin un objeto por medio de un nombre de interface. Se puede devolver como valor de retorno un objeto de la misma clase o de una sub-clase, pero nunca de una super-clase. Curso de JAVA - CIases y Objetos 19 WiIson PeIez Hernndez Mtodos de Objeto -Los mtodos pueden definir variables locales. -Su visibilidad llega desde la definicin al final del bloque {.} en el que han sido definidas. -No hace falta inicializarlas cuando se definen, pero el compilador no permite utilizarlas sin haberlas inicializado. -Una clase puede redefinir (overridden) el mtodo heredado de una superclase. En este caso el mtodo debe tener los mismos argumentos en tipo y nmero que el mtodo redefinido Curso de JAVA - CIases y Objetos 20 WiIson PeIez Hernndez Mtodos de Objeto -En Java no se pueden pasar mtodos como argumentos. -Los argumentos de los tipos primitivos se pasan siempre por valor. -Las referencias se pasan tambin por valor, pero a travs de ellas se pueden modificar los objetos referenciados. Curso de JAVA - CIases y Objetos 21 WiIson PeIez Hernndez Mtodos de objeto -Los mtodos de la super-clase que han sido redefnidos pueden ser accedidos por medio de la palabra super. -Slo se puede subir un nivel en la jerarqua de clases. -Dentro de un mtodo se pueden crear variables locales que dejan de existir al terminar la ejecucin del mtodo. Curso de JAVA - CIases y Objetos 22 WiIson PeIez Hernndez Mtodos de objetos -Si un mtodo devuelve this (es decir, un objeto de la clase) ese objeto puede encadenarse con otra llamada a otro mtodo de la misma o de diferente clase y as sucesivamente. - En este caso aparecern varios mtodos en la misma sentencia unidos por el operador punto (.). -String numeroComoString="3.14.1592654; -Double x= Double.valueOf(numeroComoString).DoubleValu e(); Curso de JAVA - CIases y Objetos 23 WiIson PeIez Hernndez Mtodos de objetos -Se puede aplicar un mtodo a un objeto concreto poniendo el nombre del objeto y luego el nombre del mtodo separados por un punto. -Por ejemplo, para calcular el rea de un objeto de la clase circulo llamado c1 se escribe: c1.area(); Curso de JAVA - CIases y Objetos 24 WiIson PeIez Hernndez Sobrecarga de mtodos -Puede haber mtodos sobrecargados (overloaded): varios mtodos con el mismo nombre que se diferencian por el nmero y/o tipo de los argumentos. -El valor de retorno no influye en la eleccin del mtodo sobrecargado (en realidad es imposible saber lo que se va a hacer con l) Curso de JAVA - CIases y Objetos 25 WiIson PeIez Hernndez Sobrecarga de mtodos -A la hora de llamar a un mtodo sobrecargado, si existe un mtodo cuyos argumentos se ajustan exactamente se llama ese mtodo. -Si el mtodo que se ajuste exactamente no existen se promueven los argumentos al tipo inmediatamente superior (char a int, int a long) y se intenta llamar al mtodo correspondiente. -Si slo existen mtodos con argumentos de un tipo menos amplio (int en vez de long), hay que hacer un cast explcito porque pude perderse informacin al llamar al mtodo. Curso de JAVA - CIases y Objetos 26 WiIson PeIez Hernndez 'ariables y mtodos de clase -Cada objeto tiene su propia copia de las variables miembro. -Por ejemplo, cada objeto de la clase Circulo tiene sus propias coordenadas en el centro x e y, y su propio radio r. -Los mtodos y las variables de clase se crean anteponiendo la palabra static -Los mtodos y las variables de una clase son lo ms parecido que Java tiene a las funciones y variables globales de C/C++. Curso de JAVA - CIases y Objetos 27 WiIson PeIez Hernndez 'ariables y mtodos de clase -Una clase puede tener variables propias de la clase y no de cada objeto. -A estas variables se les llama variables static de clase. - Se crean al invocar la clase, sin necesidad de crear objetos de la clase. -Puede haber mtodos que no acten sobre objetos concretos a travs del operador punto Curso de JAVA - CIases y Objetos 28 WiIson PeIez Hernndez 'ariables y mtodos de clase -A estos mtodos se les llama mtodos static o de clase. -Los mtodos static pueden recibir mtodos de una clase como argumentos. -No pueden utilizar la referencia this, ya que no tienen argumento implcito. -Para llamarlos se puede utilizar el nombre de la clase (no es imprescindible), en vez del nombre de un objeto de la clase. Curso de JAVA - CIases y Objetos 29 WiIson PeIez Hernndez 'ariables y mtodos de clase -Si no se les da valor, las variables miembros static se inicializan con los valores por defecto para los tipos primitivos. -Las variables miembros static se inicializan cuando es necesario: -Cuando se va a crear el primer objeto de la clase. -Cuando se llama a un mtodo static o -Se utiliza una variable static de dicha clase. -Las variables miembros static se inicializan siempre antes de que se cree cualquier objeto de la clase Curso de JAVA - CIases y Objetos 30 WiIson PeIez Hernndez Clases, variables y mtodos finales. -Una variable declarada como final no puede cambiar su valor a lo largo de la ejecucin del programa. Puede ser considerada como una constante. -Se puede separar la inicializacin de la definicin de una variable final. -La inicializacin puede hacerse ms tarde en tiempo de ejecucin llamando a mtodos o en funciones de otros datos. Curso de JAVA - CIases y Objetos 31 WiIson PeIez Hernndez Clases, variables y mtodos finales. -Es constante (no puede cambiar), pero no tiene por que tener el mismo valor en todas las ejecuciones del programa. -Un mtodo final no puede ser redefinido por una clase que derive de su propia clase. -Una clase final no puede ser heredada por otra clase (no pueden tener clases derivadas). Curso de JAVA - CIases y Objetos 32 WiIson PeIez Hernndez Clases, variables y mtodos finales. -Las clases finales se ejecutan de modo ms eficiente. La JVM - Java 'irtual Machine- ya sabe que sus mtodos no pueden ser redefinidos por otras clases derivadas. -Declarar como final un objeto miembro de una clase hace constante la referencia, pero no el propio objeto, que puede ser modificado. -En Java no es posible hacer que un objeto sea constante. Curso de JAVA - CIases y Objetos 33 WiIson PeIez Hernndez Ejemplo: Clase #ectangulo -Vamos a crear una clase denominada Rectangulo, que describa las caractersticas comunes a estas figuras planas que son las siguientes: -El origen del rectngulo: el origen o posicin de la esquina inferior izquierda del rectngulo en el plano determinado por dos nmeros enteros x e y. -Las dimensiones del rectngulo: ancho y alto, otros dos nmeros enteros. Curso de JAVA - CIases y Objetos 34 WiIson PeIez Hernndez Ejemplo: Clase #ectangulo -Hemos definido los atributos o miembros dato de la clase Rectangulo, ahora le vamos aadir un comportamiento: -Los objetos de la clase Rectangulo sabrn calcular su rea,su perimetro, tendrn capacidad para trasladarse a otro punto del plano, sabrn si contienen en su interior un punto determinado del plano. Curso de JAVA - CIases y Objetos 35 WiIson PeIez Hernndez Ejemplo: Clase #ectangulo Curso de JAVA - CIases y Objetos 36 WiIson PeIez Hernndez Constructores -Un constructor es una funcin o mtodo que se llama automticamente cada vez que se crea un objeto de una clase. -La principal funcin del constructor es reservar la memoria e inicializar las variables miembros de la clase. -Java no permite que hayan variables miembros que no estn inicializadas. Si pueden haber variables locales de funciones sin inicializar. Curso de JAVA - CIases y Objetos 37 WiIson PeIez Hernndez Constructores -Los constructores no tienen valor de retorno (ni siquiera void) y su nombre es el mismo que el de la clase. -De ordinario una clase tiene varios constructores, que se diferencian por el tipo y nmero de sus argumentos (funciones o mtodos sobrecargados). -Se llama constructor por defecto al constructor que no tiene argumentos. - El programador debe proporcionar en el cdigo valores iniciales adecuados. Curso de JAVA - CIases y Objetos 38 WiIson PeIez Hernndez Constructores -Un constructor de una clase puede llamar a otro constructor previamente definido en la misma clase por medio de la palabra this. -La palabra this solo puede aparecer en la primera sentencia de un constructor. -El constructor de una clase derivada puede llamar al constructor de su clase padre por medio de la palabra sper, seguida de los argumentos apropiados. - Por lo anterior, un constructor solo tiene que inicializar directamente las variables no heredadas. Curso de JAVA - CIases y Objetos 39 WiIson PeIez Hernndez Constructores -Si el programa no prepara ningn constructor para una clase, el compilador crea un constructor por defecto. -Inicializando las variables de los tipos primitivos a cero, los string a la cadena vaca y las referencias a objetos a null. -Los constructores pueden ser tambin public, private, protected y package. -Si un constructor es private, ninguna otra clase puede crear un objeto de esa clase. Curso de JAVA - CIases y Objetos 40 WiIson PeIez Hernndez Constructores -Puede haber mtodos public (factory methods) que llamen al constructos y devuelvan un objeto de esa clase. -Los constructores solo pueden ser llamados por otros constructores o por mtodos static. -No pueden ser llamados por los mtodos de objetos de la clase. Curso de JAVA - CIases y Objetos 41 WiIson PeIez Hernndez -Funciones constructoras de la clase Rectangulo. Ejemplo: Clase #ectangulo Curso de JAVA - CIases y Objetos 42 WiIson PeIez Hernndez -Para crear un objeto de una clase se usa la palabra reservada new. -new reserva espacio en memoria para los miembros dato y devuelve una referencia que se guarda en una variable del tipo "clase Los objetos Curso de JAVA - CIases y Objetos 43 WiIson PeIez Hernndez -Desde un objeto llamamos a las funciones miembro para realizar una determinada tarea, a este proceso se le conoce como envo de mensajes. Envio de mensajes Curso de JAVA - CIases y Objetos 44 WiIson PeIez Hernndez -En Java no hay destructores como en C++. -El sistema se ocupa automticamente de liberar la memoria de los objetos que ya han perdido la referencia esto es objeto cuyo nombre ya no permite acceder a ellos, por ejemplo: -Por haber llegado al final del bloque en el que la referencia haba sido definida. -Porque a la referencia se le haba asignado el valor null. -Porque a esa referencia se le haba asignado un objeto diferente. estruccin de objetos Curso de JAVA - CIases y Objetos 45 WiIson PeIez Hernndez -A esta caracterstica de liberar memoria de modo automtico se le llama garbage collection (recogida de basura). -Una forma de hacer que un objeto quede sin referencia es cambiar esta a null, haciendo por ejemplo: Objetoref=null. -No se sabe cuando se va a activar exactamente en garbage collector. -Si no falta memoria es posible que no se active nunca. estruccin de objetos Curso de JAVA - CIases y Objetos 46 WiIson PeIez Hernndez estruccin de objetos -Se puede llamar explcitamente al garbage collector con system.gc(), aunque esto es solo una "sugerencia que se enva a la JMV. -Un finalizador es un mtodo que se llama automticamente al destruir un objeto (antes de que la memoria sea liberada de modo automtico por el sistema). -Se utilizan para ciertas operaciones de terminacin distintas de liberar memoria (cerrar ficheros, cerrar conexiones, liberar memoria reservada por funciones nativas, etc.) Curso de JAVA - CIases y Objetos 47 WiIson PeIez Hernndez -Un finalizador es un mtodo de objeto (no static), sin valor de retorno (void), sin argumentos y que siempre se llama finalize(). -Los finalizadores se llaman de modo automtico siempre que estn definidos. Un finalizador debera terminar llamando al finalizador de su superclase. -No se puede saber el momento preciso en que los finalizadores van a ser llamados. -En muchas ocasiones ser conveniente que el programador realice de modo explcito esas operaciones de finalizacin. inalizadores Curso de JAVA - CIases y Objetos 48 WiIson PeIez Hernndez -El garbage collector slo libera la memoria reservada con new. Si por ejemplo se ha reservado memoria con funciones nativas en C (utilizando malloc()) esta memoria hay que liberarla explcitamente con l mtodo finalize(). -El mtodo system.runFinalization () "sugiere a la JVM que ejecute los finalizadores de los objetos pendientes (que han perdido la referencia). -Parece ser que hay que llamar primero a gc() y luego a runFinalization(). inalizadores Curso de JAVA - CIases y Objetos 49 WiIson PeIez Hernndez -Un inicializador static es una funcin (un bloque de cdigo{.} definido en la clase) que se llama automticamente al iniciarse el programa (al crear la clase). -Se diferencia del constructor que no es llamado para cada objeto, sino una sola vez en toda la clase. -Se crean dentro de la clase, mtodos sin nombre y sin valor de retorno, con tan solo la palabra static y el cdigo entre llaves{.}. Inicializadores estticos Inicializadores estticos Curso de JAVA - CIases y Objetos 50 WiIson PeIez Hernndez Inicializadores estticos -Los tipos primitivos pueden inicializarse directamente con asignaciones, pero para inicializar objetos o elementos mas complicados es bueno utilizar un inicializador (bloque{.}) que permita gestionar excepciones con try..catch. -En una clase pueden definir varios inicializadores static, que se llaman en el orden en que han sido definidos. -Los inicializadores static se pueden utilizar para dar valor a las variables static Curso de JAVA - CIases y Objetos 51 WiIson PeIez Hernndez -Adems se suelen utilizar para llamar a mtodos nativos, esto es mtodos escritos por ejemplo en C (llamando a los mtodos system.load() o system.loadLibrary(),que leen las librerias nativas). -En java 1.1 existen tambin inicializadores de objeto, que no llevan la palabra static. -Se utilizan para las clases annimas, que no tienen constructores. En este caso se llaman cada vez que se crea un objeto de la clase. Inicializadores estticos Curso de JAVA - CIases y Objetos 52 WiIson PeIez Hernndez -Al crear el primer objeto de la clase o a utilizar el primer mtodo o variable static se localiza la clase en el disco (fichero*.class) y se carga en memoria. -Se ejecutan los inicializadores static (solo un a vez). #esumen de cmo se carga una clase Curso de JAVA - CIases y Objetos 53 WiIson PeIez Hernndez #esumen de cmo se carga una clase -Para crear un objeto nuevo: -Se comienza reservando memoria. -Se da valor por defecto a las variables miembros de los tipos primitivos. -Se ejecutan los inicializadores explcitos o de objeto. -Se ejecutan los constructores Curso de JAVA - CIases y Objetos 54 WiIson PeIez Hernndez Taller Curso de JAVA - CIases y Objetos 55 WiIson PeIez Hernndez Bibliografia W%utoriaI Basico de Java Sun Microsystem WAprenda Java como si estuviera en primero WCurso de Java Javier Pardo (1999) WJava desde Cero Guia deI tema WIntroduccin a Ia programacion OO Con Java. C. %omas Wu Wttp://www.bruceeckeI.com/ Otras referencias Curso de JAVA - CIases y Objetos 56 WiIson PeIez Hernndez in in