Departamento de Ingeniería Electrónica y Computadoras Ing. Ricardo Coppo rcoppo@uns.edu.ar
Qué es un Objeto? Un objeto es una instancia de una clase Las clases actuán como modelos que permiten la creación de objetos durante la ejecución del programa El objeto es un concepto dinámico. Es un tipo de datos con estructura y estado. 2
Características de un Objeto Se pueden construir y destruir durante la ejecución del programa Ocupan memoria para almacenar el estado del objeto Son comparables Es válido preguntarse si un objeto es igual a otro Se puede operar con ellos Reciben mensajes y los procesan. Pueden ser usados como parámetros de métodos de otra clase 3
Referencias Se accede a los miembros del objeto a través de referencias Las referencias se declaran como las variables primitivas Inicialmente poseen el valor null El programador debe construir el objeto y luego asignar a la referencia su valor Para ello emplea el operador new 4
Qué es una referencia? Es una variable que guarda la dirección de memoria en la que se almacena un objeto Punto1 Punto2 x = 6 y = 4 x = 3 y = 9 5
Referencias Cuando se crea una referencia inicialmente no apunta a ningún objeto. Es una referencia nula (null) La referencia se asocia o se liga a un objeto durante la ejecución del programa Una referencia posee tipo. No puede apuntar a un objeto que no es del tipo declarado 6
Referencias Un objeto puede ser apuntado por más de una referencia Punto1 Punto2 x = 4 y = 9 7
Operaciones con referencias Examinar o manipular la referencia Asignar referencias Comparar referencias Operar con el objeto asociado a la referencia Acceder a la propiedades de los objetos Ejecutar los métodos del objeto Interrogar su tipo (instanceof) Coerción de tipo 8
Operaciones con referencias Las referencias NO son punteros No se pueden sumar, multiplicar, incrementar No se pueden dereferenciar (conocer su contenido) Las referencias no pueden asociarse a tipos de variable primitivas 9
Declaración de objetos Operador new 10
Creación de objetos Asignación de memoria Automática Dinámica Estática Inicialización de los campos Función constructor Creación de la referencia 11
Método Constructor Al crear un objeto Java invoca un método especial que se llama Constructor Este método posee el mismo nombre que la clase Retorna una referencia al objeto recién creado Si el programador no provee un constructor para la clase, el compilador provee un constructor por defecto 12
Constructores por defecto La clase Punto no provee constructor. El compilador provee el método: public Punto ( ) { }; El constructor inicializa las propiedades a cero 13
Constructores explícitos El programador puede escribir uno o mas constructores utilizando sobrecarga Observar que no poseen tipo de retorno en la signatura siempre producen una referencia NOTA: Cuando el programador escribe 1 constructor, debe escribir TODOS los constructores el compilador no genera uno por defecto 14
Declaración de objetos Empleo de constructores explícitos 15
Uso de this dentro del constructor En ocasiones un constructor puede aprovechar el código escrito en otro constructor de la misma clase. Se invoca usando this como nombre del método y suministrando los parámetros correspondientes 16
Destrucción de objetos Debe recuperarse la memoria asignada al objeto Se ejecuta un método especial denominado destructor Los destructores pueden ser: de invocación explícita de invocación implícita En Java existe un concepto similar que se denomina finalizador 17
Destrucción de los objetos Destrucción a cargo del programador Existe un método destructor (por defecto o explícito) Se invoca el destructor cuando se inicia la destrucción del objeto Requiere un cuidadoso uso de los punteros a objeto ya que es fácil destruir el puntero y no liberar la memoria asignada (memory leak) Esta técnica es la empleada por C++ 18
Destrucción de objetos Destrucción automática La máquina virtual detecta objetos inalcanzables A su conveniencia recupera memoria utilizando un algoritmo de recolección de basura (garbage collection) Se puede definir un método especial que es invocado por el JVM antes de la destrucción final, aunque no se garantiza el momento de ejecución 19
Destrucción de objetos Punto1 Punto2 Punto1 = new Punto(); Punto2 = new Punto(); Punto1 Punto2 Punto2 = Punto1; Objeto inalcanzable 20
Finalizadores Es un método especial que se invoca cuando el JVM está a punto de destruir el objeto. Por la forma en que se ejecuta el algoritmo de recolección de basura es impredecible el instante real de ejecución. Puede diferirse por tiempo indeterminado 21
Finalizadores La liberación automática y segura de memoria es una de las características de Java que lo hace más sencillo de usar El método finalize() no puede ser sobrecargado. 22
Variables de clase y de instancia Variable de instancia Se reserva memoria para cada instancia de la clase que se construye. Guarda el estado de un objeto en particular Cada objeto accede a su propia variable Las propiedades de una clase se declaran de instancia por defecto en Java int valor En cada objeto son valores distintos int valor 23
Variables de clase y de instancia Variables de clase Se reserva memoria para una sola copia de la propiedad que es compartida entre todas las instancias. En Java la propiedad es calificada por static Si un objeto modifica la propiedad, esta modificación se verá en todas las otras instancias. int valor static int valor static int valor 24
Definición de constantes Un uso común de las propiedades estáticas es para la definición de constantes. En este caso van acompañados del calificador final para indicar que no pueden ser modificados final static double PI = 3.14159; Forma de uso: Color.RED, Integer.MAX_VALUE 25
Métodos de clase Para acceder a las propiedades de clase (estáticas) no es necesario instanciar un objeto Un método de clase solamente accede a otros métodos y propiedades de clase. Un método de clase NO puede acceder a métodos de instancia sin crear el objeto correspondiente Un método de clase se califica con static. 26
Definición de namespaces El desarrollo de aplicaciones grandes requiere de la definición de namespaces o espacios de nombre en las que los miembros del mismo no pueden tener un mismo nombre Los componentes de un mismo espacio de nombre no pueden tener el mismo nombre. En Java el concepto de namespaces se implementa como packages o paquetes 27
Paquetes en Java Para que una clase Java pertenezca a un determinado paquete se requiere: El archivo debe ser precedida por la sentencia package <nombre>; Se debe almacenar todos los archivos de un mismo paquete en un solo directorio (de igual nombre al paquete) Java asume un paquete default si no se usa la sentencia package aunque actualmente se recomienda no usar esta opción. 28
Paquetes en Netbeans Directiva package Vista proyecto Vista archivo Navegador de clase 29
Directiva import Cuando se desea utilizar componentes de otro espacio de nombres se debe explicitar todo el nombre completo Java.util.Date dt = new java.util.date( ); A fin de facilitar la escritura es posible usar la directiva import import java.util.*; //Todas las clases Date dt = new Date( ); 30
Directiva import Si se importa dos paquetes que poseen clases con un mismo nombre existe un conflicto para el compilador. En este caso se debe usar el nombre completo. La directiva import no incorpora subpaquetes import java.util; Import java.util.date; Import java.util.*; //no importa java.util.date //importa una sola clase (Date) //importa toda las clases en el //paquete util pero no los //subpaquetes 31
Departamento de Ingeniería Electrónica y Computadoras Mg. Ricardo Coppo rcoppo@uns.edu.ar