GWT usando o Padrão MVP

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

Download "GWT usando o Padrão MVP"

Transcrição

1 a r t i g o Fábio Miranda (fabio@airframes.com.br) é engenheiro de computação, graduado pelo ITA em Programa em Java SE desde 2002, e desenvolve sistemas web desde Trabalha na Airframes Engenharia & Estratégia ( desde 2005, onde atua em projetos na área de aviação civil (controle de manutenção de aeronaves e auditorias de segurança de voo). Participa do fórum RioJUG e mantém o blog Uma Arquitetura de Aplicação GWT usando o Padrão MVP Diferentemente da maioria dos frameworks Web existentes, o GWT não estabelece uma forma rígida de trabalho. Pelo contrário, pode ser integrado a qualquer tecnologia server-side inclusive tecnologias não- Java! Porém, existem boas práticas que permitem que o desenvolvimento GWT seja mais organizado, testável e de fácil manutenção. Este artigo ilustra o desenvolvimento de aplicações GWT usando o padrão MVP, à luz da apresentação GWT App Architecture Best Practices, realizada no Google I/O No artigo Hello GWT!, publicado na edição anterior da revista Mundoj, a aplicação de exemplo criada automaticamente pelo Google Plugin for Eclipse (GPE) foi destrinchada passo a passo, mostrando o funcionamento básico do GWT. Foram apresentados conceitos suficientes para programar aplicações simples. Entretanto, é fundamental estabelecer uma arquitetura-base, que possa ser adotada em aplicações mais complexas. A comunidade GWT vem adotando o MVP (Model-View-Presenter) como padrão elementar em suas arquiteturas. Uma discussão mais abrangente sobre este padrão e suas diferenças em relação ao MVC (Model-View- Controller) pode ser encontrada no blog Mind Share e em artigos facilmente encontrados pela Web. Neste artigo, será adotada uma abordagem prática, através da refatoração do código do artigo Hello GWT!, de modo a alcançar os objetivos propostos pelo MVP. À medida que os objetivos forem alcançados, serão apresentados os conceitos relevantes. 48

2 Refatoração da camada de apresentação A principal responsabilidade da View é exibir a Interface Gráfica para o usuário (User Interface ou UI). Na classe Artigo (em grande parte gerada automaticamente pelo plugin do Eclipse, GPE, e trabalhada no primeiro artigo desta série, Hello GWT! ) é relativamente fácil identificar e separar o código que lida exclusivamente com a construção da UI, conforme mostrado na Listagem 1. Listagem 1. ArtigoView.java. public abstract class ArtigoAbstractView { public static interface Messages extends GreetingMessages, ServerMessages { final Messages messages = GWT.create(Messages.class); final TextBox namefield = new TextBox(); final Button sendbutton = new Button(messages.sendButtonLabel()); public void render() { Window.setTitle(messages.heading()); RootPanel.get( heading ).add(new HTML(messages.heading())); RootPanel.get( textboxlabel ).add(new Label(messages.textboxLabel())); RootPanel.get( namefieldcontainer ).add(namefield); RootPanel.get( sendbuttoncontainer ).add(sendbutton); namefield.settext(messages.defaulttextvalue()); namefield.setfocus(true); namefield.selectall(); sendbutton.addstylename( sendbutton ); insertimages(); inserttemporaryimages(); protected abstract String greet(string text, String serverinfo, String useragent); // por conveniência, foi omitido o código que lidava com imagens e i18n No primeiro artigo foi suposto que a aplicação poderia ter dois tipos de view, uma na qual a resposta seria exibida em um alert e outra na qual a resposta seria exibida em uma caixa de diálogo. A classe da Listagem 1 é abstrata e encapsula o código comum aos dois tipos de view, mostrados nas Listagens 2 e 3. Depois dessa separação forçada, o código que restou em Artigo.java deve aparecer na IDE com indicações de erros de compilação, pois o código que comandava a lógica da apresentação estava altamente acoplado aos widgets da View. Para desacoplar esta lógica, cria-se um Presenter (Listagem 4). Ele possui internamente uma interface chamada Display: uma abstração da view que ele poderá manipular, para poder alterar diretamente a exibição da Listagem 2. View utilizando Alert. public class ArtigoAlertView extends ArtigoAbstractView protected String greet(string text, String serverinfo, String useragent) { return messages.greeting(text) +!\n\n + messages.serverinfogreeting(serverinfo) + \n\n + messages.useragentgreeting() + \n + useragent; Listagem 3. View utilizando caixa de diálogo. public class ArtigoDialogView extends ArtigoAbstractView { final DialogBox dialogbox = new DialogBox(); final Label texttoserverlabel = new Label(); final HTML serverresponselabel = new HTML(); final Button closebutton = new Button(messages.closeButtonLabel()); public ArtigoDialogView() { VerticalPanel dialogvpanel = new VerticalPanel(); dialogvpanel.addstylename( dialogvpanel ); dialogvpanel.sethorizontalalignment(verticalpanel.align_right); dialogvpanel.add(new HTML( <b> + messages.sendmessage() + </b> )); dialogvpanel.add(texttoserverlabel); dialogvpanel.add(new HTML( <br><b> + messages.replymessage() + </b> )); dialogvpanel.add(serverresponselabel); closebutton.getelement().setid( closebutton ); dialogvpanel.add(closebutton); dialogbox.settext(messages.rpclabel()); dialogbox.setanimationenabled(true); dialogbox.setwidget(dialogvpanel); closebutton.addclickhandler(new ClickHandler() { public void onclick(clickevent event) { dialogbox.hide(); sendbutton.setenabled(true); sendbutton.setfocus(true); protected String greet(string text, String serverinfo, String useragent) { return messages.greeting(text) +!<br><br> + messages.serverinfogreeting(serverinfo) + <br><br> + messages.useragentgreeting() + <br> + useragent; UI, bem como para poder responder aos eventos disparados por ela. Note que o presenter não faz referência a nenhum widget concreto (baixo acoplamento com a view), todas as interações com a view são realizadas através de chamadas da interface Display. Note também que o código ficou muito mais limpo e legível, com as responsabilidades melhores organizadas, com a view encapsulando todos os widgets e o presenter lidando com as interações entre a view e o modelo. 49

3 Listagem 4. Presenter registra um handler aos eventos do Display, o qual encapsula os widgets da View. public class ArtigoPresenter { public interface Display { HasValue<String> namefield(); HasKeyUpHandlers namefieldhandler(); HasClickHandlers sendbutton(); void onsend(greetingaction action); void showfailure(); void showgreeting(greetingaction action, GreetingResponse response); private final Display display; private final GreetingServiceAsync service; public ArtigoPresenter(Display display, GreetingServiceAsync service) { this.display = display; this.service = service; binddisplay(); private void binddisplay() { Interactor handler = new Interactor(); display.sendbutton().addclickhandler(handler); display.namefieldhandler().addkeyuphandler(handler); class Interactor implements ClickHandler, KeyUpHandler { public void onclick(clickevent event) { sendnametoserver(); public void onkeyup(keyupevent event) { if (event.getnativekeycode()==keycodes.key_enter) sendnametoserver(); private void sendnametoserver() { String texttoserver = display.namefield().getvalue(); final GreetingAction action = new GreetingAction(textToServer); display.onsend(action); service.execute(action, new AsyncCallback<GreetingResponse>() { public void onfailure(throwable caught) { display.showfailure(); public void onsuccess(greetingresponse response) { display.showgreeting(action, response); ); Obviamente, ArtigoAbstractView (Listagem 1) terá que implementar a interface ArtigoPresenter.Display (Listagem 5). Nas classes das Listagens 2 e 3, é necessário implementar os métodos da interface responsáveis por lidar com a resposta do usuário, seja com alert ou caixa de diálogo, o que é mostrado nas Listagens 6 e 7. Listagem 5. AbstractArtigoView implementa os métodos da interface Presenter.Display que dão acesso aos widgets da tela que disparam eventos. public abstract class ArtigoAbstractView implements ArtigoPresenter.Display { final TextBox namefield = new TextBox(); final Button sendbutton = new Button(messages.sendButtonLabel()); // HasValue<String> namefield() { return namefield; HasKeyUpHandlers namefieldhandler() { return namefield; HasClickHandlers sendbutton() { return sendbutton; void onsend(greetingaction action) { sendbutton.setenabled(false);... Listagem 6. ArtigoDialogView implementa os métodos da interface que o Presenter utiliza para atualizar a tela, ao receber a resposta do serviço. public class ArtigoDialogView extends ArtigoAbstractView { // void onsend(greetingaction action) { super.onsend(action); texttoserverlabel.settext(action.gettexttoserver()); serverresponselabel.settext( ); void showfailure() { dialogbox.settext(messages.rpcfailure()); serverresponselabel.addstylename( serverresponselabelerror ); serverresponselabel.sethtml(messages.servererror()); closebutton.setfocus(true); void showgreeting(greetingaction action, GreetingResponse response) { dialogbox.settext(messages.rpclabel()); serverresponselabel.removestylename( serverresponselabelerror ); String text = action.gettexttoserver(); String serverinfo = response.getserverinfo(); String useragent = response.getuseragent(); serverresponselabel.sethtml(greet(text, serverinfo, useragent)); closebutton.setfocus(true); 50

4 Listagem 7. ArtigoAlertView implementa os métodos da interface que o Presenter utiliza para atualizar a tela, ao receber a resposta do serviço. public class ArtigoAlertView extends ArtigoAbstractView { //... void showfailure() { Window.alert(messages.rpcFailure() + \n\n + messages.servererror()); void showgreeting(greetingaction action, GreetingResponse response) { String text = action.gettexttoserver(); String serverinfo = response.getserverinfo(); String useragent = response.getuseragent(); Window.alert(greet(text, serverinfo, useragent)); sendbutton.setenabled(true); Listagem 8. EntryPoint, que constrói a aplicação GWT. public class Artigo implements EntryPoint { private final GreetingServiceAsync greetingservice = GWT. create(greetingservice.class); private final Display display = new ArtigoDialogView(); // private final Display display = new ArtigoAlertView(); private final ArtigoPresenter presenter = new new ArtigoPresenter(display, greetingservice); public void onmoduleload() { presenter.display.render(); Figura 1. Diagrama de componentes. Pronto! Veja o que restou ao EntryPoint (Listagem 8): ficou enxuto, encarregado apenas de construir a aplicação e conectar os elementos do MVP entre si. O presenter responde aos eventos da view e comanda o modelo, representado pelo serviço. Para alternar entre as implementações da view (escolher se a aplicação responderá ao usuário utilizando caixa de diálogo ou alert), basta comentar a linha apropriada. A troca de uma view por outra não afeta em nada a lógica do presenter! Esta aplicação é bem simples, mas é importante frisar que, em aplicações complexas, o EntryPoint é um dos possíveis lugares onde pode ser montada a aplicação, agregando seus componentes. A figura 1 mostra o Diagrama de Componentes atual da aplicação. Note que o presenter está desacoplado da view, graças à abstração obtida com a interface Display; o presenter liga (binds) um interactor aos widgets da view utilizando esta abstração; através do interactor, o presenter consegue responder aos eventos da view, comandando a contraparte assíncrona do serviço; esta deixa um AsyncCallback aguardando a resposta do servidor; e, por fim, quando a resposta chega, o presenter atualiza a view. Note que o MVP é um padrão da Camada de Apresentação. Todo código desta camada deve estar presente em source packages, os quais são compilados para JavaScript. Por padrão, todo package de prefixo client é um source package, sendo possível adicionar outros prefixos de source packages através do descritor GWT. A figura 2 mostra um modelo geral do MVP, publicado no blog Design Codes, evidenciando que o modelo pode possuir uma parte residindo no lado cliente e outra parte residindo no lado servidor. É fácil correlacionar os elementos das figuras 1 e 2, observando apenas que, no código mostrado neste artigo, a seta que aponta para o elemento Model (Client) da figura 2 é bidirecional: a view está com acesso direto aos objetos GreetingAction e GreetingReponse, que pertencem ao Model; e o modelo consegue notificar as suas mudanças para a view, ainda que indiretamente, através do AsyncCallback. Esta variação do MVP foi catalogada por Martin Fowler como Supervising Controller (figura 3). 51

5 Presenter Command Interaction Selection WEB Model Client View Model Server Database Figura 2. Diagrama MVP (retirado do blog Design Codes ) Only for complex loigc Presenter Command User Action Triggered Update display Model Query (event) View State Changed Figura 3. Supervising Controller Design Pattern (retirado do blog Design Codes ). 52

6 Desacoplamento usando Application Events Analisando a Listagem 4 e a figura 1, pode-se notar um grande esforço para desacoplar o Presenter e a View. Isto é alcançado apenas parcialmente: apesar de o presenter ter deixado de conhecer boa parte dos detalhes da view, a interface Display ainda revela muito: ela força a realização da UI através de widgets que implementam as interfaces HasValue, HasKeyUpHandler e HasClickHandler, pertencentes à biblioteca-base GWT. Isto impede, por exemplo, a construção de UIs que utilizam widgets de outras bibliotecas baseadas no GWT (por exemplo: GXT e Smart GWT), mas que não obrigatoriamente estendem as interfaces da biblioteca-base. É necessário que o presenter desempenhe seu papel de comandar a View sem estar tão fortemente acoplado à API GWT. Para contornar o problema, pode-se deslocar o interactor para a view, onde sua responsabilidade será traduzir estímulos da view em application events, eventos da aplicação. O presenter, ao invés de registrar interactors para widgets, passará a registrar tratadores ou handlers para eventos. Note, na Listagem 10, que a interface Display deixa de dar acesso aos widgets, e passa apenas a fornecer os métodos necessários para o presenter registrar os handlers. A Listagem 9 mostra como criar eventos, que devem implementar a interface GwtEvent. Também é necessário declarar uma interface que estende EventHandler para definir o contrato que os tratadores desse evento deverão realizar. A realização da interface GreetingEvent.Handler é uma classe anônima dentro do método binddisplay() na Listagem 10. A Listagem 11 mostra parte do novo código da view, implementando o método addhandler(), o que permite ao presenter registrar tratadores de application events. Em resumo: teractor: o Cria um application event GreetingEvent populado com os dados aplicáveis. o Aciona o método handler.ongreeting do tratador de eventos. do pelo presenter (Listagem 10) em uma classe anônima que realiza a interface GreetingEvent.Handler. Listagem 9. GreetingEvent e GreetingEvent.Handler estendem GwtEvent e EventHandler, pertencentes à API base do GWT. public class GreetingEvent extends GwtEvent<GreetingEvent.Handler> { public static interface Handler extends EventHandler { public void ongreeting(greetingevent event); public final String message; public GreetingEvent(String message) { this.message = message; // campo estático usado para registrar eventos em um HandlerManager public static final GwtEvent.Type<Handler> TYPE = new GwtEvent.Type<Handler>(); GwtEvent.Type<Handler> getassociatedtype() { return TYPE; // protegido, pois só deve ser invocado por HandlerManagers void dispatch(handler handler) { handler.ongreeting(this); Listagem 10. Presenter registra um Application Handler no display. public class ArtigoPresenter { public interface Display { void addhandler(greetingevent.handler handler); void render(); void showfailure(); void showgreeting(greetingaction action, GreetingResponse response); // private void binddisplay() { display.addhandler(new GreetingEvent.Handler() { void ongreeting(greetingevent event) { final GreetingAction action = new GreetingAction(event.message); service.greet(action, new AsyncCallback<GreetingResponse>() public void onfailure(throwable caught) { public void onsuccess(greetingresponse response) { display.showgreeting(action, response); ); ); 53

7 Figura 4. Diagrama de Componentes, adicionando GreetingEvent e GreetingEvent.Handler, e deslocando o Interactor para a View. Listagem 11. Na View, o método addhandler faz uso de interactors para reagir aos widget events e notificar os application handlers. public void addhandler(greetingevent.handler handler) { Interactor interactor = new Interactor(handler); namefield.addkeyuphandler(interactor); sendbutton.addclickhandler(interactor); class Interactor implements ClickHandler, KeyUpHandler { private final GreetingEvent.Handler handler; Interactor(GreetingEvent.Handler handler) { this.handler = handler; public void onclick(clickevent event) { notifyhandler(); public void onkeyup(keyupevent event) { if (event.getnativekeycode()==keycodes.key_enter) notifyhandler(); private void notifyhandler() { String texttoserver = namefield.getvalue(); handler.ongreeting(new GreetingEvent(textToServer)); Event Bus (barramento de eventos) É possível generalizar ainda mais o conceito dos application events. Eles podem ser utilizados não apenas como um meio mais adequado para o presenter reagir aos eventos da view, como também para prover um meio global de comunicação na aplicação. A esse meio global dá-se o nome de barramento de eventos (event bus). Esta técnica é ilustrada nos slides 35 a 42 da apresentação de best practices do GWT de Ray Ryani. Para exemplificar, será adicionado mais um par view/presenter à aplicação, cuja responsabilidade será listar na tela todas as mensagens enviadas pelos usuários. Portanto, o envio de mensagem deve ser capaz não só de mostrar a resposta do servidor na tela, como também atualizar a lista as mensagens. O event bus ajudará a realizar esta comunicação, mantendo desacoplados os subsistemas ou módulos da aplicação. Para implementar o barramento de eventos, pode-se utilizar a classe HandlerManager, da API GWT. Quando a aplicação necessitar notificar vários presenters para atualizarem suas views, cada presenter terá que adicionar um handler no barramento, informando o tipo de evento (application event) no qual está interessado, e o respectivo tratador (handler), que atualizará a sua view. A figura 5 ilustra o mecanismo. A Listagem 12 mostra a classe MessagesPresenter, responsável por listar as mensagens. O método initbus registra dois handlers no barramento, um para quando a aplicação é iniciada, outro para responder a notificações de novas mensagens do usuário. Quando um evento ocorre, o barramento informa a todos os tratadores registrados para o tipo do evento disparado, e cada tratador pode então atuar sobre a sua respectiva view. 54

8 Figura 5. Através do barramento, um módulo consegue notificar os demais para atualizarem seu estado em resposta a eventos da aplicação. Listagem 12. MessagesPresenter registra handlers para StartupEvent e NewMessageEvent. public class MessagesPresenter { public interface Display { void list(listgreetingresponse greetings); void fail(); void render(); public final Display display; public final GreetingServiceAsync service; public final HandlerManager eventbus; public MessagesPresenter(Display d, GreetingServiceAsync s, HandlerManager bus) { this.display = d; this.service = s; this.eventbus = bus; initbus(); private void initbus() { final AsyncCallback cb = new AsyncCallback<MessageListResponse>() { void onfailure(throwable caught) { display.fail(); void onsuccess(messagelistresponse result) { display.list(result); ; eventbus.addhandler(startupevent.type, new StartupEvent.Handler() { void onstartup() { service.list(cb); ); eventbus.addhandler(newmessageevent.type, new NewMessageEvent.Handler() { void ongreetingresponse(newmessageevent event) { service.list(cb); ); Listagem 13. ArtigoPresenter agora notifica o barramento de eventos quando o servidor responde que recebeu uma nova mensagem. public class ArtigoPresenter { //... public ArtigoPresenter(Display display, GreetingServiceAsync service, HandlerManager bus) { this.display = display; this.service = service; this.eventbus = bus; binddisplay(); private void binddisplay() { display.addhandler(new GreetingEvent.Handler() { ); void ongreeting(greetingevent event) { final GreetingAction action = new GreetingAction(event.message); service.greet(action, new AsyncCallback<GreetingResponse>() { ); public void onsuccess(greetingresponse response) { display.showgreeting(action, response); eventbus.fireevent(new NewMessageEvent()); 55

9 Listagem 14. EntryPoint, SEM Injeção de Dependências. public class Artigo implements EntryPoint { final HandlerManager eventbus = new HandlerManager(null); final GreetingServiceAsync greetservice = GWT.create(GreetingService.class); final ArtigoPresenter.Display greetdisplay = new ArtigoDialogDeclarativeView(); final MessagesPresenter.Display messagesdisplay = new MessagesView(); private final ArtigoPresenter greetpresenter = new ArtigoPresenter(greetDisplay, greetservice, eventbus); private final MessagesPresenter messagespresenter = new MessagesPresenter(messagesDisplay, greetservice, eventbus); public void onmoduleload() { greetpresenter.display.render(); messagespresenter.display.render(); eventbus.fireevent(new StartupEvent()); É necessário atualizar também a classe ArtigoPresenter (Listagem 13), para notificar o barramento quando o servidor informar o recebimento de novas mensagens. Por fim, atualiza-se o EntryPoint (Listagem 14), sem esquecer de disparar um StartupEvent no barramento de eventos quando a aplicação é iniciada. Perceba na Listagem 14 que o eventbus é injetado nos presenters através de seus respectivos construtores (assim como os displays e serviços concretos). É desejável também tornar o barramento único e global, o que pode ser realizado através do padrão Singleton. Porém, a forma mais elegante e poderosa é utilizar um container de injeção de dependências. Dependency Injection na camada de apresentação A aplicação só tem duas telas, mas a Listagem 14 já mostra que começa a ficar trabalhoso criar manualmente os objetos da aplicação, bem como gerenciar seus ciclos de vida. Para criar ArtigoPresenter e MessagesPresenter, o EntryPoint da aplicação precisa criar também as suas várias dependências: ArtigoDisplay, MessagesDisplay, GreetigServiceAsync e HandlerManager. Além de instanciá-las, é preciso passá-las como argumentos nos construtores dos respectivos presenters. Listagem 15. Interface utilizada para obter objetos com dependências injetadas pelo public interface Injector extends Ginjector { HandlerManager eventbus(); ArtigoPresenter sendmessagepresenter(); Listagem 16. Módulo que configura as dependências. EventBus marcado como Singleton. public class ArtigoModule extends AbstractGinModule { void configure() { bind(artigopresenter.display.class).to(artigodialogview.class); bind(messagespresenter.display.class).to(messagesview.class); bind(handlermanager.class).toprovider(handlermanagerprovider.class). in(singleton.class); public static class HandlerManagerProvider implements Provider<HandlerManager> { public HandlerManager get() { return new HandlerManager(null); O barramento de eventos, HandlerManager, oferece dificuldade adicional: precisa ser um Singleton, permitindo que todos os módulos tenham uma forma global, homogênea e desacoplada para se comunicarem. Todo este esforço de configuração é cansativo e muito suscetível a erros. "Entra em cena" o padrão Dependency Injection, e a biblioteca GIN GWT INjection implementação client-side da biblioteca Google Guice, para ser utilizada com o GWT. Trabalhar com GIN é semelhante a usar a API ClientBundle: clarados métodos para obter os objetos já com as suas dependências injetadas. cias (Listagem 16). se o construtor As dependências são configuradas em classes especiais chamadas módulos. Os métodos bind informam para o GIN: ao criar um objeto, caso o construtor dele tenha um argumento da interface X, injete um objeto da classe Y. É possível também pedir ao GIN para não criar os objetos, ao invés disso obtê-los em providers. Desta forma, pode-se ter controle sobre a criação do objeto. Este recurso é utilizado para criar o HandlerManager usado como barramento de eventos da aplicação. Note que também foi informado ao GIN que o barramento é um singleton, ou seja, deve criá-lo uma única vez e injetar o mesmo barramento em todos os objetos que dele dependam. Trata-se, portanto, com uma forma simples e confiável de garantir a globalidade do barramento. Por fim, não é necessário configurar os serviços no módulo. Quando uma dependência não é explicitamente configurada, o GIN tenta automaticamente criar um objeto usando chamadas GWT.create(...) neste caso, o Gin executou a chamada GWT.create(GreetingServiceAsync.class) para poder injetar o serviço no presenter. MessagesPresenter listmessagespresenter(); 56

10 Listagem 17. Dependências de ArtigoPresenter serão injetadas, via construtor, pelo // Construtor de ArtigoPresenter public ArtigoPresenter(Display display, GreetingServiceAsync service, HandlerManager bus) { this.display = display; this.service = service; this.eventbus = bus; binddisplay(); Listagem 18. Dependências de MessagesPresenter injetadas, via construtor, pelo // Construtor de MessagesPresenter public MessagesPresenter(Display display, GreetingServiceAsync service, HandlerManager bus) { this.display = display; this.service = service; this.eventbus = bus; initbus(); Compare a Listagem 14 com a Listagem 19. Quando não é usada a Injeção de Dependências, o código do EntryPoint tende a ficar cada vez mais complexo. Delegando para o GIN a responsabilidade de criar os objetos com suas respectivas dependências, a aplicação fica bem mais organizada, e menos trabalhosa de escrever/manter. Listagem 19. EntryPoint, COM Injeção de Dependências. public class Artigo implements EntryPoint { final Injector injector = GWT.create(Injector.class); public void onmoduleload() { injector.sendmessagepresenter().display.render(); injector.listmessagespresenter().display.render(); injector.eventbus().fireevent(new StartupEvent()); Conclusão Este artigo começou a ser escrito a partir da apresentação de Best Practices de Ray Ryan (Google I/O 2009), da aplicação de exemplo no Blog Hive Development e de algum entendimento sobre MVP, baseado nos conceitos apresentados no Blog Design Codes. Mesmo em posse destas fontes, materializar os conceitos teóricos em uma arquitetura prática não foi nada fácil. Até mesmo a interpretação de todo esse material, sob o prisma da teoria e dos padrões de projeto, não foi nem um pouco trivial. O grande insight ocorreu após o primeiro passo amputar, na força bruta, todo o código de View que permeava a aplicação de exemplo. A única certeza que havia era que aquele código NÃO podia estar ali. A partir daí, com mais e mais tentativas e releituras, as coisas começaram a convergir para seu devido lugar: o papel do padrão MVP na Camada de Apresentação ficou mais claro; a elegância e a flexibilidade em se trabalhar com eventos e com um barramento de notificações; o poder de usar Dependency Injection na camada de apresentação. O GWT pode ser ainda mais produtivo no cenário oposto: tendo em posse apenas os requisitos, aplicar TDD Test Driven Development para desenvolver a aplicação. Esta forma de trabalhar é bem interessante, e será abordada no próximo artigo desta série. Este artigo NÃO apresentou uma forma única de trabalhar, e possivelmente pode não ser a melhor. Pelo contrário, foi fruto de tentativas, ao longo de um árduo processo de aprendizado, no qual a única certeza era que o GWT parecia ser uma ferramenta poderosa para a criação da camada de apresentação de aplicações Web, uma forma interessante de usar todo o poder de AJAX, sem precisar lidar com Javascript. Ainda há vários caminhos para se explorar: testes unitários da camada de apresentação, criação declarativa de UIs usando UiBinder; geração de código client-side (uma espécie de instrumentação, para compensar a inexistência da API de reflection no lado cliente); experimentação das extensões do GWT (entre as quais o GXT e o Smart GWT), comparando suas APIs, seus prós e contras, modelos de licença etc.; e também um exemplo mais abrangente, simulando aplicações CRUD. Estes serão abordados em artigos futuros. Happy GWTing! Referências 57

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃO TÓPICOS AVANÇADOS EM SISTEMAS INTEGRADOS E DISTRIBUÍDOS II

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃO TÓPICOS AVANÇADOS EM SISTEMAS INTEGRADOS E DISTRIBUÍDOS II UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃO TÓPICOS AVANÇADOS EM SISTEMAS INTEGRADOS E DISTRIBUÍDOS II RELATÓRIO TÉCNICO ADORILSON BEZERRA DE ARAÚJO ANDRÉ GUSTAVO

Leia mais

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Ciência da Computação. alyssonfm@lcc.ufcg.edu.br

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Ciência da Computação. alyssonfm@lcc.ufcg.edu.br Universidade Federal de Campina Grande Departamento de Sistemas e Computação Ciência da Computação alyssonfm@lcc.ufcg.edu.br Maio - 2010 Agenda GWT Vantagens Desvantagens Exemplificação de códigos GWT

Leia mais

Padrões de Interação com o Usuário

Padrões de Interação com o Usuário Padrões de Interação com o Usuário Granularidade dos Padrões Padrões estão relacionados a 3 elementos: Contexto ocorre Problema resolve Solução Problemas e Soluções podem ser observados em diferentes níveis

Leia mais

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse Como criar um EJB Criando um projeto EJB com um cliente WEB no Eclipse Gabriel Novais Amorim Abril/2014 Este tutorial apresenta o passo a passo para se criar um projeto EJB no Eclipse com um cliente web

Leia mais

Programação Web. Professor: Diego Oliveira. Conteúdo 02: JSP e Servlets

Programação Web. Professor: Diego Oliveira. Conteúdo 02: JSP e Servlets Programação Web Professor: Diego Oliveira Conteúdo 02: JSP e Servlets JSP JSP é um template de uma página Web que usa Java para gerar HTML dinamicamente JSP é considerado server-side e roda em um objeto

Leia mais

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo; um objeto; é definido; Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo; class ClasseBase{ é instanciado; $objetobase = new ClasseBase; Caso queira,

Leia mais

Guia de utilização da notação BPMN

Guia de utilização da notação BPMN 1 Guia de utilização da notação BPMN Agosto 2011 2 Sumário de Informações do Documento Documento: Guia_de_utilização_da_notação_BPMN.odt Número de páginas: 31 Versão Data Mudanças Autor 1.0 15/09/11 Criação

Leia mais

paradigma WBC Public - compra direta Guia do Fornecedor paradigma WBC Public v6.0 g1.0

paradigma WBC Public - compra direta Guia do Fornecedor paradigma WBC Public v6.0 g1.0 paradigma WBC Public - compra direta Guia do Fornecedor paradigma WBC Public v6.0 g1.0 agosto de 2007 As informações contidas neste documento, incluíndo quaisquer URLs e outras possíveis referências a

Leia mais

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO Santa Maria, 01 de Novembro de 2013. Revisão aula passada Projeto de Arquitetura Decisões de projeto de Arquitetura

Leia mais

UM ESTUDO SOBRE OS FRAMEWORKS JSF E PRIMEFACES NO DESENVOLVIMENTO DE SOFTWARE WEB

UM ESTUDO SOBRE OS FRAMEWORKS JSF E PRIMEFACES NO DESENVOLVIMENTO DE SOFTWARE WEB UM ESTUDO SOBRE OS FRAMEWORKS JSF E PRIMEFACES NO DESENVOLVIMENTO DE SOFTWARE WEB Adriano Schulter Moenster 1, Tiago Piperno Bonetti 1 ¹Universidade Paranaense (Unipar) Paranavaí PR Brasil adrmoenster@gmail.com,

Leia mais

Exercícios de Revisão Java Básico

Exercícios de Revisão Java Básico Exercícios de Revisão Java Básico (i) Programação básica (estruturada) 1) Faça um programa para calcular o valor das seguintes expressões: S 1 = 1 1 3 2 5 3 7 99... 4 50 S 2 = 21 50 22 49 23 48...250 1

Leia mais

UML: Diagrama de Casos de Uso, Diagrama de Classes

UML: Diagrama de Casos de Uso, Diagrama de Classes UML: Diagrama de Casos de Uso, Diagrama de Classes Diagrama de Casos de Uso O modelo de casos de uso visa responder a pergunta: Que usos (funcionalidades) o sistema terá? ou Para que aplicações o sistema

Leia mais

SCE-557. Técnicas de Programação para WEB. Rodrigo Fernandes de Mello http://www.icmc.usp.br/~mello mello@icmc.usp.br

SCE-557. Técnicas de Programação para WEB. Rodrigo Fernandes de Mello http://www.icmc.usp.br/~mello mello@icmc.usp.br SCE-557 Técnicas de Programação para WEB Rodrigo Fernandes de Mello http://www.icmc.usp.br/~mello mello@icmc.usp.br 1 Cronograma Fundamentos sobre servidores e clientes Linguagens Server e Client side

Leia mais

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES Alexandre Egleilton Araújo, Jaime Willian Dias Universidade Paranaense (Unipar) Paranavaí PR Brasil araujo.ale01@gmail.com, jaime@unipar.br Resumo.

Leia mais

DELPHI 7 LINGUAGEM DE PROGRAMAÇÃO AMBIENTE CLIENTE SERVIDOR

DELPHI 7 LINGUAGEM DE PROGRAMAÇÃO AMBIENTE CLIENTE SERVIDOR DELPHI 7 LINGUAGEM DE PROGRAMAÇÃO AMBIENTE CLIENTE SERVIDOR Fortaleza - CE Introdução ao ambiente de desenvolvimento delphi e preparação da interface basíca O ambiente delphi foi criado pela Borland Software

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,

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

Implementando uma Classe e Criando Objetos a partir dela

Implementando uma Classe e Criando Objetos a partir dela Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 04 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 2 Prof. Cristóvão Cunha Implementando uma Classe

Leia mais

MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO

MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO UTILIZANDO O HIBERNATE Rafael Laurino GUERRA, Dra. Luciana Aparecida Martinez ZAINA Faculdade de Tecnologia de Indaiatuba FATEC-ID 1 RESUMO Este artigo apresenta

Leia mais

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS Ciclo de Vida de uma Aplicação Android Professor: Danilo Giacobo OBJETIVOS DA AULA Entender o ciclo de vida de uma aplicação Android. Conhecer algumas dicas para tirar

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

Exemplo: Na figura 1, abaixo, temos: Clique aqui para continuar, que é a primeira atividade que você precisa realizar para iniciar seus estudos.

Exemplo: Na figura 1, abaixo, temos: Clique aqui para continuar, que é a primeira atividade que você precisa realizar para iniciar seus estudos. Visão Geral VISÃO GERAL Esse material abordará o acesso ao AVA (Ambiente Virtual de Aprendizagem) da Proativa do Pará, com intenção de ilustrar os aspectos na visão do Aprendiz. Essa abordagem dedica-se

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

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame 6. Como aplicações gráficas funcionam em Java? Todas as aplicações gráficas em Java usam instâncias de classes existentes, que por serem parte da linguagem podem ser executadas em todas as versões de Java

Leia mais

Usando o do-file editor Automatizando o Stata

Usando o do-file editor Automatizando o Stata Usando o do-file editor Automatizando o Stata 1 O QUE É O EDITOR DE DO-FILE O Stata vem com um editor de texto integrado, o do-file editor (editor de do-files, em português), que pode ser usado para executar

Leia mais

MANUAL DA SECRETARIA

MANUAL DA SECRETARIA MANUAL DA SECRETARIA Conteúdo Tela de acesso... 2 Liberação de acesso ao sistema... 3 Funcionários... 3 Secretaria... 5 Tutores... 7 Autores... 8 Configuração dos cursos da Instituição de Ensino... 9 Novo

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

ORIENTAÇÕES PARA O PREENCHIMENTO DO QUESTIONÁRIO POR MEIO DA WEB

ORIENTAÇÕES PARA O PREENCHIMENTO DO QUESTIONÁRIO POR MEIO DA WEB ORIENTAÇÕES PARA O PREENCHIMENTO DO QUESTIONÁRIO POR MEIO DA WEB 1 Com finalidade de auxiliar nas respostas às perguntas formuladas ou de esclarecer alguma dúvida sobre questões que não foram expressas

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 6 EJB Enterprise Java

Leia mais

UNICE Ensino Superior Linguagem de Programação Ambiente Cliente Servidor.

UNICE Ensino Superior Linguagem de Programação Ambiente Cliente Servidor. UNICE Ensino Superior Linguagem de Programação Ambiente Cliente Servidor. Modelo Cliente/Servidor Por HIARLY ALVES Fortaleza - CE Apresentação. O mais famoso tipo de arquitetura utilizada em redes de computadores

Leia mais

Java para Desenvolvimento Web

Java para Desenvolvimento Web Java para Desenvolvimento Web Servlets A tecnologia Servlet foi introduzida pela Sun Microsystems em 1996, aprimorando e estendendo a funcionalidade e capacidade de servidores Web. Servlets é uma API para

Leia mais

Prototype, um Design Patterns de Criação

Prototype, um Design Patterns de Criação Prototype, um Design Patterns de Criação José Anízio Pantoja Maia Este artigo tem como finalidade compreender o funcionamento do padrão de projeto prototype, serão abordados os participantes que compõe

Leia mais

Capítulo 8. Introdução UML

Capítulo 8. Introdução UML Capítulo 8. Introdução UML 1/42 Índice Indice 8.1 - Introdução UML 8.2 - Modelação estrutural 8.2.1 - Representação de classes e objectos 8.2.2 - Relações entre objectos 8.2-3 - Relações de associação

Leia mais

agility made possible

agility made possible RESUMO DA SOLUÇÃO Utilitário ConfigXpress no CA IdentityMinder a minha solução de gerenciamento de identidades pode se adaptar rapidamente aos requisitos e processos de negócio em constante mudança? agility

Leia mais

Curso de Aprendizado Industrial Desenvolvedor WEB

Curso de Aprendizado Industrial Desenvolvedor WEB Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos II Professor: Cheli dos S. Mendes da Costa Modelo Cliente- Servidor Modelo de Aplicação Cliente-servidor Os

Leia mais

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva 1. O que são Serviços Web (Web Services)? Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva A ideia central dos Web Services parte da antiga necessidade

Leia mais

Conectar diferentes pesquisas na internet por um menu

Conectar diferentes pesquisas na internet por um menu Conectar diferentes pesquisas na internet por um menu Pré requisitos: Elaboração de questionário Formulário multimídia Publicação na internet Uso de senhas na Web Visualização condicionada ao perfil A

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

LÓGICA DE PROGRAMAÇÃO. Professor Celso Masotti http://ead.celsomasotti.com.br

LÓGICA DE PROGRAMAÇÃO. Professor Celso Masotti http://ead.celsomasotti.com.br LÓGICA DE PROGRAMAÇÃO Professor Celso Masotti http://ead.celsomasotti.com.br Ano: 2015 1 HTML & PHP em Ambiente Web PARTE II Sumário I Decisão... 4 Operadores de Comparação... 6 II IF ELSEIF ELSE... 7

Leia mais

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP Software cliente: browser e outros Protocolo HTTP Infraestrutura de transporte

Leia mais

Manual de Comunidades RIPALC

Manual de Comunidades RIPALC Manual de Comunidades RIPALC Última atualização 13 de março de 2012 1 Sumário 1. Como se autenticar no site?...3 2. Como funcionam as comunidades?...4 3. Como participar de um Fórum (Painel de Discussão)?...6

Leia mais

Notas da Aula 6 - Fundamentos de Sistemas Operacionais

Notas da Aula 6 - Fundamentos de Sistemas Operacionais 1. Monitores Notas da Aula 6 - Fundamentos de Sistemas Operacionais Embora os semáforos sejam uma boa solução para o problema da exclusão mútua, sua utilização não é trivial. O programador é obrigado a

Leia mais

ABORDAGEM DE FRAMEWORKS PARA JSF QUE AUXILIAM O DESENVOLVIMENTO DE SOFTWARE

ABORDAGEM DE FRAMEWORKS PARA JSF QUE AUXILIAM O DESENVOLVIMENTO DE SOFTWARE ABORDAGEM DE FRAMEWORKS PARA JSF QUE AUXILIAM O DESENVOLVIMENTO DE SOFTWARE Amarildo Aparecido Ferreira Junior 1, Ricardo Ribeiro Rufino 1 ¹Universidade Paranaense (Unipar) Paranavaí PR Brasil aapfjr@gmail.com

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 01 Orientação a Objetos Edirlei Soares de Lima Paradigmas de Programação Um paradigma de programação consiste na filosofia adotada na

Leia mais

Projeto ECA na Escola - Plataforma de Educação à Distância

Projeto ECA na Escola - Plataforma de Educação à Distância Página1 Apresentação Projeto ECA na Escola - Plataforma de Educação à Distância Olá Participante do Projeto ECA na Escola, Este tutorial pretende auxiliá-lo na navegação na Plataforma de Educação à Distância

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

PESQUISA EM INFORMÁTICA -ESTILOS DE PESQUISA EM COMPUTAÇÃO. Prof. Angelo Augusto Frozza, M.Sc.

PESQUISA EM INFORMÁTICA -ESTILOS DE PESQUISA EM COMPUTAÇÃO. Prof. Angelo Augusto Frozza, M.Sc. PESQUISA EM INFORMÁTICA -ESTILOS DE PESQUISA EM COMPUTAÇÃO Prof. Angelo Augusto Frozza, M.Sc. O TRABALHO DE CONCLUSÃO Introdução O texto que segue resume os Capítulo 2 e 8, do livro Metodologia de Pesquisa

Leia mais

Computação II Orientação a Objetos

Computação II Orientação a Objetos Computação II Orientação a Objetos Fabio Mascarenhas - 2014.1 http://www.dcc.ufrj.br/~fabiom/java Introdução Esse não é um curso de Java! O objetivo é aprender os conceitos da programação orientada a objetos,

Leia mais

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos TUTORIAL Barra de LEDs Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

Módulo 07 Características Avançadas de Classes

Módulo 07 Características Avançadas de Classes Módulo 07 Características Avançadas de Classes Última Atualização: 15/06/2010 1 Objetivos Descrever variáveis, métodos e iniciadores static Descrever a semântica do modificador final em classes, métodos

Leia mais

Criando um script simples

Criando um script simples Criando um script simples As ferramentas de script Diferente de muitas linguagens de programação, você não precisará de quaisquer softwares especiais para criar scripts de JavaScript. A primeira coisa

Leia mais

MVC e Camadas - Fragmental Bliki

MVC e Camadas - Fragmental Bliki 1 de 5 20-03-2012 18:32 MVC e Camadas From Fragmental Bliki Conteúdo 1 Introdução 2 Camadas: Separação Entre Componentes 3 MVC: Interação Entre Componentes 4 Conclusão 5 Referências Introdução A Arquitetura

Leia mais

MINISTÉRIO DO DESENVOLVIMENTO AGRÁRIO SUBSECRETARIA DE PLANEJAMENTO, ORÇAMENTO E ADMINISTRAÇÃO COORDENAÇÃO GERAL DE MODERNIZAÇÃO E INFORMÁTICA SISAU

MINISTÉRIO DO DESENVOLVIMENTO AGRÁRIO SUBSECRETARIA DE PLANEJAMENTO, ORÇAMENTO E ADMINISTRAÇÃO COORDENAÇÃO GERAL DE MODERNIZAÇÃO E INFORMÁTICA SISAU MINISTÉRIO DO DESENVOLVIMENTO AGRÁRIO SUBSECRETARIA DE PLANEJAMENTO, ORÇAMENTO E ADMINISTRAÇÃO COORDENAÇÃO GERAL DE MODERNIZAÇÃO E INFORMÁTICA SISAU SISTEMA DE ATENDIMENTO AO USUÁRIO MANUAL DO USUÁRIO

Leia mais

Aula 03 - Projeto Java Web

Aula 03 - Projeto Java Web Aula 03 - Projeto Java Web Para criação de um projeto java web, vá em File/New. Escolha o projeto: Em seguida, na caixa Categorias selecione Java Web. Feito isso, na caixa à direita selecione Aplicação

Leia mais

Aleph. Entre Bibliotecas. Reunião da REJE 09 de novembro de 2011

Aleph. Entre Bibliotecas. Reunião da REJE 09 de novembro de 2011 Aleph Empréstimo Entre Bibliotecas Reunião da REJE 09 de novembro de 2011 1. Conceitos e definições 2 Para que serve o módulo de EEB? Para que a Biblioteca possa receber solicitações de seus usuários de

Leia mais

Engenharia de Software II

Engenharia de Software II Engenharia de Software II Aula 28 Revisão para a Prova 2 http://www.ic.uff.br/~bianca/engsoft2/ Aula 28-28/07/2006 1 Matéria para a Prova 2 Gestão de projetos de software Conceitos (Cap. 21) Métricas (Cap.

Leia mais

PADRÕES DE PROJETO. Prof.: Jean Carlo Mendes carlomendes@yahoo.com.br http://www.jeancarlomendes.com.br

PADRÕES DE PROJETO. Prof.: Jean Carlo Mendes carlomendes@yahoo.com.br http://www.jeancarlomendes.com.br PADRÕES DE PROJETO Prof.: Jean Carlo Mendes carlomendes@yahoo.com.br http://www.jeancarlomendes.com.br Implementação Padrões Factory Vamos utilizar o exemplo do livro Head First! Design Patterns e implementá-lo

Leia mais

Introdução a Banco de Dados Aula 03. Prof. Silvestri www.eduardosilvestri.com.br

Introdução a Banco de Dados Aula 03. Prof. Silvestri www.eduardosilvestri.com.br Introdução a Banco de Dados Aula 03 Prof. Silvestri www.eduardosilvestri.com.br Arquiteturas de Banco de Dados Arquiteturas de BD - Introdução Atualmente, devem-se considerar alguns aspectos relevantes

Leia mais

2 Ferramentas Utilizadas

2 Ferramentas Utilizadas 2 Ferramentas Utilizadas Esta dissertação utiliza vários outros trabalhos para implementar os mecanismos de adaptação abordados. Essas ferramentas são descritas nas seções seguintes. 2.1 Lua Lua [7, 8]

Leia mais

MOCKITO - - Alexandre Gazola (alexandregazola@gmail.com / Twitter: @alexandregazola)

MOCKITO - - Alexandre Gazola (alexandregazola@gmail.com / Twitter: @alexandregazola) cinto de utilidades mocks_ CRIAÇÃO DE MOCKS COM MOCKITO No último artigo desta coluna, falamos de uma forma geral sobre diversas ferramentas para suporte a testes automatizados. Dentre as ferramentas mencionadas,

Leia mais

3 Qualidade de Software

3 Qualidade de Software 3 Qualidade de Software Este capítulo tem como objetivo esclarecer conceitos relacionados à qualidade de software; conceitos estes muito importantes para o entendimento do presente trabalho, cujo objetivo

Leia mais

Como o FIT funciona. FIT: Framework for Integrated Tests FIT. http://fit.c2.com. Dados de testes. Programa. Fixtures. classes. Resultados de testes

Como o FIT funciona. FIT: Framework for Integrated Tests FIT. http://fit.c2.com. Dados de testes. Programa. Fixtures. classes. Resultados de testes Como o FIT funciona FIT: Framework for Integrated Tests http://fit.c2.com Dados de testes Fixtures Programa classes FIT Resultados de testes Universidade Portucalense Engenharia de Software ES04 2014-2015

Leia mais

Acessando o SVN. Soluções em Vendas Ninfa 2

Acessando o SVN. Soluções em Vendas Ninfa 2 Acessando o SVN Para acessar o SVN é necessário um código de usuário e senha, o código de usuário do SVN é o código de cadastro da sua representação na Ninfa, a senha no primeiro acesso é o mesmo código,

Leia mais

Aula 06 Usando controles em ASP.NET

Aula 06 Usando controles em ASP.NET Tecnologia em Análise e Desenvolvimento de Sistemas Disciplina: Linguagem de Programação Plataforma.NET 2 Aula 06 Usando controles em ASP.NET Nas propriedades do FORM temos a opções EnableViewState. Esta

Leia mais

Manual de Publicação Wordpress

Manual de Publicação Wordpress Fundação Universidade Federal de Mato Grosso do Sul Manual de Publicação Wordpress Núcleo de Tecnologia da Informação - UFMS Maurílio Mussi Montanha 2014 Sumário 1 Introdução... 3 2 ACESSO À INTERFACE

Leia mais

Resolução da lista de exercícios de casos de uso

Resolução da lista de exercícios de casos de uso Resolução da lista de exercícios de casos de uso 1. Explique quando são criados e utilizados os diagramas de casos de uso no processo de desenvolvimento incremental e iterativo. Na fase de concepção se

Leia mais

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS Tratamento de Eventos Professor: Danilo Giacobo OBJETIVOS DA AULA Apresentar os modelos mais comuns de tratamento de eventos da plataforma Android. Aprender a utilizar

Leia mais

Capítulo 3. Redes Sociais 24

Capítulo 3. Redes Sociais 24 3 Redes Sociais No contexto da Internet, redes sociais podem ser definidas como locais (sites) em que pessoas se conectam umas às outras através de laços sociais baseados em afinidades, interesses em comum

Leia mais

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger O controle da entrada e saída (E/S ou I/O, input/output) de dados dos dispositivos é uma das funções principais de um sistema operacional.

Leia mais

Manual do Desktop Sharing. Brad Hards Tradução: Marcus Gama

Manual do Desktop Sharing. Brad Hards Tradução: Marcus Gama Brad Hards Tradução: Marcus Gama 2 Conteúdo 1 Introdução 5 2 O protocolo do Buffer de Quadro Remoto (Buffer de Quadro Remoto) 6 3 Usando o Desktop Sharing 7 3.1 Gerenciando convites do Desktop Sharing........................

Leia mais

Análise e Projeto Orientado a Objetos

Análise e Projeto Orientado a Objetos Análise e Projeto Orientado a Objetos Linguagem UML Modelagem Estrutural Modelagem Estrutural Anderson Belgamo Classes Definição: uma classe é uma descrição de um conjunto de objetos que compartilham os

Leia mais

Instalação do Sirius sem estações. O primeiro passo é instalar o Firebird 1.5, ele se encontra no CD de instalação do Sirius na pasta Firebird.

Instalação do Sirius sem estações. O primeiro passo é instalar o Firebird 1.5, ele se encontra no CD de instalação do Sirius na pasta Firebird. Instalação do Sirius sem estações 1. Instalando o Firebird...1 2. Instalando o Sirius...7 3. Configurações do Sirius:...11 Configuração dos arquivos do Sirius e Firebird...12 Firebird:...12 Sirius:...13

Leia mais

Documentação Usando o Javadoc

Documentação Usando o Javadoc Documentação Usando o Javadoc Prof. MSc. João Carlos Pinheiro jcpinheiro@cefet-ma.br Versão 2.1 Última Atualização: 04/2005 1 Comentários e Documentação Comentários em Java Existem três tipos de comentários

Leia mais

DALUA: BIBLIOTECA PARA APLICAÇÕES DISTRIBUÍDAS

DALUA: BIBLIOTECA PARA APLICAÇÕES DISTRIBUÍDAS DALUA: BIBLIOTECA PARA APLICAÇÕES DISTRIBUÍDAS Aluno: Ricardo Gomes Leal Costa Orientadora: Noemi de la Rocque Rodriguez Introdução A biblioteca DALua [1], fruto do projeto anterior, tem por objetivo oferecer

Leia mais

Prova Específica Cargo Desenvolvimento

Prova Específica Cargo Desenvolvimento UNIVERSIDADE FEDERAL DO PIAUÍ Centro de Educação Aberta e a Distância CEAD/UFPI Rua Olavo Bilac 1148 - Centro CEP 64.280-001 Teresina PI Brasil Fones (86) 3215-4101/ 3221-6227 ; Internet: www.uapi.edu.br

Leia mais

Themis Serviços On Line - Publicações

Themis Serviços On Line - Publicações Nome do documento Guia do Usuário Themis Serviços On Line - Publicações Sumário Introdução:... 3 1 - Cadastro dos Usuários do Themis Serviços On Line:... 3 2 - Acesso ao Sistema Themis Serviços On Line:...

Leia mais

Guia rápido de criação e gestão de um espaço no SAPO Campus

Guia rápido de criação e gestão de um espaço no SAPO Campus Guia rápido de criação e gestão de um espaço no SAPO Campus O SAPO Campus é uma plataforma online, disponível em http://campus.sapo.pt, que permite a comunicação e a colaboração entre membros de uma Instituição

Leia mais

Neste artigo, serão apresentados os principais conceitos sobre os TRIGGERS e sua aplicabilidade.

Neste artigo, serão apresentados os principais conceitos sobre os TRIGGERS e sua aplicabilidade. www.devm edia.com.br [versão para im pressão] MySQL TRIGGERS Neste artigo, serão apresentados os principais conceitos sobre os TRIGGERS e sua aplicabilidade. MySQL TRIGGERS Neste artigo, serão apresentados

Leia mais

O Processo de Engenharia de Requisitos

O Processo de Engenharia de Requisitos UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA O Processo de Engenharia de Requisitos Engenharia de Software 2o.

Leia mais

Análise de Programação

Análise de Programação Análise de Programação Conceitos Avançados da Linguagem de Programação Java Prof Gilberto B Oliveira Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros

Leia mais

MANUAL DE UTILIZAÇÃO DO TREINAMENTO EAD (Educação a Distância) ÍNDICE

MANUAL DE UTILIZAÇÃO DO TREINAMENTO EAD (Educação a Distância) ÍNDICE MANUAL DE UTILIZAÇÃO DO TREINAMENTO EAD (Educação a Distância) ÍNDICE FORMAS DE ACESSO AO AMBIENTE EAD... 2 O AMBIENTE EAD... 3 TERMO DE COMPROMISSO... 4 CONHECENDO A HOME PAGE DO TREINAMENTO EAD... 4

Leia mais

Respondendo a eventos

Respondendo a eventos Respondendo a eventos Até agora, a maioria dos scripts que você escreveu foi executado de uma forma tranqüila e ordenada, movendo-se da primeira instrução para a última. Agora aprenderemos a utilizar a

Leia mais

Padrões de Projeto WEB e o MVC

Padrões de Projeto WEB e o MVC Padrões de Projeto WEB e o MVC Padrões de Projeto WEB e o MVC O que são padrões? "Cada padrão descreve um problema que ocorre freqüentemente em seu ambiente, e então descreve o cerne da solução para aquele

Leia mais

Boletim Eletrônico de Recolhimento Manual do Sistema. Boletim Eletrônico de Recolhimento. Manual do Sistema

Boletim Eletrônico de Recolhimento Manual do Sistema. Boletim Eletrônico de Recolhimento. Manual do Sistema Boletim Eletrônico de Recolhimento Manual do Sistema Versão 1.2 Junho / 2013 Sumário 1. Introdução... - 3-2. O Sistema BOLETIM ELETRÔNICO DE RECOLHIMENTO... - 3-3. Pré-requisitos... - 3-4. Primeiro Acesso...

Leia mais

UM ESTUDO PARA A EVOLUÇÃO DO PHP COM A LINGUAGEM ORIENTADA A OBJETOS

UM ESTUDO PARA A EVOLUÇÃO DO PHP COM A LINGUAGEM ORIENTADA A OBJETOS UM ESTUDO PARA A EVOLUÇÃO DO PHP COM A LINGUAGEM ORIENTADA A OBJETOS Jean Henrique Zenzeluk* Sérgio Ribeiro** Resumo. Este artigo descreve os conceitos de Orientação a Objetos na linguagem de programação

Leia mais

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano Programação Servidor para Sistemas Web 1 Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano Objetivo: Apresentar a teoria por trás dos padrões na construção de aplicações Web. INTRODUÇÃO Nas aulas anteriores

Leia mais

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010 Módulo 02 Programação Orientada a Objetos Última atualização: 07/06/2010 1 Objetivos Definir conceitos de orientação a objetos: o abstração, encapsulamento, pacotes. Discutir reutilização de código em

Leia mais

Agentes Inteligentes segundo o Chimera

Agentes Inteligentes segundo o Chimera Agentes Inteligentes segundo o Chimera C Heuristic I M E R A No ambiente de desenvolvimento de Agentes Inteligentes Chimera, uma extensão do LPA Win-Prolog, um agente é funcionalmente composto por: Código,

Leia mais

UML Unified Modeling Language. Professor: André Gustavo Bastos Lima

UML Unified Modeling Language. Professor: André Gustavo Bastos Lima UML Unified Modeling Language Professor: André Gustavo Bastos Lima Diagramas de Casos de Uso Professor: André Gustavo Bastos Lima DEFINIÇÃO DE CASO DE USO Segundo o RUP: Um Caso de Uso é a relação de uma

Leia mais

BR DOT COM SISPON: MANUAL DO USUÁRIO

BR DOT COM SISPON: MANUAL DO USUÁRIO BR DOT COM SISPON: MANUAL DO USUÁRIO BAURU 2015 2 BR DOT COM SISPON: MANUAL DO USUÁRIO Manual do usuário apresentado para auxiliar no uso do sistema SisPon. BAURU 2015 3 SUMÁRIO 1 Instalação... 5 1.1 Sispon...

Leia mais

UML & Padrões Aula 3. UML e Padrões - Profª Kelly Christine C. Silva

UML & Padrões Aula 3. UML e Padrões - Profª Kelly Christine C. Silva UML & Padrões Aula 3 UML e Padrões - Profª Kelly Christine C. Silva 1 UML & Padrões Aula 3 Diagrama de Casos de Uso Profª Kelly Christine C. Silva O que vamos tratar: Modelos de Caso de Uso Diagrama de

Leia mais

Manual do Teclado de Satisfação Online WebOpinião

Manual do Teclado de Satisfação Online WebOpinião Manual do Teclado de Satisfação Online WebOpinião Versão 1.2.3 27 de novembro de 2015 Departamento de Engenharia de Produto (DENP) SEAT Sistemas Eletrônicos de Atendimento 1. Introdução O Teclado de Satisfação

Leia mais

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues Modelo De Desenvolvimento De Software É uma representação abstrata do processo de desenvolvimento que define como as etapas relativas ao desenvolvimento de software serão conduzidas e interrelacionadas

Leia mais

Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser

Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser A1Criando um módulo de negócio Capítulo 27 Aplicação dividida em módulos - Introdução Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser compreendido como uma solução de

Leia mais

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015 Manipulação de Banco de Dados com Java Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015 Acesso a um SGBD Em sistemas mais simples o uso de arquivos pode ser usado mas para aplicações

Leia mais

Fundamentos de Teste de Software

Fundamentos de Teste de Software Núcleo de Excelência em Testes de Sistemas Fundamentos de Teste de Software Módulo 2- Teste Estático e Teste Dinâmico Aula 4 Projeto de Teste 1 SUMÁRIO INTRODUÇÃO... 3 ANÁLISE E PROJETO DE TESTE... 3 1.

Leia mais

1. Explicando Roteamento um exemplo prático. Através da análise de uns exemplos simples será possível compreender como o roteamento funciona.

1. Explicando Roteamento um exemplo prático. Através da análise de uns exemplos simples será possível compreender como o roteamento funciona. Aula 14 Redes de Computadores 24/10/07 Universidade do Contestado UnC/Mafra Sistemas de Informação Prof. Carlos Guerber ROTEAMENTO EM UMA REDE DE COMPUTADORES A máscara de sub-rede é utilizada para determinar

Leia mais

Manual de Instalação SIM/SINASC

Manual de Instalação SIM/SINASC Manual de Instalação SIM/SINASC Agosto/2009 Versão 2.2 Índice CAPÍTULO 01 INTRODUÇÃO... 4 CAPÍTULO 02 - PERFIL DO HARDWARE... 5 CAPÍTULO 03 INSTALADOR SIM SINASC 2.2... 6 CAPÍTULO 04 - MODO DE INSTALAÇÃO...

Leia mais