Upload
internet
View
109
Download
0
Tags:
Embed Size (px)
Citation preview
JMario
Equipe Augusto Cesar Neves Lima Filho
JMario• Jogo usando Java2D• Fiel ao clássico Mario para snes
Feature Model
Feature Model
public void init(){...imagemInterfacePontuacao = resourceManager.loadImage("interfacePontuacao.png");
imagemInterfaceTotal = resourceManager.loadImage( "interfaceTotal.png");
imagemInterfacePausa = resourceManager.loadImage( "interfacePausa.png" );
}
Feature - Language
Feature - Language
Feature - Languageprivileged abstract aspect LanguageSupport { ...
private Image GameManager.loadImageLang (String name, String language) {...
}pointcut resourceInit(GameManager gm) : execution(* *.init()) && ...protected abstract String getLanguageCode();
after(GameManager gm) returning : resourceInit(gm){gm.imagemInterfacePontuacao = gm.loadImageLang("interfacePontuacao.png",
getLanguageCode ());...
}} ...aspect EnglishSupport extends LanguageSupport{
protected String getLanguage(){return "US";
}
Feature Model
Feature Model
Feature - Language
LanguageStrategy
PortugueseLanguageStrategy EnglishLanguageStrategy
LanguageFactory GameManager
Feature – Changeable Language
Feature – Changeable Language
privileged aspect ChangeLanguageAspect ...
private LanguageStrategy GameManager.languageStrategy;private LanguageFactory GameManager.languageFactory = new
LanguageFactory();before(GameManager gm) : checkInput(gm){
if (gm.language.isPressed()) {...
}}
...
private void GameManager.changeLanguage() {languageStrategy = languageFactory.createLanguageStrategy();
imagemInterfacePontuacao = languageStratrategy.loadImageLang("interfacePontuacao.png");
...}
Feature Model
public void loadCreatureSprites() { ...
Image[][] imagensBat = new Image[4][];Image[][] imagensTurtle = new Image[4][];Image[][] imagensMummyTurtle = new Image[4][];Image[][] imagensBlueDragon = new Image[4][];
...imagensFlyGoomba[1] = new Image[imagensFlyGoomba[0].length];imagensFlyGoomba[2] = new Image[imagensFlyGoomba[0].length];imagensFlyGoomba[3] = new Image[imagensFlyGoomba[0].length];
imagensGoomba[1] = new Image[imagensGoomba[0].length];imagensGoomba[2] = new Image[imagensGoomba[0].length];imagensGoomba[3] = new Image[imagensGoomba[0].length];
imagensGreenKoopa[1] = new Image[imagensGreenKoopa[0].length];imagensGreenKoopa[2] = new Image[imagensGreenKoopa[0].length];imagensGreenKoopa[3] = new Image[imagensGreenKoopa[0].length];
...
Feature Model
Gráfico de Clones
Gráfico de Clones
Feature Model
Feature Model
Feature Model
Técnica : Code Generation and Transformation (CGT)
Feature – Static Enemy
Feature – Static Enemypublic void loadCreatureSprites() {
#foreach($enemy in $enemys)Image[][] imagens$enemy.Name = new Image[4][];#end
...#foreach($enemy in $enemys)imagens$enemy.Name[ 1 ] = new Image[ imagens$enemy.
Name[ 0 ].length ];imagens$enemy.Name[ 2 ] = new Image[ imagens$enemy.
Name[ 0 ].length ];imagens$enemy.Name[ 3 ] = new Image[ imagens$enemy.
Name[ 0 ].length ];#end
...
Feature – Static Enemy<?xml version="1.0"?> <Enemys>
<Enemy NAME="Goomba" CODIGO="1" SPEED="0.1" FLYER="false">
<Frame NAME="goomba1.png"/> <Frame NAME="goomba2.png"/>
</Enemy>
<Enemy NAME="Fly Goomba" CODIGO="2" SPEED="0.1" FLYER="false">
<Frame NAME="flyGoomba1.png"/> <Frame NAME="flyGoomba2.png"/>
</Enemy>...
Gráfico de Clones
Gráfico de Clones
Gráfico de Clones
Redução : 54%
Feature Model
Técnica : Adaptive Object Model (AOM)
Feature: User-Defined enemys
Feature: User-Defined enemys
public void loadCreatureSprites() { XMLEnemyHandler handler = new XMLEnemyHandler();
...List<EnemyDescription> enemys = handler.getEnemys();
for (int i = 0; i < enemys.size(); i++) {EnemyDescription enemyDescription = enemys.get(i);
...EnemyType enemyType = new EnemyType(enemyDescription.getCodigo(),
enemyDescription.getName(), enemyDescription.getSpeed(),enemyDescription.isFlyer());
...
Feature: User-Defined enemys
//#ifdef aomimport variations.EnemyType;//#endif
//#ifdef aompublic class Creature extends Sprite {//#else//@public abstract class Creature extends Sprite {//#endif
Feature: User-Defined enemys
Dificuldades
• Uso de técnicas não definidas diretamente em decision models
• Flip-Pure-Variants
Atividades – Tempo Atividade Técnica ou Ferramenta Tempo
Identificação de features Manualmente/CCFinder 2 horas
Desenho do modelo de features
Captain Feature 1 hora
Configuração do ambiente e estudo de ferramentas
Flip/Pure-Variants 3 horas
Extração da feature de Linguagem
Flip 2 horas
Inclusão do ponto de variação para feature de inimigos
Manualmente 1 hora
Extração da feature de StaticEnemys
Flip/Manualmente 3 horas
Extração da feature de User-Defined enemys
Manualmente 6 horas
Montagem do configuration knowledge
Pure-Variants 2 horas
Conclusões
• Uso de diversas técnicas em uma mesma variação
• Uso extensivo de AO