SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
Tema	
  6.	
  Clases,	
  referencias	
  y	
  objetos	
  
Programación	
  en	
  Lenguaje	
  Java	
  
Michael	
  González	
  Harbour	
  
Mario	
  Aldea	
  Rivas	
  
Departamento	
  de	
  Matemá.cas,	
  
Estadís.ca	
  y	
  Computación	
  
Este	
  tema	
  se	
  publica	
  bajo	
  Licencia:	
  
Crea.ve	
  Commons	
  BY-­‐NC-­‐SA	
  4.0	
  
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 1
UNIVERSIDAD
DE CANTABRIA
Programación en Java
1. Introducción a los lenguajes de programación
2. Datos y expresiones
3. Estructuras algorítmicas
4. Datos Compuestos
5. Entrada/salida
6. Clases, referencias y objetos
• Creación e inicialización de objetos. Tipos primitivos, referencias y objetos.
Comparación de objetos. Recolector de basura. Métodos y campos de clase (o
estáticos). Anidamiento de clases
7. Modularidad y abstracción
8. Herencia y polimorfismo
9. Tratamiento de errores
10 ..., 11 ...
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 2
UNIVERSIDAD
DE CANTABRIA
6.1 Creación e inicialización de objetos
En el lenguaje Java los objetos se crean con el operador new:
UnaClase obj = new UnaClase();
Los constructores son métodos especiales que
• se llaman igual que la clase
• no tienen tipo de retorno
Una clase puede tener varios constructores con diferentes parámetros
public UnaClase() { … }
public UnaClase(int i) { … }
public UnaClase(boolean b, int i) { … }
Si y solo si no definimos constructor, la clase tendrá el constructor por
defecto (constructor sin parámetros que no hace nada)
public UnaClase() {}
Se invoca el CONSTRUCTOR
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 3
UNIVERSIDAD
DE CANTABRIA
Creación implícita de objetos
En unos pocos casos la creación de objetos se realiza sin que el
operador new aparezca explícitamente:
• Creación de strings utilizando un literal de string:
String str = "Hola";
• Concatenación de strings:
String str1 = "Hola";
String str2 = "Adiós";
String str3 = str1 + str2;
1. No son equivalentes desde el punto de vista de la implementación de ambas instrucciones por parte de la máquina virtual (si se tiene curiosidad, buscar
información sobre “String constant pool”).
Equivale1 a:
String str = new String("Hola");
Equivale a:
String str3 = new String("HolaAdiós");
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 4
UNIVERSIDAD
DE CANTABRIA
Creación implícita de objetos (cont.)
• Inicialización de array:
int[] números = {1, 3, 5};
Equivale a:
int[] números = new int[3];
números[0] = 1;
números[1] = 3;
números[2] = 5;
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 5
UNIVERSIDAD
DE CANTABRIA
Inicialización de los atributos
Cuando se crea un objeto sus atributos se inicializan en 3 etapas:
1. Se asigna a cada atributo su valor por defecto
- tipos numéricos (int, double, …): 0 (o 0.0)
- Caracteres (char): carácter nulo
- Booleanos (boolean): false
- Referencias a objetos (String, otras clases): null
2. Si la declaración del atributo contiene un inicializador, éste es eva-
luado y asignado
private int numRuedas = numCoches * 4;
3. Se ejecuta el constructor de la clase, que puede cambiar el valor de
los atributos que desee
Recordar: sólo se inicializan los atributos, las variables locales
de los métodos no son inicializadas por defecto
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 6
UNIVERSIDAD
DE CANTABRIA
Atributos “finales”
Su valor no se puede cambiar después de haber sido inicializados
• pueden inicializarse en la definición del atributo o en el constructor
Ejemplo:
public class Círculo {
public final double PI = 3.14159;
private final double área;
private final double radio;
public Círculo(double radio) {
this.radio = radio;
this.área = PI * radio * radio;
}
… // los demás métodos de la clase no pueden
// cambiar el valor de los atributos finales
Inicialización de “PI”
hay un valor más preciso
de PI en la clase Math
La inicialización de “área”
y “radio” se dejan para el
constructor
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 7
UNIVERSIDAD
DE CANTABRIA
Atributos finales en UML
Se utiliza el modificador {readonly}
public class Círculo {
public final double PI = 3.14159;
private final double área;
private final double radio;
public Círculo(double radio) {
this.radio = radio;
this.área = PI * radio * radio;
}
…
Círculo
+PI: Real {readonly}
-área: Real {readonly}
-radio: Real {readonly}
+ Círculo(radio: Real)
...
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 8
UNIVERSIDAD
DE CANTABRIA
6.2 Tipos primitivos, referencias y
objetos
Tipos primitivos:
• boolean, char, byte, short, int, long, float y double.
• Cuando se declarara una variable de un tipo primitivo el compilador
reserva un área de memoria para ella
• Cuando se asigna un valor, éste es escrito en el área reservada
• La asignación entre variables significa copiar el contenido de una
variable en la otra
int i, j; i X j X
i=16;
j=3;
i 16 j 3
i=j; i 3 j 3
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 9
UNIVERSIDAD
DE CANTABRIA
Tipos primitivos: representación en
memoria
int i, j;
0x1000
0x1004
0x1008
0x2A14
0x2A18
0x2A1C
3 j
i16
i=16;
j=3;
0x1000
0x1004
0x1008
0x2A14
0x2A18
0x2A1C
XXX j
iXXX
0x1000
0x1004
0x1008
0x2A14
0x2A18
0x2A1C
3 j
i3
i=j;
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 10
UNIVERSIDAD
DE CANTABRIA
Referencias y objetos
Cuando se declara una variable “objeto” la situación es diferente
• Si no se usa el operador new sólo se crea una referencia a objeto
• El espacio en memoria del objeto se reserva con el operador new
Complejo c1,c2; c1 X c2 X
c1
:Complejo
r=2.0
i=-3.2
c1=new Complejo(2.0,-3.2);
c2=new Complejo(1.3,2.1);
c2
:Complejo
r=1.3
i=2.1
public class Complejo {
private double r;
private double i;
…
}
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 11
UNIVERSIDAD
DE CANTABRIA
Referencias y objetos (cont.)
Representación en memoria:
Complejo c1;
0x1000
0x1004
0x1008
0x2A14
0x2A18
0x2A1C
c1XXX
0x2A20
0x2A24
0x2A28
c1 = new Complejo(7.2, 2.4);
0x1000
0x1004
0x1008
0x2A14
0x2A18
0x2A1C
c10x00002A18
0x2A20
0x2A24
0x2A28
7.2
2.4
}r
}i
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 12
UNIVERSIDAD
DE CANTABRIA
Referencias y objetos (cont.)
• La asignación entre referencias no copia los objetos
• después de la copia ambas referencias apuntan al mismo objeto (y
los objetos no han sido modificados)
• La comparación entre referencias no compara los contenidos de los
objetos
• en la figura anterior c1==c2 es true
• en la situación de debajo c1==c2 es false
• el método equals permite comparar contenidos (Ver 6.3)
c2=c1;
c1
:Complejo
r=2.0
i=-3.2 c2
:Complejo
r=1.3
i=2.1
c1 c2
:Complejo
r=2.0
i=1.0
:Complejo
r=2.0
i=1.0
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 13
UNIVERSIDAD
DE CANTABRIA
Arrays de tipos primitivos
Java trata los arrays como objetos
• Crear una variable de tipo array sólo crea una referencia
• El espacio en memoria para el array se crea con new
- cuando se trata de un array de un tipo primitivo se crean los elementos
del array
- y se inicializan a sus valores por defecto
int[] a; a X
a = new int[5];
a
0 0 0 0 0
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 14
UNIVERSIDAD
DE CANTABRIA
Arrays de referencias a objetos
• Crear una variable de tipo array de objetos sólo crea la referencia
• Con new se reserva el espacio para el array de referencias
- pero no los objetos a los que apuntarán las referencias
- las referencias se inicializan a su valor por defecto (null)
• Los objetos hay que crearlos posteriormente
Complejo a[]; a X
a=new Complejo[4];
a
null null nullnull
a[1]=new Complejo(2.0,-3.2);
a
null null null
:Complejo
r=2.0
i=-3.2
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 15
UNIVERSIDAD
DE CANTABRIA
Copia y comparación de arrays (y
strings)
Los arrays y los strings son objetos, por consiguiente:
• La asignación sólo copia referencias
• La comparación compara las referencias no los contenidos
- en la figura anterior a1==a2 es true
- en la situación de debajo a1==a2 es false
• Para comparar contenidos debe utilizarse el método equals
a2=a1;
a1
4 -3 0 1
a2
-7 8 2 1-3
a1
4 -3 0 1
a2
4 -3 0 1
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 16
UNIVERSIDAD
DE CANTABRIA
Referencias y clase ArrayList
Un ArrayList almacena referencias a los objetos que “contiene”
• puesto que se implementa utilizando un array
El método equals permite comparar dos ArrayList
• Dos ArrayList son iguales si contienen los mismos elementos en el
mismo orden
ArrayList
-elementos: E[]
-numEle: Integer
...
...
E
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 17
UNIVERSIDAD
DE CANTABRIA
Ejemplo ArrayList
ArrayList<Complejo> a = new ArrayList<Complejo>();
a.add(new Complejo(1, 2));
a.add(new Complejo(3, 4));
a
:Complejo
r=1.0
i=2.0
elementos
:ArrayList
X ...
numEle = 2
:Complejo
r=3.0
i=4.0
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 18
UNIVERSIDAD
DE CANTABRIA
Ejemplo ArrayList (cont.)
Complejo c1 = a.get(1);
c1.r = 5;
a
:Complejo
r=1.0
i=2.0
elementos
:ArrayList
X ...
numEle = 2
:Complejo
r=3.0
i=4.0
c1
a
:Complejo
r=1.0
i=2.0
elementos
:ArrayList
numEle = 2
:Complejo
r=5.0
i=4.0
c1
X ...
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 19
UNIVERSIDAD
DE CANTABRIA
6.3 Comparación de objetos
La comparación (ref1==ref2) compara referencias
• si queremos comparar los contenidos de los objetos debemos
utilizar el método equals
Ejemplo: método equals para la clase Coordenada:
public class Coordenada {
private int x; // coordenada en el eje x
private int y; // coordenada en el eje y
…
public boolean equals(Object obj) {
Coordenada c = (Coordenada) obj;
return c.x == x && c.y == y;
}
}
Veremos una definición más
completa del método equals
cuando veamos la herencia
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 20
UNIVERSIDAD
DE CANTABRIA
Ejemplo de uso del método equals
:Coordenada
x = 2
y = -3
:Coordenada
x = 10
y = 4
:Coordenada
x = 2
y = -3
if (c1.equals(c1)) {
…
}
if (c1.equals(c4)) {
…
}
if (c1.equals(c2)) {
…
}
if (c1.equals(c3)) {
…
}
c1
c2
c3
c4
false
true
true
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 21
UNIVERSIDAD
DE CANTABRIA
Comparación de contenidos de arrays y
strings
La clase String dispone del método equals:
String str1 = "hola", str2 = "hola";
if (str1.equals(str2)) {
System.out.println("Los strings son iguales");
}
Para comparar arrays existe el método equals de la clase Arrays:
import java.util.Arrays;
int[] a1= {4, -3, 0, 1}, a2= {4, -3, 0, 1};
if (Arrays.equals(a1, a2)) {
System.out.println("'a1' es igual a 'a2'");
}
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 22
UNIVERSIDAD
DE CANTABRIA
6.4 Recolector de basura
La memoria ocupada por un objeto se reserva con el operador new
• en Java no existe ningún operador para liberar la memoria de un
objeto que no se va a usar más
El Recolector de Basura realiza la liberación de memoria de forma
automática
• el recolector va contando el número de referencias que “apuntan” a
cada objeto
• cuando un objeto no está apuntado por ninguna referencia, se
convierte en “basura” (no va a poder ser utilizado nunca más)
• en los periodos de inactividad del sistema, el recolector reincorpora la
“basura” a la memoria disponible
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 23
UNIVERSIDAD
DE CANTABRIA
Ejemplo de generación de basura
Complejo c1 = new Complejo(2.0, 3.2);
c1
Complejo c2 = new Complejo(1.3, 2.1);
c2
c2 = c1;
c1 c2
Se convierte en basura al no estar
apuntado por ninguna referencia
:Complejo
r=2.0
i=3.2
:Complejo
r=1.3
i=2.1
:Complejo
r=2.0
i=3.2
:Complejo
r=1.3
i=2.1
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 24
UNIVERSIDAD
DE CANTABRIA
6.5 Métodos y campos de clase: estáticos
Una clase puede tener atributos y métodos estáticos:
• no pertenecen a los objetos de la clase, sino a la clase misma
• si son atributos, sólo existe uno por clase, no uno por objeto
- la vida es la de la clase, y no la del objeto
• si son métodos, sólo pueden acceder a los objetos pasados como
parámetros y a campos y métodos estáticos
• nos referimos a ellos como NombreClase.miembroEstático
public class Cosa {
private static int st;
private int i;
…
}
:Cosa
i=2
:Cosa
i=-12
:Cosa
i=125
:Cosa
i=-45
:Cosa
i=23
Cosa.st=10
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 25
UNIVERSIDAD
DE CANTABRIA
Ejemplo de método de clase
public class Vector2D {
// atributos
private double x;
private double y;
/** Constructor */
public Vector2D(double x, double y) {
this.x = x;
this.y = y;
}
Vector2D
-x: double
-y: double
+Vector2D(x:double, y: double)
+suma(v: Vector2D): void
+suma(v1: Vector2D,
v2: Vector2D): Vector2D
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 26
UNIVERSIDAD
DE CANTABRIA
Ejemplo de método de clase (cont.)
/**
* Método NO estático: Suma el vector v con
* el vector actual
*/
public void suma(Vector2D v){
x = x + v.x;
y = y + v.y;
}
/**
* Método ESTÁTICO: Retorna el vector
* resultado de v1+v2
*/
public static Vector2D suma(Vector2D v1,
Vector2D v2) {
return new Vector2D(v1.x+v2.x, v1.y+v2.y);
}
}
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 27
UNIVERSIDAD
DE CANTABRIA
Ejemplo de método de clase (cont.)
Vector2D v1 = new Vector2D(1,2);
Vector2D v2 = new Vector2D(5,10);
Vector2D v3;
// suma no estática
v1.suma(v2);
// suma estática
v3=Vector2D.suma(v1,v2);
:Vector
x=1.0
y=2.0
v1 v3
:Vector
x=5.0
y=10.0
v2
:Vector
x=6.0
y=12.0
v1
:Vector
x=5.0
y=10.0
v2
:Vector
x=6.0
y=12.0
v1
:Vector
x=5.0
y=10.0
v2
:Vector
x=11.0
y=22.0
v3
X
v3
XrefObjeto.nombreMétodo
NombreClase.nombreMétodo
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 28
UNIVERSIDAD
DE CANTABRIA
6.6 Anidamiento de clases
Una clase puede definirse dentro de otra
• las clases anidadas no estáticas se denominan clases internas y están
asociadas con una instancia (objeto) de la clase
- normalmente no las usaremos en esta asignatura
• las clases anidadas estáticas son como cualquier otra clase
- salvo que su nombre es ClaseContenedora.ClaseAnidada
- las usaremos principalmente con excepciones y enumerados
public class ClaseContenedora {
public static class ClaseAnidada {
…
}
…
}
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 29
UNIVERSIDAD
DE CANTABRIA
Ejemplo de clase anidada estática
public class Segmento {
public static class Punto {
double x, y;
}
// atributos
private Punto pIni, pFin;
/** constructor */
public Segmento (Punto pIni, Punto pFin) {
this.pIni = pIni;
this.pFin = pFin;
}
…
}
clase anidada estática
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 30
UNIVERSIDAD
DE CANTABRIA
Ejemplo de clase anidada estática (cont.)
public class PruebaSegmento {
public static void main() {
Segmento.Punto ptoIni = new Segmento.Punto();
Segmento.Punto ptoFin = new Segmento.Punto();
ptoIni.x=10.2;
ptoIni.y=4.3;
ptoFin.x=1.3;
ptoFin.y=5.6;
Segmento seg = new Segmento(ptoIni, ptoFin);
}
}

Más contenido relacionado

La actualidad más candente

Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Eli Diaz
 
Codigo para implementar pilas en java
Codigo para implementar pilas en javaCodigo para implementar pilas en java
Codigo para implementar pilas en javaTeresa Freire
 
Estructura de datos. listas, pilas y colas
Estructura de datos. listas, pilas y colasEstructura de datos. listas, pilas y colas
Estructura de datos. listas, pilas y colasIARINAIA
 
Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pilajefer
 
Historia de las computadoras
Historia de las computadorasHistoria de las computadoras
Historia de las computadorasAlain Cruz
 
Ejercicios pilas y_colas
Ejercicios pilas y_colasEjercicios pilas y_colas
Ejercicios pilas y_colaskelvinst
 

La actualidad más candente (9)

Cap2 datos
Cap2 datosCap2 datos
Cap2 datos
 
Clase IX
Clase IXClase IX
Clase IX
 
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
 
Codigo para implementar pilas en java
Codigo para implementar pilas en javaCodigo para implementar pilas en java
Codigo para implementar pilas en java
 
Estructura de datos. listas, pilas y colas
Estructura de datos. listas, pilas y colasEstructura de datos. listas, pilas y colas
Estructura de datos. listas, pilas y colas
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pila
 
Historia de las computadoras
Historia de las computadorasHistoria de las computadoras
Historia de las computadoras
 
Ejercicios pilas y_colas
Ejercicios pilas y_colasEjercicios pilas y_colas
Ejercicios pilas y_colas
 

Similar a Cap6 clases

Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Andres Garcia Garcia
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppterosslo
 
Java2-Clases.ppt Programación Orientada a Objetos
Java2-Clases.ppt Programación Orientada a ObjetosJava2-Clases.ppt Programación Orientada a Objetos
Java2-Clases.ppt Programación Orientada a ObjetosJairo887360
 
Curso básico de lenguaje R aplicado a las Ciencias Sociales
Curso básico de lenguaje R aplicado a las Ciencias SocialesCurso básico de lenguaje R aplicado a las Ciencias Sociales
Curso básico de lenguaje R aplicado a las Ciencias SocialesNicolas Robinson-Garcia
 
Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Andres Garcia Garcia
 
Estructuras_de_datos_(11-12).pdf- power point arrays
Estructuras_de_datos_(11-12).pdf- power point arraysEstructuras_de_datos_(11-12).pdf- power point arrays
Estructuras_de_datos_(11-12).pdf- power point arraysJairoMaxKevinMartine
 
Tipos de datos en java.pptx
Tipos de datos en java.pptxTipos de datos en java.pptx
Tipos de datos en java.pptx73138253
 
Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Axel
 
Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Ricardo Tesoriero
 
Abf leccion 12
Abf leccion 12Abf leccion 12
Abf leccion 12victdiazm
 

Similar a Cap6 clases (20)

Cap4 datos-compuestos
Cap4 datos-compuestosCap4 datos-compuestos
Cap4 datos-compuestos
 
Cap8 herencia
Cap8 herenciaCap8 herencia
Cap8 herencia
 
Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2
 
Unidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIASUnidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIAS
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppt
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppt
 
Java2-Clases.ppt Programación Orientada a Objetos
Java2-Clases.ppt Programación Orientada a ObjetosJava2-Clases.ppt Programación Orientada a Objetos
Java2-Clases.ppt Programación Orientada a Objetos
 
Curso básico de lenguaje R aplicado a las Ciencias Sociales
Curso básico de lenguaje R aplicado a las Ciencias SocialesCurso básico de lenguaje R aplicado a las Ciencias Sociales
Curso básico de lenguaje R aplicado a las Ciencias Sociales
 
FI15B_practica_p2
FI15B_practica_p2FI15B_practica_p2
FI15B_practica_p2
 
Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6
 
Estructuras_de_datos_(11-12).pdf- power point arrays
Estructuras_de_datos_(11-12).pdf- power point arraysEstructuras_de_datos_(11-12).pdf- power point arrays
Estructuras_de_datos_(11-12).pdf- power point arrays
 
Tipos de datos en java.pptx
Tipos de datos en java.pptxTipos de datos en java.pptx
Tipos de datos en java.pptx
 
12 b capitulo_3_fi_v1
12 b capitulo_3_fi_v112 b capitulo_3_fi_v1
12 b capitulo_3_fi_v1
 
Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2
 
Cap11 prueba
Cap11 pruebaCap11 prueba
Cap11 prueba
 
Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)
 
Bdo r en oracle
Bdo r en oracleBdo r en oracle
Bdo r en oracle
 
Apuntadores y listas
Apuntadores y listasApuntadores y listas
Apuntadores y listas
 
Abf leccion 12
Abf leccion 12Abf leccion 12
Abf leccion 12
 
Clase ed v7
Clase ed v7Clase ed v7
Clase ed v7
 

Más de IsaacGmezOtero

Más de IsaacGmezOtero (6)

Cap9 excepciones
Cap9 excepcionesCap9 excepciones
Cap9 excepciones
 
Cap7 modularidad
Cap7 modularidadCap7 modularidad
Cap7 modularidad
 
Cap5 entrada-salida
Cap5 entrada-salidaCap5 entrada-salida
Cap5 entrada-salida
 
Cap3 algoritmos
Cap3 algoritmosCap3 algoritmos
Cap3 algoritmos
 
Cap10 ficheros
Cap10 ficherosCap10 ficheros
Cap10 ficheros
 
Cap1 intro
Cap1 introCap1 intro
Cap1 intro
 

Último

las humanidades y su impotancia en la formación integral del ingeniero
las humanidades y su impotancia en la formación integral del ingenierolas humanidades y su impotancia en la formación integral del ingeniero
las humanidades y su impotancia en la formación integral del ingenieroJsValdez
 
1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdfThe16Frame
 
Cuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdfCuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdffredyflores58
 
Inmunología AMIR 14va EdiciónNM,NLKKJHKLJHKJLBHLKJH
Inmunología AMIR 14va EdiciónNM,NLKKJHKLJHKJLBHLKJHInmunología AMIR 14va EdiciónNM,NLKKJHKLJHKJLBHLKJH
Inmunología AMIR 14va EdiciónNM,NLKKJHKLJHKJLBHLKJHVivafornai
 
Sesión de Clase A dde sistemas de riego y otras obras
Sesión de Clase A dde sistemas de riego y otras obrasSesión de Clase A dde sistemas de riego y otras obras
Sesión de Clase A dde sistemas de riego y otras obrasBildStrify1
 
DIAGRAMAS PID automatizacion y control.ppt
DIAGRAMAS PID automatizacion y control.pptDIAGRAMAS PID automatizacion y control.ppt
DIAGRAMAS PID automatizacion y control.pptalisonsarmiento4
 
S01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdfS01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdfSalomeRunco
 
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdfslideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdfWaldo Eber Melendez Garro
 
UNIDAD III Esquemas de comunicacion pptx
UNIDAD III Esquemas de comunicacion pptxUNIDAD III Esquemas de comunicacion pptx
UNIDAD III Esquemas de comunicacion pptxElybe Hernandez
 
subestaciones electricas, distribucion de energia
subestaciones electricas, distribucion de energiasubestaciones electricas, distribucion de energia
subestaciones electricas, distribucion de energiazaydaescalona
 
ESPECIFICACIONES TECNICAS MURO DE CONTENCION.docx
ESPECIFICACIONES TECNICAS MURO DE CONTENCION.docxESPECIFICACIONES TECNICAS MURO DE CONTENCION.docx
ESPECIFICACIONES TECNICAS MURO DE CONTENCION.docxAnonymousk8JgrnuMSr
 
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZ
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZTIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZ
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZvarichard
 
subestaciones electricas , elementos y caracteristicas
subestaciones electricas , elementos y caracteristicassubestaciones electricas , elementos y caracteristicas
subestaciones electricas , elementos y caracteristicaszaydaescalona
 
CONCEPTOS BASICOS DE ROBOTICA, CLASES DE ROBOTS
CONCEPTOS BASICOS DE ROBOTICA, CLASES DE ROBOTSCONCEPTOS BASICOS DE ROBOTICA, CLASES DE ROBOTS
CONCEPTOS BASICOS DE ROBOTICA, CLASES DE ROBOTSrobinarielabellafern
 
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...p39961945
 
Semana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptxSemana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptxJulio Lovon
 
Diseño digital - M. Morris Mano - 3ed.pdf
Diseño digital - M. Morris Mano - 3ed.pdfDiseño digital - M. Morris Mano - 3ed.pdf
Diseño digital - M. Morris Mano - 3ed.pdfssuserf46a26
 
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdfMirkaCBauer
 
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPO
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPODIFERENCIA DE COMPRESION Y TENSION EN UN CUERPO
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPOSegundo Silva Maguiña
 

Último (20)

las humanidades y su impotancia en la formación integral del ingeniero
las humanidades y su impotancia en la formación integral del ingenierolas humanidades y su impotancia en la formación integral del ingeniero
las humanidades y su impotancia en la formación integral del ingeniero
 
1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf1.1 Los 14 principios del Toyota Way -2024.pdf
1.1 Los 14 principios del Toyota Way -2024.pdf
 
Cuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdfCuestionario 20222222222222222222222224.pdf
Cuestionario 20222222222222222222222224.pdf
 
Inmunología AMIR 14va EdiciónNM,NLKKJHKLJHKJLBHLKJH
Inmunología AMIR 14va EdiciónNM,NLKKJHKLJHKJLBHLKJHInmunología AMIR 14va EdiciónNM,NLKKJHKLJHKJLBHLKJH
Inmunología AMIR 14va EdiciónNM,NLKKJHKLJHKJLBHLKJH
 
Sesión de Clase A dde sistemas de riego y otras obras
Sesión de Clase A dde sistemas de riego y otras obrasSesión de Clase A dde sistemas de riego y otras obras
Sesión de Clase A dde sistemas de riego y otras obras
 
DIAGRAMAS PID automatizacion y control.ppt
DIAGRAMAS PID automatizacion y control.pptDIAGRAMAS PID automatizacion y control.ppt
DIAGRAMAS PID automatizacion y control.ppt
 
S01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdfS01.s1 - Clasificación de las Industrias.pdf
S01.s1 - Clasificación de las Industrias.pdf
 
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdfslideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
slideshare.vpdfs.com_sensores-magneticos-controles-pptx.pdf
 
Convocatoria de Becas Caja de Ingenieros_UOC 2024-25
Convocatoria de Becas Caja de Ingenieros_UOC 2024-25Convocatoria de Becas Caja de Ingenieros_UOC 2024-25
Convocatoria de Becas Caja de Ingenieros_UOC 2024-25
 
UNIDAD III Esquemas de comunicacion pptx
UNIDAD III Esquemas de comunicacion pptxUNIDAD III Esquemas de comunicacion pptx
UNIDAD III Esquemas de comunicacion pptx
 
subestaciones electricas, distribucion de energia
subestaciones electricas, distribucion de energiasubestaciones electricas, distribucion de energia
subestaciones electricas, distribucion de energia
 
ESPECIFICACIONES TECNICAS MURO DE CONTENCION.docx
ESPECIFICACIONES TECNICAS MURO DE CONTENCION.docxESPECIFICACIONES TECNICAS MURO DE CONTENCION.docx
ESPECIFICACIONES TECNICAS MURO DE CONTENCION.docx
 
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZ
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZTIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZ
TIPOS DE BASTIDORES Y CARROCERIA EN LA INDUSTRIA AUTOMOTRIZ
 
subestaciones electricas , elementos y caracteristicas
subestaciones electricas , elementos y caracteristicassubestaciones electricas , elementos y caracteristicas
subestaciones electricas , elementos y caracteristicas
 
CONCEPTOS BASICOS DE ROBOTICA, CLASES DE ROBOTS
CONCEPTOS BASICOS DE ROBOTICA, CLASES DE ROBOTSCONCEPTOS BASICOS DE ROBOTICA, CLASES DE ROBOTS
CONCEPTOS BASICOS DE ROBOTICA, CLASES DE ROBOTS
 
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...
REAJUSTE DE PRECIOS EN LOS CONTRATOS ADMINISTRATIVOS DE OBRA PUBLICA PACTADOS...
 
Semana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptxSemana 1 - Introduccion - Fluidos - Unidades.pptx
Semana 1 - Introduccion - Fluidos - Unidades.pptx
 
Diseño digital - M. Morris Mano - 3ed.pdf
Diseño digital - M. Morris Mano - 3ed.pdfDiseño digital - M. Morris Mano - 3ed.pdf
Diseño digital - M. Morris Mano - 3ed.pdf
 
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf
647913404-06-Partes-principales-de-las-Perforadoras-manuales-1.pdf
 
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPO
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPODIFERENCIA DE COMPRESION Y TENSION EN UN CUERPO
DIFERENCIA DE COMPRESION Y TENSION EN UN CUERPO
 

Cap6 clases

  • 1. Tema  6.  Clases,  referencias  y  objetos   Programación  en  Lenguaje  Java   Michael  González  Harbour   Mario  Aldea  Rivas   Departamento  de  Matemá.cas,   Estadís.ca  y  Computación   Este  tema  se  publica  bajo  Licencia:   Crea.ve  Commons  BY-­‐NC-­‐SA  4.0  
  • 2. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 1 UNIVERSIDAD DE CANTABRIA Programación en Java 1. Introducción a los lenguajes de programación 2. Datos y expresiones 3. Estructuras algorítmicas 4. Datos Compuestos 5. Entrada/salida 6. Clases, referencias y objetos • Creación e inicialización de objetos. Tipos primitivos, referencias y objetos. Comparación de objetos. Recolector de basura. Métodos y campos de clase (o estáticos). Anidamiento de clases 7. Modularidad y abstracción 8. Herencia y polimorfismo 9. Tratamiento de errores 10 ..., 11 ...
  • 3. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 2 UNIVERSIDAD DE CANTABRIA 6.1 Creación e inicialización de objetos En el lenguaje Java los objetos se crean con el operador new: UnaClase obj = new UnaClase(); Los constructores son métodos especiales que • se llaman igual que la clase • no tienen tipo de retorno Una clase puede tener varios constructores con diferentes parámetros public UnaClase() { … } public UnaClase(int i) { … } public UnaClase(boolean b, int i) { … } Si y solo si no definimos constructor, la clase tendrá el constructor por defecto (constructor sin parámetros que no hace nada) public UnaClase() {} Se invoca el CONSTRUCTOR
  • 4. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 3 UNIVERSIDAD DE CANTABRIA Creación implícita de objetos En unos pocos casos la creación de objetos se realiza sin que el operador new aparezca explícitamente: • Creación de strings utilizando un literal de string: String str = "Hola"; • Concatenación de strings: String str1 = "Hola"; String str2 = "Adiós"; String str3 = str1 + str2; 1. No son equivalentes desde el punto de vista de la implementación de ambas instrucciones por parte de la máquina virtual (si se tiene curiosidad, buscar información sobre “String constant pool”). Equivale1 a: String str = new String("Hola"); Equivale a: String str3 = new String("HolaAdiós");
  • 5. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 4 UNIVERSIDAD DE CANTABRIA Creación implícita de objetos (cont.) • Inicialización de array: int[] números = {1, 3, 5}; Equivale a: int[] números = new int[3]; números[0] = 1; números[1] = 3; números[2] = 5;
  • 6. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 5 UNIVERSIDAD DE CANTABRIA Inicialización de los atributos Cuando se crea un objeto sus atributos se inicializan en 3 etapas: 1. Se asigna a cada atributo su valor por defecto - tipos numéricos (int, double, …): 0 (o 0.0) - Caracteres (char): carácter nulo - Booleanos (boolean): false - Referencias a objetos (String, otras clases): null 2. Si la declaración del atributo contiene un inicializador, éste es eva- luado y asignado private int numRuedas = numCoches * 4; 3. Se ejecuta el constructor de la clase, que puede cambiar el valor de los atributos que desee Recordar: sólo se inicializan los atributos, las variables locales de los métodos no son inicializadas por defecto
  • 7. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 6 UNIVERSIDAD DE CANTABRIA Atributos “finales” Su valor no se puede cambiar después de haber sido inicializados • pueden inicializarse en la definición del atributo o en el constructor Ejemplo: public class Círculo { public final double PI = 3.14159; private final double área; private final double radio; public Círculo(double radio) { this.radio = radio; this.área = PI * radio * radio; } … // los demás métodos de la clase no pueden // cambiar el valor de los atributos finales Inicialización de “PI” hay un valor más preciso de PI en la clase Math La inicialización de “área” y “radio” se dejan para el constructor
  • 8. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 7 UNIVERSIDAD DE CANTABRIA Atributos finales en UML Se utiliza el modificador {readonly} public class Círculo { public final double PI = 3.14159; private final double área; private final double radio; public Círculo(double radio) { this.radio = radio; this.área = PI * radio * radio; } … Círculo +PI: Real {readonly} -área: Real {readonly} -radio: Real {readonly} + Círculo(radio: Real) ...
  • 9. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 8 UNIVERSIDAD DE CANTABRIA 6.2 Tipos primitivos, referencias y objetos Tipos primitivos: • boolean, char, byte, short, int, long, float y double. • Cuando se declarara una variable de un tipo primitivo el compilador reserva un área de memoria para ella • Cuando se asigna un valor, éste es escrito en el área reservada • La asignación entre variables significa copiar el contenido de una variable en la otra int i, j; i X j X i=16; j=3; i 16 j 3 i=j; i 3 j 3
  • 10. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 9 UNIVERSIDAD DE CANTABRIA Tipos primitivos: representación en memoria int i, j; 0x1000 0x1004 0x1008 0x2A14 0x2A18 0x2A1C 3 j i16 i=16; j=3; 0x1000 0x1004 0x1008 0x2A14 0x2A18 0x2A1C XXX j iXXX 0x1000 0x1004 0x1008 0x2A14 0x2A18 0x2A1C 3 j i3 i=j;
  • 11. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 10 UNIVERSIDAD DE CANTABRIA Referencias y objetos Cuando se declara una variable “objeto” la situación es diferente • Si no se usa el operador new sólo se crea una referencia a objeto • El espacio en memoria del objeto se reserva con el operador new Complejo c1,c2; c1 X c2 X c1 :Complejo r=2.0 i=-3.2 c1=new Complejo(2.0,-3.2); c2=new Complejo(1.3,2.1); c2 :Complejo r=1.3 i=2.1 public class Complejo { private double r; private double i; … }
  • 12. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 11 UNIVERSIDAD DE CANTABRIA Referencias y objetos (cont.) Representación en memoria: Complejo c1; 0x1000 0x1004 0x1008 0x2A14 0x2A18 0x2A1C c1XXX 0x2A20 0x2A24 0x2A28 c1 = new Complejo(7.2, 2.4); 0x1000 0x1004 0x1008 0x2A14 0x2A18 0x2A1C c10x00002A18 0x2A20 0x2A24 0x2A28 7.2 2.4 }r }i
  • 13. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 12 UNIVERSIDAD DE CANTABRIA Referencias y objetos (cont.) • La asignación entre referencias no copia los objetos • después de la copia ambas referencias apuntan al mismo objeto (y los objetos no han sido modificados) • La comparación entre referencias no compara los contenidos de los objetos • en la figura anterior c1==c2 es true • en la situación de debajo c1==c2 es false • el método equals permite comparar contenidos (Ver 6.3) c2=c1; c1 :Complejo r=2.0 i=-3.2 c2 :Complejo r=1.3 i=2.1 c1 c2 :Complejo r=2.0 i=1.0 :Complejo r=2.0 i=1.0
  • 14. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 13 UNIVERSIDAD DE CANTABRIA Arrays de tipos primitivos Java trata los arrays como objetos • Crear una variable de tipo array sólo crea una referencia • El espacio en memoria para el array se crea con new - cuando se trata de un array de un tipo primitivo se crean los elementos del array - y se inicializan a sus valores por defecto int[] a; a X a = new int[5]; a 0 0 0 0 0
  • 15. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 14 UNIVERSIDAD DE CANTABRIA Arrays de referencias a objetos • Crear una variable de tipo array de objetos sólo crea la referencia • Con new se reserva el espacio para el array de referencias - pero no los objetos a los que apuntarán las referencias - las referencias se inicializan a su valor por defecto (null) • Los objetos hay que crearlos posteriormente Complejo a[]; a X a=new Complejo[4]; a null null nullnull a[1]=new Complejo(2.0,-3.2); a null null null :Complejo r=2.0 i=-3.2
  • 16. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 15 UNIVERSIDAD DE CANTABRIA Copia y comparación de arrays (y strings) Los arrays y los strings son objetos, por consiguiente: • La asignación sólo copia referencias • La comparación compara las referencias no los contenidos - en la figura anterior a1==a2 es true - en la situación de debajo a1==a2 es false • Para comparar contenidos debe utilizarse el método equals a2=a1; a1 4 -3 0 1 a2 -7 8 2 1-3 a1 4 -3 0 1 a2 4 -3 0 1
  • 17. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 16 UNIVERSIDAD DE CANTABRIA Referencias y clase ArrayList Un ArrayList almacena referencias a los objetos que “contiene” • puesto que se implementa utilizando un array El método equals permite comparar dos ArrayList • Dos ArrayList son iguales si contienen los mismos elementos en el mismo orden ArrayList -elementos: E[] -numEle: Integer ... ... E
  • 18. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 17 UNIVERSIDAD DE CANTABRIA Ejemplo ArrayList ArrayList<Complejo> a = new ArrayList<Complejo>(); a.add(new Complejo(1, 2)); a.add(new Complejo(3, 4)); a :Complejo r=1.0 i=2.0 elementos :ArrayList X ... numEle = 2 :Complejo r=3.0 i=4.0
  • 19. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 18 UNIVERSIDAD DE CANTABRIA Ejemplo ArrayList (cont.) Complejo c1 = a.get(1); c1.r = 5; a :Complejo r=1.0 i=2.0 elementos :ArrayList X ... numEle = 2 :Complejo r=3.0 i=4.0 c1 a :Complejo r=1.0 i=2.0 elementos :ArrayList numEle = 2 :Complejo r=5.0 i=4.0 c1 X ...
  • 20. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 19 UNIVERSIDAD DE CANTABRIA 6.3 Comparación de objetos La comparación (ref1==ref2) compara referencias • si queremos comparar los contenidos de los objetos debemos utilizar el método equals Ejemplo: método equals para la clase Coordenada: public class Coordenada { private int x; // coordenada en el eje x private int y; // coordenada en el eje y … public boolean equals(Object obj) { Coordenada c = (Coordenada) obj; return c.x == x && c.y == y; } } Veremos una definición más completa del método equals cuando veamos la herencia
  • 21. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 20 UNIVERSIDAD DE CANTABRIA Ejemplo de uso del método equals :Coordenada x = 2 y = -3 :Coordenada x = 10 y = 4 :Coordenada x = 2 y = -3 if (c1.equals(c1)) { … } if (c1.equals(c4)) { … } if (c1.equals(c2)) { … } if (c1.equals(c3)) { … } c1 c2 c3 c4 false true true
  • 22. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 21 UNIVERSIDAD DE CANTABRIA Comparación de contenidos de arrays y strings La clase String dispone del método equals: String str1 = "hola", str2 = "hola"; if (str1.equals(str2)) { System.out.println("Los strings son iguales"); } Para comparar arrays existe el método equals de la clase Arrays: import java.util.Arrays; int[] a1= {4, -3, 0, 1}, a2= {4, -3, 0, 1}; if (Arrays.equals(a1, a2)) { System.out.println("'a1' es igual a 'a2'"); }
  • 23. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 22 UNIVERSIDAD DE CANTABRIA 6.4 Recolector de basura La memoria ocupada por un objeto se reserva con el operador new • en Java no existe ningún operador para liberar la memoria de un objeto que no se va a usar más El Recolector de Basura realiza la liberación de memoria de forma automática • el recolector va contando el número de referencias que “apuntan” a cada objeto • cuando un objeto no está apuntado por ninguna referencia, se convierte en “basura” (no va a poder ser utilizado nunca más) • en los periodos de inactividad del sistema, el recolector reincorpora la “basura” a la memoria disponible
  • 24. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 23 UNIVERSIDAD DE CANTABRIA Ejemplo de generación de basura Complejo c1 = new Complejo(2.0, 3.2); c1 Complejo c2 = new Complejo(1.3, 2.1); c2 c2 = c1; c1 c2 Se convierte en basura al no estar apuntado por ninguna referencia :Complejo r=2.0 i=3.2 :Complejo r=1.3 i=2.1 :Complejo r=2.0 i=3.2 :Complejo r=1.3 i=2.1
  • 25. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 24 UNIVERSIDAD DE CANTABRIA 6.5 Métodos y campos de clase: estáticos Una clase puede tener atributos y métodos estáticos: • no pertenecen a los objetos de la clase, sino a la clase misma • si son atributos, sólo existe uno por clase, no uno por objeto - la vida es la de la clase, y no la del objeto • si son métodos, sólo pueden acceder a los objetos pasados como parámetros y a campos y métodos estáticos • nos referimos a ellos como NombreClase.miembroEstático public class Cosa { private static int st; private int i; … } :Cosa i=2 :Cosa i=-12 :Cosa i=125 :Cosa i=-45 :Cosa i=23 Cosa.st=10
  • 26. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 25 UNIVERSIDAD DE CANTABRIA Ejemplo de método de clase public class Vector2D { // atributos private double x; private double y; /** Constructor */ public Vector2D(double x, double y) { this.x = x; this.y = y; } Vector2D -x: double -y: double +Vector2D(x:double, y: double) +suma(v: Vector2D): void +suma(v1: Vector2D, v2: Vector2D): Vector2D
  • 27. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 26 UNIVERSIDAD DE CANTABRIA Ejemplo de método de clase (cont.) /** * Método NO estático: Suma el vector v con * el vector actual */ public void suma(Vector2D v){ x = x + v.x; y = y + v.y; } /** * Método ESTÁTICO: Retorna el vector * resultado de v1+v2 */ public static Vector2D suma(Vector2D v1, Vector2D v2) { return new Vector2D(v1.x+v2.x, v1.y+v2.y); } }
  • 28. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 27 UNIVERSIDAD DE CANTABRIA Ejemplo de método de clase (cont.) Vector2D v1 = new Vector2D(1,2); Vector2D v2 = new Vector2D(5,10); Vector2D v3; // suma no estática v1.suma(v2); // suma estática v3=Vector2D.suma(v1,v2); :Vector x=1.0 y=2.0 v1 v3 :Vector x=5.0 y=10.0 v2 :Vector x=6.0 y=12.0 v1 :Vector x=5.0 y=10.0 v2 :Vector x=6.0 y=12.0 v1 :Vector x=5.0 y=10.0 v2 :Vector x=11.0 y=22.0 v3 X v3 XrefObjeto.nombreMétodo NombreClase.nombreMétodo
  • 29. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 28 UNIVERSIDAD DE CANTABRIA 6.6 Anidamiento de clases Una clase puede definirse dentro de otra • las clases anidadas no estáticas se denominan clases internas y están asociadas con una instancia (objeto) de la clase - normalmente no las usaremos en esta asignatura • las clases anidadas estáticas son como cualquier otra clase - salvo que su nombre es ClaseContenedora.ClaseAnidada - las usaremos principalmente con excepciones y enumerados public class ClaseContenedora { public static class ClaseAnidada { … } … }
  • 30. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 29 UNIVERSIDAD DE CANTABRIA Ejemplo de clase anidada estática public class Segmento { public static class Punto { double x, y; } // atributos private Punto pIni, pFin; /** constructor */ public Segmento (Punto pIni, Punto pFin) { this.pIni = pIni; this.pFin = pFin; } … } clase anidada estática
  • 31. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 30 UNIVERSIDAD DE CANTABRIA Ejemplo de clase anidada estática (cont.) public class PruebaSegmento { public static void main() { Segmento.Punto ptoIni = new Segmento.Punto(); Segmento.Punto ptoFin = new Segmento.Punto(); ptoIni.x=10.2; ptoIni.y=4.3; ptoFin.x=1.3; ptoFin.y=5.6; Segmento seg = new Segmento(ptoIni, ptoFin); } }