SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
Anhanguera Educacional Ltda.
Correspondência/Contato
Alameda Maria Tereza, 4266
Valinhos, SP - CEP 13278-181
rc.ipade@aesapar.com
Coordenação
Instituto de Pesquisas Aplicadas e
Desenvolvimento Educacional - IPADE
Publicação: 13 de setembro de 2012
Trabalho realizado com o incentivo e
fomento da Anhanguera Educacional
ANHANGUERA EDUCACIONAL
RESUMO
A proposta para este projeto de pesquisa é apresentar o
modelo de desenvolvimento de software orientado a
objetos denominado MVC (Model-View-Controller) como
um padrão de projeto composto, utilizando os designs
patterns Observer, Composite e Strategy. A utilização
do modelo de desenvolvimento MVC no
desenvolvimento de softwares, têm-se apresentado
com uma ferramenta interessante quando se pensa em
produtividade e padronização de metodologias
aplicadas na elaboração de projetos de diversos portes.
Seu objetivo é definir as responsabilidades de seus
participantes e demostrar como ocorrem suas relações.
Para o desenvolvimento, será realizado um
levantamento bibliográfico, agregando as principais
ideias apresentadas em livros e artigos publicados ao
longo do tempo, resultando na melhor compreensão de
sua arquitetura e definição das vantagens e
desvantagens de sua aplicação. Este trabalho
demonstrará as características desta metodologia
primeiramente através de um estudo das componentes
que formam o MVC e apresentará uma simulação da
utilização e criação de um projeto utilizando esta
metodologia através de uma linguagem de
programação orientada a objetos.
Palavras-Chave – MVC; Padrões de Projeto; Engenharia de
software; Análise de Sistemas; Programação.
1
ANUÁRIO DA PRODUÇÃO DE
INICIAÇÃO CIENTÍFICA DISCENTE
Vol. 0, N. 0, Ano 2013
ENTENDENDO A TRÍADE MODEL-VIEW-CONTROLLER (MVC)
UTILIZANDO PADRÕES DE PROJETO DE SOFTWARE
ORIENTADO A OBJETOS
2 (não alterar)
1. INTRODUÇÃO
O paradigma MVC foi desenvolvido para construir interfaces gráficas em
Smalltalk por Trygve Reenskaug enquanto trabalhava na Xerox PARC.
Utilizado em diversas plataformas de desenvolvimento, este padrão de
desenvolvimento contribuiu para a criação de sistemas pioneiros que
marcaram historia como o Apple Lisa e Macintosh, além de contribuir para a
na evolução dos serviços baseadas na internet como o Twitter.
O MVC consiste em dividir o código do software em segmentos
funcionais para tornar a aplicação pronta para atender a mudanças de forma
rápida, realização de testes unitários e ampliações sem afetar o código já
pronto, mantendo o limite entre três camadas, o Modelo, a Visualização e o
Controlador.
Utilizando os padrões de projeto de software orientado a objetos,
podemos definir o MVC como um padrão composto, pois utiliza
simultaneamente os padrões Observer, Composite e Strategy, que estão
catalogados no livro “Design Patterns: Elements of Reusable Object-Oriented
Software”, escrito por Erich Gamma, Richard Helm, Ralph Johnson e John
Vlissides, a chamada “gangue os quatro”.
Este artigo está organizado em seções. A primeira seção é essa
introdução, a seção 2 apresenta os objetivos da pesquisa. A metodologia
utilizada na realização da pesquisa é apresentada na seção 3. As informações
relacionadas ao desenvolvimento da pesquisa como a revisão de literatura, o
problema abordado, a solução proposta e implementada são mostradas na
seção 4. A forma de abordar os experimentos, os resultados e as discussões
são descritos na seção 5. Por fim, as considerações finais estão são
apresentadas na seção 6.
2. OBJETIVO
Tendo em vista importância do MVC na engenharia de software e a dificuldade
de muitos programadores de compreender seu funcionamento ao se utilizar
uma abordagem superficial, este artigo tem como objetivo apresentá-lo como
um padrão de projeto de software orientado a objeto composto, agrupando os
padrões Observer, Composite e Strategy para a estruturação de suas
camadas, criando uma visão mais detalhada de cada participante e dos
relacionamentos do modelo.
Anuário da Produção de Iniciação Científica Discente • p. 1-10 (não alterar)
(não alterar) 3
3. METODOLOGIA
Para o desenvolvimento do trabalho proposto, a metodologia consiste em uma
pesquisa do tipo exploratória, realizando um levantamento bibliográfico por
meio de livros e artigos de autores famosos no meio do desenvolvimento de
software, como Eric Gamma, Trygve Reenskaug, Eric Freeman e Harvey M.
Deitel. A pesquisa também se baseia na interpretação das idéias propostas
por estes pesquisadores, a fim de agrupá-las para resolução do mesmo
problema.
4. DESENVOLVIMENTO
O modelo MVC é constituído por três tipos de objetos, o modelo (Model) é a
razão da existência do aplicativo, armazenando toda lógica de negócios e
dados do sistema, a visão (View) é a representação do modelo gerando a
saída gráfica de forma adequada ao usuário, e o controlador (Controller), que
faz a mediação entre as camadas, interpretando a entrada de dados e
gerenciando o modelo e a visão.
Figura 1 – Diagrama do MVC
1.1. Padrões de Projeto
Também denominado Design Pattern, segundo Gamma (1995) “um padrão de
projeto de software nomeia, abstrai e identifica os aspectos-chave de uma
estrutura de projeto comum para torná-lo útil para a criação de um projeto
orientado a objetos reutilizável. O padrão de projeto identifica as classes e
instancias participantes, seus papeis, colaborações e as distribuição de
responsabilidades”.
Padrões são catalogados descrevendo:
(não alterar) Anuário da Produção de Iniciação Científica Discente • p. 1-10
4 (não alterar)
• Um nome como forma de referencia, descrevendo uma solução para
algum problema somente com algumas palavras;
• A explicação do problema, descrevendo o contexto em que o padrão
deve ser aplicado;
• Uma solução, demonstrando os componentes que formam sua
estrutura, seus relacionamentos e a divisão de responsabilidade;
• As consequências da aplicação do padrão, demonstrando suas
vantagens e desvantagens.
Padrões podem ser classificados em categorias, conforme usas
características. A classificação mais usada é dividi-los entre os que
determinam a forma como os objetos são criados (Padrões de criação), os que
definem as associações entre classes e objetos (Padrões estruturais), e os de
descrevem a divisão de responsabilidades (Padrões comportamentais).
1.2. Modelo e Observer
Os objetos modelos contem os dados e a lógica do aplicativo, como por
exemplo, as notas e o calculo da media de um aluno, métodos CRUD para
registros de um banco de dados, ou a lógica para executar um arquivo MP3.
Fornece uma interface para manipular e recuperar seu estado, estando
levemente ligado à visualização e o controlador.
Mesmo com a fraca acoplagem, o modelo deve notificar todos os
objetos que dependem de seu estado quando algum dado é alterado, sendo
por alguma modificação interna ou ação do usuário. É nesse contesto que o
padrão Observer é aplicado.
O Observer define uma dependência um-para-muitos entre objetos de
forma que, quando ocorre alguma alteração, todos os interessados são
notificados e atualizados automaticamente.
Figura 2 – Padrão de Projeto Observer
Anuário da Produção de Iniciação Científica Discente • p. 1-10 (não alterar)
(não alterar) 5
Os objetos modelos, que são os únicos que podem acompanhar todas as
mudanças em seus atributos, se assemelham aos objetos observáveis
(Subject), mantendo um elo de comunicação de leve acoplamento criado pelo
método register, que tem como parâmetro os dependentes do estado do
modelo, os observadores, podendo ser visões e/ou controladores, bastando
implementar a interface correta (Observer). Para cada alteração, o método
notifyObservers chama o método update de cada observador, que deve obter
os dados de interesse através de uma referencia a interface do modelo e
utilizá-los da melhor maneira.
1.3. Visão e Composite
O padrão Composite compõe uma estrutura em arvore contendo tanto objetos
individuais como compostos de forma a criar uma hierarquia parte-todo,
permitindo o tratamento uniforme por parte do cliente para ambos os tipos de
objetos.
Os participantes do Composite são:
• Component: define uma interface comum para acessar e
gerenciar os integrantes da coleção e define um comportamento padrão a
todas as classes.
• Leaf: representa e definem o comportamento dos objetos
primitivos da composição, os que não têm filhos, também denominados
objetos-folha.
• Composite: representa e define o comportamento dos objetos
que armazenam os componentes filhos, são os nós que tem filhos.
• Client: manipulam objetos da composição utilizando a interface
Componente.
(não alterar) Anuário da Produção de Iniciação Científica Discente • p. 1-10
6 (não alterar)
Figura 3 – Padrão de Projeto Composite
É importante observar que a Folha herda os métodos acrescentar, remover e
recuperarFilho, o que não faz muito sentido, podendo ser criado uma exceção
ou um valor de retorno nulo para este caso.
Visões utilizam o Composite para a criação de interfaces gráficas para
o usuário, utilizando componentes, como painéis, quadros, caixa de textos,
rótulos, botões, entre outros, formando varias partes alinhadas, mas ao ser
exibida é interpretada como um todo. Ao ordenar que um componente
contêiner, por exemplo, um painel, seja exibido, ele cuidará da exibição dos
objetos de menor hierarquia, como os botões e caixa de textos.
1.4. Controlador e Strategy
A relação entre a visualização e o controlador utiliza o padrão Strategy, que
consiste em definir uma família de algoritmos e encapsulá-los, permitindo
assim que o algoritmo varie sem interferir na implementação dos clientes.
Este padrão é baseado em importantes princípios de POO, como
encapsular o que varia, dar preferência a composição invés da herança e a
programação para interfaces e não para implementações.
Anuário da Produção de Iniciação Científica Discente • p. 1-10 (não alterar)
(não alterar) 7
Figura 4 – Padrão de Projeto Strategy
A visualização é o cliente do padrão Strategy, sendo responsável
apenas pela apresentação dos dados, delegando a responsabilidade de
interpretar as ações do usuário para o modelo a uma estratégia, o
controlador. Com esta estrutura, modelo e visão ficam desconectados, sendo
o controlador o intermédio entre as duas camadas. Também é possível
modificar o comportamento da visualização sem modificar seu código,
somente trocando a estratégia por outra da mesma família.
1.5. Aplicação
Para demonstrar a aplicação do MVC, foi desenvolvido um software em Java
que pode ser obtido pelo seguinte endereço <http://goo.gl/9jsMtv>. O
software consiste em um simples cadastro de contatos, para não fugir o
escopo deste artigo.
A aplicação utiliza a classe POJO Contato para representar os contatos
cadastrados no sistema.
Os modelos são definidos pela interface Model, onde são definidos os
métodos CRUD para gerenciar contatos. O modelos são:
• MemoryModel: Acesso a dados na memoria principal;
• FileModel: Acesso a dados em arquivo serializavel;
• MySqlModel: Acesso a dados em banco de dados MySQL.
Para demostrar o fraco acoplamento dos Modelos, o software permite
a troca do modelo utilizado em tempo de execução.
(não alterar) Anuário da Produção de Iniciação Científica Discente • p. 1-10
8 (não alterar)
Os modelos implementam um novo padrão de projeto, o Singleton.
Este padrão define que só uma instancia da classe correspondente exista na
aplicação.
São utilizadas três visões, CadastroForm para o cadastro e atualização
de contatos, ListForm e TextForm para a listagem de contatos, seguindo o
padrão observer para a atualização das mesmas.
Controladores são definidos pela interface Controller, definindo as
estratégias utilizadas pelas visões. Os controladores concretos são:
• SimpleController: Controlador simples com as estratégias
implementadas;
• ThreadController: Controlador com as mesmas funções de
SimpleController, com o adicional de utilizar múltiplas threads.
A escolha do controlador é definida ao iniciar a aplicação, sendo a sua criação
implementada pelo padrão de projeto Factory Method, onde é definido uma
interface para a instanciação do objeto, sendo as subclasses da fabrica que
definem qual objeto vai ser criado.
1.6. Android
O Android é a plataforma de softwares para dispositivos móveis desenvolvido
pela Google e pelo Open Handset Allicance (OHA). Baseada em Linux, oferece
um ambiente de desenvolvimento completo e inovador.
Ao criar projetos para Android, a lógica da aplicação pode ser
encapsulada em classe escritas utilizando a linguagem de programação Java,
aproveitando grande parte de seus recursos, se assemelhando ao
desenvolvimento de aplicativos desktop.
Arquivos no formato XML localizados no diretório layout do projeto são
utilizados para definirem a interface gráfica. Os componentes gráficos e
gerenciadores de layout são definidos por tags como, por exemplo,
<TextView>, <EditText> e <LinearLayout>. Cada tag corresponde a uma
subclasse de android.view.View. Há também a possibilidade de utilizar a API
Java para a criação das GUIs.
Anuário da Produção de Iniciação Científica Discente • p. 1-10 (não alterar)
(não alterar) 9
Classes herdadas de android.app.Activity atuam como controladores da
aplicação, pois estas representam e gerenciam as telas da aplicação e
respondem aos eventos gerados pela interação do usuário.
1.7. Web
Com o aumento da complexidade das aplicações WEB, o MVC foi adaptado
para atuar no modelo browser/servidor, sendo umas das implementações mais
comum denominada Modelo 2. Utilizando tecnologias JSP, Servlets e
Enterprise JavaBeans(EJB) pertencentes a plataforma Java EE, tem como
objetivo a separação das camadas igualmente ao MVC convencional.
O Servlet atua como o controlador, recebendo a entradas de dados do
usuário através do envio de formulários HTTP e as interpretando a um EJB, que
atua como o modelo. Uma nova pagina JSP é devolvida ao browser, que pode
utilizar o JavaBean para a recuperação dos dados, formando a nova visão.
Embora não evidente, os padrões continuam a compor o padrão, mas
de forma adaptada. A visão, agora utilizando HTML para a criação de um
composto de componentes gráficos alinhados, deixou de ser um observador
clássico, não se registrando ao modelo, recebendo notificações de forma
indireta, através do controlador, que continua sendo uma estratégia, mas
utilizando os métodos HTTP GET e POST para obter a ação e dados os
enviados pelo do usuário.
Para apoiar a aplicação do MVC e outros padrões no desenvolvimento
de sistemas baseados em internet, foram criados os frameworks de aplicações
Web (do inglês web application frameworks ou WAP).
Segundo Schmidt et al. (2004) um framework é
“...um conjunto integrado de artefatos de software (como
classes, objetos e componentes) que colaboram para fornecer
uma arquitetura reusável para uma família de aplicações
relacionadas” (Schmidt, 2004).
Java Serves Faces (JSP), Spring MVC e Apache Struts são exemplos de
WAPs baseados em Java EE. Outros exemplos para outras plataformas são o
ASP.NET MVC utilizado no .Net, Zend Framework implementado em PHP e o
Ruby on Rail’s.
(não alterar) Anuário da Produção de Iniciação Científica Discente • p. 1-10
10 (não alterar)
Para evitar código duplicado e facilitar a manutenção, geralmente
estes frameworks adicionam a sua estrutura um novo padrão de projeto não
GoF denominado Front Controller, assim todas as requisições do usuário são
recebidas por um único componente, centralizando processos que devem ser
realizados por toda as requisições.
5. RESULTADOS
Com base no levantamento bibliográfico realizado, foi possível observar como
os padrões de projeto Strategy, Observer e Composite trabalham de forma
conjunta para a criação do MVC.
Foi observada a possibilidade de se criar inúmeras visões para o
mesmo modelo sem alterá-lo, e ter a certeza que todos serão atualização
quando ocorrer alguma mudança, além de modificar como ela responde as
ações do usuário sem reescrevê-la, apenas criando um novo controlador.
Outra vantagem importante obtida é a portabilidade dos modelos,
podendo ser usados em outros sistemas, como aplicações Desktop, WEB ou
Mobile, não sendo necessário “reinventar a roda” a cada projeto, pois a
solução já existe, podendo ser reaproveitada. Modelos podem ser alterados
em tempo de execução, como por exemplo, uma aplicação que acessa um
banco de dados localmente pode mudar seu comportamento, passando a
trabalhar em rede, sem impacto ao restante do programa.
Uma desvantagem observada é o aumento da complexidade
desnecessária em pequenas aplicações, sendo recomendada a aplicação do
MVC apenas em sistemas de médio ou grande porte.
Por fim, foi constatado que o MVC pode usar outros padrões de projeto
para sua expansão, como o Factory Method para a criação de objetos, Adapter
para adaptar visões a controladores ou modelos, ou o Decorator para o
acréscimo de funções.
6. CONSIDERAÇÕES FINAIS
Com o estudo realizado, foi constatada a aplicabilidade dos padrões de projeto
de software orientado a objetos de forma conjunta para obter reusabilidade,
escalabilidade e atender a complexidade exigida das aplicações atuais. O MVC
é um desses casos, que em seu principio utiliza três desses padrões, mas
Anuário da Produção de Iniciação Científica Discente • p. 1-10 (não alterar)
(não alterar) 11
sendo possível a utilização de outros para usa ampliação, dependendo os
estudos e habilidades do programador que o utilizar.
REFERÊNCIAS
BURBECK, Steve; Applications Programming in Smalltalk-80(TM): How to use Model-
View-Controller (MVC); Disponível em:
<http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html> . Acesso em:
06/01/2013.
DEITEL, Dr. Harvey M.; DEITEL, Paul J.; SANTRY, Sean E.. Advanced Java 2 Platform
How to Program. New Jersey: Prentice Hall, 2001. 1496 p. (How to Program).
DEITEL, Harvey M.; DEITEL, Paul J.. Java - como programar. 6. ed. São Paulo: Pearse
Education, 2005.
FREEMAN, Eric; FREEMAN, Elisabeth. Use a cabeça! padrões de projeto: Design
Patterns. 2. ed. São Paulo: Alta Books, 2007.
GAMMA, Eric. et al. Padrões de projeto - soluções reutilizaveis de software orientado a
objetos autor: gamma, erich. São Paulo: Bookman, 2000.
LECHETA, Ricardo R.. Google Android: Aprenda a criar aplicações para dispositivos
móveis com o Android SDK. 3 ed. São Paulo: Novatec, 2013.
SIERRA, Kath; BASHAM, Brian. Use a cabeça! servlet e jsp. São Paulo: Alta Books,
2008.
SOMMERVILLE, Ian. Engenharia de Software. 9 ed. São Paulo: Person Hallm 2011.
(não alterar) Anuário da Produção de Iniciação Científica Discente • p. 1-10

Mais conteúdo relacionado

Mais procurados

REA- Diagramas de Casos de Uso da UML
REA- Diagramas de Casos de Uso da UMLREA- Diagramas de Casos de Uso da UML
REA- Diagramas de Casos de Uso da UMLIFFar - SVS
 
Aula 02-processos-e-threads-tanenbaum-parte-2
Aula 02-processos-e-threads-tanenbaum-parte-2Aula 02-processos-e-threads-tanenbaum-parte-2
Aula 02-processos-e-threads-tanenbaum-parte-2Cristiano Pires Martins
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceçõesAlvaro Oliveira
 
Normalização de Banco de Dados
Normalização de Banco de DadosNormalização de Banco de Dados
Normalização de Banco de Dadoselliando dias
 
Sistemas Distribuídos - Aspectos de Projeto
Sistemas Distribuídos - Aspectos de ProjetoSistemas Distribuídos - Aspectos de Projeto
Sistemas Distribuídos - Aspectos de ProjetoAdriano Teixeira de Souza
 
Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02thomasdacosta
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetosNécio de Lima Veras
 
Least privilege, access control, operating system security
Least privilege, access control, operating system securityLeast privilege, access control, operating system security
Least privilege, access control, operating system securityG Prachi
 
Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Pacc UAB
 
Diagramas de Fluxo de Dados
Diagramas de Fluxo de DadosDiagramas de Fluxo de Dados
Diagramas de Fluxo de DadosJanynne Gomes
 

Mais procurados (16)

REA- Diagramas de Casos de Uso da UML
REA- Diagramas de Casos de Uso da UMLREA- Diagramas de Casos de Uso da UML
REA- Diagramas de Casos de Uso da UML
 
Aula 02-processos-e-threads-tanenbaum-parte-2
Aula 02-processos-e-threads-tanenbaum-parte-2Aula 02-processos-e-threads-tanenbaum-parte-2
Aula 02-processos-e-threads-tanenbaum-parte-2
 
Domain 2 - Asset Security
Domain 2 - Asset SecurityDomain 2 - Asset Security
Domain 2 - Asset Security
 
Tratamento de exceções
Tratamento de exceçõesTratamento de exceções
Tratamento de exceções
 
Modelo de falhas
Modelo de falhasModelo de falhas
Modelo de falhas
 
Normalização de Banco de Dados
Normalização de Banco de DadosNormalização de Banco de Dados
Normalização de Banco de Dados
 
Sistemas Distribuídos - Aspectos de Projeto
Sistemas Distribuídos - Aspectos de ProjetoSistemas Distribuídos - Aspectos de Projeto
Sistemas Distribuídos - Aspectos de Projeto
 
Modelo em Espiral
Modelo em EspiralModelo em Espiral
Modelo em Espiral
 
Tratamento de erros
Tratamento de errosTratamento de erros
Tratamento de erros
 
Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
 
Least privilege, access control, operating system security
Least privilege, access control, operating system securityLeast privilege, access control, operating system security
Least privilege, access control, operating system security
 
Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1
 
Diagramas de Fluxo de Dados
Diagramas de Fluxo de DadosDiagramas de Fluxo de Dados
Diagramas de Fluxo de Dados
 
casos de uso
casos de usocasos de uso
casos de uso
 
Sistemas Distribuídos: RMI, CORBA e SOA
Sistemas Distribuídos: RMI, CORBA e SOASistemas Distribuídos: RMI, CORBA e SOA
Sistemas Distribuídos: RMI, CORBA e SOA
 

Semelhante a Entendendo o padrão MVC com padrões de projeto

Metodologia de desenvolvimento de sistemas
Metodologia  de desenvolvimento de sistemasMetodologia  de desenvolvimento de sistemas
Metodologia de desenvolvimento de sistemasPriscila Stuani
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introduçãoelliando dias
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelRyan Padilha
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design PatternsLucas Simões Maistro
 
Zachman framework
Zachman frameworkZachman framework
Zachman frameworkJoao Santos
 
Do Diagrama de Fluxo de Dados ao Use Case
Do Diagrama de Fluxo de Dados ao Use CaseDo Diagrama de Fluxo de Dados ao Use Case
Do Diagrama de Fluxo de Dados ao Use CaseRobson Silva Espig
 
Framework Entities na CBSoft
Framework Entities na CBSoftFramework Entities na CBSoft
Framework Entities na CBSoftMarcius Brandão
 
Padrões de projetos
Padrões de projetosPadrões de projetos
Padrões de projetosGustavo Souza
 
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...Lucas Furtado de Oliveira
 

Semelhante a Entendendo o padrão MVC com padrões de projeto (20)

Metodologia de desenvolvimento de sistemas
Metodologia  de desenvolvimento de sistemasMetodologia  de desenvolvimento de sistemas
Metodologia de desenvolvimento de sistemas
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introdução
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
 
Oficina cake php
Oficina cake phpOficina cake php
Oficina cake php
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 
Trabalho individual
Trabalho individualTrabalho individual
Trabalho individual
 
Apresentação da UML
Apresentação da UMLApresentação da UML
Apresentação da UML
 
Zachman framework
Zachman frameworkZachman framework
Zachman framework
 
Naked Objects
Naked ObjectsNaked Objects
Naked Objects
 
Do Diagrama de Fluxo de Dados ao Use Case
Do Diagrama de Fluxo de Dados ao Use CaseDo Diagrama de Fluxo de Dados ao Use Case
Do Diagrama de Fluxo de Dados ao Use Case
 
Asp net mvc
Asp net mvcAsp net mvc
Asp net mvc
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Framework Entities na CBSoft
Framework Entities na CBSoftFramework Entities na CBSoft
Framework Entities na CBSoft
 
Sld 4
Sld 4Sld 4
Sld 4
 
Padrões de projetos
Padrões de projetosPadrões de projetos
Padrões de projetos
 
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
 
Artigo c#
Artigo c#Artigo c#
Artigo c#
 
Ehdm
EhdmEhdm
Ehdm
 
Framework Miolo
Framework MioloFramework Miolo
Framework Miolo
 

Entendendo o padrão MVC com padrões de projeto

  • 1. Anhanguera Educacional Ltda. Correspondência/Contato Alameda Maria Tereza, 4266 Valinhos, SP - CEP 13278-181 rc.ipade@aesapar.com Coordenação Instituto de Pesquisas Aplicadas e Desenvolvimento Educacional - IPADE Publicação: 13 de setembro de 2012 Trabalho realizado com o incentivo e fomento da Anhanguera Educacional ANHANGUERA EDUCACIONAL RESUMO A proposta para este projeto de pesquisa é apresentar o modelo de desenvolvimento de software orientado a objetos denominado MVC (Model-View-Controller) como um padrão de projeto composto, utilizando os designs patterns Observer, Composite e Strategy. A utilização do modelo de desenvolvimento MVC no desenvolvimento de softwares, têm-se apresentado com uma ferramenta interessante quando se pensa em produtividade e padronização de metodologias aplicadas na elaboração de projetos de diversos portes. Seu objetivo é definir as responsabilidades de seus participantes e demostrar como ocorrem suas relações. Para o desenvolvimento, será realizado um levantamento bibliográfico, agregando as principais ideias apresentadas em livros e artigos publicados ao longo do tempo, resultando na melhor compreensão de sua arquitetura e definição das vantagens e desvantagens de sua aplicação. Este trabalho demonstrará as características desta metodologia primeiramente através de um estudo das componentes que formam o MVC e apresentará uma simulação da utilização e criação de um projeto utilizando esta metodologia através de uma linguagem de programação orientada a objetos. Palavras-Chave – MVC; Padrões de Projeto; Engenharia de software; Análise de Sistemas; Programação. 1 ANUÁRIO DA PRODUÇÃO DE INICIAÇÃO CIENTÍFICA DISCENTE Vol. 0, N. 0, Ano 2013 ENTENDENDO A TRÍADE MODEL-VIEW-CONTROLLER (MVC) UTILIZANDO PADRÕES DE PROJETO DE SOFTWARE ORIENTADO A OBJETOS
  • 2. 2 (não alterar) 1. INTRODUÇÃO O paradigma MVC foi desenvolvido para construir interfaces gráficas em Smalltalk por Trygve Reenskaug enquanto trabalhava na Xerox PARC. Utilizado em diversas plataformas de desenvolvimento, este padrão de desenvolvimento contribuiu para a criação de sistemas pioneiros que marcaram historia como o Apple Lisa e Macintosh, além de contribuir para a na evolução dos serviços baseadas na internet como o Twitter. O MVC consiste em dividir o código do software em segmentos funcionais para tornar a aplicação pronta para atender a mudanças de forma rápida, realização de testes unitários e ampliações sem afetar o código já pronto, mantendo o limite entre três camadas, o Modelo, a Visualização e o Controlador. Utilizando os padrões de projeto de software orientado a objetos, podemos definir o MVC como um padrão composto, pois utiliza simultaneamente os padrões Observer, Composite e Strategy, que estão catalogados no livro “Design Patterns: Elements of Reusable Object-Oriented Software”, escrito por Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, a chamada “gangue os quatro”. Este artigo está organizado em seções. A primeira seção é essa introdução, a seção 2 apresenta os objetivos da pesquisa. A metodologia utilizada na realização da pesquisa é apresentada na seção 3. As informações relacionadas ao desenvolvimento da pesquisa como a revisão de literatura, o problema abordado, a solução proposta e implementada são mostradas na seção 4. A forma de abordar os experimentos, os resultados e as discussões são descritos na seção 5. Por fim, as considerações finais estão são apresentadas na seção 6. 2. OBJETIVO Tendo em vista importância do MVC na engenharia de software e a dificuldade de muitos programadores de compreender seu funcionamento ao se utilizar uma abordagem superficial, este artigo tem como objetivo apresentá-lo como um padrão de projeto de software orientado a objeto composto, agrupando os padrões Observer, Composite e Strategy para a estruturação de suas camadas, criando uma visão mais detalhada de cada participante e dos relacionamentos do modelo. Anuário da Produção de Iniciação Científica Discente • p. 1-10 (não alterar)
  • 3. (não alterar) 3 3. METODOLOGIA Para o desenvolvimento do trabalho proposto, a metodologia consiste em uma pesquisa do tipo exploratória, realizando um levantamento bibliográfico por meio de livros e artigos de autores famosos no meio do desenvolvimento de software, como Eric Gamma, Trygve Reenskaug, Eric Freeman e Harvey M. Deitel. A pesquisa também se baseia na interpretação das idéias propostas por estes pesquisadores, a fim de agrupá-las para resolução do mesmo problema. 4. DESENVOLVIMENTO O modelo MVC é constituído por três tipos de objetos, o modelo (Model) é a razão da existência do aplicativo, armazenando toda lógica de negócios e dados do sistema, a visão (View) é a representação do modelo gerando a saída gráfica de forma adequada ao usuário, e o controlador (Controller), que faz a mediação entre as camadas, interpretando a entrada de dados e gerenciando o modelo e a visão. Figura 1 – Diagrama do MVC 1.1. Padrões de Projeto Também denominado Design Pattern, segundo Gamma (1995) “um padrão de projeto de software nomeia, abstrai e identifica os aspectos-chave de uma estrutura de projeto comum para torná-lo útil para a criação de um projeto orientado a objetos reutilizável. O padrão de projeto identifica as classes e instancias participantes, seus papeis, colaborações e as distribuição de responsabilidades”. Padrões são catalogados descrevendo: (não alterar) Anuário da Produção de Iniciação Científica Discente • p. 1-10
  • 4. 4 (não alterar) • Um nome como forma de referencia, descrevendo uma solução para algum problema somente com algumas palavras; • A explicação do problema, descrevendo o contexto em que o padrão deve ser aplicado; • Uma solução, demonstrando os componentes que formam sua estrutura, seus relacionamentos e a divisão de responsabilidade; • As consequências da aplicação do padrão, demonstrando suas vantagens e desvantagens. Padrões podem ser classificados em categorias, conforme usas características. A classificação mais usada é dividi-los entre os que determinam a forma como os objetos são criados (Padrões de criação), os que definem as associações entre classes e objetos (Padrões estruturais), e os de descrevem a divisão de responsabilidades (Padrões comportamentais). 1.2. Modelo e Observer Os objetos modelos contem os dados e a lógica do aplicativo, como por exemplo, as notas e o calculo da media de um aluno, métodos CRUD para registros de um banco de dados, ou a lógica para executar um arquivo MP3. Fornece uma interface para manipular e recuperar seu estado, estando levemente ligado à visualização e o controlador. Mesmo com a fraca acoplagem, o modelo deve notificar todos os objetos que dependem de seu estado quando algum dado é alterado, sendo por alguma modificação interna ou ação do usuário. É nesse contesto que o padrão Observer é aplicado. O Observer define uma dependência um-para-muitos entre objetos de forma que, quando ocorre alguma alteração, todos os interessados são notificados e atualizados automaticamente. Figura 2 – Padrão de Projeto Observer Anuário da Produção de Iniciação Científica Discente • p. 1-10 (não alterar)
  • 5. (não alterar) 5 Os objetos modelos, que são os únicos que podem acompanhar todas as mudanças em seus atributos, se assemelham aos objetos observáveis (Subject), mantendo um elo de comunicação de leve acoplamento criado pelo método register, que tem como parâmetro os dependentes do estado do modelo, os observadores, podendo ser visões e/ou controladores, bastando implementar a interface correta (Observer). Para cada alteração, o método notifyObservers chama o método update de cada observador, que deve obter os dados de interesse através de uma referencia a interface do modelo e utilizá-los da melhor maneira. 1.3. Visão e Composite O padrão Composite compõe uma estrutura em arvore contendo tanto objetos individuais como compostos de forma a criar uma hierarquia parte-todo, permitindo o tratamento uniforme por parte do cliente para ambos os tipos de objetos. Os participantes do Composite são: • Component: define uma interface comum para acessar e gerenciar os integrantes da coleção e define um comportamento padrão a todas as classes. • Leaf: representa e definem o comportamento dos objetos primitivos da composição, os que não têm filhos, também denominados objetos-folha. • Composite: representa e define o comportamento dos objetos que armazenam os componentes filhos, são os nós que tem filhos. • Client: manipulam objetos da composição utilizando a interface Componente. (não alterar) Anuário da Produção de Iniciação Científica Discente • p. 1-10
  • 6. 6 (não alterar) Figura 3 – Padrão de Projeto Composite É importante observar que a Folha herda os métodos acrescentar, remover e recuperarFilho, o que não faz muito sentido, podendo ser criado uma exceção ou um valor de retorno nulo para este caso. Visões utilizam o Composite para a criação de interfaces gráficas para o usuário, utilizando componentes, como painéis, quadros, caixa de textos, rótulos, botões, entre outros, formando varias partes alinhadas, mas ao ser exibida é interpretada como um todo. Ao ordenar que um componente contêiner, por exemplo, um painel, seja exibido, ele cuidará da exibição dos objetos de menor hierarquia, como os botões e caixa de textos. 1.4. Controlador e Strategy A relação entre a visualização e o controlador utiliza o padrão Strategy, que consiste em definir uma família de algoritmos e encapsulá-los, permitindo assim que o algoritmo varie sem interferir na implementação dos clientes. Este padrão é baseado em importantes princípios de POO, como encapsular o que varia, dar preferência a composição invés da herança e a programação para interfaces e não para implementações. Anuário da Produção de Iniciação Científica Discente • p. 1-10 (não alterar)
  • 7. (não alterar) 7 Figura 4 – Padrão de Projeto Strategy A visualização é o cliente do padrão Strategy, sendo responsável apenas pela apresentação dos dados, delegando a responsabilidade de interpretar as ações do usuário para o modelo a uma estratégia, o controlador. Com esta estrutura, modelo e visão ficam desconectados, sendo o controlador o intermédio entre as duas camadas. Também é possível modificar o comportamento da visualização sem modificar seu código, somente trocando a estratégia por outra da mesma família. 1.5. Aplicação Para demonstrar a aplicação do MVC, foi desenvolvido um software em Java que pode ser obtido pelo seguinte endereço <http://goo.gl/9jsMtv>. O software consiste em um simples cadastro de contatos, para não fugir o escopo deste artigo. A aplicação utiliza a classe POJO Contato para representar os contatos cadastrados no sistema. Os modelos são definidos pela interface Model, onde são definidos os métodos CRUD para gerenciar contatos. O modelos são: • MemoryModel: Acesso a dados na memoria principal; • FileModel: Acesso a dados em arquivo serializavel; • MySqlModel: Acesso a dados em banco de dados MySQL. Para demostrar o fraco acoplamento dos Modelos, o software permite a troca do modelo utilizado em tempo de execução. (não alterar) Anuário da Produção de Iniciação Científica Discente • p. 1-10
  • 8. 8 (não alterar) Os modelos implementam um novo padrão de projeto, o Singleton. Este padrão define que só uma instancia da classe correspondente exista na aplicação. São utilizadas três visões, CadastroForm para o cadastro e atualização de contatos, ListForm e TextForm para a listagem de contatos, seguindo o padrão observer para a atualização das mesmas. Controladores são definidos pela interface Controller, definindo as estratégias utilizadas pelas visões. Os controladores concretos são: • SimpleController: Controlador simples com as estratégias implementadas; • ThreadController: Controlador com as mesmas funções de SimpleController, com o adicional de utilizar múltiplas threads. A escolha do controlador é definida ao iniciar a aplicação, sendo a sua criação implementada pelo padrão de projeto Factory Method, onde é definido uma interface para a instanciação do objeto, sendo as subclasses da fabrica que definem qual objeto vai ser criado. 1.6. Android O Android é a plataforma de softwares para dispositivos móveis desenvolvido pela Google e pelo Open Handset Allicance (OHA). Baseada em Linux, oferece um ambiente de desenvolvimento completo e inovador. Ao criar projetos para Android, a lógica da aplicação pode ser encapsulada em classe escritas utilizando a linguagem de programação Java, aproveitando grande parte de seus recursos, se assemelhando ao desenvolvimento de aplicativos desktop. Arquivos no formato XML localizados no diretório layout do projeto são utilizados para definirem a interface gráfica. Os componentes gráficos e gerenciadores de layout são definidos por tags como, por exemplo, <TextView>, <EditText> e <LinearLayout>. Cada tag corresponde a uma subclasse de android.view.View. Há também a possibilidade de utilizar a API Java para a criação das GUIs. Anuário da Produção de Iniciação Científica Discente • p. 1-10 (não alterar)
  • 9. (não alterar) 9 Classes herdadas de android.app.Activity atuam como controladores da aplicação, pois estas representam e gerenciam as telas da aplicação e respondem aos eventos gerados pela interação do usuário. 1.7. Web Com o aumento da complexidade das aplicações WEB, o MVC foi adaptado para atuar no modelo browser/servidor, sendo umas das implementações mais comum denominada Modelo 2. Utilizando tecnologias JSP, Servlets e Enterprise JavaBeans(EJB) pertencentes a plataforma Java EE, tem como objetivo a separação das camadas igualmente ao MVC convencional. O Servlet atua como o controlador, recebendo a entradas de dados do usuário através do envio de formulários HTTP e as interpretando a um EJB, que atua como o modelo. Uma nova pagina JSP é devolvida ao browser, que pode utilizar o JavaBean para a recuperação dos dados, formando a nova visão. Embora não evidente, os padrões continuam a compor o padrão, mas de forma adaptada. A visão, agora utilizando HTML para a criação de um composto de componentes gráficos alinhados, deixou de ser um observador clássico, não se registrando ao modelo, recebendo notificações de forma indireta, através do controlador, que continua sendo uma estratégia, mas utilizando os métodos HTTP GET e POST para obter a ação e dados os enviados pelo do usuário. Para apoiar a aplicação do MVC e outros padrões no desenvolvimento de sistemas baseados em internet, foram criados os frameworks de aplicações Web (do inglês web application frameworks ou WAP). Segundo Schmidt et al. (2004) um framework é “...um conjunto integrado de artefatos de software (como classes, objetos e componentes) que colaboram para fornecer uma arquitetura reusável para uma família de aplicações relacionadas” (Schmidt, 2004). Java Serves Faces (JSP), Spring MVC e Apache Struts são exemplos de WAPs baseados em Java EE. Outros exemplos para outras plataformas são o ASP.NET MVC utilizado no .Net, Zend Framework implementado em PHP e o Ruby on Rail’s. (não alterar) Anuário da Produção de Iniciação Científica Discente • p. 1-10
  • 10. 10 (não alterar) Para evitar código duplicado e facilitar a manutenção, geralmente estes frameworks adicionam a sua estrutura um novo padrão de projeto não GoF denominado Front Controller, assim todas as requisições do usuário são recebidas por um único componente, centralizando processos que devem ser realizados por toda as requisições. 5. RESULTADOS Com base no levantamento bibliográfico realizado, foi possível observar como os padrões de projeto Strategy, Observer e Composite trabalham de forma conjunta para a criação do MVC. Foi observada a possibilidade de se criar inúmeras visões para o mesmo modelo sem alterá-lo, e ter a certeza que todos serão atualização quando ocorrer alguma mudança, além de modificar como ela responde as ações do usuário sem reescrevê-la, apenas criando um novo controlador. Outra vantagem importante obtida é a portabilidade dos modelos, podendo ser usados em outros sistemas, como aplicações Desktop, WEB ou Mobile, não sendo necessário “reinventar a roda” a cada projeto, pois a solução já existe, podendo ser reaproveitada. Modelos podem ser alterados em tempo de execução, como por exemplo, uma aplicação que acessa um banco de dados localmente pode mudar seu comportamento, passando a trabalhar em rede, sem impacto ao restante do programa. Uma desvantagem observada é o aumento da complexidade desnecessária em pequenas aplicações, sendo recomendada a aplicação do MVC apenas em sistemas de médio ou grande porte. Por fim, foi constatado que o MVC pode usar outros padrões de projeto para sua expansão, como o Factory Method para a criação de objetos, Adapter para adaptar visões a controladores ou modelos, ou o Decorator para o acréscimo de funções. 6. CONSIDERAÇÕES FINAIS Com o estudo realizado, foi constatada a aplicabilidade dos padrões de projeto de software orientado a objetos de forma conjunta para obter reusabilidade, escalabilidade e atender a complexidade exigida das aplicações atuais. O MVC é um desses casos, que em seu principio utiliza três desses padrões, mas Anuário da Produção de Iniciação Científica Discente • p. 1-10 (não alterar)
  • 11. (não alterar) 11 sendo possível a utilização de outros para usa ampliação, dependendo os estudos e habilidades do programador que o utilizar. REFERÊNCIAS BURBECK, Steve; Applications Programming in Smalltalk-80(TM): How to use Model- View-Controller (MVC); Disponível em: <http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html> . Acesso em: 06/01/2013. DEITEL, Dr. Harvey M.; DEITEL, Paul J.; SANTRY, Sean E.. Advanced Java 2 Platform How to Program. New Jersey: Prentice Hall, 2001. 1496 p. (How to Program). DEITEL, Harvey M.; DEITEL, Paul J.. Java - como programar. 6. ed. São Paulo: Pearse Education, 2005. FREEMAN, Eric; FREEMAN, Elisabeth. Use a cabeça! padrões de projeto: Design Patterns. 2. ed. São Paulo: Alta Books, 2007. GAMMA, Eric. et al. Padrões de projeto - soluções reutilizaveis de software orientado a objetos autor: gamma, erich. São Paulo: Bookman, 2000. LECHETA, Ricardo R.. Google Android: Aprenda a criar aplicações para dispositivos móveis com o Android SDK. 3 ed. São Paulo: Novatec, 2013. SIERRA, Kath; BASHAM, Brian. Use a cabeça! servlet e jsp. São Paulo: Alta Books, 2008. SOMMERVILLE, Ian. Engenharia de Software. 9 ed. São Paulo: Person Hallm 2011. (não alterar) Anuário da Produção de Iniciação Científica Discente • p. 1-10