Está en la página 1de 86

Tema 2: Clase y objetos en J ava

Programacin Orientada a Objetos


Curso 2009/2010
Begoa Moros Valle
Tema 2 Clases y Objetos 2
Introduccin
Clases
Objetos
Semntica referencia
Mtodos y mensajes
Creacin de objetos
Modelo de ejecucin OO
Genericidad
Principios de diseo de clases
ndice
Tema 2 Clases y Objetos 3
Introduccin
Programa OO
Clase
Objeto
Coleccin estructurada
de clases
Implementacin 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
DEFINICIN: Implementacin total o parcial de un TAD
Entidad sintctica que describen objetos que van a
tener la misma estructura y el mismo
comportamiento.
Doble naturaleza: Mdulo + Tipo de Datos
Mdulo (concepto sintctico)
Mecanismo para organizar el software
Tipo (concepto semntico)
Mecanismo de definicin de nuevos tipos de datos: describe
una estructura de datos (objetos) y las operaciones
aplicables.
Tema 2 Clases y Objetos 5
Mdulo Tipo. Ejemplo Modula2
DEFINITION MODULE Pi l a;
EXPORT QUALI FI ED PI LA, vaci a, pop, push, t ope;
TYPE PILA;
PROCEDURE vaci a( pi l a: PI LA) : BOOLEAN;
PROCEDURE nuevaPi l a: PI LA;
PROCEDURE pop ( VAR pi l a: PI LA) : I NTEGER;
PROCEDURE push ( VAR pi l a: PI LA; val or : I NTEGER) ;
PROCEDURE t ope ( VAR pi l a: PI LA) : I NTEGER;
END Pi l a;
Tema 2 Clases y Objetos 6
Especificacin separada de la implementacin
IMPLEMENTATION MODULE Pi l a;
TYPE PILA = POI NTER TO Node;
Node = RECORD
val or : I NTEGER;
si gui ent e: PI LA;
END;
PROCEDURE pop (VAR pila:PILA):INTEGER;

END pop;
. . .
END Pi l a;
Tema 2 Clases y Objetos 7
Atributos:
Determinan una estructura de almacenamiento para cada
objeto de la clase
Mtodos:
Operaciones aplicables a los objetos
nico modo de acceder a los atributos
Ejemplo: En una aplicacin 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);
Definicin de la clase
Atributos
Mtodos
J os Martnez
1200.0
Tiempo de ejecucin
Objeto Cuenta
titular
saldo
Tema 2 Clases y Objetos 9
Clase Cuent a en J ava
class Cuenta{
St r i ng titular;
double saldo;
void i ngr eso ( double cant i dad) {
saldo = saldo + cant i dad;
}
void r ei nt egr o ( double cant i dad) {
if ( cant i dad <= saldo)
saldo = saldo cant i dad;
}
}
ATRIBUTOS
MTODOS
Tema 2 Clases y Objetos 10
Ocultacin de Informacin
A las caractersticas de una clase (atributos y
mtodos) se les puede asignar un modificador
de visibilidad:
public:
Caracterstica pblica, accesible desde todas las clases
private:
Caracterstica privada, accesible slo dentro de la clase
donde se define
Principio de diseo:
Todos los atributos de una clase son privados
Los mtodos pueden tener distintos niveles de
visibilidad
Tema 2 Clases y Objetos 11
Clase Cuent a en J ava
class Cuent a{
private St r i ng titular;
private double saldo;
public void i ngr eso ( double cant i dad) {
saldo = saldo + cant i dad;
}
public void r ei nt egr o ( double cant i dad) {
if ( puedoSacar ( cant i dad) )
saldo = saldo cant i dad;
}
private boolean puedoSacar(double cant i dad) {
return cant i dad <= saldo;
}
}
Tema 2 Clases y Objetos 12
Acceso y modificacin de atributos
La nica forma de acceder a los atributos es a
travs de mtodos pblicos
Mtodos get para consultar el valor del
atributo
Mtodos set para establecer el valor del
atributo
La implementacin de los mtodos set/get
depende del nivel de acceso de los atributos.
Se asla al cliente de los cambios en la
estructura de datos.
Tema 2 Clases y Objetos 13
Clase Cuent a en J ava
class Cuent a{
private St r i ng titular;
private double saldo;
public St r i ng 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 estn relacionadas
Adems de publ i c y pr i vat e, se puede establecer
que una caracterstica de la clase tiene visibilidad a
nivel de paquete
Visible a todas las clases del mismo paquete
Visibilidad por defecto
A las clases tambin se les puede especificar un nivel
de visibilidad:
publ i c: la clase es visible desde cualquier paquete
A nivel de paquete: la clase slo 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 declaracin
(package)
Para utilizar una clase definida en un paquete
distinto:
Se utiliza el nombre cualificado de la clase
Ejemplo: j ava. ut i l . Li nkedLi st unaLi st a;
Se importa la clase o el paquete al comienzo de la
declaracin
Se puede utilizar el nombre de la clase sin cualificar
import j ava. ut i l . Li nkedLi st ; o bien
i mpor t j ava. ut i l . *;
Tema 2 Clases y Objetos 16
Clase Cuent a en J ava
package banco. cuent as;
import j ava. ut i l . Li nkedLi st ;
public class Cuent a{
St r i ng titular;
double saldo;
Li nkedLi st ultimasOperaciones;
void i ngr eso ( double cant i dad) {
}
void r ei nt egr o ( double cant i dad) {
}
}
Anidamiento de paquetes!!
Tema 2 Clases y Objetos 17
Un objeto es una instancia de una clase,
creada en tiempo de ejecucin
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 mtodos permiten consultar y modificar el
estado del objeto.
Objetos
Tema 2 Clases y Objetos 18
Objetos dominio vs. Objetos aplicacin
Ejemplo: Aplicacin Correo electrnico
Objetos externos:
Procedentes del dominio de la aplicacin:
carpeta, buzn, mensaje
Objetos software:
Procedentes del ANALISIS: todos los externos
Procedentes del DISEO/IMPLEMENTACION:
rbol binario, cola, lista enlazada, ventana,...
Tema 2 Clases y Objetos 19
empleado
cuentaAhorro
cliente
cuentaCorriente
Objetos del mundo real
empleado
cuentaAhorro
cliente cuentaCorriente
Instancias de las clases (objetos software)
Empleado CuentaAhorro Cliente CuentaCorriente
Cuenta Persona
Sistema Software (Clases)
A
N
A
L
I
S
I
S
D
I
S
E

O
EJ ECUCIN
Cada objeto es
instancia
directa
de una clase
Tema 2 Clases y Objetos 20
Tipos de datos primitivos:
Enteros: byt e, shor t , i nt , l ong
Reales: f l oat , doubl e
Carcter: char
Booleano: bool ean
Referencias:
Sus valores son objetos de tipos no bsicos, otras
clases.
Enumerados: son clases que representan un
conjunto finito de valores
Tipos de los atributos
Tema 2 Clases y Objetos 21
Enumerados
enum Est adoCuent a{
OPERATI VA, I NMOVI LI ZADA, NUM_ROJ OS;
}
publ i c cl ass Cuent a{
pr i vat e St r i ng t i t ul ar ;
pr i vat e doubl e sal do;
pr i vat e EstadoCuenta estado;

}
Tema 2 Clases y Objetos 22
Relacin 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 Per sona
Declaramos el tipo del atributo t i t ul ar (en la clase
Cuent a) como Per sona.
La clase Cuent a es cliente de la clase Per sona
Tema 2 Clases y Objetos 23
Relacin de clientela
Cuenta
titular: Persona;
saldo: double;
reintegro(valor:double);
ingreso (valor:double);
Persona
nombre: String;
dni: String;
1200.0
Objeto Cuenta
titular
saldo
J os Martnez
34789567R
Objeto Persona
Referencia a otro objeto!!
Tema 2 Clases y Objetos 24
Semntica referencia
Una referencia es un valor que en tiempo de ejecucin
est o vaco (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 = nul l
b = c (si c es nul l )
Estados de una referencia
Tema 2 Clases y Objetos 26
Igualdad vs. identidad
Igualdad entre referencias Identidad
a == c {t r ue}
a == b {f al se}
Igualdad entre objetos
Podemos utilizar el mtodo equals
b
a
c
d
uno
23
uno
23
dos
23
Tema 2 Clases y Objetos 27
a
b
a = b
b
a
Asignacin de referencias
La asignacin 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 asignacin no implica copia de
objetos cmo se pueden copiar?
copi a = obj . clone();
Constructor de copia:
Se pasa como parmetro 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 parmetro.
Tema 2 Clases y Objetos 30
Semntica referencia
Ventajas de las referencias:
Comparticin de objetos integridad referencial
Permite definir estructuras recursivas (auto-
referencias)
Ms 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
t i t ul ar
codi go
sal do
ul t i masOper aci ones
J . Gomez
87654321
nombr e
dni
Objeto Persona
-5000 10000
Objeto Array
mi Cuent a
Semntica referencia
Tema 2 Clases y Objetos 32
55000
-5000
J . Gmez
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
Comparticin Autorreferencias
Semntica referencia
Tema 2 Clases y Objetos 33
Referencia vs. punteros
Referencias y punteros son conceptos muy
prximos pero diferentes
Referencias se asocian a objetos.
Toda referencia tiene un tipo
nul l representa el estado no conectado
Punteros se asocian a direcciones de
memoria.
nul l en C es un valor de tipo puntero
Una variable denota una referencia a un objeto
Tema 2 Clases y Objetos 34
Mtodos y mensajes
Un mtodo est compuesto por:
Cabecera: Identificador y Parmetros
Cuerpo: Secuencia de instrucciones
Mensaje:
Mecanismo bsico de la computacin OO.
Invocacin de la aplicacin de un mtodo sobre un
objeto.
Un mensaje est formado por tres partes
Objeto receptor
Selector o identificador del mtodo a aplicar
Argumentos
Tema 2 Clases y Objetos 35
Ejemplo mtodo vs. mensaje
Mtodo r ei nt egr o en la clase Cuent a:
Mensaje, aplica el mtodo reintegro sobre un
objeto cuenta:
cuent a. r ei nt egr o( 600. 0) ;
public double r ei nt egr o (double cant i dad) {
if ( puedoSacar ( cant i dad) )
saldo = saldo cant i dad;
}
Tema 2 Clases y Objetos 36
Mensajes vs. Procedimientos
No confundir con la invocacin de un
procedimiento en un lenguaje imperativo!
Un mensaje parece una llamada a procedimiento en
la que slo cambia el formato:
Mensaje unaCuent a. i ngr eso ( 100000)
Procedimiento i ngr eso ( unaCuent a, 100000)
En una invocacin 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
Definicin de Mtodos
Todo mtodo tiene un valor de retorno
Si no devuelve nada se indica con voi d
Para cada mtodo se establece el nivel de
visibilidad
Qu instrucciones podemos incluir en el
cuerpo de un mtodo?
Asignacin
Estructuras condicionales
Iteracin
Invocacin a otro mtodo = Mensajes
Creacin de objetos
Tema 2 Clases y Objetos 38
Sentencias de control de flujo
if( expr esi n- bool eana )
{
sent enci as;
}
[ else {
sent enci as;
}]
switch(expresin) {
case val or 1:
sent enci as;
break;
case val or 2:
sent enci as;
break;
[ default:
sent enci as; ]
}
Tema 2 Clases y Objetos 39
Ejemplos
int sal do;

if ( sal do<0)
est adoCuent a = Est ado. NUMEROS_ROJOS;
int di a;

switch ( di a) {
case 1: Syst em. out. pr i nt l n( Lunes) ; break;
case 2: Syst em. out. pr i nt l n( Martes) ; break;

case 7: Syst em. out. pr i nt l n( Domingo) ; break;


}
Tema 2 Clases y Objetos 40
Ejemplo
Mtodo r ei nt egr o teniendo en cuenta el estado de la
cuenta:
public boolean r ei nt egr o ( double cant i dad) {
switch ( estadoCuenta) {
case INMOVILIZADA:
case NUMEROS_ROJOS: return false;
case OPERATIVA: if ( puedoSacar ( cant i dad) )
saldo = saldo - cantidad;
return true;
default: return false;
}
}
Tema 2 Clases y Objetos 41
[ i ni ci al i zaci n; ]
do {
sent enci as;
[ i t er aci n; ]
}while ( expr esi n- bool eana ) ;
Bucles (1/2)
[ i ni ci al i zaci n; ]
while( expr esi n- bool eana ) {
sent enci as;
[ i t er aci n; ]
}
Tema 2 Clases y Objetos 42
Ejemplos
public class Cuent a{

private double[] ultimasOperaciones;


public double get Sal do( ) {
int i ndex = 0;
double sal do = 0;
while ( i ndex < ultimasOperaciones. l engt h) {
sal do = sal do + ultimasOperaciones[ i ndex] ;
++i ndex;
}
return sal do;
}
}
LOS ARRAYS SON OBJ ETOS!!!
Tema 2 Clases y Objetos 43
Bucles (2/2)
for( i ni ci al i zaci n; exp- bool eana; i t er aci n ) {
sent enci as;
}
for(Ti po val or : nombr eCol ecci on) {
/ / hacer al go con val or
}
Bucle ForEach
Tema 2 Clases y Objetos 44
Ejemplos
public double get Sal do( ) {
double sal do = 0;
for ( int i ndex=0; i <ultimasOperaciones. l engt h; i ndex++)
sal do = sal do + ultimasOperaciones[ i ndex] ;
return sal do;
}
public double get Sal do( ) {
double sal do = 0;
for ( double oper aci on : ultimasOperaciones)
sal do = sal do + oper aci on;
return sal do;
}
Tema 2 Clases y Objetos 45
Sobrecarga de mtodos
J ava soporta sobrecarga de mtodos
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 cobr ar ( Compr a t i cket ) {
return r ei nt egr o( t i cket . get Tot al ( ) ) ;
}
//Pago a plazos devuelve el nmero de plazos
public int cobr ar ( Compr a t i cket , boolean apl azado) {

}
Tema 2 Clases y Objetos 46
Paso de parmetros
Sea el mtodo
met ( T
1
p
1
, , T
n
p
n
)
Donde p
1
p
n
son los parmetros formales
y la invocacin (mensaje)
obj . met ( a
1
, , a
n
)
Donde a
1
a
n
son los parmetros reales
Debemos responder a las siguientes preguntas:
Cul es la correspondencia entre parmetros reales y
formales?
Qu operaciones se permiten sobre los parmetros formales?
Qu efecto tendrn las operaciones aplicadas sobre los
parmetros formales sobre los parmetros reales
correspondientes?
Tema 2 Clases y Objetos 47
Paso de parmetros
El efecto del paso de parmetros es una asignacin
p
i
= a
i
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 p
i
es una copia de a
i
Paso de parmetros siempre por valor
Al parmetro real no le afectan los cambios en el parmetro
formal
Cuando trabajamos con referencias el efecto de una
operacin sobre el parmetro formal implica que se
modifique el estado del parmetro real.
Paso por valor de la referencia!!!
Tema 2 Clases y Objetos 48
Paso de parmetros
No existe ninguna restriccin sobre las
operaciones aplicables sobre los parmetros
formales
Es posible modificar el parmetro formal
El parmetro real no se cambia porque el
parmetro formal era una copia de la
referencia o del tipo primitivo.
Tema 2 Clases y Objetos 49
Paso de parmetros
public void transferencia(Cuenta emisor, Cuenta receptor,
double cantidad) {
emisor.reintegro(cantidad);
receptor.ingreso(cantidad);
emisor = null;
}

banco.transferencia(cuenta1, cuenta2, 3000.0);


No afectara a la
variable cuenta1
Cambia el estado
de los dos objetos
Tema 2 Clases y Objetos 50
Instancia actual
Cada operacin de una computacin OO es
relativa a cierto objeto, la instancia actual,
en el momento de la ejecucin de la operacin
A qu objeto Cuent a se refiere el texto de la
rutina r ei nt egr o?
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
t i t ul ar
codi go
sal do
ul t i masOper aci ones
J . Gomez
87654321
nombr e
dni
Objeto Persona
-5000 10000
Objeto Array
c1
public double r ei nt egr o ( double cant i dad) {
if ( puedoSacar ( cant i dad) )
saldo = saldo cant i dad;
}
sal do- 300
Ejemplo: c1. r ei nt egr o( 300)
Tema 2 Clases y Objetos 52
public double r ei nt egr o (double cant i dad) {
if ( puedoSacar ( cant i dad) )
saldo = saldo cant i dad;
}
Instancia actual
Si se aplica un mtodo y no se especifica
el objeto receptor, se asume que es la
instancia actual.
El objeto receptor de puedoSacar ser
el objeto receptor del r ei nt egr o
Tema 2 Clases y Objetos 53
Referencia t hi s
El lenguaje J ava proporciona la palabra clave
this que referencia a la instancia actual.
Utilidad:
Distinguir los atributos de los parmetros y variables
locales dentro de la implementacin de un mtodo.
Aplicar un mensaje a otro objeto estableciendo como
parmetro la referencia al objeto actual.
Tema 2 Clases y Objetos 54
Referencia t hi s
public void trasladar(Sucursal sucursal){
this.sucursal.eliminar(this);
sucursal.aadir(this);
}
Se refiere al atributo de la clase
Se refiere a la instancia actual, la cuenta
que se va a trasladar
Se refiere al parmetro
Tema 2 Clases y Objetos 55
Combinacin mdulo-tipo
Como cada mdulo es un tipo, cada operacin
del mdulo es relativa a cierta instancia del tipo
(instancia actual)
Cmo funciona la fusin mdulo-tipo?
Los servicios proporcionados por una clase,
vista como un mdulo, son precisamente las
operaciones disponibles sobre las instancias de
la clase, vista como un tipo.
Tema 2 Clases y Objetos 56
Creacin de Objetos
La declaracin de una variable cuyo tipo sea
una clase no implica la creacin del objeto.
Se necesita un mecanismo explcito de creacin
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 vacas, compartir objeto)
Tema 2 Clases y Objetos 57
Cuent a c; / / declaracin
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 Cuent a( ) / / creacin explcita
Declaracin vs. Creacin
Tema 2 Clases y Objetos 58
Constructores
Mtodo encargado de inicializar correctamente los
objetos
Mtodos 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 ningn constructor, el compilador crea
uno por defecto sin argumentos, vaco, que inicializa
los atributos a los valores por defecto.
Tema 2 Clases y Objetos 59
Inicializacin por defecto
+0.0f float
false boolean
Carcter 0 (\u000) char
null Referencia a objeto
+0.0d double
0 byte,short,int,
long
Valor Inicial Tipo
Tema 2 Clases y Objetos 60
Constructores para la clase Cuent a
publ i c Cuenta(Persona quien){
/ / Ut i l i zamos t hi s par a i nvocar al ot r o const r uct or
/ / r eut i l i zaci n de cdi go
this(quien, 100);
}
publ i c Cuenta(Persona quien, double saldoInicial){
t i t ul ar = qui en;
sal do = sal doI ni ci al ;
ul t i masOper aci ones = new doubl e[ 20] ;
}
El array hay que crearlo!!!
Tema 2 Clases y Objetos 61
Creacin de objetos
La construccin 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
Creacin de objetos
t i t ul ar
sal do
codi go
ul t i masOper aci ones
nul l
0. 0
0
nul l
300. 0
1
Objeto
Persona

ct a
Cuent a ct a = new Cuent a ( per sona, 300. 0) ;
Tema 2 Clases y Objetos 63
Atributos finales
J ava permite especificar que el valor de un
atributo no podr variar una vez construido el
objeto
Un atributo se declara de slo consulta
anteponiendo el modificador final a su
declaracin
Los atributos finales slo pueden ser
inicializados en la declaracin 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 declaracin
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 compilacin
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:
Aadimos a las cuentas un atributo para el cdigo de
cuenta.
Es necesario una variable que almacene el ltimo
cdigo de cuenta asignado.
En un lenguaje imperativo se declarara una
variable global.
J ava 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 mtodo de la clase


Tema 2 Clases y Objetos 67
Constantes
En J ava no hay una declaracin especfica
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 mtodos de acceso y
modificacin.
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
Mtodos de clase
Cmo definimos operaciones que manejan
atributos de clase?
Un mtodo se define de clase anteponiendo el
identificador static a su declaracin
En el cuerpo del mtodo de clase slo se
puede acceder a los atributos de clase
Para la aplicacin de un mtodo de clase no
se hace uso de ningn objeto receptor, sino del
nombre de la clase
Tema 2 Clases y Objetos 70
Mtodos 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 J ava los objetos no se destruyen
explcitamente
Recoleccin automtica de memoria de los
objetos no referenciados (Garbage Collector)
Existe un mtodo finalize()
Este mtodo se invocar justo antes de la
recoleccin de basura
Interesa para liberar recursos (ej. conexin bases de
datos).
En C++ todos los objetos se destruyen (en un
programa sin errores), mientras que en J ava no
siempre se recolectan.
Destruccin de objetos
Tema 2 Clases y Objetos 72
Para obtener un cdigo ejecutable se deben ensamblar
las clases para formar sistemas (cerrado).
Un sistema viene dado por:
Un conjunto de clases
La clase raz
El procedimiento de creacin de la clase raz.
La ejecucin de un programa OO consiste en:
Creacin dinmica de objetos
Envo de mensajes entre los objetos creados, siguiendo un
patrn impredecible en tiempo de compilacin
Ausencia de programa principal
Modelo de ejecucin OO
Tema 2 Clases y Objetos 73
Cmo empieza la ejecucin de un programa OO?
Creacin de un objeto raz
Aplicar mensaje sobre objeto raz
En tiempo de ejecucin, el flujo de ejecucin siempre
se encuentra:
aplicando una operacin sobre un objeto (instancia actual) o
ejecutando una operacin que no es un mensaje (asignacin,
creacin).
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 ejecucin OO
Tema 2 Clases y Objetos 74
obj2
obj7
obj3
obj5
obj8
obj9
obj1
obj4
ACTUAL
RAIZ
Modelo de ejecucin OO
Tema 2 Clases y Objetos 75
El mtodo mai n
Debemos proporcionar el nombre de la clase
que conduzca la aplicacin
Cuando ejecutamos un programa, el sistema
localizar esta clase y ejecutar el mai n que
contenga
El mtodo mai n es un mtodo de clase que
recibe como parmetro un array de cadenas de
texto que son los parmetros del programa
Tema 2 Clases y Objetos 76
El mtodo mai n
Definicin del mtodo mai n
publ i c cl ass Eco{
public static void mai n( String[] args) {
f or ( i nt i =0; i < ar gs. l engt h; i ++)
Syst em. out . pr i nt l n( ar gs[ i ] + ) ;
}
}
Parmetros del programa:
c: \ j ava Eco est amos aqu - - > SALI DA: est amos aqu
Tema 2 Clases y Objetos 77
Genericidad
Cmo 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 reutilizacin con el uso de


un lenguaje tipado.
Tema 2 Clases y Objetos 78
Genericidad
Posibilidad de parametrizar las clases
los parmetros 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 PARMETRO.
cl ass ARRAY <T>
cl ass PI LA <T>
cl ass LI STA <T>, . . .
Tema 2 Clases y Objetos 79
Clase genrica
i mpor t j ava. ut i l . Ar r ayLi st ;
publ i c cl ass Pi l a<T>{
pr i vat e Ar r ayLi st <T> cont eni do;

publ i c bool ean i sEmpt y( ) {}


publ i c voi d push ( T i t em) { }
publ i c T pop( ) {}
publ i c T t ope( ) {}
}
Tema 2 Clases y Objetos 80
Instanciacin de tipo genrico
Se tiene que instanciar el parmetro tanto en la
declaracin como en la creacin:
Pi l a<Cuent a> pi l aCuent as = new Pi l a<Cuent a>( ) ;
El parmetro genrico puede ser:
1) Una de las clase que encapsulan a los tipos primitivos
Pi l a<I nt eger > pi l aEnt er os;
2) Un tipo referencia
Pi l a<Punt o> pi l aPunt os;
Pi l a<Pi l a<Punt o>> pi l aDePi l asPunt os ;
3) Un parmetro genrico formal de la clase cliente
cl ass Pi l a <T> {
Ar r ayLi st <T> cont eni do;
. . . .
}
Tema 2 Clases y Objetos 81
Autoboxing
No se puede instanciar una clase genrica con un tipo
primitivo.
Existe una clase envoltorio para cada tipo primitivo
I nt eger , Fl oat , Doubl e, Char act er , Bool ean, etc.
El compilador transforma automticamente tipos
primitivos en objetos de las clases envoltorio y
viceversa (autoboxing)
Pi l a<Integer> pi l aEnt er os = new Pi l a<I nt eger >;
pi l aEnt er os. push( 7) ;
int t ope = pi l aEnt er os. t ope( ) ;
Tema 2 Clases y Objetos 82
Operaciones sobre entidades de tipos
genricos
Sea la clase:
publ i c cl ass C <T, G, . . . > {
pr i vat e T x;
publ i c voi d met odo ( G p) { }
. . .
}
Qu operaciones podemos aplicar sobre las
entidades cuyo tipo es un parmetro genrico?
En una clase cliente, T, G, pueden ser instanciados a
cualquier tipo
Tema 2 Clases y Objetos 83
Cualquier operacin sobre una entidad genrica debe
ser aplicable a cualquier tipo.
Posibles operaciones:
Asignacin entre entidades genricas (x=y)
Identidad (x==y o x! =y)
a. f ( . . . , x, . . . ) (el parmetro es de tipo T)
Operaciones aplicables sobre cualquier objeto:
x. cl one( ) o x. equal s( y)
No se permite la creacin!!
T at = new T( ) ; No compila!!
Es posible ampliar el conjunto de operaciones?
Si Genericidad restringida (Tema 3)
Operaciones sobre entidades de tipos
genricos
Tema 2 Clases y Objetos 84
Principios de diseo de clases
Favorecer la legibilidad del cdigo:
Asignar nombres significativos para los identificadores de
atributos, variables y mtodos
Inicializar los atributos
Experto en Informacin:
Asignar una responsabilidad al experto en informacin, la
clase que tiene la informacin necesaria para llevar a cabo la
responsabilidad.
Favorecer la extensibilidad:
Utilizar constantes simblicas significativas
Seguir los principios de diseo modular
Tema 2 Clases y Objetos 85
Principios de diseo de clases
Ocultacin de la Informacin
Los atributos de una clase deben ser privados y ofrecer los mtodos
de consulta necesarios dependiendo de su nivel de acceso (set y/o
get)
Diferenciar entre mtodos pblicos (interfaz de la clase) y mtodos
privados (mtodos auxiliares)
Para acceder a una constante, sta debe ser pblica en lugar de
ofrecer un mtodo de consulta.
Alta Cohesin
Fragmentar clases que tengan demasiadas responsabilidades
Bajo Acoplamiento
Ley de Demeter: Habla slo con tus amigospara un mtodo m de
una clase C slo deberan invocarse los mtodos: de la clase C, de
los parmetros que recibe el mtodo m, de cualquier objeto creado
en el mtodo m, de cualquier atributo (variable de instancia) de la
clase C
Tema 2 Clases y Objetos 86
Aliasing y el Principio de
Ocultacin de la Informacin
Hay que prestar atencin a los mtodos de acceso, ya
que si un atributo es una referencia, al devolver la
referencia se compromete la integridad del objeto.
Por ejemplo, get Ul t i masOper aci ones
debe devolver una copia de la coleccin, no la coleccin.
Si devuelve la coleccin el cliente de la clase Cuent a podra
acceder a la implementacin para modificarla.
Las modificaciones de la coleccin se deben hacer SIEMPRE
desde mtodos 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.

También podría gustarte