Java Clases y objetos 1
Java: Clases y Objetos
Java Clases y objetos 2
ClasesLa unidad fundamental de programación en Java es la claseUn programa Java está formado por un conjunto de clasesUna 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)
Java Clases y objetos 3
ClasesCada 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
Java Clases y objetos 5
Definición de una clase[Modificadores] class NombreClase [ extends SuperClase] {
// definición de los atributos de la clasetipo1 identificador1;tipo2 identificador2;
……….…………….// definición de los métodos de la clasetipoDevuelto 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 clasetipo1 identificador1;tipo2 identificador2;
……….…………….// definición de los métodos de la clasetipoDevuelto 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
Java Clases y objetos 7
Datos de una clasepublic 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
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
Java Clases y objetos 11
Variables, objetos y referencias
La declaración de tipos primitivos reserva memoriaLa 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
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 referenciaRectangulo rect;rect = new Rectangulo();Rectangulo otroRect;otroRect = rect;// otroRect se refiere al mismo // rectangulo que rect
int num = 5;// crea una referenciaRectangulo rect;rect = new Rectangulo();Rectangulo otroRect;otroRect = rect;// otroRect se refiere al mismo // rectangulo que rect
num 5
rect
otroRect
Java Clases y objetos 15
Asignación
int i =10;int j =i;
Employee e = new Employee e = new Employee e = new Employee e = new Employee()Employee()Employee()Employee()
Employee x = e;Employee x = e;Employee x = e;Employee x = e;
Employee e Employee xcopiala referencia
int i copia
int j 10 10
Por valor
Por Referencia
Java Clases y objetos 16
ObjetosPodemos instanciar varios objetos de una clase
Los métodos disponibles son los mismos
sendJunkMailTo
getName setName
Mrs. Edna Smith12 Acacia Avenue
sendJunkMailTo
getName setName
Mr. J McDonald14 High Street
sendJunkMailTo
getName setName
Mrs. T Hughes27 Fern Cresent
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 0long 0Lfloat 0.0fdouble 0.0dchar '\u0000' (null)boolean falsetipos 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;
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 miembropublic 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 miembropublic 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
}
Java Clases y objetos 21
Declaración de métodos
Sintaxis
// calcula la superficie y la devuelve como un número enteroint 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 enteroint 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);
Java Clases y objetos 23
Llamada a los métodospublic 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 1Crear clase RectanguloAñadir datos, x, y, ancho, alto de tipo intAñadir métodos dameArea() e imprime()Instanciar un objeto y que se imprima
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()
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 datosComo 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.
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.
Java Clases y objetos 31
Ejercicio 1Datos privadosCrear métodos accesores y mutadores públicosAncho y alto no deben ser negativos
Java Clases y objetos 32
Ejercicio 1
Java Clases y objetos 33
Ejercicio 1Comprobar 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
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
Java Clases y objetos 37
Constructorespublic 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 );………….
}}
Java Clases y objetos 39
ConstructoresPueden 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
Constructorespublic 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"); }
}
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 thisclass 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; }
….…..…..
Java Clases y objetos 43
Referencia a objeto thispublic 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 1Crear varios constructoresInstanciar un rectángulo usando un constructor no por defecto
Java Clases y objetos 45
El constructor por defecto
Existe para cualquier clasePermite 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
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 finalLos 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.
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.
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.
Java Clases y objetos 53
Métodos (static) de la clasepublic 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
Java Clases y objetos 55
Ejercicio 1Añadir entero estático para llevar un
contador de Rectángulos instanciados
Java Clases y objetos 56
JavadocJavadoc.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/
Java Clases y objetos 57
Ejercicio JavadocComentar los métodos públicos /**...*/
Java Clases y objetos 58
Ejercicio JavadocGenerar la documentación de la clase
Rectángulo con javadoc
Java Clases y objetos 59
Ejercicio JavadocSe 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 JavadocAbrir Rectangulo.html generado en un
navegador (como internet explorer)
Java Clases y objetos 61
Ficheros .jarLos 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 .jarCrear un .jar ejecutable de la clase
Rectangulo
Java Clases y objetos 63
Ejercicio .jarDeterminar clases y destino del .jar
Java Clases y objetos 64
Ejercicio .jarDeterminar clase ejecutable como
aplicación (debe tener método main)
Java Clases y objetos 65
Ejecutar .jarSi el ejecutable del .jar es de clases gráficas, se
abre con doble clickSi 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 , instanciarobjetos, añadirlos como dato, heredar, etc.
Java Clases y objetos 66
DeprecationEl 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
Java Clases y objetos 67
La máquina virtual de JavaSTATIC ( variables de clase)
Monticulo (HEAP) (instance variables)
Pila (STACK) (local variables)
Java Exam Question
ExamInstance
QuestionInstance
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
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ángulootroRect = 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ángulootroRect = 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 finalizadoresJava 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
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ónDefine 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 reducidaAdemá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/bb. 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 elresultado en la fracción que recibe el mensajee. boolean equals(Fraccion s), que averigua si dos fracciones son igualesf. 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 elresultado en la fracción que recibe el mensaje
Java Clases y objetos 73
Ejercicio 2: simplificar Fracción
Java Clases y objetos 74
Ejercicio 2: constructores Fracción
Java Clases y objetos 75
Ejercicio: operaciones con Fracción
Java Clases y objetos 76
Ejercicio 3: Datos no básicosDefine 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ángulob. 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 unadistancia deltaX horizontalmente y otra distancia deltaY verticalmented. boolean estaDentro(Punto p), que averigua si p está dentro delrectángulo que recibe el mensaje
Java Clases y objetos 77
Ejercicio 3: clase Punto
Java Clases y objetos 78
Ejercicio 3: clase Rect