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