2
Clases
3
Componentes de una Clase
• Atributos:
• Determinan una estructura de almacenamiento para cada
objeto de la clase
• Métodos:
• Operaciones aplicables a los objetos
• Único modo de acceder a los atributos
• Ejemplo: En una aplicación bancaria, encontramos objetos
“cuenta”. Todos los objetos “cuenta” tienen propiedades
comunes:
• atributos: saldo, titular, número de cuenta, ...
• operaciones: reintegro, ingreso, ...
• Definimos una clase CUENTA
4
Ejemplo Clase Cuenta
Cuenta Nombre de la Clase
titular: String;
saldo: double; Atributos
depositar(valor: double);
retirar(valor: double); Métodos
Tiempo de Ejecución
Objeto Cuenta
c1:Cuenta
5
Clase Cuenta en Java
class Cuenta {
String titular;
double saldo;
6
Ocultamiento de Información
7
Clase Cuenta en Java
class Cuenta {
private String titular;
private double saldo;
9
Clase Cuenta en Java
class Cuenta {
private String titular;
private double saldo;
11
Paquetes
12
Clase Cuenta en Java
package banco.cuentas;
import java.util.LinkedList;
public class Cuenta {
private String titular;
private double saldo;
private LinkedList ultimosMovimientos;
14
Objetos Dominio vs. Objetos Aplicación
15
Tipos de Atributos
16
Enumerados
enum EstadoCuenta {
OPERATIVA, INMOVILIZADA, SOBREGIRADA
}
class Cuenta {
private String titular;
private double saldo;
private EstadoCuenta estado;
...
17
Asociación entre Clases
18
Asociación entre Clases
Cuenta
Persona
titular: Persona;
nombre: String;
saldo: double;
cédula: String;
depositar(valor: double);
retirar(valor: double);
Objeto Cuenta
Objeto Persona
c1:Cuenta
p1:Persona
- titular =
- nombre = "Luis Perez"
- saldo = 1.400.000,00 Referencia a otro objeto - cédula = "34789567"
19
Semántica de Referencia
• Una referencia es un valor que en tiempo de ejecución está
o vacío (null) o conectado.
• Si está conectado, una referencia identifica a un único
objeto.
• Mientras exista, cada objeto posee una identidad única
denominada, identificador de objeto (oid), la cual es
independiente de su estado :
• Dos objetos con diferentes oids pueden tener los mismos
valores en sus campos.
• Los valores de los campos de un objeto pueden cambiar, pero
su oid es inmutable.
• Cuando se asigna un objeto a una variable no se asigna la
estructura de datos del objeto sino el oid.
20
Estados de una Referencia
Persona persona;
Estado Estado
null conectado
persona = null;
21
Igualdad vs. Identidad
a c d
a
b
a=b
a b
23
Aliasing
Cuenta cuenta1;
Cuenta cuenta2;
...
double saldo = cuenta1.getSaldo();
cuenta2 = cuenta1;
cuenta2.retiro(1000.00);
...
// cuenta1.getSaldo() != saldo !!!
24
Copia de Objetos
25
Semántica de Referencias
26
Semántica de Referencias
cuenta
Objeto Persona
"34789567" cédula
código 23456
27
Semántica de Referencias
Compartición
Objeto Cuenta Objeto Cuenta
titular titular
últimosMovimientos últimosMovimientos
Objeto Persona
28
Semántica de Referencias
Autoreferencias
categoria Fijo
salario 600000.00
jefe
29
Referencias vs. Punteros
30
Métodos y Mensajes
31
Ejemplo Método vs. Mensaje
32
Mensaje vs. Procedimiento
33
Definición de Métodos
34
Ejemplo
• Método retiro teniendo en cuenta el estado de la cuenta
35
Sobrecarga de Métodos
• Java soporta sobrecarga de métodos
el mismo nombre pero con DIFERENTE lista de tipos de
argumentos.
• No pueden diferenciarse únicamente en el tipo de retorno.
// Pagar de contado
public boolean pagar (Compra recibo) {
return retiro(recibo.getTotal());
}
// Pagar a plazos, devuelve el número de palzos
public int pagar (Compra recibo, boolean aPlazos) {
...
}
36
Paso de Parámetros
• Sea el método
• metodo (T1 p1,..., Tn pn)
• Donde p1 ... pn son los parámetros formales
• y la invocación (mensaje)
• objeto.metodo (a1,...,an)
• Donde a1 ... an son los parámetros reales
• Debemos responder a las siguientes preguntas:
• ¿Cuál es la correspondencia entre parámetros reales y
formales?
• ¿Qué operaciones se permiten sobre los parámetros formales?
• ¿Qué efecto tendrán las operaciones aplicadas sobre los
parámetros formales sobre los parámetros reales
correspondientes?
37
Paso de Parámetros
38
Paso de Parámetros
39
Paso de Parámetros
...
40
Instancia Actual
41
Ejemplo: c1.retiro(30000,00)
public void retiro (double cantidad) {
if (puedoRetirar(cantidad))
saldo = saldo - cantidad;
}
c1
Objeto Persona
"34789567" cédula
código 12345
42
Instancia Actual
43
Referencia this
44
Referencia this
45
Combinación Módulo-Tipo
46
Creación de Objetos
47
Declaración vs. Creación
Cuenta c;
// Declaración
c Estado null
• Estado “conectado”
c
• c contiene la referencia al
objeto
• c almacena el oid asignado al
objeto al crearse
Objeto Cuenta
48
Constructores
49
Inicialización por Defecto
boolean false
float +0.0f
double +0.0d
50
Constructores para la Clase Cuenta
public Cuenta(Persona persona)
{
// Utilizamos this para invocar al otro constructor
// reutilización de código
this(persona, 10000.00);
}
public Cuenta(Persona persona, double saldoInicial)
{
titular = persona;
saldo = saldoInicial;
ultimosMovimientos = new double[20];
}
51
Creación de Objetos
52
Creación de Objetos
Cuenta cuenta = new Cuenta(60000.00);
cuenta
titular null
código 1
saldo 60000,00
últimosMovimientos null
53
Atributos Finales
54
Atributo Final
class Cuenta {
// Los atributos se pueden inicializar al
// momento de la declaración
private double saldo = 10000.00;
private final Persona titular;
public Cuenta(Persona persona) {
titular = persona;
}
56
Atributos de Clase
class Cuenta {
private static int ultimoCodigo = 0;
private int codigo;
private double saldo = 10000.00;
private final Persona titular;
private double[] ultimosMovimientos;
public Cuenta(Persona persona, double saldoInicial) {
codigo = ++ultimoCodigo;
saldo = saldoInicial;
titular = persona;
ultimosMovimientos = new double[20];
}
}
57
Constantes
58
Constantes
class Cuenta {
private static final int MAX_MOVIMIENTOS = 20;
private static final DOUBLE SALDO_MINIMO = 10000.00;
private static int ultimoCodigo = 0;
private int codigo;
private double saldo;
private final Persona titular;
private double[] ultimosMovimientos;
public Cuenta(Persona persona) {
codigo = ++ultimoCodigo;
saldo = SALDO_MINIMO;
titular = persona;
ultimosMovimientos = new double[MAX_MOVIMIENTOS];
}
}
59
Métodos de Clase
60
Métodos de Clases
class Cuenta {
private static final int ultimoCodigo = 0;
Cuenta.getNumeroCuenta();
61
Destrución de Objetos
62