Escolar Documentos
Profissional Documentos
Cultura Documentos
Inserir TítulodeAqui
Software
Inserir Título Aqui
Padrões de Projeto e Model-View-Controller (MVC)
Revisão Textual:
Prof.ª Dr.ª Luciene Oliveira da Costa Granadeiro
Padrões de Projeto e
Model-View-Controller (MVC)
Caro Aluno(a)!
Normalmente, com a correria do dia a dia, não nos organizamos e deixamos para o
último momento o acesso ao estudo, o que implicará o não aprofundamento no material
trabalhado ou, ainda, a perda dos prazos para o lançamento das atividades solicitadas.
Assim, organize seus estudos de maneira que entrem na sua rotina. Por exemplo, você
poderá escolher um dia ao longo da semana ou um determinado horário todos ou alguns
dias e determinar como o seu “momento do estudo”.
Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de
discussão, pois estes ajudarão a verificar o quanto você absorveu do conteúdo, além de
propiciar o contato com seus colegas e tutores, o que se apresenta como rico espaço de
troca de ideias e aprendizagem.
Bons Estudos!
UNIDADE
Padrões de Projeto e Model-View-Controller (MVC)
Contextualização
As aplicações Web estão cada vez mais presentes no mercado de tecnologia da infor-
mação. Isso é fato! A engenharia de software já reconhece que, para obter um software
melhor, com entrega rápida e custos mais baixos, é necessário um processo de desenvol-
vimento de software baseado na reutilização de softwares existentes. Nos últimos anos,
tem ocorrido uma mudança significativa a favor do desenvolvimento de sistemas de
software baseado em reúso. Padrões de projeto, padrões de arquitetura e engenharia de
software baseados em componentes são abordagens de reúso de software. Uma arqui-
tetura de software recomendada para aplicações Web é a arquitetura em três camadas,
pois separa a interface de usuário e o comportamento da aplicação. O padrão de arqui-
tetura MVC permite a separação da camada de apresentação da camada de aplicação,
trazendo benefícios para uma solução de software baseada na Web.
6
Padrões de Projeto e
Model-View-Controller (MVC)
Este material teórico apresenta a aplicação de métodos e técnicas de análise e projeto
arquitetural no processo de desenvolvimento de sistemas de software e a importância
da utilização de padrões de projeto como uma solução reusável, além do propósito do
padrão de projeto de arquitetura Model-View-Controller (MVC). Para facilitar a com-
preensão da representação do MVC, serão utilizadas notações da Unified Modeling
Language (UML), especificamente o diagrama de classes.
Reúso de Software
Ao estudar padrões de projeto, nós estamos estudando o reúso de software. O reúso
(reutilização) de software existente é uma abordagem de desenvolvimento enfatizada
pelos atuais modelos de processo de desenvolvimento de sistemas de software. A reu-
tilização de componentes é bastante importante no projeto (design) de arquitetura de
sistemas de software.
7
7
UNIDADE
Padrões de Projeto e Model-View-Controller (MVC)
8
de desenvolvimento de software, ao invés de uma atividade separada. De for-
ma geral, há três tipos de componentes de software passíveis de utilização em
um modelo de processo orientado a reúso:
» Web services: desenvolvidos conforme os padrões de serviço, estando dis-
poníveis para invocação remota;
» Coleções de objetos: desenvolvidas como um pacote a ser integrado com
um framework de componentes (.NET, JEE, ...);
» Sistemas de software stand alone: configurados para uso em um ambiente
específico (SOMMERVILLE, 2011).
Desenvolvimento Validação de
e integração sistema
9
9
UNIDADE
Padrões de Projeto e Model-View-Controller (MVC)
Padrões de Padrões de
projeto arquitetura
E quanto aos padrões de projeto e aos padrões de arquitetura de software que tanto
nos interessam? É o que vamos estudar nas próximas seções deste material.
Padrões de Projeto
Quando nós estudamos padrões de projeto (design patterns), é muito difícil não elen-
car o importante livro Padrões de projeto: soluções reutilizáveis de software orientado
a objetos de Gamma et al. (2000), originalmente publicada sob o título Design Patterns:
Elements of Reusable Object-Oriented Software (1994). Os autores do referido livro são
conhecidos como Gangue dos Quatro, do inglês Gang of Four, portanto, os padrões de pro-
jeto descritos por esses autores são chamados de padrões GoF (Gang of Four). Autores de
livros de Engenharia de Software e de Desenvolvimento de Software, incluindo Sommerville
(2011), Bezerra (2015) e Kerievsky (2008) citam os referidos autores em suas obras.
Todos sabem o valor da experiência de projeto. Muitas vezes, já passou pela sua cabeça
aquele sentimento de que já solucionou um problema semelhante anteriormente, mes-
mo não sabendo exatamente onde e quando. Se você conseguisse lembrar os detalhes do
problema anterior e de que forma o resolveu, você poderia reutilizar a experiência ao invés
de redescobrir a solução adotada, não é verdade? Contudo, houve uma falha considerável,
pois essa solução não foi registrada para possibilitar uma reutilização futura por parte de
outros arquitetos em novos projetos de software.
10
Projetar sistema de software orientado a objetos é uma tarefa complicada, mas pro-
jetar software reutilizável orientado a objetos é ainda mais complicado, pois é necessário
identificar objetos pertinentes, refatorar esses objetos em classes no nível certo de gra-
nularidade, definir as interfaces das classes, as hierarquias de generalização e especia-
lização (herança) e as relações existentes entre esses conceitos. O projeto de software
deve ser específico o suficiente para resolver o problema em questão, porém, genérico
o suficiente para resolver problemas e atender a requisitos exigidos no futuro.
Afinal, o que são padrões de projeto (design patterns)? “Padrões de projeto são des-
crições de objetos e classes comunicantes que precisam ser personalizadas para resolver
um problema geral de projeto num contexto particular”. (GAMMA et al., 2000, p. 20)
11
11
UNIDADE
Padrões de Projeto e Model-View-Controller (MVC)
padrão, ou seja, o que o padrão faz. Os padrões podem ser de finalidade de criação,
estrutural, ou comportamental. Os padrões de criação enfatizam o processo de criação
dos objetos; os padrões estruturais trabalham com montagem da estrutura das classes,
ou objetos; os padrões comportamentais descrevem as formas pelas quais as classes ou
objetos interagem e distribuem responsabilidades. O segundo critério corresponde ao
escopo do padrão, ou seja, especifica se o padrão é aplicável principalmente no escopo
de classes ou de objetos. Os padrões para classes visam aos relacionamentos entre clas-
ses e suas subclasses, definidos por meio de herança, sendo, portanto, estáticos, pois
trabalham em tempo de compilação, enquanto os padrões para objetos se preocupam
com relacionamentos entre objetos que podem mudar em tempo de execução, sendo,
portanto, mais dinâmicos.
A tabela 1 mostra o catálogo dos padrões de projeto da Gang of Four (GoF), organi-
zado conforme os dois critérios explicados anteriormente. Ao todo, são 23 padrões de
projeto, sendo 5 de criação, 7 estruturais e 11 comportamentais.
12
salvando o estado
Builder da iteração Memento Proxy
Adapter
acrescendo enumerando
responsabilidade a usando
filhos
objetos composto Command
Decorator Composite
compartilhando definindo
compostos definindo a cadeia
adicionando percursos
operações
mudando o exterior
versus o interior
Flyweight definindo a Visitor
gramática
compartilhando adicionando
estratégias Interpreter operações Chain of Responsibility
compartilhando
símbolos terminais Mediator administração
Strategy de dependências
compartilhando complexas Observer
estados
State
definindo os
passos do usos frequentes
algorítmo Template Method
Para maiores detalhes sobre os padrões GoF, você também pode explorar o livro Padrões
de projeto: soluções reutilizáveis de software orientado a objetos, de Gamma et al. (2000),
disponibilizado na Biblioteca Virtual Pearson, disponível em: https://goo.gl/g72tci
13
13
UNIDADE
Padrões de Projeto e Model-View-Controller (MVC)
Model-View-Controller (MVC)
O Model-View-Controller (MVC) é um padrão de arquitetura de software que especi-
fica a interação entre objetos de interface com o usuário e os demais objetos de uma apli-
cação. Esse padrão arquitetural é comumente utilizado para separar as responsabilidades
entre a lógica da apresentação e a lógica da aplicação. O ideal da camada de apresentação
é não possuir inteligência, mas apenas a implementação da lógica da apresentação, como
preenchimento de controles com dados oriundos das camadas da aplicação, habilitação de
controles, definição de cores etc. Inicialmente, esse padrão de arquitetura foi apresentado
na linguagem de programação Smalltalk-80, sendo que, ao longo do tempo, surgiram
variações dessa arquitetura. Esse padrão de arquitetura apresenta três componentes:
• Model: esse componente representa a parte da aplicação que contém os dados e
suas validações. Esse componente corresponde ao estado, à estrutura e ao compor-
tamento dos dados, sendo visualizados e manipulados pelo usuário do sistema por
meio de interface gráfica. O objeto-modelo apresenta operações em sua interface
para que o restante do sistema possa manipular seus dados;
• View: um sistema de software pode apresentar aos usuários diversas visões de um
mesmo objeto-modelo. Um exemplo é haver uma interface gráfica para editar as
notas de um estudante de uma turma e outra interface gráfica para visualizar essas
notas. Esse componente representa cada uma das possíveis formas de mostrar uma
informação vinda do objeto-modelo;
• Controller: cada objeto-visão tem a ele associado um objeto controlador, que ajuda
na implementação de sua interface gráfica (BEZERRA, 2015).
Fique atento(a) com o conceito de interface! Quando o termo é utilizado para objeto-visão,
o conceito se refere à interface gráfica (de usuário), porém, quando o conceito é utilizado
para objeto-modelo, o termo é utilizado para interface de objeto.
Vale ressaltar que o MVC não é um padrão GoF. Na verdade, o MVC é um padrão
de arquitetura de software desenvolvido para a linguagem de programação orientada a
objetos chamada Smalltalk, podendo ser usado para qualquer sistema de software inte-
rativo. Muitos frameworks de desenvolvimento adotaram o referido padrão arquitetural,
principalmente os frameworks de desenvolvimento de aplicações Web.
14
manipuladas pelo controlador que também seleciona o objeto-visão aplicável, conforme
a solicitação do usuário. Uma vez identificado o tipo de solicitação, uma solicitação de
comportamento é enviada ao objeto-modelo que implementa a funcionalidade ou recu-
pera o conteúdo necessário para atender à solicitação. O objeto-modelo acessa os dados
armazenados em um banco de dados. Os dados gerados pelo objeto-modelo devem ser
formatados e organizados pelo objeto-visão apropriado e enviados do servidor de aplica-
ções de volta para o navegador para exibição no computador do usuário.
Controlador
Gerencia solicitções do usuário
Seleciona compostamento do modelo Solicitação de
Seleciona resposta da visão comportamento
(mudança de estado)
Seleção da visão
Requisição
Modelo
Navegador ou dados
Encapsula funcionalidade
do usuário
Encapsula objetos de conteúdo
Dados do
Incorpora todos os estados da WebApp
Cliente modelo
Visão Solicitação de atualização Dados externos
Dados HTNL
Prepara dados do modelo
Solicita atualizações do modelo
Apresenta a visão selecionada
pelo controlador
Servidor
Outras informações sobre a utilização do padrão arquitetural MVC podem ser encontradas
em: https://goo.gl/QO4O5P
15
15
UNIDADE
Padrões de Projeto e Model-View-Controller (MVC)
Para maiores detalhes sobre dependências, você também pode explorar o livro Utilizan-
do UML e padrões: uma introdução à análise e ao projeto orientados a objetos e ao desen-
volvimento iterativo, de Larman (2007), disponibilizado na Biblioteca Virtual Pearson,
disponível em: https://goo.gl/g72tci
Classe A <<parameter>>
+oper 1 (in param: Classe C) Classe C
+oper 2 (in param 1: Classe B, in param 2: Classe C)
<<parameter>>
Classe B
Figura 7 – Exemplo de uso de dependência não estrutural
Em qual relacionamento entre classes você deve utilizar dependência estrutural? E a de-
pendência não estrutural?
16
Bezerra (2005) entende que, ao longo do projeto de classes, é preciso avaliar, para
cada relação de associação existente, se é possível transformá-la em uma dependência
não estrutural. A dependência não estrutural aumenta o encapsulamento de cada classe
e diminui o acoplamento entre elas, em contrapartida, o desempenho tende a ser menor.
A dependência por atributo é uma forma mais forte de dependência, diminuindo o encap-
sulamento e aumentando o acoplamento, porém, o desempenho tende a ser maior.
Analisando as vantagens e desvantagens de cada tipo de dependência, é recomendável
utilizar dependências estruturais entre as classes de modelo. Por outro lado, é recomendá-
vel utilizar dependências não estruturais entre as classes de controle e as classes de modelo.
Vamos, agora, exemplificar uma possibilidade de representação do padrão de ar-
quitetura MVC em um diagrama de classes da UML. Para tal, vamos trabalhar com o
diagrama de classes de projeto apresentado na Unidade 1 desta disciplina. Para você se
lembrar do diagrama o qual estamos mencionando, o mesmo é mostrado na figura 8.
<<view>>
View
<<controller>>
Controller
<<model>>
Model
Fonte: Adaptado de Bezerra, 2015
17
17
UNIDADE
Padrões de Projeto e Model-View-Controller (MVC)
Locação model
<<model>> <<model>>
Locação Carro
- DataRetirada: Date - Modelo: String
View - HoraRetirada: Time * 1 - Chassi: String
- DataDevolução: Date - Cor: String
- HoraDevolução: Time - Km: int
- ValorLocação: Currency - ValorDiária: Currency
Tela Cliente Tela Locação + getValorLocação( ): Currency + getValorDiária( ): Currency
Cliente model
<<model>>
Controller Locação
- DataRetirada: Date
- HoraRetirada: Time
- DataDevolução: Date
Controle Cliente Controle Locação - HoraDevolução: Time
- ValorLocação: Currency
+ getValorLocação( ): Currency
Para maiores detalhes sobre a UML, você também pode explorar o livro UML Essencial: um
breve guia para a linguagem-padrão de modelagem de objetos de Fowler (2005), disponi-
bilizado na Biblioteca Virtual Pearson, em: https://goo.gl/g72tci
18
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
Sites
The Hillside Group
https://goo.gl/W4Nf4o
Bibliotecas do Grupo Cruzeiro do Sul
https://goo.gl/g72tci
Leitura
MVC
https://goo.gl/QO4O5P
Smalltalk
https://pt.wikipedia.org/wiki/Smalltalk
19
19
UNIDADE
Padrões de Projeto e Model-View-Controller (MVC)
Referências
BEZERRA, E. Princípios de Análise e Projeto de Sistemas com UML. 3.ed. São
Paulo: Elsevier, 2015.
FREEMAN, E.; FREEMAN, E. Use a cabeça! Padrões de projetos. 2.ed. São Paulo:
Alta Books, 2007.
GAMMA, E.; HELM, R.; RALPH, J.; VLISSIDES, J. Padrões de projeto: soluções
reutilizáveis de software orientado a objetos. Porto Alegre: Bookman, 2000.
20