seAbilio

255 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
255
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

seAbilio

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 12. Fundamenta¸c˜ao: Desenvolvimento Android Java M´aquina virtual Dalvik, no lugar da tradicional JVM Ambiente de desenvolvimento: ADT - Eclipse 11 / 66
  13. 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. 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. 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. 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. 17. Fundamenta¸c˜ao: UML Este trabalho utiliza diagramas de Classe e de Sequˆencia 16 / 66
  18. 18. Fundamenta¸c˜ao: UML Diagrama de Sequˆencia Lifelines Mensagens Fragmentos: seq par alt, opt loop ref Guarda 17 / 66
  19. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  29. 29. Abordagem proposta: GenCode 27 / 66
  30. 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. 31. Abordagem proposta: Reestrutura¸c˜ao da GenCode Estrutura principal da GenCode 29 / 66
  32. 32. Abordagem proposta: Reestrutura¸c˜ao da GenCode Pacote Utilities: inicializa¸c˜ao das atividades da ferramenta 30 / 66
  33. 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. 34. Abordagem proposta: Reestrutura¸c˜ao da GenCode Pacote Structure: respons´avel pela carga do diagrama de classe 32 / 66
  35. 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. 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. 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. 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. 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. 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. 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. 42. Estudo de Caso: Android 39 / 66
  43. 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. 44. Estudo de Caso: Android Modelagem do recurso Intent Indica¸c˜ao da a¸c˜ao chamada 41 / 66
  45. 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. 46. Estudo de Caso: Android Modelagem do m´etodo onDraw da classe TileView 43 / 66
  47. 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. 48. Estudo de Caso: Android Modelagem da classe SnakeView e suas classes internas 45 / 66
  49. 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. 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. 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. 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. 53. Estudo de Caso: Windows Phone Classe parcial PuzzlePage 50 / 66
  54. 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. 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. 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. 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. 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. 59. Estudo de Caso: Windows Phone Classe PuzzleGame Classes internas 56 / 66
  60. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 70. Gera¸c˜ao de c´odigo dirigida por modelos para aplicativos Android e Windows Phone Muito Obrigado! 66 / 66

×