POO Java
POO Java
someMethod(this);
ejemplo
Interfaces
• Las interfaces también tienen jerarquía
• Una interfaz puede extender de otra interfaz
– Hereda la definición de los métodos y las constantes
• La subinterfaz puede añadir nuevos métodos y
constantes
Interfaces
• Una clase implementa una interfaz
– public class Clase implements Interfaz
• La clase DEBE dar cuerpo a todos los métodos
definidos en la interfaz
– Si no, error de compilación
Interfaces
• Puede haber variables con tipo de la interfaz
– Interfaz a;
• Pero no se puede instancia
– a = new Interfaz() // ERROR
• Se deben asignar objetos de clases que
implementan la interfaz
Paquetes
• Subclases: organización funcional
• Paquetes: organización administrativa
• Agrupación de clases a juicio del desarrollador
• Jerarquía: javax.swing.table
Paquetes
• Para definir a qué paquete pertenece una clase,
usar la sentencia package
• Separamos subpaquetes con puntos
package cursillo.2004.ejemplos
public class Ejemplo extends Padre {
....
}
Paquetes
• Para usar clases de otros paquetes
• Referencia explícita
– cursillo.2004.ejemplos.Ejemplo1 a;
• Importación
– import cursillo.2004.ejemplos.Ejemplo1
Ejemplo1 a;
Paquetes
• Se pueden importar clases específicas
– import cursillo.2004.ejemplos.Ejemplo1
• O todas las clases de un paquete
– import cursillo.2004.ejemplos.*
• El asterisco no importa subpaquetes
• Por defecto, se importa java.lang.*
Usando objetos
• Declarar el objeto
– <clase> <identificador>
– Bicicleta miBicicleta;
• Pueden usarse clases o interfaces
– Las interfaces no se pueden instanciar
– Se instancia una clase que la implemente
Usando objetos
• La variable aún no apunta a ningún objeto
• Instanciar la clase
– <identificador> = new <clase>(<args>)
– miBicicleta = new Bicicleta();
• Se indica el constructor a emplear
– Inicializa la clase
Usando objetos
Bicicleta
Constructores
• Método especial que se invoca cuando alguien
crea un objeto de la clase
– <acceso><nombre_clase>(<args>)
• Mismo nombre que la clase
• No tiene tipo de retorno
• Sirve para inicializar el objeto
Constructores
• Si no se especifica ningún constructor, Java crea
el constructor vacío
– public Clase() {;}
• Se pueden sobrecargar los constructores para
aceptar diferentes tipos de argumentos
Bicicleta
Constructores
• Se puede invocar desde el constructor a otro
constructor de la clase
– this(argumentos)
• Se puede invocar al constructor de la superclase
para configurar las variables heredades
– super(argumentos)
• Deben ser la primera instrucción
Limpieza de objetos
• Con Java no hay que liberar la memoria
explícitamente
• El recolector de basura se encarga
• Subsistema que mira qué objetos no están
referenciados para eliminarlos
– Ninguna variable apunta al objeto
Limpieza de objetos
• Para hacer que una variable no apunte a un objeto
– Asignar otro objeto (a = b)
– Asignar el valor nulo (a = null)
• Antes de eliminar el objeto, se invoca el destructor
Destructores
• Método public void finalize()
– Declarado en Object y heredado por todas las clases
• Cuerpo: liberar recursos
• No se garantiza
– Ni en el momento en que se ejecuta
– Ni que se ejecute
Bicicleta
Seguridad en acceso
• Tanto los atributos como los métodos tienen un
calificador de acceso
• Public
– Pueden acceder todos los objetos
• Private
– Sólo puede acceder el código de la misma clase
Seguridad en acceso
• Protected
– Sólo puede acceder el código de la misma clase, de
subclases o de clases en el mismo paquete
• Package protected
– Sólo puede acceder el código de la misma clase o de
clases en el mismo paquete
accesores
Casting
• Cambiar el tipo de un objeto
• No es necesario cuando es “hacia arriba”
• Obligatorio cuando es “hacia abajo”
– Se comprueba en tiempo de ejecución
Casting
Una clase que no se puede instanciar (es decir, sobre la cual no se puede usar
“new”). Pero se puede obtener clases derivada y esas ser instanciarlas.
• Sintaxis
• Motivación
.
– Garantiza que todas las subclases tendran ciertos métodos
– Permite hacer collección de tipos mezclados.
Clase Abstracta: Problema
• Usted tiene
• Objetivo
double sum = 0;
• Synchronized
– Coloca una cerradura (lock) sobre una sección
del código o de un método.
• Solamente un hilo (thread) puede acceder el código a
la vez
Otros modificadores
volatile
─ Garantías a otros hilos a ver los cambios en la variable
transient
– Variables que no son almacenadas en objetos serialized
native
• JavaDoc
Usado para generar documentación en línea
javadoc Foo.java Bar.java (o *.java)
JavaDoc Home Page
http://java.sun.com/javase/6/docs/technotes/tools/windows/javadoc.html
Arrays
• Colección de elementos del mismo tipo
• <tipo> <nombre>[]
– int precios[];
• Inicialización:
<var> = new <tipo>[<num>]
– precios = new int[80] //array de 80 precios
– bicicletas = new Bicicletas[10];
Arrays
• Si los elementos del array son tipos primitivos, se
crean y se inicializan a 0
• Si los elementos del array son tipos referencia
(Clases e Interfaces), sólo se reserva espacio para
los punteros
• Deberemos crear los objetos uno a uno para el
array (con el operador new)
Arrays
• Obtener el valor:
<nombre>[<posición>]
– int a = precios[8]
• Guardar valor:
<nombre>[<posición>] = valor
– precios[6] = 50;
Arrays multidimensionales
• <tipo> <nombre>[][]...
– int precios[][];
• Inicialización:
<var> = new <tipo>[<num>][<num>]...
– precios = new int[80][40] //array de 80x40
Arrays
• Obtener el valor:
<nombre>[<posición>][<posición>]
– int a = precios[8][10]
• Guardar valor:
<nombre>[<pos>][<pos>] = valor
– precios[6][12] = 50;
Arrays
• Los arrays no son dinámicos
– Tienen tantos elementos como se indique al crearlo y
no pueden cambiar
• Los arrays van desde 0 hasta tam – 1
• Para saber el tamaño: array.length
• Si te pasas de índice, excepción
– ArrayIndexOutOfBoundsException
arrays
Arrays
String[] ciudades = {
"Madrid", "Barcelona", "Bilbo", "Donosti",
"Gasteiz", "Iruña"
};
Vectores
Iteradores
• Clase Iterator
– En paquete java.util
• Permite recorrer secuencialmente el contenido de
un vector
• hasNext()
• next()
Vectores
Cadenas de caracteres
• Java proporciona una clase
– String
• Los literales cadena: “Hola a todos”
• Se pueden asignar cadenas a variables
directamente
– String hola = “Hola mundo”;
Cadenas de caracteres
• El operador '+' concatena cadenas
– “hol” + “a Mundo”: “hola Mundo”
– String a = “Hola”;
String b = “Mundo”;
String c = a + ' ' + b; // “Hola Mundo”
• Algunos métodos de la clase String
– length()
– equals()
Cadenas de caracteres
• El método toString()
• Definido en Object
– Da el nombre de la clase y la posición de memoria del
objeto
• Se puede redefinir para que devuelva lo que
queramos
ToString