SlideShare una empresa de Scribd logo
1 de 86
Descargar para leer sin conexión
Tema 2: Clase y objetos en Java
Programación Orientada a Objetos
Curso 2009/2010
Begoña Moros Valle
Tema 2 Clases y Objetos 2
Introducción
Clases
Objetos
Semántica referencia
Métodos y mensajes
Creación de objetos
Modelo de ejecución OO
Genericidad
Principios de diseño de clases
Índice
Tema 2 Clases y Objetos 3
Introducción
Programa OO
Clase
Objeto
Colección estructurada
de clases
Implementación de un
Tipo Abstracto de Datos (TAD)
Una instancia de una clase
Los objetos se comunican mediante mensajes
Tema 2 Clases y Objetos 4
Clases
DEFINICIÓN: Implementación total o parcial de un TAD
Entidad sintáctica que describen objetos que van a
tener la misma estructura y el mismo
comportamiento.
Doble naturaleza: Módulo + Tipo de Datos
Módulo (concepto sintáctico)
Mecanismo para organizar el software
Tipo (concepto semántico)
Mecanismo de definición de nuevos tipos de datos: describe
una estructura de datos (objetos) y las operaciones
aplicables.
Tema 2 Clases y Objetos 5
Módulo ≠ Tipo. Ejemplo Modula2
DEFINITION MODULE Pila;
EXPORT QUALIFIED PILA, vacia, pop, push, tope;
TYPE PILA;
PROCEDURE vacia(pila:PILA): BOOLEAN;
PROCEDURE nuevaPila: PILA;
PROCEDURE pop (VAR pila:PILA):INTEGER;
PROCEDURE push (VAR pila:PILA; valor:INTEGER);
PROCEDURE tope (VAR pila:PILA):INTEGER;
END Pila;
Tema 2 Clases y Objetos 6
Especificación separada de la implementación
IMPLEMENTATION MODULE Pila;
TYPE PILA = POINTER TO Node;
Node = RECORD
valor:INTEGER;
siguiente:PILA;
END;
PROCEDURE pop (VAR pila:PILA):INTEGER;
…
END pop;
...
END Pila;
Tema 2 Clases y Objetos 7
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, ...
operaciones: reintegro, ingreso, …
Definimos una clase CUENTA
Componentes de un clase
Tema 2 Clases y Objetos 8
Ejemplo: Clase Cuenta
Cuenta
titular: String;
saldo: double;
reintegro(valor:double);
ingreso (valor:double);
Definición de la clase
Atributos
Métodos
“José Martínez”
1200.0
Tiempo de ejecución
Objeto Cuenta
titular
saldo
Tema 2 Clases y Objetos 9
Clase Cuenta en Java
class Cuenta{
String titular;
double saldo;
void ingreso (double cantidad){
saldo = saldo + cantidad;
}
void reintegro (double cantidad){
if (cantidad <= saldo)
saldo = saldo – cantidad;
}
}
ATRIBUTOS
MÉTODOS
Tema 2 Clases y Objetos 10
Ocultación de Información
A las características de una clase (atributos y
métodos) se les puede asignar un modificador
de visibilidad:
public:
Característica pública, accesible desde todas las clases
private:
Característica privada, accesible sólo dentro de la clase
donde se define
Principio de diseño:
Todos los atributos de una clase son privados
Los métodos pueden tener distintos niveles de
visibilidad
Tema 2 Clases y Objetos 11
Clase Cuenta en Java
class Cuenta{
private String titular;
private double saldo;
public void ingreso (double cantidad){
saldo = saldo + cantidad;
}
public void reintegro (double cantidad){
if (puedoSacar(cantidad))
saldo = saldo – cantidad;
}
private boolean puedoSacar(double cantidad){
return cantidad <= saldo;
}
}
Tema 2 Clases y Objetos 12
Acceso y modificación de atributos
La única forma de acceder a los atributos es a
través de métodos públicos
Métodos get para consultar el valor del
atributo
Métodos set para establecer el valor del
atributo
La implementación de los métodos set/get
depende del nivel de acceso de los atributos.
Se aísla al cliente de los cambios en la
estructura de datos.
Tema 2 Clases y Objetos 13
Clase Cuenta en Java
class Cuenta{
private String titular;
private double saldo;
public String getTitular(){
return titular;
}
//No setTitular porque es inmutable
public double getSaldo(){
return saldo;
}
/* No setSaldo porque se modifica con ingresos
y reintegros */
}
Tema 2 Clases y Objetos 14
Paquetes
Unidad modular del lenguaje que permite agrupar
clases que están relacionadas
Además de public y private, se puede establecer
que una característica de la clase tiene visibilidad a
nivel de paquete
Visible a todas las clases del mismo paquete
Visibilidad por defecto
A las clases también se les puede especificar un nivel
de visibilidad:
public: la clase es visible desde cualquier paquete
A nivel de paquete: la clase sólo es visible en el paquete al que
pertenece.
Tema 2 Clases y Objetos 15
Paquetes
La pertenencia de una clase a un paquete se
debe especificar antes de la declaración
(package)
Para utilizar una clase definida en un paquete
distinto:
Se utiliza el nombre cualificado de la clase
Ejemplo: java.util.LinkedList unaLista;
Se importa la clase o el paquete al comienzo de la
declaración
Se puede utilizar el nombre de la clase sin cualificar
import java.util.LinkedList; o bien
import java.util.*;
Tema 2 Clases y Objetos 16
Clase Cuenta en Java
package banco.cuentas;
import java.util.LinkedList;
public class Cuenta{
String titular;
double saldo;
LinkedList ultimasOperaciones;
void ingreso (double cantidad){…
}
void reintegro (double cantidad){…
}
}
Anidamiento de paquetes!!
Tema 2 Clases y Objetos 17
Un objeto es una instancia de una clase,
creada en tiempo de ejecución
Es una estructura de datos formada por tantos
campos como atributos tiene la clase.
El estado de un objeto viene dado por el valor
de los campos.
Los métodos permiten consultar y modificar el
estado del objeto.
Objetos
Tema 2 Clases y Objetos 18
Objetos dominio vs. Objetos aplicación
Ejemplo: Aplicación Correo electrónico
Objetos externos:
Procedentes del dominio de la aplicación:
“carpeta”, “buzón”, “mensaje”
Objetos software:
Procedentes del ANALISIS: todos los externos
Procedentes del DISEÑO/IMPLEMENTACION:
“árbol binario”, “cola”, “lista enlazada”, “ventana”,...
Tema 2 Clases y Objetos 19
empleado
cuentaAhorro
clientecuentaCorriente
Objetos del mundo real
empleado cuentaAhorro
clientecuentaCorriente
Instancias de las clases (objetos software)
EmpleadoCuentaAhorro ClienteCuentaCorriente
Cuenta Persona
Sistema Software (Clases)
ANALISIS
DISEÑO
EJECUCIÓN
“Cada objeto es
instancia
directa
de una clase”
Tema 2 Clases y Objetos 20
Tipos de datos primitivos:
Enteros: byte, short, int, long
Reales: float, double
Carácter: char
Booleano: boolean
Referencias:
Sus valores son objetos de tipos no básicos, otras
clases.
Enumerados: son clases que representan un
conjunto finito de valores
Tipos de los atributos
Tema 2 Clases y Objetos 21
Enumerados
enum EstadoCuenta{
OPERATIVA, INMOVILIZADA, NUM_ROJOS;
}
public class Cuenta{
private String titular;
private double saldo;
private EstadoCuenta estado;
…
}
Tema 2 Clases y Objetos 22
Relación de clientela
Cuando en una clase A establecemos que el
tipo de un atributo es otra clase B, decimos que
A es cliente de B.
Por ejemplo:
Definimos la clase Persona
Declaramos el tipo del atributo titular (en la clase
Cuenta) como Persona.
La clase Cuenta es cliente de la clase Persona
Tema 2 Clases y Objetos 23
Relación de clientela
Cuenta
titular: Persona;
saldo: double;
reintegro(valor:double);
ingreso (valor:double);
Persona
nombre: String;
dni: String;
1200.0
Objeto Cuenta
titular
saldo
“José Martínez”
“34789567R”
Objeto Persona
Referencia a otro objeto!!
Tema 2 Clases y Objetos 24
Semántica 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,
independiente de su estado identificador de
objeto (oid):
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.
Tema 2 Clases y Objetos 25
Estado
null
Estado
Conectado
Cuando se crea el objeto!!!
b = c (si c está conectado)
b = null
b = c (si c es null)
Estados de una referencia
Tema 2 Clases y Objetos 26
Igualdad vs. identidad
Igualdad entre referencias Identidad
a == c {true}
a == b {false}
Igualdad entre objetos
Podemos utilizar el método equals
b
a
c
d
“uno”
23
“uno”
23
“dos”
23
Tema 2 Clases y Objetos 27
a b
a = b
ba
Asignación de referencias
La asignación de referencias no implica copia
de valores sino de oids
Problema: “aliasing”
Tema 2 Clases y Objetos 28
Aliasing
Cuenta cuenta1;
Cuenta cuenta2;
…
double saldo = cuenta1.getSaldo();
cuenta2 = cuenta1;
cuenta2.reintegro(1000.0);
// cuenta1.getSaldo() != saldo !!
Tema 2 Clases y Objetos 29
Copia de objetos
Si la asignación no implica copia de
objetos ¿cómo se pueden copiar?
copia = obj.clone();
Constructor de copia:
Se pasa como parámetro un objeto de la misma
clase
Se inicializan los campos del nuevo objeto con los
mismos valores de los campos del objeto que se
pasa como parámetro.
Tema 2 Clases y Objetos 30
Semántica referencia
Ventajas de las referencias:
Compartición de objetos integridad referencial
Permite definir estructuras recursivas (auto-
referencias)
Más eficiente manejo objetos complejos
Los objetos se crean cuando se necesitan
Soporte para el polimorfismo (Tema 3)
Inconvenientes:
Aliasing
Tema 2 Clases y Objetos 31
123456
100000
titular
codigo
saldo
ultimasOperaciones
J. Gomez
87654321
nombre
dni
Objeto Persona
-5000 10000
Objeto Array
miCuenta
Semántica referencia
Tema 2 Clases y Objetos 32
55000
-5000
J. Gómez
87654321
nombre
dni
Objeto Persona
-5000
10000
123456
100000
titular
codigo
saldo
ultOper
Objeto Cuenta
876234
50000
titular
codigo
saldo
ultOper
Objeto Cuenta
Fijo
100000000
nombre
categoria
salario
jefe
M. Martinez
Objeto Empleado
Compartición Autorreferencias
Semántica referencia
Tema 2 Clases y Objetos 33
Referencia vs. punteros
Referencias y punteros son conceptos muy
próximos pero diferentes
Referencias se asocian a objetos.
Toda referencia tiene un tipo
null representa el estado no conectado
Punteros se asocian a direcciones de
memoria.
null en C es un valor de tipo puntero
Una variable denota una referencia a un objeto
Tema 2 Clases y Objetos 34
Métodos y mensajes
Un método está compuesto por:
Cabecera: Identificador y Parámetros
Cuerpo: Secuencia de instrucciones
Mensaje:
Mecanismo básico de la computación OO.
Invocación de la aplicación de un método sobre un
objeto.
Un mensaje está formado por tres partes
Objeto receptor
Selector o identificador del método a aplicar
Argumentos
Tema 2 Clases y Objetos 35
Ejemplo método vs. mensaje
Método reintegro en la clase Cuenta:
Mensaje, aplica el método reintegro sobre un
objeto cuenta:
cuenta.reintegro(600.0);
public double reintegro (double cantidad) {
if (puedoSacar(cantidad))
saldo = saldo – cantidad;
}
Tema 2 Clases y Objetos 36
Mensajes vs. Procedimientos
¡No confundir con la invocación de un
procedimiento en un lenguaje imperativo!
Un mensaje parece una llamada a procedimiento en
la que sólo cambia el formato:
Mensaje unaCuenta.ingreso (100000)
Procedimiento ingreso (unaCuenta,100000)
En una invocación a procedimiento todos los
argumentos se tratan del mismo modo.
En un mensaje un argumento tiene una naturaleza
especial: “objeto receptor”
Tema 2 Clases y Objetos 37
Definición de Métodos
Todo método tiene un valor de retorno
Si no devuelve nada se indica con void
Para cada método se establece el nivel de
visibilidad
¿Qué instrucciones podemos incluir en el
cuerpo de un método?
Asignación
Estructuras condicionales
Iteración
Invocación a otro método = Mensajes
Creación de objetos
Tema 2 Clases y Objetos 38
Sentencias de control de flujo
if( expresión-booleana )
{
sentencias;
}
[else {
sentencias;
}]
switch(expresión) {
case valor1:
sentencias;
break;
case valor2:
sentencias;
break;
[default:
sentencias;]
}
Tema 2 Clases y Objetos 39
Ejemplos
int saldo;
…
if (saldo<0)
estadoCuenta = Estado.NUMEROS_ROJOS;
int dia;
…
switch (dia){
case 1: System.out.println(“Lunes”); break;
case 2: System.out.println(“Martes”); break;
…
case 7: System.out.println(“Domingo”); break;
}
Tema 2 Clases y Objetos 40
Ejemplo
Método reintegro teniendo en cuenta el estado de la
cuenta:
public boolean reintegro (double cantidad){
switch (estadoCuenta) {
case INMOVILIZADA:
case NUMEROS_ROJOS: return false;
case OPERATIVA: if (puedoSacar(cantidad))
saldo = saldo - cantidad;
return true;
default: return false;
}
}
Tema 2 Clases y Objetos 41
[inicialización;]
do {
sentencias;
[iteración;]
}while (expresión-booleana );
Bucles (1/2)
[inicialización;]
while( expresión-booleana ) {
sentencias;
[iteración;]
}
Tema 2 Clases y Objetos 42
Ejemplos
public class Cuenta{
…
private double[] ultimasOperaciones;
public double getSaldo(){
int index = 0;
double saldo = 0;
while (index < ultimasOperaciones.length){
saldo = saldo + ultimasOperaciones[index];
++index;
}
return saldo;
}
}
LOS ARRAYS SON OBJETOS!!!
Tema 2 Clases y Objetos 43
Bucles (2/2)
for( inicialización; exp-booleana; iteración ) {
sentencias;
}
for(Tipo valor : nombreColeccion){
//hacer algo con “valor”
}
Bucle ForEach
Tema 2 Clases y Objetos 44
Ejemplos
public double getSaldo(){
double saldo = 0;
for (int index=0; i<ultimasOperaciones.length; index++)
saldo = saldo + ultimasOperaciones[index];
return saldo;
}
public double getSaldo(){
double saldo = 0;
for (double operacion : ultimasOperaciones)
saldo = saldo + operacion;
return saldo;
}
Tema 2 Clases y Objetos 45
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.
//Pago de una compra en una vez
public boolean cobrar(Compra ticket){
return reintegro(ticket.getTotal());
}
//Pago a plazos devuelve el número de plazos
public int cobrar(Compra ticket, boolean aplazado){
…
}
Tema 2 Clases y Objetos 46
Paso de parámetros
Sea el método
met (T1 p1,…, Tn pn)
Donde p1 … pn son los parámetros formales
y la invocación (mensaje)
obj.met (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?
Tema 2 Clases y Objetos 47
Paso de parámetros
El efecto del paso de parámetros es una asignación
pi = ai
En el caso de las referencias, el argumento formal referencia al
mismo objeto referenciado por el argumento real
En el caso de los tipos primitivos pi es una copia de ai
Paso de parámetros siempre por valor
Al parámetro real no le afectan los cambios en el parámetro
formal
Cuando trabajamos con referencias el efecto de una
operación sobre el parámetro formal implica que se
modifique el estado del parámetro real.
Paso por valor de la referencia!!!
Tema 2 Clases y Objetos 48
Paso de parámetros
No existe ninguna restricción sobre las
operaciones aplicables sobre los parámetros
formales
Es posible modificar el parámetro formal
El parámetro real no se cambia porque el
parámetro formal era una copia de la
referencia o del tipo primitivo.
Tema 2 Clases y Objetos 49
Paso de parámetros
public void transferencia(Cuenta emisor, Cuenta receptor,
double cantidad) {
emisor.reintegro(cantidad);
receptor.ingreso(cantidad);
emisor = null;
}
…
banco.transferencia(cuenta1, cuenta2, 3000.0);
No afectaría a la
variable cuenta1
Cambia el estado
de los dos objetos
Tema 2 Clases y Objetos 50
Instancia actual
Cada operación de una computación OO es
relativa a cierto objeto, la instancia actual,
en el momento de la ejecución de la operación
¿A qué objeto Cuenta se refiere el texto de la
rutina reintegro?
El cuerpo de una rutina se refiere a la instancia
sobre la que se aplica
La instancia actual es el receptor de la llamada
actual, el objeto receptor del mensaje
Tema 2 Clases y Objetos 51
123456
600
titular
codigo
saldo
ultimasOperaciones
J. Gomez
87654321
nombre
dni
Objeto Persona
-5000 10000
Objeto Array
c1
public double reintegro (double cantidad) {
if (puedoSacar(cantidad))
saldo = saldo – cantidad;
}
saldo-300
Ejemplo: c1.reintegro(300)
Tema 2 Clases y Objetos 52
public double reintegro (double cantidad) {
if (puedoSacar(cantidad))
saldo = saldo – cantidad;
}
Instancia actual
Si se aplica un método y no se especifica
el objeto receptor, se asume que es la
instancia actual.
El objeto receptor de puedoSacar será
el objeto receptor del reintegro
Tema 2 Clases y Objetos 53
Referencia this
El lenguaje Java proporciona la palabra clave
this que referencia a la instancia actual.
Utilidad:
Distinguir los atributos de los parámetros y variables
locales dentro de la implementación de un método.
Aplicar un mensaje a otro objeto estableciendo como
parámetro la referencia al objeto actual.
Tema 2 Clases y Objetos 54
Referencia this
public void trasladar(Sucursal sucursal){
this.sucursal.eliminar(this);
sucursal.añadir(this);
}
Se refiere al atributo de la clase
Se refiere a la instancia actual, la cuenta
que se va a trasladar
Se refiere al parámetro
Tema 2 Clases y Objetos 55
Combinación módulo-tipo
Como cada módulo es un tipo, cada operación
del módulo es relativa a cierta instancia del tipo
(instancia actual)
¿Cómo funciona la fusión módulo-tipo?
Los servicios proporcionados por una clase,
vista como un módulo, son precisamente las
operaciones disponibles sobre las instancias de
la clase, vista como un tipo.
Tema 2 Clases y Objetos 56
Creación de Objetos
La declaración de una variable cuyo tipo sea
una clase no implica la creación del objeto.
Se necesita un mecanismo explícito de creación
de objetos: new
¿Por qué?
Evitar cadena de creaciones antes de empezar a
hacer nada útil
Estructuras recursivas
Los objetos se crean cuando se necesitan
(referencias vacías, compartir objeto)
Tema 2 Clases y Objetos 57
Cuenta c; //declaración
objeto CUENTA
c Estado null
• Estado “conectado”
• c contiene la referencia al objeto
• c almacena el oid asignado al
objeto al crearse
c
c = new Cuenta(…) //creación explícita
Declaración vs. Creación
Tema 2 Clases y Objetos 58
Constructores
Método encargado de inicializar correctamente los
objetos
Métodos con el mismo nombre de la clase pero sin valor
de retorno
No se pueden invocar una vez que el objeto se ha
creado
Permite sobrecarga para especificar formas distintas
de inicializar los objetos
Toda clase tiene que tener al menos un constructor
Si no se define ningún constructor, el compilador crea
uno por defecto sin argumentos, vacío, que inicializa
los atributos a los valores por defecto.
Tema 2 Clases y Objetos 59
Inicialización por defecto
+0.0ffloat
falseboolean
Carácter 0 (‘u000’)char
nullReferencia a objeto
+0.0ddouble
0byte,short,int,
long
Valor InicialTipo
Tema 2 Clases y Objetos 60
Constructores para la clase Cuenta
public Cuenta(Persona quien){
//Utilizamos this para invocar al otro constructor
// reutilización de código
this(quien, 100);
}
public Cuenta(Persona quien, double saldoInicial){
titular = quien;
saldo = saldoInicial;
ultimasOperaciones = new double[20];
}
El array hay que crearlo!!!
Tema 2 Clases y Objetos 61
Creación de objetos
La construcción de un objeto consta de tres
etapas:
Se reserva espacio en memoria para la estructura de
datos que define la clase.
Inicializa los campos de la instancia con los valores
por defecto
Garantiza que cada atributo de una clase tenga un valor
inicial antes de la llamada al constructor
Se aplica sobre la instancia el constructor que se
invoca
Tema 2 Clases y Objetos 62
Creación de objetos
titular
saldo
codigo
ultimasOperaciones
null
0.0
0
null
300.0
1
Objeto
Persona
…
cta
Cuenta cta = new Cuenta (persona, 300.0);
Tema 2 Clases y Objetos 63
Atributos finales
Java permite especificar que el valor de un
atributo no podrá variar una vez construido el
objeto
Un atributo se declara de sólo consulta
anteponiendo el modificador final a su
declaración
Los atributos finales sólo pueden ser
inicializados en la declaración o en el
constructor
Tema 2 Clases y Objetos 64
Atributo final
public class Cuenta {
//Los atributos se pueden inicializar
//en el momento de la declaración
private double saldo = 100;
private final Persona titular;
public Cuenta(Persona persona) {
titular = persona;
}
…
public void setTitular(Persona persona){
titular = persona;
}
}
Error en tiempo de compilación
Tema 2 Clases y Objetos 65
Atributos de clase
Representa una propiedad cuyo valor es
compartido por todos los objetos de una misma
clase
Ejemplo:
Añadimos a las cuentas un atributo para el código de
cuenta.
Es necesario una variable que almacene el último
código de cuenta asignado.
En un lenguaje imperativo se declararía una
variable global.
Java es un lenguaje OO puro que no permite
declaraciones fuera del ámbito de una clase.
Tema 2 Clases y Objetos 66
Atributos de clase
public class Cuenta {
private static int ultimoCodigo = 0;
private int codigo;
private double saldo;
private final Persona titular;
private double [] ultimasOperaciones;
public Cuenta(Persona nombre, double saldoInicial) {
codigo = ++ultimoCodigo;
titular = nombre;
saldo = saldoInicial;
ultimasOperaciones = new double[20];
}
…
A los atributos de clase se tiene acceso desde cualquier método de la clase
Tema 2 Clases y Objetos 67
Constantes
En Java no hay una declaración específica
para las constantes.
Se consigue el mismo resultado definiendo un
atributo de clase y final.
Las constantes no pueden ser modificadas.
No tiene sentido definir métodos de acceso y
modificación.
El nivel de acceso es controlado por su
visibilidad.
Tema 2 Clases y Objetos 68
Constantes
public class Cuenta {
private static final int MAX_OPERACIONES = 20;
private static final double SALDO_MINIMO = 100;
private static int ultimoCodigo = 0;
private int codigo;
private double saldo;
private final Persona titular;
private double[] ultimasOperaciones;
public Cuenta(Persona persona) {
codigo = ++ultimoCodigo;
titular = persona;
saldo = SALDO_MINIMO;
ultimasOperaciones = new double[MAX_OPERACIONES];
}…
}
Tema 2 Clases y Objetos 69
Métodos de clase
¿Cómo definimos operaciones que manejan
atributos de clase?
Un método se define de clase anteponiendo el
identificador static a su declaración
En el cuerpo del método de clase sólo se
puede acceder a los atributos de clase
Para la aplicación de un método de clase no
se hace uso de ningún objeto receptor, sino del
nombre de la clase
Tema 2 Clases y Objetos 70
Métodos de clase
public class Cuenta {
private static int ultimoCodigo = 0;
…
public static int getNumeroCuentas() {
return ultimoCodigo;
}
}
Cuenta.getNumeroCuentas();
Tema 2 Clases y Objetos 71
En Java los objetos no se destruyen
explícitamente
Recolección automática de memoria de los
objetos no referenciados (Garbage Collector)
Existe un método finalize()
Este método se invocará justo antes de la
recolección de basura
Interesa para liberar recursos (ej. conexión bases de
datos).
En C++ todos los objetos se destruyen (en un
programa sin errores), mientras que en Java no
siempre se “recolectan”.
Destrucción de objetos
Tema 2 Clases y Objetos 72
Para obtener un código ejecutable se deben ensamblar
las clases para formar sistemas (cerrado).
Un sistema viene dado por:
Un conjunto de clases
La clase raíz
El procedimiento de creación de la clase raíz.
La ejecución de un programa OO consiste en:
Creación dinámica de objetos
Envío de mensajes entre los objetos creados, siguiendo un
patrón impredecible en tiempo de compilación
Ausencia de programa principal
Modelo de ejecución OO
Tema 2 Clases y Objetos 73
¿Cómo empieza la ejecución de un programa OO?
Creación de un “objeto raíz”
Aplicar mensaje sobre “objeto raíz”
En tiempo de ejecución, el flujo de ejecución siempre
se encuentra:
aplicando una operación sobre un objeto (instancia actual) o
ejecutando una operación que no es un mensaje (asignación,
creación).
En un instante dado bien se aplica un mensaje sobre la
instancia actual o sobre un objeto accesible desde él.
Un mensaje siempre formará parte del cuerpo de una
rutina de una clase
Modelo de ejecución OO
Tema 2 Clases y Objetos 74
obj2
obj7
obj3
obj5
obj8
obj9
obj1
obj4
ACTUAL
RAIZ
Modelo de ejecución OO
Tema 2 Clases y Objetos 75
El método main
Debemos proporcionar el nombre de la clase
que conduzca la aplicación
Cuando ejecutamos un programa, el sistema
localizará esta clase y ejecutará el main que
contenga
El método main es un método de clase que
recibe como parámetro un array de cadenas de
texto que son los parámetros del programa
Tema 2 Clases y Objetos 76
El método main
Definición del método main
public class Eco{
public static void main(String[] args){
for(int i=0; i < args.length; i++)
System.out.println(args[i]+” ”);
}
}
Parámetros del programa:
c: java Eco estamos aquí --> SALIDA: estamos aquí
Tema 2 Clases y Objetos 77
Genericidad
¿Cómo escribir una clase que represente una
estructura de datos y que sea posible almacenar
objetos de cualquier tipo?
PilaEnteros
PilaLibros ⇒ Pila de T?
PilaFiguras
…
Necesidad de reconciliar reutilización con el uso de
un lenguaje tipado.
Tema 2 Clases y Objetos 78
Genericidad
Posibilidad de parametrizar las clases
los parámetros son tipos de datos.
Facilidad útil para describir estructuras
contenedoras generales que se implementan de
la misma manera independiente de los datos
que contiene: TIPO BASE ES UN PARÁMETRO.
class ARRAY <T>
class PILA <T>
class LISTA <T>, ...
Tema 2 Clases y Objetos 79
Clase genérica
import java.util.ArrayList;
public class Pila<T>{
private ArrayList<T> contenido;
…
public boolean isEmpty(){…}
public void push (T item){ … }
public T pop() {…}
public T tope(){…}
}
Tema 2 Clases y Objetos 80
Instanciación de tipo genérico
Se tiene que instanciar el parámetro tanto en la
declaración como en la creación:
Pila<Cuenta> pilaCuentas = new Pila<Cuenta>();
El parámetro genérico puede ser:
1) Una de las clase que encapsulan a los tipos primitivos
Pila<Integer> pilaEnteros;
2) Un tipo referencia
Pila<Punto> pilaPuntos;
Pila<Pila<Punto>> pilaDePilasPuntos ;
3) Un parámetro genérico formal de la clase cliente
class Pila <T> {
ArrayList<T> contenido;
....
}
Tema 2 Clases y Objetos 81
Autoboxing
No se puede instanciar una clase genérica con un tipo
primitivo.
Existe una clase envoltorio para cada tipo primitivo
Integer, Float, Double, Character, Boolean, etc.
El compilador transforma automáticamente tipos
primitivos en objetos de las clases envoltorio y
viceversa (autoboxing)
Pila<Integer> pilaEnteros = new Pila<Integer>;
pilaEnteros.push(7);
int tope = pilaEnteros.tope();
Tema 2 Clases y Objetos 82
Operaciones sobre entidades de tipos
genéricos
Sea la clase:
public class C <T,G,...> {
private T x;
public void metodo (G p){ … }
...
}
¿Qué operaciones podemos aplicar sobre las
entidades cuyo tipo es un parámetro genérico?
En una clase cliente, T, G, … pueden ser instanciados a
cualquier tipo
Tema 2 Clases y Objetos 83
Cualquier operación sobre una entidad genérica debe
ser aplicable a cualquier tipo.
Posibles operaciones:
Asignación entre entidades genéricas (x=y)
Identidad (x==y o x!=y)
a.f(...,x,...) (el parámetro es de tipo T)
Operaciones aplicables sobre cualquier objeto:
x.clone() o x.equals(y)
¡¡No se permite la creación!!
T at = new T(); No compila!!
¿Es posible ampliar el conjunto de operaciones?
Si Genericidad restringida (Tema 3)
Operaciones sobre entidades de tipos
genéricos
Tema 2 Clases y Objetos 84
Principios de diseño de clases
Favorecer la legibilidad del código:
Asignar nombres significativos para los identificadores de
atributos, variables y métodos
Inicializar los atributos
Experto en Información:
Asignar una responsabilidad al experto en información, la
clase que tiene la información necesaria para llevar a cabo la
responsabilidad.
Favorecer la extensibilidad:
Utilizar constantes simbólicas significativas
Seguir los principios de diseño modular
Tema 2 Clases y Objetos 85
Principios de diseño de clases
Ocultación de la Información
Los atributos de una clase deben ser privados y ofrecer los métodos
de consulta necesarios dependiendo de su nivel de acceso (set y/o
get)
Diferenciar entre métodos públicos (interfaz de la clase) y métodos
privados (métodos auxiliares)
Para acceder a una constante, ésta debe ser pública en lugar de
ofrecer un método de consulta.
Alta Cohesión
Fragmentar clases que tengan demasiadas responsabilidades
Bajo Acoplamiento
Ley de Demeter: “Habla sólo con tus amigos” para un método m de
una clase C sólo deberían invocarse los métodos: de la clase C, de
los parámetros que recibe el método m, de cualquier objeto creado
en el método m, de cualquier atributo (variable de instancia) de la
clase C
Tema 2 Clases y Objetos 86
Aliasing y el Principio de
Ocultación de la Información
Hay que prestar atención a los métodos de acceso, ya
que si un atributo es una referencia, al devolver la
referencia se compromete la integridad del objeto.
Por ejemplo, getUltimasOperaciones
debe devolver una copia de la colección, no la colección.
Si devuelve la colección el cliente de la clase Cuenta podría
acceder a la implementación para modificarla.
Las modificaciones de la colección se deben hacer SIEMPRE
desde métodos de la clase cuenta, nunca desde los clientes de
la clase.
Se debe valorar el contexto de la clase para decidir si
devolver la referencia o una copia.

Más contenido relacionado

La actualidad más candente

Historia de la tecnologia de base de datos
Historia de la tecnologia de base de datosHistoria de la tecnologia de base de datos
Historia de la tecnologia de base de datos
ralbarracin
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetos
yoiner santiago
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logico
josecuartas
 

La actualidad más candente (20)

Unidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos ConceptualUnidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos Conceptual
 
Flujo datos
Flujo datosFlujo datos
Flujo datos
 
Unidad 1. Fundamentos de Base de Datos
Unidad 1. Fundamentos de Base de DatosUnidad 1. Fundamentos de Base de Datos
Unidad 1. Fundamentos de Base de Datos
 
Modelo de datos
Modelo de datosModelo de datos
Modelo de datos
 
Manual de conexion a una base de datos con gambas
Manual de conexion a una base de datos con gambasManual de conexion a una base de datos con gambas
Manual de conexion a una base de datos con gambas
 
Diagramas de caso de uso
Diagramas de caso de usoDiagramas de caso de uso
Diagramas de caso de uso
 
Fundamentos de base de datos 1a. unidad
Fundamentos de base de datos 1a. unidadFundamentos de base de datos 1a. unidad
Fundamentos de base de datos 1a. unidad
 
Historia de la tecnologia de base de datos
Historia de la tecnologia de base de datosHistoria de la tecnologia de base de datos
Historia de la tecnologia de base de datos
 
Manejo de archivos en JAVA
Manejo de archivos en JAVAManejo de archivos en JAVA
Manejo de archivos en JAVA
 
Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetos
 
Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)Conceptos básicos de programación orientada a objetos (poo)
Conceptos básicos de programación orientada a objetos (poo)
 
Lenguaje SQL
Lenguaje SQLLenguaje SQL
Lenguaje SQL
 
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
 
Jerarquía de clases, herencia, polimorfismo
Jerarquía de clases, herencia, polimorfismoJerarquía de clases, herencia, polimorfismo
Jerarquía de clases, herencia, polimorfismo
 
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
 
Fundamentos de Bases de Datos - Introducción
Fundamentos de Bases de Datos - IntroducciónFundamentos de Bases de Datos - Introducción
Fundamentos de Bases de Datos - Introducción
 
Modelo entidad
Modelo entidadModelo entidad
Modelo entidad
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
Transformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logicoTransformar modelo entidad relacion a modelo logico
Transformar modelo entidad relacion a modelo logico
 

Similar a Clases y objetos de java

programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
jent46
 
Sesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesSesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clases
ecodereck
 
Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetos
Antonio Palomares Sender
 
Manual poo-unidad-visual-basic
Manual poo-unidad-visual-basicManual poo-unidad-visual-basic
Manual poo-unidad-visual-basic
gerardd98
 
Java orientado a objetos
Java orientado a objetosJava orientado a objetos
Java orientado a objetos
Steven Pazmiño
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
UVMVirtual
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic net
pp mm
 
Memch clases lep ii
Memch   clases lep iiMemch   clases lep ii
Memch clases lep ii
dani Safres
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
FamiliaAyluardo
 

Similar a Clases y objetos de java (20)

programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Apunte paradigma orientado a objetos
Apunte paradigma orientado a objetosApunte paradigma orientado a objetos
Apunte paradigma orientado a objetos
 
Clases y funciones_especiales
Clases y funciones_especialesClases y funciones_especiales
Clases y funciones_especiales
 
Sesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesSesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clases
 
UD2-ConceptosBasicos.pdf
UD2-ConceptosBasicos.pdfUD2-ConceptosBasicos.pdf
UD2-ConceptosBasicos.pdf
 
Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetos
 
Manual poo-unidad-visual-basic
Manual poo-unidad-visual-basicManual poo-unidad-visual-basic
Manual poo-unidad-visual-basic
 
Manual poo-unidad-visual-basic
Manual poo-unidad-visual-basicManual poo-unidad-visual-basic
Manual poo-unidad-visual-basic
 
Java orientado a objetos
Java orientado a objetosJava orientado a objetos
Java orientado a objetos
 
1 -programacion_oo
1  -programacion_oo1  -programacion_oo
1 -programacion_oo
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic net
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
10-programacion-orientada-a-objetos.ppt
10-programacion-orientada-a-objetos.ppt10-programacion-orientada-a-objetos.ppt
10-programacion-orientada-a-objetos.ppt
 
5poo
5poo5poo
5poo
 
Propiedades De La Poo
Propiedades De La PooPropiedades De La Poo
Propiedades De La Poo
 
Memch clases lep ii
Memch   clases lep iiMemch   clases lep ii
Memch clases lep ii
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 

Más de innovalabcun

Las Moléculas de la Vida Información complementaria
Las Moléculas de la Vida Información complementariaLas Moléculas de la Vida Información complementaria
Las Moléculas de la Vida Información complementaria
innovalabcun
 

Más de innovalabcun (20)

Estado del arte
Estado del arteEstado del arte
Estado del arte
 
Elaboración de un proyecto de investigación
Elaboración de un proyecto de investigación Elaboración de un proyecto de investigación
Elaboración de un proyecto de investigación
 
Bibliografia
BibliografiaBibliografia
Bibliografia
 
Reproduccion animales
Reproduccion animalesReproduccion animales
Reproduccion animales
 
Reproduccion plantas
Reproduccion plantasReproduccion plantas
Reproduccion plantas
 
Genes cromosomas
Genes cromosomasGenes cromosomas
Genes cromosomas
 
Anabolismo
AnabolismoAnabolismo
Anabolismo
 
Catabolismo
CatabolismoCatabolismo
Catabolismo
 
Metabolismo
MetabolismoMetabolismo
Metabolismo
 
La estructura de la célula
La estructura de la célulaLa estructura de la célula
La estructura de la célula
 
Las Moléculas de la Vida Información complementaria
Las Moléculas de la Vida Información complementariaLas Moléculas de la Vida Información complementaria
Las Moléculas de la Vida Información complementaria
 
El atomo
El atomoEl atomo
El atomo
 
Quimica organica
Quimica organicaQuimica organica
Quimica organica
 
Subneting -
Subneting - Subneting -
Subneting -
 
MECÁNICA: CONCEPTOS BÁSICOS
MECÁNICA: CONCEPTOS BÁSICOS MECÁNICA: CONCEPTOS BÁSICOS
MECÁNICA: CONCEPTOS BÁSICOS
 
ELEMENTOS DE UN SISTEMA
ELEMENTOS DE UN SISTEMA ELEMENTOS DE UN SISTEMA
ELEMENTOS DE UN SISTEMA
 
SUBSISTEMAS DE CONTROL
SUBSISTEMAS DE CONTROL SUBSISTEMAS DE CONTROL
SUBSISTEMAS DE CONTROL
 
DISEÑO MEJORAMIENTO DE LOS SISTEMAS
DISEÑO MEJORAMIENTO DE LOS SISTEMASDISEÑO MEJORAMIENTO DE LOS SISTEMAS
DISEÑO MEJORAMIENTO DE LOS SISTEMAS
 
Doc ley850 web - parte 2
Doc ley850 web - parte 2 Doc ley850 web - parte 2
Doc ley850 web - parte 2
 
Doc ley850 web - parte 1
Doc ley850 web - parte 1Doc ley850 web - parte 1
Doc ley850 web - parte 1
 

Último

6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
Wilian24
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Fernando Solis
 

Último (20)

PP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomasPP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomas
 
Educacion Basada en Evidencias SM5 Ccesa007.pdf
Educacion Basada en Evidencias  SM5  Ccesa007.pdfEducacion Basada en Evidencias  SM5  Ccesa007.pdf
Educacion Basada en Evidencias SM5 Ccesa007.pdf
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 
Usos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicasUsos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicas
 
Ensayo Paes competencia matematicas 2 Preuniversitario
Ensayo Paes competencia matematicas 2 PreuniversitarioEnsayo Paes competencia matematicas 2 Preuniversitario
Ensayo Paes competencia matematicas 2 Preuniversitario
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
Sesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdfSesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdf
 
prostitución en España: una mirada integral!
prostitución en España: una mirada integral!prostitución en España: una mirada integral!
prostitución en España: una mirada integral!
 
UNIDAD DIDACTICA nivel inicial EL SUPERMERCADO.docx
UNIDAD DIDACTICA nivel inicial EL SUPERMERCADO.docxUNIDAD DIDACTICA nivel inicial EL SUPERMERCADO.docx
UNIDAD DIDACTICA nivel inicial EL SUPERMERCADO.docx
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
Desarrollo y Aplicación de la Administración por Valores
Desarrollo y Aplicación de la Administración por ValoresDesarrollo y Aplicación de la Administración por Valores
Desarrollo y Aplicación de la Administración por Valores
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
UNIDAD DE APRENDIZAJE DE PRIMER GRADO DEL MES DE MAYO PARA TRABAJAR CON ESTUD...
UNIDAD DE APRENDIZAJE DE PRIMER GRADO DEL MES DE MAYO PARA TRABAJAR CON ESTUD...UNIDAD DE APRENDIZAJE DE PRIMER GRADO DEL MES DE MAYO PARA TRABAJAR CON ESTUD...
UNIDAD DE APRENDIZAJE DE PRIMER GRADO DEL MES DE MAYO PARA TRABAJAR CON ESTUD...
 
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptxAEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
AEC2. Egipto Antiguo. Adivina, Adivinanza.pptx
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 

Clases y objetos de java

  • 1. Tema 2: Clase y objetos en Java Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle
  • 2. Tema 2 Clases y Objetos 2 Introducción Clases Objetos Semántica referencia Métodos y mensajes Creación de objetos Modelo de ejecución OO Genericidad Principios de diseño de clases Índice
  • 3. Tema 2 Clases y Objetos 3 Introducción Programa OO Clase Objeto Colección estructurada de clases Implementación de un Tipo Abstracto de Datos (TAD) Una instancia de una clase Los objetos se comunican mediante mensajes
  • 4. Tema 2 Clases y Objetos 4 Clases DEFINICIÓN: Implementación total o parcial de un TAD Entidad sintáctica que describen objetos que van a tener la misma estructura y el mismo comportamiento. Doble naturaleza: Módulo + Tipo de Datos Módulo (concepto sintáctico) Mecanismo para organizar el software Tipo (concepto semántico) Mecanismo de definición de nuevos tipos de datos: describe una estructura de datos (objetos) y las operaciones aplicables.
  • 5. Tema 2 Clases y Objetos 5 Módulo ≠ Tipo. Ejemplo Modula2 DEFINITION MODULE Pila; EXPORT QUALIFIED PILA, vacia, pop, push, tope; TYPE PILA; PROCEDURE vacia(pila:PILA): BOOLEAN; PROCEDURE nuevaPila: PILA; PROCEDURE pop (VAR pila:PILA):INTEGER; PROCEDURE push (VAR pila:PILA; valor:INTEGER); PROCEDURE tope (VAR pila:PILA):INTEGER; END Pila;
  • 6. Tema 2 Clases y Objetos 6 Especificación separada de la implementación IMPLEMENTATION MODULE Pila; TYPE PILA = POINTER TO Node; Node = RECORD valor:INTEGER; siguiente:PILA; END; PROCEDURE pop (VAR pila:PILA):INTEGER; … END pop; ... END Pila;
  • 7. Tema 2 Clases y Objetos 7 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, ... operaciones: reintegro, ingreso, … Definimos una clase CUENTA Componentes de un clase
  • 8. Tema 2 Clases y Objetos 8 Ejemplo: Clase Cuenta Cuenta titular: String; saldo: double; reintegro(valor:double); ingreso (valor:double); Definición de la clase Atributos Métodos “José Martínez” 1200.0 Tiempo de ejecución Objeto Cuenta titular saldo
  • 9. Tema 2 Clases y Objetos 9 Clase Cuenta en Java class Cuenta{ String titular; double saldo; void ingreso (double cantidad){ saldo = saldo + cantidad; } void reintegro (double cantidad){ if (cantidad <= saldo) saldo = saldo – cantidad; } } ATRIBUTOS MÉTODOS
  • 10. Tema 2 Clases y Objetos 10 Ocultación de Información A las características de una clase (atributos y métodos) se les puede asignar un modificador de visibilidad: public: Característica pública, accesible desde todas las clases private: Característica privada, accesible sólo dentro de la clase donde se define Principio de diseño: Todos los atributos de una clase son privados Los métodos pueden tener distintos niveles de visibilidad
  • 11. Tema 2 Clases y Objetos 11 Clase Cuenta en Java class Cuenta{ private String titular; private double saldo; public void ingreso (double cantidad){ saldo = saldo + cantidad; } public void reintegro (double cantidad){ if (puedoSacar(cantidad)) saldo = saldo – cantidad; } private boolean puedoSacar(double cantidad){ return cantidad <= saldo; } }
  • 12. Tema 2 Clases y Objetos 12 Acceso y modificación de atributos La única forma de acceder a los atributos es a través de métodos públicos Métodos get para consultar el valor del atributo Métodos set para establecer el valor del atributo La implementación de los métodos set/get depende del nivel de acceso de los atributos. Se aísla al cliente de los cambios en la estructura de datos.
  • 13. Tema 2 Clases y Objetos 13 Clase Cuenta en Java class Cuenta{ private String titular; private double saldo; public String getTitular(){ return titular; } //No setTitular porque es inmutable public double getSaldo(){ return saldo; } /* No setSaldo porque se modifica con ingresos y reintegros */ }
  • 14. Tema 2 Clases y Objetos 14 Paquetes Unidad modular del lenguaje que permite agrupar clases que están relacionadas Además de public y private, se puede establecer que una característica de la clase tiene visibilidad a nivel de paquete Visible a todas las clases del mismo paquete Visibilidad por defecto A las clases también se les puede especificar un nivel de visibilidad: public: la clase es visible desde cualquier paquete A nivel de paquete: la clase sólo es visible en el paquete al que pertenece.
  • 15. Tema 2 Clases y Objetos 15 Paquetes La pertenencia de una clase a un paquete se debe especificar antes de la declaración (package) Para utilizar una clase definida en un paquete distinto: Se utiliza el nombre cualificado de la clase Ejemplo: java.util.LinkedList unaLista; Se importa la clase o el paquete al comienzo de la declaración Se puede utilizar el nombre de la clase sin cualificar import java.util.LinkedList; o bien import java.util.*;
  • 16. Tema 2 Clases y Objetos 16 Clase Cuenta en Java package banco.cuentas; import java.util.LinkedList; public class Cuenta{ String titular; double saldo; LinkedList ultimasOperaciones; void ingreso (double cantidad){… } void reintegro (double cantidad){… } } Anidamiento de paquetes!!
  • 17. Tema 2 Clases y Objetos 17 Un objeto es una instancia de una clase, creada en tiempo de ejecución Es una estructura de datos formada por tantos campos como atributos tiene la clase. El estado de un objeto viene dado por el valor de los campos. Los métodos permiten consultar y modificar el estado del objeto. Objetos
  • 18. Tema 2 Clases y Objetos 18 Objetos dominio vs. Objetos aplicación Ejemplo: Aplicación Correo electrónico Objetos externos: Procedentes del dominio de la aplicación: “carpeta”, “buzón”, “mensaje” Objetos software: Procedentes del ANALISIS: todos los externos Procedentes del DISEÑO/IMPLEMENTACION: “árbol binario”, “cola”, “lista enlazada”, “ventana”,...
  • 19. Tema 2 Clases y Objetos 19 empleado cuentaAhorro clientecuentaCorriente Objetos del mundo real empleado cuentaAhorro clientecuentaCorriente Instancias de las clases (objetos software) EmpleadoCuentaAhorro ClienteCuentaCorriente Cuenta Persona Sistema Software (Clases) ANALISIS DISEÑO EJECUCIÓN “Cada objeto es instancia directa de una clase”
  • 20. Tema 2 Clases y Objetos 20 Tipos de datos primitivos: Enteros: byte, short, int, long Reales: float, double Carácter: char Booleano: boolean Referencias: Sus valores son objetos de tipos no básicos, otras clases. Enumerados: son clases que representan un conjunto finito de valores Tipos de los atributos
  • 21. Tema 2 Clases y Objetos 21 Enumerados enum EstadoCuenta{ OPERATIVA, INMOVILIZADA, NUM_ROJOS; } public class Cuenta{ private String titular; private double saldo; private EstadoCuenta estado; … }
  • 22. Tema 2 Clases y Objetos 22 Relación de clientela Cuando en una clase A establecemos que el tipo de un atributo es otra clase B, decimos que A es cliente de B. Por ejemplo: Definimos la clase Persona Declaramos el tipo del atributo titular (en la clase Cuenta) como Persona. La clase Cuenta es cliente de la clase Persona
  • 23. Tema 2 Clases y Objetos 23 Relación de clientela Cuenta titular: Persona; saldo: double; reintegro(valor:double); ingreso (valor:double); Persona nombre: String; dni: String; 1200.0 Objeto Cuenta titular saldo “José Martínez” “34789567R” Objeto Persona Referencia a otro objeto!!
  • 24. Tema 2 Clases y Objetos 24 Semántica 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, independiente de su estado identificador de objeto (oid): 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.
  • 25. Tema 2 Clases y Objetos 25 Estado null Estado Conectado Cuando se crea el objeto!!! b = c (si c está conectado) b = null b = c (si c es null) Estados de una referencia
  • 26. Tema 2 Clases y Objetos 26 Igualdad vs. identidad Igualdad entre referencias Identidad a == c {true} a == b {false} Igualdad entre objetos Podemos utilizar el método equals b a c d “uno” 23 “uno” 23 “dos” 23
  • 27. Tema 2 Clases y Objetos 27 a b a = b ba Asignación de referencias La asignación de referencias no implica copia de valores sino de oids Problema: “aliasing”
  • 28. Tema 2 Clases y Objetos 28 Aliasing Cuenta cuenta1; Cuenta cuenta2; … double saldo = cuenta1.getSaldo(); cuenta2 = cuenta1; cuenta2.reintegro(1000.0); // cuenta1.getSaldo() != saldo !!
  • 29. Tema 2 Clases y Objetos 29 Copia de objetos Si la asignación no implica copia de objetos ¿cómo se pueden copiar? copia = obj.clone(); Constructor de copia: Se pasa como parámetro un objeto de la misma clase Se inicializan los campos del nuevo objeto con los mismos valores de los campos del objeto que se pasa como parámetro.
  • 30. Tema 2 Clases y Objetos 30 Semántica referencia Ventajas de las referencias: Compartición de objetos integridad referencial Permite definir estructuras recursivas (auto- referencias) Más eficiente manejo objetos complejos Los objetos se crean cuando se necesitan Soporte para el polimorfismo (Tema 3) Inconvenientes: Aliasing
  • 31. Tema 2 Clases y Objetos 31 123456 100000 titular codigo saldo ultimasOperaciones J. Gomez 87654321 nombre dni Objeto Persona -5000 10000 Objeto Array miCuenta Semántica referencia
  • 32. Tema 2 Clases y Objetos 32 55000 -5000 J. Gómez 87654321 nombre dni Objeto Persona -5000 10000 123456 100000 titular codigo saldo ultOper Objeto Cuenta 876234 50000 titular codigo saldo ultOper Objeto Cuenta Fijo 100000000 nombre categoria salario jefe M. Martinez Objeto Empleado Compartición Autorreferencias Semántica referencia
  • 33. Tema 2 Clases y Objetos 33 Referencia vs. punteros Referencias y punteros son conceptos muy próximos pero diferentes Referencias se asocian a objetos. Toda referencia tiene un tipo null representa el estado no conectado Punteros se asocian a direcciones de memoria. null en C es un valor de tipo puntero Una variable denota una referencia a un objeto
  • 34. Tema 2 Clases y Objetos 34 Métodos y mensajes Un método está compuesto por: Cabecera: Identificador y Parámetros Cuerpo: Secuencia de instrucciones Mensaje: Mecanismo básico de la computación OO. Invocación de la aplicación de un método sobre un objeto. Un mensaje está formado por tres partes Objeto receptor Selector o identificador del método a aplicar Argumentos
  • 35. Tema 2 Clases y Objetos 35 Ejemplo método vs. mensaje Método reintegro en la clase Cuenta: Mensaje, aplica el método reintegro sobre un objeto cuenta: cuenta.reintegro(600.0); public double reintegro (double cantidad) { if (puedoSacar(cantidad)) saldo = saldo – cantidad; }
  • 36. Tema 2 Clases y Objetos 36 Mensajes vs. Procedimientos ¡No confundir con la invocación de un procedimiento en un lenguaje imperativo! Un mensaje parece una llamada a procedimiento en la que sólo cambia el formato: Mensaje unaCuenta.ingreso (100000) Procedimiento ingreso (unaCuenta,100000) En una invocación a procedimiento todos los argumentos se tratan del mismo modo. En un mensaje un argumento tiene una naturaleza especial: “objeto receptor”
  • 37. Tema 2 Clases y Objetos 37 Definición de Métodos Todo método tiene un valor de retorno Si no devuelve nada se indica con void Para cada método se establece el nivel de visibilidad ¿Qué instrucciones podemos incluir en el cuerpo de un método? Asignación Estructuras condicionales Iteración Invocación a otro método = Mensajes Creación de objetos
  • 38. Tema 2 Clases y Objetos 38 Sentencias de control de flujo if( expresión-booleana ) { sentencias; } [else { sentencias; }] switch(expresión) { case valor1: sentencias; break; case valor2: sentencias; break; [default: sentencias;] }
  • 39. Tema 2 Clases y Objetos 39 Ejemplos int saldo; … if (saldo<0) estadoCuenta = Estado.NUMEROS_ROJOS; int dia; … switch (dia){ case 1: System.out.println(“Lunes”); break; case 2: System.out.println(“Martes”); break; … case 7: System.out.println(“Domingo”); break; }
  • 40. Tema 2 Clases y Objetos 40 Ejemplo Método reintegro teniendo en cuenta el estado de la cuenta: public boolean reintegro (double cantidad){ switch (estadoCuenta) { case INMOVILIZADA: case NUMEROS_ROJOS: return false; case OPERATIVA: if (puedoSacar(cantidad)) saldo = saldo - cantidad; return true; default: return false; } }
  • 41. Tema 2 Clases y Objetos 41 [inicialización;] do { sentencias; [iteración;] }while (expresión-booleana ); Bucles (1/2) [inicialización;] while( expresión-booleana ) { sentencias; [iteración;] }
  • 42. Tema 2 Clases y Objetos 42 Ejemplos public class Cuenta{ … private double[] ultimasOperaciones; public double getSaldo(){ int index = 0; double saldo = 0; while (index < ultimasOperaciones.length){ saldo = saldo + ultimasOperaciones[index]; ++index; } return saldo; } } LOS ARRAYS SON OBJETOS!!!
  • 43. Tema 2 Clases y Objetos 43 Bucles (2/2) for( inicialización; exp-booleana; iteración ) { sentencias; } for(Tipo valor : nombreColeccion){ //hacer algo con “valor” } Bucle ForEach
  • 44. Tema 2 Clases y Objetos 44 Ejemplos public double getSaldo(){ double saldo = 0; for (int index=0; i<ultimasOperaciones.length; index++) saldo = saldo + ultimasOperaciones[index]; return saldo; } public double getSaldo(){ double saldo = 0; for (double operacion : ultimasOperaciones) saldo = saldo + operacion; return saldo; }
  • 45. Tema 2 Clases y Objetos 45 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. //Pago de una compra en una vez public boolean cobrar(Compra ticket){ return reintegro(ticket.getTotal()); } //Pago a plazos devuelve el número de plazos public int cobrar(Compra ticket, boolean aplazado){ … }
  • 46. Tema 2 Clases y Objetos 46 Paso de parámetros Sea el método met (T1 p1,…, Tn pn) Donde p1 … pn son los parámetros formales y la invocación (mensaje) obj.met (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?
  • 47. Tema 2 Clases y Objetos 47 Paso de parámetros El efecto del paso de parámetros es una asignación pi = ai En el caso de las referencias, el argumento formal referencia al mismo objeto referenciado por el argumento real En el caso de los tipos primitivos pi es una copia de ai Paso de parámetros siempre por valor Al parámetro real no le afectan los cambios en el parámetro formal Cuando trabajamos con referencias el efecto de una operación sobre el parámetro formal implica que se modifique el estado del parámetro real. Paso por valor de la referencia!!!
  • 48. Tema 2 Clases y Objetos 48 Paso de parámetros No existe ninguna restricción sobre las operaciones aplicables sobre los parámetros formales Es posible modificar el parámetro formal El parámetro real no se cambia porque el parámetro formal era una copia de la referencia o del tipo primitivo.
  • 49. Tema 2 Clases y Objetos 49 Paso de parámetros public void transferencia(Cuenta emisor, Cuenta receptor, double cantidad) { emisor.reintegro(cantidad); receptor.ingreso(cantidad); emisor = null; } … banco.transferencia(cuenta1, cuenta2, 3000.0); No afectaría a la variable cuenta1 Cambia el estado de los dos objetos
  • 50. Tema 2 Clases y Objetos 50 Instancia actual Cada operación de una computación OO es relativa a cierto objeto, la instancia actual, en el momento de la ejecución de la operación ¿A qué objeto Cuenta se refiere el texto de la rutina reintegro? El cuerpo de una rutina se refiere a la instancia sobre la que se aplica La instancia actual es el receptor de la llamada actual, el objeto receptor del mensaje
  • 51. Tema 2 Clases y Objetos 51 123456 600 titular codigo saldo ultimasOperaciones J. Gomez 87654321 nombre dni Objeto Persona -5000 10000 Objeto Array c1 public double reintegro (double cantidad) { if (puedoSacar(cantidad)) saldo = saldo – cantidad; } saldo-300 Ejemplo: c1.reintegro(300)
  • 52. Tema 2 Clases y Objetos 52 public double reintegro (double cantidad) { if (puedoSacar(cantidad)) saldo = saldo – cantidad; } Instancia actual Si se aplica un método y no se especifica el objeto receptor, se asume que es la instancia actual. El objeto receptor de puedoSacar será el objeto receptor del reintegro
  • 53. Tema 2 Clases y Objetos 53 Referencia this El lenguaje Java proporciona la palabra clave this que referencia a la instancia actual. Utilidad: Distinguir los atributos de los parámetros y variables locales dentro de la implementación de un método. Aplicar un mensaje a otro objeto estableciendo como parámetro la referencia al objeto actual.
  • 54. Tema 2 Clases y Objetos 54 Referencia this public void trasladar(Sucursal sucursal){ this.sucursal.eliminar(this); sucursal.añadir(this); } Se refiere al atributo de la clase Se refiere a la instancia actual, la cuenta que se va a trasladar Se refiere al parámetro
  • 55. Tema 2 Clases y Objetos 55 Combinación módulo-tipo Como cada módulo es un tipo, cada operación del módulo es relativa a cierta instancia del tipo (instancia actual) ¿Cómo funciona la fusión módulo-tipo? Los servicios proporcionados por una clase, vista como un módulo, son precisamente las operaciones disponibles sobre las instancias de la clase, vista como un tipo.
  • 56. Tema 2 Clases y Objetos 56 Creación de Objetos La declaración de una variable cuyo tipo sea una clase no implica la creación del objeto. Se necesita un mecanismo explícito de creación de objetos: new ¿Por qué? Evitar cadena de creaciones antes de empezar a hacer nada útil Estructuras recursivas Los objetos se crean cuando se necesitan (referencias vacías, compartir objeto)
  • 57. Tema 2 Clases y Objetos 57 Cuenta c; //declaración objeto CUENTA c Estado null • Estado “conectado” • c contiene la referencia al objeto • c almacena el oid asignado al objeto al crearse c c = new Cuenta(…) //creación explícita Declaración vs. Creación
  • 58. Tema 2 Clases y Objetos 58 Constructores Método encargado de inicializar correctamente los objetos Métodos con el mismo nombre de la clase pero sin valor de retorno No se pueden invocar una vez que el objeto se ha creado Permite sobrecarga para especificar formas distintas de inicializar los objetos Toda clase tiene que tener al menos un constructor Si no se define ningún constructor, el compilador crea uno por defecto sin argumentos, vacío, que inicializa los atributos a los valores por defecto.
  • 59. Tema 2 Clases y Objetos 59 Inicialización por defecto +0.0ffloat falseboolean Carácter 0 (‘u000’)char nullReferencia a objeto +0.0ddouble 0byte,short,int, long Valor InicialTipo
  • 60. Tema 2 Clases y Objetos 60 Constructores para la clase Cuenta public Cuenta(Persona quien){ //Utilizamos this para invocar al otro constructor // reutilización de código this(quien, 100); } public Cuenta(Persona quien, double saldoInicial){ titular = quien; saldo = saldoInicial; ultimasOperaciones = new double[20]; } El array hay que crearlo!!!
  • 61. Tema 2 Clases y Objetos 61 Creación de objetos La construcción de un objeto consta de tres etapas: Se reserva espacio en memoria para la estructura de datos que define la clase. Inicializa los campos de la instancia con los valores por defecto Garantiza que cada atributo de una clase tenga un valor inicial antes de la llamada al constructor Se aplica sobre la instancia el constructor que se invoca
  • 62. Tema 2 Clases y Objetos 62 Creación de objetos titular saldo codigo ultimasOperaciones null 0.0 0 null 300.0 1 Objeto Persona … cta Cuenta cta = new Cuenta (persona, 300.0);
  • 63. Tema 2 Clases y Objetos 63 Atributos finales Java permite especificar que el valor de un atributo no podrá variar una vez construido el objeto Un atributo se declara de sólo consulta anteponiendo el modificador final a su declaración Los atributos finales sólo pueden ser inicializados en la declaración o en el constructor
  • 64. Tema 2 Clases y Objetos 64 Atributo final public class Cuenta { //Los atributos se pueden inicializar //en el momento de la declaración private double saldo = 100; private final Persona titular; public Cuenta(Persona persona) { titular = persona; } … public void setTitular(Persona persona){ titular = persona; } } Error en tiempo de compilación
  • 65. Tema 2 Clases y Objetos 65 Atributos de clase Representa una propiedad cuyo valor es compartido por todos los objetos de una misma clase Ejemplo: Añadimos a las cuentas un atributo para el código de cuenta. Es necesario una variable que almacene el último código de cuenta asignado. En un lenguaje imperativo se declararía una variable global. Java es un lenguaje OO puro que no permite declaraciones fuera del ámbito de una clase.
  • 66. Tema 2 Clases y Objetos 66 Atributos de clase public class Cuenta { private static int ultimoCodigo = 0; private int codigo; private double saldo; private final Persona titular; private double [] ultimasOperaciones; public Cuenta(Persona nombre, double saldoInicial) { codigo = ++ultimoCodigo; titular = nombre; saldo = saldoInicial; ultimasOperaciones = new double[20]; } … A los atributos de clase se tiene acceso desde cualquier método de la clase
  • 67. Tema 2 Clases y Objetos 67 Constantes En Java no hay una declaración específica para las constantes. Se consigue el mismo resultado definiendo un atributo de clase y final. Las constantes no pueden ser modificadas. No tiene sentido definir métodos de acceso y modificación. El nivel de acceso es controlado por su visibilidad.
  • 68. Tema 2 Clases y Objetos 68 Constantes public class Cuenta { private static final int MAX_OPERACIONES = 20; private static final double SALDO_MINIMO = 100; private static int ultimoCodigo = 0; private int codigo; private double saldo; private final Persona titular; private double[] ultimasOperaciones; public Cuenta(Persona persona) { codigo = ++ultimoCodigo; titular = persona; saldo = SALDO_MINIMO; ultimasOperaciones = new double[MAX_OPERACIONES]; }… }
  • 69. Tema 2 Clases y Objetos 69 Métodos de clase ¿Cómo definimos operaciones que manejan atributos de clase? Un método se define de clase anteponiendo el identificador static a su declaración En el cuerpo del método de clase sólo se puede acceder a los atributos de clase Para la aplicación de un método de clase no se hace uso de ningún objeto receptor, sino del nombre de la clase
  • 70. Tema 2 Clases y Objetos 70 Métodos de clase public class Cuenta { private static int ultimoCodigo = 0; … public static int getNumeroCuentas() { return ultimoCodigo; } } Cuenta.getNumeroCuentas();
  • 71. Tema 2 Clases y Objetos 71 En Java los objetos no se destruyen explícitamente Recolección automática de memoria de los objetos no referenciados (Garbage Collector) Existe un método finalize() Este método se invocará justo antes de la recolección de basura Interesa para liberar recursos (ej. conexión bases de datos). En C++ todos los objetos se destruyen (en un programa sin errores), mientras que en Java no siempre se “recolectan”. Destrucción de objetos
  • 72. Tema 2 Clases y Objetos 72 Para obtener un código ejecutable se deben ensamblar las clases para formar sistemas (cerrado). Un sistema viene dado por: Un conjunto de clases La clase raíz El procedimiento de creación de la clase raíz. La ejecución de un programa OO consiste en: Creación dinámica de objetos Envío de mensajes entre los objetos creados, siguiendo un patrón impredecible en tiempo de compilación Ausencia de programa principal Modelo de ejecución OO
  • 73. Tema 2 Clases y Objetos 73 ¿Cómo empieza la ejecución de un programa OO? Creación de un “objeto raíz” Aplicar mensaje sobre “objeto raíz” En tiempo de ejecución, el flujo de ejecución siempre se encuentra: aplicando una operación sobre un objeto (instancia actual) o ejecutando una operación que no es un mensaje (asignación, creación). En un instante dado bien se aplica un mensaje sobre la instancia actual o sobre un objeto accesible desde él. Un mensaje siempre formará parte del cuerpo de una rutina de una clase Modelo de ejecución OO
  • 74. Tema 2 Clases y Objetos 74 obj2 obj7 obj3 obj5 obj8 obj9 obj1 obj4 ACTUAL RAIZ Modelo de ejecución OO
  • 75. Tema 2 Clases y Objetos 75 El método main Debemos proporcionar el nombre de la clase que conduzca la aplicación Cuando ejecutamos un programa, el sistema localizará esta clase y ejecutará el main que contenga El método main es un método de clase que recibe como parámetro un array de cadenas de texto que son los parámetros del programa
  • 76. Tema 2 Clases y Objetos 76 El método main Definición del método main public class Eco{ public static void main(String[] args){ for(int i=0; i < args.length; i++) System.out.println(args[i]+” ”); } } Parámetros del programa: c: java Eco estamos aquí --> SALIDA: estamos aquí
  • 77. Tema 2 Clases y Objetos 77 Genericidad ¿Cómo escribir una clase que represente una estructura de datos y que sea posible almacenar objetos de cualquier tipo? PilaEnteros PilaLibros ⇒ Pila de T? PilaFiguras … Necesidad de reconciliar reutilización con el uso de un lenguaje tipado.
  • 78. Tema 2 Clases y Objetos 78 Genericidad Posibilidad de parametrizar las clases los parámetros son tipos de datos. Facilidad útil para describir estructuras contenedoras generales que se implementan de la misma manera independiente de los datos que contiene: TIPO BASE ES UN PARÁMETRO. class ARRAY <T> class PILA <T> class LISTA <T>, ...
  • 79. Tema 2 Clases y Objetos 79 Clase genérica import java.util.ArrayList; public class Pila<T>{ private ArrayList<T> contenido; … public boolean isEmpty(){…} public void push (T item){ … } public T pop() {…} public T tope(){…} }
  • 80. Tema 2 Clases y Objetos 80 Instanciación de tipo genérico Se tiene que instanciar el parámetro tanto en la declaración como en la creación: Pila<Cuenta> pilaCuentas = new Pila<Cuenta>(); El parámetro genérico puede ser: 1) Una de las clase que encapsulan a los tipos primitivos Pila<Integer> pilaEnteros; 2) Un tipo referencia Pila<Punto> pilaPuntos; Pila<Pila<Punto>> pilaDePilasPuntos ; 3) Un parámetro genérico formal de la clase cliente class Pila <T> { ArrayList<T> contenido; .... }
  • 81. Tema 2 Clases y Objetos 81 Autoboxing No se puede instanciar una clase genérica con un tipo primitivo. Existe una clase envoltorio para cada tipo primitivo Integer, Float, Double, Character, Boolean, etc. El compilador transforma automáticamente tipos primitivos en objetos de las clases envoltorio y viceversa (autoboxing) Pila<Integer> pilaEnteros = new Pila<Integer>; pilaEnteros.push(7); int tope = pilaEnteros.tope();
  • 82. Tema 2 Clases y Objetos 82 Operaciones sobre entidades de tipos genéricos Sea la clase: public class C <T,G,...> { private T x; public void metodo (G p){ … } ... } ¿Qué operaciones podemos aplicar sobre las entidades cuyo tipo es un parámetro genérico? En una clase cliente, T, G, … pueden ser instanciados a cualquier tipo
  • 83. Tema 2 Clases y Objetos 83 Cualquier operación sobre una entidad genérica debe ser aplicable a cualquier tipo. Posibles operaciones: Asignación entre entidades genéricas (x=y) Identidad (x==y o x!=y) a.f(...,x,...) (el parámetro es de tipo T) Operaciones aplicables sobre cualquier objeto: x.clone() o x.equals(y) ¡¡No se permite la creación!! T at = new T(); No compila!! ¿Es posible ampliar el conjunto de operaciones? Si Genericidad restringida (Tema 3) Operaciones sobre entidades de tipos genéricos
  • 84. Tema 2 Clases y Objetos 84 Principios de diseño de clases Favorecer la legibilidad del código: Asignar nombres significativos para los identificadores de atributos, variables y métodos Inicializar los atributos Experto en Información: Asignar una responsabilidad al experto en información, la clase que tiene la información necesaria para llevar a cabo la responsabilidad. Favorecer la extensibilidad: Utilizar constantes simbólicas significativas Seguir los principios de diseño modular
  • 85. Tema 2 Clases y Objetos 85 Principios de diseño de clases Ocultación de la Información Los atributos de una clase deben ser privados y ofrecer los métodos de consulta necesarios dependiendo de su nivel de acceso (set y/o get) Diferenciar entre métodos públicos (interfaz de la clase) y métodos privados (métodos auxiliares) Para acceder a una constante, ésta debe ser pública en lugar de ofrecer un método de consulta. Alta Cohesión Fragmentar clases que tengan demasiadas responsabilidades Bajo Acoplamiento Ley de Demeter: “Habla sólo con tus amigos” para un método m de una clase C sólo deberían invocarse los métodos: de la clase C, de los parámetros que recibe el método m, de cualquier objeto creado en el método m, de cualquier atributo (variable de instancia) de la clase C
  • 86. Tema 2 Clases y Objetos 86 Aliasing y el Principio de Ocultación de la Información Hay que prestar atención a los métodos de acceso, ya que si un atributo es una referencia, al devolver la referencia se compromete la integridad del objeto. Por ejemplo, getUltimasOperaciones debe devolver una copia de la colección, no la colección. Si devuelve la colección el cliente de la clase Cuenta podría acceder a la implementación para modificarla. Las modificaciones de la colección se deben hacer SIEMPRE desde métodos de la clase cuenta, nunca desde los clientes de la clase. Se debe valorar el contexto de la clase para decidir si devolver la referencia o una copia.