Publicado el 14 de Enero del 2017
1.873 visualizaciones desde el 14 de Enero del 2017
199,8 KB
11 paginas
Creado hace 15a (23/02/2010)
Prácticas de Programación
Tema 1. Introducción al análisis y diseño de programas
Tema 2. Clases y objetos en Java
Tema 3. Herencia y Polimorfismo
Tema 4. Tratamiento de errores
Tema 5. Aspectos avanzados de los tipos de datos
Tema 6. Modularidad y abstracción: aspectos avanzados
Tema 7. Entrada/salida con ficheros
Tema 8. Verificación y prueba de programas
Prácticas de Programación
Tema 2. Clases y objetos en Java
© M. Aldea y M. González
23/02/10
Tema 2. Clases y objetos en Java
Introducción
2.1.
2.2. Creación e inicialización de objetos
2.3. Tipos primitivos, referencias y objetos
2.4. Recolector de basura
2.5. Comparación de objetos
2.6. Control de acceso
2.7. Métodos y campos de clase (o estáticos)
2.8. Anidamiento de clases
2.9. Bibliografía
Prácticas de Programación
Tema 2. Clases y objetos en Java
© M. Aldea y M. González
23/02/10
1
2
3
2.1 Introducción
2.1 Introducción
La clase es la unidad básica de estructuración en un lenguaje
orientado a objetos
Está formada por miembros:
• atributos (también llamados campos): almacenan el estado
• métodos: definen el comportamiento
Una clase es una descripción de un conjunto de objetos con los
mismos atributos y comportamiento
public class UnaClase {
atributos
constructores
métodos
}
Un objeto es una instancia o ejemplar concreto de una clase
Prácticas de Programación
© M. Aldea y M. González
23/02/10
Tema 2. Clases y objetos en Java
2.2 Creación e inicialización de objetos
2.2 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 invoca el CONSTRUCTOR
• 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 sólo si no definimos constructor, la clase tendrá el constructor
por defecto (constructor sin parámetros que no hace nada)
public UnaClase() {}
Prácticas de Programación
Tema 2. Clases y objetos en Java
© M. Aldea y M. González
23/02/10
4
Inicialización de los atributos
Cuando se crea un objeto sus atributos se inicializan en 3 etapas:
2.2 Creación e inicialización de objetos
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
evaluado 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
Prácticas de Programación
Tema 2. Clases y objetos en Java
© M. Aldea y M. González
23/02/10
5
2.2 Creación e inicialización de objetos
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 de la clase
Ejemplo:
public class Círculo {
Inicialización de “PI”
hay un valor más preciso
de PI en la clase Math
private final double PI = 3.14159;
public final double área;
private double radio;
public Círculo(double radio) {
this.radio = radio;
this.área = PI * radio * radio;
}
... // no se puede modificar el valor de área
La inicialización de “área”
se deja para el constructor
Prácticas de Programación
© M. Aldea y M. González
23/02/10
6
Tema 2. Clases y objetos en Java
2.3 Tipos primitivos, referencias y objetos
• Cuando se declarara una variable de un tipo primitivo el
compilador reserva un área de memoria para ella
2.3 Tipos primitivos, referencias y objetos
int i, j;
i
X
j
X
• Cuando se asigna un valor, éste es escrito en el área reservada
i=16;
j=3;
i
16
j
3
• La asignación entre variables significa copiar el contenido de
una variable en la otra
i=j;
i
3
j
3
Prácticas de Programación
Tema 2. Clases y objetos en Java
© M. Aldea y M. González
23/02/10
7
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
2.3 Tipos primitivos, referencias y objetos
Complejo c1,c2;
c1 X
c2 X
• El espacio en memoria del objeto se reserva con el operador new
c1=new Complejo(2.0,-3.2);
c2=new Complejo(1.3,2.1);
Prácticas de Programación
Tema 2. Clases y objetos en Java
c1
c2
:Complejo
r=2.0
i=-3.2
:Complejo
r=1.3
i=2.1
© M. Aldea y M. González
23/02/10
8
2.3 Tipos primitivos, referencias y objetos
Referencias y objetos (cont.)
• La asignación entre objetos sólo copia referencias
• después de la copia ambas referencias apuntan al mismo
objeto
c2=c1;
c1
:Complejo
r=2.0
i=-3.2
c2
:Complejo
r=1.3
i=2.1
• La comparación entre objetos compara las referencias no los
contenidos
• en la figura anterior c1==c2 es true
• en la situación de debajo c1==c2 es false
c1
:Complejo
r=2.0
i=1.0
c2
:Complejo
r=2.0
i=1.0
• el método equals permite comparar contenidos (Ver 2.5)
Prácticas de Programación
© M. Aldea y M. González
23/02/10
9
Tema 2. Clases y objetos en Java
2.3 Tipos primitivos, referencias y objetos
Arrays de tipos primitivos
Java trata los arrays como objetos
• Crear una variable de tipo array sólo crea una referencia
int a[];
a
X
• 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
a = new int[5];
0 0 0 0 0
a
Prácticas de Programación
Tema 2. Clases y objetos en Java
© M. Aldea y M. González
23/02/10
10
Arrays de referencias a objetos
• Crear una variable de tipo array de objetos sólo crea la referencia
2.3 Tipos primitivos, referencias y objetos
Complejo a[];
a
X
• Con new se reserva el espacio para el array de referencias
• pero no los objetos a los que apuntarán las referencias
• las referencias que forman el array se inicializan a null
a=new Complejo[4];
a
null
null null null
• Los objetos hay que crearlos posteriormente
a[1]=new Complejo(2.0,-3.2);
null
null null
a
:Complejo
r=2.0
i=-3.2
© M. Aldea y M. González
23/02/10
11
Prácticas de Programación
Tema 2. Clases y objetos en Java
Copia y comparación de arrays (y strings)
Los arrays y los strings son objetos, por consiguiente:
• La asignación entre arrays (o strings) sólo copia referencias
2.3 Tipos primitivos, referencias y objetos
a2=a1;
a1
4
-3
0
1
-3
-7
8
2
1
a2
• La comparación entre arrays (o strings) compara las referencias
no los contenidos
• en la figura anterior a1==a2 es true
• en la situación de debajo a1==a2 es false
a1
4
-3
0
1
4
-3
0
1
a2
• Para comparar contenidos debe utilizarse el método equals
Prácticas de Programación
© M. Aldea y M. González
23/02/10
12
Tema 2. Clases y objetos en Java
2.4 Recolector de basura
2.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
La liberación de memoria la realiza el Recolector de Basura 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
Prácticas de Programación
Tema 2. Clases y objetos en Java
© M. Aldea y M. González
23/02/10
13
2.4 Recolector de basura
Ejemplo de generación de basura
Complejo c1 = new Complejo(2.0, 3.2);
Complejo c2 = new Complejo(1.3, 2.1);
c1
:Complejo
r=2.0
i=3.2
c2 = c1;
c1
:Complejo
r=2.0
i=3.2
c2
c2
:Complejo
r=1.3
i=2.1
:Complejo
r=1.3
i=2.1
Se convierte en basura al no estar
apuntado por ninguna referencia
© M. Aldea y M. González
23/02/10
14
Prácticas de Programación
Tema 2. Clases y objetos en Java
2.5 Comparación de objetos
La comparación entre objetos (obj1==obj2) compara referencias
• si queremos comparar los contenidos de los objetos debemos
2.5 Comparación de objetos
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;
}
}
Prácticas de Programación
© M. Aldea y M. González
23/02/10
15
Tema 2. Clases y objetos en Java
Ejemplo de uso del método equals
2.5 Comparación de objetos
if (c1.equals(c1)) {
...
}
if (c1.equals(c4)) {
...
}
if (c1.equals(c2)) {
...
}
if (c1.equals(c3)) {
...
}
Prácticas de Programación
Tema 2. Clases y objetos en Java
true
false
true
c1
c2
:Coordenada
x=2
y=-3
c4
:Coordenada
x=10
y=4
:Coordenada
x=2
y=-3
c3
© M. Aldea y M. González
23/02/10
16
2.5 Comparación de objetos
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'");
}
Volveremos a hablar del método equals en el tema 3, “Herencia y Polimorfismo”
© M. Aldea y M. González
23/02/10
17
Prácticas de Programación
Tema 2. Clases y objetos en Java
2.6 Control de acceso
2.6 Control de acceso
Los sistemas software pueden llegar a ser muy complejos
Para abordar con éxito su desarrollo es necesario aplicar los
Comentarios de: Prácticas de Programación - Tema 2. Clases y objetos en Java (0)
No hay comentarios