Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Universidad Nacional del Sur
Teoría de Objetos
Ing. Ricardo Coppo
[email protected]
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.
Teoría de Objetos Ing.Ricardo Coppo
2
Principios de Computadoras II Universidad Nacional del Sur
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
Teoría de Objetos Ing.Ricardo Coppo
3
Principios de Computadoras II Universidad Nacional del Sur
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”
Teoría de Objetos Ing.Ricardo Coppo
4
Principios de Computadoras II Universidad Nacional del Sur
Qué es una referencia?
Es una variable que guarda la dirección de memoria en la que se almacena un objeto Punto1 x=6 y=4
Punto2
Teoría de Objetos Ing.Ricardo Coppo
x=3 y=9
5
Principios de Computadoras II Universidad Nacional del Sur
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
Teoría de Objetos Ing.Ricardo Coppo
6
Principios de Computadoras II Universidad Nacional del Sur
Referencias
Un objeto puede ser apuntado por más de una referencia Punto1 x=4 y=9
Punto2
Teoría de Objetos Ing.Ricardo Coppo
7
Principios de Computadoras II Universidad Nacional del Sur
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
Teoría de Objetos Ing.Ricardo Coppo
8
Principios de Computadoras II Universidad Nacional del Sur
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
Teoría de Objetos Ing.Ricardo Coppo
9
Principios de Computadoras II Universidad Nacional del Sur
Declaración de objetos
Operador “new”
Teoría de Objetos Ing.Ricardo Coppo
10
Principios de Computadoras II Universidad Nacional del Sur
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
Teoría de Objetos Ing.Ricardo Coppo
11
Principios de Computadoras II Universidad Nacional del Sur
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”
Teoría de Objetos Ing.Ricardo Coppo
12
Principios de Computadoras II Universidad Nacional del Sur
Constructores por defecto
La clase Punto no provee constructor. El compilador provee el método: public Punto ( ) { };
El constructor inicializa las propiedades a cero
Teoría de Objetos Ing.Ricardo Coppo
13
Principios de Computadoras II Universidad Nacional del Sur
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 Teoría de Objetos Ing.Ricardo Coppo
14
Principios de Computadoras II Universidad Nacional del Sur
Declaración de objetos
Empleo de constructores explícitos
Teoría de Objetos Ing.Ricardo Coppo
15
Principios de Computadoras II Universidad Nacional del Sur
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
Teoría de Objetos Ing.Ricardo Coppo
16
Principios de Computadoras II Universidad Nacional del Sur
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”
Teoría de Objetos Ing.Ricardo Coppo
17
Principios de Computadoras II Universidad Nacional del Sur
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++
Teoría de Objetos Ing.Ricardo Coppo
18
Principios de Computadoras II Universidad Nacional del Sur
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
Teoría de Objetos Ing.Ricardo Coppo
19
Principios de Computadoras II Universidad Nacional del Sur
Destrucción de objetos Punto1
Punto1 = new Punto(); Punto2 = new Punto();
Punto2
Punto1
Punto2
Punto2 = Punto1;
Objeto inalcanzable Teoría de Objetos Ing.Ricardo Coppo
20
Principios de Computadoras II Universidad Nacional del Sur
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
Teoría de Objetos Ing.Ricardo Coppo
21
Principios de Computadoras II Universidad Nacional del Sur
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. Teoría de Objetos Ing.Ricardo Coppo
22
Principios de Computadoras II Universidad Nacional del Sur
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
Teoría de Objetos Ing.Ricardo Coppo
En cada objeto son valores distintos
23
int valor
Principios de Computadoras II Universidad Nacional del Sur
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
Teoría de Objetos Ing.Ricardo Coppo
static int valor
24
Principios de Computadoras II Universidad Nacional del Sur
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,
Teoría de Objetos Ing.Ricardo Coppo
Integer.MAX_VALUE
25
Principios de Computadoras II Universidad Nacional del Sur
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”.
Teoría de Objetos Ing.Ricardo Coppo
26
Principios de Computadoras II Universidad Nacional del Sur
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”
Teoría de Objetos Ing.Ricardo Coppo
27
Principios de Computadoras II Universidad Nacional del Sur
Paquetes en Java
Para que una clase Java pertenezca a un determinado paquete se requiere:
El archivo debe ser precedida por la sentencia package ;
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.
Teoría de Objetos Ing.Ricardo Coppo
28
Principios de Computadoras II Universidad Nacional del Sur
Paquetes en Netbeans Directiva “package”
Vista proyecto
Vista archivo
Navegador de clase
Teoría de Objetos Ing.Ricardo Coppo
29
Principios de Computadoras II Universidad Nacional del Sur
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( );
Teoría de Objetos Ing.Ricardo Coppo
30
Principios de Computadoras II Universidad Nacional del Sur
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.*;
Teoría de Objetos Ing.Ricardo Coppo
//no importa java.util.Date //importa una sola clase (Date) //importa toda las clases en el //paquete “util” pero no los //subpaquetes 31
Principios de Computadoras II Universidad Nacional del Sur
Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Universidad Nacional del Sur
Teoría de Objetos
Mg. Ricardo Coppo
[email protected]