Está en la página 1de 136

Tcni cas Avanzadas de

Di seo de Software:
Una i ntroducci n
a l a Programaci n Ori ent ada a Ob etos
usando U!" # $ava
Autor :
$os %& 'l ez Serrano
(ol aboradores:
Angel S)nc*ez
Al mudena Si erra
+si doro ,ern)n
Al berto Pea
Santi ago Dobl as
Al fredo (asado
%ranci sco -ort)zar
Prl ogo
.l /resente te0to surge de varios aos de e0/eriencia docente de los autores en las asignaturas 1Software Avanzado2 #
1"enguaes +nform)ticos23 4ue se im/arten res/ectivamente en el tercer curso de la carrera de +ngenier5a Tcnica de
+nform)tica de -estin # en el segundo curso de la carrera +ngenier5a +nform)tica3 en la .scuela Tcnica Su/erior de
+ngenier5a +nform)tica de la Universidad 6e# $uan (arlos de !adrid&
.l obetivo de este te0to es la introduccin del /aradigma de la /rogramacin orientada a obetos3 del diseo basado en
/atrones3 del "enguae Unificado de !odelado 7U!"8 # del lenguae de /rogramacin $ava en su versin 9& (on estas bases
se /retende 4ue el lector consiga unos conocimientos tericos en estas materias # a la vez /ueda com/robar su utilidad
/r)ctica&
.l te0to se /uede leer de manera continua3 /ero tambin se /uede leer como una introduccin a la Programacin Orientada
a Obetos 7si slo se leen los ca/5tulos :3 9 # ;83 o como una introduccin al lenguae $ava 7si slo se leen los ca/5tulos <3 =3 >3
? # @8& (abe decir 4ue al terminar cada ca/5tulo se /lantean algunos eercicios 4ue se encuentran resueltos en el ane0o A&
6es/ecto al formato del te0to se *an tomado varias decisiones& Para em/ezar3 cuando se introduce un nuevo conce/to se
escribe en negri ta # se aade al glosario 4ue se encuentra en el ane0o A& Adem)s3 debido al car)cter de la materia3 el te0to
est) sal/icado de anglicismos # marcas 74ue se *an escrito en cursiva83 de referencias a cdigo en el te0to 74ue se *an escrito
en fuente courier8 # de fragmentos de /rogramas 74ue3 tambin en courier3 se *an sombreado8&
Bndi ce
(a/5 tul o : +ntroducci n a l a /rogramaci n ori entada a ob etos & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & :
:&:& (om/leidad del software: origen # tratamiento&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :
:&:&: ,erramientas /ara tratar la com/leidad&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :
:&:&< .volucin de los lenguaes de /rogramacin&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& <
:&:&= Paradigmas de /rogramacin&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =
:&<& Programacin orientada a obetos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =
:&<&: Abstraer&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& >
:&<&< .nca/sular&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9
:&<&= $erar4uizar&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ?
:&<&> !odularizar&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C
:&<&9 Ti/o&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ::
:&<&? (oncurrencia&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :=
:&<&@ Persistencia&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :=
:&=& "ecturas recomendadas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :>
:&>& .ercicios&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :>
(a/5 tul o < +ntroducci n al l engua e $ava & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & :9
<&:& +ntroduccin&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :9
<&:&: Areve *istoria de $ava&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :9
<&:&< "a m)4uina virtual de $ava&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :?
<&:&= (om/iladores de $ava&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :?
<&:&> .ntornos de desarrollo /ara $ava&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :?
<&:&9 .l /rograma *ola mundo&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :?
<&:&? "os comentarios&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :@
<&:&@ $uego de instrucciones&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :;
<&<& .0/resiones b)sicas # control de fluo&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :;
<&<&: Ti/os /rimitivos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :;
<&<&< (onversiones entre ti/os /rimitivos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :D
<&<&= O/eradores&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& <C
<&<&> (ontrol del fluo&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& <:
<&=& "as clases&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& <=
<&=&: "as /ro/iedades en detalle&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& <9
<&=&< "os mtodos en detalle&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& <@
<&=&= (reacin de obetos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& <;
<&=&> Destruccin de obetos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& <D
<&=&9 Alo4ues de inicializacin&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& <D
<&=&? "os modificadores de control de acceso a los miembros en detalle&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =C
<&=&@ "os modificadores de uso de los miembros en detalle&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =C
<&=&; !odificadores en la definicin de clases generales&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =:
<&=&D (lases internas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =:
<&=&:C .em/lo del /arEing&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =<
<&=&:: Definicin de arra#s de obetos # de ti/os /rimitivos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ==
<&>& "os /a4uetes&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =>
<&9& "ecturas recomendadas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =9
<&?& .ercicios&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =9
(a/5 tul o = ,erenci a # generi ci dad en $ava & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & =@
=&:& "a *erencia de clases&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =@
=&:&: ,erencia en clases internas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =;
=&:&< 6edefinicin de miembros&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =;
=&:&= "a *erencia # los constructores&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =;
=&<& Polimorfismo din)mico&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& =D
=&<&: .l casting de referencias a obetos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& >:
=&=& "as interfaces&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ><
=&>& "a genericidad&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& >>
=&>&: (lases e interfaces genricas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& >>
=&>&< !todos con ti/os /arametrizados&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& >@
=&9& (onclusiones&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& >@
=&?& "ecturas recomendadas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& >@
=&@& .ercicios&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& >@
(a/5 t ul o > .l /a4uet e ava& l ang& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & >D
>&:& "a clase Obect&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& >D
>&:&: "a clase (lass"oader&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& >D
>&<& (lases /ara el maneo de cadenas de caracteres&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9C
>&=& "as e0ce/ciones&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9:
>&=&: Ti/os de e0ce/ciones&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9<
>&=&< .l uso /r)ctico de las e0ce/ciones&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9=
>&>& Sobrecarga de los mtodos b)sicos de obect&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 99
>&>&: +nterfaz (loneable&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 99
>&>&< "os mtodos e4uals # *as*(ode&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9?
>&>&= +nterfaz (om/arable&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9@
>&9& "a concurrencia&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9@
>&9&: "a /alabra reservada s#nc*ronized &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9;
>&9&< (omunicacin entre *ilos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9;
>&?& "os ti/os enumerados&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9D
>&@& .nvolturas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ?:
>&;& "ecturas recomendadas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ?<
>&D& .ercicios&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ?<
(a/5 t ul o 9 Di seo de (l ases& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ?=
9&:& Diseo to/Fdown a/o#ado en U!"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ?=
9&:&: 6elaciones de de/endencia entre obetos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ?>
9&:&< 6elaciones de asociacin entre obetos&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ?@
9&:&= 6elaciones entre clases&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& @:
9&<& (onclusiones&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& @?
9&=& "ecturas recomendadas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& @?
9&>& .ercicios&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& @?
(a/5 t ul o ? .nt rada sal i da en $ava& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & @D
?&:& Streams de b#tes&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& @D
?&<& Streams de caracteres&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;:
?&<&: Streams del sistema&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;=
?&<&< StreamToEenizer # Scanner&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;=
?&=& !aneo de fic*eros&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;>
?&>& "a interfaz Serializable&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;>
?&9& (onclusiones&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;9
?&?& .ercicios&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;9
(a/5 tul o @ .st r ucturas de datos /redefi ni das en $ava & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ;@
@&:& (ollection&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;@
@&:&: .l .numSet&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;;
@&<& !a/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;D
@&=& +teradores&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& DC
@&>& "a clase (ollections&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& DC
@&9& .l resto del /a4uete ava&util&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D:
@&?& (onclusiones&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D:
@&@& "ecturas recomendadas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D:
@&;& .ercicios&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D:
(a/5 tul o ; Patrones # /ri nci /i os de di seo & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & D=
;&:& Princi/ales Patrones de Diseo&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D=
;&:&: %)brica Abstracta 7Abstract %actor#8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D=
;&:&< Ada/tador o .nvoltorio 7Ada/ter o Gra//er8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D9
;&:&= Decorador 7Decorator8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D9
;&:&> (om/osicin 7(om/osite8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D@
;&:&9 +terador 7+terator8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D@
;&:&? .strategia 7Strateg#8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D@
;&:&@ (omando 7(ommand8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D;
;&:&; Observador 7Observer8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :CC
;&<& Algunos /rinci/ios Htiles en POO&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :CC
;&<&: .l /rinci/io abiertoFcerrado&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :CC
;&<&< .l /rinci/io de "isEov&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C:
;&<&= .l /rinci/io de segregacin de interfaces&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C:
;&<&> !a0imizar el uso de clases inmutables&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C:
;&<&9 Preferir com/osicin frente a *erencia&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C:
;&<&? Princi/io de res/onsabilidad Hnica&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C:
;&<&@ .liminar du/licaciones &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C:
;&<&; Princi/io de inversin de de/endencia&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C:
;&<&D Preferir el /olimorfismo a los blo4ues ifIelse o switc*Icase&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C:
;&<&:C (onclusiones&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C<
;&=& "ecturas recomendadas&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C<
;&>& .ercicios&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C<
Ane0o A Sol uci n de l os e erci ci os& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & :C9
A&: .ercicios del ca/5tulo :&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C9
A&:&: Solucin del eercicio :&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C9
A&< .ercicios del ca/5tulo <&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C?
A&<&: Solucin del eercicio :&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C?
A&<&< Solucin del eercicio <&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C?
A&<&= Solucin del eercicio =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C?
A&= .ercicios del ca/5tulo =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C?
A&=&: Solucin del eercicio :&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C?
A&=&< Solucin del eercicio <&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C@
A&=&= Solucin del eercicio =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C@
A&> .ercicios del ca/5tulo >&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C;
A&>&: Solucin del eercicio :&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :C;
A&9 .ercicios del ca/5tulo 9&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :CD
A&9&: Solucin del eercicio :&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :CD
A&9&< Solucin del eercicio <&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :CD
A&9&= Solucin del eercicio =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ::<
A&9&> Solucin del eercicio >&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ::>
A&9&9 Solucin del eercicio 9&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ::;
A&? .ercicios del ca/5tulo ?&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :<:
A&?&: Solucin del eercicio :&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :<:
A&@ .ercicios del ca/5tulo @&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :<=
A&@&: Solucin del eercicio :&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& :<=
Ane0o A Bndi ce al fabti co& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & :<9
(a/5 tul o : +ntroducci n a l a /rogramaci n ori entada a
ob etos
.n este /rimer ca/5tulo se comienza analizando las caracter5sticas 4ue *acen com/leo el software # las *erramientas 4ue
*abitualmente se utilizan /ara enfrentar esa com/leidad& Des/us3 se re/asa la evolucin de los lenguaes de /rogramacin a
travs del tiem/o3 # se /resentan los /rinci/ales /aradigmas de /rogramacin& %inalmente se analiza el /aradigma de
orientacin a obetos3 describiendo los mecanismos 4ue debe /ro/orcionar un lenguae de /rogramacin orientado a obetos&
:& :& (om/l e i dad del software: ori gen # tratami ent o
.n el desarrollo de un /ro#ecto de software de tamao medio o grande suelen intervenir varias /ersonas 4ue toman
mHlti/les decisiones3 tanto en el diseo como en la im/lementacin& Jormalmente3 como resultado se obtiene un conunto
de /rogramas # bibliotecas con cientos de variables # miles de l5neas de cdigo& (uando se /roducen errores en el desarrollo
de un /ro#ecto de este ti/o3 o cuando el /ro#ecto crece *asta *acerse incom/rensible3 surgen las /reguntas: K4u *acemos
malL3 K/or 4u es tan com/leo este sistema o este desarrolloL
Para res/onder a estas /reguntas *a# 4ue em/ezar /or ace/tar 4ue la com/leidad es una /ro/iedad in*erente al software #
no un accidente debido a una mala gestin o a un mal diseo& SegHn -rad# Aooc*3 l a com/leidad en el software # en su
desarrollo se deriva fundamentalmente de los siguientes cuatro elementos:
"a com/l e i dad del domi ni o del /robl ema& F Un /ro#ecto software siem/re est) sal/icado /or la
com/leidad /ro/ia del /roblema 4ue /retende resolver& Por eem/lo3 el desarrollo de un software de contabilidad
tiene la com/leidad /ro/ia del desarrollo3 m)s la com/leidad de las normas # del /roceso de contabilidad&
"a di fi cul t ad de gesti onar el /roceso de desar rol l o& F (uando el desarrollo software 4ue se realiza tiene
miles de l5neas de cdigo3 cientos de fic*eros3 muc*os desarrolladores&&& el /roceso 4ue gestiona todos estos
elementos no es trivial&
"a fl e0i bi l i dad de l as *er rami entas de software& F .sta fle0ibilidad es un obst)culo3 #a 4ue /ermite a los
desarrolladores usar elementos mu# b)sicos /ara construir el software desde cero en vez de usar elementos m)s
elaborados # /robados construidos /or otros& .ste *ec*o se deriva de la /oca confianza 4ue e0iste en los
desarrollos de otras /ersonas3 # de los /roblemas de comunicacin relativos al tras/aso de software&
(om/ort ami ento i m/redeci bl e del software& F .l software /uede verse como un sistema discreto
:
3 con
multitud de variables 4ue definen su estado en cada momento& Un /e4ueo cambio en una de esas variables /uede
llevar al sistema a un estado totalmente diferente& .sto /uede verse como una alta sensibilidad al ruido3 es decir3
4ue un /e4ueo error 7ruido8 /uede /rovocar un com/ortamiento totalmente errneo&
:& :& : ,errami entas /ara tratar l a com/l e i dad
.0iste una limitacin en la ca/acidad *umana /ara tratar la com/leidad& .s /or ello 4ue /ara enfrentarnos a ella solemos
utilizar tcnicas de an)lisis como: descom/oner3 abstraer # erar4uizar&
Descom/oner
Descom/oner consiste en dividir sucesivamente un /roblema en /roblemas menores e inde/endientes& (uando se crean
sistemas grandes es esencial la descom/osicin /ara /oder abordar el /roblema& Tras la descom/osicin3 cada una de las
/artes se trata # refina de manera inde/endiente&
"a descom/osicin reduce el riesgo de error cuando se constru#en elementos grandes /or4ue /ermite construir elementos
de manera incremental utilizando elementos m)s /e4ueos en los 4ue #a tenemos confianza&
Desde el /unto de vista de la /rogramacin se /uede *ablar de dos formas de descom/osicin& "a descom/osicin
orientada a algoritmos # la descom/osicin orientada a obetos&
Descom/osi ci n al gor5 tmi ca& F .l /roblema se descom/one en tareas m)s sim/les& "uego3 cada tarea se
descom/one a su vez otras m)s sim/les # as5 sucesivamente& Por eem/lo3 es el enfo4ue utilizado al *acer la comida
7/rimero /re/araremos los alimentos # luego los coceremosM /ara /re/ararlos /rimero los lim/iaremos # luego los
trocearemosM /ara lim/iarlos&&&8&
:
A)sicamente un autmata de estados&
F : F
(a/5tulo : F +ntroduccin a la /rogramacin orientada a obetos
Descom/osi ci n ori entada a ob etos& N .l /roblema se descom/one en obetos de cu#a interaccin surge la
solucin& (ada obeto a su vez se descom/one en m)s obetos& Por eem/lo3 es el enfo4ue utilizado al construir un
coc*e 7un coc*e funciona como resultado de la interaccin del motor3 las ruedas # el c*asisM el motor funciona
como resultado de la interaccin de la bater5a3 el carburador # los cilindrosM la bater5a&&&8&
"a descom/osicin orientada a obetos tiene varias ventaas cuando se a/lica a /ro#ectos grandes& Para em/ezar3 facilita una
ma#or reusabilidad de mecanismos comunes& Adem)s3 al /ermitir construir obetos 4ue a su vez agru/an a otros obetos
/rovee de una ma#or econom5a de e0/resin& Se ada/ta meor al cambio /or4ue se basa en formas intermedias estables 4ue
se /ueden utilizar de mHlti/les maneras&
Por otro lado la descom/osicin algor5tmica a/orta ventaas cuando los /roblemas a resolver son /e4ueos3 #a 4ue es mu#
sencillo el desarrollo de tareas concretas&
Abstraer
Para com/render un sistema mu# com/leo las /ersonas solemos ignorar los detalles 4ue nos /arecen /oco significativos #
solemos concentrarnos en otros 4ue consideramos esenciales3 constru#endo un modelo sim/lificado del sistema 4ue se
conoce como abstraccin& Por eem/lo3 cuando se desea re/resentar en un ma/a los accidentes geogr)ficos de un /a5s se
ignora la divisin en /rovincias o regiones de ese /a5s& .s decir3 se *ace abstraccin de la divisin /ol5tica de la su/erficie de
ese /a5s&
$erar4ui zar
.sta tcnica de an)lisis nos /ermite ordenar los elementos /resentes en un sistema com/leo& Ordenar los elementos en
gru/os nos /ermite descubrir semeanzas # diferencias 4ue nos gu5an luego /ara com/render la com/leidad del sistema& Por
eem/lo3 si nos /iden enumerar las /rovincias .s/aolas las citaremos agru/)ndolas /reviamente /or comunidades
autnomas&
:& :& < .vol uci n de l os l engua es de /rogramaci n
.l desarrollo de sistemas de software cada vez m)s grandes # com/licados *a influido en la creacin de lenguaes de
/rogramacin 4ue faciliten tcnicas /ara tratar la com/leidad& .sto a su vez *a /ermitido abordar /roblemas m)s
com/leos3 /ara entrar en una es/iral de evolucin 4ue nos trae *asta la actualidad&
"a /rimera generacin de lenguaes de /rogramacin a/arece entre los aos :D9> # :D9;& .n a4uella /oca a/arecieron
%ortran 7%ormula Translator de la mano de $& G& AacEus83 A"-O"3 %low!atic e +P" '& .sta /rimera eta/a se caracteriza
/or /rogramas mu# lineales3 con una sola l5nea /rinci/al de eecucin3 # /or una clara orientacin *acia ingenieros #
cient5ficos& .n estos lenguaes no e0iste una se/aracin clara entre datos # /rogramas3 # como mecanismo de reutilizacin de
cdigo se /ro/one la biblioteca de funciones&
.n la segunda generacin 7:D9D N :D?:8 a/arecen %ortran ++ # (obol 7(ommon Ausiness Oriented "anguage8& .ste Hltimo
tuvo un alto arraigo en el mundo em/resarial al 4ue iba dirigido& Adem)s3 a/arece "is/ 7"ist Processing creado en el !+T
/or $& !c(art*# # otros8 orientado a los /roblemas de inteligencia artificial # 4ue tuvo un gran im/acto en multitud de
lenguaes /osteriores& .n todos estos lenguaes3 aun4ue #a e0iste se/aracin entre datos # /rograma3 el acceso a los datos es
desordenado # no se /ro/orcionan mecanismos 4ue /reserven la integridad de los mismos& Utilizando estos lenguaes no
e0iste ninguna restriccin en cuanto al orden de los datos # adem)s se /uede acceder a ellos directamente desde cual4uier
/arte de un /rograma& As53 los cambios en una /arte de un /rograma3 4ue acceda a ciertos datos3 /ueden ocasionar errores
en otra /arte del /rograma #a cerrada3 4ue accede a los mismos datos& "gicamente3 esto da lugar a 4ue los /rogramas de
cierta com/leidad desarrollados con estos lenguaes sean mu# inestables # dif5cilmente /uedan crecer&
"a tercera generacin 7:D?< N :D@98 es mu# /rol5fica& .ntre la multitud de lenguaes 4ue a/arecen /odemos destacar Pascal3
( # Simula& .n esta eta/a a/arecen conce/tos como el de /rogramacin estructurada # el de abstraccin de datos& "a
/rogramacin estructurada se basa en un teorema de DiEstra 4ue demuestra 4ue cual4uier /rograma de ordenador /uede
escribirse con un lenguae 4ue /ermita la eecucin secuencial de instrucciones3 la instruccin condicional # la realizacin de
bucles de instrucciones& Por otro lado3 las abstracciones de datos consisten en la definicin de ti/os com/leos de datos # su
asociacin a o/eradores /ara tratarlos& .stas abstracciones /ermiten 4ue se /uedan abordar /rogramas m)s com/leos& Sin
embargo3 estos lenguaes aHn no formalizan mecanismos de /roteccin adecuados /ara evitar violaciones en los /rotocolos
de acceso a los datos& Tam/oco aaden ningHn mecanismo de reutilizacin de cdigo distinto a las bibliotecas de funciones&
.n la eta/a 4ue com/rende desde el ao :D@? *asta :D;C los lenguaes de la eta/a anterior evolucionan # se estandarizan&
A/arecen adem)s lenguaes funcionales como los de la familia !"3 # lenguaes lgicos como Prolog&
.n las dcadas de :D;C # :DDC a/arecen los lenguaes orientados a obetos como SmallTalE3 (OO # $ava& .stos lenguaes
est)n es/ecialmente diseados /ara ada/tarse a la descom/osicin orientada a obetos& Para ello3 e0isten mecanismos 4ue
/ermiten restringir el acceso a los datos 4ue forman /arte de los obetos& .s res/onsabilidad de cada obeto el
mantenimiento de sus datos3 # el resto de obetos 4ue interaccionan con l lo *ace a travs de una interfaz bien definida&
Tambin a/arece en estos lenguaes el mecanismo de *erencia 4ue /ermite la reutilizacin de cdigo de una manera
controlada&
F < F
Disear # Programar todo es em/ezar
(asi todos los lenguaes evolucionan desde sus or5genes& Por eem/lo3 las versiones m)s actuales de (obol3 %ortran # Pascal
incor/oran caracter5sticas de orientacin a obetos&
:& :& = Paradi gmas de /rogramaci n
Un /aradigma de /rogramacin es un modelo conce/tual /ara desarrollar /rogramas& .l uso de un /aradigma se refuerza
/or el lenguae 4ue se escoa /ara realizar un /rograma concreto3 aun4ue en general3 con ma#or o menor dificultad3 se /uede
usar cual4uier lenguae de /rogramacin /ara seguir cual4uier /aradigma& -rad# Aooc* cita diferentes /aradigmas:
Ori entado al /rocedi mi ento& F Pue se e0/resa de manera im/erativa en forma de algoritmos& Por eem/lo ( #
%ortran&
Ori entado a funci ones& F Se basa en el conce/to matem)tico de funcin # se e0/resa de manera declarativa& Por
eem/lo "is/3 S!"3 ,o/e3 ,ascEel&
Ori entado a l a l gi ca& F Pue se e0/resa /or metas en forma de c)lculo de /redicados& Utilizan reglas e
inferencia lgica& Por eem/lo Prolog&
Ori entado a ob etos& F Se e0/resa en forma de relaciones entre obetos # res/onsabilidades de cada uno& Por
eem/lo SmallTalE o $ava&
.sta clasificacin no es estanca3 algunos lenguaes /ertenecen a varios /aradigmas& .0isten /aradigmas m)s generales3 como
el /aradi gma i m/erati vo o el est r ucturado3 4ue engloban a otros& Adem)s3 continuamente a/arecen nuevos
/aradigmas3 como la ori entaci n a as/ectos 4ue com/lementa a la Programacin Orientada a Obetos fomentando la
se/aracin de conce/tos&
(ada uno de estos /aradigmas tiene ciertas ventaas& As53 el /aradigma /rocedimental a/orta ventaas cuando son tareas
sencillas 4ue se /ueden describir con unos /ocos /asos3 o cuando es im/ortante o/timizar la velocidad de eecucin& .l uso
del /aradigma orientado a la lgica facilita la im/lementacin de sistemas e0/ertos en los 4ue se deba manear una base de
conocimiento& .l /aradigma funcional /ermite construir /rogramas concisos3 f)ciles de /robar # /aralelizar3 lo cual es mu#
adecuado /ara la /rueba matem)tica de algoritmos # /ara /rogramas en los 4ue se re4uiera un alto grado de fiabilidad&
.l /aradigma de Programacin Orientada a Obetos est) demostrando su utilidad en una am/lia variedad de /roblemas
7interfaces gr)ficas3 simuladores3 a/licaciones ofim)ticas3 uegos&&&8& Adem)s3 est) demostrando 4ue /uede ser un marco de
alto nivel ideal /ara integrar sistemas desarrollados siguiendo diferentes /aradigmas&
:& <& Programaci n ori ent ada a ob et os
Antes de *ablar de Programacin Orientada a Obetos definiremos 4u es un obeto& Un ob eto es algo a lo 4ue se le /uede
enviar mensaes # 4ue /uede res/onder a los mismos # 4ue tiene un estado3 un com/or tami ento bien definido # una
i denti dad& .l estado de un obeto est) definido /or el valor de ciertas variables internas al obeto& .ste estado /uede
cambiar de/endiendo de los mensaes 4ue reciba desde el e0terior o de un cambio interno al /ro/io obeto& .l
com/ortamiento de un obeto var5a en funcin del estado en el 4ue se encuentra3 # se /ercibe /or los valores 4ue devuelve
ante los mensaes 4ue recibe # /or los cambios 4ue /roduce en los obetos con los 4ue se relaciona& %inalmente3 la identidad
de un obeto es a4uello 4ue lo *ace distinguible de otros obetos&
"a Programacin Orientada a Obetos es un mtodo de desarrollo en el cual los /rogramas se organizan como colecciones
de obetos 4ue coo/eran /ara resolver un /roblema& .n general los obetos /ueden corres/onderse a entidades del mundo
real 7como un coc*e o un gato83 a acciones 7como saltar o realizar una transaccin bancaria8 o a /rocesos 7como el vuelo o el
a/rendizae8&
"a Programacin Orientada a Obetos se basa en el !odel o de Ob etos& .ste modelo se fundamenta en el uso de @
ca/acidades3 > de las cuales 4ue se consideran /rinci/ales # = secundarias& "os lenguaes de /rogramacin orientados a
obetos se caracterizan /or4ue /ro/orcionan mecanismos 4ue dan so/orte a estas ca/acidades&
"as ca/acidades /rinci/ales son:
Abstraer&
.nca/sular&
!odularizar&
$erar4uizar&
"as ca/acidades secundarias son:
Ti/o&
(oncurrencia&
F =F
(a/5tulo : F +ntroduccin a la /rogramacin orientada a obetos
Persistencia&
A lo largo de las e0/licaciones 4ue siguen # a lo largo del resto de temas se utilizar) el "engua e Uni fi cado de
!odel ado 7Unified !odeling "anguage F U!"8 /ara re/resentar gr)ficamente los eem/los 4ue se va#an /ro/oniendo&
U!" es un lenguae gr)fico /ara visualizar3 es/ecificar3 construir # documentar los artefactos de un sistema software
orientado a obetos& "a notacin U!" se ir) introduciendo de manera gradual segHn se va#a necesitando&
.n los siguientes a/artados se describen m)s detalladamente las ca/acidades /rinci/ales antes mencionadas&
:& <& : Abstraer
"os *umanos *emos desarrollado la ca/acidad de abstraccin /ara tratar la com/leidad& Al analizar un /roblema ignoramos
gran /arte de los detalles3 # solo maneamos las ideas generales de un modelo sim/lificado de ese /roblema& Por eem/lo al
estudiar cmo conducir un coc*e nos /odemos centrar en sus instrumentos 7el volante3 las marc*as&&&8 # olvidarnos de
as/ectos mec)nicos 7como el di)metro de los /istones o la aleacin usada en el cigQeal8&
Abstraer es la ca/acidad 4ue /ermite distinguir a4uellas caracter5sticas fundamentales de un obeto 4ue lo *acen diferente del
resto3 # 4ue /ro/orcionan l5mites conce/tuales bien definidos relativos a la /ers/ectiva del 4ue lo visualiza& "a abstraccin
surge de reconocer las similitudes entre obetos3 situaciones o /rocesos en el mundo real3 # la decisin de concentrarse en
esas similitudes e ignorar las diferencias& As53 una abstraccin se focaliza sobre una /osible vista3 a#udando a se/arar el
com/ortamiento esencial de un obeto de su im/lementacin& 'olviendo al eem/lo de los ma/as3 un ma/a /ol5tico se
focaliza en la divisin en regiones de la su/erficie de un /a5sM si el ma/a es f5sico se focaliza en los as/ectos geogr)ficos de la
misma su/erficie&
"os lenguaes de /rogramacin orientados a obetos facilitan abstraer gracias a 4ue /ermiten definir i nterfaces comunes
/ara comunicarse con clases de obetos& .stas interfaces est)n com/uestas /or los mtodos3 4ue son funciones 4ue /ueden
a/licarse sobre el obeto # 4ue /ueden verse como los mensaes 4ue es /osible enviar al obeto& Jormalmente un obeto
/uede tener varias interfaces& .n la %igura : se /uede ver cmo el coc*e tiene distintas interfaces /ara comunicarse con los
obetos 4ue lo forman& Por eem/lo3 el volante3 la /alanca de cambios o los /edales&
%i gura :& F "as interfaces nos /ermiten comunicarnos con los obetos3
nos /ermiten concentrarnos en ciertos as/ectos # obviar el resto&
As53 en algunos lenguaes de /rogramacin orientados a obetos 7como (OO o $ava8 a/arece el conce/to de cl ase de
ob etos o sim/lemente cl ase 4ue une las interfaces definidas en el /roceso de abstraccin con la im/lementacin del
com/ortamiento deseado& Otros lenguaes 7como SmallTalE o $avaScri/t8 no /ermiten definir clases de obetos3 sino 4ue se
basan en el conce/to de /rototi/os 7todo obeto es un /rototi/o a /artir del cual se /uede crear otro8&
"as clases aaden a la definicin de mtodos la im/lementacin de los mismos& Tambin aaden las /ro/i edades3 4ue son
variables internas al obeto o a la clase 4ue definen el estado del obeto& As53 los obetos 4ue *a# en un sistema siem/re
/ertenecen a una determinada clase3 la cual define su com/ortamiento3 la forma de interaccionar con l # sus /osibles
estados& !todos # /ro/iedades tambin se conocen como mi embros&
.ntre los obetos se crea un com/ortamiento cl i enteIser vi dor 3 de forma 4ue el cliente conoce el com/ortamiento de una
abstraccin servidora analizando los servicios 4ue /resta& .stos servicios forman un contrato 4ue establece las
res/onsabilidades de un obeto res/ecto a las o/eraciones 4ue /uede realizar& .l orden en 4ue se deben a/licar las
o/eraciones se conoce como /rotocol o3 # /ueden im/licar /recondi ci ones # /oscondi ci ones 4ue deben ser
satisfec*as& (uando al enviar un mensae a un obeto se cum/len las /recondiciones /ero el obeto no /uede cum/lir las
/oscondiciones se /roduce una e0ce/ci n& "os lenguaes orientados a obetos tambin suelen dar so/orte al maneo de
e0ce/ciones&
F > F
Disear # Programar todo es em/ezar
Al estudiar un /roblema solemos fiar un nivel de abstraccin3 # en l buscamos las abstracciones /resentes& Jo es frecuente
mezclar elementos 4ue est)n a diferente nivel de abstraccin al analizar un /roblema debido a 4ue genera confusin&
Por eem/lo3 la estructura de un coc*e /resenta varias abstracciones a un nivel alto de abstraccin: motor3 ruedas3 c*asis3
/uertas3 volante& Dentro del motor3 a diferente nivel de abstraccin encontramos: cilindros3 carburador3 radiador3 etc& A un
nivel de abstraccin menor3 dentro de un carburador encontramos: tornillos3 muelles3 arandelas&&&
Otro eem/lo de niveles de abstraccin /odemos encontrarlo en la estructura de las /lantas& A un nivel alto de abstraccin
est)n la ra5z3 el tallo # las *oas& Se a/recia 4ue estos elementos tienen formas de interactuar bien definidas3 # 4ue no *a#
/artes centrales 4ue coordinen su funcionamiento& De la interaccin entre estas abstracciones surge un com/ortamiento 4ue
es ma#or 4ue el com/ortamiento de sus /artes&
A la *ora de definir abstracciones es im/ortante determinar la granularidad de los obetos3 es decir3 determinar 4u son
obetos # 4u son /artes de un obeto& Para a#udar a crear abstracciones se /uede medir la calidad de una abstraccin
revisando los siguientes as/ectos:
Aco/l ami ento&F !inimizar el grado de asociacin entre diferentes abstracciones&
(o*esi n&F !a0imizar el grado de asociacin dentro de una abstraccin&
Sufi ci enci a # com/l eti tud&F Pue tenga las caracter5sticas /recisas /ara /ermitir un funcionamiento eficiente #
com/leto&
Pri mi ti vi dad&F "as o/eraciones de una abstraccin deben ser lo m)s b)sicas /osibles&
Sin embargo3 debe tenerse en cuenta 4ue encontrar buenas abstracciones en un /roblema no es una ciencia e0acta&
Jotaci n U!"
.n U!" las clases se re/resentan en los Di agramas .st)ti cos de (l ases mediante rect)ngulos 7ver %igura >8& .n el
interior de cada rect)ngulo se indican3 se/arados /or l5neas *orizontales3 el nombre de la clase3 las /ro/iedades # los
mtodos&
"as interfaces se re/resentan mediante los mismos rect)ngulos3 con la salvedad de 4ue en el nombre se ante/one la /alabra
interfaz3 # de 4ue no se dea lugar /ara las /ro/iedades #a 4ue no tienen 7ver %igura <8&
%i gura <& F .em/lo de la clase Coche # de la interfaz Automvil&
:& <& < .nca/sul ar
.nca/sular es la ca/acidad 4ue /ermite mantener oculta la im/lementacin de una abstraccin /ara los usuarios de la
misma& .l obetivo de enca/sular es la ocul taci n de la im/lementacin3 /ara 4ue ninguna /arte de un sistema com/leo
de/enda de cmo se *a im/lementado otra /arte&
F 9F
(a/5tulo : F +ntroduccin a la /rogramacin orientada a obetos
%i gura =& F "a enca/sulacin oculta los detalles de im/lementacin de una abstraccin&
"a abstraccin # la enca/sulacin son com/lementarias& !ientras 4ue la /rimera se centra en el com/ortamiento observable3
la segunda lo *ace en cmo se constru#e ese com/ortamiento& As53 la abstraccin define la interfaz # la enca/sulacin se
encarga de los detalles de la im/lementacin& Para forzar esta Htil se/aracin entre abstraccin e im/lementacin3 entre la
definicin de la interfaz # la im/lementacin de una abstraccin se dice 4ue e0iste la bar rera de l a abstracci n&
"a /rinci/al ventaa de la enca/sulacin est) en 4ue facilita 4ue al cambiar el funcionamiento interno de una abstraccin3 los
clientes de la misma no lo noten& Para facilitar la ocultacin los lenguaes orientados a obetos ofrecen ciertos mecanismos3
como los modificadores de visibilidad /ubl i c3 /ri vate # /rotected de (OO # $ava& .stos modificadores /ermiten 4ue se
/ueda acceder libremente a unas /artes de la interfaz 74ue son /Hblicas83 acceder con restricciones a otras /artes 74ue son
/rotegidas83 # 4ue se /ro*5ba el acceso a otras /artes 74ue son /rivadas8&
Jotaci n U!"
"os Diagramas .st)ticos de (lases se /ueden adornar con los modificadores de visibilidad& Rstos se dis/onen /recediendo a
los mtodos # a las /ro/iedades3 mediante los caracteres O 3 F # S /ara /Hblico3 /rivado # /rotegido res/ectivamente&
%i gura >& F 6e/resentacin de una clase en U!"&
:& <& = $erar4ui zar
.n cual4uier /roblema sim/le se encuentran m)s abstracciones de las 4ue una /ersona /uede usar a la vez en un
razonamiento& "os conuntos de abstracciones a menudo forman erar4u5as # su identificacin /ermite sim/lificar la
com/rensin del /roblema&
$erar4uizar es una ca/acidad 4ue /ermite ordenar abstracciones& Su /rinci/al ventaa consiste en 4ue la organizacin de las
abstracciones de un sistema en una erar4u5a /ermite detectar estructuras # com/ortamientos comunes # con ello sim/lificar
el desarrollo&
.n el es4uema de Programacin Orientada a Obetos se definen dos formas b)sicas de erar4u5as:
$erar4u5as entre clases e interfaces&
$erar4u5as entre obetos&
F ? F
Disear # Programar todo es em/ezar
$erar4u5 a entre cl ases e i nterfaces
Definen relaciones del ti/o 1tal abstraccin es una abstraccin cual2& .stas relaciones se denominan relaciones de *erencia #
cum/len 4ue los elementos de los 4ue se *ereda son m)s generales3 mientras 4ue los 4ue elementos 4ue *eredan est)n m)s
es/ecializados&
Un eem/lo lo /odr5amos encontrar en la clase Coche # en una clase derivada Deportivo& "os obetos de la clase
Deportivo com/artir5an el com/ortamiento de los de la clase Coche3 /ero adem)s los obetos de la clase Deportivo
aadir5an ciertas interfaces # com/ortamientos nuevos& "a clase Deportivo ser5a una es/ecializacin de la clase Coche&
Por eem/lo3 los obetos de la clase Deportivo /odr5an tener la /ro/iedad turbo3 /ero un Coche en general no tendr5a
/or 4u tener turbo& Adem)s3 la clase Deportivo /odr5a redefinir el mtodo acelerar3 /ara dotarlo de diferentes
caracter5sticas mediante una im/lementacin diferente& Obsrvese 4ue todo Deportivo ser5a un Coche3 /ero no todo
Coche ser5a un Deportivo&
"os lenguaes de /rogramacin orientados a obetos deben dar so/orte a la erar4u5a de clases e interfaces& Para ello deben
/ro/orcionar mecanismos /ara definir clases e interfaces nuevas o 4ue *ereden de otras #a e0istentes& Por eso se /uede
*ablar de *erencia entre interfaces3 de *erencia entre clase e interfaz # de *erencia entre clases&
,erencia entre interfaces&F Ta se *a dic*o 4ue las interfaces no contienen im/lementacin ni /ro/iedades3 slo
definen mtodos& Por eso3 cuando una interfaz *ereda de otra lo 4ue obtiene es /recisamente la declaracin de
sus mtodos&
,erencia entre clase e interfaz&F (uando una clase *ereda de una interfaz se dice 4ue tal clase im/lementa o 4ue
cum/le tal interfaz& Juevamente3 como las interfaces no contienen im/lementacin slo se *ereda la definicin
de mtodos3 siendo res/onsabilidad de la clase 4ue *ereda im/lementar el com/ortamiento&
,erencia entre clases&F "a *erencia de clases se /roduce cuando una clase *ereda tanto la interfaz como el
com/ortamiento de otra clase& Por eem/lo3 cuando en $ava se define una clase B 4ue *ereda de otra A3 la clase
B tiene todos los mtodos # todas las /ro/iedades 4ue en A se definieron como /Hblicas o /rotegidas& Adem)s3
cual4uier llamada a un mtodo M de la clase B se com/ortar) e0actamente como lo *ar5a sobre un obeto de la
clase A3 salvo 4ue e0/l5citamente se modifi4ue su com/ortamiento en B&
Tras *eredar siem/re se /ueden aadir nuevos mtodos a la interfaz 4ue *ereda /ara es/ecializarla en algHn as/ecto&
Adem)s3 en el caso de 4ue la 4ue *ereda sea una clase3 # no una interfaz3 tambin se /ueden aadir nuevas /ro/iedades&
Por otro lado3 la *erencia /uede clasificarse en dos gru/os atendiendo a la forma de las erar4u5as: *erencia sim/le # *erencia
mHlti/le&
,erenci a si m/l e&F (uando un elemento slo *ereda de una erar4u5a& .n la /r)ctica esto ocurre cuando una
clase o interfaz *ereda slo de otra # no lo *ace de varias simult)neamente&
,erenci a mHl ti /l e&F (uando una clase o interfaz *ereda simult)neamente de varias erar4u5as diferentes&
"a *erencia mHlti/le de clases da lugar a lo 4ue se conoce como el /robl ema de l a ambi gQedad& .ste /roblema a/arece
cuando una clase *ereda de varias 4ue tienen un mtodo de idntico nombre # /ar)metros /ero 4ue tiene definidos
com/ortamientos diferentes en cada clase&
.l eem/lo *abitual de ambigQedad se conoce como el /robl ema del di amante 7ver %igura 98& .n l *a# una clase A3 de
la 4ue *eredan dos clases B # C& %inalmente e0iste una clase D 4ue *ereda simult)neamente de B # C& Algunos de los
interrogantes 4ue /lantea esta situacin son:
Si e0iste un mtodo en A 4ue se im/lementa de forma diferente en B # en C3 Ka 4u mtodo se invoca cuando
se *ace desde DL
(uando se invoca al constructor de D # este a su vez invoca recursivamente a los constructores de las clases de
las 4ue deriva: Kcu)ntas veces se invoca al constructor de la clase A3 # en 4u orden se invocan los constructores
de B # C?
"as res/uestas a estas /reguntas resultan en es4uemas de eecucin com/licados 4ue /ueden sor/render f)cilmente al
/rogramador& Por otro lado3 la *erencia mHlti/le de interfaz no /resenta /roblemas de ambigQedad3 /ues la im/lementacin
slo est) detallada en las clases # su uso resulta menos com/leo aun4ue la reutilizacin de cdigo es menor&
.s /or todo esto 4ue en algunos lenguaes 7como $ava8 se *a decidido no dar so/orte a la *erencia mHlti/le de clases&
F @F
(a/5tulo : F +ntroduccin a la /rogramacin orientada a obetos
A
C
D
B
%i gura 9& F Problema del diamante&
,erenci a Si m/l e !Hl ti /l e
.nt re i nt erfaces S5 S5
.nt re cl ase e i nterfaz S5 S5
.nt re cl ases S5 Jo
%i gura ?& F 6elaciones de *erencia so/ortadas /or $ava&
.n cierto sentido la *erencia de clases /uede com/rometer la enca/sulacin3 /ues /ara *eredar se deben conocer detalles de
la clase /adre& .ste *ec*o crea una com/leidad 4ue normalmente debe evitarse& Por ello se recomienda en general el uso
e0clusivo de la *erencia de interfaz frente a otros ti/os de *erencia&
$erar4u5 a ent re ob etos
"as erar4u5as entre obetos se /ueden clasificar en < ti/os de relaciones: rel aci ones de asoci aci n # rel aci ones de
de/endenci a&
"as relaciones de asociacin establecen relaciones estructurales entre obetos de forma 4ue se establece una cone0in entre
ellos& %undamentalmente3 este ti/o de relaciones /ermite construir obetos mediante la asociacin de otros obetos menores&
Un eem/lo lo /odemos encontrar en la relacin entre los obetos de la clase Coche # los obetos de la clase Rueda3 si
definimos 4ue un obeto de la clase Coche /osee cuatro obetos de la clase Rueda&
"os lenguaes orientados a obetos facilitan las relaciones de asociacin /ermitiendo 4ue cual4uier clase /ueda se /ueda
utilizar /ara definir una /ro/iedad dentro otra clase&
"as relaciones de de/endencia dan lugar a relaciones del ti/o 1tal obeto usa tal otro obeto2 /or lo 4ue tambin se conocen
como rel aci ones de uso& .stas relaciones se distinguen de las de asociacin /or4ue el )mbito # el tiem/o de uso de un
obeto desde otro es m)s limitado&
"os lenguaes orientados a obetos facilitan las relaciones de de/endencia /ermitiendo 4ue un mtodo /ueda utilizar un
obeto de manera local&
Jotaci n U!"
.n U!" las relaciones entre clases se re/resentan en los Diagramas .st)ticos de (lases mediante l5neas 4ue unen las clases&
F ; F
Disear # Programar todo es em/ezar
A F
E D
C B
%i gura @& F "as clases D # E derivan de la B& A su vez B # C derivan de A& "a clase C adem)s im/lementa
la interfaz F&
.n el caso de la *erencia la relacin se re/resenta mediante una l5nea entre las caas corres/ondientes a las clases
involucradas en la relacin& Dic*a l5nea termina en una flec*a *ueca 4ue a/unta a la clase de la 4ue se *ereda& Si la *erencia
es de interfaz3 la l5nea es /unteada 7ver %igura @8&
Si la clase B *ereda de A se dice 4ue A es la su/ercl ase de B& Tambin se suele decir 4ue A es la cl ase /adre de B3 4ue B
es una cl ase deri vada de A3 o 4ue B es una cl ase *i a de A& Adem)s3 se *abla de 4ue una clase est) a un nivel de
abstraccin ma#or cuanto m)s alta est) en una erar4u5a de clases& As53 la clase m)s general en una erar4u5a se conoce como
cl ase base& Por eem/lo3 en la %igura @ B esta en un nivel de abstraccin ma#or 4ue D # E3 siendo base de ellas3 # la clase A
es base de B3 C3 D # E&
Por otro lado3 las relaciones de asociacin entre obetos se re/resentan mediante l5neas sim/les 4ue unen las caas de las
clases& Sobre estas l5neas se /ueden indicar las cardi nal i dades3 es decir3 las /ro/orciones en las 4ue intervienen los
elementos de la asociacin 7ver %iguras ; # D8&
Obsrvese 4ue las relaciones de asociacin tambin se /ueden re/resentar como /ro/iedades& Suele *acerse as5 cuando el
diseo de una de las clases de la asociacin no tiene im/ortancia en ese conte0to& .n estos casos3 el nombre del obeto
menor se aade como una /ro/iedad de la clase 4ue se est) e0/licando& Por eem/lo3 en la clase Coche de la %igura D3 e0iste
una asociacin entre la clase Coche # la clase Texto3 /ero se considera de menos im/ortancia 4ue la asociacin entre
Coche # Rueda3 4uiz)s /or4ue la clase Texto es mu# comHn3 # /or ello se /resenta de manera abreviada&
%inalmente3 las relaciones de uso se re/resentan mediante l5neas /unteadas con /unta de flec*a3 indicando el sentido de la
de/endencia&
A B
1 *
%i gura ;& F .sta figura /resenta 4ue cada obeto de la clase A /uede estar asociado a varios elementos de
la clase A& T cada elemento de la clase B slo est) asociado a un elemento de la clase A&
-matricula : Texto
Coche Rueda
1 4
%i gura D& F .em/lo en el 4ue los obetos de la clase Coche se relacionan con > elementos de la clase
Rueda # con uno de la clase Texto3 aun4ue a esta Hltima asociacin se le concede menor im/ortancia&
Adem)s3 los elementos de la clase Rueda se asocian con uno de la clase Coche&
A B
%i gura :C& F "a clase A usa a la clase A&
F DF
(a/5tulo : F +ntroduccin a la /rogramacin orientada a obetos
Tambin se suelen utilizar diagramas 4ue /resentan instancias de obetos mediante caas # las relaciones 4ue *a# entre ellos
en un momento de la eecucin mediante l5neas& .stos diagramas se denominan Di agramas de +nstanci as& .n el interior
de las caas se /resenta el nombre de la clase /recedida /or el car)cter de dos /untos& O/cionalmente se /uede /resentar el
nombre de la instancia3 en cu#o caso debe a/arecer subra#ado # antes del nombre de la clase& %inalmente3 bao el nombre de
la clase /uede /resentarse el valor de la /ro/iedades de la clase /ara esa instancia&
%i gura ::& F Diagrama de +nstancias&
:& <& > !odul ari zar
!odularizar es la ca/acidad 4ue /ermite dividir un /rograma en agru/aciones lgicas de sentencias& A estas agru/aciones se
las llama mdul os&
"as ventaas 4ue ofrece la modularidad son:
%acilidad de mantenimiento3 diseo # revisin& Al dividir el /rograma se facilita 4ue varias /ersonas /ueden
desarrollar de manera simult)nea e inde/endiente conuntos disuntos de mdulos&
Aumento de la velocidad de com/ilacin& "os com/iladores suelen com/ilar /or mdulos& .sto significa 4ue el
cambio de un mdulo slo im/lica la recom/ilacin del mdulo # de los 4ue de/endan de l3 /ero no la del total de
mdulos&
!eora en la organizacin # en la reusabilidad3 #a 4ue es m)s f)cil localizar las abstracciones similares si se
encuentran agru/adas de una manera lgica&
A la *ora de disear los mdulos debe tenerse en cuenta:
!a0imizar la co*erenci a3 es decir3 se deben agru/ar en un mismo mdulo las abstracciones relacionadas
lgicamente&
!inimizar las de/endenci as entre mdulos3 es decir3 4ue /ara com/ilar un mdulo no se necesite com/ilar
muc*os otros&
(ontrolar el tamao de l os mdul os & !dulos /e4ueos aumentan la desorganizacin3 mdulos mu# grandes
son menos maneables # aumentan los tiem/os de com/ilacin&
.n (OO # en $ava el conce/to de mdulo encuentra so/orte a varios niveles& Al menor nivel cada mdulo se corres/onde a
un fic*ero& As53 los fic*eros se /ueden escribir # com/ilar de manera se/arada& "as bibliotecas a/ortan un segundo nivel de
modularidad a (OO& !ientras3 en lenguaes como $ava3 se *a creado el conce/to de /a4uete 4ue /ermite un nHmero
ilimitado de niveles de modularidad& Tambin suele utilizarse el conce/to de com/onente # de /rograma como mdulos 4ue
tienen una funcionalidad com/leta e inde/endiente&
Jotaci n U!"
.n U!" los /a4uetes se re/resentan en los Di agramas de Pa4uet es mediante unos rect)ngulos 4ue se asemean a
car/etas& .stas car/etas se eti4uetan con el nombre del /a4uete&
"os com/onentes # los /rogramas se re/resentan utilizando unas caas decoradas con dos caas en su interior 7ver %igura
:<8& Obsrvese 4ue entre /a4uetes se /ueden dar relaciones de asociacin # de/endencia&
F :C F
Disear # Programar todo es em/ezar
%i gura :<& F .l /a4uete D de/ende del /a4uete E3 # el com/onente A.EXE de/ende del
com/onente B.D # del /a4uete D& Por otro lado3 los com/onentes A.EXE # B.D
est)n contenidos en el /a4uete C 4ue igual 4ue F est) contenido en el /a4uete E&
:& <& 9 Ti /o
Un ti/o
<
es una caracterizacin /recisa asociada a un conunto de obetos& .n Programacin Orientada a Obetos3 los
obetos 4ue com/arten una misma interfaz se dice 4ue tienen el mismo ti/o& Tambin se dice 4ue el ti/o de un obeto B
deriva del de otro A cuando la interfaz de B es un su/erconunto de la de A&
"a asociacin del ti/o a un obeto se conoce como ti /ado& .l ti/ado refuerza las decisiones de diseo3 im/idiendo 4ue se
confundan abstracciones diferentes # dificultando 4ue /uedan utilizarse abstracciones de maneras no /revistas&
%i gura :=& F .l ti/ado /rotege de los errores 4ue se
/ueden cometer al mezclar abstracciones&
.l so/orte al ti/ado en los diferentes lenguaes de /rogramacin es desigual& Por eem/lo3 en SmallTalE los mensaes flu#en
de un obeto a otro sin ninguna restriccin3 aun4ue los obetos /uedan no res/onder al recibir mensaes /ara los 4ue no
estn /re/arados&
"os lenguaes /ueden clasificarse en dos gru/os res/ecto a las restricciones 4ue im/one el ti/o:
"enguaes con ti /ado fuer te3 en los 4ue no es /osible mezclar variables de ti/os diferentes&
"enguaes con ti /ado dbi l 3 en los 4ue es /osible mezclar variables de diferentes ti/os& .sta mezcla /uede
realizarse de manera im/l5cita o e0/l5cita mediante coerci n& "a coercin fuerza al com/ilador a tratar un dato
de un ti/o como si fuese de otro ti/o3 # /or ello el /rogramador debe res/onsabilizarse de tal violacin&
Jo se debe confundir la coercin con la conversi n o casti ng& "a coercin trata al dato como un sim/le conunto de
b#tes forzando su uso como de un ti/o determinado3 mientras 4ue la conversin im/lica algHn ti/o de tratamiento 4ue
asegura la validez de la o/eracin&
.l ti/ado fuerte evita los errores 4ue se /ueden cometer al mezclar abstracciones de una manera no /revista en el diseo&
Por eem/lo3 /uede evitar 4ue se com/aren directamente dos im/ortes si est)n en monedas diferentes 7como dlares #
euros8& Tambin acelera los intr/retes # los com/iladores3 /ues al ser m)s estricta la sinta0is el nHmero de /osibilidades a
analizar es menor&
<
.l conce/to de ti/o /roviene directamente de la Teor5a de Ti/os Abstractos& SegHn sta un Ti/o Abstracto de Datos es la estructura
resultante de la unin de un dominio /ara ciertos datos # de una coleccin de o/eraciones 4ue actHan sobre esos datos&
F ::F
(a/5tulo : F +ntroduccin a la /rogramacin orientada a obetos
.n contra del ti/ado fuerte se /uede decir 4ue introduce fuertes de/endencias sem)nticas entre las abstracciones& .sto
/uede /rovocar 4ue un /e4ueo cambio en la interfaz de una clase base desencadene 4ue tenga 4ue recom/ilarse todas las
subclases # clases relacionadas&
.n $ava el ti/ado es fuerte& Tanto una clase como una interfaz definen un ti/o3 # con l los mensaes 4ue se le /ueden enviar&
As53 todos los obetos de un determinado ti/o /ueden recibir los mismos mensaes& Adem)s3 $ava im/ide violar el ti/o de un
obeto envi)ndole mensaes /ara los 4ue no est) /re/arado&
.0isten lenguaes 4ue tienen un ti/ado *5brido entre ti/ado fuerte # dbil& .n este gru/o se encuentra /or eem/lo ( # (OO3
4ue tiene ti/ado fuerte en algunos casos 7/or eem/lo al com/arar clases83 /ero dbil en otros 7al /ermitir com/arar ti/os
b)sicos como el i!t # el "loat o al usar coercin de /unteros a void8&
Por otro lado3 de/endiendo de la forma en 4ue se declaran las variables se /uede *ablar de:
Ti /ado e0/l i ci to3 cuando antes de utilizar una variable debe declararse el ti/o al 4ue /ertenece&
Ti /ado i m/l 5 ci to3 cuando las variables no se les indica el ti/o3 sino 4ue ste se deduce del cdigo&
.l ti/ado im/l5cito /uede ocasionar /roblemas dif5ciles de detectar debido a errores de escritura& Si en un lenguae con
ti/ado im/l5cito se define la variable 1entero2 # luego se usa la variable 1enetero2
=
se crear)n dos variables diferentes sin 4ue
se /roduzca ningHn error sint)ctico& Sin embargo3 en eecucin estar) asegurado el error en la sem)ntica del cdigo& Para
evitar estos /roblemas $ava utiliza ti/ado e0/licito&
Por Hltimo3 en cuanto al momento en 4ue se com/rueba el ti/o de una variable3 los lenguaes de /rogramacin se /ueden
clasificar en:
"enguaes con ti /ado est )ti co3 en los 4ue el ti/o se com/rueba en com/ilacin&
"enguaes con ti /ado di n)mi co3 en los 4ue el ti/o se com/rueba en eecucin&
.n general3 los lenguaes no utilizan slo ti/ado est)tico o slo ti/ado din)mico& Pues aun4ue un lenguae /retenda utilizar
slo ti/ado est)tico3 /uede *aber ciertas caracter5sticas 4ue obligan a utilizar el ti/ado din)mico&
As53 los lenguaes com/ilados suelen utilizar ti/ado est)tico 7/or eem/lo (OO # $ava8& .n estos lenguaes3 tras com/ilar llega
la eta/a de enlazado& (uando el ti/o de un obeto se conoce en com/ilacin las direcciones de los mtodos se enlazan
mediante lo 4ue se conoce como un enl ace tem/rano& Sin embargo3 en los lenguaes de /rogramacin orientados a
obetos e0iste una caracter5stica derivada de la *erencia 4ue im/ide el enlace tem/rano en algunas ocasiones& .sta
caracter5stica se denomina /ol i morfi smo # consiste en /ermitir utilizar una misma variable /ara designar obetos de clases
diferentes /ero 4ue cum/lan la misma interfaz& .l /olimorfismo /uede im/edir 4ue se se/a en com/ilacin a 4u mtodo de
4u clase se debe llamar& Por lo 4ue se debe realizar la com/robacin de ti/o en eecucin # realizar un enl ace tard5 o&
(uando en com/ilacin se /uede determinar la direccin del mtodo se *abla de /ol i morfi smo est)ti co3 # cuando slo
es /osible determinarla en eecucin se *abla de /ol i morfi smo di n)mi co&
Otro eem/lo lo /odemos encontrar en lenguaes como (OO # $ava en los 4ue se realiza coercin con com/robacin de
ti/os en tiem/o de eecucin
>
&
Se debe sealar 4ue cuando el ti/ado es im/l5cito # din)mico3 el ti/o de una variable /odr5a cambiar durante la eecucin3
como /or eem/lo /ermite el lenguae P#t*on& .n este lenguae tambin se considera una variedad del ti/ado din)mico 4ue
se denomina ti /ado l at ente # 4ue consiste en 4ue al invocar un mtodo de un obeto no se com/rueba el ti/o como algo
global sino 4ue slo se com/rueba la e0istencia del mtodo 4ue se est) invocando&
.l siguiente diagrama com/ara la forma en la 4ue se utiliza el ti/ado en algunos lenguaes de /rogramacin&
=
Obsrvese 4ue intencionadamente sobra un car)cter 1e2&
>
.n (OO se /ueden realizar conversiones # coerciones& Utilizando la instruccin di!amic#cast /ara realizar la coercin con
com/robacin de ti/os din)micaM utilizando static#cast /ara coercin con com/robacin de ti/os est)ticaM con
rei!terpret#cast /ara coercin sin com/robacin de ti/osM finalmente usando /arntesis # U se realiza coercin3 mientras 4ue
usando solo /arntesis se realiza conversin&
F :< F
Disear # Programar todo es em/ezar
Fuerte Dbil
E
s
t

t
i
c
o






















D
i
n

m
i
c
o
Haskel
C++
Pascal
a!a
"isual #asic
Ti$a%o im$licito
P&t'on
Ti$a%o ex$licito
Ti$a%o mixto
%i gura :>& F (om/aracin del ti/ado de varios lenguaes&
Jotaci n U!"
.n U!" el ti/o a/arece como nombre de cada clase o interfaz& Tambin suele seguir a cual4uier identificador 4ue a/arezca
en un diagrama3 se/arado del mismo /or el s5mbolo de dos /untos 7ver %iguras < # D8&
:& <& ? (oncurrenci a
"a concurrencia es la ca/acidad 4ue /ermite la eecucin /aralela de varias secuencias de instrucciones& ,a# /roblemas 4ue
se resuelven m)s f)cilmente si se dis/one de esta ca/acidad& Por eem/lo3 *a# ocasiones en las 4ue se dis/one de mHlti/les
/rocesadores # se desea a/rovec*arlos a todos a la vez /ara resolver un mismo /roblema& Otros /roblemas re4uieren 4ue se
/uedan tratar diversos eventos simult)neamente&
(l)sicamente los lenguaes de /rogramacin no *an dado ningHn so/orte a la concurrencia& -eneralmente3 esta facilidad es
/ro/orcionada /or los sistemas o/erativos& Por eem/lo3 en Uni0 la concurrencia se consigue con la invocacin de una
funcin del sistema o/erativo llamada "or$ 4ue divide la l5nea de eecucin3 creando mHlti/les l 5 neas de e ecuci n
7tambin conocidas como *i l os o t*reads8&
"os lenguaes orientados a obetos /ueden dar so/orte a la concurrencia de una manera natural *aciendo 4ue un obeto se
/ueda eecutar en un t*read se/arado& A tales obetos se les llama obetos activos frente a los /asivos 4ue no se eecutan en
t*reads se/arados& .sta forma de tratamiento a#uda a ocultar la concurrencia a altos niveles de abstraccin& Sin embargo3 los
/roblemas cl)sicos de la concurrencia /ersisten 7condiciones de carrera3 deadlocE3 inanicin3 inusticia3 retraso&&&8& $ava es un
eem/lo de lenguae 4ue da so/orte a la concurrencia creando *ilos al crear ciertos obetos3 aun4ue en el caso de $ava el *ilo
/uede eecutar luego cdigo 4ue est en otros obetos&
:& <& @ Persi stenci a
"a /ersistencia es la ca/acidad 4ue /ermite 4ue la e0istencia de los datos trascienda en el tiem/o # en el es/acio&
Podemos clasificar los datos en relacin a su vida segHn los siguientes ? ti/os:
.0/resiones& (u#a vida no su/era el )mbito de una l5nea de cdigo&
'ariables locales& (u#a vida se circunscribe a la vida de una funcin&
'ariables globales& Pue e0isten mientras se eecuta un /rograma&
Datos 4ue /ersisten de una eecucin a otra&
Datos 4ue sobreviven a una versin de un /rograma&
Datos 4ue sobreviven cuando #a no e0isten los /rogramas3 los sistemas o/erativos e incluso los ordenadores
en los 4ue fueron creados&
"os tres /rimeros /untos entran dentro del so/orte dado cl)sicamente /or los lenguaes de /rogramacin& "os tres Hltimos
/untos no suelen estar so/ortados /or los lenguaes de /rogramacin3 entrando en el )mbito de las bases de datos&
Un lenguae orientado a obetos 4ue d so/orte /ara la /ersistencia deber5a /ermitir grabar los obetos 4ue e0istan3 as5 como
la definicin de sus clases3 de manera 4ue /uedan cargarse m)s adelante sin ambigQedad3 incluso en otro /rograma distinto
al 4ue lo *a creado& $ava da cierto nivel de so/orte a la /ersistencia de una clase si sta cum/le la interfaz /redefinida
%eriali&able& .sta interfaz define mtodos 4ue /ermiten almacenar los obetos en so/ortes /ermanentes&
F :=F
(a/5tulo : F +ntroduccin a la /rogramacin orientada a obetos
:& =& "ecturas recomendadas
1ObectFOriented Anal#sis and Design23 -& Aooc*3 Aenamin (ummings3 :DD>& "os cinco /rimeros ca/5tulos de este libro
constitu#en una de las /rimeras3 # meores3 introducciones formales al diseo orientado a obetos de la mano de uno de los
creadores de U!"&
1.l lenguae Unificado de !odelado2 # 1.l lenguae Unificado de !odelado: -u5a de referencia23 -& Aooc*3 +& $acobson # $&
6umbaug*3 <V edicin3 Addison Gesle# <CC?& 1"os tres amigos23 creadores de U!"3 /resentan en estas dos obras una gu5a
de usuario # una gu5a de referencia de U!"& +m/rescindibles /ara conocer todos los detalles de U!"3 su car)cter3 /oco
did)ctico3 *ace 4ue solo se recomiende como obra de consulta&
:& >& . erci ci os
. erci ci o :
Su/ngase 4ue un banco desea instalar caeros autom)ticos /ara 4ue sus clientes /uedan sacar e ingresar dinero mediante
una tareta de dbito&
(ada cliente /odr) tener m)s de una cuenta en el Aanco3 # /or cada cuenta se /odr) tener como m)0imo una taretaM de cada
cuenta slo interesan los datos del titular de la misma3 estando las taretas3 en caso de 4ue e0istan3 a nombre del titular de la
cuenta&
Para evitar 4ue las taretas e0traviadas o robadas se usen3 se decide 4ue antes de entregar el dinero del caero debe verificar
mediante una contrasea la identidad del /ro/ietario de la cuenta& Slo se /ermiten tres intentos /ara introducir la clave
correcta3 si no se consigue se invalida la tareta&
Para aumentar la seguridad3 el Aanco /ro/one 4ue se fie una cantidad m)0ima de dinero 4ue /ueda sacarse cada d5a&
.l banco desea 4ue m)s tarde sea /osible aadir nuevas o/eraciones al caero como: consultar el saldo3 com/rar entradas de
teatro3 etc&
Usando el /aradigma de orientacin a obetos # el lenguae U!" se /ide construir un Diagrama .st)tico de (lases 4ue
/ueda re/resentar una solucin al enunciado&
F :> F
(a/5 tul o < +ntroducci n al l engua e $ava
<& :& +ntroducci n
.n este ca/5tulo se /resenta una breve introduccin al lenguae $ava& "a bibliograf5a recomendada al final del ca/5tulo
/ermitir) com/render con detalle los conce/tos 4ue en los siguientes /untos se esbozan&
<& :& : Areve *i stori a de $ava
%irst Person3 una filial de Sun !icros#stems es/ecializada en el desarrollo de software /ara /e4ueos dis/ositivos3 decidi
desarrollar un nuevo lenguae adecuado a sus necesidades& .ntre estas necesidades estaban la reduccin del coste de /ruebas
en relacin a otros lenguaes como ( o (OO3 la orientacin a obetos3 la inclusin de bibliotecas gr)ficas # la inde/endencia
del sistema o/erativo& As53 de la mano de $ames -osling3 naci OaE& Al /oco tiem/o3 en :DD>3 cerr %irst Person al no
des/egar ni los /ro#ectos de T' interactiva3 ni los de tostadoras inteligentes&
Uno de los desarrolladores de Uni0 # fundadores de Sun3 Aill $o#3 /ens 4ue OaE /od5a ser el lenguae 4ue la inci/iente
+nternet necesitaba # en :DD93 tras una /e4uea ada/tacin de OaE3 nac5a $ava&
.ntre las /rinci/ales caracter5sticas de $ava se /ueden citar:
Sinta0is similar a la de (OO& Aun4ue se sim/lifican algunas caracter5sticas del lenguae como: la sobrecarga de
o/eradores3 la *erencia mHlti/le3 el /aso /or referencia de /ar)metros3 la gestin de /unteros3 la liberacin de
memoria # las instrucciones de /recom/ilacin&
So/orte *omogneo a la Programacin Orientada a Obetos& A diferencia de (OO3 4ue /uede considerarse un
lenguae multi/aradigma3 $ava est) diseado es/ec5ficamente /ara utilizar el /aradigma de orientacin a
obetos&
+nde/endencia de la /lataforma& (on $ava se *izo un im/ortante esfuerzo /ara 4ue el mismo cdigo fuese
eecutable inde/endientemente del *ardware # del Sistema O/erativo&
A la versin del lenguae vigente en <CCD se le denomina $ava 9 # su/one una meora sustancial res/ecto a a4uella /rimera
versin de $ava de :DD9& .l siguiente diagrama de blo4ues muestra un es4uema de alto nivel de la /lataforma $ava S.&
util lang
javax awt
java javac
Seguridad Internacional
javadoc apt
RNI IDL
jar javap
Despliegue Monitoreo
D! "tras
Bus#ueda
de errores
%M &I
Swing
Int'I Support Beans M( I"
Std "verride
Mechanis)
Networ*ing Securit+ (ML A(!
ava ,otspot Client Co)piler ava ,otspot Server Co)piler
Linux Solaris -indows "tros
Input Methods
ava .D Sownd
I)age I"
Accesi/ilit+
!rint Service
Drag'n'Drop
!re0erences
Re0 "/jects Re0lection Collections
AR
Regular
Expresion
1ip %ersioning
Concurrenc+
2tilities
Logging
Extesion
Mechanis)
Seriali3ation
Manage)ent
New I"
M4#uinas virtuales
!a#uetes /ase
"tros pa#uetes
Inter0aces de
integraci5n
!a#uetes de
Inter0a3 de 2suario
&ecnolog6as de
despliegue
ava -e/ Start ava !lug7in
,erra)ientas + A!Is
de desarrollo
Siste)as "perativos
NDI DBC IDL RMI RMI7II"!
RE
D8
NI
Math
a!a ()*
%i gura :9& F Diagrama de los /rinci/ales com/onentes de la /lataforma $ava S.&
F :9 F
(a/5tulo < F +ntroduccin al lenguae $ava
<& :& < "a m)4ui na vi rtual de $ava
Partiendo del cdi go fuente de un /rograma3 el com/ilador de $ava S. no /roduce cdi go m)4ui na eecutable en un
/rocesador es/ec5fico& .n vez de esto3 genera un cdigo sim/lificado3 denominado b#tecode3 4ue /recisa de otro
/rograma3 la !)4ui na 'i rt ual de $ava S.3 /ara eecutarse& .sta !)4uina 'irtual3 eecuta las a/licaciones $ava en un
entorno virtual 4ue se denomina la ca a de arena 7sandbo08& .ste es4uema de funcionamiento *ace 4ue $ava sea mu#
seguro en cuanto al acceso no autorizado a los recursos del sistema& Tambin *ace 4ue sea multi/lataforma3 /ues una sola
com/ilacin genera b#tecodes 4ue se /odr)n eecutar en m)4uinas virtuales de diferentes /lataformas&
Debido a la e0istencia de este lenguae intermedio de b#tecodes3 *a# 4uien considera a $ava un lenguae inter/retado& Sin
embargo3 en $ava S. desde la versin :&= la !)4uina 'irtual en vez de inter/retar cada b#tecode3 com/ila a cdigo m)4uina
nativo cada funcin antes de eecutarla& .ste ti/o de enfo4ue se denomina $ust +n Ti me 7$+T8 /or4ue se realiza la
com/ilacin en el momento de la eecucin 7esta misma tecnolog5a la *a co/iado !icrosoft en la m)4uina virtual de la
/lataforma &J.T8& Adem)s3 los b#tecodes tienen un formato similar al cdigo m)4uina de cual4uier /rocesador3 # /or ello la
generacin de cdigo m)4uina desde estos b#tecodes es mu# r)/ida&
Debe e0istir una !)4uina 'irtual diferente /ara cada /lataforma 4ue so/orte $ava S.& +ncluso suele *aber diferentes
m)4uinas virtuales /ara la misma /lataforma3 de/endiendo del fabricante de software3 siendo algunas meores 4ue otras&
%i gura :?& F .s4uema b)sico de com/ilacin # eecucin en $ava&
Tambin e0isten im/lementaciones del com/ilador de $ava 4ue convierten el cdigo fuente directamente en cdigo obeto
nativo3 como -($& .sto elimina la eta/a intermedia donde se genera el b#tecode3 /ero la salida de este ti/o de com/iladores
no es multi/lataforma&
<& :& = (om/i l adores de $ava
.0isten varias a/licaciones /ara com/ilar $ava en l5nea de comandos& "a m)s sim/le es avac3 /ro/orcionada /or el $DW
7$ava Develo/er Wit8 de Sun& Actualmente3 en <CCD3 la Hltima versin estable del Eit de desarrollo de $ava de Sun es el $DW ?&
<& :& > .ntornos de desarrol l o /ara $ava
Para /rogramar en $ava e0isten entornos O/en Source de nivel /rofesional como .cli/se 7desarrollado inicialmente /or
+A!8 # Jetbeans 7de Sun8 4ue *acen esta tecnolog5a abierta # accesible& Tambin e0isten entornos /rivativos como +ntelli$
+D.A& Todos estos entornos /ermiten /rogramacin de a/licaciones de ti/o consola3 a/licaciones visuales3 a/licaciones
web3 /ara sistemas embebidos3 /ara dis/ositivos mviles&&&
Tanto .cli/se3 como Jetbeans e +ntelli$ +D.A3 est)n desarrollados en $ava& Tambin *a# entornos m)s modestos como
Wawa o Scite3 desarrollados com/letamente en lenguae nativo3 4ue son menos /esados en eecucin /ero 4ue no
contem/lan muc*as de las caracter5sticas 4ue a/ortan sus *ermanos ma#ores&
<& :& 9 .l /rograma *ol a mundo
"a tradicin3 iniciada con el famoso libro sobre el lenguae ( de Wernig*an # 6itc*ie3 dicta 4ue el /rimer /rograma 4ue debe
eecutarse cuando se est) a/rendiendo un lenguae es el /rograma 'olaMu!do& Dic*o /rograma se limita a im/rimir en
/antalla un mensae de bienvenida& Para no rom/er la tradicin3 con nuestro editor de te0to AS(++ favorito3 creamos un
fic*ero fuente denominado 'olaMu!do.(ava& .n l co/iamos el siguiente fragmento de cdigo3 res/etando ma#Hsculas #
minHsculas3 tanto en el nombre del fic*ero como en el contenido3 /ues $ava /resta atencin a este detalle&
)* +ro,rama e! -ava .ue muestra u! me!sa(e de bie!ve!ida *)
class 'olaMu!do /
)) m0todo e! el .ue comie!&a la e(ecuci! del pro,rama
public static void mai! 1%tri!, 2 3 ar,4 /
%5stem.out.pri!tl!16'ola mu!do647
8
8
F :? F
Disear # Programar todo es em/ezar
Una vez grabado el cdigo fuente del /rograma en un directorio a nuestra eleccin3 desde la l5nea de comandos invocamos
al com/ilador&
c9:s;a:E(emplo:< (avac 'olaMu!do.(ava
Rste com/ila # genera el fic*ero 'olaMu!do.class 4ue contiene los b#tecodes& %inalmente eecutamos el /rograma
invocando a la m)4uina virtual de $ava3 obteniendo el saludo es/erado&
c9:s;a:E(emplo:< (ava =classpath . 'olaMu!do
'ola mu!do
<& :& ? "os comentari os
"os comentarios son l5neas de te0to 4ue a/arecen en el cdigo fuente # 4ue son obviadas /or el com/ilador& Su /rinci/al
utilidad consiste en a#udar a entender el cdigo fuente ad#acente&
Dentro de un /rograma $ava *a# dos formas de escribir un comentario& "a /rimera3 4ue llamaremos comentario en blo4ue3
se *ereda de ( # utiliza una combinacin del car)cter barra inclinada *acia la derec*a seguido del car)cter asterisco /ara
abrir el comentario3 # la combinacin asterisco barra inclinada /ara cerrarlo& "a otra forma se *ereda de (OO # sim/lifica la
tarea de *acer comentarios de una sola l5nea& Para ello utiliza dos veces el car)cter de la barra inclinada a la derec*a /ara
indicar el comienzo del comentario # el retorno de carro /ara terminarlo& Puede observarse 4ue3 /or definicin3 no es
/osible anidar comentarios de ti/o (3 aun4ue s5 es /osible 4ue un comentario de ti/o ( inclu#a comentarios de l5nea&
)*
Esto es u! come!tario .ue puede ocupar
varias l>!eas.
*)
)) Esto es u! come!tario de l>!ea
Adem)s3 $ava aconsea un modo est)ndar de escritura de comentarios 4ue3 de seguirse3 /ermite al /rograma (avadoc del
$DW de Sun generar de manera autom)tica la documentacin del cdigo& .l /rograma (avadoc /roduce un arc*ivo ,T!"
/or cada fic*ero 4ue analiza 4ue /uede visualizarse con cual4uier navegador web& "os comentarios de documentacin son
comentarios de blo4ue 4ue re/iten el asterisco& "os comentarios de documentacin se deben colocar antes del blo4ue de
definicin al 4ue *acen referencia3 /or4ue $ava asocia el comentario de documentacin a la /rimera sentencia 4ue se
encuentra des/us del /ro/io comentario&
.n los comentarios de documentacin se utilizan ciertas /alabras clave /recedidas del car)cter arroba /ara eti4uetar los
elementos 4ue se describen& "a siguiente tabla recoge las diferentes /osibilidades&
?param
Par)metros de entrada /ara un mtodo
?retur!
'alor devuelto /or un mtodo
?thro;s
.0ce/ciones lanzadas /or un mtodo
?versio!
'ersin del cdigo
?author
Autor del cdigo
?deprecated
.l mtodo #a no se debe usar3 /ero se mantiene /or com/atibilidad
?see
6eferencias a otras clases
?si!ce
Jueva funcionalidad aadida en la versin 4ue mar4ue este tag
Tabl a :& F Anotaciones utilizadas en los comentarios&
.l siguiente fragmento de cdigo muestra un eem/lo de comentarios de documentacin& Adem)s3 en todos los fragmentos
de cdigo 4ue se utilicen en este libro se incluir) el avadoc corres/ondiente como /arte del eem/lo&
)** E(emplo de docume!taci! autom@tica co! (avadoc
?author -os0 A0le&
?versi! B.C
*)
)**
* Descripci! del comportamie!to del m0todo.
* ?param !ombre+ar@metro#B descripci!
* ?param !ombre+ar@metro#! descripci!
F :@F
(a/5tulo < F +ntroduccin al lenguae $ava
* ?retur! descripci!
* ?thro;s !ombre#clase descripci!
* ?si!ce C.D
* ?deprecated explicaci!
*)
<& :& @ $uego de i nstr ucci ones
.n el siguiente /)rrafo se /resentan las /alabras reservadas del lenguae $ava&
abstractE boolea!E brea$E b5teE caseE catchE charE classE co!ti!ueE de"aultE doE doubleE exte!dsE
"alseE "i!alE "i!all5E "loatE "orE i"E impleme!tsE i!sta!ceo"E i!tE i!ter"aceE lo!,E !ativeE !e;E
!ullE pac$a,eE privateE publicE retur!E shortE staticE superE s;itchE s5!chro!i&edE thisE
threadsa"eE tra!sie!tE trueE tr5E voidE volatileE ;hile.
<& <& .0/resi ones b)si cas # control de f l u o
.n $ava e0isten una serie de ti/os de datos b)sicos /redefinidos 4ue se conocen como ti /os /ri mi ti vos& Adem)s3 es
/osible declarar vari abl es de estos ti/os /rimitivos # asignarlas a datos del mismo ti/o mediante el o/erador de asignacin
# una e0/resin adecuada&
.n adelante se utilizar) un metalenguae denominado -O"D /ara describir la sinta0is de $ava& .ste metalenguae /resenta
los s5mbolos no terminales entre )ngulos7XY83 los s5mbolos terminales como cadenas libres3 los corc*etes /ara indicar
elementos o/cionales # elementos de las e0/resiones regulares 7como el asterisco /ara indicar re/eticiones8& .l uso de estas
e0/resiones no tienen el )nimo de ser com/letas res/ecto a la sinta0is de $ava3 sino de a/ortar /recisin al uso m)s *abitual
de dic*a sinta0is&
Por eem/lo3 la declaracin e inicializacin de una variable tiene el siguiente formato&
Fdeclaraci!< 99G 2"i!al3 Ftipo< Fide!ti"icador< 2EFide!ti"icador<37
Fi!iciali&aci!< 99G Fide!ti"icador< G Fexpresi! de i!iciali&aci!<7
Obsrvese 4ue es /osible indicar 4ue el valor de la variable ser) i nmutabl e 7no cambiar) tras su /rimera inicializacin8
mediante el modificador "i!al& Adem)s3 las o/eraciones de declaracin e inicializacin se /ueden realizar en un solo /aso&
Fdeclaraci! e i!iciali&aci!< 99G 2"i!al3 Ftipo< Fide!ti"icador< 2G Fexpresi! de i!iciali&aci! <37
"os identificadores en $ava /ueden corres/onder a cual4uier cadena de caracteres Unicode siem/re 4ue no comiencen /or
un nHmero o un s5mbolo utilizado /or $ava /ara los o/eradores3 ni coincida con una /alabra reservada de $ava& As53 se /uede
definir:
int mai!Co!tE auxCo!t7 ))Declaraci! de dos e!teros
mai!Co!t G H7 ))I!iciali&aci! de u! e!tero
int i G J7 ))Declara e i!icia u! e!tero
final double G K.BLBJM7 ))Declara e i!icia u!a co!sta!te real
Para meorar la comunicacin es meor utilizar identificadores significativos #3 a ser /osible3 en ingls
9
& 6es/ecto al uso de
ma#Hsculas3 en $ava suele seguirse el convenio del camel l o al nombrar las clases e interfaces& .ste convenio consiste en
comenzar cada /alabra 4ue forme /arte del identificador en ma#Hsculas # utilizar minHsculas /ara el resto de los caracteres3
dando a los identificadores una silueta con orobas& "as /ro/iedades3 mtodos # variables utilizan el criterio del camello
e0ce/to /ara la /rimera letra del identificador& "as constantes se escriben en ma#Hsculas3 se/arando las /alabras con la barra
*orizontal baa& %inalmente3 los /a4uetes se suelen escribir en minHsculas&
Por Hltimo se debe destacar 4ue la declaracin de las variables se /uede realizar en cual4uier /unto del cdigo& .sto debe
a/rovec*arse /ara declarar las variables en el /unto en 4ue se utilizan # no antes3 meorando con ello la claridad del cdigo&
<& <& : Ti /os /ri mi t ivos
"os ti /os /ri mi ti vos en $ava se /ueden agru/ar en cuatro categor5as: nHmeros enteros3 nHmeros reales3 caracteres #
booleanos& (ada uno tiene un valor /or defecto 4ue slo se a/lica cuando la variable corres/onde a una /ro/iedad de una
clase&
9
Usar ingls al /rogramar facilita la comunicacin entre /rogramadores de distintas nacionalidades& Por eem/lo3 /ara un castellano
*ablante3 leer cdigo en c*ino /uede ser tan dificultoso3 como /ara 4ue un *abitante de PeE5n lea cdigo en castellano& Por otro lado3
ciertas e0tensiones de $ava obligan a utilizar /art5culas como ,et o put las cuales unto a /alabras en castellano /resentan un as/ecto3
cuanto menos3 singular 7/or eem/lo ,etAalor8& Jo obstante3 este libro3 destinado a castellano *ablantes3 el cdigo estar) en castellano&
F :; F
Disear # Programar todo es em/ezar
.nteros
.0isten diferentes ti/os /ara re/resentar nHmeros enteros& (ada uno /ermite un rango diferente de re/resentacin # como
consecuencia tambin tiene un coste de memoria diferente&
Ti/o A#tes Descri/cin
'alor /or
defecto
Sinta0is .em/lo de uso
b5te : .nteros desde N:<; a :<@ C FZC3:[\CFD]
O
b5te b G BCC7
short <
.nteros desde N:?=;> *asta
:?=;=
C FZC3:[\CFD]
O
short s G =NCCC7
i!t > .nteros desde F<
=:
*asta <
=:
F: C FZC3:[\CFD]
O
i!t i G BLCCCCC7
lo!, ; .nteros desde F<
?=
*asta <
?=
F: C FZC3:[\CFD]
O
lo!, l G =JK7
6eal es
,a# dos ti/os /ara re/resentar reales& De nuevo cada uno tiene una /recisin3 un rango de re/resentacin # una ocu/acin
de memoria diferentes&
Ti/o
A#te
s
Descri/cin
'alor /or
defecto
Sinta0is .em/lo de uso
"loat ; 6eales OC.C" FZC3:[\CFD]
U
^&\CFD]
O
f
"loat e G H.PB"7
"loat x G =B.HB"7
double :? 6eales largos C.C FZC3:[\CFD]
U
^&\CFD]
O
double p G OK.BL7
"gi cos
"as e0/resiones lgicas est)n so/ortadas /or el ti/o bivaluado boolea!&
Ti/o A#tes Descri/cin
'alor /or
defecto
Sinta0is .em/lo de uso
boolea! indefinido cierto o falso "alse true_false boolea! c G true7
(aract eres
.l ti/o /rimitivo /ara los caracteres es el ti/o char&
Ti/o A#tes Descri/cin 'alor /or defecto Sinta0is .em/lo de uso
char +
(aracteres
Unicode
Q:uCCCCCCR `\^u\CFD]
O
_&]`
char c G STS7
char D G S:uBKS7
Por *erencia de ( la barra inclinada *acia la iz4uierda se utiliza como car)cter de control& Por se/arado no tiene sentido3 sino
4ue siem/re se combina con el siguiente car)cter& Algunos de sus /rinci/ales usos son:
Si va seguida de una u # un nHmero su significado es el car)cter re/resentado /or el valor Unicode de ese nHmero&
Si va seguida de otra barra igual o de comillas dobles e4uivale al car)cter barra o el de comillas res/ectivamente&
Si va seguida de una ! significa retorno de carro&
Si va seguida de una t significa tabulado&
<& <& < (onversi ones entre ti /os /ri mi tivos
.s /osible realizar conversiones directas entre los diferentes ti/os b)sicos numricos siem/re 4ue se realice de menor
/recisin a ma#or /recisin& .s decir si se sigue el siguiente fluo:
b5te < short < i!t < lo!, < "loat < double
Para cual4uier conversin en otra direccin se debe utilizar la o/eracin de casting& (onsiste en /oner el ti/o al 4ue se desea
convertir /or delante # entre /arntesis& "as conversiones /or casting deben *acerse de manera e0/l5cita /ara evitar
F :DF
(a/5tulo < F +ntroduccin al lenguae $ava
e4u5vocos3 /ues /ueden /rovocar /rdida de /recisin 7o de todo el valor8& .l siguiente eem/lo muestra la conversin de un
valor de ti/o flotante a un valor de ti/o b#te usando un casting&
float temperatura G HJ.H"7
byte temperaturaTru!cada G 1byte4 temperatura7 ))valdr@ HJ
<& <& = O/eradores
"os o/eradores de $ava se /ueden agru/ar en: relacionales3 aritmticos3 lgicos # de bit&
6el aci onal es
O/erador Descri/cin .em/lo
GG +gualdad a GG b
< !a#or a < b
F !enor a F b
<G !a#or o igual a <G b
FG !enor o igual a FG b
UG Distinto a UG b
Ari tmti cos 7 sobre enteros # real es8
O/erador Detalle Unitario Ainario .em/lo
O Suma o declaracin de /ositivo , , a O bE Oa
= 6esta o declaracin de negativo , , a V bE =a
* Producto , a * b
) Divisin , a ) b
W 6esto de la divisin de dos nHmeros enteros , a W b
OO Post o /reFincremento en una unidad de una variable , aOOE OOa
== Post o /reFdecremento en una unidad de una variable , a==E ==a
OG +ncremento en varias unidades de una variable , a OG b
=G Decremento en varias unidades de una variable , a =G J
*G !ulti/licacin /or un nHmero de una variable , a *GK
)G Divisin /or un nHmero de una variable , a )G b
WG !odularizacin /or un nHmero de una variable , A WGL
F <C F
Disear # Programar todo es em/ezar
"gi cos
O/erador Descri/cin Unitario Ainario .em/lo
X (onuncin 7and8 , aXb
Y Dis#uncin 7or8 , aYb
XX (onuncin im/aciente 7and8 , aXXb
YY Dis#uncin im/aciente 7or8 , aYYb
Z Dis#uncin e0clusiva 70or8 , aZb
U Jegacin 7not8 , [a
XG Asignacin con conuncin , aXGb
YG Asignacin con dis#uncin , aYGb
Ai t 7sobre ti /os enteros8
O/erador Descri/cin Unitario Ainario .em/lo
X (onuncin 7and8 , aXb
Y Dis#uncin 7or8 , aYb
Z Dis#uncin e0clusiva 70or8 , aZb
FF
Des/lazamiento binario a la iz4uierda
rellenando con ceros
, aFFK
<<
Des/lazamiento binario a la derec*a
rellenando con el bit m)s significativo
, a<<K
<<<
Des/lazamiento binario a la derec*a
rellenando con ceros
, a<<<K
\ Jegacin binaria , \a
<& <& > (ontrol del f l u o
$ava dis/one de la ma#or5a de sentencias de control de fluo *abituales en otros lenguaes de /rogramacin como: i"3
;hile3 "or&&& .n los siguientes /untos se analizan estas sentencias # los )mbitos sobre los 4ue se a/lican&
Defi ni ci n de )mbi tos # sentenci as
Un )mbito se inicia con el car)cter de llave abierta *acia la derec*a # se termina con el car)cter de llave abierta *acia al
iz4uierda& $ava utiliza los )mbitos /ara definir las sentencias afectadas /or una declaracin o /or una instruccin de control
de fluo& "os )mbitos se /ueden anidar # dentro de un )mbito siem/re /uede definirse otro& .sto3 unido a 4ue las
declaraciones de las variables son locales al )mbito en 4ue se declaran3 *ace 4ue el )mbito tambin se utilice /ara agru/ar
lgicamente sentencias&
"as sentencias del lenguae son las res/onsables de declarar mtodos3 /ro/iedades # variables3 crear obetos3 invocar
funciones de los obetos3 controlar el fluo de eecucin3 etc& Todas las sentencias terminan en /unto # coma salvo las 4ue se
a/lican sobre la sentencia o )mbito inmediato& Por ello3 las sentencias /ueden escribirse unas tras otras en la misma l5nea3
aun4ue normalmente suele dis/onerse una sola sentencia /or l5nea /ara meorar la legibilidad&
.l siguiente eem/lo ilustra los conce/tos 4ue se acaban de e0/oner&
F <:F
(a/5tulo < F +ntroduccin al lenguae $ava
/
int a7 ))A.u> a !o tie!e valor de"i!ido
a G HJ7 int c G BJ7 ))A.u> SaS vale HJ 5 ScS vale BJ
/
int b G H7 ))A.u> SaS vale HJ 5 SbS vale H
))-ava !o permite declarar dos ide!ti"icadores i,uales e! u! @mbito
))por lo .ue e! este pu!to !o ser>a posible escribir i!t c G BH7
8
))A.u> SaS vale HJE ScS vale BJ 5 SbS !o est@ declarada
8
+nst r ucci ones if else
"a sentencia i" lleva asociada una e0/resin booleana entre /arntesis& De cum/lirse la e0/resin se eecuta la sentencia o el
)mbito siguiente al i". .n otro caso se eecuta3 si e0iste3 la rama else.
Fi!strucci! i"=else< 99G i" 1Fexpressio! boolea!a<4 F@mbito< Y Fse!te!cia<
2else F@mbito< Y Fse!te!cia<3
.l siguiente eem/lo ilustra el uso de i" encadenado a otro i"&
if 1importe<BCC4 /
descue!to G C.H7
8
else if 1importeFNC4 /
descue!to G C.B7
8
else /
descue!to G C.BJ7
8
+nst r ucci ones for
"a /alabra reservada "or /ermite re/etir una sentencia o un )mbito cual4uier nHmero de veces& Su estructura es la siguiente&
Fi!strucci! "or< 99G
"or 1Fexpresi! i!iciali&aci!<7Fexpresi! boolea!a<7Fexpresi! i!creme!to<4
F@mbito< Y Fse!te!cia<
.sta instruccin en /rimer lugar eecuta la e0/resin de inicializacin& "uego evalHa la e0/resin booleana # en caso de
resultar verdadera *ace una eecucin del )mbito& Al terminar eecuta la e0/resin de incremento& .l /roceso de evaluacin
de la e0/resin3 eecucin del )mbito # /osterior incremento3 se re/ite *asta 4ue la e0/resin booleana dea de resultar cierta&
"os bucles "or suelen utilizarse cuando el nHmero de iteraciones es concreto # no var5a& .l siguiente eem/lo ilustra su uso:
for 1int co!t G C7 co!t F BCC7 co!tOO4 /
suma OG co!t7
8
+nst r ucci ones while
"a /alabra reservada ;hile tambin /ermite re/etir un )mbito cual4uier nHmero de veces& Suele utilizarse cuando el
nHmero de iteraciones no es concreto # de/ende de varias condiciones& Su estructura es la siguiente&
Fi!strucci! ;hile< 99G ;hile 1Fexpresi! boolea!a<4 F@mbito< Y Fse!te!cia<
Su funcionamiento consiste en evaluar la condicin # en caso de cum/lirse *acer una eecucin del )mbito& .ste /roceso se
re/ite *asta 4ue la condicin dea de cum/lirse& Un eem/lo de su uso ser5a:
while 11co!t < BCC4 XX 1Utermi!ar44 /
termi!ar G 1co!t < mi!imoAariable47 ))termi!ar toma valor boolea!o
co!t=GH7 ))se resta H a co!t cada iteraci!
8
F << F
Disear # Programar todo es em/ezar
+nst r ucci ones do while
Do=]hile es similar a ;hile /ero obliga a una /rimera iteracin antes de evaluar la condicin&
Fi!strucci! do< 99G do F@mbito< Y Fse!te!cia< ;hile 1Fexpresi! boolea!a<47
Un eem/lo de su uso ser5a:
do /
calculo *G HJ7 ))calculo se multiplica por HJ e! cada iteraci!
co!t<<B7 ))co!t se divide por dos cada iteraci!
8 while 11co!t < C4 XX 1calculo FBCCC447
+nst r ucci ones break y continue
"a instruccin brea$ /ermite interrum/ir en cual4uier /unto la eecucin normal de un bucle "or o ;hile # salir
instant)neamente del mismo&
"a instruccin co!ti!ue /ermite interrum/ir la eecucin normal de un bucle "or o ;hile # volver a la sentencia de
evaluacin /ara decidir si continuar o salir&
Tanto brea$ como co!ti!ue /ueden utilizarse en combinacin con eti4uetas /ara salir de varios bucles simult)neamente
*asta alcanzar el bucle eti4uetado& "as eti4uetas se definen mediante un identificador seguido del car)cter de dos /untos&
.stas instrucciones no se corres/onden con ninguna de las im/rescindibles /ara la /rogramacin estructurada& Sin embargo3
muc*os /rogramadores 7entre ellos los diseadores de lenguaes8 consideran 4ue la /osibilidad de salir de un blo4ue de
cdigo en cual4uier /unto3 facilita la tarea de /rogramar # no trae ningHn inconveniente #a 4ue es f)cilmente re/roducible
con una estructura condicional adecuada&
+nst r ucci ones switch-case-break-default
Permite evaluar una sola vez una e0/resin aritmtica # en base a su resultado eecutar las sentencias de un )mbito concreto&
Su estructura es la siguiente:
Fi!strucci! s;itch< 99G s;itch 1Fexpresi! e!tera<4 S/S
2case Fvalor#e!tero< S9S S/S Fse!te!cias< 2brea$S7S3 S8S 3*
2de"ault S9S S/S Fse!te!cias< S8S 3 S8S

<& =& "as cl ases
"as clases son el mecanismo b)sico 4ue /ro/orciona $ava /ara manear el conce/to de abstraccin # de ti/ado 7ver ca/5tulo
:8& $ava /ermite construir clases 4ue definan la interfaz # la im/lementacin de los obetos 4ue /osteriormente se /odr)n
crear& As53 cada clase define una interfaz # un ti/o 7o varios ti/os en el caso de las clases /arametrizadas8&
"as clases en $ava est)n constituidas /or:
+denti fi caci n& F "a /rimera l5nea de una clase identifica el nombre de la clase3 las clases de las 4ue *ereda3 las
interfaces 4ue im/lementa3 las e0ce/ciones 4ue /uede lanzar # los /ar)metros utilizados /ara referir ti/os&
!i embros& F Se /ueden clasificar en datos miembros # funciones miembros3 tambin conocidos como
/ro/iedades # mtodos3 de los 4ue #a *ablamos en el /unto :&<&:& (abe decir 4ue en $ava tanto las /ro/iedades
como los mtodos /ueden corres/onder a instancias de la clase 7obetos8 o a la /ro/ia clase 7con valores #
com/ortamientos comunes /ara todos los obetos de la clase8&
(l ases i nt er nas& F (lases 4ue se definen dentro de otras clases& Jormalmente se utilizan /ara crear clases
fuertemente ligadas con la clase *us/ed& .stas clases internas /ueden incluso ser annimas3 derivando de otra
4ue le /ro/orciona una interfaz con el resto del cdigo&
Al o4ues de i ni ci al i zaci n& F (onuntos de instrucciones encargadas de iniciar las /ro/iedades de la clase& $ava
se encarga de 4ue estos blo4ues se eecuten convenientemente antes de crear los obetos de la clase&
.l siguiente es4uema muestra cmo se define una clase en $ava& Se a/recia 4ue adem)s de nombrar la clase con un
identificador3 se es/ecifican las e0ce/ciones 4ue /uede lanzar la clase 7de lo 4ue *ablaremos en el ca/5tulo >8 # los
/ar)metros utilizados /ara referenciar ti/os genricos 7de lo 4ue *ablaremos en el ca/5tulo 98& Adem)s3 al definir una clase
tambin se /uede aadir informacin sobre la *erencia& Aun4ue se /rofundizar) en este as/ecto en el ca/5tulo =3 se /uede
adelantar 4ue /ara *eredar de otra clase se utiliza la /alabra reservada exte!ds seguida del nombre de la clase&
F <=F
(a/5tulo < F +ntroduccin al lenguae $ava
Fclase< 99G 2Modi"icador de clase3 class Fide!ti"icador<
2par@metros3 2here!cia3 2excepcio!es3
S/S
2Fm0todo<YFpropiedad<YFi!iciali&acio!<YFclase<3*
S8S
De nuevo3 el identificador /uede estar formado /or cual4uier cadena de caracteres Unicode siem/re 4ue no comience /or
un nHmero o un s5mbolo utilizado /or $ava /ara los o/eradores3 ni coincida con una /alabra reservada del lenguae&
"a definicin de una clase en $ava siem/re se realiza dentro de un /a4uete& Para es/ecificar el /a4uete al 4ue /ertenecen las
clases definidas en un fic*ero se usa la /alabra pac$a,e seguida del nombre del /a4uete& Si no se es/ecifica ningHn nombre
de /a4uete el fic*ero se inclu#e en un 1/a4uete /or defecto2 corres/ondiente al directorio inicial de eecucin&
"as /ro/iedades se declaran en el interior de una clase mediante la definicin de variables& Por otro lado3 los mtodos se
declaran mediante un identificador seguido de unos /arntesis3 4ue /ueden contener los /ar)metros /asados al mtodo& .n
general3 tras los /ar)metros suele e0istir un )mbito 4ue contiene la im/lementacin del mtodo3 en dic*o )mbito se o/era
con los /ar)metros3 con las /ro/iedades # con los otros mtodos de la clase utilizando sim/lemente sus identificadores& .l
identificador del mtodo debe estar /recedido /or el ti/o del valor 4ue devuelve o void si no devuelve nada3 mientras 4ue
en el interior del mtodo se usar) la /alabra reservada retur! /ara indicar el valor devuelto&
"os siguientes eem/los definen la clase Automvil # la clase Coche& Ambos tienen definidas algunas /ro/iedades #
mtodos& Obsrvese 4ue la clase Coche *ereda de Automvil3 # /or lo tanto3 aun4ue no los declara e0/l5citamente3 tiene
los miembros definidos en Automvil m)s los 4ue ella misma define&
)**
* E(emplo de impleme!taci! de u!a clase
* ?versio! B.C
*)
class Automvil /
int velocidad7 ))Declaraci! de u!a propiedad para la velocidad del coche
)) E(emplo de declaraci! e impleme!taci! de u! m0todo
)** M0todo .ue permite co!ocer la velocidad actual
* ?retur! E!tero co! la velocidad
*)
int velocidad14 /
))Impleme!taci! del m0todo
return velocidad7
8
8
)**
* Declaraci! de u!a clase .ue hereda de la clase Automovil
* ?versio! B.C
*)
class Coche extends Automvil /
boolean e!Marcha7 ))I!dica si el coche est@ e! marcha
int !umRuedas G L7 ))Cue!ta las ruedas del coche
)** M0todo .ue permite aume!tar la velocidad
* ?param i!creme!to Aalor e!tero .ue se sumar@ a la velocidad
*)
void acelerar1int i!creme!to4 /
velocidad OG i!creme!to7
e!Marcha G true7
8
)**
* +ermite reducir la velocidad
*)
void "re!ar14 /
if 1e!Marcha4
velocidad ==7
if 1velocidad GG C4
e!Marcha G false7
8
8
.n la %igura :@ se muestra un Diagrama .st)tico de (lases 4ue re/resenta las clases Automvil # Coche # la relacin 4ue
e0iste entre ellas&
Una vez 4ue se tiene una clase se /odr)n crear obetos de esa clase # definir variables 4ue referencien a tales obetos& "a
forma de declarar esas variables es similar a la #a descrita /ara los ti/os /rimitivos&
Fdeclaraci! ob(eto< 99G 2"i!al3 Ftipo< Fide!ti"icador<
2G !e; F!ombre#clase<12parametros3437
F <> F
Disear # Programar todo es em/ezar
%i gura :@& F 6e/resentacin U!" del eem/lo del Automvil # el Coche&
Por eem/lo3 /ara declarar una variable miCoche 4ue referencie a obetos de la clase Coche deberemos escribir:
Coche miCoche7
T /ara crear un obeto:
miCoche G new Coche147
Tambin es /osible declarar la referencia # crear el obeto en una Hnica instruccin& Por eem/lo:
Coche miCoche G new Coche147
Una vez creado un obeto3 /odemos acceder a sus mtodos # /ro/iedades utilizando la variable 4ue lo referencia # el
identificador del miembro al 4ue se desea acceder se/arado /or un /unto& Por eem/lo:
miCoche.velocidad G BJ7
miCoche.acelerar1BC47
<& =& : "as /ro/i edades en detal l e
"as /ro/iedades3 o cam/os3 sirven /ara dotar de estado al obeto o a la /ro/ia clase& "as /ro/iedades son variables 4ue se
definen dentro de una clase # 4ue /ueden tomar valores diferentes en cada obeto& .stas variables corres/onden a ti/os
/rimitivos o a referencias a obetos& Una referencia a un obeto es una variable cu#o contenido a/unta a un obeto de una
clase o a un identificador de referencia vac5a 7!ull8&
Ti/o A#tes Descri/cin 'alor /or defecto .em/lo de uso
referencia a
obeto
>
6eferencia a un obeto
4ue cum/le un ti/o
!ull Coche c G b7
Al definir el identificador de estas variables se debe seguir las mismas reglas 4ue /ara las variables de ti/os /rimitivos& .s
decir3 el identificador /uede estar formado /or cual4uier cadena de caracteres Unicode siem/re 4ue no comience /or un
nHmero o un s5mbolo utilizado /or $ava /ara los o/eradores3 ni coincida con una /alabra reservada del lenguae& Adem)s3 el
identificador de la /ro/iedad no /uede coincidir con el nombre de la clase3 ni en una clase /uede *aber dos /ro/iedades con
el mismo identificador&
"a definicin de una /ro/iedad en una clase sigue la gram)tica adunta& .n caso de omitirse la inicializacin la /ro/iedad
toma el valor /or defecto&
Fpropiedad< 99G 2mod co!trol acceso3 2mod uso3 Ftipo< Fide!ti"ica< 2G i!iciali&acio!37
"os modificadores de control de acceso m)s *abituales son public # private3 indicando si /uede o no /uede accederse a
la /ro/iedad desde fuera de la clase& 6es/ecto a los modificadores de uso lo m)s *abitual es no /oner nada o /oner "i!al
/ara indicar 4ue su valor no cambia&
(omo #a se *a dic*o3 se /ueden distinguir dos ti/os de /ro/iedades: /ro/iedades de los obetos # /ro/iedades de la clase
7tambin llamadas est)ticas8& "as /rimeras se /ueden consultar en los obetos 4ue se creen de esa clase # las segundas sobre
la /ro/ia clase& (uando la /ro/iedad es est)tica se debe usar el modificador de uso static&
F <9F
(a/5tulo < F +ntroduccin al lenguae $ava
Acceso a l as /ro/i edades de ob eto
Para acceder a las /ro/iedades de obeto se utiliza el identificador del obeto seguido del identificador de la /ro/iedad
se/arados /or un /unto&
As53 /ara asignar el valor > a la /ro/iedad !umRuedas del obeto miCoche se /odr5a *acer:
miCoche.!umRuedas G L7
De nuevo3 si se desea acceder a una /ro/iedad de un obeto desde dentro de un mtodo no est)tico de la /ro/ia clase no es
necesario *acer referencia al /ro/io obeto3 sino 4ue se /uede invocar al nombre de la /ro/iedad directamente& Por eem/lo:
)**
* Declaraci! de la clase coche
* ?versio! H.C
*)
class Coche /
public int !umRuedas7
)**
* ATade ruedas a u! coche
* ?deprecated %e ha decidido !o ma!te!er este m0todo
*)
public void aTadirRuedas14 /
!umRuedasOO7
8
8
Acceso a l as /ro/i edades de cl ase 7/ro/i edades est)ti cas8
"as variables est)ticas son a4uellas cu#a e0istencia es inde/endiente de 4ue *a#a obetos de la clase a la 4ue /ertenecen& Para
acceder3 desde fuera de la clase3 a las /ro/iedades est)ticas de una clase se utiliza el nombre de tal clase seguido de un /unto
# del nombre de la /ro/iedad& Por eem/lo3 sumar : a la /ro/iedad !umero^!idadesAe!didas de la clase Coche3 4ue es
comHn /ara todos los obetos de la clase3 se /odr5a *acer as5:
Coche.!um^!idadesAe!didasOO7
(omo siem/re3 si se accede a una /ro/iedad est)tica de una clase desde dentro del )mbito de la /ro/ia clase no es necesario
*acer referencia a la clase&
)**
* Declaraci! de la clase coche
* ?versio! K.C
*)
class Coche /
public static int !um^!idadesAe!didas G C7
)**
* Aume!ta el !_mero de u!idades ve!didas
*)
public void ve!der^!idad14 /
!um^!idadesAe!didasOO7
8
))Blo.ue de i!iciali&aci! est@tico
static /
!um^!idades G HJ7
8
8
"a referenci a this
"a /ro/iedad this es una referencia no modificable al /ro/io obeto en el 4ue se invoca #3 /or lo tanto3 se /uede utilizar en
todos los mtodos no est)ticos de un obeto& Permite /asar referencias del /ro/io obeto en el 4ue se invoca a otros obetos&
Tambin sirve /ara referirse a /ro/iedades de la /ro/ia clase3 resolviendo la ambigQedad 4ue a/arece cuando un mtodo
tiene /ar)metros o variables con nombres iguales a las /ro/iedades de la clase& Por eem/lo:
)**
* Declaraci! de la clase coche
* ?versio! L.C
*)
class Coche /
int velocidad7 ))declaraci! de u!a propiedad
F <? F
Disear # Programar todo es em/ezar
)**
* Acelera el coche
* ?param velocidad Aume!to e! la velocidad
*)
public void acelerar1int velocidad4 / ))+ar@metro de i,ual !ombre a propiedad
this.velocidad OG velocidad7 ))%e suma el par@metro sobre la propiedad
8
8
<& =& < "os mtodos en detal l e
"os mtodos 7tambin llamados mensaes8 son funciones definidas dentro la clase # 4ue se invocan sobre los obetos creados
de esa clase o sobre la clase misma&
(ada mtodo consta de un identificador 4ue nuevamente /uede estar formado /or cual4uier cadena de caracteres Unicode3
siem/re 4ue no comiencen /or un nHmero o un s5mbolo utilizado /ara los o/eradores3 ni coincida con una /alabra
reservada& .l siguiente cuadro muestra la gram)tica de definicin de un mtodo&
Fm0todo< 99G 2Modi"icador de co!trol de acceso3 2Modi"cador de uso3 Ftipo<
FIde!ti"icador<12par@metros34 2excepcio!es3 2/2se!te!cia3*83
Fpar@metros< 99G Ftipo< Fide!ti"icador<2EFtipo< Fide!ti"icador<3*
Fexcepcio!es< 99G thro;s Ftipo< 2EFtipo<3*
Obsrvese 4ue o/cionalmente los mtodos /ueden declarar el lanzamiento de e0ce/ciones mediante la /alabra reservada
thro;s seguida del ti/o de e0ce/cin lanzada& Dic*o ti/o debe ser Exceptio! o un derivado& A su vez3 /ara lanzar una
e0ce/cin en el cuer/o del mtodo se utiliza la /alabra reservada thro; seguida del obeto lanzado& .n el ca/5tulo siguiente
se tratar) con m)s detalle del maneo de e0ce/ciones&
Tambin en los mtodos3 los modificadores de control de acceso m)s *abituales son public # private3 /ara indicar si
/uede o no /uede invocarse un mtodo desde fuera de la clase& 6es/ecto a los modificadores de uso3 lo m)s *abitual es
utilizar "i!al /ara indicar 4ue su im/lementacin no /uede cambiarse mediante *erencia o abstract /ara indicar 4ue el
mtodo no tiene im/lementacin # solo define una interfaz& Por otro lado3 cuando el mtodo es est)tico se debe usar el
modificador de uso static& .ste ti/o de mtodos no tiene acceso a las /ro/iedades no est)ticas&
Acceso a l os mtodos de un ob eto
Para acceder a un mtodo de un obeto se utiliza el identificador del obeto seguido del identificador del mtodo& Ambos
nombres se dis/onen se/arados /or el car)cter /unto # van seguidos de unos /arntesis 4ue /ueden contener los /ar)metros
4ue se le /asan al mtodo& Por eem/lo:
miCoche.acelerar1BC47
Si se desea acceder a un mtodo de una clase desde otro mtodo no est)tico de la /ro/ia clase se /uede invocar al nombre
del mtodo directamente sin ante/oner ningHn nombre&
Acceso a l os mtodos de una cl ase 7mtodos est )ti cos8
Para acceder a los mtodos est)ticos de una clase se utiliza el nombre de la clase seguido del nombre del mtodo se/arados
/or el car)cter /unto3 siendo innecesario referir la clase si se invoca en el )mbito de la /ro/ia clase&
Devol uci n de val ores
"os mtodos en $ava /ueden devolver valores de ti/os /rimitivos o referencias a obetos& Para ello se utiliza una sentencia
4ue consiste en la /alabra reservada retur! seguida o/cionalmente de una e0/resin& .sta e0/resin tras evaluarse
corres/onder) a una referencia a un obeto o a un ti/o /rimitivo&
"os mtodos 4ue declaran el ti/o del valor devuelto con la /alabra reservada void no devuelven nada& .n estos mtodos3 el
uso de retur! 7sin e0/resiones a su derec*a8 no es obligatorio3 /ero /uede utilizarse /ara terminar la eecucin del mtodo
en cual4uier /unto&
Fsalida< 99G retur! 2Fexpresi!<37
F <@F
(a/5tulo < F +ntroduccin al lenguae $ava
Paso de /ar)metros
.l /aso de /ar)metros a un mtodo en $ava siem/re es /or valor& Tanto los ti/os /rimitivos como las referencias a los
obetos se /asan /or valor& As53 un cambio de uno de estos /ar)metros dentro de un mtodo no afecta a su valor en el
e0terior&
Sin embargo3 en el caso de referencias a obetos debe tenerse en cuenta 4ue el obeto al 4ue referencian estos /ar)metros s5
es el original& Por lo tanto cual4uier cambio en el estado del obeto tiene refleo fuera del mtodo&
"os /ar)metros 4ue se /asan a un mtodo tambin admiten el modificador "i!al /ara indicar 4ue no es /osible cambiar su
valor&
Sobrecarga de mtodos 7/ol i morfi smo est)t i co8
Se /ueden definir varios mtodos con el mismo identificador siem/re 4ue las secuencias de ti/os de sus /ar)metros sean
diferentes& .l com/ilador de $ava es ca/az de decidir a 4u mtodo se est) invocando en funcin de los /ar)metros 4ue se le
/asan& A esta /ro/iedad3 4ue /ermite usar un mismo nombre # 4ue en cada caso tenga diversas inter/retaciones3 se le
denomina /ol i morfi smo est)ti co o sobrecarga3 # se resuelve de manera est)tica en la com/ilacin&
"a sobrecarga suele utilizarse /ara dotar de *omogeneidad a los interfaces3 al /ermitir 4ue los mtodos 4ue *agan algo
similar con diferentes /ar)metros de entrada /uedan com/artir el mismo identificador&
A diferencia de otros lenguaes como (OO3 en la definicin de un mtodo de $ava no se /ueden definir valores /or defecto
/ara sus /ar)metros& Sin embargo3 gracias a la sobrecarga3 se /uede realizar variaciones de un mtodo con diferentes
/ar)metros obteniendo la misma funcionalidad& Por eem/lo3 el siguiente fragmento de cdigo define la funcin "re!ar
dentro de la clase Coche3 utilizando /or defecto una reduccin de : en la velocidad& Adem)s3 e0iste otro mtodo Fre!ar
4ue realiza el frenado utilizando el valor 4ue se le /asa como /ar)metro&
)**
* Declaraci! de la clase coche
* ?versio! J.C
*)
class Coche
/
private int velocidad7
)**
* Acelera el coche
*)
public void acelerar14 /
velocidadOO7
8
)**
* Fre!a el coche
*)
public void "re!ar14 /
"re!ar1B47
8
)**
* Fre!a el coche u!a cierta ca!tidad
* ?param v ca!tidad de velocidad a "re!ar
*)
public void "re!ar1int v4 /
velocidad =G v7
8
8
<& =& = (reaci n de ob etos
Se *a e0/licado 4ue /ara crear un obeto en $ava se usa la /alabra reservada !e; seguida del nombre de la clase # unos
/arntesis& .n esta o/eracin se est) invocando al const r uctor de la clase& "os constructores son mtodos es/eciales 4ue
se eecutan cuando se crea un obeto # 4ue se utilizan /ara iniciar las /ro/iedades del obeto& De *ec*o3 las /ro/iedades
finales solo se /ueden modificar en los constructores # en los blo4ues de inicializacin de los 4ue *ablaremos m)s adelante&
"os constructores3 como todos los mtodos3 /ueden tener /ar)metros3 aun4ue no /ueden declarar ningHn ti/o de retorno3 #
se distinguen /or4ue tienen el mismo nombre 4ue la clase a la 4ue /ertenecen& Jormalmente3 una clase /uede tener varios
constructores3 aun4ue no /uede tener dos constructores 4ue reciban los mismos /ar)metros 7es decir3 con el mismo nHmero
de /ar)metros3 de los mismos ti/os # en el mismo orden8&
Si en el cdigo fuente de una clase no se define ningHn constructor3 $ava3 al com/ilar3 aade un const r uctor /or defecto
4ue no tiene /ar)metros& .ste constructor no im/lementa ningHn cdigo # su definicin no a/arece de manera e0/l5cita en
el cdigo& Sin embargo *emos visto 4ue se utiliza e0/l5citamente cuando se crean obetos& (uando en el cdigo de una clase
se define uno o m)s constructores3 $ava no aade el constructor /or defecto& Si se desea mantener un constructor sin
/ar)metros se debe definir e0/l5citamente en el cdigo de la clase&
F <; F
Disear # Programar todo es em/ezar
A continuacin se muestra un eem/lo de un constructor /ara la clase (oc*e:
)**
* Declaraci! de la clase coche
* ?versio! J.B
*)
class Coche
/
private parado G true7
private final int matricula7
private int velocidad7
)** Co!stru5e coches asi,!a!do valores a al,u!as de sus propiedades *)
public Coche1int vE boolean e!Movimie!toE int !umMatricula4 /
velocidad G v7
parado G Ue!Movimie!to7
matricula G !umMatricula7 ))^!a propiedad "i!al se i!icia e! u! co!structor
8
)) %i se desea usar el co!structor si! par@metros es !ecesario de"i!irlo expl>citame!te
)** Co!stru5e coches asi,!a!do valor aleatorio a la matr>cula
*)
public Coche14 /
matricula G ra!d147 )) El atributo velocidad se i!iciali&a co! u! valor por de"ecto aleatorio
8
8
<& =& > Destr ucci n de ob etos
"a destruccin de obetos se realiza de manera autom)tica mediante un mecanismo conocido como la recoleccin de basura&
Para ello la m)4uina virtual de $ava revisa de manera /eridica los blo4ues de memoria reservados buscando a4uellos 4ue no
est)n siendo referenciados /or ninguna variable /ara liberarlos& "a tarea 4ue realiza esta o/eracin se llama recol ector de
basura 7garbage col l ector 8 # se eecuta en segundo /lano intentando a/rovec*ar los tiem/os de baa intensidad de
/roceso&
Podr5a /ensarse 4ue un sistema de liberacin de memoria e0/l5cito 7como el de (OO8 /uede ser meor 4ue uno basado en
recoleccin autom)tica& Debe tenerse en cuenta 4ue en un sistema de *ardware multi/roceso3 la recoleccin de basura
/odr5a realizarse en un *ilo a/arte 3 lo cual *ar5a 4ue no se robase tiem/o de /roceso al *ilo 4ue eecuta el /rograma
/rinci/al&
Tam/oco debe creerse 4ue la recoleccin autom)tica de basura elimina la /osibilidad de 4ue se /roduzcan /erdidas de
memoria& .s cierto 4ue la memoria nunca se /ierde3 en el sentido de no liberar memoria 4ue no es a/untada /or ningHn
obeto& Sin embargo3 la memoria /uede llenarse de obetos 4ue aun4ue #a no son Htiles3 aHn se mantienen al estar a/untados
/or otros&
%i nal i zadores
"os finalizadores son mtodos 4ue se eecutan antes de la liberacin del es/acio de memoria de un obeto& .n ellos se
/ueden realizar tareas como avisar a otros obetos relacionados de la destruccin de ste& Para aadir un finalizador a una
clase basta con aadir un mtodo 4ue se llame "i!ali&e # cu#o ti/o devuelto sea void& .n general se recomienda no
utilizar finalizadores dado 4ue no es /osible conocer el momento e0acto de su eecucin&
<& =& 9 Al o4ues de i ni ci al i zaci n
$ava /ermite definir blo4ues de inicializacin& .stos blo4ues se definen mediante )mbitos annimos en el interior de las
clases3 # se eecutan de manera /revia a cual4uier constructor siguiendo el orden en el 4ue estn /resentes& ,abitualmente se
utilizan /ara im/lementar cdigo de inicializacin comHn a todos los constructores&
Adem)s3 si un blo4ue est) eti4uetado como static se eecuta slo una vez durante la construccin de la clase& Siendo en
este caso su /rinci/al utilidad la de iniciar variables est)ticas de la clase 4ue re4uieran de algHn tratamiento com/leo&
Por eem/lo3 se /uede considerar 4ue un coc*e siem/re est) /arado cuando se crea& .n este caso se /odr5a definir un blo4ue
de inicializacin como el siguiente&
)**
* Declaraci! de la clase coche
* ?versio! J.H
*)
class Coche /
private int velocidad7
private final int !umRuedas7
private final int !um+uertas7
private boolean parado7
public i!t !um^!idadesAe!didas7
)** Co!structor .ue permite co!struir u! coche i!icia!do ciertos par@metros
* ?param v velocidad
* ?param e!Movimie!to
* ?param !+uertas +uertas del coche *)
F <DF
(a/5tulo < F +ntroduccin al lenguae $ava
public Coche1int vE boolean e!Movimie!toE int !+uertas4 /
velocidad =G v7
parado G Ue!Movimie!to7
!um+uertas G !+uertas7
8
)** Co!structor .ue permite co!struir u! coche si! pasar par@metros
*)
public Coche14 /
)) os atributos se i!iciali&a! a los valores por de"ecto
8
)) Blo.ue de i!iciali&aci! com_! a todos los co!structores
)) as propiedades "i!ales tambi0! se puede! i!iciar a.u>
/
e!Marcha G "alse7
!umRuedas G L7
8
)) Blo.ue de i!iciali&aci! est@tico .ue solo se e(ecuta u!a ve&
static /
!um^!idadesAe!didas G C7
8
8
<& =& ? "os modi fi cadores de control de acceso a l os mi embros en detal l e
.stos modificadores son *erramientas 4ue /ro/orciona $ava /ara facilitar la enca/sulacin& Se utilizan al definir cada
miembro # es/ecifican la visibilidad de ese miembro desde otras clases& "os modificadores de control de acceso son:
/ubl i c&F Si la clase A tiene un miembro declarado como public ese miembro es accesible desde cual4uier clase 4ue vea la
interfaz de A&
/ri vate&F Si la clase A tiene un miembro declarado como private ese miembro slo es accesible desde los mtodos de la
clase A&
/rotected&F Si la clase A tiene un miembro declarado como protected ese miembro es accesible desde los mtodos de la
clase A3 /or las clases 4ue *ereden de A3 # /or las clases definidas en el mismo /a4uete&
Si no se es/ecifica ningHn modificador de control de acceso el miembro declarado es de ti/o fri endl #& .stos miembros son
visibles desde cual4uier clase 4ue /ertenezca al mismo /a4uete3 siendo inaccesibles desde fuera del /a4uete&
<& =& @ "os modi fi cadores de uso de l os mi embros en detal l e
.stos modificadores se utilizan en la definicin de los miembros # /ermiten es/ecificar caracter5sticas de la im/lementacin
de un miembro&
abst ract &F .ste modificador slo es a/licable a mtodos& (uando un mtodo se declara abstract en una clase A ese
mtodo no tiene im/lementacin en A& Adem)s la clase A /asa a ser abstracta& Una clase abstracta es una clase 4ue tiene uno
o m)s mtodos abstractos& (uando una clase tiene todos sus mtodos abstractos se dice 4ue es una clase abstracta /ura& Jo
se /ueden crear obetos de clases abstractas3 #a 4ue tienen mtodos no definidos& !)s adelante se /rofundizar) en la utilidad
de las clases abstractas&
.n U!" los mtodos abstractos # las clases 4ue los contienen se distinguen /or4ue el te0to corres/ondiente est) en cursiva&
st ati c&F Un miembro definido como static no /ertenece a ninguna de las instancias 4ue se /uedan crear de una clase sino
a la clase misma& Se dice 4ue los miembros declarados con static son miembros de clase3 mientras 4ue el resto son
miembros de instancia& As53 una /ro/iedad static de la clase A es una /ro/iedad cu#o valor es com/artido /or todos los
obetos de la clase A& Por otro lado3 /ara llamar a un mtodo static de la clase A no *ace falta ningHn obeto de la clase A&
.n general no se recomienda el uso de miembros static /ues son aenos a la Programacin Orientada a Obetos&
Todo /rograma en $ava comienza su eecucin en un mtodo static denominado mai!& .ste mtodo debe encontrase en
una clase 4ue tenga el mismo nombre 4ue el fic*ero 4ue la contiene& .s necesario 4ue dic*o mtodo sea est)tico /or4ue no
se crea ningHn obeto al eecutar un /rograma # sin embargo la m)4uina virtual de $ava lo invoca&
.n U!"3 las miembros est)ticos se distinguen /or4ue el te0to corres/ondiente est) subra#ado&
fi nal &F Un miembro se declara como "i!al cuando se desea im/edir 4ue su valor /ueda ser cambiado& .n general se
recomienda usar este modificador /ara todas las /ro/iedades # mtodos de las clases 4ue se definan&
"as /ro/iedades definidas como "i!al son constantes a lo largo de la vida de un obeto& Su valor /uede definirse en tiem/o
de com/ilacin3 en tiem/o de eecucin 7en los llamados blo4ues de inicializacin83 e incluso /ueden definirse de forma
tard5a en el constructor& "as referencias a obetos declaradas como "i!al no /ueden cambiarse3 aun4ue los obetos en s5
F =C F
Disear # Programar todo es em/ezar
mismos s5 /ueden cambiar su estado& Adem)s3 /ueden utilizarse combinadas con static /ara definir constantes inmutables
/ara todos los obetos&
Por otro lado3 los mtodos definidos como "i!al no /ueden cambiar su im/lementacin en clases derivadas& "a
declaracin de un mtodo como final tiene dos obetivos: fiar el diseo # aumentar la eficiencia& "as clases finales /ermiten
ligadura est)tica de las funciones lo 4ue redunda en ma#or velocidad& Tambin /ermiten fiar razones de diseo al im/edir
cambios&
nati ve&F Permite utilizar funciones e0ternas a $ava& As53 los miembros declarados !ative se im/lementan en otro lenguae
nativo de la m)4uina en la 4ue se invoca # se asocian a $ava utilizando bibliotecas de enlace din)mico mediante la $ava Jative
+nterface 7$J+8&
transi ent &F .l valor de una /ro/iedad definida como tra!sie!t no se desea 4ue se /reserve si el obeto tiene la
ca/acidad de /ersistencia&
s#nc*roni zed&F .ste modificador es a/licable a mtodos o )mbitos& Provoca 4ue el cdigo as5 eti4uetado slo /ueda estar
siendo eecutado /or un *ilo en cada momento /ara cada obeto&
vol at i l e&F Una /ro/iedad as5 definida indica al com/ilador 4ue su uso no debe ser o/timizado& .sto se *ace /ara evitar
/roblemas cuando la variable /ueda ser utilizada desde varios t*reads de manera simult)nea&
stri ctf/&F !odificador a/licable a mtodos 4ue fuerza a $ava a utilizar una aritmtica flotante inde/endiente del /rocesador
/ara asegurar com/atibilidad multi/lataforma&
<& =& ; !odi fi cadores en l a defi ni ci n de cl ases general es
"as clases /ueden definirse de diferentes ti/os:
/ubl i c& F Se utiliza el modificador public /ara indicar 4ue la clase es visible desde otros /a4uetes diferentes al /a4uete en
el 4ue se im/lementa& Por el contrario una clase no definida con public slo es visible en el /a4uete en el 4ue se
im/lementa& Slo /uede usarse el modificador public /or fic*ero # el nombre de la clase sobre la 4ue se use debe coincidir
con el nombre del fic*ero&
abstract& F Una clase abstracta es a4uella 4ue tiene al menos un mtodo abstracto # de la 4ue3 /or tanto3 no /ueden crearse
instancias& "as clases abstractas deben utilizar el modificador abstract /ara indicar su car)cter&
fi nal & F Son a4uellas de las 4ue no se /uede *eredar /ara crear una nueva clase /or estar marcadas con el modificador
"i!al& .n general se recomienda utilizar el modificador "i!al /ara todas las clases&
<& =& D (l ases i nternas
Una clase interna es una clase 4ue se declara dentro de otra& Para ser m)s /recisos3 su declaracin se /uede realizar dentro
del )mbito de la clase o incluso dentro de un mtodo& Su /rinci/al utilidad consiste en enca/sular la definicin de la clase
/ara restringir su uso o su visibilidad&
class Coche /
...
class Rueda /
... ))a clase rueda es i!ter!a a la clase Coche
8
8
.n general las clases internas tienen varias /articularidades:
Jo se /ermite declarar miembros est)ticos en ellas&
Para crear un obeto de una clase interna es necesario 4ue se *aga desde una instancia de la clase contenedora&
Desde una clase interna es /osible acceder a las /ro/iedades de la clase contenedora como si fuesen /ro/ias&
Para declarar una referencia del ti/o de una clase interna fuera de la clase contenedora debe usarse la sinta0is
ClaseCo!te!dora.ClaseI!ter!a&
.n la definicin de clases internas es /osible aadir los modificadores public3 private o protected& Si no se aade
ningHn modificador la clase ser) visible en el /a4uete3 si se aade public ser) visible en general3 si se aade private slo
ser) visible dentro de la clase en la 4ue est) definida # si se aade protected slo ser) visible dentro de la clase en la 4ue
est) definida # en las clases 4ue de ella deriven&
Tambin es /osible declarar una clase interna con el modificador static& "as clases internas as5 definidas se diferencian del
resto de clases internas en = /articularidades:
F =:F
(a/5tulo < F +ntroduccin al lenguae $ava
.n estas clases internas se /ueden definir miembros est)ticos&
Desa/arece la /osibilidad de acceder a las /ro/iedades de la clase contenedora&
Tambin desa/arece la restriccin 4ue im/ide crear obetos de la clase interna sin un obeto de la clase
contenedora&
Por Hltimo3 no se /uede cerrar este a/artado sobre clases internas sin *ablar de las cl ases anni mas& Son clases 4ue no
tienen identificador& Se utilizan cuando se *ereda de otra clase3 no se desea aadir nada a su interfaz # solo se 4uiere crear un
Hnico obeto&
<& =& :C . em/l o del /arEi ng
A4u5 se /resenta como eem/lo la codificacin de una clase 4ue im/lementa una estructura de datos de ti/o /ila /ara
almacenar obetos de la clase Coche& "as /ilas son unas estructuras de datos cl)sicas 4ue se caracterizan /or almacenar los
elementos de manera 4ue el Hltimo en ser insertado es el /rimero en ser recu/erado&
Una forma de im/lementar las /ilas consiste en utilizar una sucesin de obetos contenedores enlazados mediante
referencias& .n este caso se *a creado la clase +la&a como contenedor de obetos Coche& (omo se /uede a/reciar en el
diagrama est)tico adunto3 la clase +ar$i!, tiene una referencia a un obeto de la clase +la&a3 el cual a su vez tiene una
referencia a un siguiente obeto +la&a3 # as5 sucesivamente& .s im/ortante notar 4ue la siguiente a la Hltima /laza tomar)
valor !ull. Obsrvese tambin3 4ue la clase +la&a se *a definido interna a la clase +ar$i!,&
%i gura :;& F Diagrama est)tico de la estructura del +ar$i!,&
)**
* De"i!imos la clase +ar$i!,. Este es u! +ar$i!, orde!adoE es decirE los
* coches !o decide! .ue pla&a ocupa!E el par$i!, les asi,!a la libre m@s prxima.
* Adem@sE tie!e pla&as i!"i!itas 1e! u!a estructura de tipo pila4
* a hacemos "i!al por.ue !o .ueremos .ue !adie pueda heredar de esta clase
* ?versio! B.C
*)
public final class +ar$i!, /
))Como la clase +la&a solo i!teresa a +ar$i!,E se de"i!e i!ter!aE privada 5 "i!al
private final class +la&a /
private final +la&a a!terior7
private final Coche coche7
private +la&a1Coche !uevoCocheE +la&a pla&aA!terior4 /
a!terior G pla&aA!terior7
coche G !uevoCoche7
8
public ,etCoche14 /
return coche7
8
8
))a pla&a actualE i!icialme!te a !ullE acepta coches e! el par$i!,.
))`o hacemos la propiedad "i!al por.ue cambia.
private +la&a pla&aActual7
)**
* I!serta u! coche al par$i!,
*)
public void ocupar+la&a1Coche coche4 /
))I!creme!tamos las pla&as ocupadas
pla&aActual G new +la&a1cocheE pla&aActual47
8
)**
* Comprueba si el par$i!, est@ vacio
*)
public boolean vacio14 /
return 1pla&aActual GG null47
8
F =< F
Disear # Programar todo es em/ezar
)**
* %aca u! coche del par$i!,
*)
public Coche desocupar+la&a14 /
))Al desocupar la _ltima pla&aE la !ueva _ltima pla&a ocupada es la a!terior
Coche coche G pla&aActual.,etCoche147
pla&aActual G pla&aActual.a!terior7
return coche7
8
8
<& =& :: Defi ni ci n de arra#s de ob etos # de ti /os /ri mi t ivos
$ava /ro/orciona una clase ar ra# como contenedor b)sico de obetos # ti/os /rimitivos& Para la creacin de obetos arra# en
$ava se *a sobrecargado el o/erador corc*etes& As53 /ara la declaracin de una referencia a un obeto arra# se utiliza el ti/o de
obetos o ti/o /rimitivo 4ue contendr) el arra# seguido de una /area de corc*etes vac5a& (omo siem/re3 si una referencia no
se inicializa su valor es !ull& Para crear un arra#3 se utiliza la /alabra reservada !e; seguida de una /area de corc*etes con
las dimensiones del arra#
?
& ,a# 4ue resaltar 4ue una vez dimensionado un arra# no es /osible redimensionarlo&
Ftipo< S23S Fide!ti"icador< G !e; Ftipo < 2Fdime!si!<37
Ftipo< S2323S Fide!ti"icador < G !e; Ftipo < 2Fdime!si!B<3 2Fdime!si!H<37
Ftipo< 2S23S3* Fide!ti"icador < G !e; Ftipo < 2Fdime!si!B<3 ...2Fdime!si!`<37
.l siguiente eem/lo muestra un arra# de enteros # un arra# de obetos de la clase Coche&
int 23 vector G new int2HJ37
Coches 23 aparcamie!to G new Coches 2KC37
$ava tambin /ermite declarar im/l5citamente la dimensin de un arra# inicializ)ndolo con los elementos 4ue contiene # sin
es/ecificar su dimensin&
Ftipo< S23S Fide!ti"icador< G /2ob(etosYvalores primitivosYcade!as de caracteres3*87
Por eem/lo una declaracin im/l5cita de la dimensin con inicializacin ser5a:
int 23 "ib G /BEBEHEKEJENEBK87
.l acceso a un elemento de un arra# se realiza utilizando la variable # entre corc*etes el 5ndice del elemento al 4ue se desea
acceder& "os 5ndices comienzan /or cero # alcanzan como m)0imo un valor igual a la dimensin del arra# menos uno&
.ste /rimer eem/lo crea un arra# de enteros # lo rellena con el valor =&
int 23 vector G new i!t2HJ37
for 1int x G C7 x F HJ7 xOO4
vector2x3 G K7
.l siguiente eem/lo crea una tabla bidimensional de obetos de la clase Coche # una referencia a la misma& "uego inicializa
cada referencia de la tabla con un obeto Coche nuevo&
Coche 2323 tablaCoches G new Coche2HJ32KC37
for 1int x G C7 x F HJ7 xOO4
for 1int 5 G C7 5 F KC7 5OO4
tablaCoches2x3253 G new Coche147
$ava tambin /ermite definir un arra# com/uesto de otros arra#s de tamaos variables& .sta /osibilidad se /otencia con el
uso de la /ro/iedad le!,th 4ue tiene la clase arra# # 4ue devuelve la dimensin del mismo& Por eem/lo3 un arra#
bidimensional como el /resentado en el es4uema de la %igura :D corres/onder5a al siguiente cdigo&
?
Por *erencia de (3 $ava tambin /ermite definir /rimero el identificador # luego los corc*etes3 aun4ue es /referible la /rimera o/cin al
4uedar m)s claro cual es el ti/o de la variable&
F ==F
(a/5tulo < F +ntroduccin al lenguae $ava
int 2323 vectores G new int2H3237
vectores2C3 G new int2J37
vectores2B3 G new int2N37
for 1int x G C7 x F tabla.le!,th7 xOO4
for 1int 5 G C7 5 F tabla2x3.le!,th7 5OO4
vectores2x3253 G =B7
Por Hltimo se debe sealar 4ue /ara los arra#s com/uestos de caracteres se /ermite una sinta0is es/ecial&
char 23 cade!a G 6Esto es u! arra5:!de chars67))Arra5 de chars co! retor!o de carro
!ectores -*.
!ectores -1.
!ectores -+.-.
-1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1
%i gura :D& F 6e/resentacin es4uem)tica de un arra# bidimensional de enteros&
<& >& "os /a4uetes
$ava estructura las bibliotecas de software mediante /a4uetes& "os /a4uetes son agru/aciones lgicas de cdigo # constitu#en
el mecanismo 4ue /ro/orciona $ava como so/orte a la modularidad 7ver ca/5tulo :8&
"os /a4uetes se organizan entre ellos en forma de )rbol # esta organizacin re/ercute en su nombre& Por eem/lo3 un
/a4uete /odr5a ser es.ur(c.so"t;are # otro /a4uete contenido en ste /odr5a ser
es.ur(c.so"t;are.utilidades&
"as organizacin en )rbol es un mecanismo 4ue /ro/orciona $ava /ara facilitar la erar4u5a 7ver ca/5tulo :8& (ada vez 4ue se
crea un /a4uete se est) es/ecificando im/l5citamente una estructura de directorios& .l /a4uete debe residir en el directorio
indicado /or su nombre3 # debe ser un directorio localizable a /artir de alguno de los directorios declarados en la variable de
entorno CA%%+AT' 7o en el /ar)metro classpath en la invocacin a la !)4uina 'irtual de $ava8&
Por otro lado3 la /ertenencia de un fic*ero a un /a4uete se debe declarar en la /rimera l5nea de cdigo del fic*ero mediante
la /alabra reservada pac$a,e seguida del nombre del /a4uete al 4ue /ertenece&
.s /osible acceder a un elemento contenido en un /a4uete si se ante/one el nombre com/leto del /a4uete al nombre del
elemento 7lo 4ue se conoce como nombres com/l etamente cal i fi cados8& As53 /ara crear un obeto de la clase Coche
contenida en el /a4uete ^tilitarios del /a4uete Aehiculos debemos escribir:
vehiculos.utilitarios.Coche miCoche G new vehiculos.utilitarios.Coche147
Tambin se /uede utilizar la /alabra reservada import al /rinci/io de un fic*ero /ara evitar usar nombres com/letamente
calificados&
import vehiculos.utilitarios.Coche7
...
Coche miCoche G new Coche147
+ncluso es /osible utilizar el asterisco /ara es/ecificar 4ue se desea im/ortar todas las clases contenidas dentro de un
determinado /a4uete&
import vehiculos.utilitarios.*7
...
Coche miCoche G new Coche147
Tambin es /osible utilizar la combinacin import static /ara invocar los mtodos est)ticos de una clase sin necesidad
de utilizar nombres com/letamente calificados&
F => F
Disear # Programar todo es em/ezar
6esta decir 4ue una clase siem/re /ertenece a un /a4uete& Por eso3 cuando se define una clase3 si no se es/ecifica ningHn
/a4uete se considera 4ue est)n en el /a4uete /or defecto3 4ue es un /a4uete asociado al directorio de eecucin 4ue se
crea autom)ticamente& .sta /r)ctica est) desaconseada /or4ue va en contra de cual4uier /rinci/io de organizacin& Si la
variable CA%%+AT' est) definida ser) necesario 4ue contenga el directorio donde se encuentran los fic*eros del /a4uete
/or defecto& Si no est) definida no es necesario&
<& 9& "ecturas recomendadas
1.l lenguae de /rogramacin $ava23 >V .dicin3 Wen Arnold3 $ames -osling3 David ,olmes3 Addison Gesle#3 <CC:&
1+ntroduccin a la Programacin Orientada a Obetos con $ava23 (& T*omas Gu3 !c -raw ,ill3 <CC:&
<& ?& . erci ci os
. erci ci o :
K(u)l es la diferencia entre una /ro/iedad de clase # una /ro/iedad de instanciaL
. erci ci o <
KPor 4u no e0iste en $ava una instruccin /ara la eliminacin de la memoria reservada con !e; 7como delete en (OO3 o
dispose en Pascal8L
. erci ci o =
.l siguiente fragmento de cdigo3 4ue corres/onde a una clase A3 contiene varios errores& Detallar en 4ue consisten los
errores3 indicando cada vez la l5nea en la 4ue se /roducen&
B public B metodoB1B c4
H /
K B aux G new B147
L A auxH7
L aux G c7
J aux.ATadir1HJ47
D if 1aux G c4
P auxH.Aalue1HJ47
N return aux7
M auxH G null7
BC 8
F =9F
(a/5 tul o = ,erenci a # generi ci dad en $ava
.n este ca/5tulo se introducen los as/ectos m)s relevantes de la forma en 4ue $ava da so/orte a la *erencia # a la
genericidad&
=& :& "a *erenci a de cl ases
$ava /ermite la *erencia sim/le de clases& A)sicamente la *erencia /ermite 4ue una clase co/ie de otra su interfaz # su
com/ortamiento # 4ue aada nuevo com/ortamiento en forma de cdigo& "a *erencia facilita la reutilizacin del cdigo sin
afectar demasiado a la deseable /ro/iedad de enca/sulacin&
!)s concretamente3 la *erencia de clases /osibilita 4ue los miembros /Hblicos # /rotegidos de una clase A sean /Hblicos #
/rotegidos3 res/ectivamente3 en cual4uier clase B descendiente de A& Por ello3 los miembros /Hblicos # /rotegidos de una
clase se dice 4ue son accesibles desde las clases 4ue derivan de ella& Por otro lado3 los miembros /rivados de una clase A no
son accesibles en los descendientes de A&
Para aadir nuevas funcionalidades3 sobre una clase B 4ue *erede de una clase A se /ueden im/lementar tantos mtodos
nuevos como se desee&
.n el /unto <&= se dio 4ue la definicin de una clase se corres/ond5a con:
Fclase< 99G
2Modi"icador de clase3 class Fide!ti"icador< 2par@metros3 2here!cia3 2excepcio!es3
/
2Fm0todo<YFpropiedad<YFclase<YFblo.ue i!iciali&aci!<3*
8
.l elemento *erencia debe sustituirse /or:
Fhere!cia< 99G exte!ds Fsuper clase<
.l siguiente eem/lo ilustra la *erencia&
)**
* Declaraci! de la clase coche
* ?versio! D.C
*)
class Coche /
public int matricula7
private int ruedas7
private void revisar14 /
))El m0todo privado !o ser@ heredado
8
protected void "re!ar14 /
))El m0todo prote,ido s> se hereda
8
void acelerar14 /
))^! m0todo "rie!d se hereda si est@ e! el mismo pa.uete
8
public void abrir+uerta14 /
))El m0todo p_blico tambi0! se hereda
8
8
F =@ F
(a/5tulo = F ,erencia # genericidad en $ava
))a clase Deportivo deriva de Coche
class Deportivo extends Coche /
private int i!5ectores G BH7
public void turbo14 /
)*
AIaACIa`E% DE A AI%IBIIDAD
ruedasOO7 )) ErrorE las propiedades privadas !o so! visibles
revisar147 )) ErrorE m0todo !o visible "uera de Coche
*)
"re!ar147 ))CorrectoE Fre!ar es visible e! derivados de Coche
abrir+uerta147 ))CorrectoE Revisar es visible siempre
i!5ectoresOO7 ))CorrectoE i!5ectores es visible e! Deportivo
acelerar147 ))CorrectoE Acelerar es visible e! el pa.uete
8
8
class +rueba /
public static void mai! 1%tri!, 23 ar,4 /
Deportivo d G new Deportivo147
)*
AIaACIa`E% DE A AI%IBIIDAD
d.i!5ectoresOO7 ))ErrorE propiedad !o visible "uera de Deportivo
d.revisar147 ))ErrorE m0todo !o visible "uera de Coche
d."re!ar147 ))ErrorE m0todo !o visible "uera de Deportivo
*)
d.matricula G J7 ))CorrectoE las propiedades p_blicas so! accesibles
d.abrir+uerta147 ))CorrectoE el m0todo es visible de!tro del pa.uete
d.turbo147 ))CorrectoE los m0todos p_blicos so! accesibles
d.revisar147 ))CorrectoE los m0todos p_blicos se hereda!
8
8
"a *erencia /osibilita 4ue un obeto cum/la varios ti/os& .n efecto3 como cada clase define un ti/o3 un obeto de una clase A
cum/le el ti/o definido /or A # tambin cum/le los ti/os definidos /or todas las clases de la erar4u5a de la 4ue deriva A&
.s im/ortante notar 4ue en $ava cada clase no /uede *eredar de m)s de una clase simult)neamente& .s decir3 no /ermite
*erencia mHlti/le3 slo *erencia sim/le& "as erar4u5as de *erencia de clases de $ava tienen forma de )rbol& De *ec*o3 en $ava
e0iste una clase llamada ab(ect de la 4ue deriva toda clase 4ue no declare derivar de otra& Por tanto3 en $ava *a# un Hnico
)rbol de *erencia3 # ab(ect es su/erclase de todas las clases de $ava&
=& :& : ,erenci a en cl ases i nternas
"as clases internas tambin /ueden *eredar de otras clases& .n /articular3 las clases internas est)ticas /ueden utilizar la
*erencia3 consiguiendo efectivamente 4ue una clase *erede de manera aislada diferentes /artes de su interfaz de erar4u5as
diferentes&
=& :& < 6edefi ni ci n de mi embros
.n una clase B 4ue deriva de una clase A es /osible redefinir los miembros accesibles de A im/lement)ndolos de nuevo& (on
esto se consigue 4ue B redefina el com/ortamiento definido /or su su/erclase A&
(uando un mtodo M se redefine en una clase B 4ue deriva de A3 cual4uier llamada al mtodo M sobre un obeto de B
/roduce una llamada a la im/lementacin de B # no a la de A3 4ue 4ueda enmascarada&
.s /osible acceder a la im/lementacin de la su/erclase dentro de un miembro redefinido mediante el uso de la /ro/iedad
/rivada super 4ue no es otra cosa 4ue una referencia a la interfaz de la su/erclase&
A /artir de la versin 9 de $ava es /osible 4ue el ti/o devuelto /or el mtodo redefinido /ueda ser un ti/o derivado del ti/o
devuelto /or el mtodo de la su/erclase&
=& :& = "a *erenci a # l os constr uctores
"os constructores accesibles de una clase A son visibles desde cual4uier clase B derivada de A3 /ero no se /uede construir
obetos de la clase B si no se redefine los constructores en B& .s decir los constructores siem/re se tienen 4ue im/lementar3
aun4ue desde un constructor de una clase B se /uede llamar al constructor de la su/erclase utilizando la /ro/iedad /rivada
super&
Si al definir un constructor en una clase derivada no se llama al constructor de la clase /adre $ava aade una llamada al
constructor /or defecto de la su/erclase& .n el caso de 4ue la su/erclase no tenga constructor /or defecto $ava da un error
de com/ilacin /or4ue al crear un obeto no sabr) como inicializar los /ar)metros de la su/erclase&
Su/ngase una clase A con dos constructores&
F =; F
Disear # Programar todo es em/ezar
class A /
public A14 /
))Impleme!taci!
8
public A1int x4 /
))Impleme!taci!
8
8
.l siguiente fragmento crea una clase B 4ue deriva de la clase A anterior& .sta clase tiene dos constructores& .l /rimero no
invoca al constructor de la su/erclase3 /or lo 4ue se invoca autom)ticamente al constructor /or defecto& .l segundo invoca a
uno en es/ecial de los constructores de la su/erclase&
class B extends A /
public B14 /
))`o se especi"ica co!structor por lo .ue autom@ticame!te se
))llama al co!structor por de"ecto de la superclase
))resto de la impleme!taci!
8
public B1int x4 /
super1x47 ))lamada al co!structor co! par@metros de la superclase
))resto de la impleme!taci!
8
8
Si en la clase A el mtodo M es /Hblico no es /osible ocultarlo en ninguna clase B derivada de A redefiniendo M como
/rivado& .l intento de ocultar un mtodo 4ue es /Hblico en una su/erclase da un error de com/ilacin /ues im/lica 4ue se
intenta violar el contrato de la clase /adre&
. em/l o de *erenci a sobre l a cl ase Parking
.l siguiente eem/lo *ereda del +ar$i!, del eem/lo <&=&:C /ara im/lementar un +ar$i!, 4ue solo admite coc*es con
matr5cula /ar& Para ello redefine el mtodo ocupar+la&a3 de manera 4ue solo invoca a la su/erclase cuando la matr5cula es
/ar&
class +ar$i!,+ares extends +ar$i!, /
public void ocupar+la&a1Coche c4 /
if 1c.matricula W H GG C4
super.ocupar+la&a 1c47
8
8
=& <& Pol i morfi smo di n)mi co
.n $ava un obeto de un ti/o T /uede estar referenciado /or una referencia del ti/o T o /or una referencia de cual4uier ti/o
del 4ue T derive&
As53 $ava /ermite asignar el contenido de una referencia de una clase B a una referencia de una su/erclase de B& Por eem/lo
si la clase B deriva de la clase A se /uede *acer:
B b G new B147
A a7
a G b7
.ste mecanismo /ermite 4ue una misma referencia /ueda a/untar en la misma eecucin a obetos de clases diversas&
(uando esto se une a la redefinicin de mtodos se da la circunstancia de 4ue en com/ilacin no /uede decidirse a 4u
im/lementacin se invoca cuando se llama a un mtodo& .sta decisin se tomar) en eecucin de/endiendo del obeto sobre
el 4ue se invo4ue& (omo #a se e0/lic en el ca/5tulo :3 a esta /ro/iedad3 4ue /ermite usar un mismo nombre # 4ue en cada
caso /rovoca diferentes eecuciones3 se la denomina /olimorfismo din)mico3 #a 4ue se resuelve en eecucin&
.l siguiente eem/lo ilustra este com/ortamiento& Su/ngase 4ue la clase C # la B derivan de la clase A& Su/ngase adem)s3
4ue la clase A tiene un mtodo M 4ue dea /ara sea im/lementado /or la clase B # la C& (uando en el fragmento de cdigo
adunto se invoca al mtodo M es im/osible /redecir a /riori si se eecuta la im/lementacin de la clase B o de la clase C&
F =DF
(a/5tulo = F ,erencia # genericidad en $ava
A a7
if 1Math.ra!dom14 < C.J4
a G new B147
else
a G new C147
a.M147
. em/l o del uego de coc*es
Su/ongamos 4ue deseamos construir un uego de simulacin de ti/o /ersecucin de coc*es& As5 tendr5amos de/ortivos3
ambulancias3 camiones&&& Todas estas clases /odr5an derivar de una clase Automvil3 de manera 4ue se a/rovec*ase la
definicin comHn de /arte de la im/lementacin& (ada clase aadir5a los detalles relativos a esa clase /articular& As5 la clase
ambulancia aadir5a el mtodo e!ce!der%ire!a143 o la clase camin /odr5a tener la /ro/iedad booleana estaCar,ado&
Adem)s3 si a la clase Aeh>culo aadimos el mtodo abstracto /i!tar14 cada clase derivada /odr) im/lementarlo de
acuerdo a su car)cter& As5 la clase Ambula!cia /intar) una furgoneta blanca con una cruz roa3 mientras 4ue la clase
Deportivo /odr5a /intar un %errari roo&
+Pintar()
Auto)ovil
+Encen%er/irena01
+Pintar01
A)/ulancia
+Pintar01
-esta2car3a%o
Ca)ion
+Pintar01
Deportivo
%i gura <C& F $erar4u5a /ara el uego de coc*es&
Pueda claro en este eem/lo 4ue cada una de estas clases 7Deportivo3 Ambula!cia3 Cami!&&&8 son de la clase
Automvil3 # /or lo tanto una referencia de ti/o Automvil /odr5a referenciar tanto a un Deportivo como a un
Cami!& .s m)s3 desde una referencia del ti/o Automvil /odr5amos invocar al mtodo /i!tar143 aun4ue a /riori no
/odr5amos saber el resultado3 /ues la referencia /uede a/untar a uno u otro de los diferentes ti/os de ve*5culos&
.ste com/ortamiento es altamente Htil al realizar /rogramas de una com/leidad media o elevada3 #a 4ue /ermite al
desarrollado trabaar con abstracciones de un nivel su/erior3 sin /reocu/arse de los detalles de las abstracciones de nivel
inferior& As53 /or eem/lo3 /odr5amos tener un obeto encargado de refrescar la /antalla recorrindose una estructura
genrica 4ue almacena obetos de la clase 'e*5culo& Tal obeto no es necesario 4ue conozca la interfaz /articular de los
diferentes ti/os de ve*5culos3 slo *ace falta 4ue invo4ue el mtodo +i!tar de cada Automvil 4ue contenga la
estructura&
Una im/lementacin /ara las clases descritas /odr5a ser:
class Automvil /
public void pi!tar147
8
class Ambulacia extends Automvil /
public void pi!tar14 /
%5stem.out.pri!tl!16%o5 u!a ambulacia647
8
public void e!ce!der%ire!a14 /
%5stem.out.pri!tl!16IIIIIIIIIAAAAAAAAAA647
8
8
class Camio! extends Automvil /
private boolean estaCar,ado G "alse7
public void pi!tar14 /
if 1estaCar,ado4
%5stem.out.pri!tl!16%o5 u! cami! car,ado647
else
%5stem.out.pri!tl!16%o5 u! cami!647
8
8
class Deportivo extends Automvil /
public void pi!tar14 /
%5stem.out.pri!tl!16%o5 u! Deportivo647
8
8
F >C F
Disear # Programar todo es em/ezar
=& <& : .l casti ng de referenci as a ob etos
.n $ava no se /ermite asignar directamente el contenido de una referencia de un ti/o T a una referencia de un ti/o derivado
de T&
Sobre el eem/lo anterior se ve claramente 4ue un obeto de la clase Ambula!cia es necesariamente un obeto de la clase
Automvil& Jtese 4ue el reci/roco no es cierto: un obeto de la clase Automvil no tiene /or4ue ser /recisamente de la
clase Ambula!cia 7/ues /odr5a ser otra clase derivada de Automvil8& .s /ara /revenir este ti/o de errores /or lo 4ue no
se /ermite asignar directamente el contenido de una referencia de un ti/o T a una referencia de un ti/o derivado de T&
Sin embargo3 aun4ue la asignacin mencionada no se /uede realizar directamente3 s5 se /uede *acer cuando /reviamente se
realiza una o/eracin de casting&
.l siguiente eem/lo ilustra el uso del casting:
Ambula!cia a G new Ambula!cia147
Automvil b G a7
Ambula!cia c G 1Ambula!cia4 b7 ))A.u> se hace el casti!,
.l casting indica al com/ilador un ti/o al 4ue deber) /ertenecer el obeto referenciado /or b cuando se eecute el /rograma&
Obsrvese 4ue debido al /olimorfismo el com/ilador no /uede com/robar el ti/o en com/ilacin& Por ello3 si durante su
eecucin el obeto no /ertenece al ti/o es/ecificado en el casting se /roducir) un error en forma de e0ce/cin&
Debido a la /osibilidad de 4ue en eecucin se generen este ti/o de errores3 una buena norma ser5a no utilizar el casting
nunca& Desgraciadamente su uso es im/rescindible en algunas ocasiones& Por eem/lo3 al recu/erar un obeto de un
contenedor genrico # 4uerer /oder acceder a la interfaz es/ec5fica del obeto recu/erado& .n estos casos debe minimizarse
su utilizacin3 enca/sulando el casting dentro de unos /ocos mtodos /ara 4ue slo se utilice en /artes mu# controladas del
cdigo&
.n $ava /uede usarse la /alabra reservada i!sta!ceo" /ara com/robar la /ertenencia de un obeto a una clase # con ello
asegurar un correcto funcionamiento del casting&
if 1x instanceof Coche4 /
Coche c G 1Coche4 x7
8
Sin embargo este ti/o de com/robaciones debe evitarse en lo /osible3 /ues *ace 4ue se creen de/endencias fuertes entre
clases 4ue lgicamente no deber5an de/ender entre si& As53 el uso de i!sta!ceo" es en general contrario a la modularidad
# normalmente es innecesario si se utiliza adecuadamente el /olimorfismo&
. em/l o del vector de ob ects
Se desea construir una clase AectorDi!amico 4ue /ermita almacenar obetos de clase ab(ect o de cual4uier clase 4ue
*erede de sta 7# /or tanto de cual4uier clase de obeto8&
public class AectorDi!amico /
private int dime!sio! G C7
private ab(ect arra523 G null7

AectorDi!amico1int dime!sio!4 /
redime!sio!ar1dime!sio!47
8

public int dime!sio!14 /
return dime!sio!7
8

public void po!er1int posE ab(ect o4 /
if 1pos <G dime!sio!4
redime!sio!ar1posOBCCC47
arra52pos3 G o7
8

public void redime!sio!ar1int dime!sio!4 /
if 1this.dime!sio! <G dime!sio!4
return7
ab(ect !uevo#arra523 G new ab(ect2dime!sio!37
for 1int co!t G C7 co!t F this.dime!sio!7 co!tOO4
!uevo#arra52co!t3 G arra52co!t37
arra5 G !uevo#arra57
F >:F
(a/5tulo = F ,erencia # genericidad en $ava
dime!sio! G this.dime!sio!7
8

public ab(ect obte!er1int pos4 throws Exceptio! /
if 1pos F dime!sio!4
return arra52pos37
else
throw new ErrorAector16AectorDi!amico.obte!er149 Est@ vac>o647
8
8
class ErrorAector extends Excepctio! /
public %tri!, error7
ErrorAector1stri!, error4 /
this.error G error7
8
8
.l clase AectorDi!amico /ermitir) almacenar cual4uier ti/o de obeto3 /ero al recu/erarlo se deber) *acer casting a una
clase concreta /ara /oder utilizar el obeto& .sto /uede *acer azaroso el uso de una estructura genrica3 #a 4ue al recu/erar
un obeto de la estructura no se sabe con seguridad de 4ue ti/o es el obeto& Una buena solucin es controlar el acceso a tal
estructura de manera 4ue slo sea /osible insertar en ella obetos de un ti/o& .sto se /uede *acer creando una clase 4ue
contenga la estructura AectorDi!amico como /ro/iedad /rivada3 # 4ue tenga mtodos /Hblicos /ara insertar # obtener
elementos del ti/o concreto 4ue se desee en la estructura&
. em/l o del a/arcami ento de coc*es
.n el siguiente eem/lo utiliza la clase AectorDi!amico /ara crear una nueva clase Aparcamie!to 4ue /ermita la
insercin # obtencin de obetos Hnicamente de la clase Coche&
Aparcamiento
+ Aparcamiento(in capacidad : int)
+ aparcar(in pos : int, in c : Automovil)
+ retirar() : Automovil
VectorDinamico
- dimension : int
+ dimension() : int
+ poner(in pos : int, in valor : Object)
+ obtener() : Object
+ redimensionar(in dim : int)
+ VectorDinamico(in dim : int)
1 1
%i gura <:& F 6elacin de asociacin entre el vector din)mico # el a/arcamiento&
class Aparcamie!to /
private AectorDi!amico datos7
public Aparcamie!to1int dime!sio!4 /
datos G new AectorDi!amico1dime!sio!47
8

public void aparcar1int posE Automvil c4 /
datos.po!er1posE c47
8

public Coche retirar1int pos4 /
return 1Coche4 datos.obte!er1pos47
8
8
Obsrvese 4ue no es /osible usar *erencia /ara 4ue Aparcamie!to *erede de AectorDi!amico3 #a 4ue la clase
Aparcamie!to *eredar5a los mtodos 4ue /ermiten insertar cual4uier ab(ect # no se *abr5a conseguido nada&
=& =& "as i nt erfaces
Se *a dic*o 4ue cuando se define una clase de obetos se define la interfaz # la im/lementacin de los obetos 4ue cum/len
dic*a clase& ,a# 4ue aadir 4ue $ava tambin /ermite definir una interfaz sin tener 4ue definir su im/lementacin& "a
declaracin de una interfaz se realiza mediante la siguiente estructura&
i!ter"ace Fid#i!ter"a&< 2exte!ds Fid#i!ter"a&< 2Fid#i!ter"a&<3*3 3
/
2propiedades est@ticas "i!ales Y declaraci! de m0todos Y i!ter"a& i!ter!a3*
8
F >< F
Disear # Programar todo es em/ezar
"as interfaces se /ueden ver como clases abstractas /uras& .s decir3 clases 4ue slo declaran mtodos # /ro/iedades est)ticas
finales3 # 4ue no definen el com/ortamiento de ningHn mtodo& As53 cual4uier /ro/iedad definida en una interfaz es est)tica
# final3 mientras 4ue cual4uier mtodo es abstracto # /Hblico& "a definicin de interfaces constitu#e el segundo mecanismo
4ue /ro/orciona $ava /ara definir ti/os&
$ava /ermite 4ue una clase declare 4ue im/lementa una o m)s interfaces simult)neamente3 lo cual e4uivale a la *erencia
mHlti/le de clases abstractas& (uando una clase declara 4ue im/lementa una o varias interfaces indica con ello 4ue se
res/onsabiliza de definir el com/ortamiento de cada uno de los mtodos 4ue declaran esas interfaces& "a declaracin de 4ue
una clase im/lementa una o varias interfaces sigue la siguiente estructura&
class Fid#clase< 2exte!ds Fid#superclase<32impleme!ts Fid#i!ter"a&<2EFid#i!ter"a&<3*3
/
2m0todosYpropiedades3
8
"as interfaces /otencian el com/ortamiento /olimrfico de $ava& .sto se debe a la /osibilidad de definir referencias a
obetos 4ue im/lementen cierta interfaz3 # a la /osibilidad #a descrita de 4ue una referencia a un obeto 4ue cum/le un ti/o
T /ueda corres/onder a cual4uier ti/o derivado de T&
(omo /eculiaridad se comentar) 4ue es /osible definir interfaces internas3 definindolas dentro de clases o de otras
interfaces& .n este caso3 /ara referenciarlas se usar) la misma /ol5tica 4ue /ara referenciar clases internas& Adem)s3 las
interfaces internas admiten el uso del modificador private3 /ara restringir su visibilidad&
. em/l o del con unto ordenado
Un conunto ordenado es una estructura 4ue /ermite almacenar sin re/eticiones elementos entre los 4ue e0iste un orden lo
4ue /ermite 4ue su recu/eracin sea m)s eficiente 4ue en una bHs4ueda secuencial& A este efecto3 la estructura /odr5a
consistir en un )rbol binario en el 4ue se sigue la regla de 4ue los elementos menores est)n a la iz4uierda # los ma#ores a la
derec*a&
Por otro lado3 /ara establecer un orden entre los elementos de este )rbol /odr5a definirse la interfaz Eleme!toarde!able&
.sta interfaz tendr5a un mtodo 4ue /ermitir5a com/arar 1elementos ordenables2& As53 cual4uier clase 4ue im/lemente la
interfaz Eleme!toarde!able /odr5a ordenar sus elementos res/ecto a otros elementos 4ue tambin cum/lan dic*a
interfaz& Definir el criterio de ordenacin como una interfaz tiene la ventaa de 4ue /ermite 4ue se /ueda a/licar a cual4uier
clase #a e0istente sin m)s 4ue *eredar # declarar 4ue la nueva clase im/lementa la interfaz Eleme!toarde!able&
interface Eleme!toarde!able /
public boolean ma5orbue1Eleme!toarde!able e47
8
class ArbolBi!ario /
private Eleme!toarde!able eRai&7
private ArbolBi!ario arbolDerechaE arbolI&.uierda7
public ArbolBi!ario i&.uierda14 /
return arbolI&.uierda7
8
public ArbolBi!ario derecha14 /
return arbolDerecha7
8
public Eleme!toarde!able obte!erEleme!toRai&14 /
return e#rai&7
8
public void i!sertar 1Eleme!toarde!able e4 /
if 1eRai& GG null4
eRai& G e7
else /
if 1e.ma5orbue1e#rai&44 /
if 1arbolDerecha GG null4
arbolDerecha G new ArbolBi!ario147
arbolDerecha.i!sertar1e47
8
else /
if 1arbolI&.uierda GG null4
arbolI&.uierda G new ArbolBi!ario147
arbolI&.uierda.i!sertar1e47
8
8
8
8
Por Hltimo3 se /rueba la clase creada mediante el siguiente cdigo de eem/lo&
F >=F
(a/5tulo = F ,erencia # genericidad en $ava
class E!teroarde!able implements Eleme!toarde!able /
public int eleme!to7
public E!teroarde!able1int e4 /
eleme!to G e7
8
public boolean ma5orbue1Eleme!toarde!able e4 /
E!teroarde!able aux G 1E!teroarde!able4 e7
return 1eleme!to < aux.eleme!to47
8
8
class E(emplo^so /
public void mai!1%tri!, ar,s234 /
E!teroarde!able a G new E!teroarde!able1K47
E!teroarde!able b G new E!teroarde!able1J47
E!teroarde!able c G new E!teroarde!able1BB47
E!teroarde!able d G new E!teroarde!able1P47
E!teroarde!able e G new E!teroarde!able1BK47
ArbolBi!ario arbol G new ArbolBi!ario147
arbol.i!sertar1a47
arbol.i!sertar1b47
arbol.i!sertar1c47
arbol.i!sertar1d47
arbol.i!sertar1e47
8
8
=& >& "a generi ci dad
"a generi ci dad /uede definirse como una ca/acidad 4ue /ermite a un lenguae declarar ti/os mediante /ar)metros
variables& "a genericidad es un mecanismo 4ue suele utilizarse /ara construir contenedores conscientes del ti/o3 de manera
4ue se eviten los /roblemas descritos al crear inseguros contenedores de ab(ets& "a genericidad es un mecanismo m)s
dbil 4ue el /olimorfismo3 # ello se constata en el *ec*o de 4ue $ava crea la genericidad sobre el /olimorfismo&
=& >& : (l ases e i nterfaces genri cas
Para dar so/orte a la genericidad3 en la versin :&9 $ava introduce el conce/to de genri co 7similar al de tem/late /resente
en (OO desde su estandarizacin AJS+ en :DD;8& "os genricos /ermiten definir /ar)metros 4ue se corres/onden con un
ti/o en la definicin de una clase o una interfaz& .stos genricos dan lugar al conce/to de clase 7o interfaz8 genrica& "as
clases 7o interfaces8 genricas tambin suelen denominarse cl ases /aramet ri zadas&
.n el /unto <&= se defini la im/lementacin de la siguiente manera:
Fclase< 99G 2Modi". de clase3 class Fide!ti".< 2par@metros3 2here!cia3 2excepcio!es3
S/S
2Fm0todo<YFpropiedad<YFclase<YFblo.ue i!iciali&aci!<3*
S8S
A*ora /odemos e0/licar 4ue el o/cional 1/ar)metros2 se utiliza /ara la genericidad # toma la siguiente forma:
parametros 99G 2SFSide!ti"icador 2exte!ds tipo32impleme!ts Ftipo<2XFtipo<3* S<S3
2ESFSide!ti"icador 2exte!ds tipo32impleme!ts Ftipo<2XFtipo<3*33*S<S3
Obsrvese 4ue a continuacin del genrico se /ueden es/ecificar restricciones /ara limitar las clases 4ue se /ueden /asar
como /ar)metro en la construccin de obetos& .s m)s3 el ti/o 4ue limita al genrico /uede ser otro genrico&
Dentro de la definicin de la clase se /uede utilizar el identificador del ti/o /ara definir otras variables o valores devueltos&
Por otro lado3 /ara crear obetos de una clase /arametrizada se debe usar la siguiente sinta0is:
Fob(eto parametri&ado< 99G Fclase< SFSparamS<S Fvariable< G
!e; Fclase< SFSparamS<S 12par@metros34
"a /rinci/al utilidad de las clases /arametrizadas es la de /ermitir la creacin de contenedores genricos 4ue ace/ten
elementos inde/endientes de su ti/o& ,asta la versin :&> de $ava3 la genericidad se consegu5a constru#endo contenedores
4ue almacenaban obetos de la clase ab(ect # el casting /osterior a la clase corres/ondiente& Un eem/lo lo encontramos en
la clase AectorDi!amico del /unto =&<&:& .l /roblema 4ue /lantea esta forma de construir contenedores genricos es 4ue
F >> F
Disear # Programar todo es em/ezar
no se im/one ninguna limitacin a los obetos al insertarlos en el contenedor& Por ello /odr5a darse la situacin de tener un
contenedor lleno # no saber de 4u clase son los obetos contenidos&
. em/l o de uso de genri cos
.l siguiente eem/lo muestra cmo utilizar los genricos al crear una clase Co!cesio!ario genrica3 4ue luego ser) ca/az
de generar obetos Co!cesio!ario de obetos Deportivo # obetos Co!cesio!ario de obetos ^tilitario&
)**
* Clase Co!cesio!ario ,e!0rica
*)
class Co!cesio!arioFT extends Coche< /
private T23 coches G null7
)**
* Co!structor del co!cesio!ario
* ?param coches arra5 co! los coches .ue co!tie!e el co!cesio!ario
*)
public Co!cesio!ario1final T23 coches4 /
this.coches G coches7
8
)**
* abtie!e todos los coches del co!cesio!ario
* ?retur! arra5 co! todos los coches del co!cesio!ario
*)
T23 obte!erCoches14 /
return coches7
8
8
A continuacin veamos los distintos ti/os de coc*es 4ue se /ueden vender 7Deportivo # ^tilitario3 ambos
im/lementando la interfaz Coche8:
)**
* I!ter"a& Coche
*)
interface Coche /
)**
* Devuelve el tipo de cohe
* ?retur! tipo de coche
*)
%tri!, tipo147
8
)**
* Clase Deportivo
*)
public class Deportivo impleme!ts Coche /
)**
* Tipo de coche
*)
private %tri!, tipo7
)**
* Co!structor de u! deportivo
* ?param marca marca del coche
*)
public Deportivo1final %tri!, marca4 /
this.tipo G 6Deportivo9 6 O marca7
8
)**
* Devuelve el tipo de coche
* ?retur! tipo de coche
*)
public %tri!, tipo14 /
return tipo7
8
8
)**
* Clase ^tilitario
*)
public class ^tilitario implements Coche /
)**
* Tipo de coche
*)
private %tri!, tipo7
)**
* Co!structor de u! deportivo
* ?param marca marca del coche
*)
public ^tilitario1final %tri!, marca4 /
this.tipo G 6^tilitario9 6 O marca7
8
F >9F
(a/5tulo = F ,erencia # genericidad en $ava
)**
* Devuelve el tipo de coche
* ?retur! tipo de coche
*)
public %tri!, tipo14 /
return tipo7
8
8
%inalmente mostramos el uso de la clase Co!cesio!ario desde un mtodo mai!&
public class Co!cesio!arioMai! /
public static void mai!1%tri!,23 ar,s4 /
))Creamos los coches deportivos
final Deportivo23 deportivos G /new Deportivo16Ferrari64E
new Deportivo16+orsche6487
))Creamos el co!cesio!ario de coches deportivos
final Co!cesio!arioFDeportivo< co!cesio!arioDeportivo G new
Co!cesio!arioFDeportivo<1deportivos47
for 1Deportivo deportivo 9 co!cesio!arioDeportivo.obte!erCoches144 /
%5stem.out.pri!tl!1deportivo.tipo1447
8
))Creamos los coches utilitarios
final ^tilitario23 utilitarios G /new ^tilitario16%eat64E
new ^tilitario16Re!ault6487
))Creamos el co!cesio!ario de coches utilitarios
final Co!cesio!arioF^tilitario< co!cesio!ario^tilitario G
new Co!cesio!arioF^tilitario<1utilitarios47
for 1^tilitario utilitario 9 co!cesio!ario^tilitario.obte!erCoches144 /
%5stem.out.pri!tl!1utilitario.tipo1447
8
8
8
"a salida /ara este mai! es:
Deportivo9 Ferrari
Deportivo9 +orsche
^tilitario9 %eat
^tilitario9 Re!ault
Al crear una clase /arametrizada se crea una su/erclase de la 4ue *eredar)n cada una de las clases con una /arametrizacin
es/ec5fica& A esta clase se la /uede referenciar utilizando el s5mbolo de interrogacin como /ar)metro& As53 la clase
AectorDi!amicoF?< es su/erclase de todas las clases AectorDi!amico3 # /uede utilizarse /ara a4uellos casos en los
4ue deseemos realizar alguna o/eracin sobre un AectorDi!amico sin im/ortarnos el ti/o de obeto 4ue almacena&
,a# 4ue notar 4ue un obeto de la clase Co!cesio!arioFDeportivo< # otro de la clase
Co!cesio!arioF^tilitario< no com/arten el mismo ti/o3 aun4ue las clases Deportivo # ^tilitario estn en
relacin de *erencia&
.n los diagramas est)ticos de U!" las clases /arametrizadas se dibuan con una /e4uea caa en su /arte su/erior derec*a
4ue denota su ti/o&
,a# 4ue notar 4ue un obeto de la clase AectorDi!amicoFA< # otro de la clase AectorDi!amicoFB< no com/arten el
mismo ti/o3 aun4ue las clases A # B estn en relacin de *erencia& As53 un obeto de la clase AectorDi!amicoF%tri!,<
no com/arte el ti/o con un obeto de la clase AectorDi!amicoFab(ect< # no se /uede *acer el casting de un ti/o a otro&
F >? F
Disear # Programar todo es em/ezar
%i gura <<& F $erar4u5a de *erencia entre clases /arametrizadas&
.l cdigo /ara crear un obeto de la clase AectorDi!amico # utilizarlo /ara almacenar cadenas con nombres ser5a:
AectorDi!amico F%tri!,< v G new AectorDi!amico F%tri!,<1BC47
v.+o!er1CE%tri!,16-ua!6447
v.+o!er1BE%tri!,16A!dres6447
=& >& < !todos con ti /os /arametri zados
.s /osible definir ti/os genricos en el interior de las clases # utilizarlos /ara definir los /ar)metros de los mtodos # los
valores devueltos /or estos& Al definir el mtodo3 las llaves angulares a/arecen des/us de los modificadores del mtodo #
antes del ti/o devuelto&
public final FA exte!ds %tri!,< int tamaTo1A texto4 /
return texto.si&e147
8
"os ti/os /arametrizados suelen utilizarse sobre todo en los mtodos est)ticos3 en los 4ue /or su naturaleza no /uede
accederse al ti/o /arametrizado de la clase&
=& 9& (oncl usi ones
.n este ca/5tulo se *a visto 4ue los obetos en $ava solo /ertenecen a una clase& Sin embargo el mismo obeto /uede cum/lir
tantos ti/os como clases e interfaces *a#a en la erar4u5a de *erencia de su clase& .sto3 unido a la /osibilidad de tratar a un
obeto mediante una referencia de cual4uiera de los ti/os 4ue cum/le3 da lugar al /olimorfismo din)mico& Tambin se *a
estudiado la genericidad # la im/lementacin 4ue $ava realiza de ella&
=& ?& "ecturas recomendadas
1Piensa en $ava23 <V .dicin3 Aruce .cEel3 Addison Gesle#3 <CC<& .n este libro3 .cEel con un estilo desenfadado3 /resenta
una obra de referencia im/rescindible /ara /rofundizar en $ava&
=& @& . erci ci os
. erci ci o :
De la clase A se deriva la clase B& De la clase B se deriva la clase C& KDesde la clase C se /uede llamar a los mtodos
/rotegidos de la clase AL
. erci ci o <
KPuede tener alguna utilidad una clase 4ue no tiene /ro/iedades # cu#os mtodos son todos abstractosL .n caso afirmativo
e0/licar cu)l ser5a&
F >@F
(a/5tulo = F ,erencia # genericidad en $ava
. erci ci o =
"as clases 4ue im/lementen la interfaz Eleme!toarde!able /ueden determinar si un obeto es ma#or 4ue otro& .sta
interfaz slo tiene un mtodo llamado ma5orbue14 4ue devuelve true si el obeto sobre el 4ue se /regunta es ma#or 4ue
el obeto 4ue se /asa /or /ar)metro& .s claro 4ue esta relacin de orden 4ue define sobre una clase /articular res/onde a la
naturaleza singular de esa clase&
interface Eleme!toarde!able /
public boolean ma5orbue1Eleme!toarde!able e47
8
Se /ide escribir el cdigo $ava corres/ondiente a un obeto 4ue im/lemente un )rbol binario ordenado de obetos
Eleme!toarde!able& .ste )rbol cum/lir) la siguiente descri/cin:
(ada nodo de ArbolBi!ario /odr) tener como m)0imo dos ramas descendentes 7una a la iz4uierda # otra a la derec*a8
4ue ser)n a su vez cada uno obetos ArbolBi!ario&
"a clase ArbolBi!ario /ermitir) navegar /or sus ramas mediante dos funciones 4ue devuelven el )rbol binario de la
iz4uierda o de la derec*a& .stos mtodos tendr)n la forma:
public ArbolBi!ario i&.uierda147
public ArbolBi!ario derecha14
Se /odr) obtener el obeto contenido en el nodo ra5z de estos )rboles mediante el mtodo:
public Eleme!toarde!able obte!erEleme!toRai&147
"a insercin de elementos en este )rbol se realiza mediante el mtodo:
public void i!sertar1Eleme!toarde!able e47
"a insercin sigue el siguiente algoritmo recursivo de dos /asos:
Paso :&F Si el )rbol est) vac5o el elemento se inserta en la ra5z&
Paso <&F Si el )rbol no est) vac5o se com/ara el elemento a insertar con el /resente en el nodo ra5z& Si es ma#or el
nuevo elemento se intenta insertar en el sub)rbol 4ue /ende de la derec*a del nodo ra5z llamando al /aso : con el
sub)rbol de la derec*a& .n otro caso se intenta insertar en el sub)rbol 4ue /enda de la iz4uierda del nodo ra5z3
llamando al /aso : con el sub)rbol de la iz4uierda&
F >; F
(a/5 tul o > .l /a4uete ava& l ang
.l /a4uete m)s im/ortante de $ava es (ava.la!,& .ste /a4uete a/orta interfaces # clases tan fundamentales /ara $ava 4ue
est)n integradas con el /ro/io lenguae # no es /reciso im/ortarlas& .n este ca/5tulo se estudiar) la clase ab(ect 7clase base
de toda clase creada en $ava83 se estudiar)n las envolturas 7recubrimientos de los ti/os /rimitivos83 se estudiar) la clase
Exceptio! 74ue /ermitir) manear errores8 # se introducen las interfaces Clo!able # Comparable # las clases de
refle0in 74ue /ermiten obtener informacin sobre las /ro/ias clases en tiem/o de eecucin8&
>& :& "a cl ase Object
Toda clase 4ue se declara en $ava # 4ue no se es/ecifica de 4u clase deriva lo *ace de la clase ab(ect& .sto tiene como
consecuencia 4ue todas las clases de $ava tienen como ti/o comHn la clase ab(ect&
"as ventaas de una erar4u5a de ra5z Hnica son enormes& .ntre ellas se /ueden destacar dos:
Todos los obetos en Hltima instancia son del mismo ti/o # /or lo tanto /uede garantizarse ciertas o/eraciones
sobre todos ellos& Por eem/lo sim/lific la creacin del recolector de basura3 #a 4ue slo *ubo 4ue im/lementar el
com/ortamiento /ara la clase ab(ect&
Pro/orciona muc*a fle0ibilidad a la *ora de /rogramar& Por eem/lo /ermite definir estructuras de datos 4ue
almacenen obetos de ti/o ab(ect 7# /or tanto cual4uier clase de obetos3 /ues todas derivan de ab(ect8&
"a clase ab(ect define una serie de mtodos 4ue /ueden utilizarse sobre todos los obetos 4ue se creen en $ava& .stos
mtodos son: clo!e143 e.uals143 "i!ali&e143 ,etClass143 hashCode143 to%tri!,143 ;ait143 !oti"514 #
!oti"5All14&
.l mtodo to%tri!,14 devuelve una cadena asociada al obeto& De esta forma todos los obetos en $ava tienen una
re/resentacin en forma de cadena de te0to&
.l mtodo hashCode14 devuelve un entero 4ue /uede utilizarse como identificador Hnico del obeto en la m)4uina virtual&
De los mtodos ;ait143 !oti"514 # !oti"5All14 *ablaremos cuando estudiemos la concurrencia&
6efl e0i n
(asi todos los mtodos de ab(ect utilizan los mecanismos de ref l e0i n de $ava& "a refle0in es una /ro/iedad mu#
/otente 4ue /ermite a un /rograma revisar su /ro/io cdigo de manera din)mica3 e incluso /ermite aadir clases #
miembros nuevos durante la fase de eecucin&
.l mtodo ,etClass14 de ab(ect es mu# im/ortante en este mecanismo de refle0in3 /ues devuelve un obeto de la
clase Class 4ue re/resenta la clase a la 4ue /ertenece el obeto& "a clase Class /ermite 4ue un /rograma /ueda realizar
multitud de o/eraciones con clases desconocidas en tiem/o de com/ilacin& As53 esta clase /ermite ins/eccionar los
miembros de un obeto 7,etMethod143 ,etFields143 isAbstract14&&&83 /ermite crear obetos /ertenecientes a la clase
4ue re/resenta 7usando !e;I!sta!ce1483 e incluso /ermite ser cargada din)micamente 7mediante un obeto de ti/o
Classoader8&
clo!e14 es un mtodo /rotegido 4ue /ermite sacar una co/ia de un obeto& .sto es im/ortante debido a 4ue3 recordemos3
el o/erador de asignacin slo co/ia la referencia& (uando la co/ia de un obeto no slo consista en igualar los valores de sus
/ro/iedades se deber) redefinir el mtodo clo!e14 en la clase derivada3 aadiendo el com/ortamiento necesario& "a
im/lementacin de este mtodo realizada en la clase ab(ect solo es /osible mediante mecanismos de refle0in3 los cuales3
obsrvese3 violan la enca/sulacin3 /ues deben /ermitir acceder a /artes /rivadas de la clase derivada /ara co/iarlas&
.l mtodo e.uals14 se /ro/orciona /ara realizar la com/aracin de un obeto con otro& "a im/lementacin /or defecto3
/ro/orcionada /or ab(ect3 devuelve true slo si se est) com/arando el obeto consigo mismo& (uando se re4uiera 4ue la
com/aracin de dos obetos no se base sim/lemente en su identidad se deber) redefinir el mtodo& .n caso de 4ue se o/te
/or redefinir el mtodo e.uals tambin deber) redefinirse el mtodo hash3 de tal modo 4ue dos obetos devuelvan el
mismo hash cuando al com/rarlos con e.uals se devuelva true&
>& :& : "a cl ase ClassLoader
"a clase Classoader crea la /osibilidad de cargar din)micamente una clase a /artir de su cdigo com/ilado& .l siguiente
fragmento de cdigo carga de disco la clase 4ue se le es/ecifica /or /ar)metros& Para ello se crea una clase 4ue *ereda de
F >D F
(a/5tulo > F .l /a4uete ava&lang
Classoader # 4ue im/lementa el mtodo loadClassData de manera 4ue crea desde disco un fluo de b#tes 4ue
contiene los b#tecodes de la clase a cargar&

import (ava.io.*7
import (ava.util.Aector7
public class Car,ador extends Classoader
/
public Class F?< "i!dClass1%tri!, !ame4 /
byte23 b G loadClassData1!ame47
return de"i!eClass1!ameE bE CE b.le!,th47
8
private byte23 loadClassData1%tri!, !ame4 /
try /
%tri!, !ombreG6.::6O!ameO6.class67
I!put%tream i! G new FileI!put%tream1!ombre47
Aector FB5te< bu""er G new AectorFB5te<147

int i G i!.read147
while1i UG =B4 /
bu""er.add11b5te4i47
i G i!.read147
8
byte 23 aux G new b5te2bu""er.si&e1437
for 1int co!t G C7 co!t F bu""er.si&e147 co!tOO4
aux2co!t3Gbu""er.,et1co!t47
return aux7
8
catch1Exceptio! e4 /
return null7
8
8
8
.l siguiente cdigo carga la clase Deportivo 4ue corres/onde a una im/lementacin de la clase Coche&

public static void mai!1%tri!,23 ar,s4 /
try /
Classoader loader G new Car,ador147
Class u!#coche G loader.loadClass16Deportivo647
Coche c G 1Coche4 u!#coche.!e;I!sta!ce147
c.acelerar147
8
catch1Exceptio! e4 /
%5stem.out.pri!t1e.,etMessa,e1447
8
8
>& <& (l ases /ara el mane o de cadenas de caracteres
$ava /ro/orciona varias clases /ara facilitar la mani/ulacin de cadenas caracteres frente al uso directo de arra#s de
caracteres& .stas clases son: CharBu""er3 %e,me!t3 %tri!,3 %tri!,Builder # %tri!,Bu""er&
(om/arten todas ellas 4ue im/lementan la interfaz Char%e.ue!ce3 la cual se caracteriza /rinci/almente /or ofrecer el
mtodo charAt14 # le!,th14.
(ada una de estas clases a/orta ciertas ventaas de uso 4ue desgraciadamente tienen un coste en eficiencia3 /or lo 4ue no se
/uede elegir un enfo4ue como el menor3 sino 4ue es conveniente estudiar cu)l es la clase m)s adecuada /ara cada caso&
"a clase CharBu""er es la m)s eficiente tras el arra#s de caracteres3 /ero tambin es la 4ue menos mtodos de tratamiento
a/orta&
"a clase %tri!, es la m)s conocida debido a 4ue todos los obetos /oseen un mtodo to%tri!,14 /ro/orciona multitud
de mtodos /ara facilitar el tratamiento de cadenas de caracteres: substri!,14E trim14E compareTo14E
toCharArra514E valuea"14& "os arra#s de caracteres res/ecto a la clase %tri!, dis/onen de las /ro/iedades
autobo0i ng # autounbo0i ng3 de manera 4ue el com/ilador convierte un arra# de caracteres en un %tri!, # un %tri!,
en un arra# de caracteres autom)ticamente& Adem)s3 se *an sobrecargado los o/eradores O # OG /ara /ermitir una notacin
sim/le /ara la concatenacin de un %tri!, con otro o con cual4uier ti/o /rimitivo&
Adem)s la clase %tri!, /ro/orciona mtodos est)ticos 7como valuea"148 4ue /ermiten realizar o/eraciones sin tener
4ue crear obetos de la clase %tri!,&
F 9C F
Disear # Programar todo es em/ezar
Por otro lado *a# 4ue tener en cuenta 4ue cual4uier cadena entre comillas es convertida en un %tri!, autom)ticamente
/or el com/ilador3 de manera 4ue no se /ueden com/arar dos obetos %tri!, usando el o/erador GG /ues se est)
com/arando la referencia a un obeto %tri!, # no el obeto en si mismo&
%tri!, texto G 6^! arra5 de caracteres se co!vierte e! %tri!,67
%tri!, !umero G cade!a O 6E(emplo67 ))El operador O est@ sobrecar,ado
!umero OG J7 ))El operador OG co!vierte el J e! cade!a
Una caracter5stica im/ortante de la clase %tri!, es 4ue es i nmutabl e3 es decir3 un %tri!, no se /uede modificar& As53
aadir un car)cter a un %tri!, im/lica la creacin de un %tri!, nuevo& .ste com/ortamiento es adecuado en algunos
casos3 /ero mu# /oco eficiente cuando /or eem/lo se desea construir una cadena mediante la adicin de caracteres& Por ello
$ava /ro/orciona las clases %tri!,Builder # %tri!,Bu""er& .stas clases no son inmutables # /or tanto s5 /ermiten la
adicin de caracteres& "a diferencia entre ambas consiste en 4ue %tri!,Builder no es resistente a colisiones cuando se
utiliza desde mHlti/les *ilos simult)neamente3 mientras 4ue %tri!,Bu""er s5 lo es3 a coste de una menor eficiencia&
%i gura <=& F $erar4u5a de clases de usadas /ara mani/ulacin de cadenas de te0to&
%inalmente3 la clase %e,me!t se utiliza /ara mani/ular segmentos de otras cadenas de caracteres sin necesidad de co/iarlos
en un nuevo obeto&
>& =& "as e0ce/ci ones
.l maneo de errores siem/re *a constituido un as/ecto dif5cil de abordar& "a ma#or5a de es4uemas de tratamiento de
errores de/enden de la disci/lina del /rogramador # se basan en la devolucin de valores o en el uso de elementos comunes
a todo el cdigo 7variables o fic*eros comunes3 como el stderr de (8& Si no se sigue de forma rigurosa una estrategia bien
definida res/ecto al tratamiento de errores el resultado suele ser un /rograma inestable debido a situaciones de error no
contem/ladas&
.n los lenguaes de /rogramacin orientados a obetos el conce/to de error se cambia /or el de la situacin e0ce/cional 4ue
se /roduce cuando un obeto no /uede cum/lir su contrato& Una e0ce/ci n es un obeto 4ue se lanza en el momento en el
4ue ocurre una situacin e0ce/cional # 4ue se ca/tura cuando esa situacin e0ce/cional /uede tratarse 7reintentando3
realizando una accin alternativa o interrum/iendo la eecucin del /rograma8&
.n $ava3 /ara lanzar una e0ce/cin se usa la /alabra reservada thro;3 # el obeto 4ue se lanza debe ser *eredero de la clase
Thro;able o de alguna subclase de sta& Al lanzar la e0ce/cin se interrum/e la secuencia normal de eecucin3
recorrindose la /ila de llamadas *asta 4ue se encuentra un )mbito en el 4ue se ca/ture ese ti/o de e0ce/cin& Por eem/lo3
cuando el siguiente fragmento de cdigo detecta 4ue /odr5a /roducirse una divisin /or cero lanza una e0ce/cin&
...
int obte!erRatioDeCo!sumo 14 /
if 1$ilometrosRecorridos GG C4
throw new ArithmeticExceptio! 147
return litros ) $ilometrosRecorridos7
8
Para definir el )mbito en el 4ue se ca/tura una e0ce/cin # el )mbito de su tratamiento se utiliza la una estructura basada en
los toEens tr5FcatchF"i!all5 4ue se e0/one a continuacin&
Fblo.ue tr5< 99G tr5 S/S 2FCdi,o .ue puede producir la excepci!<3 S8S
2catchS1SFtipo de excepci!<S4S S/S 2FCdi,o .ue trata la excepci!<3 S8S3O
2"i!all5 S/S 2FCdi,o .ue se e(ecuta tras el tr5 o tras los catch<3 S8S3
F 9:F
(a/5tulo > F .l /a4uete ava&lang
.l blo4ue tr5 contiene el fragmento de cdigo 4ue se 1intenta2 eecutar& "a idea consiste en 4ue si la eecucin de ese
cdigo3 o de algHn mtodo eecutado /or ese cdigo3 a cual4uier nivel3 genera una e0ce/cin3 /ueda ser ca/turada en el
blo4ue catch corres/ondiente a su ti/o&
Una e0ce/cin del ti/o T slo /uede ser ca/turada /or un gestor del ti/o T o de un ti/o ascendiente de T& .n otras /alabras3
un blo4ue catch ca/tura las e0ce/ciones del ti/o 4ue declara # de los ti/os 4ue de l deriven& .ste com/ortamiento
/olimrfico *ace 4ue los catch deban situarse de m)s es/ec5ficos a m)s generales res/ecto al ti/o 4ue declaren& .n otro
caso3 nunca recibir)n entradas3 al estar ecli/sados /or ti/os m)s generales&
Una vez 4ue un blo4ue catch ca/tura una e0ce/cin3 la eecucin continHa de manera normal a no ser 4ue se lance otra
e0ce/cin& .s decir3 la situacin e0ce/cional desa/arece& Por ello los blo4ues catch deben situarse donde sean Htiles /ara
gestionar los errores 4ue ca/turan # no antes&
.l blo4ue "i!all5 contiene cdigo 4ue se desea 4ue siem/re se eecute antes de abandonar el blo4ue tr5Icatch& .sto
significa 4ue el blo4ue "i!all5 se eecuta se /roduzca e0ce/cin o no se /roduzca3 # se ca/ture o no se ca/ture& .l blo4ue
"i!all5 se eecutar) incluso si en alguno de los blo4ues se eecuta una instruccin retur!&
Para el eem/lo anterior el tratamiento de e0ce/ciones 4uedar5a como sigue:
EEE
try /
obte!erRatioDeCo!sumo147
8 catch1ArithmeticExceptio! e4 /
tratamie!toDeError+orExcepcio!Aritmetica1e47
8 catch1Thro;able t4 /
tratamie!toDeError+orCual.uieratraExcepcio!1t47
8 finally /
codi,obue%iempre%eE(ecuta147
8
>& =& : Ti /os de e0ce/ci ones
.n $ava *a# dos ti/os de e0ce/ciones: control adas 7c*ecEed e0ce/tions8 # no control adas 7unc*ecEed e0ce/tions8& Si
e0iste la /osibilidad de 4ue un mtodo lance e0ce/ciones controladas debe indicarlo obligatoriamente en su definicin
utilizando la /alabra reservada t*rows seguida de los ti/os de obetos 4ue /uede lanzar& Adem)s3 si un mtodo M llama a otro
4ue /uede lanzar cierta e0ce/cin E3 M debe tratar esa e0ce/cin o avisar de 4ue l tambin /uede lanzar la e0ce/cin E& "os
mtodos 4ue lancen e0ce/ciones no controladas no tienen /or4u declarar 4ue lanzan ningHn ti/o de e0ce/cin&
Derivada de Thro;able *a# dos clases: Error # Exceptio!& A su vez3 derivada de Exceptio! encontramos la clase
Ru!timeExceptio!& (ual4uier clase 4ue derive de Error o de Ru!timeExceptio! /odr) ser utilizada /ara generar
e0ce/ciones no controladas& Por otro lado3 las clases 4ue deriven directamente de .0ce/tion /ermitir)n crear e0ce/ciones
controladas&
%i gura <>& F $erar4u5a de clases de e0ce/cin&
Una e0ce/cin no es un valor devuelto /or una funcin& .sto *ace 4ue el tratamiento de errores se sim/lifi4ue res/ecto al
mtodo de devolucin de valores3 /ues no es necesario ir com/robando tras cada llamada a cada mtodo si todo va bien o
no& Adem)s3 una e0ce/cin no /uede ser ignorada3 lo 4ue garantiza 4ue la situacin e0ce/cional ser) tratada antes o des/us3
# 4ue /osiblemente ser) restablecida la eecucin normal del /rograma&
F 9< F
Disear # Programar todo es em/ezar
. em/l o de e0ce/ci ones en el ParEi ng
Si se e0amina el mtodo desocupar+la&a143 en el eem/lo de la clase +ar$i!, del /unto <&=&:C3 se com/robar) .ue
cuando no /ueda cum/lir su contrato3 /or estar el obeto +ar$i!, vac5o3 se lanzar) una e0ce/cin de ti/o
!ull+oi!terExceptio!& Si se desease 4ue el /rogramador3 usuario de la clase +ar$i!,3 obtuviese una e0/licacin m)s
detallada del /roblema se /odr5a utilizarse una e0ce/cin es/ec5fica& .l siguiente fragmento de cdigo define una clase
derivada de Ru!timeExceptio! /ara eem/lificar este caso&
import (ava.util.*7
class Error+ar$i!, extends Ru!timeExceptio! /
public %tri!, ,etMessa,e14 /
return 6El par$i!, est@ vac>o67
8
8
A continuacin se /resenta como deber5a ser el mtodo desocupar+la&a14 /ara 4ue lanzase e0ce/ciones
Error+ar$i!, cuando le sea im/osible desarrollar su cometido&
class +ar$i!, /
...
public void desocupar+la&a14 throws Error+ar$i!,/
if 1pla&aActual GG null4 /
throw new Error+ar$i!,147
8
...
8
...
8
%inalmente se /resenta el cdigo de un /rograma 4ue usa la clase +ar$i!,&
class +ar$i!,Mai! /
public static void mai! 1%tri!, 2 3 ar,4 /
+ar$i!, par$i!, G new +ar$i!,147
par$i!,.ocupar+la&a147
try /
par$i!,.desocupar+la&a147
8 catch 1Error+ar$i!, e4 /
%5stem.out.pri!tl! 1e.,etMessa,e1447
8
8
8
>& =& < .l uso /r)cti co de l as e0ce/ci ones
"as e0ce/ciones deben utilizarse con /recaucin /ara evitar 4ue su uso se transforme en algo /eor 4ue lo 4ue se intenta
sim/lificar3 es decir /eor 4ue tratar los errores mediante el uso de los valores devueltos /or los mtodos& A continuacin se
e0/onen algunos criterios 4ue deben seguirse:
"i mi tar el uso de e0ce/ci ones cont rol adas& "a e0ce/ciones controladas deben utilizarse solo cuando su
tratamiento /or un tercero im/li4ue tomar una decisin o 4ue como consecuencia de la e0ce/cin se deba realizar
algHn tratamiento lgico im/rescindible& .n el resto de casos deben utilizarse e0ce/ciones no controladas
7derivadas de Ru!timeExceptio!8& .n /articular no deben utilizarse e0ce/ciones controladas /ara e0/resar
errores relativos al mal uso de una clase /or /arte del /rogramador& "a e0ce/cin IaExceptio! lanzada /or
read cuando se /roduce un error en la lectura de un disco debe ser controlada3 /ues un fallo de lectura es algo
4ue3 aun4ue ines/erado3 no im/lica un fallo de /rogramacin # siem/re necesita un tratamiento 4ue no debe
omitirse& Por otro lado3 la e0ce/cin Arra5I!dexauta"Bou!ds es una e0ce/cin no controlada enviada /or $ava
cuando se intenta acceder m)s all) del l5mite de un arra#& Si la e0ce/cin fuese controlada cada mtodo 4ue usase
un arra# tendr5a 4ue tratarla o avisar 4ue la lanza3 cosa inHtil si tenemos en cuenta 4ue un /rograma bien escrito
nunca deber5a sobre/asar el l5mite de un arra#& Obsrvese 4ue3 cum/liendo este criterio3 en el eem/lo de la clase
+ar$i!, 4ue se *a /ro/uesto en el /unto anterior3 la clase Error+ar$i!, deriva de Ru!timeExcepcio!&
Uti l i zar e0ce/ci ones de $ava& F (uando el ti/o de error de una a/licacin sea similar a un error definido en el
AP+ de $ava debe usarse la clase de $ava& De esta forma se facilita al usuario de la clase la com/resin del error&
.ntre las e0ce/ciones m)s comunes del AP+ de $ava /odemos destacar: Ille,alAr,ume!tExceptio!E
ArithmeticExceptio!3 %ecurit5Exceptio!3 `ull+oi!terExceptio!E Ille,al%tateExceptio!3
Ille,alAr,ume!tExceptio! # I!dexauta"=Bou!dsExceptio!&
F 9=F
(a/5tulo > F .l /a4uete ava&lang
(ambi ar el ni vel de abst racci n de l as e0ce/ci ones& "as e0ce/ciones lanzadas /or un mtodo deben estar
al mismo nivel de abstraccin 4ue la clase 4ue im/lementa el mtodo& Por eem/lo3 la clase Tabla de un *i/ottico
/a4uete BaseDeDatos no debe lanzar e0ce/ciones de ti/o IaExceptio! cuando falle una o/eracin interna
contra un fic*ero au0iliar& Tal error se deber5a a un detalle interno de im/lementacin # /ara fomentar la
enca/sulacin no deber5a traslucir& .n vez de esto deber5a ca/turarse la IaExceptio! # definirse una clase
es/ecifica /ara las e0ce/ciones de la base de datos 4ue ser5a la 4ue se lanzar5a& Jo seguir esta norma *ar5a 4ue los
usuarios de la base de datos /udiesen no entender los mensaes de error&
Jo l anzar e0ce/ci ones i nnecesari as& .l enfo4ue de /rogramacin defensiva consiste en com/robar los
/ar)metros 4ue se reciben # en caso de ser incorrectos lanzar e0ce/ciones& .ste enfo4ue es errneo /or dos
razones: /rimero3 cuando el /rograma est bien construido esas com/robaciones ser)n innecesarias3 # segundo3 el
usuario del mtodo incorrectamente invocado no /uede *ace nada con el error3 slo corregir el /rograma& SegHn
esta recomendacin3 4uiz)s no fue tan buena la idea de definir la e0ce/cin Error+ar$i!, en el eem/lo anterior3
#a 4ue el cdigo anterior #a /roduc5a `ull+oi!terExceptio!&
.ncadenar l os mensa es de l as e0ce/ci ones& "as e0ce/ciones no controladas 4ue se generen deben
contener informacin suficiente /ara 4ue el /rogramador /ueda trazar el error& Para ello3 cuando se ca/tura una
e0ce/cin /ara cambiar su nivel de abstraccin3 se debe aadir3 al mensae de la e0ce/cin de alto nivel3 la
informacin de la e0ce/cin de bao nivel 4ue le dio origen&
. em/l o del uso de di ferentes ti /os de e0ce/ci ones
.n el siguiente eem/lo se utilizan los dos ti/os de e0ce/ciones& "a e0ce/cin Excepcio!+or`ocasoli!a de ti/o
controlada # las Excepcio!+or`oArra!cado e Ille,alAr,ume!tExceptio! no controladas& Obsrvese 4ue
mientras 4ue la /rimera obligatoriamente debe ser indicada # ca/turada3 las siguientes no&
)**
* Clase coche
* ?versio! P.C
*)
public class Coche /
private boolean motorE!ce!dido7 ))I!dica si el motor est@ e!ce!dido
private int velocidad7 ))I!dica la velocidad del coche
private int litroscasoli!a7
)**
* Co!structor de coche co! el motor apa,ado 5 velocidad !ula
* ?param litroscasoli!a itros de ,asoli!a co! los .ue se i!icia el coche
*)
public Coche1final int litroscasoli!a4 /
this.litroscasoli!a G litroscasoli!a7
8
)**
* E!cie!de el motor del coche.
* ?thro;s Excepcio!+orbuedare%i!casoli!a %i !os hemos .uedado si! ,asoli!a
*)
void arra!car14 throws Excepcio!+or`ocasoli!a /
))Comprobamos .ue te!emos ,asoli!a
if 1litroscasoli!a GG C4 /
throw new Excepcio!+or`ocasoli!a147
8
))E!ce!demos el motor
motorE!ce!dido G true7
8
)**
* Acelera el cocheE au!.ue se impide! valores superiores a BLC
* ?thro;s Excepcio!+or`oEstarArra!cado %i !o hemos arra!cado el coche
* se la!&a esta excepc>o!.
* Como es ru!time !o se declara e! el thro;s.
* ?thro;s Ille,alAr,ume!tExceptio! `o se puede pasar de BLC
*)
void acelerar1final int i!creme!to4 /
))Comprobamos .ue el motor est@ e!ce!dido
if 1UmotorE!ce!dido4 /
throw new Excepcio!+or`oArra!cado147
8
if 1velocidad O i!creme!to < BLC4 /
throw new Ille,alAr,ume!tExceptio!147
8
velocidad OG i!creme!to7 ))Aume!tamos la velocidad
8
8
F 9> F
Disear # Programar todo es em/ezar
.l cdigo /ara las e0ce/ciones ser5a:
public class Excepcio!+or`ocasoli!a extends Exceptio!/
))Como deriva de Exceptio! se debe declarar su la!&amie!to
))Adem@sE do!de se use es obli,atoria su captura o la delaraci! de la!&amie!to
8
public class Excepcio!+or`oArra!cado extends Ru!timeExceptio!/
8
.l cdigo de mai! /ara este eem/lo es:
package libro.e(emplos.cuatro.tres.u!o7
public class CocheMai! /
public static void mai!1%tri!,23 ar,s4 /
final Coche coche G new Coche1C47 ))Creamos u! coche si! ,asoli!a
try /
coche.arra!car147 ))i!te!tamos arra!car el coche si! ,asoli!a
8 catch 1Excepcio!+or`ocasoli!a e4 /
%5stem.out.pri!tl!16[`os hemos .uedado si! ,asoli!aU647
8
try /
coche.acelerar147 ))i!te!tamos acelerar el coche si! haberlo arra!cado
8 catch 1Excepcio!+or`oArra!cado e4 /
%5stem.out.pri!tl!16[El motor !o est@ arra!cadoU647
8 catch 1Exceptio! e4 / ))Esta captura debe ser la _ltima
%5stem.out.pri!tl!16[Al,_! otro errorU647 ))e! otro caso lo captura todo
8
8
8
T la salida obtenida /or este /rograma ser):
(ava CocheMai!
[`os hemos .uedado si! ,asoli!aU
[El motor !o est@ arra!cadoU
Probl em)ti ca de l as e0ce/ci ones cont rol adas
"as e0ce/ciones controladas *an creado muc*a controversia en el mundo del desarrollo de software& (uando a/arecieron
como /arte del lenguae $ava /r)cticamente toda la comunidad estaba de acuerdo en lo Htil # necesarias 4ue eran /ara un
buen tratamiento de los errores& Parec5a una forma sencilla de *acer 4ue las clases fueran usadas de forma correcta incluso
cuando lanzaran e0ce/ciones& Sin embargo3 ese sentimiento de 1esto es lo 4ue #o necesitaba2 /rovoc 4ue se abusara de
ellas3 ocasionando usto lo contrario de lo 4ue se 4uer5a /romover&
Obligar al tratamiento de una e0ce/cin3 mediante las e0ce/ciones controladas3 en muc*as ocasiones se convierte en algo
engorroso # /oco Htil3 #a 4ue el usuario de dic*a clase no /uede *acer nada /ara solucionar dic*a e0ce/cin salvo relanzarla
a un nivel su/erior& (uando esto ocurre las e0ce/ciones controladas solo sirven /ara oscurecer el cdigo fuente con
innecesarios blo4ues tr5 # catch 4ue dificultan su com/resin # mantenimiento&
Por ello3 muc*os o/inan 4ue las e0ce/ciones controladas no son necesarias #a 4ue3 adem)s de los /roblemas comentados3
ningHn otro lenguae las *a vuelto a im/lementar& Solo unos /ocos aHn las defienden3 aun4ue /untualizando 4ue no debe
abusarse de ellas como se *a *ec*o en ocasiones& .n general se recomienda no utilizar e0ce/ciones controladas3 #a 4ue el
uso de e0ce/ciones no controladas es suficiente /ara manear los errores # no a/arecen los /roblemas descritos&
>& >& Sobrecarga de l os mt odos b)si cos de object
"os siguientes /untos tratan en detalle algunos de los mtodos m)s im/ortantes de $ava 4ue suelen sobrecargarse /ara dar
una funcionalidad adecuada a las clases 4ue se constru#en&
>& >& : +nterfaz Cloneable
Ta se *a dic*o 4ue cuando en $ava se utiliza el o/erador de asignacin entre dos referencias3 el obeto involucrado no se
co/ia3 sino 4ue se obtienen dos referencias al mismo obeto& .n algunas situaciones esto /uede no ser deseable& Por eem/lo3
imaginemos cuando se /asa un obeto como /ar)metro a un mtodo& Si el mtodo modifica el obeto3 esta modificacin
afectar) tambin al obeto del invocador del mtodo /or4ue en realidad es el mismo& Si fuese necesario evitar esto se deber5a
realizar una co/ia de tal obeto&
"a alternativa cl)sica /ara resolver este /roblema consiste en la im/lementacin del constructor de co/ia& Rste es un
constructor 4ue recibe como /ar)metro un obeto de la /ro/ia clase3 /ara construir a /artir de l una co/ia& Sin embargo3
F 99F
(a/5tulo > F .l /a4uete ava&lang
esta solucin no es v)lida cuando se desea 4ue una interfaz reflee la /osibilidad de co/iar 7recordemos 4ue en las interfaces
no se /ueden declarar constructores8&
Para *acer 4ue este ti/o de co/ias se realicen con un formato comHn3 $ava /ro/orciona en la clase ab(ect el mtodo
/rotegido clo!e14& .l mtodo se declara como protected /ara im/edir 4ue se clonen obetos si el diseador de una
clase no lo desea& Por eso3 si se desea 4ue se /uedan clonar obetos es /reciso *acer /Hblico un mtodo 4ue lo invo4ue& "a
ma#or5a de las clases del AP+ de $ava lo tienen /Hblico&
.l mtodo clo!e14 im/lementado en la clase ab(ect utiliza la refle0in /ara co/iar los valores de las /ro/iedades del
obeto& As53 las referencias de un obeto clonado a/untan a los mismos obetos 4ue el original& .sto es3 /or defecto al clonar
un obeto no se realiza un clonado recursivo de los obetos en l contenidos& (uando no se desea este com/ortamiento es
/reciso sobrecargar clo!e143 # /rogramar e0/l5citamente 4ue se clonen los obetos referenciados /or las /ro/iedades&
Por defecto no es /osible clonar los obetos de una clase& Para em/ezar se debe declarar el mtodo como public3 #a 4ue en
ab(ect es protected& Adem)s3 se debe indicar 4ue dic*a clase im/lementa la interfaz Clo!eable& .sta interfaz3 cu#a
declaracin est) vac5a3 se utiliza /ara indicar 4ue sobre esa clase est) /ermitido invocar al mtodo clo!e143 en otro caso
$ava lanzar) una e0ce/cin del ti/o Clo!e`ot%upportedExceptio!&
.l siguiente eem/lo *ace /Hblico un mtodo /ara clonar obetos de la clase Coche& "a /ro/iedad velocidad se co/ia al
invocar a clo!e14 de ab(ect3 /ero el obeto Rueda no se clona3 sino 4ue sim/lemente se co/ia su referencia& Por eso3 en
el eem/lo se aade el cdigo /reciso /ara 4ue se clone tambin el obeto rueda&
class Rueda implements Clo!eable /
public Rueda clo!e14 throws Clo!e`ot%upportedExceptio! /
return 1Rueda4 super.clo!e147
8
8
class Coche implements Clo!eable /
public int velocidad7
public Rueda r G new Rueda147
public Coche clo!e14 throws Clo!e`ot%upportedExceptio! /
Coche c G 1Coche4 super.clo!e147
c.r G r.clo!e147
return c7
8
8
(lone /resenta una serie de /roblemas 4ue deben tenerse en cuenta& Para em/ezar *a# recordar 4ue si clo!e no se
im/lementa correctamente en una clase base3 las clases derivadas ser)n inca/aces de co/iar correctamente a4uellas
/ro/iedades /rivadas 4ue re4uieran un tratamiento es/ecial& Adem)s3 clo!e no /odr) modificar las /ro/iedades finales de
ningHn obeto clonado3 /ues las /ro/iedades finales solo se /ueden modificar en los constructores& Por todo esto3 se
recomienda utilizar un constructor co/ia3 # slo cuando sea im/rescindible im/lementar clo!e *aciendo 4ue invo4ue a
dic*o constructor&
>& >& < "os mtodos euals # hashCode
Ta se *a comentado 4ue3 en su im/lementacin /or defecto3 e.uals14 solo devuelve true si se com/ara un obeto
consigo mismo& .sta im/lementacin del mtodo e.uals143 /or /arte de $ava3 /uede resultar insuficiente en muc*os usos
/r)cticos& Por eem/lo3 /uede ser deseable 4ue la com/aracin de dos obetos clonados devuelva true 7/or defecto3 la
com/aracin de dos obetos clonados devolver) "alse3 debido a 4ue son dos instancias diferentes8&
Para 4ue las bibliotecas de $ava funcionen correctamente sobre una clase 4ue redefine e.uals143 dic*a im/lementacin
debe cum/lir las siguientes /ro/iedades:
+dentidad&F a.e.uals1a4 debe devolver true3 /ara todo a&
Simetr5a&F a.e.uals1b4 si # solo si b.e.uals1a43 /ara todo a # b&
Transitividad&F Si a.e.uals1b4 # b.e.uals1c4 entonces a.e.uals1c43 /ara todo a b # c&
.lemento neutro&F a.e.uals1!ull4 debe devolver "alse3 /ara todo a&
+nmutabilidad&F Si en algHn momento se cum/le a.e.uals1b4 o Ua.e.uals1b4 su valor no /uede cambiar&
Adem)s3 toda sobrecarga del mtodo e.uals14 debe ir acom/aada de una reim/lementacin del mtodo hashCode14
sobre las mismas /ro/iedades3 de manera 4ue si e.uals devuelve true /ara dos obetos3 hashCode14 devuelva un valor
idntico al ser invocado sobre esos obetos& .l siguiente fragmento de cdigo muestra un eem/lo donde se a/recian estos
detalles&
F 9? F
Disear # Programar todo es em/ezar
class Coche /
private final int matricula7
public Coche 1int matricula4 /
this.matricula G matricula7
8
public boolean e.uals1ab(ect o4 /
if 1Uo instanceof Coche4 ))%i o es !ull i!sta!ceo" devuelve "alse
return "alse7
return 11Coche4o4.matricula GG matricula7
8
public int hashCode14 /
return matricula7
8
8
>& >& = +nterfaz Comparable
"a interfaz (om/arable3 4ue tambin se encuentra en el /a4uete (ava.la!,3 /ermite realizar com/aracin entre los obetos
de a4uellas clases 4ue la im/lementan& "a interfaz Comparable tiene slo un mtodo: i!t compareTo1ab(ect4& .ste
mtodo tiene /or obeto devolver un valor igual a cero si el resultado de la com/aracin es la igualdad3 un valor negativo si el
obeto 4ue recibe el mensae es menor 4ue el 4ue se le /asa como argumento3 # un valor /ositivo si es ma#or&
class Coche implements Comparable /
private final int matricula7

public int compareTo1ab(ect o4 /
Coche c G 1Coche4 o7
if 1this. matricula GG c.matricula 4
return C7
else if 1this. matricula < c.matricula 4
return B7
else
return =B7
8
8
Todas las clases definidas en los /a4uetes est)ndar de $ava suelen im/lementar esta interfaz& Por eem/lo la clase %tri!,
cum/le la interfaz Comparable&
Al igual 4ue en e.uals143 es im/ortante 4ue la com/aracin se base en /ro/iedades inmutables del obeto3 en otro caso3
una lista ordenada de obetos /odr5a dear de estarlo como consecuencia del cambio de una /ro/iedad de uno de los obetos
contenidos&
>& 9& "a concur renci a
$ava a/orta varios elementos 4ue facilitan la concurrencia en los /rogramas& .l /rinci/al consiste en 4ue /ara crear un *ilo
se/arado de eecucin 7o t*read8 basta con *eredar de la clase Thread e im/lementar el mtodo ru!14 4ue en la clase
Thread es abstracto&
Una vez eecutado el constructor de un obeto de una clase derivada de la clase Thread se debe invocar al mtodo
start14 /ara iniciar su eecucin& Tras esta llamada3 la m)4uina virtual de $ava llama al mtodo ru!14 # este comienza su
eecucin en el nuevo t*read&
Si no se desea *eredar de la clase Thread tambin es /osible im/lementar la interfaz Ru!!able3 aun4ue en este caso el
t*read ser) iniciado inmediatamente tras la creacin del obeto llam)ndose al mtodo ru!14&
.n /rogramacin concurrente se suelen /roducir diferentes ti/os de /roblemas& Podemos citar tres /rinci/ales:
"as condi ci ones de car rera3 4ue ocurren cuando dos *ilos acceden a un recurso simult)neamente # como
consecuencia el resultado del acceso es indeterminado&
"os bl o4ueos mut uos 7o deadl ocEs83 4ue /aralizan la eecucin de un /rograma3 debido a 4ue los *ilos 4uedan
es/erando sucesos 4ue nunca se /roducir)n3 /or4ue de/enden unos de otros # est)n todos es/erando&
"a i nani ci n 7o st ar vat i on83 4ue ocurre cuando un *ilo se 4ueda es/erando un suceso 4ue /uede no ocurrir o
4ue ocurre /oco frecuentemente&
Para evitar estos /roblemas3 # /ara facilitar el desarrollo de /rogramas concurrentes3 $ava a/orta varios mecanismos& As53
$ava dis/one de mecanismos /ara marcar regiones de e0clusin mutua 7en las 4ue solo un *ilo /uede estar activo8 # /aso de
F 9@F
(a/5tulo > F .l /a4uete ava&lang
mensaes 7/ara 4ue los *ilos se comuni4uen # eviten los /roblemas8& Adem)s3 el /a4uete (ava.util.co!curre!t3 aade
sobre estos mecanismos otros m)s sofisticados 7como sem)foros3 colas blo4ueantes o contadores8&
Adem)s3 muc*as clases de $ava son inmutables3 como /or eem/lo %tri!,& .l uso de clases inmutables evita muc*os
/roblemas en )mbitos concurrentes3 /ues como los obetos no /ueden cambiar3 no se /ueden /roducir condiciones de
carrera en ellos&
>& 9& : "a /al abra reser vada synchroni!ed
.ste mecanismo /ermite asegurar 4ue dos *ilos de eecucin no /odr)n /enetrar a la vez en cierta regin de un obeto3
creando lo 4ue se conoce como una regi n de e0cl usi n mutua&
.l siguiente cdigo ilustra como definir un )mbito 4ue contenga la /arte donde se /uedan /roducir colisiones&
class Coche /
int velocidad7
public void acelerar1int v4 /
if 1v < C4
synchroni!ed /
velocidad OG v7
8
8
8
"a /alabra reservada s5!chro!i&ed se /uede utilizar tambin /ara crear monitores& Un moni tor /ermite la eecucin en
e0clusin mutua de los mtodos o )mbitos eti4uetados como s5!chro!i&ed dentro de una instancia de una clase& .l *ilo
4ue no /ueda entrar en una regin marcada /or s5!chro!i&ed es/erar) a 4ue el otro *ilo abandone la regin& As53 $ava
/ermite dotar a la /arte est)tica # a cada obeto de una clase con un monitor diferente&
As53 como la siguiente clase es/ecifica acelerar14 como s5!chro!i&ed3 se /uede invocar dic*o mtodo desde dos *ilos
de eecucin sin 4ue se /roduzcan colisiones&
class Coche /
int velocidad7
public synchroni!ed void acelerar1int v4 /
velocidad OG v7
8
8
"a /alabra reservada s5!chro!i&ed tambin se /uede utilizar al crear un )mbito3 /as)ndole un obeto sobre el 4ue realizar
la sincronizacin& .n este caso /ara iniciar un blo4ue de cdigo 4ue se desea 4ue se eecute en e0clusin mutua& .sta
e0clusin mutua se realiza a nivel de la instancia del obeto 4ue la eecuta& .l siguiente fragmento de cdigo ilustra este uso
sobre un obeto de la clase Aparcamie!to del ca/5tulo <&
class Coche /
Aparcamie!to aparcamie!to G new Aparcamie!to147
public void aparcar14 /
synchroni!ed 1aparcamie!to4/
aparcamie!to.Aparcar1this47
8
8
8
>& 9& < (omuni caci n entre *i l os
$ava define cuatro valores diferentes /ara definir el estado de un t*read dentro de un obeto o de la /arte est)tica de una
clase: nuevo3 e ecut abl e3 muer to # bl o4ueado&
Un *ilo est) en estado nuevo cuando acaba de iniciarse # aHn no *a comenzado a eecutarse& .st) en estado eecutable
cuando se est) eecutando o cuando no lo est) /ero nada im/ide 4ue estuviese eecut)ndose& T est) muerto cuando *a
finalizado su mtodo ru!&
Un t*read en un obeto est) blo4ueado si:
,a llamado a sleep143 indicando el la/so de tiem/o 4ue duerme el *ilo&
Si se est) es/erando /or algHn evento de .ntradaISalida&
Si est) es/erando /ara eecutar cdigo eti4uetado como s5!chro!i&ed # aHn no *a /odido *acerlo&
F 9; F
Disear # Programar todo es em/ezar
T finalmente3 si se *a llamado a ;ait14 # est) es/erando 4ue otro t*read realice una llamada al mtodo
!oti"514 del obeto& .ste caso es el 4ue /ermite la comunicacin entre *ilos3 siendo en realidad la llamada a
!oti"514 un mensae 4ue env5a un *ilo a otro 7o a otros si se usa !oti"5All148&
%inalmente cabe decir 4ue $ava tambin /ermite asignar a los t*reads un nivel de /rioridad mediante los mtodos
,et+riorit514 # set+riorit514& As53 el /lanificador de la !)4uina 'irtual de $ava dis/one de un criterio con el 4ue
distribuir el tiem/o de eecucin entre los diferentes t*reads&
>& ?& "os ti /os enumerados
"os ti/os enumerados tambin *an sido aadidos en la versin 9 de $ava& Antes3 la definicin de ti/os enumerados no estaba
so/ortada en $ava&
(omo sustituto sim/le3 algunos /rogramadores utilizaban /ro/iedades enteras est)ticas # finales& .sta solucin ten5a el
/roblema de 4ue no aseguraba el ti/ado3 /ermitiendo mezclar estos /rimitivos enumerados con enteros& .l siguiente eem/lo
muestra una definicin t5/ica sobre $ava :&> /ara el enumerado Dia&
class Dia /
public final static int lu!es G C7
public final static int martes G B7
public final static int miercoles G H7
public final static int (ueves G K7
public final static int vier!es G L7
public final static int sabado G J7
public final static int domi!,o G D7
8
(omo se ve en el siguiente eem/lo3 esta solucin e4uivale en ca/acidad a los enumerados de ( # (OO&
int dB G Dia.lu!es7
int dH G Dia.martes7
boolean posterior G 1dH < dB47
"a sinta0is de estos enumerados resultaba com/lea& Pero3 lo /eor es 4ue /otenciaban ciertos efectos indeseables3 como
mezclar el valor entero del enumerado con su sem)ntica& Por eem/lo3 al sumar : al lu!es obtenemos el martes3 /ero al
sumar : al domi!,o obtenemos un valor fuera del enumerado& .ste /roblema se deriva de la mezcla de ti/os&
Otra /osibilidad3 m)s com/lea3 consist5a en utilizar una clase de la 4ue slo se creaban un nHmero limitado de obetos3 4ue
corres/ond5an a los valores enumerados 7/atrn de diseo .num8& Para *acer esto se necesita 4ue el constructor sea /rivado
# 4ue se creen est)ticamente los obetos como /arte de la clase& .l siguiente fragmento de cdigo muestra el caso&
class Dia /
private Dia14 /8
public final static Dia lu!es G new Dia147
public final static Dia martes G new Dia147
public final static Dia miercoles G new Dia147
public final static Dia (ueves G new Dia147
public final static Dia vier!es G new Dia147
public final static Dia sabado G new Dia147
public final static Dia sabado G new Dia147
8
.sta solucin resuelve el /roblema del ti/ado& Adem)s3 /ermite aadir mtodos 4ue /ueden ser convenientes /ara com/arar
elementos del enumerado o /ara describir sus /ro/iedades& Sin embargo3 la definicin sigue siendo demasiado com/lea&
"a sinta0is introducida con la versin 9 /ermite definir un ti/o enumerado con una sinta0is similar a la de (OO& !ientras
4ue3 internamente3 se crea una estructura similar a la comentada&
e!um FIde!ti"icador del tipo< /2ide!ti"icadores3*87
.l siguiente eem/lo define el ti/o Dia # lo usa&
enum Dia /^`E%E MARTE%E MIERCaE%E -^EAE%E AIER`E%E %ABADaE DaMI`ca87
Dia d G ^`E%7
F 9DF
(a/5tulo > F .l /a4uete ava&lang
Adem)s3 como com/lemento a la introduccin de los ti/os enumerados la instruccin s;itch se am/li /ara /ermitir su
uso sobre ellos # no solo sobre e0/resiones aritmticas enteras&
.n la im/lementacin de e!um en $ava lo 4ue estamos *aciendo en realidad es definir una clase # /or ello un enumerado
/uede tener mtodos # /ro/iedades& De *ec*o3 como todas las clases en $ava3 el ti/o e!um *ereda de la clase ab(ect # /or
ello #a trae de serie varios mtodos& .sto *ace 4ue los enumerados en $ava sean mu# /otentes3 #a 4ue /ermiten 4ue se le
/uedan aadir com/ortamiento como a cual4uier otra clase& 'eamos el eem/lo del enumerado de los d5as de la semana /ero
con algo m)s de com/ortamiento&
enum Dias%ema!a /
^`E%16u!es64E
MARTE%16Martes64E
MIERCaE%16Miercoles64E
-^EAE%16-ueves64E
AIER`E%16Aier!es64E
%ABADa16%abado64E
DaMI`ca16Domi!,o647
private final %tri!, !ombre7
private Dias%ema!a1%tri!, !ombre4 /
this.!ombre G !ombre7
8
?averride
public %tri!, to%tri!,14 /
return !ombre7
8
public Dias%ema!a si,uie!te14 /
switch1this4 /
case ^`E% 9 return MARTE%7
case MARTE% 9 return MIERCaE%7
case MIERCaE% 9 return -^EAE%7
case -^EAE% 9 return AIER`E%7
case AIER`E% 9 return %ABADa7
case %ABADa 9 return DaMI`ca7
case DaMI`ca 9 return ^`E%7
default 9 throw new Ille,al%tateExceptio!147
8
8
8
Si observamos las diferencias con la anterior im/lementacin /odemos ver 4ue se *an aadido varias funcionalidades al
enumerado& Para em/ezar3 se *a creado un constructor /ara guardar la cadena con la 4ue se desea 4ue se escriba dic*o
enumerado al invocar to%tri!, 7recordemos 4ue e!um *ereda de ab(ect /or lo 4ue /odemos sobreescribir to%tri!,8&
Adem)s3 se *a aadido un mtodo a la clase /ara 4ue devuelva el d5a siguiente al actual&
boolean iguales " MIERCaE%.si,uie!te14 GG -^EAE%7
Tal # como se *a visto3 se /ueden definir constructores /ara los enumerados de forma 4ue cada obeto del enumerado
guarde una /ro/iedad 4ue lo defina& Una muestra de la /otencia de los enumerados en $ava est) en 4ue dic*a variable /uede
a su vez ser un enumerado de otro ti/o& 'eamos un eem/lo /r)ctico&
enum TipoDia /
ABaRABEE
`a#ABaRABE7
8
enum Dias%ema!aClasi"icados /
^`E%16u!es6E TipoDia.ABaRABE4E
MARTE%16Martes6E TipoDia.ABaRABE4E
MIERCaE%16Miercoles6E TipoDia.ABaRABE4E
-^EAE%16-ueves6E TipoDia.ABaRABE4E
AIER`E%16Aier!es6E TipoDia.ABaRABE4E
%ABADa16%abado6E TipoDia.`a#ABaRABE4E
DaMI`ca16Domi!,o6E TipoDia.`a#ABaRABE47
private final %tri!, !ombre7
private final TipoDia tipoDia7
private Dias%ema!aClasi"icados1%tri!, !ombreE TipoDia tipoDia4 /
this.!ombre G !ombre7
this.tipoDia G tipoDia7
8
?averride
public %tri!, to%tri!,14 /
return !ombre7
8
F ?C F
Disear # Programar todo es em/ezar
public Dias%ema!aClasi"icados si,uie!te14 /
switch1this4 /
case ^`E% 9 return MARTE%7
case MARTE% 9 return MIERCaE%7
case MIERCaE% 9 return -^EAE%7
case -^EAE% 9 return AIER`E%7
case AIER`E% 9 return %ABADa7
case %ABADa 9 return DaMI`ca7
case DaMI`ca 9 return ^`E%7
default 9 throw new Ille,al%tateExceptio!147
8
8
public boolean so5aborable14 /
return tipoDia.e.uals1TipoDia.ABaRABE47
8
8
Aun4ue3 tal # como *emos visto3 los enumerados son una *erramienta mu# /otente3 no es bueno abusar de ellos3 #a 4ue
son obetos est)ticos 4ue dificultan la /rueba de los com/onentes 4ue los usan& Se deben usar enumerados cuando e0iste un
gru/o finito # conocido de obetos 4ue no van a modificar su estado nunca 7los d5as de la semana o los /lanetas del sistema
solar son un conunto finito # conocido8&
>& @& .nvol turas
Ta se *a comentado 4ue los ti/os /rimitivos en $ava no son clases& .sta /articularidad *a sido criticada /or los /uristas de la
Programacin Orientada a Obetos # alabada con la misma intensidad /or los /rogramadores /reocu/ados /or la eficiencia
del cdigo&
Para sosla#ar este as/ecto3 $ava introduce las cl ases de envol t ura& .stas clases recubren cada uno de los ti/os /rimitivos
en una clase3 /ara 4ue se /uedan utilizar como obetos& Adem)s3 asociado a cada una de estas clases3 $ava /ro/orciona un
conunto de mtodos 4ue facilitan las transformaciones # el resto de o/eraciones 4ue con frecuencia es /reciso realizar con
los ti/os /rimitivos 7como conversiones entre ti/os o conversiones a te0to8&
Obsrvese 4ue como la definicin de los genricos en $ava im/ide su uso sobre los ti/os /rimitivos3 los envoltorios /asan a
ser im/rescindibles&
.l diagrama de la %igura <9 muestra las relaciones de *erencia entre las diferentes clases de envoltura # algunos de sus
mtodos&
+%i3it01
+3et4umeric"alue01
+u$$erCase01
+lo5erCase01
Character
-T67E
-F89/E
Boolean
+compareTo()
+equals()
:inter;ace<
Co)para/le
+!alue=;01
+to/trin301
+to=ctal/trin301
+toHex/trin301
+$arse>nte3er01
+$arse9on301
+$arse#&te01
+$arse9on301
Nu)/er
+$arse9on301
Long
+$arse>nte3er01
Integer
+$arse/'ort01
Short
+$arse#&te01
B+te
+is4an01
+is>n;inite01
+;loatTo>nt#its01
+int#itsToFloat01
+$arseFloat01
-4a4
Float
+is4an01
+is>n;inite01
+%oubleto>nt#its01
+int#itsToDouble01
+$arseDouble01
Dou/le
%i gura <9& F Diagrama con los envoltorios de los ti/os /rimitivos&
A /artir de la versin :&93 # al igual 4ue ocurr5a con la clase %tri!, # los arra#s de caracteres 7ver ca/5tulo <83 a la relacin
entre los ti/os /rimitivos # las clases de envoltura se les *a dotado de la /ro/iedad de autobo0ing # autounbo0ing& De esta
F ?:F
(a/5tulo > F .l /a4uete ava&lang
forma es /osible crear un obeto de una clase de envoltura utilizando directamente una asignacin desde un ti/o /rimitivo&
Tambin es /osible el /aso inverso3 es decir obtener un ti/o /rimitivo desde un obeto de envoltura&
I!te,er a G HJ7
int b G P7
a==7
I!te,er c G a O b7
(omo se /uede observar en el eem/lo anterior3 los o/eradores aritmticos # lgicos tambin se *an sobrecargado /ara 4ue
actHen sobre las clases de envoltura de la misma forma3 /ara aadir nuevas funcionalidades3 en 4ue lo *ac5an sobre los ti/os
/rimitivos& ,a# 4ue tener cuidado es/ecialmente con el o/erador de igualdad 7 GG8 #a 4ue al usarlo sobre obetos de
envoltura *a# 4ue recordar 4ue son obetos # 4ue /ueden com/artir el mismo valor a/arente3 /ero no la misma direccin de
memoria&
I!te,er a G HPJ7
I!te,er b G HPJ7
boolean c G 1a GG b47 ))Devulve "also
De igual forma las /ro/iedades de autobo0ing # autounbo0ing facilitan el uso de contenedores con ti/os /rimitivos& Debe
observarse 4ue al declarar el contenedor se debe utilizar la clase envoltorio corres/ondiente en vez el ti/o /rimitivo
directamente3 /ues se /recisa un ti/o no /rimitivo& Sin embargo3 luego se /ueden utilizar las funciones de insercin #
recu/eracin directamente sobre el ti/o /rimitivo3 /ues el autobo0ing # el autounbo0ing se encargan de las conversiones&
AectorDi!amico FI!te,er< v G new AectorDi!amico FI!te,er<147
v.po!er1J47
int x G v.obte!er147
>& ;& "ecturas recomendadas
1.ffective $ava23 <V edicin3 $os*ua Aloc*3 AddisonFGesle#3 <CC;& -ran libro /ara /rofundizar en la /rogramacin en $ava
4ue todo entendido debe leer de /rinci/io a fin& .l libro se divide en /e4ueos ca/5tulos 4ue tratan as/ectos es/ec5ficos del
lenguae # de su correcto uso& .l ca/5tulo = trata la im/lementacin de algunos de los mtodos de ob(ect comentados a4u5&
>& D& . erci ci os
. erci ci o :
Se desea crear la clase ista 4ue im/lementa una lista de obetos de la clase ab(ect # 4ue im/lementa de manera /Hblica
al menos los mtodos 4ue se detallan a continuacin&
void pushBac$1ab(ect o4 )) I!serta por el "i!al
void pushFro!t1ab(ect o4 )) I!serta por el pri!cipio
void popBac$14 )) Elimi!a por el "i!al
void popFro!t14 )) Elimi!a por el pri!cipio
ab(ect "ro!t14 )) Devuelve el valor .ue est@ e! el pri!cipio
ab(ect bac$14 )) Devuelve el valor .ue est@ e! el "i!al
int si&e14 )) Devuelve el !_mero de eleme!tos de la lista
void clear14 )) Borra todos los eleme!tos de la lista
a8 .scribir en $ava el cdigo corres/ondiente a la clase ista 4ue im/lementa una lista de obetos de la clase
ab(ect& .sta clase debe contener al menos los mtodos 4ue se detallan a continuacin&
b8 (onstruir una clase istaE!terosB 4ue cuente con mtodos an)logos a los de la clase "ista /ero 4ue aada
otros 4ue slo /ermitan almacenar enteros 7obetos de la clase envoltorio I!te,er8& Para ello usar *erencia3 es
decir3 *acer 4ue istaE!terosB *erede de ista&
c8 (onstruir una clase istaE!terosH 4ue cuente con mtodos an)logos a los de la clase ista /ero 4ue slo
/ermita almacenar enteros 7obetos de la clase envoltorio I!te,er8& Para ello usar com/osicin3 es decir *acer 4ue
istaE!terosH tenga dentro un obeto de la clase ista&
d8 Decidir 4u enfo4ue es meor /ara construir la lista de enteros 7ti/o istaE!terosB o ti/o istaE!terosH8 #
/or 4u razn& .0/licar tambin /or 4u se debe usar la clase envoltorio I!te,er en vez de usar directamente el
ti/o /rimitivo i!t al almacenar los enteros en la lista&
F ?< F
(a/5 tul o 9 Di seo de (l ases
A)sicamente3 la construccin de /rogramas orientados a obetos consiste en la definicin de clases& .n este ca/5tulo se
e0/ondr)n diferentes *erramientas utilizables en un enfo4ue to/Fdown a/o#ado en las diferentes *erramientas 4ue U!"
/ro/orciona&
9& :& Di seo t o/Fdown a/o#ado en U!"
Ta se *a comentado 4ue la creacin de clases a/orta numerosas ventaas: es un buen mecanismo /ara enca/sular # reutilizar
el cdigo3 acerca el vocabulario del lenguae de /rogramacin al del /roblema a resolver3 etc&
.n las eta/as iniciales de desarrollo de un /ro#ecto se suelen usar algunos mtodos /ara descubrir las clases 4ue se deben
crear& Uno de ellos consiste en identificar las clases con los sustantivos de una descri/cin del /roblema& Otro consiste en
escribir taretas 4ue re/resentan las clases # acom/aarlas de una descri/cin de sus res/onsabilidades& .n cual4uier caso3
estos /rimeros /asos /ermiten obtener un conunto de clases 4ue luego se va com/letando con nuevas clases siguiendo un
enfo4ue to/Fdown&
Desde un /unto de vista /uramente constructivo3 la creacin de una clase nueva se realiza utilizando tres ti/os de relaciones:
"as rel aci ones de de/endenci a entre ob etos& (reando una clase 4ue utiliza a otras como /arte de sus
mtodos 7en la im/lementacin o en los /ar)metros 4ue recibe8&
"as rel aci ones de asoci aci n ent re ob etos & .nsamblando diferentes obetos se constru#e un obeto ma#or
4ue los contiene&
"as rel aci ones ent re cl ases e i nterfaces& Utilizando *erencia se constru#en erar4u5as de abstracciones 4ue
se basan unas en otras&
.n esta seccin se estudiar) en detalle cada uno de estos ti/os de relaciones& Su estudio se *ar) desde dos /ers/ectivas: una
est)tica # otra din)mica& "a est)tica mostrar) cmo se estructuran las clases # los obetos& "a din)mica cmo interactHan los
obetos # las clases /ara resolver diferentes situaciones&
Adem)s3 estos tres ti/os de relaciones se revisar)n res/ecto a tres as/ectos: la versati l i dad3 la tem/oral i dad # la
vi si bi l i dad& .l estudio de estos as/ectos3 en cada /roblema /articular3 /uede a#udar a elegir el ti/o de relacin 4ue debe
usarse al crear nuevas clases&
'ersati l i dad
Un obeto se dice 4ue es vers)til si /uede combinarse con otros obetos de diversas maneras /ara dar lugar a diferentes
com/ortamientos& Por eem/lo3 una clase +ila 4ue /ueda almacenar cual4uier ti/o de obetos es una clase m)s vers)til 4ue
una clase +ila 4ue slo /ermita almacenar nHmeros enteros&
.n general3 es /referible *acer cdigo vers)til3 /ues facilita su reutilizacin en diferentes /roblemas& Sin embargo3 un cdigo
e0cesivamente vers)til /uede ser 4ue se auste /oco a un /roblema /articular 4ue se est resolviendo # 4ue3 con ello3 se
dificulte la /rogramacin en vez de sim/lificarla& Por tanto3 al desarrollar un /rograma3 es im/ortante estudiar cu)l es el nivel
de versatilidad 4ue interesa /ara las clases e interfaces 4ue se van a crear3 en el conte0to del /roblema 4ue se est)
resolviendo&
Tem/oral i dad
(ual4uier relacin entre obetos o entre clases tiene una duracin tem/oral& ,a# relaciones entre obetos 4ue se dan en un
)mbito mu# restringido 7/or eem/lo dentro de un mtodo8 # *a# relaciones entre obetos 4ue abarcan toda la vida de los
obetos 7/or eem/lo en las /ro/iedades8& 'eremos 4ue debe /restarse atencin al estudio de la tem/oralidad de una relacin
/or4ue a#uda a definir el ti/o de relacin3 aun4ue en igualdad de condiciones se /refiere una baa tem/oralidad3 /ues esto
im/lica ma#or inde/endencia # menor coste de recursos&
'i si bi l i dad
(on obeto de ma0imizar el nivel de enca/sulacin3 la visibilidad 4ue una clase tiene de otra es otro as/ecto 4ue debe tenerse
en cuenta al crear relaciones& "a visibilidad se restringe definiendo cu)les son los miembros /Hblicos3 /rivados # /rotegidos3 #
cu)les son las interfaces # clases /Hblicas&
F ?= F
(a/5tulo 9 F Diseo de (lases
.sta claro 4ue en una relacin entre dos clases u obetos siem/re es /reciso 4ue e0ista algHn nivel de visibilidad /ara 4ue
/uedan realizarse interacciones& .n general3 se debe seguir el criterio de definir la m5nima visibilidad /osible 4ue /ermita
obtener la funcionalidad re4uerida& De esta forma se reduce la com/leidad manteniendo la funcionalidad&
Ot ros cri teri os
.0isten otros as/ectos3 como la econom5a # la eficiencia3 4ue /ueden condicionar el diseo de una relacin& .l utilizar estos
criterios /uede c*ocar frontalmente con un buen diseo orientado a obetos& Por eem/lo3 se /uede imaginar un caso en el
4ue tras detectar un /roblema se /ro/onen dos soluciones& "a /rimera consiste en redisear una clase& "a segunda en
/ermitir el acceso a cierta variable desde fuera de la clase& "a /rimera solucin /odr5a ser /tima en cuanto a cum/lir el
contrato del obeto3 mientras 4ue la segunda /odr5a crear consecuencias ines/eradas si los obetos clientes utilizan la variable
sin cuidado& Sin embargo la /rimera im/lica varias *oras de desarrollo # la segunda slo unos segundos& Si los /lazos son
austados seguramente se o/tar) /or la segunda o/cin& .s decir3 en los /ro#ectos comerciales3 la e0istencia de /lazos
definidos suetos a /enalizaciones econmicas suele condicionar detalles de la im/lementacin&
9& <& 6el aci ones de de/endenci a entre ob et os&
"a relacin de de/endencia se da cuando una clase de/ende de la interfaz de otra& "as de/endencias entre clases e0isten /or
dos motivos:
Un mtodo de una clase recibe como /ar)metro un obeto de otra clase
Una clase crea obetos de otra dentro de un mtodo&
Di mensi n est )ti ca
.n U!" la re/resentacin est)tica de las relaciones de de/endencia entre dos clases se realiza utilizando una flec*a
discontinua& .sta flec*a /arte de la caa 4ue re/resenta a la clase de los obetos 4ue usan3 # termina en la clase de los obetos
usados&
A B
%i gura <?& F "a clase A de/ende de la clase B&
Di mensi n di n)mi ca
"a dimensin din)mica se /lasma en U!" mediante los Di agramas de +nteracci n entre obetos 7ver %igura <@8& .stos
diagramas describen3 utilizando flec*as # caas3 cmo interactHan los obetos de una relacin de de/endencia&
U!" define dos ti/os de Diagramas de +nteraccin: los Di agramas de Secuenci a # los Di agramas de
(ol aboraci n& "a %igura <@ muestra un Diagrama de Secuencia # la %igura <; muestra uno de colaboracin& .n ambos
diagramas se describe la siguiente situacin: un obeto de la clase Trafico3 identificado como t3 invoca al mtodo frenar de
un obeto de la clase (oc*e3 identificado como c& Dentro de ese mtodo "re!ar143 se invoca al mtodo
reducirE!tradacasoli!a14 de un obeto de la clase !otor referenciado como m& "uego3 aHn dentro del mtodo frenar
de Coche3 se invoca3 sobre el /ro/io c al mtodo "re!arRuedas14& %inalmente3 el control retorna al invocador de los
mtodos&
(omo se /uede a/reciar ambos ti/os de diagramas son e4uivalentes& Sin embargo3 en el Diagrama de Secuencia3 se ve meor
el orden de llamada a los mtodos& !ientras 4ue el Diagrama de (olaboracin es m)s com/acto # 4uiz)s m)s cmodo /ara
realizar la /rimera a/ro0imacin a un /roblema&
"os Diagramas de +nteraccin /lantean escenarios sobre los 4ue se descubren los mtodos de las clases3 su visibilidad # las
relaciones e0istentes entre clases # obetos& Al /lantear un Diagrama de +nteraccin se le suele /oner un t5tulo descri/tivo
7/or eem/lo: 1secuencia de frenado28& .l diagrama se limita a describir las llamadas 4ue se /roducen entre los obetos /ara
conseguir el obetivo enunciado en dic*o t5tulo&
F ?> F
Disear # Programar todo es em/ezar
%i gura <@& F Diagrama de Secuencia&
%i gura <;& F Diagrama de (olaboracin&
Sobre los Diagramas de Secuencia se /ueden es/ecificar varios detalles adicionales& .n la %igura <D se /resenta la creacin
de un obeto desde otro # su /osterior destruccin3 en este caso /or dear de estar referenciado& .n la %igura =C se muestra
la devolucin de un /ar)metro # el uso de una instruccin condicional3 obsrvese 4ue la condicin se escribe entre
corc*etes& %inalmente3 la %igura =: muestra un caso 4ue inclu#e un bucle&
A /esar de la ri4ueza de estos detalles3 no debe /retenderse 4ue los Diagramas de Secuencia sean com/letos& .s decir3
cual4uier omisin en un Diagrama de Secuencia solo indica 4ue dic*o detalle no se considera im/ortante3 no 4ue deba
omitirse en la im/lementacin& Siem/re debe recordarse 4ue los Diagramas U!" no son un fin3 sino una *erramienta /ara
entender los /roblemas&
%i gura <D& F .em/lo de Diagrama de Secuencia con creacin # finalizacin de obetos&
F ?9F
(a/5tulo 9 F Diseo de (lases
%i gura =C& F .em/lo de Diagrama de Secuencia con retorno de valores # con instruccin condicional&
%i gura =:& F .em/lo de Diagrama de Secuencia con un bucle&
(u)ndo # cmo usar rel aci ones de de/endenci a
Debe utilizarse cuando la tem/oralidad de una relacin sea baa& Si la relacin entre dos obetos se limita al )mbito de un
mtodo3 la relacin de de/endencia es ideal& Si la relacin entre dos obetos es m)s larga3 debe buscarse una relacin con
ma#or tem/oralidad3 como las relaciones de asociacin&
.n la relaciones de de/endencia debe fomentarse la versatilidad3 utilizando el /olimorfismo en el /aso de /ar)metros&
(uanto m)s b)sicos sean los ti/os de los /ar)metros de un mtodo3 m)s vers)til ser) el obeto&
Desde el /unto de vista de la visibilidad las relaciones de de/endencia favorecen la enca/sulacin de los /artici/antes en la
relacin3 #a 4ue los obetos slo se conocen a travs de su interfaz /Hblica&
F ?? F
Disear # Programar todo es em/ezar
. em/l o de rel aci ones de de/endenci a
.s *abitual 4ue el /rogramador sin e0/eriencia en Programacin Orientada a Obetos tienda a construir obetos grandes3
con multitud de mtodos 4ue le /ermiten desem/ear cierta tarea& .stos obetos3 4ue /odr5amos denominar monol5ticos3
son com/leos # en general menos vers)tiles 4ue si se *ubiesen construido mHlti/les obetos 4ue se utilizasen entre ellos&
Si deseamos construir una a/licacin /ara formatear te0tos de manera 4ue /ermita eliminar es/acios consecutivos
innecesarios3 /oner en ma#Hsculas la /rimera letra tras un /unto3 obtener el nHmero de /alabras del te0to3 eliminar /alabras
re/etidas resultado de un error al escribir3 etc& Podr5amos *acerlo de dos formas:
!ediante una clase Formateador 4ue dis/usiese de un mtodo formatear te0to # de los siguientes mtodos
/rivados: elimi!arEspacios3 capitali&ar3 elimi!arRepeticio!es3 obte!er`umero+alabras&
(reando una clase diferente /or cada o/eracin 4ue se desea crear 7Elimi!adorDeEspacios3
Capitali&ador3 Elimi!adorDeRepeticio!es3 Co!tadorDe+alabras8 # luego creando una clase
Formateador 4ue utiliza esas clases /ara formatear un te0to&
Si ado/tamos la /rimera solucin ser) dif5cil 4ue varias /ersonas aborden el desarrollo simult)neamente3 debido a 4ue todo
el cdigo estar) en un Hnico fic*ero& Adem)s3 dic*o fic*ero ser) grande # com/leo& !ientras 4ue la segunda solucin
/ermite 4ue diferentes /rogramadores aborden el desarrollo de cada una de las diferentes clases3 las cuales adem)s ser)n
relativamente sim/les&
Por otro lado3 si /osteriormente se desea utilizar una de las caracter5sticas /or se/arado 7/or eem/lo la de eliminacin de
/alabras re/etidas83 en el caso de la /rimera solucin deberemos *acer /Hblico el mtodo corres/ondiente o com/licar la
configuracin del obeto Formateador /ara 4ue /ermita elegir 4u o/eraciones se a/lican en cada caso& Por contra3 la
segunda solucin no e0ige ningHn cambio&
Puiz)s el /rogramador novel /iense 4ue la segunda solucin tender) a sobrecargar el sistema debido a la multitud de obetos
involucrados en cada formateo de te0to3 /ero siem/re se debe recordar 4ue el coste de creacin de un obeto es des/reciable
res/ecto a la versatilidad 4ue a/orta el enfo4ue&
Se /uede concluir 4ue la segunda solucin es /referible /or sim/licidad de desarrollo3 /or4ue /ro/orciona una coleccin de
obetos muc*o m)s vers)til # f)cil de mantener 4ue la /rimera solucin&
9& =& 6el aci ones de asoci aci n entre ob etos
"as relaciones de asociacin surgen cuando se unen varios obetos /ara formar uno nuevo& "a interaccin entre los obetos
4ue se unen *ace 4ue emera un com/ortamiento ma#or 4ue la sim/le suma de los com/ortamientos de sus elementos&
Aun4ue una asociacin entre obetos /uede ser algo meramente conce/tual3 en muc*as ocasiones la asociacin se materializa
en /ro/iedades de clase& .n estos casos3 como consecuencia de 4ue un obeto a de la clase A est asociado a un obeto b de
la clase B3 la clase A tendr) una /ro/iedad 4ue /ermite referenciar a obetos de la clase B&
Una asociacin entre obetos se /uede estudiar desde dos /ers/ectivas diferentes: una /ers/ectiva estructural 7est)tica8 # otra
de com/ortamiento 7din)mica8&
Di mensi n est)ti ca
"a dimensin est)tica debe mostrar cmo se relacionan las clases # las interfaces de los obetos 4ue se asocian& Ta vimos en
el ca/5tulo : 4ue los Diagramas .st)ticos de (lases muestran la asociacin entre dos obetos de dos formas:
!ediante una l5nea 4ue une las caas 4ue re/resentan a cada clase de obetos&
!ediante una /ro/iedad&
Se usa una l5nea cuando se desea recalcar la im/ortancia de la asociacin # una /ro/iedad cuando se considera menos
im/ortante& Por eem/lo3 imaginemos un /rograma de contabilidad en el 4ue /ara almacenar los em/leados de una em/resa
los obetos de una clase llamada Empresa tienen una asociacin con los obetos de una clase llamada +erso!a&
Su/ongamos 4ue /ara guardar el nombre de las /ersonas tambin sea necesaria una asociacin entre los obetos de la clase
+erso!a # los de la clase %tri!,& .n el /rimer caso /odr5a ser interesante re/resentar las clases Empresa # +erso!a #
una l5nea entre ellas /ara remarcar la asociacin& Por otro lado3 la asociacin entre +erso!a # %tri!, no /arece tan
im/ortante # /odr5a e0/resarse mediante una /ro/iedad&
E)presa
-nombre : /trin3
!ersona
%i gura =<& F Algunas asociaciones entre obetos se /lasman en U!" con una l5nea de asociacin # otras3 menos
im/ortantes3 a/arecen como /ro/iedades&
F ?@F
(a/5tulo 9 F Diseo de (lases
.n las l5neas de asociacin se /ueden aadir una serie de adornos /ara aumentar el detalle de la descri/cin de la asociacin&
Por eem/lo3 como vimos en el ca/5tulo :3 se /ueden indicar las cardinalidades de los obetos 4ue se asocian&
Adem)s3 en ambos e0tremos de la l5nea /ueden /onerse identificadores 4ue se corres/ondan con las
/ro/iedades 4ue en el cdigo im/lementar)n la asociacin& .stos identificadores /ueden ir /recedidos del
s5mbolo negativo3 /ositivo o de la almo*adilla /ara indicar res/ectivamente 4ue son /rivadas3 /Hblicas o
/rotegidas&
Tambin /uede aadirse un identificador 4ue da nombre a la asociacin # 4ue lleva asociado un marcador en
forma de flec*a 4ue indica el sentido de lectura&
%inalmente3 se /ueden aadir terminaciones en flec*a en ambos e0tremos de la l5nea de asociacin /ara indicar
4ue desde la clase origen de la flec*a e0iste un acceso a los obetos de la clase destino de la flec*a&
.l diagrama de la %igura == muestra una asociacin entre las clases A # B& De l se des/rende 4ue un obeto de la clase A se
asocia a un obeto de la clase B utilizando una /ro/iedad cu#o identificador es /rivado # se llama ob(etoB& Tambin /uede
leerse en este diagrama 4ue un obeto de la clase B se asocia a un Hnico obeto de la clase A& Adem)s3 la flec*a indica 4ue en
la clase A debe de *aber mtodos /ara acceder a la /ro/iedad ob(etoB3 # el as/a indica 4ue en la clase B no los *a# /ara
acceder a la A&
Por eem/lo3 si se tiene la clase Coche # la clase Rueda3 se /uede establecer una relacin de asociacin entre ambas 4ue
diga: un coc*e tiene > ruedas& As53 la %igura => muestra 4ue un coc*e tiene cuatro ruedas # 4ue una rueda /uede /ertenecer
a un slo coc*e o a ninguno& Adem)s3 la clase coc*e tiene una /ro/iedad /rivada3 llamada rueda3 4ue almacena >
referencias a obetos de la clase Rueda&
%i gura ==& F 6elacin de asociacin entre las clases A # B en la 4ue B es
navegable desde A3 /ero no viceversa&
Coche Rueda
-rue%a
*))1 4
%i gura =>& F Asociacin entre la clase Coche # la clase
Rueda&
.n ocasiones es Htil distinguir entre dos ti/os de relaciones de asociacin:
6elaciones de Agregacin&
6elaciones de (om/osicin&
6el aci ones de Agregaci n& F Son asociaciones en las 4ue una /arte contiene a elementos de otra /arte& Jormalmente
res/onden a la /regunta 1tiene un2& .l diagrama de la %igura =9 /resenta una agregacin en la 4ue un obeto de la clase A
/uede contener otros de la clase B& SegHn U!" la relacin de agregacin solo aade informacin sem)ntica3 aun4ue suele
significar 4ue el obeto contenedor tiene una referencia al obeto /arte& Por eem/lo3 la relacin Fun Coche tiene > RuedasF
es una relacin de agregacin&
A B
%i gura =9& F 6elacin de agregacin& "os obetos de la clase A tiene
referencias a obetos de la clase B&
6el aci ones de (om/osi ci n& F Son relaciones de agregacin con una relacin de /ertenencia fuerte& .sta /ertenencia
suele im/licar 4ue el obeto contenido se im/lementa como una /ro/iedad del obeto contenedor& (omo consecuencia3 tanto
contenedor como contenido3 una vez creados /ermanecen untos *asta su destruccin&
Por eem/lo3 si se tiene la clase Empresa # la clase Departame!tos3 la relacin Funa em/resa 1tiene varios2
de/artamentosF es una relacin de com/osicin& (laramente la eliminacin de un obeto de ti/o Empresa im/lica eliminar
los obetos de la clase Departame!to&
F ?; F
Disear # Programar todo es em/ezar
A B
1
%i gura =?& F 6elacin de com/osicin& "os obetos de la clase A son
/ro/ietarios de obetos de la clase B&
Por otro lado3 en el eem/lo de agregacin anterior e0iste una relacin de /ertenencia m)s dbil entre los obetos Rueda #
los obetos Coche& "a e0istencia de un obeto Coche es inde/endiente de la e0istencia de obetos Rueda& Si se destru#e un
obeto Coche el obeto Rueda /uede seguir e0istiendo3 /or eem/lo /ara utilizarse en otro obeto Coche&
%inalmente se debe decir 4ue la ausencia de estos adornos en un diagrama no im/lica 4ue luego en el cdigo no se
im/lementen los elementos 4ue no se detallan& Su ausencia slo significa 4ue no se *a considerado im/ortante su inclusin
en ese diagrama&
Di mensi n di n)mi ca
Al igual 4ue en el caso de las relaciones de de/endencia3 la dimensin din)mica de las relaciones de asociacin se
re/resentan en U!" dentro de los Diagramas de +nteraccin&
(u)ndo # cmo usar l as rel aci ones de asoci aci n
"as relaciones de asociacin deben usarse cuando se /rev una tem/oralidad alta en la relacin de dos obetos&
6es/ecto a la visibilidad debe fomentarse el uso de /ro/iedades /rivadas& .n caso necesario deber)n definirse mtodos con
ma#or visibilidad /ara consultar o cambiar el valor de tales /ro/iedades&
Por Hltimo se debe /otenciar la versatilidad utilizando el /olimorfismo& Para ello3 en la definicin de las /ro/iedades3 debe
/referirse utilizar referencias a clases bases frente a clases derivadas&
. em/l o del /rograma de fact uraci n
Para ilustrar los conce/tos de asociacin # de/endencia recin e0/uestos se /ro/one disear un /rograma 4ue /ermita crear
e im/rimir las facturas de una tienda de venta de recambios de automviles& .l /rograma deber) /ermitir crear facturas e
im/rimirlas& "as facturas contendr)n la informacin relativa al cliente 7nombre e identificacin fiscal8 # a las /iezas 4ue
com/ra 7nombre # /recio8&
Primeramente se realiza el Diagrama .st)tico de (lases de la %igura =@& .ste diagrama inclu#e varios elementos 4ue se
deducen directamente del enunciado& As53 inclu#e la clase Facturacio!Recambios 4ue contiene el mtodo mai!3 donde
comienza la eecucin del /rograma& Tambin se deducen del enunciado las clases +ie&a # Clie!te& .stas clases se
encargan res/ectivamente de recoger # mantener la informacin relativa a las /iezas # al cliente& "a clase Factura3 4ue se
encarga de contener /iezas # clientes # de im/rimir el resultado3 tambin se deduce del enunciado& %inalmente3 la clase Me!u
se encarga de /ermitir navegar entre las o/ciones de crear facturas e im/rimir&
%i gura =@& F Diagrama de clases inicial /ara el /rograma de facturacin&
F ?DF
(a/5tulo 9 F Diseo de (lases
Tras este diagrama de clases /reliminar3 se /rocede a crear Diagramas de Secuencia basados en diferentes escenarios& As5 se
crean diagramas /ara los escenarios de: creacin de una factura desde el menH 7 %igura =;83 rellenado de los datos de una
factura 7%igura =D8 e im/resin de la misma 7%igura >C8&
Para ilustrar el car)cter iterativo del /roceso de descubrimiento de clases # mtodos3 finalmente3 en la %igura >:3 se /resenta
un diagrama de clases 4ue recoge los mtodos descubiertos al crear los Diagramas de Secuencia& .ste /roceso iterativo de
descubrimiento # refinamiento es la base del diseo basado en el an)lisis del /roblema&
%i gura =;& F Diagrama de secuencia 4ue reflea la creacin de una nueva factura desde el menH&
%i gura =D& F Diagrama de secuencia 4ue reflea cmo se rellenan los datos de una factura&
F @C F
Disear # Programar todo es em/ezar
%i gura >C& F Diagrama de secuencia 4ue reflea la im/resin de una factura desde el menH&
%i gura >:& F Diagrama de clases con los mtodos encontrados en los diagramas de secuencia&
9& >& 6el aci ones entre cl ases
Ta *emos visto 4ue la *erencia es un mecanismo3 /ro/orcionado /or los lenguaes orientados a obetos3 4ue /ermite crear
erar4u5as entre clases e interfaces& 6es/ecto a la *erencia de im/lementacin3 las erar4u5as deben buscar las similitudes 4ue
deben im/lementarse en las clases bases /ara 4ue las clases derivadas las a/rovec*en& 6es/ecto a la *erencia de interfaces3 las
erar4u5as deben definirse de manera 4ue las interfaces derivadas se consideren casos concretos de las interfaces bases3
facilitando los com/ortamientos /olimrficos&
(u)ndo uti l i zar el /ol i morfi smo
Al *ablar de cmo se deben construir las erar4u5as de clases resulta im/rescindible tener en cuenta el /olimorfismo&
Por un lado3 el /olimorfismo est)tico3 es decir3 el uso de varios mtodos con el mismo nombre /ero con diferentes
/ar)metros dentro de una clase3 debe utilizarse /ara /ro/orcionar uniformidad a a4uellos mtodos 4ue conce/tualmente
*acen lo mismo /ero 4ue lo *acen /artiendo de diferentes elementos&
F @:F
(a/5tulo 9 F Diseo de (lases
Por otro lado3 al tratar con erar4u5as de clases3 a menudo se desea tratar un obeto de una forma genrica e inde/endiente
del ti/o es/ec5fico al 4ue /ertenece& .l /olimorfismo din)mico se utiliza en este caso /ara usar una misma referencia sobre
distintos obetos de una erar4u5a de clases& .sto /ermite realizar o/eraciones genricas sobre diferentes clases de obetos
74ue com/arten una misma interfaz8 sin tener 4ue estar /endiente en cada momento de 4u ti/o de obeto est) siendo
tratado&
As53 cuando se necesite 4ue un mtodo de una clase se com/orte de una forma u otra de/endiendo de una /ro/iedad de la
clase3 /uede ser meor *eredar # crear diferentes clases con diferentes im/lementaciones /ara tal mtodo& .sto *ar5a 4ue si
a/areciesen nuevos com/ortamientos no fuese necesario tocar el cdigo #a e0istente3 sino aadir nuevas clases& De esta
forma3 el /olimorfismo din)mico fomenta la reutilizacin de cdigo sin rom/er la enca/sulacin&
(rear cl ases abstract as o crear i nterfaces
Ta se *a dic*o 4ue una clase abstracta es una clase de la 4ue no se /ueden crear instancias de obetos debido a la ine0istencia
de im/lementacin /ara alguno de sus mtodos& (rear clases abstractas sim/lifica las interacciones con conuntos de obetos
4ue com/arten cierto ti/o /or4ue abstraen interfaz # com/ortamiento& Por eem/lo3 si de la clase abstracta Coche *eredan
varias clases 7Ford3 Re!ault3 %eat3 Citrde!83 se /odr5a definir la clase cara(e 4ue interactHa con obetos 4ue cum/lan
el ti/o definido /or la clase Coche sin conocer e0actamente de 4u clase /articular son estos obetos&
Tambin se *a dic*o 4ue en $ava slo e0iste *erencia sim/le entre clases3 es decir3 una clase no /uede *eredar de m)s de una
clase simult)neamente& Al disear $ava se tom esta decisin /ara eliminar el /roblema de la ambigQedad 7ver :&<&=8& As53 los
diseadores de $ava3 en su af)n /or sim/lificar a4uellos as/ectos de otros lenguaes 7como (OO8 4ue com/licaban la
/rogramacin3 /ro*ibieron la *erencia mHlti/le de clases& Sin embargo3 esta restriccin afecta de manera im/ortante al
/olimorfismo din)mico3 al im/edir 4ue un mismo obeto se com/orte como un elemento genrico de dos o m)s erar4u5as
de clases diferentes&
Por otro lado3 si las clases de las 4ue se *ereda no tuviesen im/lementado ningHn mtodo3 el /roblema de ambigQedad no
e0istir5a& Por eso3 en $ava se /ermiti 4ue una clase /udiese *eredar de varias interfaces simult)neamente3 #a 4ue esto no
im/lica ninguna ambigQedad3 # elimina los efectos negativos sobre el /olimorfismo derivados de la /ro*ibicin de la
*erencia mHlti/le de clases& De nuevo3 usar adecuadamente la *erencia de interfaz abstrae las interacciones3 al /ermitir 4ue
un mismo obeto cum/la varios ti/os simult)neamente&
.n general3 suelen utilizarse clases abstractas cuando adem)s de una interfaz genrica se desea aadir cierto com/ortamiento
a todos los elementos de una erar4u5a& Por otro lado3 suelen utilizarse interfaces cuando slo se desea asegurar 4ue un
conunto de obetos cum/le cierta caracter5stica 4ue lo *ace tratable /or otro conunto de obetos&
Di mensi n est )ti ca
Ta se *a e0/licado 4ue en U!" la *erencia se re/resenta3 en el Diagrama .st)tico de (lases3 mediante una flec*a de /unta
*ueca 4ue /arte de la clase 4ue *ereda # termina en la clase /adre3 # 4ue esta flec*a es /unteada si la *erencia es de interfaz&
.n la %igura >< tenemos tres interfaces # dos clases& "a clase buad *ereda de AehiculoAMotorE /ero adem)s im/lementa
las interfaces definidas /or Automovil # MotocicletaE las cuales a su vez derivan de Aehiculo& Adem)s3 el eem/lo
ilustra la ine0istencia del /roblema de ambigQedad cuando solo e0iste *erencia sim/le de clases 7buad *ereda de una sola
clase8 aun4ue e0ista *erencia mHlti/le de interfaz 7buad im/lementa varias interfaces8& Obsrvese 4ue3 cuando un mtodo es
abstracto se re/resenta en letras cursivas3 /or lo 4ue el mtodo "re!ar14 solo est) im/lementado en la clase buad. De la
misma forma3 el mtodo acelerar14 solo /uede *eredarlo buad de AehiculoAMotor.
Di mensi n di n)mi ca
Un Di agrama de Acti vi dad es fundamentalmente un diagrama de fluo 4ue muestra la secuencia de control entre
diferentes acciones3 mostrando tanto la concurrencia como las bifurcaciones de control& "os Diagramas de Actividades
/ueden servir /ara visualizar3 es/ecificar3 construir # documentar desde la din)mica de una sociedad de obetos3 *asta el fluo
de control de una Hnica o/eracin& "a eecucin de una actividad se descom/one en la eecucin de varias acciones
individuales cada una de las cuales /ueden cambiar el estado de un obeto o /ueden comunicar mensaes a otros obetos&
"os elementos b)sicos de un Diagrama de Actividad son:
"as acciones # nodos de actividad
Obetos de valor
%luos de control # de obetos
"os sucesos 4ue describe un Diagrama de Actividad ocurren en las acciones # en los nodos de actividad& (uando el suceso
es atmico3 no /uede descom/onerse3 es una accin& !ientras 4ue3 cuando el suceso /uede descom/onerse en sucesos m)s
elementales es un nodo de actividad o actividad&
F @< F
Disear # Programar todo es em/ezar
%i gura ><& F .em/lo de *erencia interfaces& Obsrvese 4ue no *a# /roblema de
ambigQedad /or4ue las interfaces no im/lementan ninguno de los mtodos 4ue
declaran&
Tanto las acciones como los nodos de actividad se re/resentan mediante un rect)ngulo con las es4uinas redondeadas 7vase
la %igura >=8 # un te0to descri/tivo en su interior& .n el caso de las acciones el te0to se corres/onde a una o/eracin sim/le
o a una e0/resin3 mientras 4ue en los nodos de actividad el te0to se corres/onde al nombre de otra actividad&
.n general3 una accin /uede verse como un caso /articular de una actividad& .n adelante3 /or sim/licidad se *ablar)
e0clusivamente de actividades3 aun4ue todo ser5a igualmente a/licable a acciones&
.n los Diagramas de Actividad se /ueden re/resentar instancias de los obetos involucrados mediante rect)ngulos 7vase la
%igura >=8& .n el interior de estos rect)ngulos se describe mediante te0to la naturaleza del obeto # su valor& Adem)s se
/uede eti4uetar3 mediante un te0to entrecomillado3 4ue se denomina estereoti/o3 categor5as es/ecialmente im/ortantes de
obetos 7como /or eem/lo los almacenes8&
"os obetos de un Diagrama de Actividad /ueden corres/onder a elementos /roducidos3 consumidos o utilizados /or una
actividad&
"os fluos de control dentro de un Diagrama de Actividad marcan el orden en el 4ue se /asa de una actividad a otra& "os
fluos de control se detallan mediante flec*as 4ue unen las caas de las actividades 7vase la %igura >>8&
.s /osible es/ecificar el /rinci/io de un fluo de control mediante un c5rculo relleno& +gualmente3 el fin de un fluo de
control se /uede es/ecificar mediante un c5rculo relleno concntrico a una circunferencia e0terior&
Dentro de los fluos de control es /osible es/ecificar bifurcaciones mediante rombos *uecos& Al rombo llega una flec*a de
fluo de control # salen tantas flec*as como bifurcaciones se /roduzcan& Acom/aando a cada flec*a de salida del rombo se
escribe un te0to entre corc*etes3 4ue se denomina guarda3 con la condicin 4ue determina 4ue se siga ese camino&
%i gura >=& F Jodos de un Diagrama de Actividad& "os rect)ngulos redondeados corres/onden
a acciones o a actividades3 mientras 4ue los rect)ngulos normales corres/onden a obetos&
Obsrvese 4ue se suelen /ermitir licencias como sombreados o colores&
F @=F
(a/5tulo 9 F Diseo de (lases
%i gura >>& F .em/lo de fluo de control& .l /unto relleno muestra el /unto de inicio de fluo de
control3 los /untos concntricos son /untos de fin del fluo3 el rombo es una bifurcacin # las barras
verticales son /untos de sincronizacin donde se crean o se unifican *ilos se/arados de eecucin&
Tambin es /osible es/ecificar fluos concurrentes en los Diagramas de Actividades& "os /untos en los 4ue el control se
divide o se une en mHlti/les *ilos se denominan barras de sincronizacin # se re/resentan mediante un segmento *orizontal
o vertical de trazo grueso&
(uando en un Diagrama de Actividad se involucran obetos es /reciso detallar 4u actividad los /roduce o consume& As53
cuando un obeto recibe una flec*a de una actividad3 significa 4ue el obeto es /roducido /or ella& Por otro lado3 cuando
e0iste una flec*a de un obeto a una actividad significa 4ue la actividad consume dic*o obeto&
A /artir de la versin <&: de U!"3 es /osible aadir una /e4uea caa3 denominada /in3 al contorno de una actividad /ara
indicar de manera abreviada 4ue esa actividad crea o consume un obeto& .n este caso3 sobre la flec*a se escribe un te0to
4ue describe al obeto involucrado 7vase la %igura >98&
%inalmente3 es /osible enlazar dos obetos mediante una flec*a /ara indicar 4ue los obetos interaccionan entre s5&
"os Diagramas de Actividad se /ueden usar /ara detallar el com/ortamiento din)mico de un obeto cuando su vida
transcurre a travs de mtodos im/lementados en diferentes clases3 incluso cuando una /arte est) en una clase base # otra
/arte est) en una clase derivada& Para ello3 las o/eraciones se anidan dentro rect)ngulos llamados cal l es& (ada calle dis/one
de una eti4ueta 4ue indica cu)l es el mtodo # la clase en la 4ue se encuentra esa /arte de la im/lementacin&
&
%i gura >9& F .em/lo de fluo de obetos& Arriba una 1actividad creadora2 crea un obeto # se lo
env5a al obeto OE ste a su vez genera un obeto 4ue lo consume la 1actividad consumidora2&
Abao otra 1actividad creadora2 crea un obeto P 4ue lo env5a a la 1actividad consumidora2&
F @> F
=b?eto P
Disear # Programar todo es em/ezar
@to%o 81 %e la clase #
@to%o 8+ %e la clase 8
@to%o 8+ %e la Clase #
acciAn sim$le
Crear ob?eto
ex$resion
>n!ocar un mto%o
-/>.
-4=.
%i gura >?& F .em/lo de Diagrama de Actividad con calles&
(u)ndo # cmo uti l i zar l as rel aci ones de *erenci a&
"as relaciones de *erencia tienen una alta tem/oralidad en com/aracin con las relaciones de asociacin # de uso& Si una
clase deriva de otra3 lo seguir) *aciendo mientras e0ista el /rograma&
.n algunas ocasiones esta alta tem/oralidad es Htil& Por eem/lo3 si en el sistema educativo /uede *aber dos ti/os de
/rofesores 7fios e interinos83 # /ara cada uno se calcula el sueldo de una forma diferente se /uede usar *erencia /ara
im/lementar los dos ti/os de /rofesores 7#a 4ue esta caracter5stica del sistema educativo no cambiar)8 # se /articularizar) la
forma de c)lculo del sueldo en cada clase derivada&
"a *erencia debe a/ortar versatilidad a los lenguaes de /rogramacin& .n /articular3 el /olimorfismo din)mico debe
/romover la versatilidad en los elementos 4ue se desarrollan3 mediante la definicin de referencias comunes a obetos 4ue
com/arten la misma erar4u5a&
Desde el /unto de vista de la visibilidad la *erencia normalmente viola los /rinci/ios de enca/sulacin& .sto se debe a 4ue
suele ser /reciso conocer bastante a fondo la clase de la 4ue se *ereda& Para conseguir 4ue esta visibilidad se restrina slo a
las clases derivadas debe cuidarse la seleccin de los mtodos /rotegidos& Adem)s3 debe limitarse en lo /osible la visibilidad
de las /ro/iedades3 fomentando el acceso a las mismas a travs de mtodos3 de forma 4ue se im/idan un mal uso de la clase
base& Por ello3 en $ava3 se recomienda el uso del modificador "i!al3 tanto al declarar las clases3 como en los mtodos3 /ues
con ello se im/ide la *erencia& Solo en los casos en los 4ue se /iense 4ue la *erencia a/orta cierta ventaa se debe omitir el
modificador "i!al # documentando claramente cmo debe realizarse dic*a *erencia&
(onti nuaci n del e em/l o de l a a/l i caci n de fact uraci n
Se desea am/liar el /rograma de facturacin de recambios con mecanismos de /ersistencia sobre una base de datos& As53 el
/rograma deber) /ermitir la consulta de /recios3 la consulta de clientes3 el almacenamiento de clientes # el almacenamiento
de las facturas&
(on este obeto se crea una clase Co!sultaBD& De esta clase3 *eredar)n diversas clases 4ue im/lementaran las diferentes
o/eraciones a realizar contra la base de datos 7ver %igura >@8& .sta clase3 4ue se utilizar) desde la clase Factura3 gestionar)
la cone0in con la base de datos& "as clases derivadas se encargar)n de im/lementar los detalles relativos a cada o/eracin&
.ste enfo4ue tiene diferentes ventaas& Por un lado3 /ermite aumentar el nHmero de o/eraciones sin aumentar la com/leidad
de una sola clase& Por otro lado3 /ermite centralizar o/eraciones comunes3 como la cone0in con la base de datos& .l
Diagrama de Actividad de la %igura >; ilustra esta Hltima /osibilidad&
F @9F
(a/5tulo 9 F Diseo de (lases
%i gura >@& F (lases usadas /ara introducir /ersistencia en la a/licacin de facturacin&
%i gura >;& F Diagrama de Actividad 4ue ilustra la divisin de tareas a travs de la *erencia en la
/ersistencia del /roblema de facturacin&
9& 9& (oncl usi ones
Se *a visto 4ue las relaciones de asociacin a#udan a mantener la enca/sulacin3 mientras 4ue las relaciones de *erencia
tienden a violarla al /recisar muc*a visibilidad& Adem)s3 la *erencia suele *acer crecer las interfaces de las clases dis/ersando
su com/ortamiento3 convirtindolas en elementos dif5ciles de gestionar # utilizar& Por ello3 debe favorecerse la asociacin de
obetos frente a la *erencia de clases cuando el obetivo es crear obetos con nuevas funcionalidades&
Por otro lado3 la *erencia debe utilizarse /ara crear interfaces comunes a conuntos de clases 4ue com/arten cierta
funcionalidad& .n estos casos3 las clases derivadas no *acen m)s 4ue im/lementar o es/ecializar el com/ortamiento de las
clases /adres&
%inalmente se debe sealar 4ue la e0/eriencia *a demostrado 4ue el diseo no debe llegar a l5mites absurdos& .s decir3
el diseo es una buena *erramienta en las /rimeras eta/as de desarrollo3 /ara /ensar sobre el desarrollo3 /ara coordinar al
e4ui/o de trabao # /ara estimar la cantidad de trabao a realizar& Tambin es una buena *erramienta de documentacin3
/ues /ermite entender m)s f)cilmente la estructura de un /rograma 4ue mediante la ins/eccin del cdigo o la lectura de
descri/ciones te0tuales& Sin embargo3 es innecesario3 # aHn contra/roducente3 4ue el diseo abar4ue todas las
/articularidades de cada clase # de cada mtodo&
9& ?& "ecturas recomendadas
1U!" -ota a gota23 !artin %owler3 Pearson3:DDD& .s un libro breve de im/rescindible lectura /ara introducirse en el diseo
orientado a obetos mediante U!"&
9& @& . erci ci os
. erci ci o :
KPu utilidad /uede tener un Diagrama de ActividadL KT uno de secuenciaL KSon e4uivalentes los Diagramas de Actividad #
de SecuenciaL KPor 4uL
. erci ci o <
Utilizando el /aradigma de orientacin a obetos se desea disear el software de control de una m)4uina e0/endedora de
billetes de metro& "a m)4uina ser) ca/az de e0/ender diferentes ti/os de billetes 7ti/o :3 ti/o <3 ti/o =&&&8 4ue se im/rimen en
F @? F
Disear # Programar todo es em/ezar
diferentes ti/os de /a/el 7ti/o a3 ti/o b3 ti/o c&&&8& Adem)s cada ti/o de billete tendr) un nombre # un /recio diferente&
Debiendo ser todas estas caracter5sticas de los billetes 4ue e0/ende la m)4uina configurables desde un menH a/ro/iado&
Para ser ca/az de realizar sus funciones la m)4uina dis/one de dos elementos *ardware es/ec5ficos: una im/resora de billetes
# un monedero autom)tico&
"a clase +mpresora&F Para controlar la im/resora de billetes el fabricante de la misma suministra una biblioteca 4ue consta
de la clase Impresora& .sta clase /ermite controlar si la im/resora tiene tinta # si tiene billetes de un ti/o de /a/el
determinado& Adem)s /ermite ordenar a la im/resora la im/resin3 grabacin magntica # e0/ulsin de un billete de un
determinado ti/o& .l ti/o de billete 4ue se im/rima corres/onder) a un valor entero 4ue ser) grabado en la banda magntica
del billete /ara 4ue sea reconocido /or los torni4uetes de la red de metro&
"a clase Mo!edero&F .l fabricante del monedero autom)tico tambin suministra una biblioteca& Rsta consta de la clase
Mo!edero 4ue /ermite controlar el monedero autom)tico& "a clase /ermite verificar el dinero 4ue un cliente *a introducido
/or la ranura # si el monedero /uede devolver cierta cantidad de dinero& Adem)s /ermite ordenar al monedero suministrar
cierta cantidad de dinero # devolver el dinero 4ue *a entrado /or la ranura&
.s4uema de funcionamiento&F Jormalmente la m)4uina /resentar) un dialogo a los clientes /ara 4ue stos elian el ti/o de
billete 4ue desean com/rar& Des/us la m)4uina /edir) 4ue se introduzca el dinero # 4ue se /ulse .JT.6 cuando se
termine de introducir el dinero& Seguidamente la m)4uina efectuar) las o/eraciones necesarias /ara im/rimir el billete #
devolver el cambio o devolver el dinero3 volviendo finalmente al /unto inicial& "a m)4uina tambin /odr) /resentar un
mensae de servicio no dis/onible debido a falta de tinta o billetes& Por otro lado3 la m)4uina tambin deber) /ermitir entrar
en modo mantenimiento /ara 4ue un o/erador /ueda introducir nuevos ti/os de billetes3 modificar o eliminar los ti/os
actuales3 o mani/ular la im/resora 7/ara recargarla8 # el monedero 7/ara recoger o introducir dinero8&
Se /ide:
a8 Pro/oner las clases necesarias 4ue3 aadidas a la clase Mo!edero # a la clase Impresora3 /ermiten construir el
e0/endedor de billetes& $ustificar a grandes rasgos /ara 4u sirve cada una de las clases /ro/uestas&
b8 Dibuar el Diagrama .st)tico de (lases /resentando las clases /ro/uestas3 inclu#endo los mtodos # /ro/iedades 4ue a
/riori se consideren interesantes 7indicando su visibilidad8& Presentar en este diagrama tambin la clase monedero # la
clase im/resora # las relaciones de asociacin3 de/endencia # *erencia 4ue a /riori e0istan entre todas 7/recisando su
cardinalidad cuando corres/onda8&
c8 Dibuar un Diagrama de Secuencia en el cual se reflee el escenario en el 4ue un cliente interactHa con la m)4uina /ara
obtener un billete3 introduciendo dinero de sobra3 # la o/eracin se realiza con 0ito3 devolviendo el cambio la m)4uina&
. erci ci o =
Disear un /rograma 4ue /ermita a dos /ersonas ugar una /artida de tres en ra#a& .l uego debe desarrollarse de manera
4ue los ugadores3 en turnos alternados3 dis/ongan tres fic*as cada uno sobre un tablero de =0= casillas& "uego3 el uego
tambin sigue turnos alternados3 de forma 4ue los ugadores /ueden mover una fic*a cada vez entre casillas dos ad#acentes&
.l uego finaliza cuando un ugador consigue dis/oner sus tres fic*as en l5nea&
. erci ci o >
+m/lementar el cdigo corres/ondiente al eercicio anterior&
. erci ci o 9
Am/liar el diseo del eercicio = /ara 4ue /ermita a dos /ersonas ugar una /artida de aedrez usando el ordenador como
instrumento de la /artida& Se debe intentar /otenciar la construccin de elementos reutilizables 4ue /uedan servir /ara
im/lementar m)s uegos similares 7como las Damas3 el 6eversi3 el Tres en 6a#a&&&8&
F @@F
(a/5 tul o ? .ntradaIsal i da en $ava
.l /a4uete (ava.io contiene un conunto de clases 4ue /osibilitan las o/eraciones de entrada salida& .n /articular3 en este
ca/5tulo3 veremos el so/orte 4ue /ro/orciona /ara el acceso a dis/ositivos /ermanentes de almacenamiento # /ara la
serializacin&
Para la gestin de los fluos de datos 7fic*eros3 /erifricos&&&8 $ava define un mecanismo mu# /otente conocido como
stream& Un stream es un fluo ordenado de datos 4ue tienen una fuente # un destino& "a /otencia 4ue a/ortan los streams
se fundamenta en 4ue /or su estructura /ermiten ser concatenados incrementando su funcionalidad& Por eem/lo3 es /osible
abrir un stream desde un fic*ero3 concatenarlo a un stream 4ue /ro/orciona un buffer /ara *acer m)s eficiente la lectura3 #
concatenarlo a otro stream 4ue va seleccionando las /alabras 4ue est)n se/aradas /or es/acios& De esta forma se consigue
/or eem/lo 4ue un /rograma 4ue *a abierto un fic*ero /ara lectura reciba una secuencia de /alabras en vez de una
secuencia de b#tes&
"os streams3 4ue $ava /ro/orciona /ara gestionar la entrada # salida de datos desde los dis/ositivos *abituales3 se encuentran
definidos dentro de los /a4uetes contenidos en (ava.io&
Atendiendo a la naturaleza de los datos 4ue manean los streams de io se dividen en dos gru/os:
Streams de b#tes&
Streams de caracteres&
Por otro lado3 atendiendo a la direccin de los datos los streams de io se dividen en dos gru/os:
Streams de entrada&
Streams de salida&
As5 /ues3 /odemos tener streams de b#tes de entrada3 streams de b#tes de salida3 streams de caracteres de entrada # streams
de caracteres de salida&
?& :& Streams de b#t es
(ada dato 4ue flu#e a travs de un stream de b#tes es gestionado /or la interfaz como un entero de =< bits3 usando solo el
rango com/rendido entre C # <99 /ara el valor del dato3 # utilizando el valor F: como seal de fin del fluo&
"os streams de b#tes /ueden ser de entrada o de salida& "os streams de entrada derivan de la clase abstracta I!put%tream3
# los de salida de autput%tream& "os diagramas est)ticos de la %igura 9C ilustran algunas de las clases 4ue derivan de
I!put%tream # autput%tream&
"os mtodos /rinci/ales de I!put%tream son: read143 close143 available143 s$ip143 mar$143 reset14&
read14 /ermite leer cada vez un b#te o un conunto de b#tes mediante un arra#&
close14 cierra el fluo im/idiendo cual4uier lectura /osterior&
avaiable14 devuelve el nHmero de elementos 4ue se /ueden leer del stream sin dearlo blo4ueado&
s$ip18 /ermite saltar la lectura de un nHmero variable de b#tes&
mar$14 # reset14 /ermiten marcar la /osicin actual de lectura sobre el stream # volver a ella m)s tarde&
%i gura >D& F 6e/resentacin de la clase
I!put%tream con algunos de sus miembros&
F @D F
(a/5tulo ? F .ntradaIsalida en $ava
Todas las clases 4ue derivan de I!put%tream /ermiten a un /rograma en $ava obtener datos desde algHn dis/ositivo o
bien transformar datos 4ue /rovengan de otro I!put%tream. Derivando de I!put%tream el /a4uete (ava.io define:
FileI!put%tream 4ue /ermite leer desde fic*ero&
B5teArra5I!put%tream # %tri!,Bu""erI!put%tream 4ue /ermite obtener un fluo de un arra# # de
un %tri!, res/ectivamente&
+ipedI!put%tream 4ue /ermite recibir datos 4ue se estn escribiendo en un tubo 7/i/e8 normalmente desde
otro *ilo de eecucin&
ab(ectI!put%tream /ermite leer un obeto 4ue *a sido serializado&
FilterI!put%tream /ermite transformar los fluos /rocedentes de otras fuentes& .sta clase es abstracta3 #
de ella derivan una serie de clases 4ue constitu#en filtros concretos& As5:
Bu""eredI!put%tream inter/one un buffer entre un stream de entrada # un usuario del fluo /ara evitar
leer los b#tes de uno en uno3 acelerando la lectura&
DataI!put%tream transforma un fluo de b#tes en un fluo de ti/os /rimitivos&
eI+I!put%tream # ceI+I!put%tream /ermiten obtener datos en claro de fluos de datos
com/rimidos& Se encuentran en el /a4uete (ava.util&
"a clase abstracta autput%tream tiene los siguientes mtodos: close143 "lush14 # ;rite14& .stos mtodos /ermiten
res/ectivamente: cerrar un stream3 volcar los datos 4ue 4uedan /endientes # escribir un b#te o arra# de b#tes& Adem)s3 de
autput%tream derivan clases an)logas a las de entrada /ero con el fluo en sentido o/uesto& .s decir3 clases 4ue tienen /or
obeto e0/ortar en forma de b#tes datos de un /rograma *acia otro lugar&
InputStrea)
1I!InputStrea)
FileInputStrea)
Bu00eredInputStrea)
DataInputStrrea)
FilterInputStrea)
91I!InputStrea)
In0laterInputStrea)

Filter"utputStrea)
"utputStrea)
File"utputStrea)
B+teArra+"utputStrea)
Bu00ered"utputStrea)
De0later"utputStrea)
91I!"utputStrea)
1I!"utputStrea)
Data"utputStrrea)
%i gura 9C& F Diagrama con los /rinci/ales streams de entrada # salida de b#tes&
.l siguiente fragmento de cdigo ilustra la a/ertura de un stream desde fic*ero # la lectura de los datos del mismo& Para ello
se utiliza un obeto de la clase FileI!put%tream # la clase AectorDi!amico definida en =&<&: /ara almacenarlos&
I!put%tream i! G new FileI!put%tream16)home)user)`ombreFichero647
AectorDi!amico vector G new AectorDi!amico147
int co!t G C7
I!te,er dato G i!.read147
if 1dato UG =B4
vector.po!er1co!tOOEdato47
while1dato UG =B4 /
dato G i!.read147
vector.po!er1co!tOOEdato47
8
"os siguientes diagramas ilustran algunos de los mtodos de los streams de b#tes 4ue tratan la com/resin&
F ;C F
Disear # Programar todo es em/ezar
+%e;late01
De0later"utputStrea)
+setComment01
+set4extEntr&01
+set9e!el01
+set@et'o%01
1I!"utputStrea)
-crc
91I!"utputStrea)
+in;late01
+;ill01
In0laterInputStrea)
+createBi$Entr&01
+3et4extEntr&01
1I!InputStrea)
-crc
-eos
-CB>P2@8C>C
91I!InputStrea)
-in
FilterInputStrea)
-out
Filter"utputStrea)
%i gura 9:& F Streams de entrada # salida de b#tes com/rimidos con algunos de sus miembros&
?& <& Streams de caracteres
"os datos 4ue viaan a travs de un stream de caracteres corres/onden a sucesiones legibles de caracteres Unicode 7de :?
bits binarios8& .stos datos se gestionan en la interfaz de stream usando enteros de =< bits& "os datos slo toman valores entre
C # ?99=93 # el valor F: se usa /ara indicar el fin de fluo&
"os streams de caracteres /ueden ser de entrada o de salida& "os streams de entrada derivan de la clase Reader3 # los de
salida de ]riter& "os Diagramas .st)ticos de (lases de la %igura 9< ilustran algunas de las clases 4ue derivan de Reader #
]riter&
Todas las clases 4ue derivan de Reader tienen /or obeto introducir caracteres en un /rograma $ava desde otro sitio& "as
/rinci/ales clases derivadas de Reader son:
Bu""eredReader /ara construir un buffer 4ue meore el rendimiento en el acceso a otro fluo de entrada&
Adem)s aade el mtodo readi!e14 4ue devuelve un %tri!, /or cada invocacin&
CharArra5Reader # %tri!,Reader /ara transformar arra#s de caracteres # obetos %tri!, en fluos de
caracteres res/ectivamente&
"a clase I!put%treamReader es un /uente entre un I!put%tream # un Reader3 4ue /ermite transforma
fluos de b#tes en fluos de caracteres&
"a clase FileReader derivada de I!put%treamReader /ermite leer caracteres de fic*ero&
Reader
StringReader
Bu00erdReader
CharArra+Reader
FileReader
InputStrea)Reader

-riter
Bu00erd-riter
CharArra+-riter
File-riter
"utputStrea)-riter
String-riter
%i gura 9<& F Diagrama con los /rinci/ales streams de entrada # salida de caracteres&
De la clase abstracta ]riter derivan clases an)logas a las de entrada /ero en sentido o/uesto& Su obetivo es e0/ortar en
forma de caracteres los datos /roducidos /or un /rograma $ava&
.l siguiente eem/lo crea un FileReader 4ue lee un fic*ero car)cter a car)cter&
char cr7
Reader i! G new FileReader16`ombre "ichero647
do /
cr G i!.read147
8 while 1cr UG =B47
F ;:F
(a/5tulo ? F .ntradaIsalida en $ava
+rea%01
+reset01
+ski$01
+close01
+rea%&01
Reader
InputStrea)Reader
Bu00erdReader
FileReader
+toC'ar8rra&01
+siDe01
+reset01
+o$eration101
+to/trin301
+5riteTo01
CharArra+Reader
StringReader
%i gura 9=& F Steams de entrada de caracteres con algunos de sus miembros&
+5rite01
+;lus'01
+close01
-riter
"utputStrea)-riter
+ne59ine01
Bu00erd-riter
File-riter
CharArra+-riter
+3et#u;;er01
+to/trin301
String-riter
%i gura 9>& F Streams de salida de caracteres con algunos de sus miembros&
"as o/eraciones de lectura # escritura en un fic*ero utilizando directamente FileReader # File]riter /ueden ser mu#
ineficaces /or4ue en cada o/eracin de entradaIsalida slo se lee un b#te # se /uede desa/rovec*ar la ca/acidad del
/erifrico de tratar una serie de datos de una vez& Para agilizar el /roceso se debe utilizar un buffer 4ue /ermita tratar un
conunto de b#tes en cada o/eracin de entradaIsalida& .l tamao del buffer debe austarse teniendo en cuenta la ca/acidad
de almacenamiento en memoria /rinci/al del ordenador # las necesidades de lectura o escritura& "as clases Bu""reReader
# Bu""er]riter /ueden ser concatenadas a FileReader # File]riter res/ectivamente3 # /ermiten definir el tamao
del buffer 4ue se utilizar) en cada o/eracin de entradaIsalida& A continuacin se /resenta un eem/lo en el 4ue se utiliza un
buffer de :C datos /ara leer de disco& (on ello las o/eraciones f5sicas contra disco se reducen en media a : de cada :C&
int c7
Reader i! G new FileReader16C9::prueba.txt647
Reader bu" G new Bu""eredReader1i!EBC47
do /
c G bu".read147
char cr G 1char4 c7
%5stem.out.pri!t1cr47
8 while 1c UG =B47
F ;< F
Disear # Programar todo es em/ezar
?& <& : Streams del si stema
Uni0 introduo el conce/to de entradaIsalida est)ndar /ara definir los fluos de entrada3 salida # error 4ue /or defecto utiliza
un /rograma& Uni0 defini tres fluos: la entrada3 la salida # la salida de error& Por eso en $ava e0isten esos mismos tres
streams de b#tes:
%5stem.i!
%5stem.out
%5stem.err
A lo largo de los temas /recedentes *emos utilizado %5stem.out /ara mostrar mensaes /or /antalla& A*ora sabemos 4ue
%5stem.out no es la /antalla sino la salida est)ndar3 4ue /or defecto es la /antalla& .n caso de 4ue la salida de nuestro
/rograma en $ava estuviese conectada 7mediante un /i/e del s*ell8 con otro /rograma los datos enviados a %5stem.out se
dirigir5an a la entrada de ese /rograma&
De la misma forma3 los datos 4ue se env5en al fluo %5stem.err se dirigir)n a la salida de error est)ndar 4ue tenga definido
nuestro sistema o/erativo&
.l fluo de entrada %5stem.i! es m)s dif5cil de usar& %5stem.i! es un I!put%tream3 /or lo 4ue los elementos 4ue
devuelve son b#tes& (uando se *ace read sobre l3 la eecucin se sus/ende *asta 4ue /or la entrada est)ndar entra un fluo
de b#tes& .n el caso del teclado esto ocurre al /ulsar una serie de teclas # finalmente la tecla E!ter&
int c G %5stem.i!.read147
%5stem.out.pri!tl!1c47
Si 4ueremos utilizar %5stem.i! /ara leer caracteres lo m)s sencillo es transformarlo en un Reader 7#a *emos visto 4ue
eso es /osible utilizando la clase I!put%treamReader4& Adem)s es conveniente conectar este fluo a Bu""eredReader
/ara 4ue nos devuelva cada cadena introducida /or teclado como un %tri!,3 en vez de como una sucesin de nHmeros& .l
siguiente eem/lo define un Reader sobre %5stem.i! # le aco/la un Bu""eredReader /ara leer una cadena del teclado #
luego im/rimirla /or /antalla&
Reader i G new I!put%treamReader1%5stem.i!47
Bu""eredReader r G new Bu""eredReader1i47
%tri!, s G r.readi!e147
%5stem.out.pri!t16'a escrito9 647
%5stem.out.pri!tl!1s47
?& <& < #tream$okeni!er # #canner
"a clase %treamTo$e!i&er /ermite transformar un I!put%tream en una secuencia de toEens m)s f)cilmente utilizable
/or un /rograma& "os toEens /or defecto son /alabras o nHmeros se/arados /or es/acios&
(uando se le env5a un mensae de !extTo$e!14 a un %treamTo$e!i&er se 4ueda es/erando a 4ue lleguen b#tes /or el
fluo 4ue se le *a asociado en su creacin& (onforme va llegando ese fluo se es/era a 4ue se /ueda com/letar una /alabra o
un nHmero& .n cuanto se tiene una de las dos3 la eecucin continHa con la siguiente instruccin a !extTo$e!14&
+nextToken01
+lineno01
+$arse4umbers01
+commentC'ar01
+eol>s/i3ni;icant01
+lo5erCase@o%e01
+or%inar&C'ar01
+$us'#ack01
+EuoteC'ar01
+)))01
-s!al
-n!al
-TT2E=9
-TT2E=F
-TT247@#E6
-TT2F=6D
-tt&$e
Strea)&o*eni3er
%i gura 99& F Algunas de las /ro/iedades de la clase 4ue divide un stream en toEens&
.l siguiente eem/lo ilustra el uso de un %treamTo$e!i&er /ara leer una cadena desde teclado3 le#endo # distinguiendo
cada vez nHmeros o /alabras&
F ;=F
(a/5tulo ? F .ntradaIsalida en $ava
%treamTo$e!i&er /ermite seleccionar el car)cter 4ue se utiliza como se/arador de toEens3 como fin de l5nea e incluso
elegir un car)cter /ara identificar comentarios 4ue no se asocian a ningHn toEen& (uando el stream /roviene de fic*ero la
condicin de .O% 7end of file8 se /roduce de manera natural3 sin embargo cuando el stream /roviene del teclado es
necesario forzar .O% mediante la combinacin (6T"O(&
int resultadoGC7
%treamTo$e!i&er !ums G new %treamTo$e!i&er1%5stem.i!47

while 1!ums.!extTo$e!14 UG %treamTo$e!i&er.TT#EaF4 /
if 1!ums.tt5pe GG %treamTo$e!i&er.TT#]aRD4
%5stem.out.pri!tl!1!ums.sval47
else if 1!ums.tt5pe GG %treamTo$e!i&er.TT#`^MBER4
%5stem.out.pri!tl!1!ums.!val47
8
"a clase %ca!!er se califica *abitualmente como el relevo de %treamTo$e!i&er& %ca!!er /ermite definir la e0/resin
regular 4ue toEeniza el stream& "a /rofundidad de las e0/resiones regulares est) m)s all) del obeto de este te0to3 /or lo 4ue
se recomienda la lectura de un te0to es/ec5fico&
?& =& !ane o de fi c*eros
$ava3 adem)s de los streams /ro/orciona tres clases m)s /ara el maneo de fic*eros:
File&F .sta clase /ro/orciona mtodos Htiles /ara trabaar con fic*eros 7crear directorios3 renombrarlos3
consultar el tamao3 borrar fic*eros # directorios3 listar elementos de un directorio3 etc&8&
+ri!t]riter&F (lase 4ue /ermite escribir en un fic*ero utilizando una sinta0is similar a la de la funcin
pri!t"14 de (&
Ra!domAccessFile&F .sta clase /ermite tratar un fic*ero como un gran arra# de caracteres de entrada # salida
al 4ue se tiene una referencia&
"os siguientes diagramas describen los /rinci/ales miembros de las clases File # Ra!domAccessFile&
+3etFilePointer01
+seek01
+len3t'01
+ski$#&tes01
+set9en3t'01
+rea%C'ar01
+rea%#&te01
+rea%Float01
+rea%>nt01
+rea%9on301
+rea%9ine01
+5riteC'ar01
+5rite#&te01
+)))01
Rando)AccessFile
+len3t'01
+renameTo01
+%elete01
+create4e5File01
+mk%ir01
+list01
+ser6ea%=nl&01
+can6ea%01
+canFrite01
+com$areTo01
+3et4ame01
+'as'Co%e01
+3etParent01
+isFile01
+isDirector&01
+)))01
-se$arator
-$at'/$erator
-se$aratorC'ar
File
%i gura 9?& F Algunas de las /ro/iedades de clases Htiles /ara maneo de fic*eros&
?& >& "a i nterfaz Seri al i zabl e
"a /ersistencia se *a descrito en el /rimer ca/5tulo como una de las ca/acidades 4ue deber5a /ro/orcionar un lenguae de
/rogramacin orientado a obetos& $ava da so/orte a la /ersistencia mediante la seri al i zaci n& Se llama serializacin al
/roceso de convertir un obeto en un fluo de b#tes # se llama deseri al i zaci n a la reconstruccin del obeto a /artir del
fluo de b#tes&
Para /ermitir un /roceso de serializacin comHn a todas las clases de obetos $ava /ro/orciona la interfaz %eriali&able&
.sta interfaz no define mtodos # slo sirve /ara indicar a los mtodos de la clase ab(ectautput%tream 4ue /ueden
actuar sobre a4uel 4ue la im/lemente& "a clase ab(ectautput%tream define el mtodo ;riteab(ect143 4ue /ermite
convertir un obeto serializable en un fluo de datos de salida& Por otro lado3 la clase ab(ectI!put%tream /ermite
transformar un fluo de datos de entrada en un obeto gracias al mtodo readab(ect14&
"os obetos se serializan llamando a ;riteab(ect14 # se deserializan con el mtodo readab(ect14& (asi todas las clases
definidas en los /a4uetes est)ndar de $ava se /ueden serializar 7/or eem/lo %tri!,3 los envoltorios&&&8& A)sicamente3 la
F ;> F
Disear # Programar todo es em/ezar
serializacin de una clase consiste en enviar a un fluo sus /ro/iedades no est)ticas3 # la deserializacin el /roceso contrario&
Para evitar 4ue una /ro/iedad determinada se serialice 7/or eem/lo una contrasea8 se /uede utilizar en su declaracin la
eti4ueta de /ro*ibicin de serializacin tra!sie!t&
Para 4ue una clase /ueda serializarse3 todas las /ro/iedades contenidas en la clase deben corres/onder a ti/os /rimitivos o a
obetos cu#as clases cum/lan a su vez la interfaz serializable& .n otro caso3 al eecutar ;riteab(ect14 obtendremos una
e0ce/cin del ti/o `ot%eriali&ableExceptio! de (ava.io& Por eso3 en el eem/lo siguiente3 tanto la clase Coche3
como la clase Rueda3 utilizada /or Coche3 son serializables&
(uando un obeto se deserializa no se obtiene el mismo obeto sino una co/ia de a4ul 4ue se serializ& .s decir3 tanto sus
/ro/iedades como su com/ortamiento son iguales3 /ero no conserva la misma identidad& .l siguiente eem/lo ilustra este
as/ecto&
class Rueda implements %eriali&able /
public int presio! G B7
8
class Coche implements %eriali&able /
public int velocidad7
public Rueda rB G new Rueda147
public Rueda rH G new Rueda147
public Rueda rK G new Rueda147
public Rueda rL G new Rueda147
8
public class E(emplo /
public static void mai!1%tri!,23 ar,s4 /
try /
Coche c G new Coche147
c.rB.presio! G HL7
%tri!, "ic G 6c9::Coche.txt67
ab(ectautput%tream salida G new ab(ectautput%tream1new Fileautput%tream1"ic447
c.velocidad G H7
c.rB.presio! G K7
salida.;riteab(ect1c47 ))%e escribe el ob(eto a disco
%5stem.out.pri!tl!1c.r.presio!47 ))a presio! valdr@ K
salida.close147

ab(ectI!put%tream e!trada G new ab(ectI!put%tream1new FileI!put%tream1"ic447
Coche c#copia G 1Coche4 e!trada.readab(ect147
%5stem.out.pri!tl!1c#copia.velocidad47 ))Estas l>!eas imprimir@! u! B 5
%5stem.out.pri!tl!1c#copia.rB.presio!47 ))a presi! valdr@ HL por.ue el valor
8 ))se ,uard a!tes de cambiarlo a K
catch1Exceptio! e4 /
%5stem.out.pri!tl!1e47
8
8
8
Si se desea tener un control ma#or sobre el /roceso de serializacin se /uede im/lementar la interfaz Exter!ali&able3 en
vez de %eriali&able& .sta interfaz3 derivada de %eriali&able3 /ermite definir los mtodos ;riteExter!al14 #
readExter!al14& .stos mtodos se invocan autom)ticamente durante la serializacin # la deserializacin /ara /ermitir al
/rogramador controlar el /roceso&
?& 9& (oncl usi ones
.n este ca/5tulo se *a visto 4ue $ava /ro/orciona dos mecanismos b)sicos de maneo de fic*eros3 uno de acceso aleatorio #
otro de acceso mediante fluos& Ser) tarea del /rogramado decidir 4u mecanismo es m)s conveniente en cada caso&
Adem)s3 /ro/orciona mecanismos de serializacin # deserializacin 4ue sim/lifican la tarea de dotar de /ersistencia a las
a/licaciones 4ue se desarrollen&
?& ?& . erci ci os
. erci ci o :
(on obeto de sustituir en un aero/uerto unas /antallas analgicas de 6adar3 se desea construir un /rograma en $ava 4ue
/ermita gestionar una /antalla digital de 6adar&
Un fabricante de /antallas digitales *a /ro/orcionado unas /antallas t)ctiles de gran tamao 4ue vienen acom/aadas de un
software de control de las mismas& .ste software consta de la clase Radar%cree! # de la interfaz RadarButto!&
"os mtodos de la clase Radar%cree!3 orientados a la interaccin con las /antallas3 son:
void radar%cree!1double latitudE double lo!,itud4&F (onstructor donde se le indica a la /antalla la latitud #
la longitud de la ubicacin del radar& De esta forma la /antalla conoce autom)ticamente el ma/a 4ue debe /resentar&
F ;9F
(a/5tulo ? F .ntradaIsalida en $ava
void dra;1i!t colorE double latitudE double lo!,itudE %tri!, eti.ueta4&F .ste mtodo /ermite
dibuar en la /antalla un obeto& "a /ro/iedad color indica al sistema el color 4ue tendr) el obeto 4ue se re/resente # 4ue
ser) distinto /ara cada entero& "as /ro/iedades latitud # longitud /ermiten es/ecificar la latitud # la longitud del obeto 4ue
se desea re/resentar& Por Hltimo3 la /ro/iedad eti4ueta /ermite asociar un te0to a este obeto /ara 4ue se visualice unto a l&
void clear%cree!14&F "im/ia la /antalla3 /re/ar)ndola /ara /intar los obetos&
void setButto!1RadarButto! butto!4&F Permite aadir un botn a la /antalla& .l botn ser) cual4uier obeto 4ue
im/lemente la interfaz RadarButto!&
"a interfaz RadarButto! define dos mtodos:
%tri!, label14&F Devuelve la eti4ueta 4ue mostrar) la /antalla al /intar el botn&
clic$14&F .st mtodo ser) llamado /or la /antalla cuando alguien /ulse el botn asociado& "a im/lementacin de este
mtodo contendr) el cdigo 4ue im/lementar) el com/ortamiento 4ue se desee /ara el botn&
A su vez3 el fabricante del radar *a /ro/orcionado una clase llamada Radar%treamReader 4ue /ermite la lectura de los
datos transmitidos /or el radar& .sta clase se /uede concatenar a un %treamTo$e!i&er /ara obtener los datos sobre los
aviones 4ue el radar detecta& .s decir3 se /uede ir /idiendo el valor 7 !val o sval8 a cada To$e! 7con !extTo$e!148 de
manera indefinida&
.l radar tiene un com/ortamiento c5clico3 4ue se re/ite a intervalos regulares& Por eso3 los datos /ro/orcionados /or la clase
Radar%treamReader tambin son c5clicos& Debindose /intar los datos en cada ciclo3 # borrar la /antalla al /rinci/io del
ciclo siguiente&
"os datos 4ue /ro/orciona la clase se re/iten segHn la siguiente secuencia: identificador3 ti/o3 latitud3 longitud3 eti4ueta&
ide!ti"icador&F +dentificador del obeto detectado /or el radar& Ser) un entero ma#or o igual a cero& .l /rimer obeto
volante ser) el C& .l siguiente el :& T as5 sucesivamente *asta 4ue vuelva a a/arecer el elemento con identificador C&
tipo&F .ntero 4ue identifica los diferentes ti/os de obetos volantes 7militares G B3 civiles G H #
!o#ide!ti"icados G K8& (ada ti/o deber) /resentarse de un color diferente en la /antalla3 4ue se corres/onder) con el
nHmero asociado al ti/o&
latitud # lo!,itud&F "atitud # longitud del obeto detectado&
eti.ueta&F (adena identificativa 7%tri!,8 transmitida /or el obeto volante al radar /ara su /resentacin en /antalla&
Se /ide:
a8 Presentar las clases 4ue a /riori se crean necesarias /ara resolver el /roblema del bucle c5clico de /resentacin de obetos
volantes 7incluidas las clases 4ue vienen im/uestas /or los fabricantes # las nuevas 4ue se consideren8& .0/licar la razn
de ser 7el contrato8 de las clases nuevas 4ue se inclu#an& Dibuar los Diagramas .st)ticos de (lases 4ue /resenten las
relaciones entre todas las clases3 inclu#endo /ro/iedades3 mtodos # visibilidad de cada uno de ellos&
b8 Dibuar un Diagrama de Secuencia con el escenario del bucle de /resentacin de im)genes 7slo es necesario /resentar
una iteracin del bucle8& .scribir en $ava el cdigo de todos los mtodos involucrados en este diagrama&
c8 Se desea aadir un botn /ara detectar las colisiones entre los obetos volantes /resentes en la /antalla& Para ello3 se *a
com/rado una nueva clase /ara detectar colisiones& .sta clase es un stream llamado
Collisio!Detector%treamReader # tiene un constructor al 4ue se le /asa como /ar)metro un
Radar%treamReader& Por lo dem)s se com/orta igual a Radar%treamReader e0ce/to /or 4ue el ti/o asignado a los
obetos 4ue /ueden colisionar se /one a C& Por eso3 se desea 4ue al a/retar este botn de deteccin de colisiones3 los
obetos 4ue /ueden colisionar cambien a color C& Detallar las clases nuevas 4ue ser)n necesarias /ara lograr este
com/ortamiento& !ostrar en un Diagrama .st)tico de (lases las relaciones con las clases e interfaces e0istentes& !ostrar
en un Diagrama de Secuencia el com/ortamiento din)mico desde 4ue se a/rieta el botn *asta 4ue se inicia el bucle
c5clico de /resentacin de obetos volantes&
F ;? F
(a/5 tul o @ .str ucturas de datos /redefi ni das en $ava
Aun4ue en $ava la clase 4ue se utiliza como contenedor b)sico es el arra# 7#a descrito en el ca/5tulo <83 el /a4uete
(ava.util aade toda una erar4u5a de interfaces # clases enfocadas a /ermitir la creacin de obetos contenedores de
otros obetos& .stos contenedores /ermiten almacenar obetos utilizando diferentes /ol5ticas de almacenamiento&
"os contenedores 4ue se encuentran en el /a4uete (ava.util /ueden ser de dos ti/os b)sicos: ti/o collectio! # ti/o
map&
,asta la versin :&9 los contenedores no utilizaban genericidad # /or lo tanto no conoc5an el ti/o del obeto 4ue conten5an&
A /artir de la versin :&9 todos los contenedores /ermiten la /arametrizacin del ti/o 4ue contienen3 aun4ue /or razones de
com/atibilidad se *a mantenido tambin la versin sin genericidad&
@& :& Collection
Todas las clases 4ue im/lementan la interfaz Collectio! se caracterizan /or constituir gru/os de obetos individuales con
una relacin de orden entre ellos& Todos los obetos de ti/o Collectio! com/arten los siguientes mtodos:
add1ob(eto43 isEmpt5143 co!tai!s1ob(eto43 clear143 remove143 si&e143 toArra514 e iterator14&
.ntre los derivados de Collectio! se /ueden destacar:
#et& F +nterfaz 4ue /uede contener un conunto de elementos donde no se admiten re/eticiones&
#orted#et& F +nterfaz 4ue deriva de %et cu#os elementos est)n ordenados& Aade los siguientes mtodos: "irst143
last143 sub%et143 head%et143 tail%et14& Precisa 4ue los elementos insertados cum/lan la interfaz Comparable #
utiliza la com/aracin 4ue esta interfaz define /ara determinar si dos obetos son iguales& "os obetos3 una vez insertados no
/ueden cambiar su relacin de orden o los resultados ser)n im/revisibles&
$ree#et& F (lase 4ue im/lementa %orted%et en la 4ue los elementos internamente se mantienen ordenados mediante una
estructura de )rbol&
%ash#et& F (lase 4ue im/lementa %et con una tabla *as*& (omo ventaa a/orta 4ue el nHmero de obetos contenidos en la
estructura no re/ercute en la velocidad de las o/eraciones de bHs4ueda3 eliminacin e insercin& Adem)s los obetos /ueden
cambiar libremente /ues la relacin de orden no de/ende de su estado& "a desventaa estriba en 4ue no se /ueden recorrer
segHn un orden fiado /or el /rogramador& Utiliza el mtodo hashCode143 definido en la clase ab(ect3 /ara determinar si
dos obetos son iguales&
List& F +nterfaz de elementos ordenados& A/orta los siguientes mtodos a la interfaz Collectio! de la 4ue deriva:
,et1>!dice43 set1>!diceEob(eto43 add1>!diceEob(eto43 remove143 i!dexa"143 subist1mi!Emax4.
&rrayList& F (lase 4ue im/lementa ist mediante un arra#& Tiene la ventaa de /ermitir un acceso aleatorio r)/ido a los
elementos 4ue contiene& "a insercin tiene un coste mu# bao3 e0ce/to cuando se sobre/asa el tamao actualmente
reservado3 momento en el 4ue autom)ticamente se debe aumentar el tamao # co/iar su contenido& "as o/eraciones de
insercin # eliminacin3 si no son /or el final3 tienen un coste elevado3 #a 4ue im/lican movimiento de memoria&
LinkedList& F (lase 4ue im/lementa ist usando un conunto de nodos doblemente enlazados& .l acceso aleatorio a los
elementos de esta estructura es m)s lento 4ue en el caso del Arra5ist& Sin embargo3 la insercin de elementos se realiza
en tiem/o constante& A/orta los siguientes mtodos: ,et"irst143 ,etast143 addFirst1ob(eto43
addast1ob(eto43 removeFirst143 removeast14&
'ector& F (lase 4ue im/lementa ist # 4ue /ermite construir vectores& .ntre otros mtodos aade algunos de acceso
aleatorio como: eleme!tAt14 e i!sertEleme!tAt14& Aector es similar a Arra5ist salvo /or dos diferencias
im/ortantes& Aector est) diseada /ara un uso concurrente seguro # Arra5ist no3 /or lo 4ue Aector es m)s segura
/ero ofrece /eor rendimiento& Adem)s3 Aector /ermite es/ecificar cmo crece su ca/acidad cuando se agota su ca/acidad
actual&
#tack& F (lase 4ue e0tiende Aector /ara /ermitir usarla con las o/eraciones *abituales en /ilas& Aade mtodos como
push # pop /ara insertar # obtener elementos de la /ila&
. em/l o de uso de &rrayList
.l siguiente eem/lo ilustra el uso de la clase Arra5ist /ara almacenar obetos de la clase %tri!, sin usar ti/os
genricos&
F ;@ F
(a/5tulo @ F .structuras de datos /redefinidas en $ava
ist lista G new Arra5ist147
for 1int co!t G C7 co!t F BCC7 co!tOO4
lista.add16'ello647
%5stem.out.pri!tl!1lista47
A continuacin se /resenta el mismo eem/lo usando ti/os genricos&
ist F%tri!,< lista G new Arra5istF%tri!,<147
for 1int co!t G C7 co!t F BCC7 co!tOO4
lista.add16'ello647
%5stem.out.pri!tl!1lista47
Obsrvese 4ue el ti/o de la variable suele definirse usando la interfaz3 inde/endizando de esta manera el cdigo de la
im/lementacin /articular 4ue se elia&
%i gura 9@& F Diagrama con los /rinci/ales contenedores derivados de Collectio!&
@& :& : .l (num#et
Ta se coment3 cuando se *abl de ti/os enumerados3 4ue un enumerado es un conunto de obetos finito # conocido #3
como tal3 /uede agru/arse en una Collectio!& Sin embargo3 dado 4ue el conunto de obetos generado en un enumerado
est) mu# controlado3 se *a creado un contenedor o/timizado /ara ellos& Dic*o contenedor es el E!um%et&
.l E!um%et es una im/lementacin es/ecial de la interfaz %et& Todos los elementos contenidos en un E!um%et deben
/ertenecer al mismo ti/o de enumerado3 indicando dic*o ti/o en la construccin del E!um%et& .sta im/lementacin es
e0tremadamente com/acta # eficiente3 siendo el reem/lazo del tradicional arra# de bits 4ue se sol5a utilizar antes& 'eamos un
eem/lo de uso del E!um%et.
F ;; F
Disear # Programar todo es em/ezar
))Creamos u! co!(u!to vacio de Dias%ema!a
E!um%etFDias%ema!a< diasAacio G E!um%et.!o!ea"1Dias%ema!a.class47
))ATadimos el miercoles
diasAacio.add1Dias%ema!a.MIERCaE%47
))Creamos u! co!(u!to co! todos los d>as de la sema!a
E!um%etFDias%ema!a< dias%ema!a G E!um%et.alla"1Dias%ema!a.class47
))Recorremos el E!um%et co! u! bucle "or=each
for 1Dias%ema!a dia 9 dias%ema!a4 /
%5stem.out.pri!tl!1dia.to%tri!,1447
8
@& <& )ap
"os contenedores de la clase Map se caracterizan /or constituir gru/os de /ares de obetos claveFvalor3 de forma 4ue todo
valor tiene asociado al menos una clave& Por eem/lo3 un vector /uede verse como un Map en los 4ue la clave es un entero 7el
5ndice8 # los valores cual4uier ti/o de obetos& "os Map generalizan este conce/to /ermitiendo 4ue tambin el ti/o del 5ndice
/ueda ser cual4uier clase de obetos& Por eem/lo3 /ara construir un directorio telefnico3 se /odr5a utilizar un Map 4ue use
/ara la clave el nombre # /ara el valor un entero con el nHmero telefnico&
)ap& F "os obetos 4ue cum/len la interfaz Map tiene los siguiente mtodos: si&e143 isEmpt5143
co!tai!sfe51ob(ecto43 co!tai!sAalue1ob(eto43 ,et1ob(eto43 put7ob(eto3ob(eto83 remove1ob(eto43
clear14&
#orted)ap&F +nterfaz derivada de Map 4ue obliga a 4ue los elementos 4ue lo constitu#en cum/lan la interfaz Comparable&
$ree)ap& F (lase 4ue im/lementa %ortedMap con un Tree%et /ara los 5ndices&
%ash)ap& F (lase 4ue im/lementa %ortedMap con 'ash%et /ara los 5ndices&
(omo #a *emos dic*o se debe cuidar 4ue los elementos almacenados en los Tree%et no cambien su criterio de
com/aracin3 #a 4ue en ese caso el contenedor no garantiza su com/ortamiento& .videntemente esto se e0tiende a los
5ndices de un TreeMap& (uando forzosamente se deban utilizar como 5ndices obetos mutables 4ue cambien su relacin de
orden3 se deber) usar 'ashMap3 en otro caso se /uede /referir TreeMap /or el orden 4ue se obtiene al recorrerlos&
%i gura 9;& F Diagrama con varios contenedores derivados de Map&
. em/l o de uso de %ash)ap
.l siguiente eem/lo ilustra el uso de la clase 'ashMap /ara almacenar obetos de la clase %tri!,3 utilizando a su vez como
5ndice un %tri!,&
F ;DF
(a/5tulo @ F .structuras de datos /redefinidas en $ava
Map m G new 'ashMap147
m.put16+edro cutierre&6E6MB LHL BH BH647
m.put16-ua! co!&ale&6E6MB LKL LK BH647
@& =& +teradores
"os iteradores constitu#en el mecanismo /ro/orcionado /or la biblioteca de $ava /ara recorrer secuencialmente los
elementos de cual4uier contenedor& "os iteradores tienen los siguientes mtodos: has`ext143 !ext143 # remove14&
.l siguiente eem/lo ilustra el uso de un iterador /ara recorrer una lista de obetos de la clase Coche3 a/licando luego un
mtodo sobre ellos:
Iterator FCoche< e G mi#lista#coches.iterator147
while 1e.has`ext144 /
Coche c G e.!ext147
c.acelerar147
8
A /artir de la versin 9 de $ava3 la estructura de control "or /ermite el uso de obetos 4ue cum/lan la interfaz iterator
/ara construir bucles de una manera sim/lificada 7es lo 4ue se denomina un blo4ue "or=each8&
"or 1Fparametro<9Fexpresio!<4
@mbito Y se!te!cia
.n esta estructura el identificador expresio! corres/onde a un arra# o un obeto iterable3 mientras 4ue el identificador
parametro corres/onde a una referencia de ti/o com/atible con los elementos 4ue com/onen el arra# o el obeto iterable&
.l siguiente fragmento de cdigo suma todos los elementos de un arra# de enteros&
int 23 arra5#e!teros G new int 2KC37
int suma G C7
for 1int v9arra5#e!teros4 /
suma OG v7
8
.ste otro fragmento de cdigo suma el tamao de las cadenas contenidas en un vector&
Aector F%tri!,< vector#cade!as G new Aector F%tri!,<147
vector#cade!as.add16-ose647
vector#cade!as.add16A!dres647
int suma G C7
for 1%tri!, str9vector#cade!as4 /
suma OG str.si&e147
8
.n el uso de iteradores sobre Collectio!s debe tenerse /recaucin si la estructura de datos cambia mientras 4ue se
recorre& .n /articular3 Arra5ist # Aector /or su diseo3 son m)s susce/tibles de 4ue se /roduzcan errores si su
estructura cambia mientras se recorren con un iterador&
@& >& "a cl ase Collections
Para facilitar el uso de las colecciones se aadi a $ava la clase Collectio!s& .sta clase est) formada e0clusivamente /or
mtodos est)ticos 4ue devuelven u o/eran sobre colecciones&
.n algunas ocasiones es interesante dis/oner de colecciones de solo lectura& Por eem/lo3 si un mtodo devuelve un
Arra5ist3 /uede interesar 4ue el rece/tor de dic*a coleccin no /uede modificarla& Para /osibilitar este
com/ortamiento3 la clase Collectio!s dis/one de mtodos 4ue /ermiten envolver cual4uier coleccin # devolver una
versin de solo lectura3 tal 4ue si se intenta aadir un obeto a cual4uiera de ellos se /roduce una
^!supportedaperatio!Exceptio!& .stas colecciones de solo lectura tambin se dice 4ue son inmutables& Una
/ro/iedad interesante de tales clases es 4ue3 al ser im/osible su modificacin es /osible su uso simult)neo desde varios *ilos
sin riesgo de condiciones de carrera&
F DC F
Disear # Programar todo es em/ezar
Adem)s3 la clase Collectio!s /osee mtodos est)ticos /arametrizados mu# Htiles /ara sim/lificar la devolucin de
colecciones vac5as& Dic*os mtodos son empt5ist143 empt5%et14 # empt5Map14& "os obetos devueltos son
inmutables&
"a clase Collectio!s tambin /osee mtodos /ara: encontrar los m)0imos # m5nimos de los elementos contenidos en una
collectio!3 co/iar una lista en otra3 realizar bHs4uedas binarias sobre listas3 etc&
(onocer los mtodos de utilidad 4ue ofrece esta clase /uede a*orrar muc*o trabao a la *ora de trabaar con colecciones #
ma/as # es bueno tenerla en cuenta&
@& 9& .l resto del /a4uete java*util
.l /a4uete (ava.util es un /e4ueo can de sastre 4ue contiene multitud de clases 4ue nos *acen m)s f)cil construir
/rogramas en $ava& A /arte de los contenedores encontramos clases /ara el tratamiento de fec*as 7Date3 Cale!dar83 /ara
definir alarmas 7Timer3 TimerTas$83 /ara el tratamiento de cadenas de te0to 7%ca!!er3 Formatter3
%tri!,To$e!i&er83 /ara la generacin de nHmeros aleatorios 7Ra!dom83 /ara utilizar elementos relativos a la
configuracin local del e4ui/o 7ocale3 Timeeo!e3 Curre!c583 /ara facilitar la concurrencia 7%emaphores3
Arra5Bloc$i!,bueue3 %5!chro!ousbueue&&&8&
@& ?& (oncl usi ones
Se /uede /ensar 4ue conocer un lenguae de /rogramacin consiste en conocer las /rimitivas del mismo # /oco m)s3 /ues la
fle0ibilidad de los lenguaes de /rogramacin /ermite 4ue el /rogramador desarrolle todo cuanto necesite /artiendo de cero&
Adem)s3 como #a se dio en el /rimer ca/5tulo3 los desarrolladores suelen /referir usar sus /ro/ios desarrollos a los
construidos /or terceros& .ste *ec*o se deriva de la /oca confianza 4ue e0iste en los desarrollos de otras /ersonas3 #
tambin3 de los /roblemas de comunicacin relativos al tras/aso de software&
Para ataar la creciente com/leidad del software este *ec*o debe cambiar& (onocer las bibliotecas est)ndar de un lenguae
resulta im/rescindible /ara obtener resultados garantizados& ,a# 4ue entender 4ue es meor no crear todo /artiendo de cero
cada vez& "a asociacin # la *erencia deben ser los ve*5culos 4ue /ermitan es/ecializar las clases /ro/orcionadas /or estas
bibliotecas3 ada/t)ndolas a los com/ortamientos /articulares 4ue un diseo /articular /recisa&
@& @& "ecturas recomendadas
1.l lenguae de /rogramacin $ava23 =V .dicin3 Arnold -osling3 Addison Gesle#3 <CC:&
1Piensa en $ava23 <V .dicin3 Aruce .cEel3 Addison Gesle#3 <CC<&
1+ntroduccin a la Programacin Orientada a Obetos con $A'A23 (& T*omas Gu3 !c -raw ,ill3 <CC:&
@& ;& . erci ci os
. erci ci o :
Disear3 a/o#)ndose en la clase %et3 una clase Bombooteria 4ue /ermita construir un /rograma /ara ugar al bingo&
F D:F
(a/5 tul o ; Patrones # /ri nci /i os de di seo
Ta se *an revisado los /rinci/ales elementos 4ue /ermiten la Programacin Orientada a Obetos& Sin embargo3 *a# 4ue
sealar 4ue un buen diseo orientado a obetos no slo consiste en utilizar los elementos 4ue se *an e0/licado sin orden ni
concierto3 sino 4ue uega un /a/el fundamental la e0/eriencia del diseador& ,a# 4ue encontrar las abstracciones adecuadas3
construir interfaces eficaces # establecer las relaciones necesarias entre ellas& Adem)s3 todo ello debe *acerse de manera
es/ec5fica /ara el /roblema 4ue se /retende resolver3 /ara 4ue la /rogramacin ofrezca la ventaa de acercarse al dominio del
/roblema& Por otro lado3 # tambin debe *acerse de manera genrica3 /ara 4ue sea f)cil incor/orar nuevos re4uisitos o
resolver /roblemas distintos con los mismos obetos&
.n este tema se esboza el /rinci/io del camino 4ue un diseador de /rogramas orientados a obetos debe recorrer& Para ello
se introduce el conce/to de Patrn de Diseo # se /resentan unos cuantos de los m)s im/ortantes& Posteriormente se
enuncian algunos /rinci/ios 4ue a#udan a crear un buen diseo&
;& :& Pri nci /al es Patrones de Di seo
.s un *ec*o 4ue3 en general3 los diseadores noveles no son ca/aces de *acer buenos diseos3 /ues no utilizan
adecuadamente las *erramientas 4ue la Programacin Orientada a Obetos /ro/orciona& !ientras3 los diseadores
e0/erimentados se caracterizan /or conocer multitud de buenas soluciones a /roblemas 4ue #a *an tenido 4ue resolver3 #
reutilizan estas soluciones ada/t)ndolas a los nuevos /roblemas 4ue abordan&
"os Patrones de Diseo intentan ca/turar esa e0/eriencia en un conunto de diseos genricos 4ue sean a/licables a un sin
fin de /roblemas& SegHn (*risto/*er Ale0ander3 destacado ar4uitecto del siglo aa3 1cada /atrn de diseo describe un
/roblema 4ue ocurre una # otra vez en nuestro entorno3 as5 como la solucin a ese /roblema de tal modo 4ue se /ueda
a/licar esta solucin una # otra vez3 sin re/etir cada vez lo mismo2& .sta descri/cin es v)lida tambin /ara los Patrones de
Diseo de la Programacin Orientada a Obetos& .n los siguientes /untos se analizan algunos de los Patrones de Diseo
m)s utilizados&
;& :& : %)bri ca Abstracta 7Abstract %actor #8
Una de las o/eraciones m)s comunes al /rogramar con obetos es3 lgicamente3 la creacin de los obetos& Sin embargo3 esta
o/eracin es en si misma un foco de aco/lamiento& (uando desde un fragmento de cdigo C invocamos la creacin de un
obeto de la clase A estamos aco/lando ese cdigo con el de la clase A& Si /osteriormente deseamos cambiar el obeto de
clase A /or otro de otra clase 4ue cum/la su misma interfaz no /odremos *acerlo sin cambiar el cdigo C&
Para evitar este /roblema se suele delegar la creacin de los obetos a otro obeto 4ue se denomina f)brica 7factor#8& De esta
manera desde el cdigo C no creamos el obeto A directamente3 sino 4ue se lo /edimos a la clase f)brica& .videntemente3
/ara evitar el aco/lamiento de la f)brica con el cdigo C3 la /ro/ia f)brica deber) obtenerse /or /ar)metros&
%i gura 9D& F (ada /roducto concreto se crea desde un constructor es/ecifico&
F D= F
(a/5tulo ; F Patrones # /rinci/ios de diseo
Adem)s3 el /atrn %)brica /ermite ocultar los constructores de las clases 4ue crea3 de manera 4ue solo se /uedan crear los
obetos a travs de la f)brica3 im/idiendo de esta forma su creacin de una forma no /revista&
A continuacin se /resenta un eem/lo en el 4ue el /atrn mtodo de fabricacin se utiliza /ara 4ue un sistema gr)fico
/ueda crear diferentes ti/os de registros en una a/licacin de gestin de /iezas en un taller& .n este caso3 la se/aracin entre
los obetos f)brica # la a/licacin de gestin /ermite aadir nuevos ti/os de /iezas # 4ue la a/licacin no deba ser
modificada&
%i gura ?C& F .n este eem/lo se dis/one de un constructor 4ue /ermite
crear cone0iones con las diferentes bases de datos de los fabricantes a
un /rograma de facturacin de un taller&
%i gura ?:& F Diagrama de secuencia 4ue muestra el uso de una f)brica /ara el maneo /olimrfico
de diferentes ti/os de cone0iones&
.0isten otros Patrones de Diseo /ara la creacin de obetos& .n /articular se /uede destacar al /at rn (onst r uctor
7Aui l der8 # al /atrn !todo de (onst r ucci n 7%actor # !et*od8& .l /atrn (onstructor es similar al /atrn
%)brica Abstracta salvo en 4ue una %)brica suele crear colecciones de obetos3 mientras 4ue un constructor solo crea un ti/o
de obetos& Por otro lado3 el /atrn !todo de (onstruccin se diferencia del /atrn %)brica en 4ue son los /ro/ios obetos
derivados los 4ue crean3 mediante un mtodo de construccin3 los obetos concretos 4ue se necesitan en cada momento&
Otra alternativa al uso del /atrn %abrica Abstracta consiste en el uso de in#ectores de de/endencias& Son obetos 4ue se
/rograman o se configuran /ara 4ue devuelvan familias concretas de /roductos cuando cual4uier clase de la a/licacin le
F D> F
Disear # Programar todo es em/ezar
solicita cierto ti/o de /roducto& .stas tcnicas se a/o#an en las caracter5sticas de intros/eccin de $ava # /ueden ser
com/lementarias al uso de %)bricas Abstractas&
;& :& < Ada/tador o .nvol tori o 7Ada/ter o Gra//er8
.l /atrn .nvoltorio se utiliza cuando se desea 4ue una clase utilice otra aun4ue sta no cum/le cierta interfaz obligatoria&
Por eem/lo3 en el diagrama adunto la clase Clie!te solo /uede utilizar obetos 4ue cum/lan la interfaz I!ter"a&Ami,a3
/ero se desea utilizar sobre la clase ExtraTa& Para ello3 se crea la clase Adaptador3 4ue contiene un obeto de la clase
ExtraTa /ero 4ue im/lementa la interfaz Ami,a& De esta forma3 la clase ^suaria utiliza3 indirectamente3 la clase
ExtraTa&
%i gura ?<& F .l cliente accede a la clase e0traa utilizando una interfaz 4ue conoce # 4ue
envuelve a la clase e0traa&
.ste /atrn se utiliza cuando deseamos almacenar un ti/o /rimitivo de $ava en un derivado de Collectio!& Por eem/lo3
su/ongamos 4ue deseamos almacenar un i!t en un Aector& (omo los enteros no son elementos de la clase ab(ect es
necesario envolverlos en otra clase 4ue contenga el entero # 4ue3 al derivar de ab(ect3 s5 /ueda ser insertada en el vector&
Por eso3 # /or otras razones3 en $ava e0isten clases como I!te,er3 Float3 Boolea! o Character 4ue son envoltorios de
los ti/os /rimitivos&
%i gura ?=& F .n este caso el ada/tador es I!te,er # ada/ta al ti/o /rimitivo
i!t /ara 4ue /ueda ser usado como un ab(ect&
;& :& = Decorador 7Decorator8
.l /atrn Decorador /ermite aadir nueva funcionalidad a una familia de com/onentes manteniendo la interfaz del
com/onente& .l siguiente diagrama ilustra este /atrn& "a clase Compo!e!te es abstracta3 la clase Compo!e!teCo!creto
im/lementa un com/ortamiento determinado& "a clase Decorador contiene un Compo!e!te en su interior& (uando se
solicita una o/eracin al obeto de la clase Decorador esta la deriva al Compo!e!te 4ue contiene& "as clases derivadas de
Decorador son los verdaderos Decoradores 4ue im/lementan una nueva funcionalidad aadida al Compo!e!te 4ue
contienen&
F D9F
(a/5tulo ; F Patrones # /rinci/ios de diseo
DecoradorADeComponenteConcreto
+ operacion()
Decorador
+ operacion()
Componente
+ operacion()
ComponenteConcreto
+ operacion()
DecoradorBDeComponenteConcreto
+ operacion()
1
%i gura ?>& F .l decorador A aade cierta funcionalidad a cual4uier com/onente manteniendo la interfaz de tal com/onente&
Por eem/lo3 el /atrn Decorador se /uede utilizar3 /ara aadir cifrado o com/resin a las clases de escritura en Streams&
As53 la clase de la 4ue derivan todas ser5a ]riter& Un ]riter concreto3 /or eem/lo3 es el File]riter& "a misin de
]riterDecorator es la de redirigir las llamadas a los diferentes mtodos de la interfaz ]riter *acia el ]riter concreto
4ue contiene 7File]riter3 +ri!ter]riter&&&8& %inalmente3 las clases E!cript]riter # eip]riter im/lementan
cierta o/eracin sobre el fluo de salida 4ue se dirige *acia el ]riter concreto contenido en el Decorador&
%i gura ?9& F Decorador /ara aadir un buffer # com/resin a un ]riter&
.l siguiente Diagrama de Actividad muestra el com/ortamiento es/erado /ara este /atrn&
%i gura ??& F "a escritura /asa /rimero /or el decorador 7el eip]riter83 el cual decide cu)ndo
enviarla al elemento decorado 7el File]riter en este caso8&
F D? F
Disear # Programar todo es em/ezar
;& :& > (om/osi ci n 7(om/osi te8
.s mu# comHn la necesidad de crear grafos dirigidos en los 4ue cada nodo /uede re/resentar ciertos elementos de un
modelo inform)tico& .stos grafos suelen crearse utilizando el /atrn (om/osicin& .ste /atrn se /uede definir como
erar4u5as de obetos 4ue com/arten una interfaz # tales 4ue algunos de los obetos /ueden formar /arte de otros& "a
siguiente figura describe este /atrn& Obsrvese 4ue tanto los obetos de la clase Eleme!to como los de Compuesto
cum/len la interfaz Compo!e!te3 /ero los de clase Compuesto adem)s /uede contener dentro otros obetos de la clase
Compo!e!te&
%i gura ?@& F "a clase com/onente /ro/orciona la interfaz comHn& "as clases derivadas /ueden
ser de dos ti/os: com/uestos 74ue a su vez agru/an a otros com/onentes8 o sim/les *oas&
Por eem/lo3 en una erar4u5a de com/onentes de dibuo /uede ser im/ortante 4ue todos los elementos 4ue se /uedan
dibuar com/artan cierta interfaz3 /ero adem)s tambin es im/ortante 4ue unos elementos /uedan formar /arte de otros
7los obetos l5nea forman /arte del obeto cuadrado8&
;& :& 9 +terador 7+terator8
,abitualmente3 cuando se dis/one de una coleccin de obetos se desea recorrerlos& .l /atrn +terador /ermite definir
obetos /ara realizar esta tarea& Un obeto iterador es una es/ecie de a/untador 4ue se /uede iniciar a/untando al /rimer
elemento de una coleccin # 4ue /uede des/lazarse *asta el Hltimo elemento de la misma&
$ava dis/one de la interfaz Iterator3 la cual est) im/lementado /or las diferentes clases de Collectio!& .n realidad3
estas clases son f)bricas de iteradores 4ue /ermiten recorrerlas&
%i gura ?;& F .l iterador concreto /ermite recorrer el contenedor concreto&
F D@F
(a/5tulo ; F Patrones # /rinci/ios de diseo
;& :& ? .strategi a 7Strateg#8
.n cual4uier /rograma es *abitual dis/oner de un conunto de algoritmos 4ue com/arten alguna /ro/iedad3 como 4ue
/ueden eecutarse indistintamente sobre unos datos de entrada o 4ue sean de determinado ti/o& .em/los de tales familias
ser5an las funciones matem)ticas 7seno3 coseno3 ra5z&&&8 o los filtros gr)ficos de un /rograma de dibuo& .l /atrn .strategia
/ermite organizar dic*as familias de algoritmos3 de manera 4ue com/artan una interfaz /ara 4ue luego los clientes de dic*as
clases /uedan utilizarlos indistintamente&
%i gura ?D& F "os obetos de la clase de conte0to 4ue acceden a la familia de algoritmos los
*acen de forma abstracta3 sin im/ortarles el algoritmo es/ec5fico 4ue se est) utilizando&
Un eem/lo de uso del /atrn .strategia /uede ser la im/lementacin de los diferentes algoritmos de ordenacin de una
lista de nHmeros 7ver %igura @C8& -racias al /atrn .strategia el usuario del conte0to /uede modificar su criterio de
ordenacin de forma din)mica&
%i gura @C& F Un usuario /uede utilizar cual4uiera de los algoritmos 4ue cum/lan la
interfaz de ordenacin a travs del obeto Co!texto&
;& :& @ (omando 7(ommand8
.ste /atrn enca/sula las o/eraciones 4ue realiza un obeto de forma 4ue stas sean a su vez obetos 4ue cum/len una
misma interfaz& .sto /ermite realizar3 de manera sencilla3 tareas como: agru/ar o encolar o/eraciones3 des*acer o/eraciones
# /arametrizar otros obetos con dic*as o/eraciones de forma sencilla& Adem)s3 fomenta 4ue aadir nuevos comandos sea
una tarea sim/le # aislada& .l Diagrama .st)tico de (lases adunto describe su estructura est)tica # el Diagrama de Secuencia
de la %igura @< e0/lica su com/ortamiento din)mico&
.l /atrn (omando se /odr5a utilizar3 /or eem/lo3 /ara ordenar los comandos 4ue se /ueden eecutar desde un intr/rete
de consola 7ver %igura @=8& Si el inter/rete utiliza los comandos solo a travs de la interfaz comHn3 sin conocer en cada
momento el comando concreto 4ue se est) eecutando3 una de las ventaas 4ue se obtienen consiste en 4ue el nHmero de
comandos /uede crecer sin modificar dic*o inter/rete&
F D; F
Disear # Programar todo es em/ezar
%i gura @:& F Diagrama de clases del /atrn (omando&
%i gura @<& F .l cliente crea los comandos # los asocia al eecutor& !)s tarde3 eecuta el
comando 4ue corres/onda& Dic*o comando3 4ue conoce al rece/tor de su orden3 eecuta la
accin asociada al rece/tor 4ue conoce &
%i gura @=& F .l obeto de clase +nter/rete slo necesita conocer la interfaz de la clase
Coma!do%hell& .n este caso3 el sistema o/erativo ser5a el rece/tor # el inter/rete ser5a el eecutor&
F DDF
(a/5tulo ; F Patrones # /rinci/ios de diseo
;& :& ; Obser vador 7Obser ver8
.ste /atrn crea una relacin entre obetos en la 4ue uno de ellos es observado /or el resto3 de manera 4ue cuando el obeto
observado cambia el resto /uede autom)ticamente realiza alguna accin& .n la %igura @> se /resenta el Diagrama .st)tico de
(lases de este /atrn& Din)micamente3 cuando cambia el estado del obeto Eleme!toabservadoCo!creto se eecuta el
mtodo avisar143 el cual llama al mtodo actuar14 de cada observador&
%i gura @>& F .l .lemento observado avisa a los observadores cuando su estado cambia&
.l /atrn Observador lo utiliza $ava /ara im/lementar el cdigo 4ue se eecuta cuando un obeto de ti/o com/onente
cambia de estado& $ava crea un obeto de clase iste!er 7escuc*ador en vez de observador8 /ara cada o/eracin 4ue se
realiza con un botn 7elemento observado en este caso8& .se obeto iste!er contiene el cdigo 4ue se eecuta al realizar
la o/eracin sobre el botn& As53 cuando un usuario /ulsa un botn # el estado del com/onente botn cambia el iste!er
4ue lo observa es ca/az de eecutar cierto cdigo&
;& <& Al gunos /ri nci /i os Hti l es en POO
.n este a/artado se /resentan algunos /rinci/ios 4ue se deben seguir al realizar el diseo de un /rograma orientado a
obetos&
;& <& : .l /ri nci /i o abi ertoFcerrado
Aertrand !e#er estableci el siguiente /rinci/io en :DD;:
Todas las entidades de software 7clases3 mdulos3 funciones&&&8 deben estar abiertas /ara e0tensiones # cerradas /ara
modificaciones&
.ste /rinci/io intenta evitar 4ue un cambio en un /rograma /roduzca una cascada de cambios en mdulos de/endientes&
"os /rogramas 4ue se *agan siguiendo este /rinci/io deber)n tener v5as /ara 4ue cuando los re4uisitos cambien /odamos
e0tender el com/ortamiento aadiendo nuevo cdigo 7abierto a e0tensin83 /ero sin cambiar el cdigo 4ue #a funciona
7cerrado a modificacin8&
"a meor forma de conseguir 4ue un cdigo siga este /rinci/io consiste en fomentar el uso de clases abstractas o interfaces
en las relaciones entre obetos&
%i gura @9& F .n una relacin entre clases debe /referirse siem/re el es4uema 7b8 al 7a8&
(omo consecuencia del /rinci/io abiertoFcerrado a/arecen dos corolarios:
Todas las /ro/iedades deben ser /rivadas&F Si una /ro/iedad no es /rivada ningHn mdulo e0terno 4ue de/enda de
esa variable /odr) estar cerrada a modificaciones cuando /or eem/lo se cambie el com/ortamiento de la
/ro/iedad o se elimine& Adem)s cual4uier modulo e0terno 4ue utilice la variable de una forma no es/erada /or el
resto de mdulos clientes de la variable *ar) 4ue stos fallen&
F :CC F
Disear # Programar todo es em/ezar
.vitar la identificacin din)mica 7uso del casting de referencias # de i!sta!ceo"8& Si un mdulo necesita
identificar el ti/o de un obeto en tiem/o de eecucin /ara tomar una decisin3 este mdulo /odr5a no estar
cerrado a modificaciones 4ue ocurrir5an cuando a/areciesen nuevas clases de obetos&
;& <& < .l /ri nci /i o de "i sEov
Aarbara "isEov estableci el siguiente /rinci/io:
Toda funcin 4ue utiliza referencias a un obeto de una clase A debe ser ca/az de usar obetos de clases derivadas de A sin
saberlo&
.ste /rinci/io ofrece un camino /ara 4ue el cdigo sea m)s f)cil de e0tender3 #a 4ue fomenta la creacin de mtodos 4ue
/ueden funcionar con clases 4ue aHn no *an sido creadas&
;& <& = .l /ri nci /i o de segregaci n de i nterfaces
6obert (& !artin estableci el siguiente /rinci/io:
.s /referible varias interfaces es/ec5ficas 4ue una Hnica interfaz general&
Seguir este /rinci/io minimiza el im/acto del cambio de una interfaz3 #a 4ue no e0isten grandes interfaces de las 4ue
de/enden multitud mdulos&
;& <& > !a0i mi zar el uso de cl ases i nmutabl es
"as clases inmutables son a4uellas cu#os obetos no cambian de estado una vez creados& Por eem/lo3 %tri!, es una clase
inmutable& (on obeto de forzar este com/ortamiento todas las /ro/iedades de la clase deben ser finales& "a inmutabilidad
sim/lifica enormemente la im/lementacin de una clase& Adem)s *ace /osible el uso de un mismo obeto desde diferentes
t*reads simult)neamente sin usar mecanismos de e0clusin& .videntemente3 es im/osible 4ue ciertas clases3 las 4ue
mantienen el estado de un /rograma3 sean inmutables&
;& <& 9 Preferi r com/osi ci n frente a *erenci a
Ta se *a comentado 4ue la *erencia rom/e la enca/sulacin& Tal # como se *a com/robado con el /atrn Decorador3
siem/re es /osible obtener un com/ortamiento similar a la *erencia utilizando com/osicin& Para forzar esta /referencia es
una buena /r)ctica siem/re definir las clases # los mtodos como finales3 evitando de esta forma 4ue se /ueda *eredar de
ellos& Solo en los casos en los 4ue la *erencia se /lanifi4ue3 como en el /atrn .strategia3 se debe omitir el modificador
"i!al&
;& <& ? Pri nci /i o de res/onsabi l i dad Hni ca
Una clase debe tener una Hnica res/onsabilidad # dic*a res/onsabilidad debe estar com/letamente enca/sulada en dic*a
clase& 6obert (& !artin define este /rinci/io como sigue:
Una clase debe tener un Hnico motivo /ara cambiar de estado&
;& <& @ .l i mi nar du/l i caci ones
And# ,unt denomin a este /rinci/io D6T 7Don`t re/eat #our self8& Siem/re 4ue e0iste una du/licacin se debe a 4ue no se
*a abstra5do lo suficiente& Probablemente3 la du/licacin se /ueda eliminar con la introduccin de un nuevo mtodo o una
nueva clase&
"a ma#or5a de los /atrones 4ue *an a/arecido en los Hltimos :9 aos *an sido creados /ara eliminar las du/licaciones en el
cdigo&
;& <& ; Pri nci /i o de i nversi n de de/endenci a
"os mdulos de alto nivel no deben de/ender de los mdulos de bao nivel& Ambos deben de/ender de abstracciones&
;& <& D Preferi r el /ol i morfi smo a l os bl o4ues ifIelse o switchIcase
Jormalmente3 el uso de uno de estos blo4ues indica 4ue la clase est) rom/iendo el /rinci/io de res/onsabilidad Hnica& Si en
una clase tenemos un blo4ue i"Ielse3 esa clase unas veces tendr) una res/onsabilidad 7cuando entre /or la rama i"8 #
otras veces tendr) otra diferente 7cuando entre /or la rama else8& Pr)cticamente la totalidad de los blo4ues i"Ielse # de
los blo4ues s;itch)case /ueden reem/lazarse mediante /olimorfismo&
F :C:F
(a/5tulo ; F Patrones # /rinci/ios de diseo
;& <& :C (oncl usi ones
.l descubrimiento de estructuras comunes 7/atrones8 en diferentes ti/os de /rogramas3 /uede a#udar a identificar buenas
estructuras 4ue se /ueden reutilizar en diferentes im/lementaciones& .s /or ello 4ue3 desde a4u53 se anima al lector a 4ue
/rofundice en los conocimientos de Programacin Orientada a Obetos 4ue acaba de ad4uirir mediante este camino&
;& =& "ecturas recomendadas
1Patrones de Diseo23 .ric* -amma # otros3 Addison Gesle#3 <CC<& .ste libro es la /rinci/al gu5a de referencia en cuanto a
/atrones de diseo&
1Piensa en $ava& .cEel23 <V .dicin3 Addison Gesle#3 <CC<& Su ane0o ( contiene un gran com/endio de /rinci/ios # buenas
/r)cticas&
1(lean (ode23 6obert (& !artin&
1Design Princi/les and Design Patterns23 6obert (& !artin3 www&obectmentor&com3 <CCC&
;& >& . erci ci os
. erci ci o :
6ealice el diseo de un /rograma 4ue im/lemente una ,oa de ()lculo&
.l /rograma contendr) en cada momento un libro abierto el cual se com/ondr) de varias *oas& A su vez3 cada *oa contiene
celdas en cada una de las cuales se /ueden dis/oner te0to o frmulas&
.l te0to consistir) en un conunto de caracteres alfanumricos entre comas sim/les& "as frmulas se com/ondr)n de
constantes numricas 7<3 =&:>&&&83 o/eradores sim/les 7OFUI8 # funciones /redefinidas 7cos3 sen3 tg &&&8& .l ane0o : describe la
gram)tica 4ue deber)n seguir las frmulas&
"as celdas se dis/onen en forma de ret5cula3 formada /or filas # columnas& (ada columna # cada fila estar) eti4uetada /or un
nHmero consecutivo& Podr) *aber un nHmero indeterminado de filas # columnas3 aun4ue en /antalla slo se /odr)n ver
simult)neamente un subconunto del total& .n todo momento *abr) siem/re una *oa activa3 de manera 4ue las o/eraciones
con las celdas se referir)n siem/re a una *oa concreta&
"a interaccin con el /rograma3 4ue /odr) ser en modo te0to3 consistir) en la escritura de instrucciones mediante el teclado&
As53 el sistema ofrecer) un /rom/t # el usuario /odr) escribir una instruccin3 la cual se eecutar) tras /resionar la tecla
6eturn& .l ane0o < describe el uego de instrucciones 4ue deber) admitir el /rograma&
%r mul as
"as frmulas 4ue se re4uiere 4ue contengan las celdas son las generadas /or la siguiente gram)tica en notacin AJ%:
FFgRM^A< 99G FFgRM^A< Fa+ERADaR< FFgRM^A< Y FREA< Y FF^`CIg`<1FFaRM^A<4 Y FREF<
Fa+ERADaR<99G O Y = Y * Y )
FF^`CIg`< 99G se! Y cos Y t,
FREF< 99G celda1F`hMERaE`hMERa<4
FREA< 99G F`hMERa<.F`hMERa< Y F`hMERa<
F`hMERa< 99G FDicITa< Y FDicITa< F`hMERa<
FDicITa< 99G C Y B Y H Y K Y L Y J Y D Y P Y N Y M
Donde:
cos7Xfr mul aY8& F (alcula el coseno de una frmula&
sen7Xfr mul aY8& F (alcula el seno de una frmula&
tg7Xfr mul aY8& F (alcula la tangente de una frmula&
cel da7Xfi l a3 col umnaY8& F Devuelve el valor contenido en la celda &
$uego de i nst r ucci ones
"as rdenes 4ue se desea 4ue tenga la *oa de c)lculo est) com/uesto /or las siguientes instrucciones:
F :C< F
Disear # Programar todo es em/ezar
(rear"i bro& F .sta o/eracin elimina las *oas de c)lculo actualmente abiertas # crea = *oas vac5as eti4uetadas como
*oa:3 *oa< # *oa=& Adem)s se /ondr) la *oa: como *oa activa&
(rear,o a XnombreY& F (rea una *oa dentro el libro actual # la dis/one como *oa actual& "os nombres de las *oas
no /odr)n contener es/acios3 adem)s no se /odr) crear una *oa si tiene el mismo nombre 4ue otra 4ue #a e0ista&
Aor rar,o a XnombreY& F Aorra una *oa dentro el libro actual& Si era la *oa activa dis/one otra como activa& Si no
4uedan mas *oas autom)ticamente crea una nueva&
6enombrar Xnombre *o aYXnuevo nombreY& F .sta o/eracin renombra una *oa& "os nombres de las *oas no
/odr)n contener es/acios3 adem)s no se /odr) crear una *oa si tiene el mismo nombre 4ue otra 4ue #a e0ista&
,o aActual XnombreY& F Permite seleccionar cual es la *oa actual&
(el da7Xfi l aY3 Xcol umnaY8b\Xfor mul aY_X` te0to` Y]& F Permite asignar un valor nuevo a una celda& Si el valor es de
ti/o alfanumrico deber) ir entre comillas sim/les3 en otro caso corres/onder) a una frmula 4ue seguir) la gram)tica del
ane0o :&
As53 /ara asignar un valor a una celda se utilizar) la siguiente notacin:
Celda1F"ila<EFcolum!a<4GStextoS
Celda1F"ila<EFcolum!a<4G"rmula
Por eem/lo:
Celda1BEB4GSRadioS
Celda1BEH4GHJ
Celda1HEB4GS+er>metroS
Celda1HEH4GCelda1BEH4*K.BL*H7
!ostrar7Xfi l aY3 Xcol umnaY8& F !uestra /or /antalla el contenido de las celdas corres/ondientes a @ columnas # :C
filas a /artir de la casilla indicada /or el /ar 7XfilaY3 XcolumnaY8&
(ada columna # cada fila estar) encabezada /or un nHmero consecutivo 4ue la identifica& Adem)s3 todo el te0to estar)
encabezado /or el nombre de la *oa&
Se utilizar) e0actamente D caracteres /ara /resentar el contenido de cada celda # un es/acio como se/aracin con la celda
siguiente& (on el fin de 4ue a/arezca ordenado el contenido de cada celda se com/letar) con es/acios cuando el tamao sea
menor # se recortar) el contenido /or la derec*a cuando el tamao sea ma#or&
Si una celda contiene te0to alfanumrico se /resenta tal te0to en el lugar asignado&
Si una celda contiene una frmula se /resentar)3 en el lugar asignado3 el resultado de la a/licacin de la frmula en ese
momento # no el te0to de la frmula&
Por eem/lo3 Mostrar1CEC4 muestra desde la celda 7C3C8 *asta la celda 7?3D8 /resentar5a:
'o(a9 'o(aB
CY BY HY KY LY ...
C
B Radio HJ
H +er>metro BJP
K
...
Deber) detectarse la a/aricin de referencias circulares3 /or eem/lo almacenando si una celda #a *a sido calculada3 /ara
im/edir 4ue vuelva a intentarse su c)lculo&
Se devolver) el te0to ERRaR si una frmula resulta en un error3 /or eem/lo si se detecta referencia circular al calcular el
valor de una celda&
(argar& FXcr uta nombre de fi c*erocY& F Permite cargar un libro de disco&
Sal var Xcr ut a # nombre de fi c*erocY& F Permite guardar un libro con todas sus *oas # el contenido de sus celdas a
disco&
F :C=F
Ane0o A Sol uci n de l os e erci ci os
A& : . erci ci os del ca/5 tul o :
A& :& : Sol uci n del e erci ci o :
.n este caso se /ro/one una solucin 4ue utiliza seis clases: tareta3 cuenta3 cliente3 lector de taretas3 caero # o/eracin& "as
siguientes l5neas describen a grandes rasgos las res/onsabilidades de tales obetos:
Tar(eta&F Abstraccin 4ue se encarga de gestionar los datos relativos a la tareta f5sica&
ectorTar(etas&F Abstraccin 4ue se encarga de construir obetos tareta a /artir de las taretas reales&
.nca/sula el maneo del *ardware es/ec5fico de lectura # escritura de taretas&
Ca(ero&F Abstraccin 4ue se encarga de coordinar la realizacin de las o/eraciones: verificar introduccin de
tareta3 solicitud # com/robacin del nHmero clave3 seleccin de la o/eracin # devolucin o retencin de la tareta&
Cue!ta&F Abstraccin 4ue contiene la informacin relativa a la cuenta de un cliente # 4ue se encarga de autorizar o
denegar las o/eraciones solicitadas& .sta abstraccin enca/sula el acceso a la base de datos del banco 4ue contiene
los datos del cliente&
Clie!te&F Abstraccin 4ue mantiene los datos /ersonales del cliente&
aperaci!&F Abstraccin 4ue realiza las o/eraciones 4ue se solicitan&
A continuacin se /resentan varios Diagramas .st)ticos de (lases de U!"& .stos diagramas utilizan los elementos 4ue #a se
*an /resentado& .s im/ortante notar 4ue no suele ser conveniente re/resentar todas las clases en un mismo diagrama3
debido a 4ue los diagramas deben ser sim/les /ara 4ue realmente sean utilizables al describir un /roblema& .s /referible
tener varios diagramas /e4ueos3 cada uno centr)ndose en una /ers/ectiva concreta del diseo3 4ue un Hnico diagrama
com/leo&
.l /rimer diagrama muestra la cone0in entre las /rinci/ales clases involucradas en el /roceso&
+=btenerCuenta01
-Fec'aCa%uci%a%
-4umTar?eta
-4um>ntentos
&arjeta
+Com$robar4um/ecreto01
+6estarCanti%a%01
+/umarCanti%a%01
-4um/ecreto : int
-4umTar?eta
-/al%o
-4umCuenta
-@aximo
Cuenta
-DatosPersonales
Cliente
1 1
*
1
+=btenerTar?eta01
+8ctualiDarTar?eta01
+Ex$ulsarTar?eta01
+TieneTar?eta01
+6etenerTar?eta01
Lector&arjetas
+PantallaPresentacion01
+/uministrarDinero01
+6eco3erPaEuete01
+Ele3ir=$eracion01
-Conexion8cti!a
Cajero
*
*
1
1
.n el segundo diagrama se /resenta una vista m)s /arcial3 en la 4ue se /rofundiza en las o/eraciones 4ue se /ueden realizar
con una tareta&
F :C9 F
Ane0o F Solucin de los eercicios
+=btenerCuenta01
-Fec'aCa%uci%a%
-4umTar?eta
-4um>ntentos
&arjeta
+PantallaPresentacion01
+/uministrarDinero01
+6eco3erPaEuete01
+Ele3ir=$eracion01
-Conexion8cti!a
Cajero
+6ealiDar=$eracion01
-Fec'aHora
"peracion
1
*
*
1
.n este /unto se decide introducir en el obeto aperaci! las o/eraciones 4ue se /ueden realizar: reintegro e ingreso& Al
*acerlo resulta 4ue la clase o/eracin se /odr5a com/licar e0cesivamente& Adem)s3 si se 4uisiera am/liar el nHmero de
o/eraciones 4ue se /ueden realizar deber5a cambiarse la clase o/eracin /ara aadirle nuevos mtodos& Por ello se o/ta /or
usar *erencia de la clase aperaci! /ara im/lementar cada una de las o/eraciones& .sto da lugar al diagrama de la figura
siguiente& .n l se a/recia 4ue cada clase derivada de aperaci! deber) im/lementar el mtodo reali&araperacio!14
de manera conveniente&
+6ealiDar=$eracion01
-Fec'aHora
"peracion
+6ealiDar=$eracion01
"peracionReintegro
+6ealiDar=$eracion01
"peracionIngreso
.s im/ortante notar 4ue la descom/osicin en obetos 4ue se realiza de/ende del analista& Diferentes analistas /ueden tener
visiones diferentes del /roblema # ser todas correctas&
A& < . erci ci os del ca/5 tul o <
A& <& : Sol uci n del e erci ci o :
Una /ro/iedad de clase es a4uella 4ue se declara usando static # 4ue /or ello com/arte el mismo valor /ara todos los
obetos de la misma clase& "a /ro/iedad de instancia tiene un valor individual /ara cada obeto de una clase&
A& <& < Sol uci n del e erci ci o <
.n $ava e0iste un /roceso3 llamado 1recolector de basura23 4ue se encarga de realizar esta tarea de manera autom)tica&
A& <& = Sol uci n del e erci ci o =
.n la l5nea @ se utiliza b cuando deber5a usarse b b&
.n la l5nea ; se accede al mtodo value de auxH cuando esa referencia no a/unta a ningHn obeto&
.n la l5nea :C se realiza una o/eracin 4ue nunca se efectuar) /or4ue est) detr)s de retur!&
A& = . erci ci os del ca/5 tul o =
A& =& : Sol uci n del e erci ci o :
S53 /or4ue al interfaz de una clase debe mantener su visibilidad a travs de la *erencia /ara 4ue el /olimorfismo sea /osible&
F :C? F
Disear # Programar todo es em/ezar
A& =& < Sol uci n del e erci ci o <
A)sicamente3 tal clase tiene la misma utilidad 4ue una interfaz& .stas clases3 4ue suelen llamarse abstractas /uras3 suelen
usarse como clase base de una erar4u5a de obetos /ara la 4ue se desea 4ue com/arta la interfaz definida /or la clase&
A& =& = Sol uci n del e erci ci o =
interface Eleme!toarde!able /
public boolean ma5orbue1Eleme!toarde!able e47
8
class ArbolBi!ario /
private Eleme!toarde!able e#rai&7
private ArbolBi!ario arbol#derecha7
private ArbolBi!ario arbol#i&.uierda7
public ArbolBi!ario i&.uierda14 /
return arbol#i&.uierda7
8
public ArbolBi!ario derecha14 /
return arbol#derecha7
8
public Eleme!toarde!able obte!erElemetoRai&14 /
return e#rai&7
8
public void I!sertar 1Eleme!toarde!able e4 /
if 1e#rai& GG null4
e#rai& G e7
else /
if 1e.Ma5orbue1e#rai&44 /
if 1arbol#derecha GG null4
arbol#derecha G new ArbolBi!ario147
arbol#derecha.I!sertar1e47
8
else /
if 1arbol#i&.uierda GG null4
arbol#i&.uierda G new ArbolBi!ario147
arbol#i&.uierda.I!sertar1e47
8
8
8
8
class E!teroarde!able implements Eleme!toarde!able /
public int eleme!to7
public E!teroarde!able1int e4 /
eleme!to G e7
8
public boolean ma5orbue1Eleme!toarde!able e4 /
E!teroarde!able aux G 1E!teroarde!able4 e7
return 1eleme!to < aux.eleme!to47
8
8
class %tri!,arde!able implements Eleme!toarde!able /
public %tri!, eleme!to7
public %tri!,arde!able1%tri!, e4 /
eleme!to G e7
8
public boolean ma5orbue1Eleme!toarde!able e4 /
%tri!,arde!able aux G 1%tri!,arde!able4 e7
return 1eleme!to.le!,th14 < aux.eleme!to.le!,th1447
8
8
class %olucio!B /
public void mai!1%tri!, ar,s234 /
E!teroarde!able a G new E!teroarde!able1K47
E!teroarde!able b G !e; E!teroarde!able1J47
E!teroarde!able c G new E!teroarde!able1BB47
E!teroarde!able d G new E!teroarde!able1P47
E!teroarde!able e G new E!teroarde!able1BK47
ArbolBi!ario arbol G new ArbolBi!ario147
arbol.I!sertar1a47
arbol.I!sertar1b47
arbol.I!sertar1c47
arbol.I!sertar1d47
arbol.I!sertar1e47
8
8
F :C@ F
Ane0o F Solucin de los eercicios
A& > . erci ci os del ca/5 tul o >
A& >& : Sol uci n del e erci ci o :
a8 "a lista se im/lementa utilizando nodos doblemente enlazados /or razones de eficiencia3 aun4ue /odr5a *aberse
im/lementado con nodos con un enlace sim/le&
class ista /
class `odo/
ab(ect valor7
`odo si,uie!te7
`odo a!terior7
8
private `odo primero7
private `odo ultimo7
private int !um#!odos G C7
public void push#bac$1ab(ect o4 /
`odo !uevo G new `odo147
!uevo.valor G o7
!uevo.a!terior G ultimo7
if 1ultimo UG null4
ultimo.si,uie!te G !uevo7
else
primero G !uevo7
ultimo G !uevo7
!um#!odosOO7
8
public void push#"ro!t1ab(ect o4 /
`odo !uevo G new `odo147
!uevo.valor G o7
!uevo.si,uie!te G primero7
if 1primero UG null4
primero.a!terior G !uevo7
else
ultimo G !uevo7
primero G !uevo7
!um#!odosOO7
8
public void pop#bac$14/
if 1ultimo UG null4/
ultimo G ultimo.a!terior7
!um#!odos==7
8
8
public void pop#"ro!t14/
if 1primero UG null4/
primero G primero.si,uie!te7
!um#!odos==7
8
8
public ab(ect "ro!t14/
if 1primero UG null4
return primero.valor7
8
public ab(ect bac$14/
if 1ultimo UG null4
return ultimo.valor7
8

public int si&e14/
return !um#!odos7
8
public void clear14/
primero G null7
ultimo G null7
!um#!odos G C7
8
8
b8 Al *eredar slo *abr5a 4ue aadir los cuatro mtodos relacionados con los ti/os de los valores contenidos& .l resto se
*ereda&
class istaE!terosB extends ista /
public void push#bac$#i!t 1I!te,er i4 /
super.push#bac$1i47
F :C; F
Disear # Programar todo es em/ezar
8
public void push#"ro!t#i!t 1I!te,er i4 /
super.push#"ro!t1i47
8
public I!te,er "ro!t#i!t 14 /
return 1I!te,er4 super*front147
8
public I!te,er bac$#i!t14 /
return 1I!te,er4 super*back147
8
8
c8 Usando com/osicin se declara una clase 4ue contiene una lista # se definen mtodos similares a los de la "ista& .stos
mtodos ser)n idnticos e0ce/tuando a los relacionados con los ti/os de los valores contenidos 4ue estar)n es/ecializados en
I!te,er&
class istaE!terosH /
private ista lista G new ista147
public void pushBac$1I!te,er i4 /
lista.push#bac$1i47
8
public void pushFro!t1I!te,er i4 /
lista.push#"ro!t1i47
8
public I!te,er "ro!t14 /
return 1I!te,er4 lista."ro!t147
8
public I!te,er bac$14 /
return 1I!te,er4 lista.bac$147
8
public void popBBac$14/
lista.pop#bac$147
8
public void popFro!t14/
lista.pop#"ro!t147
8
public void clear14/
lista.clear147
8
public int si&e14/
return lista.si&e147
8
8
d8 .l obetivo es crear una lista en la 4ue slo se /uedan introducir # e0traer obetos de la clase I!te,er& .n
istaE!terosB se *eredan todos los mtodos # en es/ecial a4uellos 4ue /ermiten insertar obetos derivados de ab(ect
7es decir cual4uier ti/o de obeto8& Sin embargo istaE!terosH /ermite es/ecificar una interfaz 4ue slo dea tratar
I!te,er& Por eso en este caso es meor usar com/osicin #3 /or tanto3 es meor el enfo4ue de istaE!terosH&
Se debe usar la clase I!te,er /or4ue i!t es un ti/o /rimitivo 7no es una clase8 # eso im/lica 4ue un valor i!t no se
/uede utilizar desde una referencia a obetos de clase ab(ect&
A& 9 . erci ci os del ca/5 tul o 9
A& 9& : Sol uci n del e erci ci o :
"os Diagramas de Actividad son diagramas de estados 4ue /ermiten re/resentar las relaciones entre clases # 4ue son
es/ecialmente Htiles cuando e0iste *erencia entre las clases 4ue se relacionan& !ientras3 los Diagramas de Secuencia son
Diagramas de +nteraccin # /ermiten re/resentar claramente las situaciones en las 4ue se relacionan muc*os obetos de
diferentes clases& As53 aun4ue ambos diagramas se utilizan /ara re/resentar el com/ortamiento din)mico de los obetos de
una o m)s clases3 no /odemos decir 4ue sean e4uivalentes sino com/lementarios&
A& 9& < Sol uci n del e erci ci o <
A continuacin se /ro/one una solucin al /roblema3 aun4ue *a# 4ue decir 4ue e0isten otras muc*as diferentes igualmente
v)lidas&
F :CD F
Ane0o F Solucin de los eercicios
a8 Se /ro/onen las siguientes clases:
TipoBillete&F .ncargada de contener # gestionar la informacin de los diferentes ti/os de billetes 4ue manea en un
momento dado el e0/endedor&
istaTipoBilletes&F .ncargada de contener la lista de ti/os de billetes 4ue /uede dar en un momento dado el
e0/endedor&
Expe!dedor&F (lase en la 4ue se encuentra el mtodo de arran4ue 7mai!8 # 4ue se encarga de /ermitir alternar entre los
diferentes modos o/erativos&
ModoMa!te!imie!to&F (lase 4ue gestiona el modo de o/eracin de mantenimiento 7/antallas # secuencia de o/eraciones8&
ModoAe!ta&F (lase 4ue gestiona el modo de o/eracin de venta 7/antallas # secuencia de o/eraciones8&
Modoaperativo&F (lase abstracta de la 4ue *eredan la clase ModoMa!te!imie!to # la clase ModoAe!ta& .sta clase
facilita la futura introduccin del software corres/ondiente a nuevos modos 4ue /uedan a/arecer gracias a 4ue dota a todos
los modos de una interfaz comHn&
b8 "os siguientes diagramas ilustran diferentes /ers/ectivas est)ticas de las clases e0/uestas en el a/artado anterior&
ModoMantenimiento
PantallaGestionBillete()
ModoVenta
Pantall aSelecci onBi ll ete()
CalcularVuel ta()
Expendedor
mai n()
MenuSelecci onModo()
11
11
ListaTi poBi ll etes
Agregar()
Elimi nar()
PintarBilletes()
11
TipoBil lete
Nombre
Precio
TipoBillete
TipoPapel
Pintar()
Precio()
1..* 1..*

ModoMantenimiento
PantallaGestionBillete()
ModoOperativo
Operar()
PresentarModo()
TipoBil lete
Nombre
Precio
TipoBillete
TipoPapel
Pintar()
Precio()
ListaTipoBilletes
Agregar()
Eli mi nar()
PintarBil letes()
1..* 1..*

F ::C F
Disear # Programar todo es em/ezar
Impresora
ImprimirYExpul sar()
TieneTinta()
TienePapel()
Monedero
DevuelveCantidadIntroducida()
Suministrar()
PuedeSuminis trar()
CantidadIntroduci da()
ModoVenta
PantallaSeleccionBillete()
CalcularVuelta()
11
11
TipoBillete
Nombre
Precio
TipoBillete
TipoPapel
Pintar()
Precio()
ListaTipoBilletes
Agregar()
Eliminar()
PintarBilletes()
1..* 1..*
ModoOperativo
Operar()
PresentarModo()

ModoMantenimiento
PantallaGestionBillete()
ModoOperati vo
Operar()
PresentarModo()
ModoVenta
PantallaSeleccionBillete()
CalcularVuelta()

F ::: F
Ane0o F Solucin de los eercicios
c8 .l Diagrama de Secuencia /ara una o/eracin v)lida con devolucin de cambio resulta:
billete_elegido :
TipoBillete
v enta : Modo
Venta
lista : ListaTipo
Billetes
PintarBilletes( )
entrada :
Reader
read(char)
monedero :
Monedero
impresora :
Impresora
bil letes : Tipo
Billete
: Expendedor
read(char)
tipo_billete
Precio( )
ENTER
CantidadInt roduc ida( )
CalcularVuelta( )
TienePapel( )
Ti eneTinta( )
ImprimirYExpulsar( )
PuedeSuministr ar( )
Suminis trar( )
PresentarModo( )
Pintar( )
PantallaSeleccionBillete( )
si
si
si

A& 9& = Sol uci n del e erci ci o =
Primeramente se /ro/one el Diagrama .st)tico de (lases de la figura siguiente& .n este diagrama se a/recia la clase
Tablero 7res/onsable de contener las fic*as # verificar la legalidad de los movimiento83 la clase Casilla 7res/onsable de
contener una o ninguna fic*a # com/robar su ad#acencia a otras casillas83 la clase Ficha 7res/onsable de conocer a 4ue
ugador /ertenece8 # la clase -u,ador 7res/onsable de interactuar con la /ersona 4ue uega8& Tambin a/arece la clase
TresE!Ra5a3 en la 4ue residir) la funcin est)tica mai!14 4ue iniciar) el /rograma& Por Hltimo a/arece una clase 4ue
/uede sor/render: la clase Tur!o& .sta clase se usar) /ara controlar la alternancia entre los ugadores& .s interesante esta
clase3 /or4ue las anteriores son mu# evidentes3 siendo meras re/resentadoras de la situacin est)tica del uego& Por el
contrario3 la clase Tur!o es una clase 4ue im/lica cierto dinamismo al involucrar el algoritmo de alternancia&
F ::< F
Disear # Programar todo es em/ezar
Casi l l a
Esta"acia01
PonerFi c'a01
=btenerFi c'a01
8%&acente01
Casi l la01
TresEn6a&a
Tabl ero
Pre3untaCasi l la01
Tabl ero01
u3arParti %a01
PonerFi c'as01
@o!erFi c'as01
HaCana%o01
G
-m2Casil l a
G
11
Fic'a
Ti $oFi c'a01
Fi c'a01
*))1 -m2Fi c'a *))1
Turno
Hui enToca01
/i 3ui ente01
T urno01
11
1
-m2Turno
1
u3a%or
=bt enerFic'a01
u3a%or01
I
-m2Fi c'a
I
+
-m2u3a%or
+
-m2Turno
-m2Tabl ero
A continuacin se /resentan diferentes Diagramas de +nteraccin 4ue ilustran cmo se relacionan las clases /ro/uestas /ara
conseguir el desarrollo del /rograma&
(omo consecuencia del an)lisis realizado /ara construir estos diagramas3 /ueden a/arecer nuevas clases 4ue deben
incor/orarse al Diagrama .st)tico de (lases& Adem)s3 en estos diagramas a/arecen funciones # /ro/iedades 4ue contienen
las clases # 4ue3 de no estar3 deben incor/orarse al Diagrama .st)tico de (lases& As53 los diagramas se van com/letando unos
a otros3 en /aralelo3 *asta 4ue finalmente el diseo es co*erente&
?ue3o : Tres
En6a&a
: Tablero
casillas :
Casil la
turno :
Turno
?u3a%ores :
u3a%or
;ic'as :
Fic'a
J: PonerFic'as0 1
K: @o!erFic'as0 1
1: Turno0u3a%orL u3a%or1
+: u3a%or0 1
4: Tablero0 1
M: u3arParti%a0 1
(: Casilla0 1
I: Fic'a0 1
F ::= F
Ane0o F Solucin de los eercicios
tablero :
Tablero
;ic'a21 :
Fic'a
casila2ori3en :
Casilla
casilla2%estino :
Casil la
turno :
Turno
+: Pre3unt aCasill a0 1
(: Pre3untaCasilla0 1
1: HuienToca0 1
K: /i3ui ente0 1
I: =btenerFic'a0 1
M: 8%&acente0Casilla1
J: PonerFic'a0 1
4: Ti$oFic'a0 1
tablero :
Tablero
t urno :
Turno
casill a21 :
Casilla
+: Pre3untaCasilla0 1
?u3a%or21 :
u3a%or
1: HuienToca0 1
M: /i3uiente0 1
I: Esta"acia0 1
(: PonerFic'a0 1
4: =btenerFic'a0 1
A& 9& > Sol uci n del e erci ci o >
)) %ource "ile9 Ficha.(ava
public class Ficha /
private -u,ador propietario7

)**
Co!stru5e u!a "icha asi,!@!dole su propietario
*)
Ficha1-u,ador (u,ador4 /
propietario G (u,ador7
8
)**
Devuelve al (u,ador propietario de la "icha
*)
public -u,ador TipoFicha14 /
return propietario7
8
8
F ::> F
Disear # Programar todo es em/ezar
)) %ource "ile9 Casilla.(ava
import (ava.math.*7
public class Casilla /
private Ficha m#Ficha7
private int "ila7
private int colum!a7

)**
Co!stru5e !u!a casilla .ue co!oce sus coorde!adas e! el tablero
*)
Casilla1int "ila+ int colum!a4 /
this."ila G "ila7
this.colum!a G colum!a7
8

)**
?retur! True si la casilla esta vac>a
*)
public boolean estaAacia14 /
return 1m#Ficha GG null47
8

)**
+o!e u!a "icha e! u!a casilla
*)
public void po!erFicha1Ficha "icha4 /
m#Ficha G "icha7
8

)**
abtie!e la "icha .ue ha5 e! u!a casilla
*)
public Ficha obte!erFicha14 /
return m#Ficha7
8

)**
Mira si dos casillas so! ad5ace!tes
*)
public boolean ad5ace!te1Casilla casilla4 /
return 11Math.abs1casilla."ila = "ila4 F H4 XX
1Math.abs1casilla.colum!a = colum!a4 F H447
8
8
)) %ource "ile9 -u,ador.(ava
import Ficha7
public class -u,ador /
private Ficha m#Ficha23 G new Ficha2K37
private int co!t#"ichas G C7
private final int `^M#FIC'A% G K7
private %tri!, m#!ombre7

)**
I!ica u! (u,ador co! su !ombre 5 crea sus "ichas.
*)
-u,ador1#tring !ombre4 /
m#!ombre G !ombre7

for 1int co!t G C7 co!t F `^M#FIC'A%7 co!tOO4
m#Ficha2co!t3 G new Ficha1this47
8

)**
Da u!a "icha. Desde ese mome!to 5a !o la posee.
?retur! ^!a "icha.
*)
public Ficha obte!erFicha14 /
if 1co!t#"ichas F K4
return m#Ficha2co!t#"ichasOO37
else
return null7
8

)** ?retur! El !ombre del (u,ador.
*)
public #tring !ombre14 /
return m#!ombre7
8
8
F ::9 F
Ane0o F Solucin de los eercicios
)) %ource "ile9 Tur!o.(ava
import -u,ador7
public class Tur!o /
private -u,ador m#-u,ador23 G new -u,ador2H37
private int tur!o G C7

)**
?retur! A .ue (ua,dor toca (u,ar
*)
public -u,ador .uie!Toca14 /
return m#-u,ador2tur!o W H37
8

)** Cambia el tur!o
*)
public void si,uie!te14 /
tur!oOO7
8

)**
%e co!stru5eE almace!a!do los (u,adores e i!icia!do u! tur!o
*)
public Tur!o1-u,ador (u,ador#BE -u,ador (u,ador#H4 /
m#-u,ador2C3 G (u,ador#B7
m#-u,ador2B3 G (u,ador#H7
8
8
)) %ource "ile9 Tablero.(ava
import Tur!o7
import -u,ador7
import Casilla7
import (ava.io.*7
public class Tablero /
private "i!al int ADa G K7
private Casilla m#Casilla23 G new Casilla2ADa*ADa37
private Tur!o m#Tur!o7

)**
Co!stru5e el tablero 5 prepara el tur!o
*)
Tablero1Tur!o tur!o4 /
m#Tur!o G tur!o7
for 1int "ila G C7 "ila F ADa7 "ilaOO4
for 1int colum!a G C7 colum!a F ADa7 colum!aOO4
/
m#Casilla2"ila * ADaOcolum!a3 G new Casilla1"ilaEcolum!a47
8
8
)**
Devuelve la casilla correspo!die!te a u!as coorde!adas
*)
public Casilla obte!erCasilla1int "ilaE int colum!a4 /
return m#Casilla2"ila * ADaOcolum!a37
8
)**
+re,u!ta u!as coorde!adas por pa!talla
*)
private Casilla pre,u!taCasilla14 throws Exceptio! /
%5stem.out.pri!t16I!trodu&ca coorde!da de "ila9 647
Bu""eredReader data G new Bu""eredReader1new I!put%treamReader1%5stem.i!447
int "ila G I!te,er.parseI!t1data.readi!e1447

%5stem.out.pri!t16I!trodu&ca coorde!da de colum!a9 647
int colum!a G I!te,er.parseI!t1data.readi!e1447

return obte!erCasilla1"ilaEcolum!a47
8

)**
I!icia 5 (ue,a la partida co!trola!do el tur!o.
*)
public void (u,ar+artida14 throws Exceptio! /
))+o!emos las primeras J casillas
for 1int co!t#po! G C7 co!t#po! F J7 co!t#po!OO4
/
po!erFicha147
m#Tur!o.si,uie!te147
8
F ::? F
Disear # Programar todo es em/ezar
))%i ha ,a!ado al,u!o "i!
if 1haca!ado14 UG null4 /
%5stem.out.pri!t16'a ,a!ado el (u,ador 647
%5stem.out.pri!tl!1haca!ado14.!ombre1447
return7
8
))E! otro caso pedimos .ue se po!,a la sexta "icha
po!erFicha147
m#Tur!o.si,uie!te147

while 1haca!ado14 GG null4 /
moverFicha147
m#Tur!o.si,uie!te147
8
%5stem.out.pri!t16'a ,a!ado el (u,ador 647
%5stem.out.pri!tl!1haca!ado14.!ombre1447
8

)**
+o!e i!icialme!te las "ichas e! el tablero pre,u!ta!do a los (u,adores
*)
public void po!erFicha14 throws Exceptio! /
%5stem.out.pri!t16-u,ador 647
%5stem.out.pri!t1m#Tur!o..uie!Toca14.!ombre1447
%5stem.out.pri!tl!16 I!trodu&ca casilla para po!er "icha647

Casilla casilla G null7
do
casilla G pre,u!taCasilla147
while 11casilla GG null4 YY 1Ucasilla.estaAacia14447
casilla.po!erFicha1m#Tur!o..uie!Toca14.obte!erFicha1447
8

)**
Mueve u!a "icha desde u!a casilla hasta otra
*)
public void moverFicha14 throws Exceptio! /
%5stem.out.pri!t16-u,ador 647
%5stem.out.pri!t1m#Tur!o..uie!Toca14.!ombre1447
%5stem.out.pri!tl!16 i!trodu&ca "icha a mover647
))bue la casilla ori,e! te!,a u!a "icha del (ua,dor .ue toca
Casilla casilla#ori,e! G null7
do
casilla#ori,e! G pre,u!taCasilla147
while 11casilla#ori,e! GG null4 YY
1casilla#ori,e!.estaAacia144 YY
1m#Tur!o..uie!Toca14 UG casilla#ori,e!.obte!erFicha14.tipoFicha14447
%5stem.out.pri!t16-u,ador 647
%5stem.out.pri!t1m#Tur!o..uie!Toca14.!ombre1447
%5stem.out.pri!tl!16 i!trodu&ca casilla desti!o647
))bue la casilla desti!o este vac>a
Casilla casilla#desti!o G null7
do
casilla#desti!o G pre,u!taCasilla147
while 11casilla#desti!o GG null4 YY
1Ucasilla#desti!o.estaAacia144 YY
1m#Tur!o..uie!Toca14 UG casilla#ori,e!.obte!erFicha14.tipoFicha144 YY
1Ucasilla#ori,e!.Ad5ace!te1casilla#desti!o4447
casilla#desti!o.+o!erFicha1casilla#ori,e!.obte!erFicha1447
casilla#ori,e!.+o!erFicha1null47
8

)**
Comprueba si ha5 K "ichas e! li!ea del mismo (u,ador
?retur! Devuelve el (u,ador ,a!ador o e! otro caso !ull
*)
public -u,ador haca!ado14 /
))Comprobaci! de las "ilas
for 1int "ila G C7 "ila F ADa7 "ilaOO4 /
boolean tres#e!#ra5a G true7

-u,ador pie&a G null7

if 1obte!erCasilla1"ilaEC4.obte!erFicha14 UG null4 /
pie&a G obte!erCasilla1"ilaEC4.obte!erFicha14.tipoFicha147
for 1int colum!a G B7 colum!a F ADa7 colum!aOO4 /
if 11obte!erCasilla1"ilaEcolum!a4.obte!erFicha14 GG null4 YY
1pie&a UG obte!erCasilla1"ilaEcolum!a4.obte!erFicha14.tipoFicha1444
tres#e!#ra5a G false7
8
8
if 11pie&a UG null4 XX 1tres#e!#ra5a44
return pie&a7
8
F ::@ F
Ane0o F Solucin de los eercicios
))Comprobaci! de las colum!as
for 1int colum!a G C7 colum!a F ADa7 colum!aOO4
/
boolean tres#e!#ra5a G true7
-u,ador pie&a G null7
if 1obte!erCasilla1CEcolum!a4.obte!erFicha14 UG null4 /
pie&a G obte!erCasilla1CEcolum!a4.obte!erFicha14.tipoFicha147
for 1int "ila G B7 "ila F ADa7 "ilaOO4 /
if 11obte!erCasilla1"ilaEcolum!a4.obte!erFicha14 GG null4 YY
1pie&a UG obte!erCasilla1"ilaEcolum!a4.obte!erFicha14.tipoFicha1444
tres#e!#ra5a G false7
8
if 11pie&a UG null4 XX 1tres#e!#ra5a44
return pie&a7
8
8
))Comprobaci! de u!a dia,o!al
boolean tres#e!#ra5a G true7
-u,ador pie&a G null7

if 1obte!erCasilla1CEC4.obte!erFicha14 UG null4 /
pie&a G obte!erCasilla1CEC4.obte!erFicha14.tipoFicha147

for 1int pos G B7 posF ADa7 posOO4 /
if 11obte!erCasilla1posEpos4.obte!erFicha14 GG null4 YY
1pie&a UG obte!erCasilla1posEpos4.obte!erFicha14.tipoFicha1444
tres#e!#ra5a G false7
8
if 11pie&a UG null4 XX 1tres#e!#ra5a44
return pie&a7
8
))Comprobaci! de la otra dia,o!al
tres#e!#ra5a G true7
pie&a G null7

if 1obte!erCasilla1ADa=BEC4.obte!erFicha14 UG null4 /
pie&a G obte!erCasilla1ADa=BEC4.obte!erFicha14.tipoFicha147
for 1int pos G B7 pos F ADa7posOO4 /
if 11obte!erCasilla1posEpos4.obte!erFicha14 GG null4 YY
1pie&a UG obte!erCasilla1posEpos4.obte!erFicha14.tipoFicha1444
tres#e!#ra5a G false7
8
if 11pie&a UG null4 XX 1tres#e!#ra5a44
return pie&a7
8
return pie&a7
8
8
)) %ource "ile9 TresE!Ra5a.(ava
import Tablero7
import Tur!o7
import -u,ador7
public class $res(n,aya /
)** Crea ob(etos 5 la!&a u!a partida
*)
public static void mai!1%tri!, ar,v234 /
-u,ador m#-u,ador#B G new -u,ador16A647
-u,ador m#-u,ador#H G new -u,ador16B647
Tur!o m#Tur!o G new Tur!o1m#-u,ador#BE m#-u,ador#H47
Tablero m#Tablero G new Tablero1m#Tur!o47

try /
m#Tablero.(u,ar+artida147
8
catch 1Exceptio! e4 /
%5stem.out.pri!tl!16'a ocurrido u! error i!esperado647
8
8
8
A& 9& 9 Sol uci n del e erci ci o 9
Se comienza realizando un diseo est)tico de clases3 4ue se divide en dos gru/os:
(lases Htiles /ara cual4uier uego de tablero 7Tablero3 -u,ador3 Tur!o3 Re,las # Ficha8&
F ::; F
Disear # Programar todo es em/ezar
(lases Htiles slo /ara el uego de aedrez 7Re,lasDeA(edre&3 +e!3 Rei!a3 Re5&&&&8&
.n el diagrama de la figura adunta se a/recia como se *an se/arado mediante *erencia todos los elementos 4ue son
susce/tibles de im/lementacin es/ecifica /ara el uego de aedrez& De esta manera3 luego3 cuando se im/lemente otro uego3
/odr)n ser sustituidos /or otros con la misma interfaz /ero otro com/ortamiento& (on esto se /retende 4ue los obetos
inde/endientes del uego de aedrez realicen o/eraciones genricas validas /ara todos los uegos 4ue luego se desee
im/lementar&
+=btenerFic'a01
+HuitarFic'a01
+PonerFic'a01
+ExisteCasilla01
&a/lero
+>niciarParti%a01
+main01
uego
+@o!er01
+Pe%irCoor%ena%as01
-Color
ugador
+HaCana%o01 : bool
+ColocarFic'as>nicio01
+u3arParti%a01
Reglas
1
*
-;ic'as
1M
1
1
-?u3a%or *
1
-tablero 1
1
-re3las
*
+HuienToca01
+PasaTurno01
&urno
1
-turno 1
1 *
+@o!er01
Ficha
+Amenaza()
+ItinerarioPosible()
+@o!er01
FichaAjedre3
+>tinerarioPosible01 : bool
+8menaDa01 : bool
!eon
+>tinerarioPosible01 : bool
+8menaDa01 : bool
Reina
+>tinerarioPosible01 : bool
+8menDa01 : bool
Re+
+>tinerarioPosible01 : bool
+8menaDa01 : bool
&orre
+>tinerarioPosible01 : bool
+8menaDa01 : bool
Ca/allo
+>tinerarioPosible01 : bool
+8menaDa01 : bool
Al0il
+HaCana%o01 : bool
+ColocarFic'as>nicio01
+u3arParti%a01
Reglas
+Com$robar6e&01
ReglasAjedre3
+@o!er01
Ficha
.l siguiente Diagrama de Secuencia ilustra cmo se im/lementar5a el escenario en el 4ue un ugador /ide un movimiento
/or /antalla3 com/rueba 4ue se /uede realizar # lo eecuta3 comiendo una /ieza del contrario&
F ::D F
Ane0o F Solucin de los eercicios
re3las ?u3a%or2a tablero torre21 turno
=btenerFic'a01
Pe%irCoor%ena%as01
@o!er01
@o!er01
HuienToca01
PasaTurno01
)))
?u3a%or2b
01
@o!er01
HuitarFic'a01
PonerFic'a01
01
ExisteCasilla01
=b?ect1
ColocarFic'as>nicio01
HuienToca01
HaCana%o01
>niciarParti%a01
>tinerarioPosible01
Para es/ecificar en ma#or detalle cmo se realiza la o/eracin de movimiento dentro de la clase Torre3 # como afecta a la
clase Ficha de la 4ue deriva3 se realiza el siguiente Diagrama de Actividad&
Fic'a8?e%reD::@o!er Fic'a::@o!er
Existe casilla %estino
"eri;icar itinerario $osible
-/>.
9anDar exce$ciAn
9anDar exce$ciAn
e?ecutar mo!imiento
-/>.
F :<C F
Disear # Programar todo es em/ezar
billete_elegido :
TipoBillete
v enta : Modo
Venta
lista : ListaTipo
Billetes
PintarBilletes( )
entrada :
Reader
read(char)
monedero :
Monedero
impresora :
Impresora
bil letes : Tipo
Billete
: Expendedor
read(char)
tipo_billete
Precio( )
ENTER
CantidadInt roduc ida( )
CalcularVuelta( )
TienePapel( )
Ti eneTinta( )
ImprimirYExpulsar( )
PuedeSuministr ar( )
Suminis trar( )
PresentarModo( )
Pintar( )
PantallaSeleccionBillete( )
si
si
si

A& ? . erci ci os del ca/5 tul o ?
A& ?& : Sol uci n del e erci ci o :
a8 Una /osible solucin es a4uella en la 4ue slo es necesario aadir una clase Radar&
"a clase Radar se encarga de realizar el bucle de /resentacin& .sta clase comunica a un obeto de la clase Radar%cree! la
informacin 4ue le llega del Radar%treamReader&
Otras /osibles soluciones /odr5an incluir a una clase ab(etoAolador3 cu#os obetos son ca/aces de leerse del stream #
escribirse en la /antalla&
b8 .l Diagrama de Secuencia es:
F :<: F
Ane0o F Solucin de los eercicios
.ste diagrama se transforma en los siguientes fragmentos de cdigo:
void bucle+rese!tacio!14 /
while1Ustop4 /
!extTo$e!147
int ide!ti"icador G !val7
!extTo$e!147
int latitud G !val7
!extTo$e!147
int lo!,itud G !val7
!extTo$e!147
int color G !val7
!extTo$e!147
%tri!, eti.ueta G sval7
if 1id GG C4
pa!talla.clear%cree!147
pa!talla.Dra;1latitudElo!,itudEcolorEeti.utea4
8
8
.s necesario crear una clase Boto!DeColisio! 4ue im/lemente la interfaz RadarButto!& (uando se invo4ue clic$14
la clase cambiar) el To$e!i&er /ara 4ue tome los elementos desde el Radar%treamCollisio!Reader en vez de
tomarlos directamente del Radar%treamReader& De esta forma el bucle de /resentacin seguir) funcionando de la misma
forma&
.l Diagrama .st)tico de (lases resultante es:
F :<< F
Disear # Programar todo es em/ezar
c8 .l Diagrama de Secuencia es:
.l Diagrama de Secuencia corres/onde al siguiente fragmento de cdigo:
void clic$14 /
Radar%treamCollisio!Reader collisio!#stream G
new Radar%treamCollisio!Reader1radar.radar#stream47
radar.to$e!i&er G new %treamTo$e!i&er1collisio!#stream47
8
A& @ . erci ci os del ca/5 tul o @
A& @& : Sol uci n del e erci ci o :
Se /uede utilizar un obeto de algHn derivado de %et /ara almacenar los enteros 4ue luego se ir)n e0tra#endo *asta
com/letar el Aingo&
F :<= F
Ane0o A Bndi ce al fabti co
A
AbiertoFcerrado3 :CC
Abstract3 =C3 =:
Abstract %actor#3 D=
Abstraer3 <3 >
Aco/lamiento3 9
Ada/tador3 D9
Ada/ter3 D9
dmbitos3 <:
Arra#3 ==
Arra#"ist3 ;@
Asociacin3 ;
Autobo0ing3 9C3 ?:
Autounbo0ing3 9C3 ?:
A
Aarrera de la abstraccin3 ?
Alo4ueado3 9;
Alo4ueos mutuos3 9@
Alo4ues de inicializacin3 <=
Aoolean3 :D
AreaE3 <=
Auilder3 D>
A#te3 :D
A#tecode3 :?
(
(aa de arena3 :?
(alles3 @>
(amello3 :;
(am/os3 <9
(ardinalidad3 D
(ase3 <=
(asting3 ::3 :D3 >:
(atc*3 9:
(*ar3 :D
(*ecEed e0ce/tions3 9<
(lase3 >
(lase base3 D
(lase (lass3 >D
(lase de obetos3 >
(lase derivada3 D
(lase *ia3 D
(lase /adre3 D
(lases annimas3 =<
(lases de envoltura3 ?:
(lases internas3 <=3 =:3 =;
(lases /arametrizadas3 >>
(lass3 <>3 >D
("ASSPAT,3 =>
(lienteIservidor3 >
(loneable3 99
(digo fuente3 :?
(digo m)4uina3 :?
(oercin3 ::
(o*erencia3 :C
(o*esin3 9
(ollection3 ;@
(ollections3 DC
(omando3 D;
(ommand3 D;
(om/arable3 9@
(om/leidad3 :
(om/ortamiento3 =
(om/osicin3 D@
(om/osite3 D@
(oncurrencia3 :=3 9@
(ondiciones de carrera3 9@
(onstructor3 <;3 =;
(onstructor /or defecto3 <;
(ontinue3 <=
(ontrato3 >
(onversin3 ::
D
DeadlocEs3 9@
Decorador3 D9
Decorator3 D9
Default3 <=
De/endencia3 ;
F :<9 F
Ane0o F Bndice alfabtico
De/endencias3 :C
Descom/oner3 :
Descom/osicin algor5tmica3 :
Descom/osicin orientada a obetos3 <
Deserializacin3 ;>
Diagrama de Actividad3 @=
Diagramas de (olaboracin3 ?>
Diagramas de +nstancias3 :C
Diagramas de +nteraccin3 ?>
Diagramas de Pa4uetes3 :C
Diagramas de Secuencia3 ?>
Diagramas .st)ticos de (lases3 9
Do w*ile3 <=
Double3 :D
.
.conom5a3 ?>
.ficiencia3 ?>
.ecutable3 9;
.lse3 <<
.nca/sular3 9
.nlace tard5o3 :<
.nlace tem/rano3 :<
.numSet3 ;;
.nvoltorio3 D9
.nvolturas3 ?:
.rror3 9<
.stado3 =
.strategia3 D@
.structurado3 =
.0ce/cin3 >3 9:
.0ce/ciones controladas3 9<
.0ce/ciones no controladas3 9<
.0ce/tion3 <@3 9<
.0tends3 =@
%
%)brica Abstracta3 D=
%actor# !et*od3 D>
%inal3 <;3 =C3 =:
%inalizadores3 <D
%inall#3 9:
%loat3 :D
%or3 <<3 DC
%orE3 :=
%riendl#3 =C
-
-arbage collector3 <D
-enericidad3 >>
-enrico3 >>
,
,as*!a/3 ;D
,as*Set3 ;@
,erencia3 @3 =@
,erencia mHlti/le3 @3 =;
,erencia sim/le3 @3 =@
,ilos3 :=
+
+dentidad3 =
+f3 <<
+m/lements3 >=
+m/ort3 =>
+nanicin3 9@
+nmutable3 :;3 9:3 DC
+n/utStream3 @D
+nstanceof3 >:
+nt3 :D
+nterfaces3 >3 ><
+terador3 D@
+teradores3 DC
+terator3 D@
$
$ava Jative +nterface3 =:
$avadoc3 :@
$erar4uizar3 <3 ?
$+T3 :?
$J+3 =:
$ust +n Time3 :?
"
"enguae Unificado de !odelado3 >
"5neas de eecucin3 :=
"inEed"ist3 ;@
"isEov3 :C:
"ist3 ;@
"ong3 :D
F :<? F
Disear # Programar todo es em/ezar
!
!a/3 ;@3 ;D
!)4uina 'irtual3 :?
!todos3 >
!iembros3 >
!odelo de Obetos3 =
!odificadores en la definicin de clases generales3 =:
!odularizar3 :C
!dulos3 :C
!onitor3 9;
!uerto3 9;
J
Jative3 =:
Jew3 <;
Jombres com/letamente calificados3 =>
Jotif#3 9D
Jotif#All3 9D
Juevo3 9;
Jull3 <9
O
Obect3 >D
Obeto3 =
Observador3 :CC
Observer3 :CC
Ocultacin3 9
O/eradores3 <C
Orientacin a as/ectos3 =
Out/utStream3 @D
P
Pa4uete3 :C
Pa4uete /or defecto3 =9
Paradigma im/erativo3 =
Patrn (omando3 D;
Patrn (om/osicin3 D@
Patrn (onstructor3 D>
Patrn Decorador3 D9
Patrn .nvoltorio3 D9
Patrn .strategia3 D@
Patrn %)brica3 D>
Patrn +terador3 D@
Patrn !todo de (onstruccin3 D>
Patrn Observador3 :CC
Patrones de Diseo3 D=
Persistencia3 :=
Polimorfismo3 :<
Polimorfismo din)mico3 :<3 =D
Polimorfismo est)tico3 :<3 <;
Poscondiciones3 >
Precondiciones3 >
Primitividad3 9
Princi/io abiertoFcerrado3 :CC
Princi/io de inversin de de/endencia3 :C:
Princi/io de "isEov3 :C:
Princi/io de res/onsabilidad Hnica3 :C:
Princi/io de segregacin de interfaces3 :C:
Private3 ?3 =C3 =:
Problema de la ambigQedad3 @
Problema del diamante3 @
Pro/iedades3 >
Protected3 ?3 =C3 =:
Protocolo3 >
Public3 ?3 =C3 =:
6
6ecolector de basura3 <D
6edefinicin3 =;
6efle0in3 >D
6egin de e0clusin mutua3 9;
6elaciones de asociacin3 ;
6elaciones de de/endencia3 ;
6elaciones de uso3 ;
6eturn3 <@
6un3 9@
S
Segregacin de interfaces3 :C:
Sentencias3 <:
Serializable3 ;>
Serializacin3 @D3 ;>
Set3 ;@
S*ort3 :D
Slee/3 9;
Sobrecarga3 <;
Sorted!a/3 ;D
SortedSet3 ;@
StacE3 ;@
Start3 9@
F :<@ F
Ane0o F Bndice alfabtico
Starvation3 9@
Static3 =C3 =:
Strateg#3 D@
Stream3 @D
Strictf/3 =:
Suficiencia # com/letitud3 9
Su/er3 =;
Su/erclase3 D
Switc*3 <=
S#nc*ronized3 =:3 9;
T
Tamao de los mdulos3 :C
Tem/oralidad3 ?=
T*is3 <?
T*read3 9@
T*reads3 :=
T*row3 <@3 9:
T*rowable3 9:
T*rows3 <@
Ti/ado3 ::
Ti/ado dbil3 ::
Ti/ado din)mico3 :<
Ti/ado est)tico3 :<
Ti/ado e0/licito3 :<
Ti/ado fuerte3 ::
Ti/ado im/l5cito3 :<
Ti/ado latente3 :<
Ti/o3 ::
Ti/os enumerados3 9D
Ti/os /arametrizados3 >@
Ti/os /rimitivos3 :;
Transient3 =:3 ;9
Tree!a/3 ;D
TreeSet3 ;@
Tr#3 9:
U
U!"3 >
Unc*ecEed e0ce/tions3 9<
Unified !odeling "anguage3 >
Uso3 ;
'
'ariables3 :;
'ector3 ;@
'ersatilidad3 ?=
'isibilidad3 ?=
'olatile3 =:
G
Gait3 9D
G*ile3 <<
Gra//er3 D9
Griter3 ;:
F :<; F

También podría gustarte