Geração Automática de Código Android Eficiente a partir de Modelos UML

Tamanho: px
Começar a partir da página:

Download "Geração Automática de Código Android Eficiente a partir de Modelos UML"

Transcrição

1 Geração Automática de Código Android Eficiente a partir de Modelos UML Abilio Gambim Parada, Aline Rodrigues Tonini, Lisane Brisolara de Brisolara Ciência da Computação, Grupo de Arquiteturas e Circuitos Integrados, Centro de Desenvolvimento Tecnológico, Universidade Federal de Pelotas, Brasil {agparada, artonini, [email protected] Resumo. Dispositivos móveis vêm substituindo computadores para uma série de aplicações. Um grande número destes aparelhos utilizam a plataforma Android da Google. Este crescimento na utilização de dispositivos móveis tem impulsionado o mercado de desenvolvimento de aplicações para estes dispositivos. Entretanto, devido ao curto tempo de lançamento do produto no mercado, abordagens que visam acelerar o desenvolvimento são necessárias. Para diminuir o tempo de desenvolvimento e ao mesmo tempo suportar projetos complexos, abordagens de engenharia baseada em modelos, ou MDE (ModeldrivenEngineering), estão sendo utilizadas. No entanto, os desenvolvedores devem se preocupar também em atender requisitos não funcionais relacionadas a desempenho e consumo de energia inerentes ao domínio. Neste contexto, a Google propôs um conjunto de boas práticas e técnicas de programação para aplicações Android, tendo como principal objetivo o desempenho das aplicações. Este artigo propõe uma abordagem MDE para geração automática de código, a qual aplica boas práticas Android, visando à geração de código eficiente. A abordagem é demonstrada através de um estudo de caso, no qual a melhoria obtida com as práticas adotadas pode ser observada. Palavras Chaves: Android, UML, boas práticas, desempenho, geração de código, MDE. 1 Introdução A crescente utilização de dispositivos móveis, como smartphones e tablets, tem se tornado uma alternativa à utilização de computadores de uso pessoal, impulsionado assim o mercado destes eletrônicos. Dentre as várias plataformas disponíveis no

2 mercado surge a plataforma Android [1], como uma solução completa de código livre com um amplo suporte aos mais diversos dispositivos, bem como ferramentas de apoio ao desenvolvimento e sistema operacional. Aplicativos Android trazem novas características para a programação tanto no estilo quanto em peculiaridades que devem ser observadas. Uma destas características é a programação orientada a eventos, pois estes aplicativos devem constantemente reagir a interações do usuário [2], e também conceitos adicionais como ciclo de vida e a utilização de determinada estrutura de acordo com o comportamento da aplicação.estas novas características aumentam a dificuldade do desenvolvimento de aplicativos Android. Além disso, desenvolvedores devem se preocupar também com a eficiência e um melhor aproveitamento dos recursos do dispositivo. Considerando estas particularidades e o fato de existir pessoas de vários lugares do mundo com maneiras diferentes de programar desenvolvendo aplicações para Android, a Google propõe o uso de Boas Práticas no processo de desenvolvimento [3], para assim viabilizar um melhor desempenho das aplicações Android. Além de todas as características de desenvolvimento e de boas práticas que devem ser consideradas, as aplicações Android estão fortemente ligadas ao mercado possuindo um curto tempo de desenvolvimento. Tradicionalmente, abordagens de Engenharia Dirigida por Modelos ou MDE (do inglês, Model Driven Engineering) vem sendo adotadas, principalmente por que oferecem abstração através do uso de modelos e automação através de transformação de modelos, facilitando e acelerando o desenvolvimento [4]. Segundo um estudo realizado na Motorola, a MDE pode reduzir em até 70% o tempo de produção de software [5]. Entretanto o uso efetivo do paradigma MDE no desenvolvimento Android, requer uma abordagem dedicada para a modelagem dos aplicativos e ferramentas capazes de transformar modelos UML em código Android. Para resolver este problema, em [6], foi proposta uma abordagem para modelagem e geração de código. Entretanto esta abordagem não aplica técnicas de otimização de código, dessa forma, este artigo estende esta abordagem para a geração de código Android eficiente através da aplicação das boas práticas propostas pela Google. Nossa abordagem é demonstrada e os resultados de desempenho são discutidos através de um estudo de caso. Este artigo está organizado da seguinte forma. A Seção 2 apresenta a fundamentação teórica, enquanto a Seção 3 apresenta e discute trabalhos relacionados. Na seção 4, a abordagem proposta para geração de código eficiente é detalhada e o estudo de caso que demonstra resultados de seu emprego é apresentado na Seção 5. As conclusões do trabalho são discutidas na Seção 6.

3 2 Boas práticas Android A Google sugere uma série de Boas Práticas para o desenvolvimento de aplicativos Android. Estas boas práticas são dicas simples de programação que aplicadas aos hábitos de codificação proporcionam um melhor desempenho geral da aplicação. Esta seção introduz estas boas práticas bem como destaca o seu impacto no desempenho, segundo o estudo realizado pela Google em [3]. Uma das boas práticas indicadas pela Google é evitar a criação de objetos desnecessários, pois a criação destes é sempre custosa. A alocação de objetos em excesso faz com que a coleta de lixo seja realizada periodicamente, o que tem um impacto negativo no desempenho da aplicação. Outra prática sugerida é preferir o uso de métodos estáticos ao invés de virtuais. Desta forma, métodos que não irão acessar campos do objeto devem ser declarados como estáticos. De acordo com o estudo da Google, invocações estáticas serão de 15% a 20 % mais rápidas. Neste conjunto de boas práticas, é recomendado o uso de static final para constantes, pois ao usar a palavra reservada final na definição de constantes os acessos serão mais rápidos. Isso se deve ao fato da classe não requerer o método <clinit>, visto que constantes são armazenadas em um campo do arquivo.dex responsável pela inicialização das constantes. Porém, esta recomendação é válida somente para tipos primitivos e Strings constantes. Em linguagens orientadas a objeto como C++ e Java é comum o uso de getter para acessar atributos ao invés de acessá-los diretamente. Porém esta não é uma prática recomendável para Android, pois as chamadas a métodos virtuais são muito mais caras do que o acesso direto ao campo. Desta forma, é recomendado que o uso de getters e setters seja evitado. De acordo com a Google, o tempo para acessar um atributo diretamente é três vezes mais rápido do que através de um getter sem o recurso de JIT (Just-in-time) e cerca de sete vezes mais rápido com o uso do JIT. A sintaxe do for aprimorado ou for-each pode ser usada para definir coleções que implementam uma interface iterativa para Arrays. Com as coleções é alocado um iterador que faz chamadas a hashnext e next. De acordo com a Google o uso da sintaxe aprimorada do for em Arrays é três vezes mais rápido (com ou sem o uso de JIT) comparado com o uso do for com iterador explícito. É possível iterar uma matriz de três maneiras, como mostram os trechos de código abaixo. A maneira como zero itera a matriz é mais lenta, pois o JIT não otimiza a maneira de obter o comprimento da matriz a cada iteração do laço. A iteração usada

4 em one é mais rápida, pois utiliza variáveis locais e o comprimento da matriz oferece um beneficio de desempenho. A implementação da sintaxe aprimorada do for, introduzida no Java 1.5, realizada em two é a mais rápida em dispositivos sem JIT e indiferente de one para dispositivos com JIT. É possível iterar uma matriz de três maneiras, como mostra o trecho de código abaixo: Códigos com várias implementações de for static class Foo { intmsplat; Foo[] marray =... public void zero(){ int sum = 0; for (int i = 0; i<marray.length; ++i){ sum + = marray[i].msplat; public void one(){ int sum = 0; Foo[] localarray = marray; intlen = localarray.length; for (int i = 0; i<len; ++i){ sum + = localarray[i].msplat; public void two(){ int sum = 0; for( Foo : a ){ sum + = a.msplat; As boas práticas também indicam o uso de acesso do tipo pacote (package) ao invés do tipo privado (private) em classes internas privadas. Esta prática se aplica quando uma classe interna a outra (inner class) precisa acessar atributos da classe

5 externa. A máquina virtual considera o acesso direto da classe interna a membros privados da classe externa como sendo ilegal, porque são classes diferentes. Para evitar esse problema atributos e métodos que devem ser acessados por classes internas devem ter visibilidade do tipo pacote, indicada pelo modificador public, protected ou sem nenhum modificador [7]. Ao aplicar a prática sugerida, evita-se uma sobrecarga em aplicações que utilizam classes internas em pontos críticos de desempenho. Outra boa prática é evitar o uso de Ponto Flutuante, pois de acordo com a Google, o seu uso em dispositivos Android é cerca de duas vezes mais lento do que o uso de inteiros. 3 Trabalhos Relacionados Muitos trabalhos preocupam-se com a eficiência de aplicações para dispositivos móveis [8][9][10]. Em [8] os autores discutem a sobrecarga no desempenho induzida pelo uso da abstração em camadas para software embarcado, usando como plataforma alvo o Android. Em [9], um conjunto de benchmarks foram implementados de diferentes formas no Android e avaliados quanto ao desempenho. Os resultados mostraram uma sobrecarga do Java-Android comparado a implementações C rodando na mesma plataforma. Da mesma forma, em [10] são realizados experimentos com diferentes implementações de algoritmos e são analisados resultados de desempenho e energia consumida pelas implementações quando executadas no Android. Porém, nenhum destes trabalhos considera as boas práticas. Apenas em [11] o impacto destas práticas no desempenho do software foi avaliado através de experimentos. Como este ainda é um campo de atuação novo, há um número bastante reduzido de ferramentas que proveem a geração automática de código para dispositivos Android a partir de modelos de alto nível de abstração. A IBM recentemente adicionou à ferramenta Rational Rhapsody [12] um perfil para aplicações Android. No entanto, sua abordagem exige que a aplicação seja definida em um nível baixo de detalhe para que a geração de código seja realizada. Além da IBM, observam-se esforços da Google e da Eclipse. A Google propôs o App Inventor [13] e a Eclipse, o AndroMate [14], ambas focam na modelagem gráfica e geração para Android. No entanto, tanto o AndroMate como o App Inventor poderiam ser classificados como programação visual ao invés de orientados a modelos. Ainda deve-se ressaltar que nenhuma destas abordagens considera boas práticas ou inclui passos de otimização no momento da geração de código. Nossa abordagem difere-se das abordagens utilizadas por estas ferramentas, pois procura minimizar os detalhes que devem ser inseridos pelo projetista no modelo e aplica boas práticas automaticamente durante a geração de código, suportando assim a geração de código eficiente para a plataforma Android.

6 4 Geração de Código Android Eficiente A geração automática de código Android eficiente proposta neste trabalho baseia-se na aplicação das boas práticas propostas pela Google para dispositivos Android. Assim como proposto em [6], nossa abordagem gera código Java-Android a partir de modelos UML construídos usando suas notações padrão, sendo esta transformação suportada por uma ferramenta em desenvolvimento pelo grupo. Durante a geração de código, a ferramenta aplica as boas práticas, visando a obtenção de código otimizado para a plataforma Android, evitando que o projetista tenha que refatorar o código para incluir estas otimizações manualmente. Estas otimizações são opcionais de forma que o usuário pode escolher quais otimizações serão aplicadas, para assim observar os impactos destas otimizações de forma isolada. A entrada da ferramenta de geração de código é um modelo UML, composto de diagramas de classe e de sequência, construídos de acordo com a abordagem apresentada em [6]. O diagrama de classe oferece a visão estrutural, a partir da qual código estrutural pode ser gerado. Já os diagramas de sequência são usados na geração de código comportamental. A Seção 4.1 apresenta a geração estrutural de código eficiente para a plataforma Android, enquanto a geração comportamental é detalhada na Seção 4.2. Atualmente, nossa ferramenta implementa três das boas práticas sugeridas pelo Google. Destas, uma afeta apenas a geração estrutural, outra apenas a geração comportamental e outra modifica ambas as gerações. 4.1 Geração Estrutural Na geração de código estrutural, são geradas definições de atributos (nome, tipo e visibilidade), de métodos (nome, parâmetros e visibilidade) e importação de pacotes. Duas das boas práticas são aplicadas na geração do código estrutural. A primeira delas se refere a geração dos atributos e se baseia na boa prática que sugere o uso dos modificadores static e static final para constantes. Quando um atributo tem um valor de inicialização, este é classificado como constante pela ferramenta. Neste caso, a ferramenta aplica a boa prática, gerando a declaração com o modificador mais apropriado. Se a constante for do tipo primitivo ou String, é usado o static final, caso contrário, apenas o modificador static é usado. Esta boa prática traz benefícios na velocidade de acesso a estas constantes, proporcionando assim um melhor desempenho para o sistema, como discutido na Seção 2. A segunda boa prática aplicada na geração refere-se à definição e geração de métodos de acesso a atributos, os métodos getters e setters. Na primeira versão da ferramenta, sem foco na otimização, para todo o atributo era gerado um método getter

7 e um método setter, mesmo que estes métodos não estivessem explicitados no modelo da classe. No entanto, esta prática é contrária a uma das boas práticas do Google que propõe o acesso direto aos atributos sem métodos getters e setters como forma de melhorar o desempenho do código. A eliminação destes métodos pode requerer mudanças na visibilidade do atributo para permitir que o mesmo seja acessado diretamente, e também a eliminação da invocação do método de acesso. Desta forma, esta boa prática não afeta apenas a geração do código estrutural, mas também afeta a geração de código comportamental (discutida na Seção 4.2). Na geração estrutural, nossa ferramenta realiza a análise dos atributos e métodos de acesso descritos no modelo antes da geração propriamente dita do código. Caso seja identificado um atributo privado (private ou protect) para o qual métodos de acesso tenham sido definidos no modelo, a ferramenta irá gerar a definição do atributo como público (public) e não fará a definição dos métodos de acesso correspondentes. Para isto é necessário que o projetista siga a boa prática indicada para programação em geral, de utilizar nomes para métodos de acesso contendo o nome do atributo a ser acessado [15] com prefixo get ou set. 4.2 Geração Comportamental Na geração do código comportamental das aplicações Android, a aplicação da boa prática de eliminação de chamadas aos métodos getters e setters deve ser concluída. Para tal, a ferramenta deve analisar os diagramas de sequência para identificar onde são utilizados estes métodos de acesso, para posteriormente substituir a invocação do método por uma atribuição ou leitura do atributo. Neste trabalho, também propomos a aplicação da boa prática relativa à utilização da sintaxe do for apropriada, apresentada na Seção 2. Para aplicação desta boa prática, a ferramenta deve analisar os diagramas de sequência do modelo, com especial atenção naqueles onde um fragmento do tipo loop é usado, o qual representa uma iteração. A análise para determinar a melhor sintaxe do for considera o que está sendo utilizado dentro da estrutura de iteração.caso seja iterado uma coleção de objetos é indicado pelas boas práticas a utilização da sintaxe for-each, enquanto que para a manipulação de um simples vetor é indicado a utilização do for-lenght. Desta forma, com base nas características do modelo, a ferramenta escolhe a melhor sintaxe de acordo com as boas práticas para o uso do for apresentadas na Seção 2.

8 5 Estudo de Caso Para demonstrar a nossa abordagem bem como os resultados obtidos pelo uso das boas práticas, esta seção apresenta um estudo de caso. Neste estudo, primeiramente, a aplicação Snake é modelada em UML, seguindo a nossa abordagem de modelagem proposta em [6] e realizando a engenharia reversa do código original da aplicação. Posteriormente, este modelo é usado como entrada para a ferramenta GenCode, a qual gera o código a aplicação. A aplicação escolhida está disponível no site de apoio ao desenvolvedor Android [16]. Apesar de ser uma aplicação simples, ela permite a demonstração dos principais aspectos da abordagem, bem como apontar as melhorias alcançadas com a aplicação das boas práticas. Neste estudo é demonstrada a geração de trechos de código da aplicação, focando nos pontos do código onde as práticas foram aplicadas. Primeiramente, será demonstrada a aplicação da eliminação de getters e setters, que conforme explicado na Seção 4, é realizada pelas duas rotinas de geração de código, estrutural e comportamental. Após, será demonstrada a aplicação da boa prática do for. Para facilitar a visualização das melhorias aplicadas pela geração, o código original será comparado com o código automaticamente gerado pela ferramenta. O código gerado inclui a aplicação de boas práticas (em separado) e a comparação entre estes dois códigos permite observar o impacto das otimizações. Além disso, análises de desempenho também foram realizadas, permitindo a comparação entre os códigos. A Figura 1 ilustra a visão estática da aplicação, representada pelo diagrama de classes. Nesta figura são destacadas as classes Activity, View e Handler, pertencentes ao Android. A partir das informações obtidas neste diagrama, o código estrutural foi gerado. Como a eliminação de getters e setters foi habilitada, a ferramenta realizou a análise de atributos e de seus métodos de acesso. Esta busca identificou o método settextview da classe Snake, contexto onde a boa prática que evita getters e setters deveria ser aplicada. Abaixo, são apresentados os trechos do código original e do código gerado, após a captura e análise do diagrama. O código original define o atributo como privado (modificador private) e declara o método de acesso, bem como o corpo deste método. Já o código gerado automaticamente declara este atributo como público (usando o modificador public) e não faz a declaração do método settextview.

9 Fig. 1. Diagrama de classe, representação estrutural da aplicação Snake. Trecho de código original da aplicação Snake utilizando setter private TextView textview; public void settextview(textview textview) { this.textview = textview; Trecho de código da aplicação Snake utilizando a prática que evita getters e setters public TextView textview; Para a eliminação do método settextview, porém, a ferramenta realizou uma busca entre os diagramas de sequência a fim de identificar onde este método era invocado. Para então, substituir esta invocaçãopor uma atribuição. Sem a otimização, o código que seria gerado a partir do modelo comportamental, incluiria a invocação do método settextview(), conforme trecho de código abaixo. Trecho de código original da classe SnakeView, invocação do método de acesso msnakeview.settextview(findviewbyid(r.id.text)); Enquanto que com a aplicação da boa prática, a rotina de geração do código comportamental faz a busca pela invocação do método a ser eliminado e substitui a sua chamada pelo acesso direto ao atributo, gerando o trecho de código abaixo. Trecho de código da classe SnakeView, utilizando a prática que evita getters e setters msnakeview.textview = findviewbyid(r.id.text);

10 Incl CPU Time (ms) Para a comparação da eficiência do código gerado pela nossa ferramenta com o código original do aplicativo, foi utilizada a ferramenta DDMS (Dalvik Debug Monitor Server) [17], que fornece resultados relativos ao tempo de execução de códigos Android. A DDMS gera CPU Include Time, o qual considera o tempo de execução do método analisado incluindo o tempo dos métodos chamados por este, e o CPU Exclude Time, que por sua vez, considera apenas o tempo de execução do método em análise. Todos os experimentos realizados e discutidos nesta seção foram repetidos 30 vezes, e a partir dos tempos de execução obtidos, uma média foi calculada, a qual é utilizada nas comparações realizadas. Os resultados obtidos pela análise de desempenho dos dois códigos são apresentados no gráfico ilustrado na Fig. 2, onde o eixo y representa o tempo da CPU em milissegundos (ms). Esta análise de desempenho considera o CPU Include Time fornecido pela DDMS, pois o custo da chamada do método de acesso deve ser contabilizado, neste caso. O tempo médio de execução do fragmento do código original (Fig. 2) foi de 0,8444 ms e o desvio padrão foi de 0,0276 ms, enquanto o tempo de execução do código gerado foi de 0,8030 ms e o desvio padrão de 0,30 ms. Foi utilizado o teste estatístico t de student para comparação de médias, sendo a diferença entre as médias considerada estatisticamente significativa. Neste gráfico, observa-se que o tempo de execução foi reduzido em 4,9029% pela aplicação da boa prática que evita o uso de getters e setters, o que demostra o impacto real da utilização desta boa prática. Comparação Com Setter - Sem Setter 0,88 0,86 0,84 0,82 0,8 0,78 0,76 0,74 0,72 Com Setter Sem Setter Fig. 2. Gráfico representando a diferença de desempenho na utilização de métodos de acesso. Neste estudo de caso, a aplicação da boa prática da escolha da sintaxe do for também é demonstrada. Esta boa prática é tratada apenas pela rotina de geração de código comportamental. Durante esta rotina, laços devem ser identificados nos diagramas de sequência. Para demonstrar sua aplicação é usada a representação de

11 uma pequena parcela do modelo comportamental do Snake ilustrado na Figura 3. Este diagrama de sequência se refere ao detalhamento do método enqueuedirection proveniente da classe SnakeView. Neste diagrama pode-se observar o uso de um laço de iteração no qual o objeto mnextdirectionarray é iterado. O laço é representado pelo fragmento loop. Outro fragmento interno a este, do tipo opt, representa uma condicional, que restringe a invocação do método add(direction). Fig. 3. Diagrama de sequência do método enqueuedirection da classe SnakeView. Com base nas informações contidas neste diagrama, a ferramenta aplica a boa prática e determina qual a sintaxe apropriada para a implementação da manipulação do Array mnextdirectionarray. Neste caso, a ferramenta escolhe o uso do for-each, devido ao uso de um Array junto a um laço. Abaixo são apresentados os fragmentosreferente ao laço. No código original o for normal é usado, enquanto no código gerado pela ferramenta, o for-each é usado. Trecho de código original da aplicação Snake, utilizando a sintaxe normal do for private void enqueuedirection(int direction) { int c=mnextdirectionarray.size(); for (int i=0; i<c; i++) { if (mnextdirectionarray.get(i)==0) { mnextdirectionarray.add(i,direction); break;

12 Excl CPu Time (ms) Trecho de código gerado aplicando a boa prática do for-each private void enqueuedirection(int direction) { for (Integer c : mnextdirectionarray) { if (c.equals(0)) { mnextdirectionarray.add(direction); break; Para demonstrar a melhoria em desempenho obtida pela aplicação desta otimização, foram realizados experimentos após a geração do código (considerando apenas esta otimização). Os resultados de desempenho do código original e código gerado são ilustrados no gráfico da Fig. 4. A análise de desempenho neste caso, considera o CPU Exclude Time fornecido pela DDMS, pois apenas o custo do laço deve ser contabilizado, não incluindo o custo da chamada do método adddirection(). Pode-se observar que o tempo médio de execução com o for normal (código original) foi de 59,0882 mscom desvio padrão de 1,5526 ms, enquanto o resultado utilizando o for-each (código gerado), foi de 12,4501ms, tendo o desvio padrão de 0,5249 ms. Valores médios de tempo de execução foram usados nestacomparação e a diferença entre as médias também foi considerada estatisticamente significativa. Comparação For Normal - For Each For Normal For - Each Fig. 4. Desempenho obtido pelo for normal e pelo for-each 6 Conclusões Este artigo apresenta uma abordagem MDE para geração automática de código Android eficiente a partir de modelos UML. A geração de código aplica

13 automaticamente boas práticas do Google, com o objetivo de melhorar o desempenho do código gerado. Esta geração foi prototipada em uma ferramenta de geração de código chamada GenCode [6]. A automatização destas otimizações evita que o projetista tenha de estudar as boas práticas e refatorar o código implementado para que este faça uso destas práticas e, portanto, tenha o desempenho melhorado. A abordagem é demonstrada com um estudo de caso, que também é usado para evidenciar as melhorias no desempenho obtidas com a geração de código proposta. Além da eficiência do código gerado, outros benefícios podem ser vinculados ao emprego desta abordagem, dentre estes destaca-se a abstração oferecida pelo uso de modelos UML e a automação provida pela ferramenta de geração. Além disso, a abordagem proposta utiliza notações padrão da UML, o que evita a necessidade do uso de uma ferramenta de modelagem específica. O uso do diagrama de sequência limita a geração de código comportamental proposta até o nível de chamada de métodos, que é o que pode ser expresso neste diagrama. Para obter código completo, outros diagramas precisam ser considerados na geração de código. Atualmente, nossa ferramenta implementa três das boas práticas sugeridas pelo Google. Como trabalhos futuros, pretendemos analisar a viabilidade de estender esta abordagem para outras boas práticas, priorizando aquelas que apresentam maior impacto no desempenho. Referências 1.Google. (2012) Fundamentos de uma aplicação Android. Disponível em: Acesso em: Dezembro, Kraemer, F. A. et al., Engineering android applications based on UML activities, Proceedings of the 14th international conference on Model driven engineering languages and systems (MODELS 11), Jon Whittle, Tony Clark, and Thomas Khne (Eds.). Springer- Verlag, Berlin, Heidelberg, pp , Google. (2012) Boas práticas para performance. Disponível em: Acesso em: Dezembro, Selic, B. Models, software models, and UML, UML for real: Design of embedded real time systems, vol. Boston: Kluwer Academic Publishers, pp. 1 16, Weigert, T. Practical experiences in using model-driven engineering to develop trustworthy, Computing Systems. IEEE International Conference on Sensor Networks, Ubiquitous, and Trustworthy Computing, vol. 1 (SUTC 06), 2011.

14 6.Parada, A., Brisolara, L.: A model driven approach for Android application development. SBESC, Brazilian Symposium on Computing System Engineering, Natal, Oracle. (2012) Controlling Access to Members of a Class. Disponível em: Acesso em: Dezembro, Camara, V. B., Corrêa, U. B. Performance Overhead from the Usage of Software Abstraction on Complex Embedded Systems. SBESC, Brazilian Symposium on Computing System Engineering, Florianópolis, Batyuk, L., et al. (2009) Developing and Benchmarking Native Linux Applications on Android in Mobile Wireless Middleware, Operating Systems, and Applications Vieira et al. Análise de desempenho e consumo energético para aplicações embarcadas na Plataforma Android. SBESC, Brazilian Symposiumon Computing System Engineering, Natal, Beckmann, M. Avaliação das Boas Práticas de Codificação para Plataforma Android. Trabalho de conclusão de curso. UFPel. 12.IBM. (2012) Rational Rhapsody. Disponível em: Acesso em: Dezembro, MIT. (2012) App Inventor. Disponível em: Acesso em: Dezembro, Telematica Instituut. (2012) The android modeller and code generator. Disponível em: Acesso em: Dezembro, Martin, R..: Clean Code: A hand book of Agile Software Craftsmanship,, Pearson, Boston, (2009). 16.Google. (2012) Exemplos de Aplicações Android em: Acesso em: Dezembro, Google. (2012) Using DDMS. Disponível em: Acesso em: Dezembro, 2012

Geração Automática de Código Android Eficiente a partir de Modelos UML

Geração Automática de Código Android Eficiente a partir de Modelos UML Geração Automática de Código Android Eficiente a partir de Modelos UML Abilio Gambim Parada Aline Rodrigues Tonini Lisane Brisolara de Brisolara Grupo de Arquiteturas e Circuitos Integrados - GACI Universidade

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br Java Marcio de Carvalho Victorino www.dominandoti.eng.br 3. Considere as instruções Java abaixo: int cont1 = 3; int cont2 = 2; int cont3 = 1; cont1 += cont3++; cont1 -= --cont2; cont3 = cont2++; Após a

Leia mais

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias: Arquitetura de Computadores Estrutura e Funcionamento da CPU Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Revisão dos conceitos básicos O processador é o componente vital do sistema de

Leia mais

Ciclo de Vida Clássico ou Convencional CICLOS DE VIDA DE DESENVOLVIMENTO DE SISTEMAS. Ciclo de Vida Clássico ou Convencional. Enfoque Incremental

Ciclo de Vida Clássico ou Convencional CICLOS DE VIDA DE DESENVOLVIMENTO DE SISTEMAS. Ciclo de Vida Clássico ou Convencional. Enfoque Incremental CICLOS DE VIDA DE DESENVOLVIMENTO DE SISTEMAS Elicitação Ciclo de Vida Clássico ou Convencional O Modelo Cascata Análise Ana Paula Terra Bacelo Blois Implementação Material Adaptado do Prof. Marcelo Yamaguti

Leia mais

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia. 1 Introdução aos Sistemas de Informação 2002 Aula 4 - Desenvolvimento de software e seus paradigmas Paradigmas de Desenvolvimento de Software Pode-se considerar 3 tipos de paradigmas que norteiam a atividade

Leia mais

Uma abordagem para Engenharia de Requisitos no Domínio de Software Embarcado

Uma abordagem para Engenharia de Requisitos no Domínio de Software Embarcado Workshop on Requirements Engineering WER 2013 Uma abordagem para Engenharia de Requisitos no Domínio de Software Embarcado Milena Marques, Eliane Siegert, Lisane Brisolara Universidade Federal de Pelotas

Leia mais

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação SOFT DISCIPLINA: Engenharia de Software AULA NÚMERO: 10 DATA: / / PROFESSOR: Andrey APRESENTAÇÃO O objetivo desta aula é apresentar e discutir os conceitos de coesão e acoplamento. DESENVOLVIMENTO Projetar

Leia mais

5 Mecanismo de seleção de componentes

5 Mecanismo de seleção de componentes Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações

Leia mais

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software PROCESSO DE DESENVOLVIMENTO DE SOFTWARE Introdução Modelos de Processo de Desenvolvimento de Software Os modelos de processos de desenvolvimento de software surgiram pela necessidade de dar resposta às

Leia mais

Capítulo 2. Processos de Software. 2011 Pearson Prentice Hall. Todos os direitos reservados. slide 1

Capítulo 2. Processos de Software. 2011 Pearson Prentice Hall. Todos os direitos reservados. slide 1 Capítulo 2 Processos de Software slide 1 Tópicos apresentados Modelos de processo de software. Atividades de processo. Lidando com mudanças. Rational Unified Process (RUP). Um exemplo de um processo de

Leia mais

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite [email protected] (81 )9801-6619

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite andreza.lba@gmail.com (81 )9801-6619 Tópicos em Engenharia de Software (Optativa III) AULA 2 Prof. Andrêza Leite [email protected] (81 )9801-6619 Engenharia de Software Objetivo da aula Depois desta aula você terá uma revisão sobre o

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel Ambiente de Desenvolvimento Orientação a Objetos É uma técnica de desenvolvimento de softwares que consiste em representar os elementos do mundo

Leia mais

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade Page 1 podem ser comparadas com arrays, visto que também apresentam a capacidade de armazenar referências para vários objetos. Entretanto, as coleções apresentam uma gama de funcionalidades bem maior do

Leia mais

Modelos de Sistema. 2007 by Pearson Education. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 8 Slide 1.

Modelos de Sistema. 2007 by Pearson Education. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 8 Slide 1. Modelos de Sistema Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 8 Slide 1 Objetivos Explicar por que o contexto de um sistema deve ser modelado como parte do processo de RE Descrever

Leia mais

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS ATRIBUTOS PRIVADOS Podemos usar o modificador private, para tornar um atributo privado, obtendo um controle centralizado Definimos métodos para implementar todas as lógicas que utilizam ou modificam o

Leia mais

Engenharia de Software: conceitos e aplicações. Prof. Tiago Eugenio de Melo, MSc [email protected]

Engenharia de Software: conceitos e aplicações. Prof. Tiago Eugenio de Melo, MSc tiagodemelo@gmail.com Engenharia de Software: conceitos e aplicações Prof. Tiago Eugenio de Melo, MSc [email protected] 1 Objetivos da aula Apresentar os conceitos de Engenharia de Software e explicar a sua importância.

Leia mais

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO 10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO UMA DAS GRANDES FUNÇÕES DA TECNOLOGIA É A DE FACILITAR A VIDA DO HOMEM, SEJA NA VIDA PESSOAL OU CORPORATIVA. ATRAVÉS DELA, ELE CONSEGUE

Leia mais

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE Renan Leme Nazário, Ricardo Rufino Universidade Paranaense (Unipar) Paranavaí PR - Brasil [email protected], [email protected] Resumo. Este artigo

Leia mais

DESENVOLVIMENTO DE UM APLICATIVO DO TIPO SECRETÁRIO VIRTUAL PARA A PLATAFORMA ANDROID

DESENVOLVIMENTO DE UM APLICATIVO DO TIPO SECRETÁRIO VIRTUAL PARA A PLATAFORMA ANDROID DESENVOLVIMENTO DE UM APLICATIVO DO TIPO SECRETÁRIO VIRTUAL PARA A PLATAFORMA ANDROID Maik Olher CHAVES 1 ; Daniela Costa Terra 2. 1 Graduado no curso de Tecnologia em Análise e Desenvolvimento de Sistemas

Leia mais

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. [email protected]

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS Prof. Angelo Augusto Frozza, M.Sc. [email protected] ROTEIRO 1. Conceitos de Orientação a Objetos Introdução O paradigma da POO Classes

Leia mais

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem

Leia mais

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Cronograma das Aulas. Hoje você está na aula Semana

Leia mais

Qualidade de Software

Qualidade de Software Qualidade de Software O software é algo abstrato, pois são as instruções que quando executadas atingem o propósito desejado no sistema computacional. (Algoritmo). As principais características são: Complexidade:

Leia mais

UML - Unified Modeling Language

UML - Unified Modeling Language UML - Unified Modeling Language Casos de Uso Marcio E. F. Maia Disciplina: Engenharia de Software Professora: Rossana M. C. Andrade Curso: Ciências da Computação Universidade Federal do Ceará 24 de abril

Leia mais

Introdução a Java. Hélder Nunes

Introdução a Java. Hélder Nunes Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais

Leia mais

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma:

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma: 1 Introdução A utilização de frameworks como base para a construção de aplicativos tem sido adotada pelos desenvolvedores com três objetivos básicos. Primeiramente para adotar um padrão de projeto que

Leia mais

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática Disciplina: INF 02810 Prof.: ([email protected]) Conteúdo 1. Introdução 2. Processo de Software 3. Gerência de

Leia mais

3. O NIVEL DA LINGUAGEM DE MONTAGEM

3. O NIVEL DA LINGUAGEM DE MONTAGEM 3. O NIVEL DA LINGUAGEM DE MONTAGEM Nas aulas anteriores tivemos a oportunidade de discutir dois diferentes níveis presentes na maioria dos computadores atuais. Nesta aula dedica-se a outro nível que também

Leia mais

Engenharia de Software III

Engenharia de Software III Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf ([email protected]) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,

Leia mais

Entendendo como funciona o NAT

Entendendo como funciona o NAT Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços

Leia mais

Rock In Rio - Lisboa

Rock In Rio - Lisboa Curso de Engenharia Informática Industrial Rock In Rio - Lisboa Elaborado por: Ano Lectivo: 2004/05 Tiago Costa N.º 4917 Turma: C Gustavo Graça Patrício N.º 4757 Turma: C Docente: Professora Maria Estalagem

Leia mais

2 Diagrama de Caso de Uso

2 Diagrama de Caso de Uso Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Caso de Uso (Use Case) Autoria:Aristófanes Corrêa

Leia mais

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015.

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015. Programação Funcional Capítulo 1 Introdução José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2015.1 1/13 1 Paradigmas de programação 2 Programação funcional 3 A Crise

Leia mais

Modelo Cascata ou Clássico

Modelo Cascata ou Clássico Modelo Cascata ou Clássico INTRODUÇÃO O modelo clássico ou cascata, que também é conhecido por abordagem top-down, foi proposto por Royce em 1970. Até meados da década de 1980 foi o único modelo com aceitação

Leia mais

2 Engenharia de Software

2 Engenharia de Software 20 2 Engenharia de Software 2.1 Design de Sistemas Orientados a Objetos Os Sistemas Orientados a Objetos não são mais novidade hoje em dia já estando há muitos anos no mercado. A orientação a objetos permite

Leia mais

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software.

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software. Processos de Software Objetivos Apresentar os modelos de processo de software Conjunto coerente de atividades para especificar, projetar, implementar e testar s de software Descrever os diferentes modelos

Leia mais

5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância

5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância 5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância O capítulo anterior apresentou uma discussão sobre a inclusão dos chamados learning services no processo

Leia mais

ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE

ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE Fabiana Gomes Marinho Faculdade Lourenço Filho Resumo: Na UML, a modelagem conceitual dos dados é descrita pelo diagrama de classes, que através

Leia mais

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: [email protected] CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: davidmr@ifce.edu.br CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0 AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: [email protected] CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0 SUMÁRIO 1 Conceitos Básicos... 3 1.1 O que é Software?... 3 1.2 Situações Críticas no desenvolvimento

Leia mais

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert: BRAlarmExpert Software para Gerenciamento de Alarmes A TriSolutions conta com um produto diferenciado para gerenciamento de alarmes que é totalmente flexível e amigável. O software BRAlarmExpert é uma

Leia mais

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi 5 Conclusão Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi permitir que scripts Lua instanciem e usem

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo. Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto

Leia mais

PROFESSOR: CRISTIANO MARIOTTI

PROFESSOR: CRISTIANO MARIOTTI PROFESSOR: CRISTIANO MARIOTTI Conjunto de atividades, parcialmente ordenadas, com a finalidade de obter um produto de software; Considerado um dos principais mecanismos para se obter software de qualidade

Leia mais

Sobre o Professor Dr. Sylvio Barbon Junior

Sobre o Professor Dr. Sylvio Barbon Junior 5COP088 Laboratório de Programação Aula 1 Java Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr [email protected] 1 Sobre o Professor Dr. Sylvio Barbon Junior Formação: Ciência e Engenharia da Computação (2005

Leia mais

ISHIFT: Informação em Movimento

ISHIFT: Informação em Movimento ISHIFT: Informação em Movimento Contato: www.ishift.com.br +55 51 32798159 [email protected] Somos uma empresa completa de produtos e serviços ligados à tecnologia, que procura apresentar soluções

Leia mais

DESENVOLVIMENTO DE APLICATIVO MÓVEL PARA AUXÍLIO NA PREVENÇÃO DE TRAGÉDIAS EM DECORRÊNCIA DE ENCHENTES

DESENVOLVIMENTO DE APLICATIVO MÓVEL PARA AUXÍLIO NA PREVENÇÃO DE TRAGÉDIAS EM DECORRÊNCIA DE ENCHENTES DESENVOLVIMENTO DE APLICATIVO MÓVEL PARA AUXÍLIO NA PREVENÇÃO DE TRAGÉDIAS EM DECORRÊNCIA DE ENCHENTES Autores: Luciano GONÇALVES JUNIOR, Natália Maria Karmierczak DA SILVA, Paulo César Rodacki GOMES,

Leia mais

1.6. Tratamento de Exceções

1.6. Tratamento de Exceções Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER

Leia mais

Aula 2 Revisão 1. Ciclo de Vida. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW

Aula 2 Revisão 1. Ciclo de Vida. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW Ciclo de Vida Aula 2 Revisão 1 Processo de Desenvolvimento de Software 1 O Processo de desenvolvimento de software é um conjunto de atividades, parcialmente ordenadas, com a finalidade de obter um produto

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 02 Análise e Projeto OO Edirlei Soares de Lima Análise A análise modela o problema e consiste das atividades necessárias para entender

Leia mais

O Rational Unified Process (RUP) é um processo de desenvolvimento de software inspirado no

O Rational Unified Process (RUP) é um processo de desenvolvimento de software inspirado no 1.1 RATIONAL UNIFIED PROCESS (RUP) O Rational Unified Process (RUP) é um processo de desenvolvimento de software inspirado no processo que atende pelo nome de Processo Unificado (ou UP do inglês Unified

Leia mais

Tópicos em Engenharia de Computação

Tópicos em Engenharia de Computação Tópicos em Engenharia de Computação Introdução / Revisão UML e POO (JAVA) Prof. Ivan Prof. Zagari UML Linguagem Unificada. Não é metodologia, processo ou método. Versão atual 2.0 3 categorias de Diagramas

Leia mais

Arquiteturas RISC. (Reduced Instructions Set Computers)

Arquiteturas RISC. (Reduced Instructions Set Computers) Arquiteturas RISC (Reduced Instructions Set Computers) 1 INOVAÇÕES DESDE O SURGIMENTO DO COMPU- TADOR DE PROGRAMA ARMAZENADO (1950)! O conceito de família: desacoplamento da arquitetura de uma máquina

Leia mais

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes. 1 Diagrama de Classes Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes. Um dos objetivos do diagrama de classes é definir a base para

Leia mais

Projeto de Software Orientado a Objeto

Projeto de Software Orientado a Objeto Projeto de Software Orientado a Objeto Ciclo de Vida de Produto de Software (PLC) Analisando um problema e modelando uma solução Prof. Gilberto B. Oliveira Estágios do Ciclo de Vida de Produto de Software

Leia mais

Conceitos de Banco de Dados

Conceitos de Banco de Dados Conceitos de Banco de Dados Autor: Luiz Antonio Junior 1 INTRODUÇÃO Objetivos Introduzir conceitos básicos de Modelo de dados Introduzir conceitos básicos de Banco de dados Capacitar o aluno a construir

Leia mais

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação SOFT DISCIPLINA: Engenharia de software AULA NÚMERO: 08 DATA: / / PROFESSOR: Andrey APRESENTAÇÃO O objetivo desta aula é apresentar e discutir conceitos relacionados a modelos e especificações. Nesta aula

Leia mais

Introdução ao Android

Introdução ao Android Introdução ao Android André Gustavo Duarte de Almeida docente.ifrn.edu.br/andrealmeida Parte 1 Conhecendo o Sistema e Primeiro Programa Roteiro Pré-requisitos Conceitos Básicos Configurando o Ambiente

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Professor: João Fábio de Oliveira [email protected] (41) 9911-3030 Objetivo: Apresentar o que são os Sistemas Operacionais, seu funcionamento, o que eles fazem,

Leia mais

Aula 26: Arquiteturas RISC vs. CISC

Aula 26: Arquiteturas RISC vs. CISC Aula 26: Arquiteturas RISC vs CISC Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) Arquiteturas RISC vs CISC FAC 1 / 33 Revisão Diego Passos

Leia mais

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br [email protected]

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com REVISÃO ENGENHARIA DO SOFTWARE Isac Aguiar isacaguiar.com.br [email protected] Software Sequencia de Instruções a serem seguidas ou executadas Dados e rotinas desenvolvidos por computadores Programas

Leia mais

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA RESUMO Ricardo Della Libera Marzochi A introdução ao Service Component Architecture (SCA) diz respeito ao estudo dos principais fundamentos

Leia mais

Feature-Driven Development

Feature-Driven Development FDD Feature-Driven Development Descrição dos Processos Requisitos Concepção e Planejamento Mais forma que conteúdo Desenvolver um Modelo Abrangente Construir a Lista de Features Planejar por

Leia mais

Lógica de Programação

Lógica de Programação Lógica de Programação Unidade 20 ArrayList: Operações de Busca Curso Técnico em Informática SUMÁRIO INTRODUÇÃO... 3 TIPOS DE BUSCAS... 3 BUSCA ESPECÍFICA... 3 BUSCA ABRANGENTE... 3 PROCEDIMENTO DE BUSCA...

Leia mais

Modelagemde Software Orientadaa Objetos com UML

Modelagemde Software Orientadaa Objetos com UML Modelagemde Software Orientadaa Objetos com UML André Maués Brabo Pereira Departamento de Engenharia Civil Universidade Federal Fluminense Colaborando para a disciplina CIV 2802 Sistemas Gráficos para

Leia mais

Wilson Moraes Góes. Novatec

Wilson Moraes Góes. Novatec Wilson Moraes Góes Novatec Copyright 2014 Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo,

Leia mais

MINISTÉRIO DA CIÊNCIA E TECNOLOGIA MCT MUSEU PARAENSE EMÍLIO GOELDI MPEG

MINISTÉRIO DA CIÊNCIA E TECNOLOGIA MCT MUSEU PARAENSE EMÍLIO GOELDI MPEG MINISTÉRIO DA CIÊNCIA E TECNOLOGIA MCT MUSEU PARAENSE EMÍLIO GOELDI MPEG PROJETO: DESENVOLVIMENTO DE UMA PROPOSTA DE REESTRUTURAÇÃO DO SITE DA ESTAÇÃO CIENTÍFICA FERREIRA PENNA, VISANDO ATENDER AOS PADRÕES

Leia mais

IW10. Rev.: 02. Especificações Técnicas

IW10. Rev.: 02. Especificações Técnicas IW10 Rev.: 02 Especificações Técnicas Sumário 1. INTRODUÇÃO... 1 2. COMPOSIÇÃO DO IW10... 2 2.1 Placa Principal... 2 2.2 Módulos de Sensores... 5 3. APLICAÇÕES... 6 3.1 Monitoramento Local... 7 3.2 Monitoramento

Leia mais

Extração de Requisitos

Extração de Requisitos Extração de Requisitos Extração de requisitos é o processo de transformação das idéias que estão na mente dos usuários (a entrada) em um documento formal (saída). Pode se entender também como o processo

Leia mais

EMENTA DO CURSO. Tópicos:

EMENTA DO CURSO. Tópicos: EMENTA DO CURSO O Curso Preparatório para a Certificação Oracle Certified Professional, Java SE 6 Programmer (Java Básico) será dividido em 2 módulos e deverá ter os seguintes objetivos e conter os seguintes

Leia mais

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Perola André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Prevayler é a implementação em Java do conceito de Prevalência. É um framework que prega uma JVM invulnerável

Leia mais

ENGENHARIA DE SOFTWARE DESENVOLVIMENTO EM CAMADAS

ENGENHARIA DE SOFTWARE DESENVOLVIMENTO EM CAMADAS ENGENHARIA DE SOFTWARE DESENVOLVIMENTO EM CAMADAS Uma estrutura para um projeto arquitetural de software pode ser elaborada usando camadas e partições. Uma camada é um subsistema que adiciona valor a subsistemas

Leia mais

2 echo "PHP e outros.";

2 echo PHP e outros.; PHP (Hypertext Preprocessor) Antes de qualquer coisa, precisamos entender o que é o PHP: O PHP(Hypertext Preprocessor) é uma linguagem interpretada gratuita, usada originalmente apenas para o desenvolvimento

Leia mais

O Processo Unificado: Captura de requisitos

O Processo Unificado: Captura de requisitos O Processo Unificado: Captura de requisitos Itana Gimenes Graduação em Informática 2008 Captura de Requisitos Modelagem do negócio: Visão de negócios Modelo de objetos de negócio de negócio Especificação

Leia mais

MÓDULO 9 METODOLOGIAS DE DESENVOLVIMENTO DE SISTEMAS

MÓDULO 9 METODOLOGIAS DE DESENVOLVIMENTO DE SISTEMAS MÓDULO 9 METODOLOGIAS DE DESENVOLVIMENTO DE SISTEMAS O termo metodologia não possui uma definição amplamente aceita, sendo entendido na maioria das vezes como um conjunto de passos e procedimentos que

Leia mais

Projeto de Sistemas I

Projeto de Sistemas I Instituto Federal de Educação, Ciência e Tecnologia de São Paulo Projeto de Sistemas I Professora: Kelly de Paula Cunha E-mail:[email protected] Requisitos: base para todo projeto, definindo o

Leia mais

Requisitos de Software

Requisitos de Software Requisitos de Software Centro de Informática - Universidade Federal de Pernambuco Kiev Gama [email protected] Slides originais elaborados por Ian Sommerville e adaptado pelos professores Márcio Cornélio,

Leia mais

UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTÁTISTICA GRADUAÇÃO EM CIÊNCIAS DA COMPUTAÇÃO DISCIPLINA: COMUNICAÇÃO DE DADOS

UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTÁTISTICA GRADUAÇÃO EM CIÊNCIAS DA COMPUTAÇÃO DISCIPLINA: COMUNICAÇÃO DE DADOS UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTÁTISTICA GRADUAÇÃO EM CIÊNCIAS DA COMPUTAÇÃO DISCIPLINA: COMUNICAÇÃO DE DADOS PROFESSOR: CARLOS BECKER WESTPHALL Terceiro Trabalho

Leia mais

3.1 Definições Uma classe é a descrição de um tipo de objeto.

3.1 Definições Uma classe é a descrição de um tipo de objeto. Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Classes Autoria:Aristófanes Corrêa Silva Adaptação:

Leia mais

ISO/IEC 12207: Gerência de Configuração

ISO/IEC 12207: Gerência de Configuração ISO/IEC 12207: Gerência de Configuração Durante o processo de desenvolvimento de um software, é produzida uma grande quantidade de itens de informação que podem ser alterados durante o processo Para que

Leia mais

Laboratório de Redes. Professora Marcela Santos [email protected]

Laboratório de Redes. Professora Marcela Santos marcela@edu.estacio.br Laboratório de Redes Professora Marcela Santos [email protected] Active Directory (AD) Samba Máquina virtual Criação de uma máquina virtual Instalação do Windows Server O Active Directory (AD) é um

Leia mais

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional

Introdução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional Introdução à Linguagem JAVA Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação Laboratório de Visão Computacional Vantagens do Java Independência de plataforma; Sintaxe semelhante às linguagens

Leia mais

Fábrica de Software 29/04/2015

Fábrica de Software 29/04/2015 Fábrica de Software 29/04/2015 Crise do Software Fábrica de Software Analogias costumam ser usadas para tentar entender melhor algo ou alguma coisa. A idéia é simples: compara-se o conceito que não se

Leia mais

Introdução à Engenharia de Software

Introdução à Engenharia de Software Introdução à Engenharia de Software Professor: Rômulo César [email protected] www.romulocesar.com.br Imagem Clássica Objetivo da aula Depois desta aula você terá uma visão sobre o que é a engenharia

Leia mais

Introdução à Programação de Computadores

Introdução à Programação de Computadores 1. Objetivos Introdução à Programação de Computadores Nesta seção, vamos discutir os componentes básicos de um computador, tanto em relação a hardware como a software. Também veremos uma pequena introdução

Leia mais

ENGENHARIA DE SOFTWARE I

ENGENHARIA DE SOFTWARE I ENGENHARIA DE SOFTWARE I Prof. Cássio Huggentobler de Costa [[email protected]] Twitter: www.twitter.com/cassiocosta_ Agenda da Aula (002) Metodologias de Desenvolvimento de Softwares Métodos Ágeis

Leia mais

4 O Workflow e a Máquina de Regras

4 O Workflow e a Máquina de Regras 4 O Workflow e a Máquina de Regras O objetivo do workflow e da máquina de regras é definir um conjunto de passos e regras configuráveis. Ao longo de sua execução, um usuário consegue simplificar o seu

Leia mais

Engenharia de Software. Parte I. Introdução. Metodologias para o Desenvolvimento de Sistemas DAS 5312 1

Engenharia de Software. Parte I. Introdução. Metodologias para o Desenvolvimento de Sistemas DAS 5312 1 Engenharia de Software Parte I Introdução Metodologias para o Desenvolvimento de Sistemas DAS 5312 1 Mitos do Desenvolvimento de Software A declaração de objetivos é suficiente para se construir um software.

Leia mais

Princípios de Linhas de Produtos de Software. Prof. Alberto Costa Neto [email protected]

Princípios de Linhas de Produtos de Software. Prof. Alberto Costa Neto alberto@ufs.br Princípios de Linhas de Produtos de Software Prof. Alberto Costa Neto [email protected] Surgimento das Linhas de Produtos Inicialmente produtos eram feitos artesanalmente Mas... Nº de pessoas que poderiam

Leia mais

Engenharia de Domínio baseada na Reengenharia de Sistemas Legados

Engenharia de Domínio baseada na Reengenharia de Sistemas Legados 1021 X Salão de Iniciação Científica PUCRS Engenharia de Domínio baseada na Reengenharia de Sistemas Legados Cássia Zottis¹, Profa. Dra. Ana Paula Terra Bacelo 1 (orientadora) 1 Faculdade de Informática,

Leia mais

Guia de Fatores de Qualidade de OO e Java

Guia de Fatores de Qualidade de OO e Java Qualiti Software Processes Guia de Fatores de Qualidade de OO e Java Versã o 1.0 Este documento só pode ser utilizado para fins educacionais, no Centro de Informática da Universidade Federal de Pernambuco.

Leia mais

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho 20 Capítulo 3 Avaliação de Desempenho Este capítulo aborda como medir, informar e documentar aspectos relativos ao desempenho de um computador. Além disso, descreve os principais fatores que influenciam

Leia mais

Profº. Enrique Pimentel Leite de Oliveira

Profº. Enrique Pimentel Leite de Oliveira Profº. Enrique Pimentel Leite de Oliveira O termo orientação a objetos significa organizar o mundo real como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam

Leia mais

UML Aspectos de projetos em Diagramas de classes

UML Aspectos de projetos em Diagramas de classes UML Aspectos de projetos em Diagramas de classes Após ser definido o contexto da aplicação a ser gerada. Devemos pensar em detalhar o Diagrama de Classes com informações visando uma implementação Orientada

Leia mais