Tí
tu
lo
:
In
te
racc
iones
en
t
re
aspec
tos
:
es
tud
io
sob
re
un
caso
indus
t
r
ia
l
Au
to
res
:
A
lva
rez
,
A
le
jand
ro
N
ico
lás
D
i
rec
to
r
:
Go
rd
i
l
lo
,
S
i
lv
ia
Cod
i
rec
to
r
:
Zamb
rano
,
A
r
tu
ro
Ca
r
re
ra
:
L
icenc
ia
tu
ra
en
In
fo
rmát
ica
–
P
lan
90
Si bien la orientación a aspectos es aceptada como un mecanismo efectivo para la separación de crosscutting concerns, la característica de obliviousness entre aspectos donde el programa base desconoce la existencia de los mismos, hace que el comportamiento del sistema sea mucho más difícil de comprender. Además, debido al hecho de que los aspectos afectan varios elementos de la aplicación, es probable que los mismos interfieran entre sí de alguna manera. Esto da lugar a que se produzcan interacciones entre los aspectos, necesarias para lograr la funcionalidad final esperada. Las interacciones entre aspectos son un tema abierto de investigación. Sanen et al. presentan un estudio sobre las interacciones, donde los autores clasifican las mismas en las siguientes categorías: dependency, conflict, mutex y reinforcement.
El presente Trabajo de Grado propone estudiar las interacciones entre aspectos sobre una implementación de complejidad considerable, que involucre varios aspectos funcionales. Para esto, se implementó un software complejo como es el de las máquinas tragamonedas, dominio en el cual hemos trabajado por 3 años. En este estudio se reportan casos concretos de interacciones y se presentan implementanciones para el tratamiento de las mismas. En algunos casos mediante mecanimos adhoc y en otros casos con una solución genérica, aplicable a otros dominios.
Programación Orientada a Aspectos.
Interacciones entre Aspectos: dependency, reinforcement, conflict y mutex.
Crosscutting concerns. Ingeniería de Software. Máquinas tragamonedas. Java.
AspectJ.
Se identificaron interacciones sobre los crosscutting concerns funcionales y no funcionales del dominio. Las mismas se categorizaron según la taxonomía de Sanen et al. Se seleccionó una interacción para cada una de las categorías, para las cuales se estudió e implementó un mecanismo para su tratamiento sobre el software desarrollado. Las interacciones fueron implementadas de forma tal que la SM se comporte de la manera deseada. Para cada uno de los mecanismos desarrollados, se analizaron ventajas y desventajas con respecto a la mantenibilidad, genericidad, escalabilidad y modularización.
Se implementó el software de una SM que incluye varios crosscutting concerns funcionales y permite la interacción con el usuario. Se identificó el código correspondiente a las interacciones del dominio reportadas por Zambrano et al. Se seleccionó una interacción para cada una de las categorías de la taxonomía propuesta por Sanen et al. Para cada interacción se estudió un mecanismo que permite su tratamiento, realizando una implementación concreta del mismo sobre el software desarrollado. Para cada uno de los mecanismos desarrollados se analizaron ventajas y desventajas sobre distintos factores de la Ingeniería de Software.
Se propone como trabajo a futuro, aplicar los mecanismos propuestos en otros dominios, analizando si los mismos permiten implementar otras interacciones pertenecientes a las categorías presentadas en este trabajo. De esta manera se puede comprobar si las generalizaciones propuestas son reusables. Por otra parte, es necesario profundizar el estudio de los mecanismos planteados e implementar formas alternativas para tratar las interacciones, con el objetivo de eliminar algunas de las limitaciones de los mecanismos propuestos.
Índ
icegenera
l
1.Introducción 1
1.1. Motivación ... 2
1.2. Objetivos ... 2
1.3. Contribuciónyresultadosobtenidos ... 3
1.4. Estructuradeldocumento ... 3
2. Programación Orientadaa AspectoseInteraccionesentre Aspectos 5 2.1. ProgramaciónOrientadaaAspectos ... 5
2.2.Interaccionesentreaspectos ... 7
2.2.1. Taxonomíadelasinteracciones ... 7
2.3. AspectJ ... 8
2.3.1. Sintaxis ... 8
3. Concernsenel DominiodelasSlots Machines 13 3.1. DominiodelasSlots Machines ... 13
3.1.1. Eljuego... 14
3.1.2. Meters... 15
3.1.3. Hardware ... 15
iv ÍNDICEGENERAL
3.1.4. Programresumption... 18
3.1.5. Gamerecall... 19
3.1.6. Communicationprotocols ... 19
3.1.7. ModoDemo... 20
3.2. Concernsidenticadoseneldominioanivelderequerimientos.... 21
3.3. Relacionesentreconcerns ... 22
4.Implementación Orientadaa AspectosdeunaSM 25 4.1. Game ... 26
4.2. HAL... 27
4.3. Meters... 28
4.4. ProgramResumption... 30
4.5. GameRecall ... 31
4.6. ErrorsConditions... 31
4.7. G2SyPCP ... 33
4.8. Demo ... 35
5.Interaccionesentre Aspectos 37 5.1.InteraccionesidenticadaseneldominiodelasSM ... 37
5.2. Mutex ... 39
5.2.1. ImplementacióndelaInteracción... 40
5.2.2. Instanciacióndel mecanismoparaelcomandoSetTime ... 42
5.2.3. Estrategiasalternativas ... 44
ÍNDICEGENERAL v
5.3.1. Tratamientodelainteracción... 45
5.3.2. Tratamientodelainteracciónentrelosconcerns:Demoy Meters46 5.3.3. Tratamientodelainteracciónentrelosconcerns :DemoyPro-gramResumption... 47
5.3.4. Tratamientodelainteracciónentrelosconcerns :DemoyCom-municationProtocols ... 48
5.3.5. Generalizacióndel mecanismo... 49
5.4. Dependency... 50
5.4.1. Tratamientodelainteracción... 50
5.4.2. LainteraccióndetipoDependencynorequiereunaimp lemen-taciónad-hoc... 51
5.5. Reinforcement... 53
5.5.1. Tratamientodelainteracción... 53
5.6. Análisisdelos mecanismosdesarrollados... 56
5.6.1. Modularización... 57
5.6.2. Generalización ... 57
5.6.3. Escalabilidad ... 58
5.6.4. Mantenibilidad ... 58
5.6.5. Weavingdinámico ... 59
6. Conclusionesy TrabajosFuturos 61 A. Modelode Objetos 63 A.1. PaqueteGame ... 63
A.2. PaqueteHAL ... 65
vi ÍNDICEGENERAL
A.4. PaqueteGameRecall... 67
A.5. PaqueteErrors ... 68
A.6. PaqueteProtocols ... 69
B.Softwaredesarrollado 71
B.1. ProyectoEgm ... 71
Agradecimientos
Dedico este trabajo a Naty, por su amor, ayuda, paciencia, por estar siempre. A mis padres, Norma y Eloy, por todo, por darme la vida, por sus valores y consejos. A mis hermanos, Belén y Pablo, por estar y apoyarme siempre. A mis tíos, Marga y Bocha, por su ayuda y motivación constante. A Mirta y Chano, por ayudarme desde el inicio. A la memoria de mi querida abuela Marunga.
Agradezco hoy y siempre a mi familia que siempre han procurado mi bienestar y que si no fuese por el esfuerzo realizado por ellos, en especial mis padres, mis estudios no hubiesen sido posibles.
Quiero expresar mi más sincero agradecimiento a mi codirector Arturo Zambrano, por la orientación, dedicación y esfuerzo, que me brindó para la realización de esta tesis.
De igual manera mis agradecimientos a mi directora Silvia Gordillo y al Labora-torio LIFIA.
Nuevamente gracias a Arturo y a Johan Fabry, por darme la posibilidad de realizar una estadía de investigación en el exterior, por enriquecer con sus conocimientos y sugerencias el desarrollo de este trabajo.
Gracias a mis compañeros de LIFIA, en especial a los que durante el desarrollo de este trabajo me incentivaron a concluirlo.
Gracias a mis amigos, por estar, por ser amigos.
Alejandro N. Alvarez
Cap
ítu
lo1
Introducc
ión
Sibienlaorientaciónaaspectos1esaceptadacomoun mecanismoefectivopara
laseparacióndecrosscuttingconcerns[17],lacaracterísticadeobliviousnessentre aspectos[8]dondeelprogramabasedesconocelaexistenciadelos mismos,hace queelcomportamientodelsistemasea mucho másdifícildecomprender.Además, debidoalhechodequelosaspectosafectanvarioselementosdelaaplicación,es probablequelos mismosintereranentresídealguna manera.Estodalugaraque seproduzcaninteraccionesentrelosaspectos,necesariasparalograrlafuncionalidad
nalesperada.
Lasinteraccionesentreaspectossonuntemaabiertodeinvestigación[20].Sanen etal.[23]presentanunestudiosobrelasinteracciones,dondelosautoresclasican lasmismasenlassiguientescategorías:dependency,conict,mutex yreinforcement.
ElpresenteTrabajode Grado proponeestudiarlasinteraccionesentreaspectos sobreunaimplementacióndecomplejidadconsiderable,queinvolucrevar iosaspec-tosfuncionales.Paraesto,seimplementóunsoftwarecomplejocomoeseldelas máquinastragamonedas,dominioenelcualhemostrabajadoportres(3)años.
Enesteestudiosereportancasosconcretosdeinteracciones[29]ysepresentan implementancionesparaeltratamientodelas mismas.Enalgunoscasos mediante mecanimos ad-hoc,comolospresentadasen[28]yenotroscasosconunasolución genérica.
1EnelpresentedocumentoalreferirnosaaspectosesenelsentidodeAspectOr ientedProgram-ming.
2 CAPÍTULO1.INTRODUCCIÓN
1
.1
. Mot
ivac
ión
Lasinteraccionesentreaspectossehanestudiadoanivelesteóricos[4]ohansido analizadasapartirdeejemplos muysimples,porlotantoesnecesarioestudiarlas mismasencasosconcretosdel mundoreal.Paraesto,proponemoslaimp lementan-ciónorientadaaaspectosdeunsoftwaredeunacomplejidadconsiderable.
ElsoftwaredeunaSM(Slot Machines)presentanumerososejemp losdeinterac-cionesentreconcerns.Consideremoselsiguientecaso:
LasSMsposeenunacantidadconsiderabledecontadores,quereejanlas actividadesqueocurrendentrodeesta.Porejemplo:cantidaddejuegos realizados,cantidaddemonedasinsertadas,cantidaddedineroapostado. Porotrolado,existenprotocolosdecomunicaciónusadospara mon ito-rearde maneraremotaelcomportamientodeunaSM,quereportanla informaciónquealmacenanloscontadores.
Enestesistema,unaspecto mantienelainformacióndeloscontadoresafectando diferentesconcerns.Alavez,unaspectoquereportaestainformaciónnecesitade loscontadoresparaproveersufuncionalidadcorrectamente. Estasrestriccionesy otras,debenserrespetadasparaasegurarelcorrectofuncionamientodelsistema.Al implementarunsistemadeestascaracterísticasesnecesarioestudiarycontrolarlas interaccionesaspectualeslocual motivaestetrabajodetesis.
1
.2
. Objet
ivos
Elobjetivoprincipaldeestetrabajoestratarlasinteraccionesentreaspectos, implementando mecanismosdeformaad-hocogenéricos,conel ndeasegurarque secumplanlasrestriccionesimpuestasporlasinteraccionesenundesarrolloorientado aaspectos.
Paraesto,tomandocomoreferencialosconcernsmásrepresentativoseneldom i-niodelasSM,estudiadosenlaetapadeanálisisderequerimientos[30],sepropone implementarelsoftwaredeunaSMmedianteelusodeAspectOrientedProgramming.
1.3. CONTRIBUCIÓNYRESULTADOSOBTENIDOS 3
1
.3
. Contr
ibuc
iónyresu
ltadosobten
idos
SeimplementóelsoftwaredeunaSMqueincluyevarioscrosscutt ingcon-cernsfuncionalesypermitelainteracciónconelusuario.
Seidenticóelcódigocorrespondientealasinteraccionesdeldomin ioreporta-das[29].
Seseleccionóunainteracciónparacadaunadelascategoríasdelataxonomía propuestaporSanenetal.[23].Paracadainteracciónseestudióunmecanismo quepermitesutratamiento,realizandounaimplementaciónconcretadelmismo sobreelsoftwaredesarrollado.
Paracadaunodelos mecanismosdesarrolladosseanal izaronventajasydes-ventajassobredistintosfactoresdelaIngenieríadeSoftware.
1
.4
. Estructurade
ldocumento
Elsiguientecapítulodetallalosconceptos másimportantesdelaProgramación OrientadaaAspectos(AOP)[18].Tambiénsedescribelaclasicac iónparalasin-teraccionesentreaspectospropuestaporSanenetal.[23].Porúltimo,seintroducen lascaracaterísticasmásrelevantesdeAspectJ [16],extensiónparaAOPdellenguaje JavautilizadaenlaimplementacióndelsoftwaredeunaSM,
Elcapítulo3introduceconceptosreferidosaldominiodelas máqu inastragamo-nedas.Sedetallanrequerimientosyfuncionalidadessobreloscualesseidentican variosconcernsdeldominio. Entrelos mismos,seidenticaroninstanciasdelas interaccionesquesonelobjetodeestudiodelpresentetrabajo.
Elcapítulo4presentadetallesdelaimplementacióndelso ftwaredeunaSMrea-lizadautilizandoAspectJ.Sedescribenlosobjetosyaspectosquecomponencada concern.EnelapéndiceAsepuedeencontrareldetallecompletodelmode lodeobje-tosdesarrollado.EnelapéndiceBseindicalamaneradeinteractuarconelsoftware presentado.
Enelcapítulo5sedetallanlos mecanismosdesarrolladosparaeltratamiento lasinteraccionesencontradas. BasadosenlaclasicacióndeSanenetal.[23],se estudianinteraccionesdeldominioparalostiposMutex, Conict, Dependency y Reinforcement.Sobreel naldeestecapítulosepresentaunanálisisdelos mecan is-mosdesarrollados.Enel mismosediscutenventajasydesventajasenloreferidoa generalización, modularización,escalabilidadyotrosfactores.
Cap
ítu
lo2
Programac
iónOr
ientadaa
AspectoseInteracc
ionesentre
Aspectos
Enestecapítulosedetallanlosconceptos másimportantesdelaProgramación OrientadaaAspectos(AOP)[18].Esteenfoqueparalaprogramcación,permitela modularizacióndecrosscuttingconcerns,paralocualintroducealaspectocomouna unidadpararepresentarlos.
Laseparacióndecrosscuttingconcernsrequierequelosaspectosinteractúen,de mododelograrlafuncionalidad nalesperada.Sanen etal.[23]proponenunaclas i-caciónparaestasinteracciones.Lascategoríasdela mismasedescriben,dadoque seránutilizadasparaclasicarlasinteraccioneshalladaseneldominiodelasSM.
Porúltimo,seintroducenlascaracaterísticas másrelevantesde AspectJ [16], extensiónparaAOPdellenguajeJava.Lamismafueutilizadaenlaimplementación delsoftwaredeunaSM,realizadaparaelestudioconcretodelasinteracciones.
2
.1
. Programac
ión Or
ientadaa Aspectos
Unaaplicaciónorientadaaobjetos,seestructuraenfuncióndeobjetosqueco la-boran.Unadelas mayoresventajasdelaorientaciónaobjetos,esqueunsistema desoftwarepuedeserconstruidoconunacoleccióndeclases,dondecadaunatiene responsabilidadesqueestánclaramentedenidas.
Sinembargo,existenfuncionalidadesdeunsistemacuyaimplementac iónnopue-deser modularizadayporlotantosuimplementaciónseencuentradistribuidaen
6 CAPÍTULO2. AOPEINTERACCIONESENTREASPECTOS
diferentesclases,loquesedenominacrosscuttingconcern.
Ejemplosdecrosscuttingconcernsnofuncionalesson:lafuncionalidaddelogging, manejodeexcepciones,persistenciaoinyeccióndecódigoutilizadoparaanálisisde rendimiento(proling),etc.Estoscrosscuttingconcerns,entreotros ,fueronrepor-tadosporRashidetal.[22]enelestudiosobreelusodeaspectosenlaindustria.
Estosconcernsnopuedenserencapsuladosdeformaadecuada[18],porlatanto traenaparejadosefectosnegativosenelcódigofuente.
Unodeellosestenerlaimplementacióndeciertapropiedaddistribuida .Estepro-blemaseconocecomoscatteredcodeocódigodisperso.
Otroproblemaasociado,consisteenqueun mismo módulonosóloimplementeel comportamientoreferidoasuresponsabilidad,sinotambiénotroscomportamientos extrínsecoscorrespondientesaloscrosscuttingconcerns.Estoseconocecomotangled codeocódigoenmarañado.
Conelobjetivodetratarestosproblemas,nacelaProgramaciónOr ientadaaAs-pectos,presentadaporKiczalesetal. [18]en1997.La mismaobtuvorápidamente laatencióndelacomunidadcientíca,siendoseñaladaporelMIT enelaño2001, comounadelastecnologíasclavesdelapróximadécada[26].
Esteenfoquepretendeserunasoluciónalproblemadeencapsularcrosscutt ingcon-cerns, mediante módulosdenominadosaspectos.
Laimplementacióndeunaspecto,incluyeelcomportamientodelcrosscutting concernylaespecicacióndeloslugaresendondeseráejecutadodichocódigo. Unjoinpointesunpuntobiendenidoenlaejecucióndeunprograma,porejemplo: lallamadaaun método,laasignacióndeunavariableoellanzamientodeuna excepción.
Losaspectossecomponendepointcutsyadvices.Unpointcutdeneunpredicado sobrelosjoinpoints.Porejemplo,todaslasllamadasal métodom enelobjetoA. Un adviceesequivalenteaun métodoenOOP,contieneelcomportamientoque implementaelcrosscuttingconcern. Unadviceesasociadoaunpointcut. Deesta manera,cuandoentiempodeejecuciónun joinpointescapturadoporunpointcut, elcódigodeladviceasociadoesejecutado.
Un advicepuedeserdenidoparaserejecutadoantes,despuésoalrededordel joinpointseleccionado.Enunadvicequeesejecutadoluegodelallamadadeun método,esposibleobtenerelvalorderetornodelmismo.Porotrolado,enunadvice denidoalrededordeunjoinpoint,elprogramadortienelaposibilidaddedecidirsi seejecutaonoeljoinpointcapturado.
2.2.INTERACCIONESENTREASPECTOS 7
lasclases.Deesta manera,esposibledesdeunaspectoañadir métodosyatributos aclasesyaexistentes.
Denidoslosaspectos,lacomposicióndelosmismosconelcódigodelaaplicación, serealizaenunprocesodenominadoweaving.Aunqueexistensimilitudesentrelos lenguajesde AOP,unadiferenciaescencialresideenel momentoenqueserealiza esteproceso.Estopuedeocurrirentiempodecompilaciónoentiempodeejecución, loquedalugaralaclasicacióndelenguajesestáticosodinámicos.
2
.2
. Interacc
ionesentreaspectos
Laorientaciónaaspectosesaceptadacomoun mecanismoefect ivoparalase-paracióndecrosscuttingconcerns[17].Estosedebe,entreotrascosas,algradode expresividadqueesteenfoquebrindaalprogramador.
Sinembargo,lacaracterísticadeobliviousnessentreaspectos[8]dondeelprograma basedesconocelaexistenciadelosaspectos,hacequeelcomportamientodelsistema sea mucho másdifícildecomprender.
Debidoalhechodequelosaspectosafectanvarioselementosdelaaplicación,es probablequelos mismosintereranentresídealguna manera.Estodalugaraque seproduzcaninteraccionesentrelosaspectos,necesariasparalograrlafuncionalidad
nalesperada.
Enalgunoscasos,lasinteraccionessondeseables,ysupresenc iadebeserasegu-rada.Esteeselcasodedependenciasentreaspectos,dondeunaspectorequierede otroparafuncionar.
Encambioenotroscasos,siexistenaspectoscuyocomportamientoesincopatible, esnecesarioevitarquelainteracciónseproduzca.
2.2.1. Taxonomíadelasinteracciones
EnelreportetécnicodeAOSD-Europe sobreAspectsInteractions [23] ,losauto-resclasicanlas mismasenlassiguientescategorías:dependency,conict,mutex y reinforcement.
Dependency: estaformadeinteraccióncubrelassituacionesdondeunaspecto A,dependedeotroaspecto,B.Enunasituacióndedependencia,sielaspectoBno seencuentrapresente,elaspectoAnopuedefuncionarde maneracorrecta.
8 CAPÍTULO2. AOPEINTERACCIONESENTREASPECTOS
puedegenerarerroresocomportamientosnodeseadosenlaaplicación.
Mutex: estaformadeinteracción,tratalaexclusión mútuaentreaspectosque proveenla mismafuncionalidad. Alnoseraspectoscomplementarios,unopuede usarse,elotrono.
Reinforcement: esuntipodeinteracciónpositiva ,seproducecuandolapre-senciadeunaspectoA,inuyepositivamentesobreotro,B.ElaspectoA puede funcionarsinlapresenciadeB,perodeestaresteúltimopresente,Abrindafunc io-nalidadextendida.
Estataxonomíaquedescribelasformasenquelosaspectosinteractúan,esut i-lizadaenelcapítulo5delpresentetrabajo,paraclasicarlasrelacionesentrelos concernsdeldominiodelasSM.
2
.3
. AspectJ
AOP noestáligadaaunúnicolenguajeoparadigmadeprogramación. Hoy endíaexistenvariasextensionesde AOP[7,16,24]paradiferenteslenguajesde programación[3,9,15].Entrelas mismas,seencuentralaimplementaciónpionera: AspectJ [16],extensiónparaAOP dellenguajeJava[13].
AspectJ esellenguajedeaspectosconmayorinuenciayeselpuntodereferencia paraotroslenguajes.FuecreadoporunequipodeXeroxPARC [27],lideradopor Gregor Kiczales,enelaño1997. Desdeentonces,haacompañadolaevolucióndel lenguajeJAVA.
AspectJ hasidoutilizadoenlaindustria,pruebadeestoesqueformapartedel frameworkSpring[1].
LaherramientamáspopularparalaprogramaciónconAspectJeselplug-inAJDT[6] paraelIDE Eclipse[5].El mismoofreceunconjuntodesólidasherramientas,que facilitaneldesarrollodeaplicacionesorientadasaaspectos
2.3.1. Sintaxis
2.3. ASPECTJ 9
Pointcuts
Lospointcutspuedenserdeclaradosenunaspecto,claseointerface.Comoenlas variablesy métodosdeJava,enunpointcutsepuedeespecicarsuniveldevisibil i-dad:public,protected,etc.
EnAspectJ,lospointcutspuedenseranónimosonombrados.Losanón imossonde-claradosenellugardondeseusan,porejemploaldenirunadvice.Encambio,los pointcutsnombradossonelementosreusables,dadoquepuedenserreferenciadosde diferenteslugares.La gura2.1detallalasintaxisdelospointcutsnombrados.
Código2.1:Sintaxisdelospointcutsnombrados.
1[access specifier] pointcut pointcut_name([args]) : 2 pointcut_definition
Alaizquierdadelos: seencuentraelnombredelpointcutydelladoderecho sudenición.Aquí medianteunpredicado,seidenticanlosjoinpoints.
Enelfragmentodecódigo2.2,sepuedeverladenicióndeunpointcut,denom i-nadoaccountOperations.El mismocapturalaejecucióndetodoslos métodos deunaclasellamadaAccount.
Código2.2:Ejemplodede nicióndeun pointcutenAspectJ.
1protected pointcut accountOperations() : 2 call(* Account.*(..))
Advice
Comofueexplicado,cuandoentiempodeejecuciónunjoinpointescapturado porunpointcut,elcódigodeladviceasociadoesejecutado. Acomparacióndelos pointcuts,enAspectJ losadvicessólopuedendenirsede maneraanónima.
Paraindicarel momentoenquelafuncionalidaddel advicedebaserejecutada, AspectJ proveelaspalabrasclaves:before,afteryaround. Mediantelas mismas,se deneeltipodeunadvice.
Laestructuradeunadvicepuededividirseentrespartes:ladeclaracióndeltipodel advice,laespecicacióndelpointcutyelcuerpo.
10 CAPÍTULO2. AOPEINTERACCIONESENTREASPECTOS
Código2.3:Usodeun pointcutnombradoenunbeforeadvice.
1before() : accountOperations() {
2 System.out.println("Executing: " + thisJoinPoint); 3}
Elejemploanterior,tambiénpuededenirseutilizandopointcutsanónimos.En la gura2.4,dichopointuct,sedenedentrodelaestructuradelpropioadvice.
Código2.4:Usodeun pointcutanónimoenunbeforeadvice.
1before() : call(* Account.*(..)) { advice body }
Enladeclaracióndeunadviceesposibleespecicarqueinformacióndecontexto estádisponibleparaserutilizadaenelcuerpo.Porejemplo,esposibleaccederal objetoenejecuciónsobreelcualeljointpointescapturado.
Enunaroundadvice,lamaneradeindicarqueseprocedaconlaejecucióndelmétodo quehasidocapturado,es medianteelusodelapalabraclaveproceed().
Elfragmento de código 2.5, dene unaround advice sobre el método Account.debit().Enladenicióndeladviceseespecicancomoparámetros: elobjetosobreelcualseejecutael métodoyelparámetroqueesterecibe.Deesta manera,elprogramadorpodríaevaluarunacondición,paradecidirsiprocederono conlaejecucióndel método.
Código2.5:Ejemplodede nicióndeun aroundadvice.
1void around(Account account, float amount) 2 call(* Account.debit(float))
3 && target(account) 4 && args(amount) 5{
6 if( _debitCondition ) {
7 proceed(account, amount);
8 }
9}
Aspecto
2.3. ASPECTJ 11
Código2.6:Sintaxisdeunaspecto.
1[access specification] aspect <AspectName> 2[extends class_or_aspect_name]
3[implements interface_list] { 4... aspect_body
5}
Elfragmentodecódigo2.7deneunaspectoAccountLogging,queheradade AbstractLogging.Elcuerpodeesteaspectodeneloselementospreviamente detallados.
Código2.7:Ejemplodeunaspectoquede neun pointcutyunadvice.
1public aspect AccountLogging extends AbstractLogging { 2
3 protected pointcut accountOperations() : 4 call(* Account.*(..)) 5
6 before() : accountOperations() {
7 System.out.println("Executing: " + thisJoinPoint); 8 }
9}
Inter-typedeclarations
Medianteelusode pointcutsyadvicesesposible modicarelcomportamiento dinámicodeunsistema.Paraafectarlaestructuraestáticadel mismo,AspectJ pro-veedeun mecanismodenominadoIntroduction.Este mecanismopermitealterarla estructuradeclases,interfacesyotrosaspectos.
UnejemplodeusodeIntroductionsepuedeverenelfragmentodecódigo2.8.El aspetodeclaradoagregaalaclaseAccount,unavariableenlalínea3yun método enlaslíneas5a7.Amboscomponentessedenendela misma maneraqueenuna claseJava,conlaúnicadiferenciaqueseanteponeelnombredelaclasedestino.
Código2.8:De nicióndeunavariableyun método mediante Introduction.
1public aspect AccountOperationsAspect { 2
3 private int Account._varName; 4
5 public int Account.getVarName() { 6 return _varName;
12 CAPÍTULO 2. AOP E INTERACCIONES ENTRE ASPECTOS
Weaving
En el compilador de AspectJ, la fase de weaving puede ser ejecutada en tres momentos diferentes:
Compile-time weaving: es la forma utilizada cuando se dispone del código fuente de las aplicación.
Post-compile weaving: es utilizado para realizar el proceso de weaving sobre archivos .class o archivos JAR.
Load-time weaving: el proceso de weaving se produce en el momento en que un archivo .class es cargado en laJVM. Para poder ser utilizado este modo, el
Cap
ítu
lo3
Concernsene
l Dom
in
iodelas
S
lots Mach
ines
Enelpresentecapítulo,introducimosciertosconceptosgeneralesreferidosa ldo-miniodelas máquinastragamonedas.
Enestesentido,resultaprioritariodetallarrequerimientosyfuncionalidadesqueal naldelcapítuloseránidenticadoscomoconcernsdeldominio .Entreestoscon-cernsseidenticaráninstanciasdelasinteraccionesquesonelobjetodeestudiodel presentetrabajo.
3
.1
. Dom
in
iodelasS
lots Mach
ines
Unamáquinatragamonedas1esundispositivoquepuedeserencontradogenera
l-menteencasinosypermiteinteractuarconunjuegodeapuestas.
Figura3.1:EjemplosdeSMselectromecánicas.
1Slot Machine,laabreviaturaSMseráutilizadadeaquíen más.
14 CAPÍTULO 3. CONCERNS EN EL DOMINIO DE LAS SLOTS MACHINES
[image:22.595.89.455.163.297.2]Estas máquinas, que eran completamente electromecánicas, han ido evolucionando para convertirse en la actualidad, en computadoras que ejecutan unsoftware de alta complejidad.
Figura 3.2: SMs modernas donde la interacción se realiza mediante una pantalla táctil.
En cuanto al software de una SM, es necesario y escencial explicar que se com-pone de un juego y un conjunto de subsistemas cuya funcionalidad varía desde la interacción con elhardware hasta la comunicación con servidores remotos.
A continuación se describen ciertas características del juego y de estos subsistemas, algunos de los cuales derivarán enconcerns del dominio.
3.1.1. El juego
Los juegos se componen de 3 o 5 rodillos (reels), los cuales giran cuando el jugador presiona el botón de girar (spin). Para poder jugar se debe contar con créditos, que pueden ser ingresados de distintas formas de acuerdo alhardware con el que cuente laSM.
En las máquinas con juegos multilíneas es necesario seleccionar la cantidad de líneas sobre las que se quiere apostar (selected paylines) y por cada línea se apuesta una cantidad de créditos (bet per line). Estas acciones determinan el costo de la jugada:
bet per line xselected paylines.
Al presionar el botón de spin, se descuenta el costo de la jugada de los créditos actuales y un sorteo determina de forma aleatoria la nueva posición de losreels. Luego, se evalúa si hubo líneas ganadoras de acuerdo a la configuración de la tabla de pagos (paytable). Ésta indica cual es el multiplicador que se aplica a la apuesta por línea para cada combinación de símbolos que otorgue premio.
3.1. DOMINIODELASSLOTS MACHINES 15
3.1.2. Meters
ElregistrodetodalaactividadqueocurreenunaSMsea lmacenaenuncon-juntodecontadoresquesondenominadosMeters.Esteconjuntoderivadediferentes documentosqueincluyenregulacionesyrecomendacionesdelaboratoriosdecert i-cación[10].
LosvaloresdelosMeters debenserconsistentesentodo momentoydadoque almacenaninformaciónsensible,existeunprocedimientolegal muyestrictopara reiniciarlos.
Elaccesoalos mismosserealiza medianteunavistadelainterfazgrácadelaSM, alacualsetieneacceso medianteelusodellavesdeseguridad.
La mayoríadelosMeters sonutilizadosparaactividadesdecontaduríayaud ito-ría,yaseanrealizadasporelpropiocasinooporentesreguladoresexternos.Todos losvaloressealmacenandigitalmente,peroaúnenlas máquinas más modernas,se cuentaconunaseriedecontadoreselectromecánicosquesonexig idosporlasregu-laciones.
EnunaSMpuedenencontrarsecientosdeMeters quealmacenantodotipode información,desdelacantidaddecréditosapostadoshastaelnúmerodevecesque setrabóuna moneda.
Paradarcuentadeloexplicitadoanteriormente,acontinuaciónsedetallana lgu-nosMeters quesepuedenencontrarenunaSM:
Current Credits: cantidaddecréditosdisponiblesparajugar. Total Drop:totaldecréditosinsertados.
Total Out:totaldecréditoscobrados.
Gameplayed: cantidaddejugadasrealizadas.
Game Won: cantidaddejuegosdondeseganóal menosuncrédito. GameLost: cantidaddejuegosdondenohubopremios.
3.1.3. Hardware
EnlaactualidadunaSMesunacomputadoraconprestacionesindustrialeslacual cuentacondiferentesdispositivosdehardware.
16CAPÍTULO3. CONCERNSENELDOMINIODELASSLOTS MACHINES
Figura3.3:GabinetedeunaSlot Machine.
Enunprincipio,parapoderutilizareljuegosedebecontarconcréditos,que puedenseringresadosdedistintasformas.Cuandoeljugadordecideretirarsedela SM,deberetirarsuscréditos.Losdispositivosquepermitenestasoperacionesson:
Coin Acceptor:permiteelingresodemonedaso chas,lascua lessonconver-tidasacréditossegúnladenominacióndelaSM.Estedispositivosóloacepta valoresde monedaspre-congurados.
Bill Acceptor: esundispositivoutilizadoparaingresarbilletes,aligualque elcoinacceptorsóloaceptavalorespre-congurados.
[image:24.595.98.428.100.476.2]3.1. DOMINIODELASSLOTS MACHINES 17
Ticket Reader:esotro medioparaelingresodecréditosalaSM.Elsistema deticketingposibilitaelintercambiodecréditosentreSMs.Escomúnencontrar elbillacceptoryelticketreaderenun mismodispositivofísico.
Coinhopper: permitecobrarloscréditosen monedaso chas.
Encuantoalos mediosdepago,unaSMpuedetenerconguradostantoelcoin hoppercomoelsistemadeticketing.Enelcasodetenerambos,eljuegopagarácon ticketscuandoyanocuentecon monedaso chas.
Porotrolado,dentrodelosdispositivosrelacionadosconlaseguridadyexigidos porlasregulacionessepuedenencontrarsensoresquepermitendetectarlaintrusión enlaSMadiferentesniveles.Unejemploeselsensordemaindoor,quepermitesaber cuandoesabiertalapuertadelgabinete.
TodalainformacióndelossensorestambiénescontabilizadaenlosMeters.
Conrespectoalhardwareutilizadoporelpersonaldelcasino,esdecir,losas is-tentesdejuego,sepuedenencontrarlossiguientesdispositivos:
TowerLamp: dispositivoluminosoutilizadoparallamaralasistentede lca-sino.
EstalámparapuedeencenderseporuneventogeneradoporlaSM,pore jem-plo,cuandoeljugadorganaeljackpotocuandohayunerrorquenopermite continuareljuego.
Alarm Bell: alarmasonoratambiénutilizadaparallamaraunasistentede juegoensituacionessimilaresalasdescriptaspreviamente.
Attendant Keyswitch:esteswitch,queseactivamedianteunallaveespecial, esutilizadoenocasionesdondelaintervenciónhumanaesrequerida.
Otradelascaracterísticasdelas SMsesquetamb iénsepuedenencontrarcon-tadoreselectromecánicos,estossonexigidosporlasregulacionesparac iertosub-conjuntodeMeters.
Para nalizar,podemosdecirqueunaSMtambiéncuentaconDIPswitches los cualesestánubicadosenunlugarsegurodelgabinteysonutilizadosporejemplo, paracambiareljuegoa modoDemo.Este modoesdetalladoenlasección3.1.7.
Hardware AbstractionLayer
18
Dispositivo
Bill Acceptor Bill accepted Bill Stacked Bill Returned Bill Rejected
Bill jam Bill Stacker Full Stacker Open
Ticket Printer Ticket printed Printer out of paper
Attendant
Key switch Attendant arrived/leaved Sensors Cabinet Open
Cabinet Closed CPU enclosure open/closed Dip switches Reset meters, Demo mode
Coin Hopper Coin Paid Hopper Empty
Coin cheated Coin Acceptor Invalid Coin
Eventos frecuentes Eventos no frecuentes
CAPÍTULO3. CONCERNSENELDOMINIODELASSLOTS MACHINES
Figura3.4:Eventosgeneradosagrupadospordispositivo.
Estoseventospuedensercondicionesdeerrorquedebenserreportadasaotros sistemasyqueademás,enalgunoscasos,puedengenerarcambiosenlaformaenque laSMsecomporta.
Lainteracciónconelhardwareagregaunnivelmásdecomplejidadqueelsoftware deunaSMdebesoportar.
Ennuestraexperiencia,eshabitualqueexistauncomponentedesoftwaredenom ina-doHAL(HardwareAbstractionLayer),elcualbrindaunniveldeabstracciónhacia losdispositivosfísicos.Loseventosanteriormententedescriptosviajandesdeyhacia laHALparaelcontroldelhardware.
3.1.4. Programresumption
UnaSMesundispositivoelectrónico,ycomotalpuedesufrircortesdeenergía. LainformaciónsensiblequesealmacenadentrounaSMrequieredeun mecanismo quegaranticelaposibilidadderestauracióndelosdatosyasegurelaconsistenciade lainformación.
EstafuncionalidadrecibeelnombredeProgramResumption.
LainformacióndeunaSMquedebeguardarseincluyeentreotrosdatos:lapos i-cióndelosreelsylosvaloresdelosmeters.
[image:26.595.91.477.92.337.2]3.1. DOMINIO DE LAS SLOTS MACHINES 19
3.1.5. Game recall
Otro punto importante, es que las regulaciones también requieren una funciona-lidad que recibe el nombre de Game Recall, cuyo objetivo es proveer el detalle de al menos los últimos 10 juegos realizados en la SM. Este detalle es utilizado por el personal de los casinos para resolver posibles conflictos sobre el comportamiento del juego.
Cada Game Recall debe contener entre otros datos: créditos apostados, símbolos que salieron sorteados, líneas ganadoras con el detalle de los créditos ganados por línea. Además, la información de entrada y salida de dinero entre cada juego debe quedar registrada en el Game Recall.
Otro punto importante, es que la lista deGame Recall también es parte de los datos que la funcionalidad de Program Resumption debe tener en cuenta para persistir.
3.1.6. Communication protocols
Es pertinente señalar que el software de las máquinas tragamonedas está conec-tado a sistemas de monitoreo en tiempo real y esto se debe principalmente a la necesidad de control sobre el movimiento de dinero.
Además de controlar el correcto funcionamiento de la SM, los sistemas de moni-toreo son utilizados para las operaciones de contaduría dentro y fuera de los casinos. Para esto, existen diferentes normas sobre protocolos de comunicación, las cuales, uti-lizan diversas tecnologías entre las que se destacan el uso de puerto serie o conexiones
ethernet.
Algunos protocolos funcionan con la técnica de polling, en la cual, un servidor de monitoreo pide los datos a la SMde manera regular. También existen protocolos basados en web services.
Es importante destacar que una SM debe tener la capacidad de poder trabajar con más de unCommunication Protocol al mismo tiempo. Estos protocolos proveen a grandes rasgos la misma funcionalidad que incluye entre otras: la consulta de valores de losMeters ó configurar unaSM de manera remota.
La especificación de losCommunication Protocolsdefine cientos de mensajes, estos pueden ser agrupados en cuatro categorías:
Configuración remota
Los mensajes en esta categoría son utilizados para configurar parte de una
20CAPÍTULO3. CONCERNSENELDOMINIODELASSLOTS MACHINES
OtroejemplosedaenunaSMconmúltiplesjuegosdondeesposibleseleccionar eljuegoactualde maneraremotautilizandoestetipode mensajes.
Consultade Meters
EstegrupodenemensajesyrespuestasutilizadosparaconsultarlosMeters en unaSM.Estos mensajessonlosqueseutilizanenlosservidoresparalasact i-vidadesrelacionadasconcontaduría.
Sistemadeticketing
EnalgunoscasinosnoseutilizadineroparainteractuarconlaSM,sinoque cuandoeljugadoringresaajugarcompraciertacantidaddecréditosysele otorgaunticket.
EsteticketpuedeserinsertadoenlaSMyutilizandoelcódigodebarrasque posee,seconsultaconunservidorcuantoscréditosdebenacreditarse.
Otracaracterísticaqueposeeelsistema,esquecuandoeljugadorrealizala operacióndecashout,seimprimeunticket.Esteasuvez,puedeserinsertado enotraSMopuedesercobradoporventanilla.
Loquerespectaalmanejodeticketsesrealizadoporservidoresdedicadosyla comunicacióndelasSMscondichosservidoresserealizautilizando mensajes quepertenecenaestacategoría.
EventosentiemporealyErrors Conditions
Muchosdeloseventosqueocurrenduranteeljuegodebenserreportadosalos sistemasde monitoreo.UnclaroejemplodeestosonlosdenominadosBeg in-Game yEndin-Game.
Tambiéndeserposible,debenserreportadosloseventosy Errors Cond i-tionsdescriptosenlasección3.1.3.
Estoesopcionalenla mayoríadelasregulaciones,debidoaquenotodoslos dispositivosfísicostienenla mismacapacidadparaladeteccióndeerroresy generacióndeErrorsConditions.Sifuesendetectados,debenserenv iadosme-diantelosprotocolosdecomunicación,dadoqueesinformaciónútilparalos casinos.
Eneldesarrollodelpresentetrabajo,seconsiderarondosCommunicat ionProto-cols.Unodeellosesunprotocolopropietario,delcualnosepuedendardetalles,el mismoseránombradocomoPCP.
Elotroprotocoloelegidoesabierto,basadoenwebservices,denominadoG2S[11].
3.1.7. Modo Demo
EsimportantesaberquelasSMdebencumplirconregulaciones,lascualesvarían dependiendodelpaísoestadodondedebaserinstalada.
3.2. CONCERNS IDENTIFICADOS EN EL DOMINIO A NIVEL DE REQUERIMIENTOS21
amplio conjunto de pruebas, certifican que unaSMes apta para ser instalada. Estas pruebas son muy extensas, abarcan ítems como probar completamente la paytable
del juego o uso intensivo delhardware.
Para las pruebas desoftware, lasSMs cuentan con un modo especial de funciona-miento denominado Demo. La principal característica del mismo es que el juego se comporta de manera particular, permitiendo simular el ingreso de créditos o forzar la salida de premios.
Esta funcionalidad es necesaria debido a que existen premios cuya probabilidad de salir es muy baja, al poder seleccionar que premio ganar en la próxima jugada se puede probar de forma completa la tabla de pagos del juego.
UnaSMfunciona en modoDemo dependiendo el estado de unDIP switchinterno, pudiendo darse el caso de que un SM instalada en un casino, sea pasada temporal-mente a este modo. Por esto, las regulaciones exigen que los eventos en modo Demo, no deben ser contabilizados por losMeters ni deben reportarse a losCommunication Protocols.
3.2.
Concerns identificados en el dominio a nivel de
re-querimientos
Dada las características descriptas de las SMs y nuestra experiencia de trabajo en el dominio, se identificaron los concerns que se detallan a continuación:
Game: contiene la lógica de un juego de reels. El juego tiene créditos, los cuales se utilizan para realizar una apuesta sobre determinadas paylines, los
reels giran y con el resultado del sorteo se determina la cantidad de créditos ganados.
Game Recall: este concern mantiene la información más relevante de los últimos juegos, que en caso de ser solicitada por personal del casino o un ente regulador la misma este disponible.
Meters: mantiene actualizada la colección de contadores que son obligatorios
y relevantes en una SM. Por ejemplo, cantidad de dinero ingresado, cantidad de juegos realizados, entre otros.
Program resumption: este concern es el que implementa el soporte para que ante un corte de energía en laSM, el juego pueda ser restaurado al estado previo al corte con todos los datos correspondientes.
22CAPÍTULO3. CONCERNSENELDOMINIODELASSLOTS MACHINES
siunapuertaesabierta,oencenderlatowerlampparallamarapersonaldel casinosisetrabarauna moneda.
Comunicationprotocols: losprotocolossoncapacesderecibircomandos, quepuedenrequerirdatos,porejemplo,elvalordeunmeter.Estoscomandos tambiénpuedecambiarelestadodelaSM,porejemploelcomandosettime. Además,esopcionalreportarestadosy errorsconditionsdelaSMsegúnla regulaciónutilizada.
Demo: elconcerndedemoeselquepermiteforzardeterminadospremios. Todaslasaccionesrealizadaseneste modo,nodebencontabilizarsenideben serreportadasenlosprotocolosdecomunicación.
Dadalacomplejidaddeldominio,sepuedenencontrardiferentes manerasde descomponerlosconcerns,laeleccióndescriptafuerealizadade maneratalque reejelasinteraccionesquesonobjetodeestudiodeestetrabajo.
Cadaunodeestosconcernstieneunconjuntoderequerimientosquerepresenta unacaracterísticaopropiedaddelsistema.Algunosdeestosconcernsserán mode-ladoscomoaspectosyotroscomocomponentes,eldetalledeldiseñoobtenidose presentaráenelpróximocapítulo.
3
.3
. Re
lac
ionesentreconcerns
Lasrelacionesquesedanentrelosconcernsdeldominio,se muestran mediante unanotaciónad-hoc
Demo
Game Game
Recall Meters PCP
6 7
3
3 3
3 3
1 2 4 5
G2S
Prog. Resumptiom
Errors conditions
enla gura3.5.
Figura3.5:Relacionescrosscuttingentrelosconcernsdeldominio.
3.3. RELACIONES ENTRE CONCERNS 23
crosscuts, representadas por flechas, son las que se detallan a continuación:
1. Demo aGame: Elconcern deDemo necesita alterar el comportamiento normal del juego para permitir la salida de premios.
2. Game Recall a Game: Game Recall requiere guardar datos a medida que el
concern deGame va cambiando de estados.
3. Program resumption aGame Recall,Game,Meters,PCP yG2S: elconcern de
Program resumption controla la persistencia de datos y es por esto que tiene una relación con los concerns donde varían datos que deben ser restaurados.
4. Meters a Game: parte de los datos que contienen los Meters pertenecen al
concern deGame y los mismos deben estar actualizados en todo momento.
5. PCP a Game: Varios eventos generados en elconcern de Game requieren ser reportados mediante los protocolos.
6. G2S a Game: Al igual que PCP, este protocolo debe reportar cambios en el estado del juego.
7. Error Conditions a Game: dado que varias de las condiciones que pueden ge-nerar las Errors Conditions están dentro del comportamiento del concern de
Cap
ítu
lo4
Imp
lementac
iónOr
ientadaa
AspectosdeunaSM
Unodelosobjetivosdeestetrabajoconsisteenrealizarunaimplementación queinvolucrevarioscrosscuttingconcernsfuncionalesdeldominioparaestudiarlas interaccionesentrelos mismosyproponer mecanismosparasuresolución.
Enelpresentecapítulosedescribendetallesdelaimplementacióndelsoftwarede unaSMrealizadautilizandoAspectJ.
Losbaseycrosscuttingconcernssonlosqueseidenticaronenelcapítuloanterior. Acontinuaciónsepresentandetallesdediseño,sobrelosobjetosyaspectosque componencadaconcern.Enelapéndice Asepuedeencontrareldetallecompleto del modelodeobjetosdesarrollado.
Notaciónutilizada Losgrácospresentadosenestecapítuloestánrealizadosen unavariacióndeldiagramadeclasesUML.La gura4.1muestraunejemplo deestanotación,donde:
Unconcernesrepresentadoporunpackage.
Unaaspectoesrepresentadoporunrectánguloquecontieneelestereotipo «aspect»yelnombredel mismoensuinterior.
Unarelaciónde crosscutsesrepresentadaporunalíneapunteadadesdeel aspectohaciaelelementoafectado.
26 CAPÍTULO4.IMPLEMENTACIÓNAODEUNASM
Figura4.1:Ejemplodelanotaciónutilizada.
4
.1
. Game
Game esunconcernfuncionalquenoatraviesaotrosconcernsdeldominio.La gura4.2muestralasclasesdeeste concern,elcualimplementalafuncionalidad principaldeunjuegodeapuestas.
Las clases principales de este concern son: Game, ReelsManager y BetManager. UnainstanciadelaclaseGametienecréditosqueseutilizanpara realizarapuestas.Las mismassonadministradasporunobjetoBetManager,que puedecalcularelcostodecadajugada.Esteobjetoademás,tienelacapacidadde determinarloscréditosganadosencadajuego.Esteconcerntambiéncuentaconun objetoReelsManager,queimplementaporejemplo,elsorteodelossímbolosde cadareelparaunajugada.
[image:34.595.105.494.505.722.2]4.2. HAL 27
Elsiguientefragmentodecódigomuestracomointeractúanestosobjetosene lmé-todoplay()delaclaseGame.PrevioainvocarelmétodoReelsManager.spin() paragirarlosreels,sedelegaenelobjetoBetManagerelcálculodelcostodela jugada(línea5).Luegoconlossímbolossorteados,obtenidosdelReelsManager, el manejadordeapuestascontrolasihubolíneasganadoras.
Código4.1:Método play()delaclaseGame.
1public class Game { 2 ...
3 public boolean play() {
4 ...
5 if ( subtractCredits( _betManager.playCost() ) )
6 {
7 _reelsManager.spin();
8 won = _betManager.checkWon(_reelsManager.
getCurrentSymbols() );
9 ...
10 }
11 ...
12 } 13}
4
.2
. HAL
Enesteconcernseencuentranrepresentadoslosdispositivosfísicosconlosque cuentaunaSM.Eneldiseñoobtenidonoexistenaspectosdentrodeesteconcerny lainteracciónconlosdispositivosseproduceatravésdeunainstanciadelaclase HAL,cuyainterfazsepuedeverenla gura4.3.Eldetalledelrestodelasclasesde esteconcernsepresentaenelApéndiceA.
EnlaimplementacióndesarrolladaunobjetodelaclaseHALpermitelainteracción conpulsadores,detectarlaaperturadelapuertadelgabinete,cambiarelestadodel switchdedemo,guardaryobtenerdatosdeuna memorianovolátil.
Ademásdelaclase HALylasclasesquerepresentanlosdipositivos ,estecon-cerndenelainterfaz IHALSignalHandler.Instancias declasesqueimp le-mentenestainterfaz,se puedenregistrarcomo listenersutilizandoel método registerHandler(IHALSignalHandler aHandler).
28 CAPÍTULO4.IMPLEMENTACIÓNAODEUNASM
Figura4.3:API delaclaseHAL.
Código4.2:Método dispatchSignal()delaclaseHAL.
1public class HAL { 2 ...
3 public void dispatchSignal(HALSignal signal) {
4 for(IHALSignalHandler handler : _signalsHandlers){ 5 handler.process( signal );
6 }
7 } 8}
4
.3
. Meters
Elrequerimientoprincipaldeesteconcernesmanteneractualizadaunacolección decontadores.Paraestoseutilizaunajerarquíadeaspectos,realizadaenprodeuna mejor modularizacióndelos advices.
El aspecto de base MetersAspect tiene una referencia a un objeto MetersManager.Esteobjetocuentaconunacolecciónparaalmacenarlosva lo-resdelosmeters.
4.3. METERS 29
Código4.3:Método setMeter()delaspectoMetersAspect.
1public abstract aspect MetersAspect { 2 ...
3 protected void setMeter(Meter meter, int value) { 4 metersManager().setMeter(meter, value);
5 } 6}
Enestasubclasicación,cadasubaspectodenepointcutsqueatraviesandistintas clases.Lospuntosdeinterésdedichosadvices,sonlosmétodosindicadosenla gura 4.4,endondeelvalordeunmeter esleídoo modicado.
Figura4.4:ClasesyaspectosdelconcerndeMeters.
Elfragmentodecódigo4.4,muestracomosecapturalamodicacióndelaslíneas seleccionadasduranteunaapuesta medianteunafteradvice. Utilizandoel método heredadosetMeter(),seactualizaelvalorasociadoal meterLINES,enelobjeto MetersManager.
Código4.4:Afteradvice sobreelpointcutBetManager.setLines().
1public aspect MBetManager extends MetersAspect { 2 ...
3 after(int lines) : args (lines) &&
4 BetManager.setLines(int){ 5 setMeter(Meter.LINES, lines);
[image:37.595.163.461.294.511.2]30 CAPÍTULO4.IMPLEMENTACIÓNAODEUNASM
4
.4
. Program Resumpt
ion
LaresponsabilidaddelconcerndeProgramResumptionconsisteenpersistirc ier-tosdatosdelaSM,porejemplolosvaloresdelosmeters.Paraestoseutilizauna jerarquíadeaspectos,como muestrala gura4.5.Estosaspectostambiénrestauran elestadodelaSMduranteeliniciodelsistema.
Figura4.5:ClasesyaspectosdelconcerndeProgramResumption.
Lossubaspectosutilizan métodosqueelaspectoProgramResumptionAspect provee,paraobteneryguardardatos.Laimplementacióndeestos métodos,usalos serviciosprovistosporlaHAL,paraalmacenaryrecuperardatosdela memoriano volátil.
Ellistado4.5muestrapartedelcódigodelaspecto Meters.Enlaslíneas3a5 sedeneelpointcutquecapturalaactualizacióndeunmeter.Luegoenlaslíneas 7a11,sedeneelafteradvice,queenlalínea10persisteelcambioutilizandoel métodoheredado.
Código4.5:Afteradvice utilizadoparapersistirlosmeters.
1public aspect PRMeters extends ProgramResumption { 2 ...
3 pointcut setMeter(Meter meter, int value) : 4 args(meter, value) &&
5 execution(void MetersManager.setMeter(Meter, int)); 6
7 after(Meter meter, int value) returning() : 8 args(meter, value) && setMeter(Meter, int) 9 {
10 save(meter.toString(), String.valueOf(value)); 11 }
4.5. GAMERECALL 31
4
.5
. Game Reca
l
l
Laresponsabilidaddeesteconcernconsisteenguardarlosdatosrelevantesde, al menos,losúltimos10juegos,talcomoindicanlasregulaciones.Los módulos principales,comosepuedeverenla gura4.6,son:unaspectoqueafectalaclase GameyunobjetoGameRecallManagerque mantieneunacoleccióndeobjetos GameRecall.
Figura4.6:Claseyaspectosdelconcern GameRecall.
EljoinpointdeinterésdelaspectoGameRecallAspect,esel métodoplayen elobjetoGame.Comosepuedeverenelfragmentodecódigo4.6,antesdelsorteo quedeterminalanuevaposicióndelosreels,eladviceasociadoguardapartedel estadodelaSMenunobjetoGameRecall.
Código4.6:ImplementacióndelaspectoGameRecallAspect.
1before() : execution(boolean Game.play(..)) 2{
3 concerns.game.Game game = concerns.game.Game.get(); 4 _gc = new GameRecall();
5 _gc.setBet(game.getBetManager().getBetPerLine()); 6 _gc.setLines(game.getBetManager().getPaylines()); 7 _gc.setPlayCost(game.getBetManager().playCost()); 8 _gc.setCredits(game.getCredits());
9 _gc.setDate(game.getTime()); 10}
De manerasimilaral nalizarlajugada, medianteunafteradvice,secompletan losdatosenelobjetoGameRecall.Esteadviceguardalasposicionesdelosreels yloscréditosganados.LuegoelobjetoGameRecallesagregadoalacoleccióndel objetoGameRecallManager.
4
.6
. Errors Cond
it
ions
32 CAPÍTULO4.IMPLEMENTACIÓNAODEUNASM
open,sedebebloquearlaUI deljuegoylosdispositivosdeentrada,ademásde encenderlatowerlampparaindicarqueserequierelapresenciadeunasistente.
La gura4.7muestralasclasesinvolucradasenesteconcern.Unaerrorcondition cuentaconunconjuntodeacciones,lascualesdebenaplicarsecuandolam ismaocu-rre.Asuvez,dichasaccionesdebendeshacersecuandolaerrorconditiondesaparece.
Figura4.7:ClasesdelconcerndeErrorCondition.
Esteconcernademás,cuentaconunaspectocuyaimplementaciónse muestra enelfragmentodecódigo4.7. Dichoaspecto,utilizaunbeforeadvicequeestá asociadoaliniciodelsoftwaredelaSM.Enel mismo,unainstanciadelaclase HALSignalHandler,seagregacomolistenerenlaHAL.
Código4.7:Registrodeun listenerenlaHAL.
1public aspect ErrorConditionsAspect { 2 before() : execution(* Game.init()) {
3 HAL.get().addHandler(new HALSignalHandler()); 4 }
5}
4.7. G2SYPCP 33
Código4.8:Creacióndela errorconditionDoorOpen.
1public class HALSignalHandler implements IHALSignalHandler 2{
3 @Override
4 public void process(HALSignal signal) { 5 switch (signal) {
6 case MAIN_DOOR_OPEN:
7 new DoorOpen().applyActions(); 8 break;
9 case MAIN_DOOR_CLOSE:
10 ...
11 } 12}
4
.7
. G2SyPCP
Estosconcernsencapsulanelcomportamientodelosprotocolosdecomunicación, ademásdesuinteracciónconlaSM.UnprotocolopermitequelaSMreportein forma-ciónyrecibacomandos.Laocurrenciadedeterminadoseventos,debeserreportada alossistemasdemonitoreo.Unejemplodeesto,eselcomienzodeunjuego,indicado poreleventoBeginGame.Porotrolado,unaSMpuederecibircomandos,loscuales puedenconsultarunvalorcomoeselcasodelcomandoGetMeter oalterarelestado delaSM,comolohaceelcomandoSetTime.Enla gura4.8sepuedenverlasclases involucradasenesteconcern.
34 CAPÍTULO4.IMPLEMENTACIÓNAODEUNASM
Cadacomandoque puedeserrecibido por una SM implementalainterfaz ProtocolCmd.Lamismadeneelmétodoexecute(),elcualcontienee lcompor-tamientoasociadoalcomando.UnejemplodeestoeslaclaseSetTime,quetiene comoacciónasociada modicarlahoradelaSM.
Enestaimplementación,lajerarquíadecomandosescompart idaporambospro-tocolos.Estosedebeaquelosprotocolosbrindanla mismafuncionalidad .Lospro-tocolossolodierenenlaformaenquelosmensajessonserealizadosolosintervalos detiempoutilizadosparaelintercambiode mensajes.
Enesteconcernexisteunajerarquíadeaspectosqueseveenla gura4.9.Estos aspectossonutilizadosparacapturareventosocurridosenotrosconcerns,pore jem-ploeliniciodeunjuegoenlaclaseGame.
Elaspectodebase,denelospointcutsdeinterésparalosprotocolos .Cadasubaspec-toimplementalosadvicescorrespondientes,conelobjetivodenoticaralossistemas de monitoreoentiemporeal,deloscambiosenlaSM.
Figura4.9:JerarquíadeaspectosutilizadaparanoticarcambiosenlaSM.
Elfragmentodecódigo4.9,muestraelbeforeadvicedelaspectoPCPAspect,que noticadelcomienzodeunajugadaalossistemasde monitoreo.Paraestoutilizael métodoheredado send().
Código4.9:Noti cacióndelevento Begin Game enelprotocoloPCP.
1public aspect PCPAspect extends CommProtocolAspect 2{
3 ...
4 before() : Game.play() 5 {
6 send( new BeginGameEvent() ); 7 }
4.8. DEMO 35
4
.8
. Demo
Lafuncionalidadprincipaldeesteconcernespoderseleccionarquepremioganar enlapróximajugada.EstorequierealterarelcomportamientodelcoredelaSMpara permitirseleccionarelpremiootorgadoporeljuego,paraestosedebeafectarlaforma enlaquesedeterminalaposicióndelosreels.Poresto,elconcerndeDemo afecta alconcerndeGame,comosepuedeverenla gura4.10.
Figura4.10:ElaspectoDemoafectaalobjetoReelsManager.
EnelaspectoDemo,laejecucióndel métodoReelsManager.spin() escapturada porunaroundadvice,paraalterarelsorteodelasposicionesdelosreels.Cuandoel modo demoseencuentraactivo,sefuerzalasalidadeundeterminadooutcomeyen casocontrarioseprocedeconlaejecuciónnormaldel método.
Dadoqueelprocesodeweavingserealizaentiempodecompilaciónyelaspecto Demoestásiemprepresente,elmismomantieneenunavariablesuestadodeact iva-ción.EstavariablecambiadevalorsegúnelestadodelswitchdedemoenlaHAL. Paralaactualizacióndela mismasecuentacondosadvicessobrelaclaseHAL,uno sobreelpointcutdemoSwitchOn()yotrosobredemoSwitchOff().
Código4.10:Advices utilizadospara modi carelestadodel mododemo.
1public aspect Demo {
2 private boolean _on = false; 3 ...
4 after() returning(): execution(void HAL.demoSwitchOn()) 5 {
6 _on = true; 7 }
8 after() returning(): execution(void HAL.demoSwitchOff()) 9 {
10 _on = false; 11 }
[image:43.595.222.402.234.287.2]36 CAPÍTULO4.IMPLEMENTACIÓNAODEUNASM
Laimplementacióndeestafuncionalidadsepuedeverenelfragmentodecódigo 4.11.Lavariable_outcomecontienelasposicionesdelosreelsquepermitenganar elpremioseleccionadoporelusuario mediantelaUI delaSM. Medianteelaround adviceseevitalaejecucióndel métodoReelsManager.spin()ysealterala posicióndecadaunodelosreels.
Código4.11:Advice utilizadoparaforzarunoutcomeen mododemo.
1void around() : execution(void ReelsManager.spin()) 2{
3 if (_on) {
4 ArrayList<Reel> reels = Game.get().getReelsManager() 5 .getReels();
6 for (int i = 0; i < reels.size(); i++) { 7 reels.get(i).setOffset( _outcome[i] );
8 }
9 } else {
10 proceed(); 11 }
Cap
ítu
lo5
Interacc
ionesentre Aspectos
EnelcapítuloanteriorsedescribierondetallesdediseñoeimplementaciónAO delsoftwareparaunaSM.Comofuedescriptoenelcapítulo2,entrelosaspectos generaninteracciones,lascualessonelobjetodeestudiodeestetrabajo.Ejemplos delas mismassepuedenencontrarentrelosconcernsdescriptosanteriormente.
Existeunconictoentre Demo yMeters,dadoquelosmeters nodebenser alteradosen mododemo.
UnainteraccióndetipoMutex sedacuandodoso másCommunicationProtocols, queproveenla mismafuncionalidad,estánactivosal mismotiempo.
ExisteunainteraccióndetipodependencyentrelosCommunicationProtocols yel concerndeMeters,porelhechodequeestosdebenserreportadosporlosprotocolos. Porúltimounainteraccióndetipo reinforcementsedacuandounaSMtienela capacidaddedetectarErrorsConditions.EstássonutilizadasporlosCommunication Protocols paraserreportadasentiemporeal,ampliandolafuncionalidaddelos protocolos.
Enestecapítulosedetallanlos mecanismosdesarrolladosparaeltratamiento estasinteracciones.Los mismospermitenlograrelcomportamientodeseadoparael softwaredeunaSM.
Sobreel nal,sepresentaunanálisisdelos mecanismosdesarrollados.Enel mismo sediscutenventajasydesventajasenloreferidoageneralización, modularización, escalabilidadyotrosfactoresdelaIngenieríadeSoftware.
5
.1
. Interacc
ionesident
icadasene
ldom
in
iodelasSM
Apartirdelestudiodelosrequerimientosyconsiderandolataxonom íadeinterac-cionesdeSanenetal.[23],lasrelacionescrosscuttingeinteraccionesquesedanentre losconcernsdeldominio,semuestranmedianteunanotaciónad-hocenla gura5.1.
38 CAPÍTULO5.INTERACCIONESENTREASPECTOS
Estegrácocompletaelpresentadoen3.3,dondeseindicaronlasrelacionesentre losconcerns
Demo
Game Game
Recall Meters PCP
4 5 2 1 3 3 G2S
Prog. Resumptiom
Errors conditions <conflict>
<conflict>
<reinforcement>
<dependency>
<mutex>
.
Estaesunaseleccióndelasinteraccionesmásrepresentativas,hayotrasquenofueron incluídasenla guraparaevitarsobrecargarelgráco.
Figura5.1:Relacioneseinteraccionesentrelosconcernsdeldominio.
Enesta guraelbaseconcerndeGame esrepresentadoporunrectángulo,m ien-trasqueloscrosscuttingconcernssonrepresentadosporóvalos.Lasrelacionesde crosscutsseindicanconlíneassólidas,mientrasquelasinteracc ionesestánrepresen-tasporlíneaspunteadas.Lasinteraccionesdela gura5.1sonlassiguientes:
1.Conict entreDemoyProgramResumption:dadoquelosdatosalteradosen modo Demo nodebenserpersistidos.
2.Conict entreDemo yG2S:segeneraporelhechoqueambosconcernsno puedenestaractivosal mismotiempo,dadoqueunodelosrequerimientosdel modo demoesqueloseventosnoseanreportadosalosprotocolosdecomun i-cación.
3.Dependency deG2S yPCP sobreMeters:unadelascaracterísticasdelos protocolosdecomunicaciónesquedebenreportarelestadodelosmeters.Para estodependendelcorrectofuncionamientodelconcerndeMeters paraenviar datosválidos.
5.2. MUTEX 39
Enlaspróximasseccionesseexplicanlosmecanismosdesarrolladosparae ltrata-mientodelassiguientesinteracciones:
TipoMutex:entrelosCommunicationProtocol G2S yPCP.
TipoConict:entreDemoy:CommunicationProtocols,ProgramResumption, GameRecall yMeters.
TipoDependency:CommunicationProtocolssobreMeters.
TipoReinforcement:ErrorConditionaCommunicationProtocols.
5
.2
. Mutex
Estaformadeinteraccióntratalaexclusión mútuaentreaspectos,lacua lsepre-sentasidosaspectosbrindanuna mismafuncionalidad.Anteestecaso,esnecesario asegurarquesóloseutiliceunodelosaspectosalavez.Denotratarestainteracción, laejecucióndeambosaspectos,puedegeneraruncomportamientonodeseadoenel sistema.
ElsoftwaredelasSMpuedeteneractivo másdeunprotocoloalavez.Como seexplicóenlasección3.1.6,losdiferentesprotocolosimplementanfuncionalidad similar. Estasoperacionessepuedendividirendosgrupos:porunladolasque obtienendatosdelaSMyporotrolado,lasqueconguransuestado.Laejecuciónde estasúltimas,enprotocolosdiferentes,puedeserlacausadeerroreseinconsistencias. Ejemplosconcretosdeoperacionesquepuedengenerarestosproblemasson:
Settime: estecomandopermitecongurardemaneraremotalahoradeunaSMy esenviadoperiódicamenteporlossistemasde monitoreo,utilizandodiferentes protocolos.Enciertasocasiones,puededarseelcasodequelosservidoresque envíanloscomandosnoesténsincronizados.SilaSMestáutilizando másde unprotocoloalavez,puedegenerarseinformacióninconsistente.Porejemplo, ellistadodegamerecall,podríatenereventosdesordenadoseneltiempo.
Setprogressive: muchosjuegoscuentanconunacaracterísticallamada pozoacu-mulado(progressive).EstafuncionalidadpermitequeungrupodeSMs ,apor-tenunporcentajedelasapuestasaunpozocomún,pudiendocualquierade ellaspagarelpozoacumuladocomopremio mayor.
40 CAPÍTULO5.INTERACCIONESENTREASPECTOS
cadajuego.Derecibirelvalordelpozodediferentesprotocolos,laSMestaría mostrandoalusuarioinformaciónincorrecta.
Comosedetallóenelcapítuloanterior,lafuncionalidaddelosprotocolos G2S yPCPseimplementóconaspectos.Laoperacionescomosettimeysetprogressive generanunainteraccióndetipoMutex.
5.2.1. ImplementacióndelaInteracción
Comofueexplicado,ejecutaroperacionesquealterenelestadodelaSMdesde protocolosdiferentespuedeserlacausadeerroresoinconsistencias. Unaopción paratrataresteproblema,esasignarlepermisoaunprotocolopararealizareste tipodeoperaciones. Desafortunadamente,estoresultaserunasolucióndemasiado globalparalosrequerimientosdenuestrosistema,dadoqueesnecesarioquedistintos ítemsdeconguraciónsean modicadospordiferentesprotocolos.Porejemplo,siel protocoloPCP obtieneelpermisoparaejecutarelcomandosettime,estonodebe implicarquelaobtengaparaelrestodelasoperaciones.
Porlotanto,esnecesarioquelasoluciónbrindeunniveldegranularidad más no,quepermitacontrolarlaexclusión mútuaporoperación.Lasoluciónquese proponeparalograrestoconsisteen:
1.Identicareljointpoint(operación),quealserejecutadodesdeprotocolos diferentes,produceelconicto.
2.Capturardichaejecución medianteunaroundadvice.
3.Evaluarunareglaendichoadvice,paradecidirsiprocederono,conlaejecución del método.
La gura5.2muestralos módulosquecomponenel mecanismopropuesto.Se denióunajerarquíadeaspectosMutex,quetienecomocolaboradorunobjeto LockType,queimplementaelpatróndediseñoStrategy[12].Esteúltimo,especica unareglaparticular,lacualpermitedeterminarsiunobjetopuedeobtenerellock.
5.2. MUTEX 41
Figura5.2:Clasesabstractasdel mecanismo.
LaimplementacióndelaspectoabstractoMutexsepuedeverenelfragmentode código5.1.Enlalínea3sedenelavariable_lockquecontendrálainstanciade LockType.Luego,enlalínea4sedeclaraunabstractpointcutalcualseasociael aroundadvicedenidoentrelaslíneas6y10.Enelcuerpodel mismosedelegaen elobjetoLockTypeladecisiónrespectodesiprocederonoconlaejecucióndel método.
Código5.1:Códigogenéricodelaclase Mutex.
1public abstract aspect Mutex { 2
3 private LockType _lock;
4 protected abstract pointcut tryLock( Object s ); 5 ...
6 void around( Object s ) : tryLock(s) {
7 if (_lock != null && _lock.tryLock( s )) { 8 proceed( s );
9 }
10 } 11}
Porotraparte,lassubclasesdelajerarquíaLockTypedebenimplementarel métodotryLock( Object o ).Comoseejemplicamásadelante,cadasubclase implementaunlógicaparticular.Deestamaneraunainstanciadeestajerarquíaserá usadacomosevioenellistadodecódigo5.1,paradeterminarsiprocederonocon laejecucióndel método.
Parainstanciarel mecanismo,elprogramadornecesitasubclasicarelaspecto Mutexyrealizardosacciones:
1.Denirel pointcutquecapturaeljoinpointgeneradordelconictoyque necesitasercontroladoporunmutex.
2.InstanciarelLockTypedeseado.
42 CAPÍTULO5.INTERACCIONESENTREASPECTOS
5.2.2. Instanciacióndel mecanismoparaelcomandoSet Time
Pararesolveresteconicto,fueronsubclasicadoselaspectoMutexylaclase LockType,comosepuedeverenla gura5.3.Laestrategiadelockingelegidapara tratarelconictodelaoperaciónsettimesedenominóFirstLockerKeepsLock. La mismadenequesóloelprimerobjetoencapturarellockpuedevo lveraobte-nerlo.
Figura5.3:Instanciacióndel mecanismoparaelcomandoSetTime.
Elfragmentodecódigo5.2muestralaimplementacióndelmétodotryLock()de laclaseFirstLockerKeepsLock.Laprimeravezqueunobjetoadquiereellock, pasaasereldueñodelmutex (línea7).Enlaspróximascapturasdejoinpoints,se comparalaidentidaddelosobjetosparadeterminarsiquienintentaobtenerellock eseldueño.
Código5.2:Método tryLockdelaclaseFirstLockerKeepsLock.
1@Override
2public boolean tryLock( Object o ) { 3 synchronized (lock()) {
4 if (_owner != null) {
5 return (_owner.equals( o ));
6 }
7 _owner = o; 8 }
9 return true; 10}
Denidalaestrategiaautilizar,sedenióelaspecto SetTimequeheredade Mutex,enelcual:
5.2. MUTEX 43
ProtocolCommand.execute().
2.SeespecicóqueFirstLockerKeepsLockeseltipodeestrategiaelegida.
Lacodicacióndeestasaccionessepuedeverenellistadodecódigo5.3,que muestralaimplementacióndelaspecto SetTime.Enlalínea3crealainstanciade FirstLockerKeepsLocky medianteel métodosetLockType()seindicaque estaeslareglaaevaluar.
Luegoentrelaslíneas6y9seconcretizael pointcut,indicandoqueelMutex debeevaluarsesobreel métodoProtocolCommand.execute(),delasubclase Timestamp.
Código5.3:Códigodelaspecto SetTime.
1public aspect SetTime extends Mutex { 2 {
3 setLockType(new FirstLockerKeepsLock()); 4 }
5
6 protected pointcut tryLock( Object s ) :
7 call( void ProtocolCommand.execute() ) && 8 this( s ) &&
9 target( Timestamp ); 10}
La gura5.4muestraenundiagramadesecuenciaeltrabajodelmecanismopara elcasodondeelprotocoloG2S tieneellockparaelcomandoSetTime.
Figura5.4:DiagramadesecuenciaparalaejecucióndelcomandoSetTime.
44 CAPÍTULO5.INTERACCIONESENTREASPECTOS
5.2.3. Estrategiasalternativas
Otra estrategia de lock implementada se denominó ProtocolOnlineKeepsLock. Enla misma,se evalúasi el protocolo que poseeel lockestáenlínea. Estetipo delock, muestraquees posible denir estrategias máscomplejassiseconocendetallesdeldominio.
La gura5.5muestraunejemplodeusodeestaestrategia,dondeelprotocolo PCPposeeellock,peroseencuentrafueradeservicio.Cuandoserecibeuncomando desdeelprotocoloG2S,esteobtieneellockyelcomandoesejecutado.
Figura5.5:DiagramadesecuenciadelaestrategiaProtocolOnlineKeepsLock.
5
.3
. Conict
LainteraccióndetipoConictcapturalassituacionesdondeseproduceninter fe-renciassemánticasentreaspectos.Estoocurrecuandounaspectodejadefuncionar correctamenteantelapresenciadeotro,debidoaqueestosaspectosrepresentan requerimientoscontrapuestos.
Lanecesidaddeun mecanismoparatratarestetipointeracción,surgeconelobjet i-vodeasegurarquelosaspectosqueseencuentranenconicto,funcionendemanera correcta.
Comosevioenel3.1.7,eneldominiodelasSMelconcerndeDemoatraviesaa:
5.3. CONFLICT 45
Program Resumption:loscambiosen mododemonodebenserpersistidos eneste modo.
Meters: lasregulacionesexigenqueloscambiosenlosmeters eneste modo nodeben mantenersealvolveral modonormal.
Game Recall: idemaMeters.
Communication Protocols: paraesteconcern,lasregulacionesindicanque unaSMenmododemodebereportasecomofueradeserviciohacialosbackends.
Estosconcerns,entranenconictoconelconcerndeDemocuandoesteseactiva. Estogeneralanecesidaddecontarconun mecanismo,quepermitaresolverestos conictos,alterandoelcomportamientodedichosconcerns.
5.3.1. Tratamientodelainteracción
Comosedetallóen4.8,elaspectoDemoimplementalafuncionalidadprincipal delconcerndeDemo. Dichoaspectoeselresponsabledealterarlaformaenque serealizaelsorteoaleatoriodelasposicionesdelosreels,deformataldequese puedaseleccionarquepremioganarenlapróximajugada.Elaspectoutilizauna variablequerepresentaelestadodelswitchdedemo,lacualseactualizadesdedos advicesqueafectanlaclaseHAL,unosobreelpointcutdemoSwitchOn()yotro sobredemoSwitchOff().
DadoqueAspectJ esunlenguajedondeelprocesodeweavingserealizaent iem-podecompilación,noesposibledesvincularunaspectoenruntimecomoenun lenguajedinámico.Porejemplo,noesposibleevitarelconictoconelconcernde Meters desinstalandoelaspectoMetersAspect.
Enlaimplementacióndel softwaredelaSM,sedecidióqueelaspectoDemo ademasdeimplementarlafuncionalidadprincipaldelconcern,implementelos me-canismosparatratarlasinteraccionesqueproducenconicto.Estassoncomofue descripto,conlosconcerns:Meters,Program Resumption,Communicat ionProto-colsyGameRecall.
46 CAPÍTULO5.INTERACCIONESENTREASPECTOS
5.3.2. Tratamiento delainteracciónentrelosconcerns: Demoy Meters
Lasregulacionesindicanquelosvaloresdelosmeters quesemodiquenenmodo demonodebenversereejadoscomocambiosalsalirdeeste modo.Encambio,no especicanqueacciónrealizarconlosvaloresactualesdelosMeters cuandosepasa a mododemo.
Enlaimplementaciónrealizada,setomoladecisióndereiniciarlosvaloresalactivarse el mododemoyrestaurarlos mismosalvolvera modonormal.
Comosedetallóen 4.3,laimplementacióndelconcerndeMeters utilizauna instanciadelaclaseMeterManagerparaguardarlosvaloresdelosmeters.Esta instanciaesutilizadaparaalmacenarlosvaloresdelosmetersporlossubaspectosque afectandiferentespartesdelsistema.Laresolucióndelconicto,sebasaencambiar lainstanciadeMetersManagerqueestosaspectosutilizan,alestarlaSMenmodo demo.
Como muestrala gura5.6,elaspectoDemoafectael métodogetManager() delaspectoMetersAspect.Siel mododemoseencuentraactivo,seretornauna instanciadeMetersManagerquees mantenidaporelaspectoDemo.
Figura5.6:ElaspectoDemoafectaeljoinpointMetersAspect.getManager().
5.3. CONFLICT 47
Código5.4:Aroundadvice delaspectoDemoutilizadoparatratarelconictoconel concerndeMeters .
1MetersManager around() :
2 execution( MetersManager MetersAspect.manager() 3{
4 if (_demoIsOn) {
5 return _fakeMetersManager; 6 }else{
7 return proceed(); 8 }
9}
Estaformaderesolverelconicto,implicaqueelaspecto Democonozcaque reemplazandolainstanciadelobjetoMetersManagerdelaspectoMetersAspect, anulaelconcerndeMeters.
LamismaestrategiapuedeutilizarseparaelconictoconelconcerndeGameRecall, dondeelaspectoGameRecallAspecttienecomocolaboradorunainstanciadela claseGameRecallManager.
5.3.3. Tratamiento delainteracciónentrelosconcerns: Demoy Program Resumption
LaresponsabilidaddelconcerndeProgramResumptionconsisteenpersistirc ier-tosdatosdelaSM,porejemplolosvaloresdelosmeters.Lasregulacionesseñalanque losvaloresdeconguraciónoestadosquevaríenenmododemo,debenserrevertidos alsalirdeeste modo.
Comosevioenlasección4.4,laimplementaciónde lconcerndeProgramResum-ptionsecomponedeunajerarquíadeaspectos.Lossubaspectosutilizan métodos queelaspectoProgramResumptionAspectprovee,paraobteneryguardardatos, utilizandolosserviciosprovistosporlaHAL.
Los métodosdelaspectoProgramResumptionAspectretornanunvalordetipo boolean,estoindicasilaoperaciónpudoserrealizadaenlaHAL.El mecanismopara resolverelconictoen mododemo,consisteenevitarlaejecucióndelos métodosde lasuperclase,anulandolafuncionalidaddelconcerndeProgramResumption.