1. Java Clases y objetos 1
Java: Clases y Objetos
Java Clases y objetos 2
Clases
La unidad fundamental de programación en Java
es la clase
Un programa Java está formado por un conjunto
de clases
Una clase es una “plantilla” que describe un
conjunto de objetos con atributos y
comportamiento similares
Un programa Java en ejecución crea y manipula
(mediante llamadas a métodos) objetos concretosobjetos concretos
(ejemplares o instancias)
2. Java Clases y objetos 3
Clases
Cada objeto es un ejemplar de una clase
Cuando se invoca un método de un objeto, se
mira en el código de su clase las acciones a
ejecutar
Un objeto puede usar otros para realizar su
trabajo
Java Clases y objetos 4
Clases
Una definición de clase comprende:
Cabecera
Campos o atributos:
Variables
Constantes
Métodos:
Funciones
Constructores
Bloques de inicialización static
Finalizador
estado del objeto
comportamiento
3. Java Clases y objetos 5
Definición de una clase
[Modificadores] class NombreClase [extends SuperClase] {
// definición de los atributos de la clase
tipo1 identificador1;
tipo2 identificador2;
……….…………….
// definición de los métodos de la clase
tipoDevuelto nombreMetodo1 (listaParametros) {
//instrucciones del método1
}
tipoDevuelto nombreMetodo2 (listaParametros) {
//instrucciones del método2
}
……….…………….
}
[Modificadores] class NombreClase [extends SuperClase] {
// definición de los atributos de la clase
tipo1 identificador1;
tipo2 identificador2;
……….…………….
// definición de los métodos de la clase
tipoDevuelto nombreMetodo1 (listaParametros) {
//instrucciones del método1
}
tipoDevuelto nombreMetodo2 (listaParametros) {
//instrucciones del método2
}
……….…………….
}
Java Clases y objetos 6
Modificadores de clase
Modificadores:
public class NombreClase // visible fuera del
paquete
Normalmente la clase se almacena en un fichero
NombreClase.java
En un fichero .java puede haber como mucho una clase
public
class C extends superclase // la clase hereda de
otra
Sólo herencia simple (una sóla superclase)
Si no aparece extends la clase definida hereda (es una
subclase) de un objeto general del sistema llamada
Object
4. Java Clases y objetos 7
Datos de una clase
public class Rectangulo{
int x;
int y;
int ancho;
int alto;
// faltan los métodos de Rectángulo
}
public class Rectangulo{
int x;
int y;
int ancho;
int alto;
// faltan los métodos de Rectángulo
}
Object
Rectangulo
Java Clases y objetos 8
Variables, objetos y
referencias
Una variable de un determinado tipo
simple (int, float, boolean..)proporciona
Capacidad para almacenar un valor simple
Un conjunto predifinido de operadores
5. Java Clases y objetos 9
Variables, objetos y
referencias
Un objeto de una determinada clase
proporciona
Capacidad para almacenar diversos valores
(atributos)
Define su propio conjunto de métodos para operar
sobre las instancias o ejemplares de esa clase
Cuando se declara un objeto de una clase se crea
una referencia a una instancia de dicha clase
Incialmente toma el valor null porque no existe objeto al
que referirse
No son punteros con los que se pueda trabajar
directamente
Java Clases y objetos 10
int num = 5;
Rectangulo rect;
num 5
rect null
Variables, objetos y
referencias
6. Java Clases y objetos 11
Variables, objetos y
referencias
La declaración de tipos primitivos reserva
memoria
La declaración de tipos no primitivos no
reserva memoria.
Los objetos declarados no son objetos, sino
punteros a objetos.
Antes de utilizar un objeto dentro del
programa es necesario reservar el espacio
necesario
Java Clases y objetos 12
Creación de instancias
(objetos)
Operador new
Crea una instancia o ejemplar de la
clase indicada y devuelve una
referencia a dicho objeto
Se reserva espacio de memoria
para los datos del objeto
Un ejemplar es una copia individual de
la plantilla de la clase que tiene su
propio conjunto de datos
7. Java Clases y objetos 13
Creación de instancias
(objetos)
Clase
Rectángulo
Rectángulo e = new Rectángulo()
e
Referencia al
objeto
Instancia de Rectángulo
Java Clases y objetos 14
x
y
ancho
alto
Creación de instancias
(objetos)
int num = 5;
// crea una referencia
Rectangulo rect;
rect = new Rectangulo();
Rectangulo otroRect;
otroRect = rect;
// otroRect se refiere al
mismo
// rectangulo que rect
int num = 5;
// crea una referencia
Rectangulo rect;
rect = new Rectangulo();
Rectangulo otroRect;
otroRect = rect;
// otroRect se refiere al
mismo
// rectangulo que rect
num 5
rect
otroRect
8. Java Clases y objetos 15
Asignación
int i =10;
int j =i;
Employee e = newEmployee e = newEmployee e = newEmployee e = new
Employee()Employee()Employee()Employee()
Employee x = e;Employee x = e;Employee x = e;Employee x = e;
Employee e Employee x
copia
la referencia
int i
copia
int j10 10
Por valor
Por Referencia
Java Clases y objetos 16
Objetos
Podemos instanciar varios objetos de una clase
Los métodos disponibles son los mismos
sendJunkMailTo
getName setName
Mrs. Edna Smith
12 Acacia Avenue
sendJunkMailTo
getName setName
Mr. J McDonald
14 High Street
sendJunkMailTo
getName setName
Mrs. T Hughes
27 Fern Cresent
9. Java Clases y objetos 17
Creación de instancias o
ejemplares
Cuando se crea un objeto, las variables miembro (atributos)
se inicializan al reservar memoria con los siguientes valores:
byte, short, int 0
long 0L
float 0.0f
double 0.0d
char 'u0000' (null)
boolean false
tipos de referencia null
Las variables locales a un método se deben inicializar. Éstas
no se inicializan automáticamente.
Java Clases y objetos 18
Acceso a los atributos de un
objeto
Desde un objeto se puede acceder a los
atributos o miembros con la siguiente sintaxis
referenciaObjeto.atributo;
10. Java Clases y objetos 19
Acceso a los atributos de un
objeto
public class Rectangulo {
int x;
int y;
int ancho;
int alto;
//faltan las funciones miembro
public static void main(String args[ ]) {
Rectangulo rect;
rect = new Rectangulo();
rect.x = 5;
rect.y = 7;
rect.ancho = 4;
rect.alto = 3;
System.out.println( "x = " + rect.x + ”
y = " + rect.y );
System.out.println( "ancho = " + rect.ancho
+ ” alto = " + rect.alto ); } }
public class Rectangulo {
int x;
int y;
int ancho;
int alto;
//faltan las funciones miembro
public static void main(String args[ ]) {
Rectangulo rect;
rect = new Rectangulo();
rect.x = 5;
rect.y = 7;
rect.ancho = 4;
rect.alto = 3;
System.out.println( "x = " + rect.x + ”
y = " + rect.y );
System.out.println( "ancho = " + rect.ancho
+ ” alto = " + rect.alto ); } }
Java Clases y objetos 20
Declaración de métodos
Funciones declaradas en la clase y que
determinan su comportamiento
tipoDevuelto nombreMetodo (listaParametros) {
//instrucciones del método
}
11. Java Clases y objetos 21
Declaración de métodos
Sintaxis
// calcula la superficie y la devuelve como un
número entero
int calcularSuperficie(){
int area;
area = ancho * alto;
return area;
}
// muestra los valores pero no devuelve nada
void mostrarValores(){
System.out.println( "x = " + x + " y = " + y );
System.out.println( "ancho = " + ancho + " alto
= " + alto );
}
// calcula la superficie y la devuelve como un
número entero
int calcularSuperficie(){
int area;
area = ancho * alto;
return area;
}
// muestra los valores pero no devuelve nada
void mostrarValores(){
System.out.println( "x = " + x + " y = " + y );
System.out.println( "ancho = " + ancho + " alto
= " + alto );
}
Java Clases y objetos 22
Llamada a los métodos
La invocación a los métodos desde una
instancia se hace mediante el operador de
acceso ( . )
referenciaObjeto.nombreMetodo(listaArgumentos);
12. Java Clases y objetos 23
Llamada a los métodos
public class Rectangulo {
int x; ………..
int calcularSuperficie(){ .……... }
void mostrarValores(){………….}
public static void main(String args[ ]) {
Rectangulo rect;
rect = new Rectangulo();
rect.x = 5; rect.y = 7; rect.ancho = 4;
rect.alto = 3;
int area = rect.calcularSuperficie();
rect.mostrarValores();
System.out.println( "Superficie: " + area );
System.out.println( "x = " + rect.x + ” y = " +
rect.y );
System.out.println( "ancho = " + rect.ancho + ”
alto = " + rect.alto ); }
}
public class Rectangulo {
int x; ………..
int calcularSuperficie(){ .……... }
void mostrarValores(){………….}
public static void main(String args[ ]) {
Rectangulo rect;
rect = new Rectangulo();
rect.x = 5; rect.y = 7; rect.ancho = 4;
rect.alto = 3;
int area = rect.calcularSuperficie();
rect.mostrarValores();
System.out.println( "Superficie: " + area );
System.out.println( "x = " + rect.x + ” y = " +
rect.y );
System.out.println( "ancho = " + rect.ancho + ”
alto = " + rect.alto ); }
}
Java Clases y objetos 24
Ejercicio 1
Crear clase
Rectangulo
Añadir datos, x, y,
ancho, alto de tipo
int
Añadir métodos
dameArea() e
imprime()
Instanciar un
objeto y que se
imprima
13. Java Clases y objetos 25
Parámetros
El lenguaje Java sólo pasa los argumentos de
tipos básicos por valor.
Cuando se pasa un objeto instanciado como
argumento a un método, el valor del
argumento es el puntero al objeto.
Los contenidos del objeto se pueden cambiar
dentro del método al que se ha llamado (los
objetos se pasan por referencia), pero el
puntero no se puede cambiar.
Java Clases y objetos 26
Ocultación de datos
cont : int
quita()cima()
esVacio()
métodos
públicos
métodos
privados
rep : int array
pon()
14. Java Clases y objetos 27
Ocultación de datos
La palabra reservada private permite
una accesibilidad total desde cualquier
método de la clase, pero no desde
fuera de esta.
Java Clases y objetos 28
Ocultación de datos
Como los datos son inaccesibles, la única
manera de leer o escribirlos es a través
de los métodos de la clase. Esto
proporciona consistencia y calidad.
15. Java Clases y objetos 29
Ocultación de datos
Regla: definir datos privados y métodos
accesores y modificadores públicos
Java Clases y objetos 30
Encapsulación
Ocultar los detalles de implementación de
la clase.
Fuerza al usuario a utilizar una interfaz
para acceder a los datos.
Hace que el código sea más fácil de
mantener.
16. Java Clases y objetos 31
Ejercicio 1
Datos privados
Crear métodos
accesores y
mutadores
públicos
Ancho y alto
no deben ser
negativos
Java Clases y objetos 32
Ejercicio 1
17. Java Clases y objetos 33
Ejercicio 1
Comprobar que desde otra clase no se ven los
datos y métodos privados
Java Clases y objetos 34
Acceso a clases
public privatepackageprotected
Al menos una clase o interface de una
unidad de compilación (package) debe ser
public
Al menos una clase o interface de una
unidad de compilación (package) debe ser
public
18. Java Clases y objetos 35
Sobrecarga de métodos
Se puede utilizar:
public void print(int i)
public void print(float i)
public void print(String i)
La lista de argumentos tiene que ser diferente.
El tipo que devuelve puede ser diferente.
Java Clases y objetos 36
Constructores
Método que inicializa el objeto en su creación
Se llama automáticamente cuando se crea un
objeto
Su nombre es igual que el de la clase y no tiene
tipo de retorno
Java proporciona un constructor sin parámetros
por defecto que deja de estar disponible cuando
se añade algún constructor
19. Java Clases y objetos 37
Constructores
public class Rectangulo{
int x;
….….…..
// constructor
public Rectangulo(int x1, int y1, int
w, int h){
x=x1;
y=y1;
ancho=w;
alto=h; }
….…..…..
public class Rectangulo{
int x;
….….…..
// constructor
public Rectangulo(int x1, int y1, int
w, int h){
x=x1;
y=y1;
ancho=w;
alto=h; }
….…..…..
Java Clases y objetos 38
Constructores
public static void main(String args[ ]) {
Rectangulo rect;
rect = new Rectangulo(5, 7, 4, 3);
int area=rect.calcularSuperficie();
rect.mostrarValores();
System.out.println( "Superficie: "
+ area );
………….
}
}
public static void main(String args[ ]) {
Rectangulo rect;
rect = new Rectangulo(5, 7, 4, 3);
int area=rect.calcularSuperficie();
rect.mostrarValores();
System.out.println( "Superficie: "
+ area );
………….
}
}
20. Java Clases y objetos 39
Constructores
Pueden sobrecargarse
Una clase puede tener más de un constructor
Si no se declara ninguno se hereda el de la superclase
(o el de Object)
Se puede crear un objeto con distintos tipos de
parámetros
Pueden llamar al constructor del padre
super(argumentos);
Debe ser la primera instrucción del constructor
o a otros constructores de la misma clase
this(argumentosPorDefecto);
Java Clases y objetos 40
Constructores
public class Empleado {
private String nombre;
private int salario;
public Empleado(String n, int s){
nombre = n;
salario = s; }
public Empleado(String n){
this (n,0); }
public Empleado( ){
this ("Desconocido"); }
}
21. Java Clases y objetos 41
Referencia a objeto this
Referencia especial que utilizada dentro
de un método de cualquier clase se
refiere a la instancia actual
Permite parámetros con igual nombre que
atributos
Posibilita la llamada a otros constructores
Java Clases y objetos 42
Referencia a objeto this
class Rectangulo{
int x;
….….…..
int ancho;
int alto;
// constructor
Rectangulo(int x1, int y1, int w, int h){
x=x1; y=y1; ancho=w; alto=h; }
// otro constructor polimorfico
Rectangulo(int ancho, int alto){
x=0; y=0;
this.ancho= ancho;
this.alto= alto; }
….…..…..
class Rectangulo{
int x;
….….…..
int ancho;
int alto;
// constructor
Rectangulo(int x1, int y1, int w, int h){
x=x1; y=y1; ancho=w; alto=h; }
// otro constructor polimorfico
Rectangulo(int ancho, int alto){
x=0; y=0;
this.ancho= ancho;
this.alto= alto; }
….…..…..
22. Java Clases y objetos 43
Referencia a objeto this
public static void main(String args[ ]) {
Rectangulo rect;
rect = new Rectangulo(5, 7, 4, 3);
rect.imprime();
Rectangulo nuevo;
nuevo = new Rectangulo(6, 9);
nuevo.imprime();
………….
}
}
public static void main(String args[ ]) {
Rectangulo rect;
rect = new Rectangulo(5, 7, 4, 3);
rect.imprime();
Rectangulo nuevo;
nuevo = new Rectangulo(6, 9);
nuevo.imprime();
………….
}
}
Java Clases y objetos 44
Ejercicio 1
Crear varios
constructores
Instanciar un
rectángulo
usando un
constructor no
por defecto
23. Java Clases y objetos 45
El constructor por defecto
Existe para cualquier clase
Permite crear una instancia de un objeto
con el método
new Xxx().
La definición de un constructor invalida al
constructor por defecto.
Java Clases y objetos 46
Ejercicio 1
24. Java Clases y objetos 47
La palabra clase final
Si se aplica esta palabra a una
clase, esa clase no puede
tener subclases.
Por ejemplo, la clase
java.lang.String, es una
clase final.
Java Clases y objetos 48
La palabra clase final
Los métodos marcados con esta
palabra no se pueden
sobreescribir.
Los métodos marcados como estáticos
o privados son finales
automáticamente.
Si una variable se marca con la
palabra reservada final, se
convierte en una constante. Si se
intenta cambiar el valor de
cualquier variable final,se
produce un error.
25. Java Clases y objetos 49
Variables (static) de la clase
Pertenece a todas las instancias de la
clase.
Puede estar como pública o como
privada.
Si está marcada como pública, se puede
acceder desde fuera de la clase, sin
necesidad de una instancia de la clase.
Java Clases y objetos 50
Variables (static) de la clase
public class Count {
private int serialNumber;
private static int counter = 0;
public Count () {
counter++;
serialNumber = counter;
}
}
Se le suele llamar variable clase.
26. Java Clases y objetos 51
Variables (static) de la clase
Desde fuera de la clase se puede acceder
a una variable static si no se marca
como private (que es lo habitual).
Las variables de tipo static son, en
algunos aspectos, parecidas a las
variables globales de algunos lenguajes.
Las instancias de la clase comparten la
variable static
Java Clases y objetos 52
Métodos (static) de la clase
Un método static se puede llamar sin
necesidad de una instancia de la clase a
la que pertenecen.
Con los métodos estáticos no se puede
utilizar el puntero this, ya que no se
necesitan instancias.
27. Java Clases y objetos 53
Métodos (static) de la clase
public class GeneralFunction {
public static int add(int x, int y) {
return x + y; }
}
public class UseGeneral {
public void método () {
int a = 9;
int b = 10;
int c = GeneralFunction.add(a, b);
System.out.println ("add devuelve: "
+ c"; }
}
Java Clases y objetos 54
Métodos (static) de la clase
Los métodos estáticos, sólo pueden acceder a
sus propios argumentos y a las variables
estáticas.
El método main() es estático, porque la
aplicación tiene que acceder a él para
ejecutarse, antes de que realice cualquier
instancia.
Los métodos estáticos no se pueden
sobreescribir
28. Java Clases y objetos 55
Ejercicio 1
Añadir entero estático para llevar un
contador de Rectángulos instanciados
Java Clases y objetos 56
Javadoc
Javadoc.exe, incluido en el JDK, genera
documentos html con la documentación de
una clase.
Podemos describir datos y métodos: /** ...*/
La documentación de los packages de clases e
interfaces estándar están hechas con javadoc,
se pueden descargar de internet o verlas
directamente en internet con un navegador
http://download.oracle.com/javase/7/
docs/api/
29. Java Clases y objetos 57
Ejercicio Javadoc
Comentar los métodos públicos /**...*/
Java Clases y objetos 58
Ejercicio Javadoc
Generar la documentación de la clase
Rectángulo con javadoc
30. Java Clases y objetos 59
Ejercicio Javadoc
Se debe indicar dónde se encuentra javadoc.exe
del JDK y la visibilidad de lo que se quiere
documentar
Java Clases y objetos 60
Ejercicio Javadoc
Abrir Rectangulo.html generado en un
navegador (como internet explorer)
31. Java Clases y objetos 61
Ficheros .jar
Los Ficheros con extensión .jar son ficheros
comprimidos (se abren con winzip, winrar..)
de bytecode de clases (ficheros .class).
Se pueden añadir a nuestros proyectos para
utilizar las clases.
Existen millones de .jars en internet, que se
pueden utilizar y ejecutar.
Si alguna clase tiene método main, el .jar se
puede crear como ejecutable.
Para ejecutarlo, se necesita el JRE (incluido en el
JDK)
Java Clases y objetos 62
Ejercicio .jar
Crear un .jar ejecutable de la clase
Rectangulo
32. Java Clases y objetos 63
Ejercicio .jar
Determinar clases y destino del .jar
Java Clases y objetos 64
Ejercicio .jar
Determinar clase ejecutable como
aplicación (debe tener método main)
33. Java Clases y objetos 65
Ejecutar .jar
Si el ejecutable del .jar es de clases gráficas, se
abre con doble click
Si es de consola, se ejecuta con la opción –jar
del intérprete java
El .jar tambien se puede añadir a un proyecto
como jar externo y utilizarlo para , instanciar
objetos, añadirlos como dato, heredar, etc.
Java Clases y objetos 66
Deprecation
El término "deprecation" se utiliza para indicar que
métodos y constructores de clases están obsoletos.
Tanto métodos como constructores obsoletos son
reemplazados por métodos, que sigue una
conversión de nombres estandarizada.
Al migrar código entre diferentes versiones de JDK,
debemos compilarlo con el flag -deprecation:
javac -deprecation MiFichero.java
34. Java Clases y objetos 67
La máquina virtual de Java
STATIC ( variables de
clase)
Monticulo (HEAP)
(instance variables)
Pila (STACK) (local
variables)
Java Exam Question
Exam
Instance
Question
Instance
main()
e
q
setAnswer()
aQuestion
Java Clases y objetos 68
La memoria reservada que no se va a
utilizar más, se tiene que liberar.
En otros lenguajes (como C++, PASCAL), la
liberación de memoria es responsabilidad del
programador.
El lenguaje Java proporciona un thread, que
rastrea las operaciones de reserva de
memoria.
El Garbage Collector:
Verifica y libera memoria que no se
necesita.
Se ejecuta automáticamente.
El recolector de basuras
35. Java Clases y objetos 69
Recolección automática de
memoria
rect
otroRect
Rectangulo rect = new Rectangulo();
Rectangulo otroRect =new Rectangulo();
// se pierde la referencia al primer rectángulo
otroRect = rect;
// este primer rectángulo pasa a ser candidato a recolección automática
Rectangulo rect = new Rectangulo();
Rectangulo otroRect =new Rectangulo();
// se pierde la referencia al primer rectángulo
otroRect = rect;
// este primer rectángulo pasa a ser candidato a recolección automática
alto
x
y
ancho
alto
x
y
ancho
rect
otroRect
alto
x
y
ancho
alto
x
y
ancho
Memoria que será recuperada
por el recolector automático
Java Clases y objetos 70
Métodos finalizadores
Java tiene recolector de basura
Un objeto se elimina cuando se deja de hacer
referencia a él
No hay que eliminar los objetos explícitamente
Al destruir un objeto se invoca el método
finalize
Para hacer limpieza de recursos no Java (recursos
externos)
Por ejemplo: cerrar conexiones, cerrar ficheros,
registrar algún tipo de resultado, etc.
Al acabar un programa, se ejecuta finalize para
todos los objetos
36. Java Clases y objetos 71
protected void finalize() throws
Throwable {
super.finalize();
// conviene ponerlo siempre
if ( archivo != null )
// si el archivo no se ha cerrado
{ archivo.close(); archivo = null; }
}
protected void finalize() throws
Throwable {
super.finalize();
// conviene ponerlo siempre
if ( archivo != null )
// si el archivo no se ha cerrado
{ archivo.close(); archivo = null; }
}
Métodos finalizadores
Java Clases y objetos 72
Ejercicio 2: clase Fracción
Define la clase Fracción para tratar con números racionales de la forma a/b,
donde a y b son enteros, b ≠0.
La fracción debe mantenerse siempre en forma reducida
Además del constructor, la clase debe incluir los siguientes métodospúblicos:
a. void imprimeFraccion(), que imprime un número racional en su forma
fraccionaria a/b
b. double toReal(), que calcula el número real representado por la fracción
c. void suma(Fraccion s), que calcula la suma de dos racionales y deja el
resultado en la fracción que recibe el mensaje
e. boolean equals(Fraccion s), que averigua si dos fracciones son iguales
f. boolean menor(Fraccion s), que averigua si s es menor que la fracción que
recibe el mensaje.
c. void suma(Fraccion s), que calcula la suma de dos racionales y deja el
resultado en la fracción que recibe el mensaje
37. Java Clases y objetos 73
Ejercicio 2: simplificar Fracción
Java Clases y objetos 74
Ejercicio 2: constructores Fracción
38. Java Clases y objetos 75
Ejercicio:
operaciones
con
Fracción
Java Clases y objetos 76
Ejercicio 3: Datos no básicos
Define la clase Punto para manejar puntos con coordenadas
enteras. Define constructoras para esta clase, y métodos de acceso y
mutación.
Define la clase Rect para manejar rectángulos. Un rectángulo
viene dado por las coordenadas enteras de los vértices superior
izquierdo e inferior derecho.
Define las siguientes constructoras y métodos para esta clase:
a. Constructora que recibe como parámetros las coordenadas de los
dosvértices que delimitan el rectángulo
b. Constructora que recibe el ancho y el alto del rectángulo, y construye
un rectángulo con el vértice superior izquierdo en el punto (0, 0)
c. void mueve(int deltaX, int deltaY), que mueve un rectángulo una
distancia deltaX horizontalmente y otra distancia deltaY verticalmente
d. boolean estaDentro(Punto p), que averigua si p está dentro del
rectángulo que recibe el mensaje
39. Java Clases y objetos 77
Ejercicio 3: clase Punto
Java Clases y objetos 78
Ejercicio 3:
clase Rect