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]