3.1 APRESENTAÇÃO DO SOFTWARE DESENVOLVIDO
3.2.5 Modelo de Componentes
O modelo de componentes é responsável pela composição estática das
Rules do sistema. Para isto, é usado o NOP Profile (WIECHETECK, 2011).
Basicamente, existem três passos a serem seguidos para o cumprimento desta etapa: 1) definição de nome para as Rules, 2) definição das Premisses e Instigations das Rules e, 3) união das Rules aos FBEs. Esses passos serão aplicados no decorrer da seção.
Passo 1) definição das Rules
O primeiro passo consiste na atribuição de nomes para as Rules que foram identificadas anteriormente, conforme apresenta a Tabela 10.
Tabela 10 – Rules identificadas para o software
Rule Nome Rule Nome
1 rlScenarioMoving 14 rlGameUnpause 2 rlProgressUpdating 15 rlGameStop 3 rlAirplaneMoving 16 rlAllegroClear 4 rlAirplaneMovingLeft 17 rlAllegroBlit 5 rlAirplaneMovingRight 18 rlAllegroKeyboard 6 rlAirplaneShoots 19 rlAllegroDrawAirplane 7 rlHelicopterShoots 20 rlAllegroDrawTheScenario 8 rlAllegroDrawHelicopter 21 rlAllegroDrawBullet 9 rlAirplaneDecreaseLifePoints 22 rlAllegroHelicopterCollision 10 rlHelicopterDecreaseLifePoints 23 rlAllegroAirplaneCollision 11 rlHelicopterDies 24 rlAllegroMoveTheBulletUp 12 rlPlayerGameOver 25 rlHelicopterMoving 13 rlGamePause 26 rlAllegroMoveTheBulletDown
Para cada uma dessas Rules, é necessário adicionar um componente <<NOP_Rule>>, um <<NOP_Action>> e um <<NOP_Condition>>. O relacionamento entre os componentes é representado pelos estereótipos <<RuleNotifiesAction>> e <<ConditionNotifiesRule>>, definido no pacote Core-Assembly para o Perfil PON, o qual expressa a semântica e as restrições entre estes componentes. A Figura 20 apresenta um exemplo para representação da Rule rlAirplaneMovingRight.
Quando identificadas, as Premisses e Instigations podem ser representadas por meio de um modelo de componentes de acordo com o nível de abstração que se queira representar. Em um alto nível de abstração, as Premisses e Instigations são representadas como interfaces de componentes, em um baixo nível de abstração, a representação pode ser feita apenas por componentes.
Passo 2) Definição das Premisses e Instigations das Rules
As Premisses e Instigations são identificadas por meio da análise dos
Attributes e Methods dos FBEs do modelo de classes e as Rules são identificadas
por meio dos requisitos e casos de uso. A Tabela 11 exibe as Premisses e
Instigations definidas para cada Rule identificada.
Tabela 11 – Rules, Premisses e Instigations identificados
Rules Premisses Instigations
Rule 1
rlScenarioMoving
atGameStatus == PLAYING && atLifePoints (Airplane) ˃ 0 Scenario -> mtMovement Rule 2 rlProgressUpdating atGameStatus == PLAYING || atGameStatus == PAUSED Stage -> mtProgressUpdating Rule 3 rlAirplaneStayInPosition
atGameStatus == PLAYING && atLifePoints (Airplane) > 0 && atAirplaneRightButton == false && atAirplaneLeftButton == false
Airplane -> mtStayInPosition
Rule 4
rlAirplaneMovingLeft
atGameStatus == PLAYING && atLifePoints (Airplane) > 0 && atPosX1 (Airplane) > 0 && atAirplaneLeftButton == true Airplane -> mtMoveLeft Rule 5 rlAirplaneMovingRight
atGameStatus == PLAYING && atLifePoints (Airplane) > 0 && atPosX2 (Airplane) < 800 && atAirplaneRightButton == true
Airplane -> mtMoveRight
Rule 6
rlAirplaneShoots
atGameStatus == PLAYING && atLifePoints (Airplane ) > 0 atAirplaneFireButton == true atBullet > 0 Airplane -> mtAirplaneAddNewBullet Rule 7 rlHelicopterShoots
atGameStatus == PLAYING && atLifePoints (Helicopter) > 0 && atTimeToShoot > 2 (segundos)
Helicopter ->
Rules, Premisses e Instigations identificados (continuação)
Rule 8
rlAllegroDrawHelicopter
(atGameStatus == PLAYING || atGameStatus == PAUSED) && atLifePoints (Helicopter) > 0
Character -> mtDraw
Rule 9
rlAirplaneDecreaseLifePoints
atGameStatus == PLAYING && atLifePoints (Airplane) > 0 && atCollision (Airplane) == true
Character ->
mtDecreaseLifePoints
Rule 10
rlHelicopterDecreaseLifePoints
atGameStatus == PLAYING && atLifePoints (Helicopter) > 0 && atCollision (Helicopter) == true
Character ->
mtDecreaseLifePoints
Rule 11
rlHelicopterDies
atGameStatus == PLAYING && atLifePoints (Helicopter) <= 0
Character -> mtDeath
Rule 12
rlPlayerGameOver
atGameStatus== PLAYING && atLifePoints (Airplane)<=0
Character -> mtDeath
Rule 13
rlGamePause
atGameStatus == PLAYING && atLifePoints (Airplane) > 0 && atPauseButton == true
Stage -> mtGamePause
Rule 14
rlGameUnpause
atGameStatus == PAUSE && atUnpauseButton == true Stage -> mtGameUnpause Rule 15 rlGameStop (atGameStatus == PLAYING || atStopButton == PAUSED) && atStopButton ==true Stage -> mtGameStop Rule 16 rlAllegroClear atGameStatus == PLAYING || atGameStatus == PAUSED Stage -> mtAllegroClear Rule 17 rlAllegroBlit atGameStatus == PLAYING || atGameStatus == PAUSED Stage -> mtAllegroBlit Rule 18 rlAllegroKeyboard atGameStatus == PLAYING || atGameStatus == PAUSED Stage-> mtKeyboardInterruption Rule 19 rlAllegroDrawAirplane (atGameStatus == PLAYING || atGameStatus == PAUSED) && atLifePoints (Airplane) > 0 Airplane -> mtDraw Rule 20 rlAllegroDrawTheScenario atGameStatus == PAUSED || atGameStatus == PLAYING Scenario -> mtDraw Rule 21 rlAllegroDrawBullet atGameStatus == PLAYING || atGameStatus == PAUSED Bullet -> mtDraw Rule 22 rlAllegroHelicopterCollision
atGameStatus == PLAYING && atLifePoints (Helicopter) > 0 && atBulletPosX >= atPosX1 && atBulletPosX <= atPosX2 && atBulletPosY >= atPosY1 && atBulletPosY <= atPosY2
Helicopter -> mtCollision
Rules, Premisses e Instigations identificados (continuação)
Rule 23
rlAllegroAirplaneCollision
atGameStatus == PLAYING && atLifePoints (Airplane) > 0 && atBulletPosX >= atPosX1 && atBulletPosX <= atPosX2 && atBulletPosY >= atPosY1 && atBulletPosY <= atPosY2
Airplane->mtCollision
Rule 24
rlAllegroMoveTheBulletUp
atGameStatus == PLAYING
atLifePoints (Airplane) > 0 Bullet->mtBulletMovingUp
Rule 25
rlHelicopterMoving
atGameStatus == PLAYING
atLifePoints (Helicopter) > 0 Helicopter->mtMoviment
Rule 26 rlAllegroMoveTheBulletDown atGameStatus == PLAYING atLifePoints (Airplane) > 0 Bullet-> mtBulletMovingDown
Outra atividade realizada neste passo é a definição do operador lógico para a Condition dos elementos. A Figura 21 apresenta o operador lógico “CONJUNCTION” na Condition da Rule rlAirplaneMovingRight. Uma Rule pode suportar mais de um operador em SubConditions como, por exemplo, o operador “DISJUNCTION” da Rule rlAllegroDrawAirplane, que é apresentado na Figura 22.
Figura 22 – Diagrama de componentes (passo 2): Operadores lógicos
Passo 3) Unir as Rules aos FBEs
Por fim, no último passo para a criação dos modelos de componente são apresentadas as conexões entre os FBEs e as Rules. A Figura 23 mostra um exemplo com a Rule rlAirplaneMovingRight, que inclui seus relacionamentos com os
Figura 23 – Diagrama de componentes (passo 3): Rule, interfaces e componentes externos
Como pode ser visto na Figura 23, os atributos do FBE (e.g. atGameStatus, atLifePoints, atRightButton e atPosX2) são representados por interfaces fornecidas, enquanto os métodos diretos ou modificados são representados por atributos de interfaces utilizadas (e.g. mtMoveRight do Airplane), pelo fato deles serem fornecidos para outro componente.
Todos os outros diagramas de componentes estão disponíveis no APÊNDICE C.