• No se han encontrado resultados

Interacciones entre aspectos: estudio sobre un caso industrial

N/A
N/A
Protected

Academic year: 2017

Share "Interacciones entre aspectos: estudio sobre un caso industrial"

Copied!
85
0
0

Texto completo

(1)

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 ad­hoc 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.

(2)
(3)

Í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

(4)

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

(5)

Í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

(6)

vi ÍNDICEGENERAL

A.4. PaqueteGameRecall... 67

A.5. PaqueteErrors ... 68

A.6. PaqueteProtocols ... 69

B.Softwaredesarrollado 71

B.1. ProyectoEgm ... 71

(7)

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

(8)
(9)

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.

(10)

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.

(11)

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.

(12)
(13)

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

(14)

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.

(15)

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.

(16)

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

(17)

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.

(18)

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

(19)

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;

(20)

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

(21)

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.

(22)

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.

(23)

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.

(24)

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]
(25)

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

(26)

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]
(27)

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

(28)

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.

(29)

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.

(30)

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.

(31)

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

(32)
(33)

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.

(34)

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]
(35)

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).

(36)

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.

(37)

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]
(38)

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 }

(39)

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

(40)

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}

(41)

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.

(42)

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 }

(43)

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]
(44)

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 }

(45)

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.

(46)

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.

(47)

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.

(48)

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.

(49)

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.

(50)

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:

(51)

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.

(52)

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:

(53)

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.

(54)

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().

(55)

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.

Figure

Figura 3.2: SMs modernas donde la interacción se realiza mediante una pantallatáctil.
Figura3.3:GabinetedeunaSlot Machine.
Figura3.4:Eventosgeneradosagrupadospordispositivo.
Figura4.1:Ejemplodelanotaciónutilizada.
+6

Referencias

Documento similar

37 Terminan las imágenes de Blue Caravan mientras Salvia en la sede de Intramurs comienza a hablar, aparecen imágenes de gente, habla Elena, continúan con imágenes, habla

(Guillén, 1999), una identidad esencialmente ecléctica e integradora que: a) prioriza el estudio del discurso didáctico y de las interacciones en el aula en sus

si aún dudamos de que la edad, más que un factor, es parte de la promesa de bienestar, baste pensar en la edad de los modelos publicitarios, que, como nos recuerda Dyer

Sólo, como veremos en otro apartado, cuando el sujeto no puede optar (y la capa- cidad para ello, como la inocencia en el ámbito jurídico o el valor en el ejército, “se le

3 Para quienes han adoptado o construido un sentido propio de la expresión Estado de Derecho, este tipo de ejercicios puede parecer inadecuado, superfluo o, inclusive, ser visto

ANALISIS PETROLOGICO DE ROCAS IGNEAS Y METAMORFICAS L-L-L. ESTRUCTURA:. EDAD:

8 GND Power Ground GPIO, dry contact signal and 3.3V switch quantity signal detecting / 3.3V switching signal output /ADC, analog acquisition. 9 RX2 RS232 RX 2 RS422 T-/TTL

Els pares pensen que és una bona idea obrir el centre a la comunitat, encara que ja estiga mes o menys obert, però a ells els agradaria involucrar-se més en l’educació dels