• Nenhum resultado encontrado

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.