SlideShare uma empresa Scribd logo
1 de 70
Baixar para ler offline
Gera¸c˜ao de c´odigo dirigida por modelos para
aplicativos Android e Windows Phone
Abilio Gambim Parada
Orientadora: Profa. Dra. Lisane Brisolara de Brisolara
Co-orientadora: MSc. Milena Rota Sena Marques
1 / 66
Sum´ario
1 Introdu¸c˜ao
Motiva¸c˜ao
Objetivos
2 Fundamenta¸c˜ao
Android
Windows Phone
UML
3 Abordagem proposta
4 Estudos de Caso
Android
Windows Phone
5 Conclus˜oes
2 / 66
Introdu¸c˜ao
Crescente avan¸co tecnol´ogico!
Surgimento de v´arios dispositivos
Al´em da comunica¸c˜ao m´ovel
Alternativa `a computa¸c˜ao pessoal
Proximidade maior com o usu´ario
3 / 66
Introdu¸c˜ao: Principais plataformas m´oveis
Android e WP → plataforma m´ovel adotada por v´arios
fabricantes de dispositivos
Android → representa 80% dos dispositivos vendidos
WP → crescimento de 156% no ´ultimo tri-semestre
iOS → solu¸c˜ao unificada entre sistemas e dispositivos
4 / 66
Introdu¸c˜ao: Aplicativos m´oveis
Crescente demanda no mercado por novos aplicativos
Aplicativos com um curto per´ıodo de coloca¸c˜ao no mercado
5 / 66
Introdu¸c˜ao: Desenvolvimento m´ovel
O desenvolvimento desses aplicativos difere do tradicional:
Programa¸c˜ao orientada a eventos
Ciclo de vida da aplica¸c˜ao
6 / 66
Motiva¸c˜ao
MDD: Model Driven-development
Modelos principal artefato na constru¸c˜ao do sistema
Abstra¸c˜ao, automa¸c˜ao, transforma¸c˜ao, gera¸c˜ao de c´odigo
Diminui em 70% o tempo de desenvolvimento, segundo
estudos realizados na Motorola em 2007
7 / 66
Motiva¸c˜ao
Papyrus: Ferramenta de modelagem
GenCode: Ferramenta de gera¸c˜ao de c´odigo desenvolvida no
grupo para o uso de MDD em sistemas embarcados
8 / 66
Objetivos
Objetivo
Suportar o paradigma MDD para o desenvolvimento de aplicativos
para as plataformas Android e Windows Phone
Estudo do desenvolvimento de aplica¸c˜oes m´oveis
Elabora¸c˜ao de abordagens de modelagem
Reestrutura¸c˜ao da GenCode para suportar novos modelos e
gera¸c˜ao de c´odigo espec´ıfico para estas plataformas
9 / 66
1 Introdu¸c˜ao
Motiva¸c˜ao
Objetivos
2 Fundamenta¸c˜ao
Android
Windows Phone
UML
3 Abordagem proposta
4 Estudos de Caso
Android
Windows Phone
5 Conclus˜oes
10 / 66
Fundamenta¸c˜ao: Android
Alian¸ca formada em 2007 por empresas do
ramo:
Google, HTC, Dell, Intel, Motorola,
Qualcomm, Texas Instruments, Samsung, LG,
T-Mobile e Nvidia
Caracter´ısticas:
Sistema completo de c´odigo livre
Baseada no kernel do Linux
Suporte a v´arios dispositivos
Fabricantes personalizam suas pr´oprias
vers˜oes
10 / 66
Fundamenta¸c˜ao: Desenvolvimento Android
Java
M´aquina virtual Dalvik, no lugar da tradicional JVM
Ambiente de desenvolvimento:
ADT - Eclipse
11 / 66
Fundamenta¸c˜ao: Windows Phone
Lan¸cado em 2010 como sucessor do
Windows Mobile
Experiˆencia inovadora propiciada pelas
“live tiles” e “hubs”
Caracter´ısticas:
Plataforma m´ovel da Microsoft
Sistema operacional propriet´ario
Baseada no kernel do Windows NT
Adotado por poucos fabricantes
12 / 66
Fundamenta¸c˜ao: Desenvolvimento Windows Phone
Linguagem de programa¸c˜ao C# e XAML
Camada de execu¸c˜ao Common Language Runtime
Adota o framework .Net
Silverlight → Aplica¸c˜oes tradicionais
XNA → Desenvolvimento de jogos
Ambiente de desenvolvimento:
Visual Studio
13 / 66
Fundamenta¸c˜ao: Comparativo
Android:
Linguagem Java
Adotada por v´arios
fabricantes
80% do mercado
WP:
Linguagem C#
Adotada por poucos
fabricantes
Crescimento de 156%
14 / 66
Fundamenta¸c˜ao: UML
Diagramas da UML:
Estrutura Classes
Componentes
Estruturas Compostas
Implanta¸c˜ao
Objetos
Comportamento
Atividades
Casos de Uso
M´aquina de Estados
Intera¸c˜ao
Comunica¸c˜ao
Sequˆencia
Temporiza¸c˜ao
15 / 66
Fundamenta¸c˜ao: UML
Este trabalho utiliza diagramas de Classe e de Sequˆencia
16 / 66
Fundamenta¸c˜ao: UML
Diagrama de Sequˆencia
Lifelines
Mensagens
Fragmentos:
seq
par
alt, opt
loop
ref
Guarda
17 / 66
1 Introdu¸c˜ao
Motiva¸c˜ao
Objetivos
2 Fundamenta¸c˜ao
Android
Windows Phone
UML
3 Abordagem proposta
4 Estudos de Caso
Android
Windows Phone
5 Conclus˜oes
18 / 66
Abordagem proposta
Abordagem proposta
Modelagem e Gera¸c˜ao de c´odigo para as plataformas Android e
Windows Phone, baseada em MDD
Ferramentas de apoio:
Modelagem Papyrus
Gera¸c˜ao de C´odigo GenCode
18 / 66
Abordagem proposta: Desenvolvimento m´ovel
Difere do desenvolvimento tradicional!
Programa¸c˜ao orientada a eventos
Ciclo de vida da aplica¸c˜ao
Caracter´ısticas de cada plataforma:
Android
Activity inicializa¸c˜ao, ciclo de vida e interface
Intent acesso aos recursos do dispositivo
Windows Phone
MainPage inicializa¸c˜ao
PhoneApplicationPage interface
App ciclo de vida
19 / 66
Abordagem proposta: Android
Componentes especiais do Android suportados na modelagem e
gera¸c˜ao de c´odigo:
Classes Activity, ListActivity, MapActivity, R, Thread,
View, Handler.
M´etodos onCreate, onStop, onPause, onResume,
onDestroy, onStart, onClick,
onSaveInstanceState.
Recurso Intent.
20 / 66
Abordagem proposta: Estrutura Android
Defini¸c˜ao de Activity e Service como subclasses
Relacionamento de especializa¸c˜ao
Indica¸c˜ao no modelo de quais m´etodos ser˜ao customizados
21 / 66
Abordagem proposta: Estrutura Android
A gera¸c˜ao de m´etodos para classes Activity e Service difere de
m´etodos normais
Para estes m´etodos, um c´odigo padr˜ao pode ser gerado
conforme as particularidades de cada m´etodo
Exemplo: M´etodo onCreate de uma Activity;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
22 / 66
Abordagem proposta: Comportamento Android
Cria¸c˜ao da Intent a ser usada
Invoca¸c˜ao do m´etodo.
Intent intent = new Intent(BluetoothDevice.ACTION FOUND);
startActivity(intent);
23 / 66
Abordagem proposta: WP
Componentes especiais do Windows Phone suportados na
modelagem e gera¸c˜ao de c´odigo:
Classes App, MainPage, EventArgs,
PhoneApplicationPage.
M´etodos MouseLeftButton, MouseRightButton,
MouseUpButton, MouseLeftButtonDown, Click,
ManipulationStarted, ManipulationDelta,
ManipulationCompleted.
Especial Resolu¸c˜ao autom´atica da classe App e suporte
as classes-parciais.
24 / 66
Abordagem proposta: Estrutura WP
Defini¸c˜ao de PhoneApplicationPage como subclasses
Relacionamento de especializa¸c˜ao
Diretiva especial para as classes parciais <<Partial>>
25 / 66
Abordagem proposta: Estrutura WP
A gera¸c˜ao para classes parciais difere da gera¸c˜ao normal, pois
para essas s˜ao geradas:
C´odigo l´ogico “.cs” (C#)
C´odigo descritivo “.xaml” (XAML)
A gera¸c˜ao autom´atica da classe App (App.cs e App.xaml)
Para estes m´etodos, pode ser gerado o corpo ou parˆametros,
conforme as particularidades de cada m´etodo
Exemplo: M´etodo StartButton Click da MainPage;
private void StartButton Click( object sender , RoutedEventArgs e)
{
this.NavigationService.Navigate(new
Uri(“/Page.xaml”,UriKind.Relative));
}
26 / 66
Abordagem proposta: GenCode
27 / 66
Abordagem proposta: GenCode
GenCode
Surge como esfor¸co para o suporte de MDD em sistemas
embarcados
Ferramenta em desenvolvimento no grupo
Desenvolvida em Java, c´odigo livre
28 / 66
Abordagem proposta: Reestrutura¸c˜ao da GenCode
Estrutura principal da GenCode
29 / 66
Abordagem proposta: Reestrutura¸c˜ao da GenCode
Pacote Utilities: inicializa¸c˜ao das atividades da ferramenta
30 / 66
Abordagem proposta: Reestrutura¸c˜ao da GenCode
Pacote Model: respons´avel pela carga do arquivo de entrada
(modelo UML)
Se sub-divide em Structure e Sequence
31 / 66
Abordagem proposta: Reestrutura¸c˜ao da GenCode
Pacote Structure: respons´avel pela carga do diagrama de classe
32 / 66
Abordagem proposta: Reestrutura¸c˜ao da GenCode
Pacote Sequence: respons´avel pela carga dos diagramas de
sequˆencia
Relaciona os elementos capturados com seus respectivos
m´etodos do diagrama de classes
33 / 66
Abordagem proposta: Reestrutura¸c˜ao da GenCode
Pacote Generator: respons´avel pela gera¸c˜ao de c´odigo para as
plataformas Android ou Windows Phone
Utiliza o modelo carregado pelo pacote Model
Reestrutura¸c˜ao da ferramenta GenCode
Implementado de acordo com o padr˜ao de projetos Strategy
34 / 66
1 Introdu¸c˜ao
Motiva¸c˜ao
Objetivos
2 Fundamenta¸c˜ao
Android
Windows Phone
UML
3 Abordagem proposta
4 Estudos de Caso
Android
Windows Phone
5 Conclus˜oes
35 / 66
Estudos de Caso
Aplica¸c˜oes de treinamento dispon´ıvel no site de apoio ao
desenvolvedor
Android → Snake
Windows Phone → Puzzle
Engenharia reversa
Modelos constru´ıdos na ferramenta Papyrus
Gera¸c˜ao de c´odigo atrav´es da ferramenta GenCode
35 / 66
Estudo de Caso: Android
Snake: c´odigo livre dispon´ıvel no site de apoio
ao desenvolvedor Android
Modelo:
1 diagrama de classes
3 diagramas de sequˆencia
(onDraw, onBackPressed e onCreate)
C´odigo gerado:
Snake.java → 63 LoC
SnakeView.java → 117 LoC
TileView.java → 101 LoC
36 / 66
Estudo de Caso: Android
Representada por diagrama de Classe
Classes Android destacadas em cinza
Relacionamento de epecializa¸c˜ao/generaliza¸c˜ao
37 / 66
Estudo de Caso: Android
C´odigo gerado para a classe Snake - Imports e Atributos
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class Snake extends Activity {
/** Attributes */
private SnakeView mSnakeView ;
private static final String ICICLE KEY = “snake view”;
38 / 66
Estudo de Caso: Android
39 / 66
Estudo de Caso: Android
C´odigo gerado para o m´etodo onCreate da classe Snake
/** Methods */
public void onCreate( Bundle savedInstanceState ){
super.onCreate( savedInstanceState );
setContentView(R.layout.Snake);
/** Specified from Sequence Diagram onCreate */
if( savedInstanceState == null){
mSnakeView.setMode( SnakeView.READY );
} else {
Bundle map = savedInstanceState.getBundle( SnakeView.PAUSE );
if(map != null){
mSnakeView.restoreState( map);
} else {
mSnakeView.setMode( SnakeView.PAUSE );
}
}
}
40 / 66
Estudo de Caso: Android
Modelagem do recurso Intent
Indica¸c˜ao da a¸c˜ao chamada
41 / 66
Estudo de Caso: Android
C´odigo gerado para m´etodos da classe Snake
public void onBackPressed(){
/** Specified from Sequence Diagram onBackPressed */
Intent setIntent = new Intent( ACTION MAIN);
setIntent.addCategory( CATEGORY HOME);
setIntent.setFlags( FLAG ACTIVITY NEW TASK);
startActivity( setIntent);
}
protected void onPause(){
super.onPause();
}
public void onSaveInstanceState( Bundle outState ){
outState.putBundle();
}
42 / 66
Estudo de Caso: Android
Modelagem do m´etodo onDraw da classe TileView
43 / 66
Estudo de Caso: Android
C´odigo gerado para m´etodo onDraw da classe TileView
public void onDraw( Canvas canvas ){
/** Specified from Sequence Diagram onDraw */
for(int x = 0; x < mXTileCount ; x++){
for(int y = 0; y < mYTileCount ; y++){
if( mTileGrid [x][y] > 0){
canvas.drawBitmap( mTileArray [ mTileGrid [x][y]], mXOffset +
x * mTileSize , mYOffset + y * mTileSize , mPaint );
}
}
}
}
44 / 66
Estudo de Caso: Android
Modelagem da classe SnakeView e suas classes internas
45 / 66
Estudo de Caso: Android
C´odigo gerado para a classe SnakeView
import java.util.ArrayList;
import android.widget.TextView ;
import android.os.Bundle ;
import android.view.KeyEvent ;
public class SnakeView extends TileView {
/** Attributes */
private ArrayList <RefreshHandler> refreshHandler ;
...
/** Constructor */
public SnakeView( ArrayList <RefreshHandler> . . . ){
super();
this.refreshHandler = new ArrayList <RefreshHandler>();
...
}
...
46 / 66
Estudo de Caso: Android
C´odigo gerado para a classe SnakeView
/** Get */
public ArrayList <RefreshHandler> getRefreshHandler(){
return this.refreshHandler;
}
...
/** Set */
public void setRefreshHandler(ArrayList<RefreshHandler> refreshHandler){
this.refreshHandler = refreshHandler;
}
...
public class RefreshHandler extends Handler {
/** Constructor */
public RefreshHandler (){
super();
}
}
... 47 / 66
Estudo de Caso: Windows Phone
Puzzle: c´odigo de treinamento dispon´ıvel no site de
apoio ao desenvolvedor
Modelo:
1 diagrama de classes
4 diagramas de sequˆencia
(PuzzlePiece, CheckWinner,
PhoneApplicationPage ManipulationStarted e
SolveButton Click)
C´odigo gerado:
App.(xaml e xaml.cs) → 20 e 121 LoC
MainPage.(xaml e xaml.cs) → 35 e 28 LoC
PuzzleGame.cs → 134 LoC
PuzzlePage.(xaml e xaml.cs) → 35 e 105 LoC
48 / 66
Estudo de Caso: Windows Phone
Representada por diagrama de Classe
Classes Windows Phone destacadas em cinza
Relacionamento de especializa¸c˜ao/generaliza¸c˜ao
49 / 66
Estudo de Caso: Windows Phone
Classe parcial PuzzlePage
50 / 66
Estudo de Caso: Windows Phone
C´odigo gerado para a classe PuzzlePage
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
namespace WindowsPhonePuzzle
{
public partial class PuzzlePage : PhoneApplicationPage
{
//Attributes
private PuzzleGame game;
private static double DoubleTapSpeed = 500;
private static int ImageSize = 43;
... 51 / 66
Estudo de Caso: Windows Phone
C´odigo gerado para a classe PuzzlePage
//Get and Set
public PuzzleGame Game{ get; set; }
public double DoubleTapSpeed{ get; set; }
public int ImageSize{ get; set; }
public Canvas[ ] PuzzlePieces{ get; set; }
public Stream ImageStream{ get; set; }
...
//Constructor
public PuzzlePage ( PuzzleGame game , double DoubleTapSpeed , . . . ) {
InitializeComponent ();
this.game = game;
this.DoubleTapSpeed = DoubleTapSpeed;
this.ImageSize = ImageSize;
this.puzzlePieces = puzzlePieces;
...
52 / 66
Estudo de Caso: Windows Phone
private void PuzzlePiece MouseLeftButtonDown(object sender,
MouseButtonEventArgs e){
//Specified from Sequence Diagram PuzzlePiecez MouseLeftButtonDown
if( !game.IsPlaying )
{
game.NewGame ();
}
}
53 / 66
Estudo de Caso: Windows Phone
private void SolveButton Click( object sender, RoutedEventArgs e)
{
//Specified from Sequence Diagram SolveButton Click
game.Reset();
game.CheckWinner();
}
54 / 66
Estudo de Caso: Windows Phone
C´odigo gerado para PuzzlePage.xaml
<phone:PhoneApplicationPage
x:Class =“WindowsPhonePuzzle.PuzzlePage”
xmlns=“http://schemas.microsoft.com/winfx /2006/xaml/presentation”
xmlns:x =“ http: //schemas.microsoft .com/winfx /2006 /xaml”
xmlns:phone =“clr-namespace:Microsoft.Phone.Controls; assembly =
Microsoft.Phone”
xmlns:shell =“clr-namespace:Microsoft.Phone.Shell;
assembly=Microsoft.Phone”
...
55 / 66
Estudo de Caso: Windows Phone
Classe PuzzleGame
Classes internas
56 / 66
Estudo de Caso: Windows Phone
C´odigo gerado para PuzzleGame
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsPhonePuzzle
{
public class PieceUpdateEventArgs : EventArgs
{
//Attributes
public int PieceId{ get; set; }
public Point NewPosition{ get; set; }
//Constructor
public PieceUpdateEventArgs (int PieceId , Point NewPosition )
{
this.PieceId = PieceId ;
this.NewPosition = NewPosition ;
}
57 / 66
Estudo de Caso: Windows Phone
C´odigo gerado para PuzzleGame
public class PuzzleGame
{
//Attributes
private int colsAndRows ;
private int[ ] board ;
private int totalMoves ;
private bool isPlaying ;
public EventHandler GameStarted{ get; set; }
public EventHandler PieceUpdated{ get; set; }
public EventHandler GameOver{ get; set; }
//Get and Set
public int ColsAndRows { get; set; }
public int[ ] Board { get; set; }
...
58 / 66
1 Introdu¸c˜ao
Motiva¸c˜ao
Objetivos
2 Fundamenta¸c˜ao
Android
Windows Phone
UML
3 Abordagem proposta
4 Estudos de Caso
Android
Windows Phone
5 Conclus˜oes
59 / 66
Conclus˜oes
Este trabalho apresenta uma abordagem MDD para gera¸c˜ao de
c´odigo Android e Windows Phone
Considera as caracter´ısticas dessas aplica¸c˜oes, na modelagem
e gera¸c˜ao de c´odigo
Vis˜ao Estrutural: Diagrama de Classe
Vis˜ao Comportamental: Diagrama de Sequˆencia
59 / 66
Conclus˜oes
Tendo em vista a inclus˜ao de uma nova plataforma m´ovel,
este trabalho tamb´em realizou uma reestrutura¸c˜ao da
ferramenta GenCode
Linha evolutiva:
1 Classes → C´odigo Java estrutural
2 Classes e sequˆencia → C´odigo Java estrutural e
comportamental
3 Classes e sequˆencia → C´odigo Java-Android
4 Classes e de sequˆencia → C´odigo C# WP
60 / 66
Trabalhos Futuros
Diagramas de sequˆencia limitam a gera¸c˜ao de c´odigo
comportamental, at´e o n´ıvel de chamada de m´etodo
Para obter c´odigo completo, outros diagramas precisam ser
considerados na gera¸c˜ao de c´odigo
Inclus˜ao de suporte a outras plataformas m´oveis, como iOS
Por fim, a eleva¸c˜ao do n´ıvel de modelagem, suportando um
´unico modelo para ambas as plataformas, Android e WP
61 / 66
Publica¸c˜oes
PARADA, A. G.; TONINI, A. R.; BRISOLARA, L.
Gera¸c˜ao Autom´atica de C´odigo Android Eficiente a Partir de
Modelos UML. CibSE, 2013, Montevideo.
PARADA, A. G.; BRISOLARA, L.
A Model Driven Approach for Android Applications Development.
(SBESC), 2012, Natal
PARADA, A. G.; AZEVEDO, T.; BRISOLARA, L.
Modeling Android applications using UML. SIM, 2012, S˜ao Miguel
das Miss˜oes.
62 / 66
Publica¸c˜oes
PARADA, A. G.; BRISOLARA, L.
A Uma abordagem MDE para dispositivos Android. SPC-UFPel,
2012, Pelotas.
PARADA, A. G.; BRISOLARA, L.
Gera¸c˜ao de C´odigo Android a partir de modelos UML. CIC-UFPel,
2012, Pelotas.
PARADA, A. G.; SIEGERT, E.; BRISOLARA, L.
GenCode: a tool for generation of Java code from UMl class
model. SIM, Novo Hamburgo, 2011.
63 / 66
Publica¸c˜oes
PARADA, A. G.; SIEGERT, E.; BRISOLARA, L.
GenCode: Uma ferramenta para gera¸c˜ao de c´odigo Java a partir de
diagramas de sequˆencia e de classes. CIC - UFPel, 2011, Pelotas.
SIEGERT, E.; PARADA, A. G.; MARQUES, M. R. S.;
BRISOLARA, L.
Modelando Software Embarcado Com UML2: Um Estudo de Caso.
CIC - UFPel, 2011, Pelotas.
64 / 66
Publica¸c˜oes
Resumos expandidos publicados em anais de congressos
TONINI, A. R. ; PARADA, A. G. ; BRISOLARA, L. .
Gera¸c˜ao Autom´atica de c´odigo eficiente para dispostivos Android a
partir de modelos UML. CIC - UFPel, 2013, Pelotas.
PARADA, A. G. ; SIEGERT, ELIANE ; BRISOLARA, LISANE
Generating Java Code from UML Class and Sequence Diagrams.
SBESC, 2011, Florianopolis
65 / 66
Gera¸c˜ao de c´odigo dirigida por modelos para
aplicativos Android e Windows Phone
Muito Obrigado!
66 / 66

Mais conteúdo relacionado

Mais procurados

Introdução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidIntrodução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidJosé Alexandre Macedo
 
Desenvolvendo para Android
Desenvolvendo para AndroidDesenvolvendo para Android
Desenvolvendo para AndroidClaudio Pereira
 
Curso de Android - aula 3
Curso de Android - aula 3Curso de Android - aula 3
Curso de Android - aula 3Jose Berardo
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidSidney Roberto
 
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...Tchelinux
 
Programando Android - Aula 1
Programando Android - Aula 1Programando Android - Aula 1
Programando Android - Aula 1Kalil Maciel
 
Tutorial de Instalação Eclipse + Android SDK
Tutorial de Instalação Eclipse + Android SDKTutorial de Instalação Eclipse + Android SDK
Tutorial de Instalação Eclipse + Android SDKRonildo Oliveira
 
Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03Horacio Diamante Mondlane
 
Plataformas Para Desenvolvimento Em Celulares
Plataformas Para Desenvolvimento Em CelularesPlataformas Para Desenvolvimento Em Celulares
Plataformas Para Desenvolvimento Em CelularesAndré Otero
 
Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1Erisvaldo Junior
 
Introdução à programação para Android
Introdução à programação para AndroidIntrodução à programação para Android
Introdução à programação para AndroidJorge Cardoso
 
Desenvolvendo Aplicativos com Android
Desenvolvendo Aplicativos com AndroidDesenvolvendo Aplicativos com Android
Desenvolvendo Aplicativos com AndroidMayron Cachina
 
Baixando, instalando e testando o android sdk
Baixando, instalando e testando o android sdkBaixando, instalando e testando o android sdk
Baixando, instalando e testando o android sdkReuel Lopes
 
Programando Android - Aula 2
Programando Android - Aula 2Programando Android - Aula 2
Programando Android - Aula 2Kalil Maciel
 
Desenvolvimento Android: Aula 01
Desenvolvimento Android: Aula 01Desenvolvimento Android: Aula 01
Desenvolvimento Android: Aula 01Gustavo Zimmermann
 
Seminário SD - Ambiente de Desenvolvimento para Android
Seminário SD - Ambiente de Desenvolvimento para AndroidSeminário SD - Ambiente de Desenvolvimento para Android
Seminário SD - Ambiente de Desenvolvimento para AndroidWilliam Higino
 

Mais procurados (20)

Introdução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidIntrodução ao Desenvolvimento Android
Introdução ao Desenvolvimento Android
 
Desenvolvendo para Android
Desenvolvendo para AndroidDesenvolvendo para Android
Desenvolvendo para Android
 
Curso de Android - aula 3
Curso de Android - aula 3Curso de Android - aula 3
Curso de Android - aula 3
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para Android
 
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...
 
Android Aprendiz
Android AprendizAndroid Aprendiz
Android Aprendiz
 
Programando Android - Aula 1
Programando Android - Aula 1Programando Android - Aula 1
Programando Android - Aula 1
 
Tutorial de Instalação Eclipse + Android SDK
Tutorial de Instalação Eclipse + Android SDKTutorial de Instalação Eclipse + Android SDK
Tutorial de Instalação Eclipse + Android SDK
 
Android Aula 3
Android Aula 3Android Aula 3
Android Aula 3
 
Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03
 
Plataformas Para Desenvolvimento Em Celulares
Plataformas Para Desenvolvimento Em CelularesPlataformas Para Desenvolvimento Em Celulares
Plataformas Para Desenvolvimento Em Celulares
 
Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1
 
Android Aula 4
Android Aula 4Android Aula 4
Android Aula 4
 
Introdução à programação para Android
Introdução à programação para AndroidIntrodução à programação para Android
Introdução à programação para Android
 
Show Day Droid x
Show Day Droid xShow Day Droid x
Show Day Droid x
 
Desenvolvendo Aplicativos com Android
Desenvolvendo Aplicativos com AndroidDesenvolvendo Aplicativos com Android
Desenvolvendo Aplicativos com Android
 
Baixando, instalando e testando o android sdk
Baixando, instalando e testando o android sdkBaixando, instalando e testando o android sdk
Baixando, instalando e testando o android sdk
 
Programando Android - Aula 2
Programando Android - Aula 2Programando Android - Aula 2
Programando Android - Aula 2
 
Desenvolvimento Android: Aula 01
Desenvolvimento Android: Aula 01Desenvolvimento Android: Aula 01
Desenvolvimento Android: Aula 01
 
Seminário SD - Ambiente de Desenvolvimento para Android
Seminário SD - Ambiente de Desenvolvimento para AndroidSeminário SD - Ambiente de Desenvolvimento para Android
Seminário SD - Ambiente de Desenvolvimento para Android
 

Semelhante a seAbilio

Windows Phone Development
Windows Phone DevelopmentWindows Phone Development
Windows Phone DevelopmentPedro Lamas
 
Introdução Silverlight Windows Phone
Introdução Silverlight Windows PhoneIntrodução Silverlight Windows Phone
Introdução Silverlight Windows PhoneNuno Luz
 
Introdução a programação em Android
Introdução a programação em AndroidIntrodução a programação em Android
Introdução a programação em Androidilegra
 
Curso de android
Curso de androidCurso de android
Curso de androidflaviokreis
 
Desenvolvendo para Android com PhoneGap
Desenvolvendo para Android com PhoneGapDesenvolvendo para Android com PhoneGap
Desenvolvendo para Android com PhoneGapMayron Cachina
 
Android: Conheça o Futuro Inevitável
Android: Conheça o Futuro InevitávelAndroid: Conheça o Futuro Inevitável
Android: Conheça o Futuro InevitávelCampus Party Brasil
 
Universal Apps: Criando apps para Windows Phone e Windows com um único código
Universal Apps: Criando apps para Windows Phone e Windows com um único códigoUniversal Apps: Criando apps para Windows Phone e Windows com um único código
Universal Apps: Criando apps para Windows Phone e Windows com um único códigoLeandro Borges
 
Android Palestra
Android PalestraAndroid Palestra
Android PalestraRenato
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao AndroidJanynne Gomes
 
Introdução a dispositivos móveis.
Introdução a dispositivos móveis.Introdução a dispositivos móveis.
Introdução a dispositivos móveis.Eduardo Lagares
 
Resumo Desenvolvimento Mobile
Resumo Desenvolvimento MobileResumo Desenvolvimento Mobile
Resumo Desenvolvimento MobileCícero Moura
 
E tertulia paol-rq
E tertulia paol-rqE tertulia paol-rq
E tertulia paol-rqKMILT
 
Introdução à plataforma android.
Introdução à plataforma android.Introdução à plataforma android.
Introdução à plataforma android.Everton Dewes
 
Primeiros passos para o novo desenvolvedor android
Primeiros passos para o novo desenvolvedor androidPrimeiros passos para o novo desenvolvedor android
Primeiros passos para o novo desenvolvedor androidMessias Batista
 

Semelhante a seAbilio (20)

Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
3
33
3
 
Windows Phone Development
Windows Phone DevelopmentWindows Phone Development
Windows Phone Development
 
Introdução Silverlight Windows Phone
Introdução Silverlight Windows PhoneIntrodução Silverlight Windows Phone
Introdução Silverlight Windows Phone
 
Introdução a programação em Android
Introdução a programação em AndroidIntrodução a programação em Android
Introdução a programação em Android
 
Curso de android
Curso de androidCurso de android
Curso de android
 
Desenvolvendo para Android com PhoneGap
Desenvolvendo para Android com PhoneGapDesenvolvendo para Android com PhoneGap
Desenvolvendo para Android com PhoneGap
 
Android: Conheça o Futuro Inevitável
Android: Conheça o Futuro InevitávelAndroid: Conheça o Futuro Inevitável
Android: Conheça o Futuro Inevitável
 
Universal Apps: Criando apps para Windows Phone e Windows com um único código
Universal Apps: Criando apps para Windows Phone e Windows com um único códigoUniversal Apps: Criando apps para Windows Phone e Windows com um único código
Universal Apps: Criando apps para Windows Phone e Windows com um único código
 
Phonegap
PhonegapPhonegap
Phonegap
 
Android Palestra
Android PalestraAndroid Palestra
Android Palestra
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
Palestra Android
Palestra AndroidPalestra Android
Palestra Android
 
Introdução a dispositivos móveis.
Introdução a dispositivos móveis.Introdução a dispositivos móveis.
Introdução a dispositivos móveis.
 
Android - Conceito e Arquitetura
Android - Conceito e ArquiteturaAndroid - Conceito e Arquitetura
Android - Conceito e Arquitetura
 
Empreendedori$mo com Android
Empreendedori$mo com AndroidEmpreendedori$mo com Android
Empreendedori$mo com Android
 
Resumo Desenvolvimento Mobile
Resumo Desenvolvimento MobileResumo Desenvolvimento Mobile
Resumo Desenvolvimento Mobile
 
E tertulia paol-rq
E tertulia paol-rqE tertulia paol-rq
E tertulia paol-rq
 
Introdução à plataforma android.
Introdução à plataforma android.Introdução à plataforma android.
Introdução à plataforma android.
 
Primeiros passos para o novo desenvolvedor android
Primeiros passos para o novo desenvolvedor androidPrimeiros passos para o novo desenvolvedor android
Primeiros passos para o novo desenvolvedor android
 

seAbilio

  • 1. Gera¸c˜ao de c´odigo dirigida por modelos para aplicativos Android e Windows Phone Abilio Gambim Parada Orientadora: Profa. Dra. Lisane Brisolara de Brisolara Co-orientadora: MSc. Milena Rota Sena Marques 1 / 66
  • 2. Sum´ario 1 Introdu¸c˜ao Motiva¸c˜ao Objetivos 2 Fundamenta¸c˜ao Android Windows Phone UML 3 Abordagem proposta 4 Estudos de Caso Android Windows Phone 5 Conclus˜oes 2 / 66
  • 3. Introdu¸c˜ao Crescente avan¸co tecnol´ogico! Surgimento de v´arios dispositivos Al´em da comunica¸c˜ao m´ovel Alternativa `a computa¸c˜ao pessoal Proximidade maior com o usu´ario 3 / 66
  • 4. Introdu¸c˜ao: Principais plataformas m´oveis Android e WP → plataforma m´ovel adotada por v´arios fabricantes de dispositivos Android → representa 80% dos dispositivos vendidos WP → crescimento de 156% no ´ultimo tri-semestre iOS → solu¸c˜ao unificada entre sistemas e dispositivos 4 / 66
  • 5. Introdu¸c˜ao: Aplicativos m´oveis Crescente demanda no mercado por novos aplicativos Aplicativos com um curto per´ıodo de coloca¸c˜ao no mercado 5 / 66
  • 6. Introdu¸c˜ao: Desenvolvimento m´ovel O desenvolvimento desses aplicativos difere do tradicional: Programa¸c˜ao orientada a eventos Ciclo de vida da aplica¸c˜ao 6 / 66
  • 7. Motiva¸c˜ao MDD: Model Driven-development Modelos principal artefato na constru¸c˜ao do sistema Abstra¸c˜ao, automa¸c˜ao, transforma¸c˜ao, gera¸c˜ao de c´odigo Diminui em 70% o tempo de desenvolvimento, segundo estudos realizados na Motorola em 2007 7 / 66
  • 8. Motiva¸c˜ao Papyrus: Ferramenta de modelagem GenCode: Ferramenta de gera¸c˜ao de c´odigo desenvolvida no grupo para o uso de MDD em sistemas embarcados 8 / 66
  • 9. Objetivos Objetivo Suportar o paradigma MDD para o desenvolvimento de aplicativos para as plataformas Android e Windows Phone Estudo do desenvolvimento de aplica¸c˜oes m´oveis Elabora¸c˜ao de abordagens de modelagem Reestrutura¸c˜ao da GenCode para suportar novos modelos e gera¸c˜ao de c´odigo espec´ıfico para estas plataformas 9 / 66
  • 10. 1 Introdu¸c˜ao Motiva¸c˜ao Objetivos 2 Fundamenta¸c˜ao Android Windows Phone UML 3 Abordagem proposta 4 Estudos de Caso Android Windows Phone 5 Conclus˜oes 10 / 66
  • 11. Fundamenta¸c˜ao: Android Alian¸ca formada em 2007 por empresas do ramo: Google, HTC, Dell, Intel, Motorola, Qualcomm, Texas Instruments, Samsung, LG, T-Mobile e Nvidia Caracter´ısticas: Sistema completo de c´odigo livre Baseada no kernel do Linux Suporte a v´arios dispositivos Fabricantes personalizam suas pr´oprias vers˜oes 10 / 66
  • 12. Fundamenta¸c˜ao: Desenvolvimento Android Java M´aquina virtual Dalvik, no lugar da tradicional JVM Ambiente de desenvolvimento: ADT - Eclipse 11 / 66
  • 13. Fundamenta¸c˜ao: Windows Phone Lan¸cado em 2010 como sucessor do Windows Mobile Experiˆencia inovadora propiciada pelas “live tiles” e “hubs” Caracter´ısticas: Plataforma m´ovel da Microsoft Sistema operacional propriet´ario Baseada no kernel do Windows NT Adotado por poucos fabricantes 12 / 66
  • 14. Fundamenta¸c˜ao: Desenvolvimento Windows Phone Linguagem de programa¸c˜ao C# e XAML Camada de execu¸c˜ao Common Language Runtime Adota o framework .Net Silverlight → Aplica¸c˜oes tradicionais XNA → Desenvolvimento de jogos Ambiente de desenvolvimento: Visual Studio 13 / 66
  • 15. Fundamenta¸c˜ao: Comparativo Android: Linguagem Java Adotada por v´arios fabricantes 80% do mercado WP: Linguagem C# Adotada por poucos fabricantes Crescimento de 156% 14 / 66
  • 16. Fundamenta¸c˜ao: UML Diagramas da UML: Estrutura Classes Componentes Estruturas Compostas Implanta¸c˜ao Objetos Comportamento Atividades Casos de Uso M´aquina de Estados Intera¸c˜ao Comunica¸c˜ao Sequˆencia Temporiza¸c˜ao 15 / 66
  • 17. Fundamenta¸c˜ao: UML Este trabalho utiliza diagramas de Classe e de Sequˆencia 16 / 66
  • 18. Fundamenta¸c˜ao: UML Diagrama de Sequˆencia Lifelines Mensagens Fragmentos: seq par alt, opt loop ref Guarda 17 / 66
  • 19. 1 Introdu¸c˜ao Motiva¸c˜ao Objetivos 2 Fundamenta¸c˜ao Android Windows Phone UML 3 Abordagem proposta 4 Estudos de Caso Android Windows Phone 5 Conclus˜oes 18 / 66
  • 20. Abordagem proposta Abordagem proposta Modelagem e Gera¸c˜ao de c´odigo para as plataformas Android e Windows Phone, baseada em MDD Ferramentas de apoio: Modelagem Papyrus Gera¸c˜ao de C´odigo GenCode 18 / 66
  • 21. Abordagem proposta: Desenvolvimento m´ovel Difere do desenvolvimento tradicional! Programa¸c˜ao orientada a eventos Ciclo de vida da aplica¸c˜ao Caracter´ısticas de cada plataforma: Android Activity inicializa¸c˜ao, ciclo de vida e interface Intent acesso aos recursos do dispositivo Windows Phone MainPage inicializa¸c˜ao PhoneApplicationPage interface App ciclo de vida 19 / 66
  • 22. Abordagem proposta: Android Componentes especiais do Android suportados na modelagem e gera¸c˜ao de c´odigo: Classes Activity, ListActivity, MapActivity, R, Thread, View, Handler. M´etodos onCreate, onStop, onPause, onResume, onDestroy, onStart, onClick, onSaveInstanceState. Recurso Intent. 20 / 66
  • 23. Abordagem proposta: Estrutura Android Defini¸c˜ao de Activity e Service como subclasses Relacionamento de especializa¸c˜ao Indica¸c˜ao no modelo de quais m´etodos ser˜ao customizados 21 / 66
  • 24. Abordagem proposta: Estrutura Android A gera¸c˜ao de m´etodos para classes Activity e Service difere de m´etodos normais Para estes m´etodos, um c´odigo padr˜ao pode ser gerado conforme as particularidades de cada m´etodo Exemplo: M´etodo onCreate de uma Activity; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } 22 / 66
  • 25. Abordagem proposta: Comportamento Android Cria¸c˜ao da Intent a ser usada Invoca¸c˜ao do m´etodo. Intent intent = new Intent(BluetoothDevice.ACTION FOUND); startActivity(intent); 23 / 66
  • 26. Abordagem proposta: WP Componentes especiais do Windows Phone suportados na modelagem e gera¸c˜ao de c´odigo: Classes App, MainPage, EventArgs, PhoneApplicationPage. M´etodos MouseLeftButton, MouseRightButton, MouseUpButton, MouseLeftButtonDown, Click, ManipulationStarted, ManipulationDelta, ManipulationCompleted. Especial Resolu¸c˜ao autom´atica da classe App e suporte as classes-parciais. 24 / 66
  • 27. Abordagem proposta: Estrutura WP Defini¸c˜ao de PhoneApplicationPage como subclasses Relacionamento de especializa¸c˜ao Diretiva especial para as classes parciais <<Partial>> 25 / 66
  • 28. Abordagem proposta: Estrutura WP A gera¸c˜ao para classes parciais difere da gera¸c˜ao normal, pois para essas s˜ao geradas: C´odigo l´ogico “.cs” (C#) C´odigo descritivo “.xaml” (XAML) A gera¸c˜ao autom´atica da classe App (App.cs e App.xaml) Para estes m´etodos, pode ser gerado o corpo ou parˆametros, conforme as particularidades de cada m´etodo Exemplo: M´etodo StartButton Click da MainPage; private void StartButton Click( object sender , RoutedEventArgs e) { this.NavigationService.Navigate(new Uri(“/Page.xaml”,UriKind.Relative)); } 26 / 66
  • 30. Abordagem proposta: GenCode GenCode Surge como esfor¸co para o suporte de MDD em sistemas embarcados Ferramenta em desenvolvimento no grupo Desenvolvida em Java, c´odigo livre 28 / 66
  • 31. Abordagem proposta: Reestrutura¸c˜ao da GenCode Estrutura principal da GenCode 29 / 66
  • 32. Abordagem proposta: Reestrutura¸c˜ao da GenCode Pacote Utilities: inicializa¸c˜ao das atividades da ferramenta 30 / 66
  • 33. Abordagem proposta: Reestrutura¸c˜ao da GenCode Pacote Model: respons´avel pela carga do arquivo de entrada (modelo UML) Se sub-divide em Structure e Sequence 31 / 66
  • 34. Abordagem proposta: Reestrutura¸c˜ao da GenCode Pacote Structure: respons´avel pela carga do diagrama de classe 32 / 66
  • 35. Abordagem proposta: Reestrutura¸c˜ao da GenCode Pacote Sequence: respons´avel pela carga dos diagramas de sequˆencia Relaciona os elementos capturados com seus respectivos m´etodos do diagrama de classes 33 / 66
  • 36. Abordagem proposta: Reestrutura¸c˜ao da GenCode Pacote Generator: respons´avel pela gera¸c˜ao de c´odigo para as plataformas Android ou Windows Phone Utiliza o modelo carregado pelo pacote Model Reestrutura¸c˜ao da ferramenta GenCode Implementado de acordo com o padr˜ao de projetos Strategy 34 / 66
  • 37. 1 Introdu¸c˜ao Motiva¸c˜ao Objetivos 2 Fundamenta¸c˜ao Android Windows Phone UML 3 Abordagem proposta 4 Estudos de Caso Android Windows Phone 5 Conclus˜oes 35 / 66
  • 38. Estudos de Caso Aplica¸c˜oes de treinamento dispon´ıvel no site de apoio ao desenvolvedor Android → Snake Windows Phone → Puzzle Engenharia reversa Modelos constru´ıdos na ferramenta Papyrus Gera¸c˜ao de c´odigo atrav´es da ferramenta GenCode 35 / 66
  • 39. Estudo de Caso: Android Snake: c´odigo livre dispon´ıvel no site de apoio ao desenvolvedor Android Modelo: 1 diagrama de classes 3 diagramas de sequˆencia (onDraw, onBackPressed e onCreate) C´odigo gerado: Snake.java → 63 LoC SnakeView.java → 117 LoC TileView.java → 101 LoC 36 / 66
  • 40. Estudo de Caso: Android Representada por diagrama de Classe Classes Android destacadas em cinza Relacionamento de epecializa¸c˜ao/generaliza¸c˜ao 37 / 66
  • 41. Estudo de Caso: Android C´odigo gerado para a classe Snake - Imports e Atributos import android.app.Activity; import android.content.Intent; import android.os.Bundle; public class Snake extends Activity { /** Attributes */ private SnakeView mSnakeView ; private static final String ICICLE KEY = “snake view”; 38 / 66
  • 42. Estudo de Caso: Android 39 / 66
  • 43. Estudo de Caso: Android C´odigo gerado para o m´etodo onCreate da classe Snake /** Methods */ public void onCreate( Bundle savedInstanceState ){ super.onCreate( savedInstanceState ); setContentView(R.layout.Snake); /** Specified from Sequence Diagram onCreate */ if( savedInstanceState == null){ mSnakeView.setMode( SnakeView.READY ); } else { Bundle map = savedInstanceState.getBundle( SnakeView.PAUSE ); if(map != null){ mSnakeView.restoreState( map); } else { mSnakeView.setMode( SnakeView.PAUSE ); } } } 40 / 66
  • 44. Estudo de Caso: Android Modelagem do recurso Intent Indica¸c˜ao da a¸c˜ao chamada 41 / 66
  • 45. Estudo de Caso: Android C´odigo gerado para m´etodos da classe Snake public void onBackPressed(){ /** Specified from Sequence Diagram onBackPressed */ Intent setIntent = new Intent( ACTION MAIN); setIntent.addCategory( CATEGORY HOME); setIntent.setFlags( FLAG ACTIVITY NEW TASK); startActivity( setIntent); } protected void onPause(){ super.onPause(); } public void onSaveInstanceState( Bundle outState ){ outState.putBundle(); } 42 / 66
  • 46. Estudo de Caso: Android Modelagem do m´etodo onDraw da classe TileView 43 / 66
  • 47. Estudo de Caso: Android C´odigo gerado para m´etodo onDraw da classe TileView public void onDraw( Canvas canvas ){ /** Specified from Sequence Diagram onDraw */ for(int x = 0; x < mXTileCount ; x++){ for(int y = 0; y < mYTileCount ; y++){ if( mTileGrid [x][y] > 0){ canvas.drawBitmap( mTileArray [ mTileGrid [x][y]], mXOffset + x * mTileSize , mYOffset + y * mTileSize , mPaint ); } } } } 44 / 66
  • 48. Estudo de Caso: Android Modelagem da classe SnakeView e suas classes internas 45 / 66
  • 49. Estudo de Caso: Android C´odigo gerado para a classe SnakeView import java.util.ArrayList; import android.widget.TextView ; import android.os.Bundle ; import android.view.KeyEvent ; public class SnakeView extends TileView { /** Attributes */ private ArrayList <RefreshHandler> refreshHandler ; ... /** Constructor */ public SnakeView( ArrayList <RefreshHandler> . . . ){ super(); this.refreshHandler = new ArrayList <RefreshHandler>(); ... } ... 46 / 66
  • 50. Estudo de Caso: Android C´odigo gerado para a classe SnakeView /** Get */ public ArrayList <RefreshHandler> getRefreshHandler(){ return this.refreshHandler; } ... /** Set */ public void setRefreshHandler(ArrayList<RefreshHandler> refreshHandler){ this.refreshHandler = refreshHandler; } ... public class RefreshHandler extends Handler { /** Constructor */ public RefreshHandler (){ super(); } } ... 47 / 66
  • 51. Estudo de Caso: Windows Phone Puzzle: c´odigo de treinamento dispon´ıvel no site de apoio ao desenvolvedor Modelo: 1 diagrama de classes 4 diagramas de sequˆencia (PuzzlePiece, CheckWinner, PhoneApplicationPage ManipulationStarted e SolveButton Click) C´odigo gerado: App.(xaml e xaml.cs) → 20 e 121 LoC MainPage.(xaml e xaml.cs) → 35 e 28 LoC PuzzleGame.cs → 134 LoC PuzzlePage.(xaml e xaml.cs) → 35 e 105 LoC 48 / 66
  • 52. Estudo de Caso: Windows Phone Representada por diagrama de Classe Classes Windows Phone destacadas em cinza Relacionamento de especializa¸c˜ao/generaliza¸c˜ao 49 / 66
  • 53. Estudo de Caso: Windows Phone Classe parcial PuzzlePage 50 / 66
  • 54. Estudo de Caso: Windows Phone C´odigo gerado para a classe PuzzlePage using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; namespace WindowsPhonePuzzle { public partial class PuzzlePage : PhoneApplicationPage { //Attributes private PuzzleGame game; private static double DoubleTapSpeed = 500; private static int ImageSize = 43; ... 51 / 66
  • 55. Estudo de Caso: Windows Phone C´odigo gerado para a classe PuzzlePage //Get and Set public PuzzleGame Game{ get; set; } public double DoubleTapSpeed{ get; set; } public int ImageSize{ get; set; } public Canvas[ ] PuzzlePieces{ get; set; } public Stream ImageStream{ get; set; } ... //Constructor public PuzzlePage ( PuzzleGame game , double DoubleTapSpeed , . . . ) { InitializeComponent (); this.game = game; this.DoubleTapSpeed = DoubleTapSpeed; this.ImageSize = ImageSize; this.puzzlePieces = puzzlePieces; ... 52 / 66
  • 56. Estudo de Caso: Windows Phone private void PuzzlePiece MouseLeftButtonDown(object sender, MouseButtonEventArgs e){ //Specified from Sequence Diagram PuzzlePiecez MouseLeftButtonDown if( !game.IsPlaying ) { game.NewGame (); } } 53 / 66
  • 57. Estudo de Caso: Windows Phone private void SolveButton Click( object sender, RoutedEventArgs e) { //Specified from Sequence Diagram SolveButton Click game.Reset(); game.CheckWinner(); } 54 / 66
  • 58. Estudo de Caso: Windows Phone C´odigo gerado para PuzzlePage.xaml <phone:PhoneApplicationPage x:Class =“WindowsPhonePuzzle.PuzzlePage” xmlns=“http://schemas.microsoft.com/winfx /2006/xaml/presentation” xmlns:x =“ http: //schemas.microsoft .com/winfx /2006 /xaml” xmlns:phone =“clr-namespace:Microsoft.Phone.Controls; assembly = Microsoft.Phone” xmlns:shell =“clr-namespace:Microsoft.Phone.Shell; assembly=Microsoft.Phone” ... 55 / 66
  • 59. Estudo de Caso: Windows Phone Classe PuzzleGame Classes internas 56 / 66
  • 60. Estudo de Caso: Windows Phone C´odigo gerado para PuzzleGame using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsPhonePuzzle { public class PieceUpdateEventArgs : EventArgs { //Attributes public int PieceId{ get; set; } public Point NewPosition{ get; set; } //Constructor public PieceUpdateEventArgs (int PieceId , Point NewPosition ) { this.PieceId = PieceId ; this.NewPosition = NewPosition ; } 57 / 66
  • 61. Estudo de Caso: Windows Phone C´odigo gerado para PuzzleGame public class PuzzleGame { //Attributes private int colsAndRows ; private int[ ] board ; private int totalMoves ; private bool isPlaying ; public EventHandler GameStarted{ get; set; } public EventHandler PieceUpdated{ get; set; } public EventHandler GameOver{ get; set; } //Get and Set public int ColsAndRows { get; set; } public int[ ] Board { get; set; } ... 58 / 66
  • 62. 1 Introdu¸c˜ao Motiva¸c˜ao Objetivos 2 Fundamenta¸c˜ao Android Windows Phone UML 3 Abordagem proposta 4 Estudos de Caso Android Windows Phone 5 Conclus˜oes 59 / 66
  • 63. Conclus˜oes Este trabalho apresenta uma abordagem MDD para gera¸c˜ao de c´odigo Android e Windows Phone Considera as caracter´ısticas dessas aplica¸c˜oes, na modelagem e gera¸c˜ao de c´odigo Vis˜ao Estrutural: Diagrama de Classe Vis˜ao Comportamental: Diagrama de Sequˆencia 59 / 66
  • 64. Conclus˜oes Tendo em vista a inclus˜ao de uma nova plataforma m´ovel, este trabalho tamb´em realizou uma reestrutura¸c˜ao da ferramenta GenCode Linha evolutiva: 1 Classes → C´odigo Java estrutural 2 Classes e sequˆencia → C´odigo Java estrutural e comportamental 3 Classes e sequˆencia → C´odigo Java-Android 4 Classes e de sequˆencia → C´odigo C# WP 60 / 66
  • 65. Trabalhos Futuros Diagramas de sequˆencia limitam a gera¸c˜ao de c´odigo comportamental, at´e o n´ıvel de chamada de m´etodo Para obter c´odigo completo, outros diagramas precisam ser considerados na gera¸c˜ao de c´odigo Inclus˜ao de suporte a outras plataformas m´oveis, como iOS Por fim, a eleva¸c˜ao do n´ıvel de modelagem, suportando um ´unico modelo para ambas as plataformas, Android e WP 61 / 66
  • 66. Publica¸c˜oes PARADA, A. G.; TONINI, A. R.; BRISOLARA, L. Gera¸c˜ao Autom´atica de C´odigo Android Eficiente a Partir de Modelos UML. CibSE, 2013, Montevideo. PARADA, A. G.; BRISOLARA, L. A Model Driven Approach for Android Applications Development. (SBESC), 2012, Natal PARADA, A. G.; AZEVEDO, T.; BRISOLARA, L. Modeling Android applications using UML. SIM, 2012, S˜ao Miguel das Miss˜oes. 62 / 66
  • 67. Publica¸c˜oes PARADA, A. G.; BRISOLARA, L. A Uma abordagem MDE para dispositivos Android. SPC-UFPel, 2012, Pelotas. PARADA, A. G.; BRISOLARA, L. Gera¸c˜ao de C´odigo Android a partir de modelos UML. CIC-UFPel, 2012, Pelotas. PARADA, A. G.; SIEGERT, E.; BRISOLARA, L. GenCode: a tool for generation of Java code from UMl class model. SIM, Novo Hamburgo, 2011. 63 / 66
  • 68. Publica¸c˜oes PARADA, A. G.; SIEGERT, E.; BRISOLARA, L. GenCode: Uma ferramenta para gera¸c˜ao de c´odigo Java a partir de diagramas de sequˆencia e de classes. CIC - UFPel, 2011, Pelotas. SIEGERT, E.; PARADA, A. G.; MARQUES, M. R. S.; BRISOLARA, L. Modelando Software Embarcado Com UML2: Um Estudo de Caso. CIC - UFPel, 2011, Pelotas. 64 / 66
  • 69. Publica¸c˜oes Resumos expandidos publicados em anais de congressos TONINI, A. R. ; PARADA, A. G. ; BRISOLARA, L. . Gera¸c˜ao Autom´atica de c´odigo eficiente para dispostivos Android a partir de modelos UML. CIC - UFPel, 2013, Pelotas. PARADA, A. G. ; SIEGERT, ELIANE ; BRISOLARA, LISANE Generating Java Code from UML Class and Sequence Diagrams. SBESC, 2011, Florianopolis 65 / 66
  • 70. Gera¸c˜ao de c´odigo dirigida por modelos para aplicativos Android e Windows Phone Muito Obrigado! 66 / 66