Escolar Documentos
Profissional Documentos
Cultura Documentos
Arquitetura de Software
Professor Luciano Gaspar
Professora Elisamara de Oliveira
1
Arquitetura de Software
2
Arquitetura de Software
SUMÁRIO
Apresentação 5
Capítulo 1 – Fundamentos de Arquitetura de Software 5
Definição de Arquitetura de Software 5
Mas, o que é arquitetura de software? 6
Modelagem de aplicações de softwares 6
Tarefas Acidentais e Essenciais 7
Aspectos essenciais na produção de software 8
Princípios SOLID 11
Princípio de Responsabilidade Única 12
Princípio Aberto-Fechado 12
Princípio de Substituição de Liskov 13
Princípio Segregação de Interface 14
Princípio de Inversão de Dependência 14
Polimorfismo e Herança em OO 15
Capítulo 2 – Padrões de Arquitetura de Software 16
Definição de Padrão Arquitetural 16
Padrão de Arquitetura em Camadas 17
Padrão de Arquitetura Pipes and Filters ou Pipeline 19
Padrão de Arquitetura Blackboard 21
Model-View-Controller (MVC) 23
Padrão de Arquitetura Microkernel 26
Padrão de Arquitetura Reflection 29
Exercícios do Capítulo 2 30
Capítulo 3 – Design Patterns – Padrões de Criação 31
Conceitos de Padrões de Projeto 31
Definição de Padrões de Criação 36
Padrão Abstract Factory 37
Padrão Builder 38
Padrão Factory Method 40
Padrão Prototype 41
Padrão Singleton 42
Exercícios do Capítulo 3 43
Capítulo 4 – Design Patterns – Padrões Estruturais 43
Definição de Padrões Estruturais 43
Padrão Adapter 44
Padrão Bridge 44
3
Arquitetura de Software
Padrão Decorator 46
Padrão Façade 47
Padrão Proxy 47
Exercícios do Capítulo 4 48
Capítulo 5 – Design Patterns – Padrões Comportamentais 48
Definição de Padrões Comportamentais 48
Padrão Chain of Responsability 49
Padrão Mediator 50
Padrão Observer 51
Padrão Strategy 52
Padrão Visitor 53
Exercícios do Capítulo 5 54
Considerações finais 55
Glossário de Siglas 58
Bibliografia 58
4
Arquitetura de Software
Assim, prezado aluno, esse material foi elaborado para Desta forma, desenvolver soluções arquitetadas é uma
chamar sua atenção e trazer uma reflexão sobre os prin- prática que tornará nosso trabalho, a longo prazo, menos
cipais aspectos que têm afetado diretamente a produção reativo e estressante.
5
Arquitetura de Software
6
Arquitetura de Software
Para os criadores da UML- Unified Modeling Language, • As tarefas acidentais estão relacionadas à im-
Booch, Rumbaugh e Jacobson, nenhum modelo único é plementação do software e as principais preocu-
suficiente. Qualquer sistema não-trivial será melhor inves- pações estão ligadas à sintaxe das linguagens,
tigado por meio de um conjunto de modelos quase inde- aos limites de hardware, aos ambientes e ferra-
pendentes com vários pontos de vista. mentas de desenvolvimento e demais aspectos
Um ou mais modelos podem servir de inspiração para técnicos. Estes aspectos são facilmente superados
dar origem a uma arquitetura que sustente as necessida- com treinamentos, leituras ou a consulta a um
des do que está sendo modelado. profissional mais experiente.
7
Arquitetura de Software
De forma análoga, e neste contexto, pode-se comparar Queremos dizer que existe uma grande diferença entre
o processo de desenvolvimento de software ao processo fazer um software com poucas linhas de código e desen-
de criação de um texto, onde as tarefas acidentais estão volver um software com um número maior de requisitos.
relacionadas ao domínio de uma ferramenta de edição de
textos e a sintaxe e semântica da língua. Tais tarefas po-
dem criar barreiras para a produção do texto, mas serão
superadas com algum nível de estudo ou apoio de ter-
ceiros, porém não garantem que o texto escrito atenderá
critérios de qualidade.
8
Arquitetura de Software
apreciada por você? O processo para produzir uma Provavelmente muitos dos programadores já passaram
unidade é o mesmo para produzir 1.000 unidades? por situações de não conseguir ou demorar para entender
um código, seja ele gerado por terceiros ou até mesmo um
Acredito que chegará facilmente à conclusão que novos código próprio.
elementos deverão ser inseridos no processo de produção
do vaso. Talvez o uso de formas para garantir o padrão, a Sabe-se que a complexidade do código é crescente e
contratação de novos artesões, uma sequência ordenada existe um limite que o cérebro humano consegue geren-
de tarefas, a criação de modelos que serão submetidos a ciar, impactando na quantidade de novas linhas de código
testes, dentre outras ações. que podem ser acrescentadas a um programa ao longo do
Agora reflita: O que diferencia a produção de tempo. [BROOKS,1987]
um software de 1.000 linhas com um de 15.000
linhas? Será só a quantidade de linhas? A figura 5 mostra a relação produtividade no desen-
volvimento versus tempo. À medida que o software vai
Softwares com 1.000 linhas de códigos, no pior caso,
sendo implementado, ou seja, linhas de código são inseri-
podem ser refeitos gastando apenas mais alguns dias de
das, consequentemente sua complexidade crescente afeta
trabalho; porém reescrever um sistema mais complexo le-
a produtividade ao longo do tempo.
varia meses ou anos. Portanto, cuidar da arquitetura no
início reduz os problemas futuros.
9
Arquitetura de Software
10
Arquitetura de Software
• De conhecimento (knowing): sobre dados privati- Ainda dentro de um projeto OO, existe outro conceito mui-
vos e encapsulados; sobre objetos relacionados; to importante que é a coesão. Coesão é uma medida de quão
sobre coisas que pode calcular ou derivar. fortemente estão relacionadas e focadas as responsabilidades
de um dado elemento. Um elemento que esteja altamente
• De realização (doing): em fazer alguma coisa em especializado e que não realize uma grande quantidade de tarefas
si mesmo; iniciar uma ação em outro objeto; con- é considerado com alta coesão, ou seja, possui um alto grau
trolar e coordenar atividades em outros objetos. de coesão.
No paradigma orientado a objetos uma das principais Baixo acoplamento (low coupling) e alta co-
preocupações é o acoplamento. Um acoplamento pode esão (high cohesion) são conceitos relevantes que
ocorrer de diferentes formas. O acoplamento pode ocorrer devem ser considerados e preservados sempre du-
quando: rante os processos de tomada de decisão em um
projeto orientado a objetos. São conceitos que estão
• uma classe A possui um atributo que referencia o intimamente ligados ao desenvolvimento de softwa-
objeto B ou a própria classe B; res que priorizam uma arquitetura que favorece a
manutenção e a construção de objetos reusáveis.
• um objeto A chama um método de um objeto B;
11
Arquitetura de Software
O gerenciamento de dependência entre objetos é um se a forma de cálculo for alterada ou uma interação com
problema que certamente já foi enfrentado por quem a interface gráfica tiver que ser alterada, ambas afetam a
desenvolve ou desenvolveu um aplicativo OO. Não se classe Retangulo. Ou seja, as linhas de código escritas
preocupar com o gerenciamento de dependência leva a nesta classe possuem duas formas de serem impactadas.
um código confuso, difícil de mudar e não reutilizável.
O Princípio de Responsabilidade Única, também conhe- estar “aberta” para extensão, porém fechada para modifi-
cido como SRP - Single Responsability Principle estabelece cação, ou seja, devemos organizar as classes para possibi-
que uma classe deve ter um e somente um motivo para litar o crescimento, porém sem alterar o código das classes
mudar. existentes.
Se uma classe é responsável por efetuar várias ações Vejamos o exemplo da figura 8:
dentro de um determinado contexto, ela está ferindo este
princípio.
12
Arquitetura de Software
A classe Pagamento possui os métodos que têm as instruções para pagamentos dos tipos Parcelado, Avista, Debito
e Credito. Como você implementaria isso?
Certamente em determinado trecho de código utilizaria uma instrução IF ou CASE e de acordo com a forma de
pagamento selecionado pelo usuário chamaria um método específico. Caso você venha desenvolvendo software desta
forma, lembre-se que o princípio OCP está sendo ferido.
O resultado em não respeitar este princípio é que, para cada nova forma de pagamento, o código da classe Pagamento
deverá ser alterado com a inclusão do novo método de pagamento e a inclusão de mais um parâmetro na instrução IF ou CASE.
Para atender o princípio OCP deve-se separar as formas de pagamento em sub-classes. Desta forma, uma nova forma
de pagamento não afetaria a classe Pagamento, ou seja, o código estaria fechado para alteração e aberto para extensão.
Aplicando o princípio Aberto-Fechado, os problemas apontados são evitados, porque a classe Pagamento não pre-
cisa mais ser alterada quando uma nova forma de pagamento for inserida, basta a inclusão de uma subclasse com a
nova forma de pagamento com os métodos específicos deste tipo de pagamento.
Desta forma as classes serão mais simples e não estarão sobrecarregadas de atribuições.
Retomando o exemplo ilustrado na figura 9 temos uma classe Pagamento (base) e subclasses derivadas (Parcelado,
Avista, Debito e Credito). Respeitar o princípio LSP significa dizer que posso usar qualquer classe derivada como se fosse
a classe Base Pagamento, sem alterar o comportamento da classe base.
13
Arquitetura de Software
A figura 11 representa, por meio de marcações hachuradas, as classes que são afetadas quando a classe
Canvas é alterada. Observe que uma alteração em Canvas afeta todas as demais classes relacionadas a ela.
14
Arquitetura de Software
15
Arquitetura de Software
Exercícios do Capítulo 1
Caro aluno, neste capítulo descreveremos os Vale lembrar que o conceito de padrões arquiteturais
padrões arquiteturais e exemplos de aplicação diferencia-se de padrões de projetos e ambos são assun-
serão apresentados, bem como os benefícios da tos tratados neste material de ensino.
sua utilização em diferentes casos.
16
Arquitetura de Software
De uma maneira mais simplificada, Pressman (2010) define arquitetura de software como “estrutura do sistema que
abrange os componentes de software, as propriedades externamente visíveis destes componentes e as relações entre
eles”.
As seções a seguir descrevem os principais padrões arquiteturais, suas vantagens e desvantagens. Vale lembrar que
existem muitos outros padrões possíveis, simples ou compostos, mas vamos nos ater aos mais utilizados nesta abor-
dagem.
• Objetivo
Este padrão tem por objetivo decompor a aplicação em módulos reutilizáveis, organizados por funcionalidades espe-
cíficas, como por exemplo, acesso a dados, lógica de negócio, construção da interface etc.
• Contexto
São mais utilizados em sistemas grandes e complexos que necessitam de decomposição, pois frequentemente são
compostos por operações de baixo e alto nível. Deste modo, o agrupamento de tarefas comuns aumenta a escalabilida-
de e facilita a manutenção de camadas distintas.
• Estrutura
Cada camada pode ser definida pela sua função e pelos vínculos que ela mantém com as outras camadas da apli-
cação. A estrutura desta arquitetura pode ser dividida em N-camadas, de acordo com a necessidade da aplicação. No
entanto, o padrão mais utilizado é o de 3 camadas: interface com o usuário, lógica de negócio e acesso a dados. A figura
13 ilustra este modelo.
17
Arquitetura de Software
• Aplicabilidade
• Consequências
Vantagens:
Desvantagens:
• Exemplo de aplicação
Considere o seguinte cenário: uma empresa possui diversas bases de dados alimentadas de modo independente e
deseja fornecer informações processadas por uma única regra de negócio para diferentes plataformas de acesso.
Neste caso a arquitetura em 3 camadas pode ser implementada permitindo o desenvolvimento de componentes espe-
cíficos para bases distintas, interfaces adequadas para cada dispositivo e uma regra de negócios centralizada e comparti-
lhada, conforme ilustrado na figura 14.
18
Arquitetura de Software
Figura 14: Arquitetura em camadas para o exemplo de múltiplas bases e múltiplas plataformas.
19
Arquitetura de Software
Vantagens:
• Contexto
Sistemas que processam sequências de dados e exe- • Reutilização de Filters em aplicações distintas;
cutam a mesma operação várias vezes, podem fazer uso • Flexibilidade através da troca e recombinação de
deste padrão para encapsular tarefas e reutilizá-las como Filters;
etapas independentes na mesma pipeline ou em outras.
• Possibilidade de processamento paralelo.
• Estrutura
Desvantagens:
De acordo com Buschmann (1996), e conforme ilustra-
do na figura 15, a estrutura deste padrão é composta da
• Compartilhamento de estado intricado;
seguinte forma:
• Complexidade no tratamento de erros em casca-
• Filters: são componentes responsáveis por trans- ta;
formar dados de entrada. O processamento de
• Perda de desempenho no processamento dos da-
um filter deve depender apenas desses dados, a
dos em sequencias com muitas etapas.
fim de permitir sua utilização no desenvolvimento
de outros sistemas;
• Exemplo de aplicação
• Pipes: são as conexões entre Filters, e são res-
ponsáveis pela transferência de dados e pela sin- Considere o seguinte cenário: um banco realiza diversas
cronização entre os componentes acoplados; transações financeiras através do processamento de arqui-
vos texto padronizados. Cada transação possui uma confi-
• Data Source: fonte de dados sequenciais padro-
guração específica para os dados de entrada. No entanto,
nizados;
várias operações são comuns em transações distintas.
• Data Sink: processo responsável por coletar o re-
sultado final da sequência de processamento rea- Neste exemplo, toda entrada de dados será realizada
lizada pelos Filters. através de arquivos texto, portanto, podemos utilizar um
único componente para “Leitura de Arquivos”. Contudo, as
regras de negócio para cada transação são independentes
• Aplicabilidade
e devem ser empregados componentes específicos confor-
Caro aluno, o padrão Pipes and Filters pode ser aplicado me a necessidade.
nas seguintes condições:
Em uma etapa seguinte todas as transações geram re-
• Dados de entrada e saída padronizados; latórios através de outro componente compartilhado. Por
fim, o componente de “Leitura de Arquivos” é utilizado
• Necessidade de processar dados sequenciais;
novamente para processar o conteúdo dos relatórios e dis-
• Etapas paralelas não devem compartilhar infor- ponibilizá-lo ao Data Sink. A figura 16 ilustra este exemplo.
mação;
20
Arquitetura de Software
Figura 16: Arquitetura Pipes e Filters para transação financeira com múltiplas entradas e processos compartilhados.
Acesse o link e saiba mais sobre o padrão arquitetural Pipes and Filters.
http://elemarjr.net/2011/03/22/architectural-patterns-pipes-and-filters/
• Objetivo
O objetivo do padrão arquitetural Blackboard, é dividir um problema não determinístico entre subsistemas especia-
lizados para solucionar o objetivo de modo cooperativo.
21
Arquitetura de Software
• Contexto • Consequências
Desvantagens:
• Aplicabilidade
Caro aluno, o padrão Blackboard pode ser aplicado nas • Testes complexos, devido à dificuldade de repro-
seguintes condições: duzir resultados não determinísticos;
• O problema global pode ser resolvido através de • Grande esforço no processo de desenvolvimento;
soluções parciais, seguindo a abordagem “dividir
• Não suporta paralelismo integral;
para conquistar”;
22
Arquitetura de Software
o usuário e executar ações. Neste contexto são empregados agentes distintos com as seguintes funções: interpretação
de palavras isoladas; interpretação de comandos compostos como frases; reconhecimento de sinal de voz.
Este problema pode ser modelado da seguinte forma: um codificador repassa o sinal para um agente de reco-
nhecimento, que por sua vez, verifica as permissões de acesso para o usuário. Caso o acesso seja liberado, o sinal é
encaminhado para o interpretador de palavras, que transforma o sinal em texto e envia o conjunto de palavras para a
verificação de comandos compostos. Nesta etapa um agente verifica se o padrão formado pelo conjunto de palavras
extraídas do sinal é compatível com algum comando armazenado na estrutura de dados central. Esta sequência de
controle pode ser induzida através de heurística ou inferida com o auxílio de algoritmos de aprendizado. A figura 17
ilustra este exemplo.
Model-View-Controller (MVC)
O padrão MVC é um modelo de camadas específico que divide a aplicação em três componentes:
23
Arquitetura de Software
• o Controller, ou controlador, que gerencia a inte- • Control: interpreta eventos de entrada e envia re-
ração entre as entradas do usuário e os dados do quisições para o modelo de dados. Em seguida,
sistema. processa os dados carregados a partir do modelo
e envia para o visualizador.
• Aplicabilidade
As aplicações interativas com uma interface homem- • Seja necessário suportar diferentes plataformas
-computador flexíveis, podem fazer uso deste padrão ar- sem a necessidade de alterar a base da aplicação.
quitetural.
• Consequências
• Estrutura
24
Arquitetura de Software
Desvantagens:
• Aumento de complexidade;
• Exemplo de aplicação
Considere um sistema de gerenciamento que atende todos os departamentos de uma determinada empresa, da
produção até a presidência. Vários funcionários fornecem e consomem informações simultaneamente através de plata-
formas e dispositivos distintos, como computadores, celulares e tablets. Porém, para cada setor as informações devem
ser visualizadas da forma mais conveniente. Ou seja, os operadores têm acesso a informações específicas do seu tra-
balho, os gestores controlam planilhas detalhadas da sua equipe e a diretoria visualiza apenas os balancetes. A figura
18 ilustra esta situação.
Figura 18: Arquitetura MVC aplicada à modelagem de um sistema de gerenciamento com base compartilhada e visualização personalizada.
25
Arquitetura de Software
Acesse o link e veja um simples exemplo de • Servidores internos: componentes adicionais que
implementação em Java. estendem as funcionalidades do Microkernel. Ser-
http://www.dsc.ufcg.edu.br/~jacques/cur- vidores internos podem, portanto, encapsular al-
sos/map/html/arqu/mvc/mvc.htm gumas dependências no hardware subjacente ou
sistema de software.
Para ver um exemplo em C# acesse:
• Servidores externos: componentes que utilizam
http://www.macoratti.net/10/07/asp_mvc1. os recursos do Microkernel para executar suas
htm próprias interfaces.
• Objetivo
• Contexto
• Microkernel: é o principal componente deste padrão. • Os módulos podem ser categorizados em grupos
Ele implementa serviços centrais como comunicação que usam o mesmo núcleo funcional de diferentes
e gerenciamento de recursos. Os módulos acoplados maneiras;
26
Arquitetura de Software
• A plataforma de aplicação deve ser portável, extensível e adaptável para permitir uma fácil integração de tec-
nologias emergentes;
• O núcleo funcional da aplicação deve ser separado em um componente com tamanho mínimo, e os módulos
devem ser adicionados conforme a necessidade.
• Consequências
Vantagens:
• Portabilidade: na maioria dos casos apenas o Microkernel precisa ser reescrito e alterações de hardware deman-
dam modificações apenas em suas dependências específicas;
• Flexibilidade e extensão: uma das maiores vantagens desta arquitetura é a capacidade de extensão e adapta-
ção do sistema através da inclusão de novos módulos sem a necessidade de alterações no núcleo;
• Separação de mecanismos e políticas: o Microkernel controla apenas os mecanismos básicos e permite que os
módulos implementem suas políticas específicas;
• Confiabilidade: a tolerância a erros pode ser facilmente suportada porque os sistemas distribuídos permitem
que se ocultem as falhas de um usuário;
• Transparência: em sistemas distribuídos a arquitetura Microkernel permite que cada componente acesse outros
serviços sem a necessidade de saber a sua localização.
Desvantagens:
• Desempenho: softwares monolíticos com foco específico são mais eficientes que a arquitetura Microkernel;
• Exemplo de aplicação
Suponha que você pretende desenvolver um novo sistema operacional para celulares que deverá atender os seguintes
requisitos: fácil portabilidade para qualquer aparelho, integração simplificada de novas aplicações e possibilidade de
executar aplicativos de outros sistemas similares.
27
Arquitetura de Software
Neste caso você deverá implementar uma estrutura elementar mínima que permita a expansão dos recursos com a
inclusão de módulos. A execução de aplicativos externos poderá ocorrer através de adaptadores ou emuladores, que
tenham acesso aos recursos do núcleo principal do sistema operacional. A figura 19, ilustra a estrutura deste exemplo.
28
Arquitetura de Software
Desvantagens:
O padrão Reflection visa à criação de sistemas que
suportem a sua própria modificação sem a necessidade de
alterar a estrutura lógica da aplicação. • Modificações incorretas nos parâmetros do nível
Meta podem causar falhas;
• Contexto
• Aumento do número de componentes proporcio-
Sistemas que dependem de adaptações frequentes po-
nal à quantidade de parâmetros utilizados no nível
dem implementar este padrão arquitetural para facilitar o
Meta;
processo de modificação.
• Baixa eficiência causada pela interpretação dos
• Estrutura parâmetros em tempo de execução;
29
Arquitetura de Software
Figura 20: Arquitetura Reflection aplicada ao projeto de um sistema para extração de informações em websites com estrutura volátil.
Exercícios do Capítulo 2
( ) No padrão Reflection qualquer alteração pode ser realizada através do nível Meta
3 - Cite um objetivo comum a todas as arquiteturas apresentadas neste capítulo e compare os exemplos.
30
Arquitetura de Software
Fonte:http://www.selectorweb.com/design_patterns.html
O resultado que se espera é ter aplicações nas quais
seja mais fácil se efetuar procedimentos de manuten-
Os primeiros registros de design patterns ou padrões de
ção, cujo código seja mais facilmente compreendido pela
projeto foram publicados por Erich Gamma, Richard Helm,
equipe do projeto e que favoreçam o reuso de código,
Ralph Johnson, John Vlissides em 1994 no livro Design
aumentado seu tempo de vida e postergando o início da
Patterns: elements of reusable object-oriented software.
degradação.
31
Arquitetura de Software
rem, ocorreram e irão ocorrer novamente. A pergunta que sempre fazemos é: “como vamos solucionar este problema
desta vez?”.
Documentar um padrão é uma maneira de podermos reusar e possivelmente compartilhar uma informação que
aprendemos em relação à melhor maneira de se resolver um determinado problema de software.
• Os padrões já foram provados e refletem a experiência, o conhecimento e as soluções dos desenvolvedores que
tiveram sucesso usando-os em seus trabalhos.
• Os padrões são reusáveis e provêem uma solução pronta que pode ser aplicada a diferentes problemas.
• Os padrões provêem um vocabulário comum que pode expressar muitas soluções, de forma sucinta e objetiva.
Mas é importante lembrar que os padrões, por si só, não garantem o sucesso do seu uso. A descrição do padrão indi-
ca quando ele pode ser aplicado, mas apenas a experiência pode determinar quando um padrão particular irá melhorar
o projeto do sistema.
O principal objetivo de um Design Pattern é criar uma abstração de um problema recorrente e apresentar uma
solução viável, além de poder compartilhar este conhecimento para que outras pessoas se beneficiem dele. Assim, a
documentação de um Design Pattern deve ser feita de uma forma muito bem definida. De uma maneira geral, a docu-
mentação de um padrão inclui a definição dos seguintes itens:
• Objetivos ou pré-requisitos que devem ser satisfeitos antes de se decidir aplicar um padrão;
A figura 21 apresenta o Mapa de Padrões de Projetos proposto pela Gang of Four (GoF). Parte destes padrões será
abordada nesta disciplina.
32
Arquitetura de Software
33
Arquitetura de Software
O catálogo de padrões do GoF contém 23 padrões e está, basicamente, dividido em três seções:
Os padrões de projeto do GoF são soluções para problemas recorrentes no desenvolvimento de sistemas de software
orientado a objetos. A figura 22 mostra a divisão destes padrões, no contexto da programação orientada a objetos.
Os padrões de criação se referem à instanciação de objetos, os estruturais estão ligados com a composição de
classes ou objetos e os comportamentais procuram caracterizar formas de interação entre classes e objetos. Um padrão
GoF também é classificado segundo o seu escopo em 2 outros grupos:
• Padrões com escopo de classe : definido por relacionamentos de herança e em tempo de compilação.
• Padrões com escopo de objeto : encontrados no relacionamento entre os objetos definidos em tempo de exe-
cução.
Neste capítulo trataremos dos padrões de criação e nos capítulos seguintes apresentaremos os padrões estruturais
e os comportamentais.
Mas, antes de prosseguirmos, um pouco de humor...
34
Arquitetura de Software
Ainda para manter o bom humor, leia sobre “Princípios Comuns de Design”
Disponível em: http://www.princiweb.com.br/blog/programacao/o-que-sao-design-patterns/
“Há diversos princípios comuns de design, que, assim como os design patterns, se tornaram boas práticas
através dos anos e ajudaram que software de fácil manutenção pudessem ser construídos. Abaixo, segue um
resumo dos princípios mais conhecidos:
35
Arquitetura de Software
O princípio do DRY é evitar a repetição de qualquer parte do sistema abstraindo as coisas que são comuns
entre si e colocá-las em um lugar único. Esse princípio não se preocupa somente com o código, mas qualquer
lógica que está duplicada no sistema.
O principio Tell, Don’t Ask está estreitamente alinhado com o encapsulamento e a atribuição de responsabilida-
des para as suas classes corretas. O princípio afirma que você deve dizer aos objetos quais ações você quer que
eles realizem, ao invés de fazer perguntas sobre o estado do objeto e então tomar uma decisão por si próprio em
cima da ação que você quer realizar. Isso ajuda a alinhar as responsabilidades e evitar o forte acoplamento entre
as classes.
O princípio YAGNI se refere à necessidade de adicionar somente as funcionalidades que são necessárias para
a aplicação e deixar de lado qualquer tentação de adicionar outras funcionalidades que você acha que precisa. “
Fonte: http://jutalala.wordpress.com/2011/07/17/e-nisso-que-da-competir-com-o-deus-da-criacao/
Caro aluno, padrões de criação auxiliam na concepção de sistemas independentes do modo como os objetos são
gerados, compostos e representados. Este tipo de padrão abstrai o processo de instanciação, alterando a classe instan-
ciada através e herança. [GAMMA, 1995]
36
Arquitetura de Software
Os padrões de criação podem ser competitivos ou cooperativos. Algumas técnicas se complementam enquanto outras
executam funções similares de formas distintas. As cinco abordagens presentes no modelo GoF serão apresentadas a seguir.
Fonte: http://justintarte.blogspot.com/2010/07/if-you-have-ever-walked-into-factory.html
De acordo com Gamma (1995), o objetivo do padrão Abstract Factory é fornecer uma interface para criar grupos de
objetos relacionados aos dependentes sem especificar suas classes concretas.
• Contexto
Produtos portáveis utilizam o conceito abstrato deste padrão para desvincular código fundamental da aplicação
de recursos que são dependentes da plataforma.
• Estrutura
• AbstractFactory: declara uma interface para operações que criam objetos abstratos;
• ConcreteProduct: implementa uma interface de AbstractProduct para definir um objeto que pode ser criado por sua
ConcreteFactory correspondente;
• Client: utiliza as interfaces declaradas pelo AbstractFactory e AbstractProduct, sem se preocupar com as implemen-
tações concretas.
37
Arquitetura de Software
• Aplicabilidade
• Consequências
Vantagens:
Desvantagens:
• Contexto
• Alta complexidade para suportar novos produtos. Sistemas capazes de gerar ações indeterminadas
Este processo requer alteração do Abstract Fac- para uma única aplicação, utilizam a estrutura modular
tory e todas as subclasses. deste padrão para permitir a implementação de soluções
alternativas que utilizem recursos oriundos de uma fonte
• Exemplo de aplicação
única.
Considere um sistema de diagnóstico para telefones
celulares. Os componentes principais executam funções si- • Estrutura
milares, no entanto, cada fabricante emprega sua própria
arquitetura de hardware e software. Neste caso, é possível Este padrão é composto pelos seguintes elementos:
desenvolver uma biblioteca abstrata genérica e implemen- • Builder: especifica uma interface abstrata para a
tar classes concretas adequadas para cada aparelho. criação de módulos do sistema;
38
Arquitetura de Software
• Concretebuilder: cria e executa módulos através da interface do Builder; controla a representação criada e
fornece um meio para obtenção dos resultados;
• Product: representa um módulo alternativo que inclui interfaces para geração do resultado final.
• Aplicabilidade
• O algoritmo para a criação de um objeto complexo deve ser independente dos módulos que compõem o sis-
tema e como eles são montados;
• Consequências
Vantagens:
• Permite variar o resultado gerado por um sistema. Como o sistema é construído através de uma interface abs-
trata, tudo que você precisa fazer para mudar a representação interna é definir um novo tipo de construtor;
• Isola o código para a construção e representação. O padrão Builder melhora a modularidade, encapsulando a
maneira como um objeto complexo é construído e representado;
• Proporciona um melhor controle sobre o processo de criação de objetos, pois carrega o sistema passo a passo
sob o controle do Director.
Desvantagens:
• Pelo fato de ser um padrão bastante flexível, pode resultar no uso redundante e mal planejado, impactando
no entendimento do código gerado.
• Exemplo de aplicação
Considere um sistema para tratamento de imagens. Atualmente existem diversos recursos e todos os anos surgem
novos algoritmos que fornecem funções inovadoras.
No entanto, o conceito fundamental dessas ferramentas é único: uma imagem original é fornecida e uma imagem
tratada é obtida no final do processo. Portanto, a base do sistema precisa implementar apenas essas funções e a cada
novo algoritmo que surge um novo módulo deve ser desenvolvido com suas características específicas.
39
Arquitetura de Software
Fonte: http://www.ibm.com/developerworks/br/library/os-datavis2/index.html
De acordo com Gamma (1995), o objetivo do padrão Factory Method é definir uma interface para criação de objeto
que permita que as subclasses decidam qual classe será instanciada.
• Contexto
Sistemas que manipulam um número variável de tipos de objetos podem utilizar este modelo devido à sua flexibili-
dade. O Factory Method permite que a aplicação final implemente o suporte aos objetos necessários.
• Estrutura
• ConcreteCreator: sobrescreve o método original para retornar uma instancia do objeto esperado, ou seja o
ConcreteProduct.
40
Arquitetura de Software
• Aplicabilidade
Padrão Prototype
Este padrão pode ser usado nas seguintes situações:
Fonte:http://allthecars.wordpress.com/2009/07/22/lotus-projeta-
compacto-urbano-movido-a-eletricidade/lotus-city-car-prototipo-04/
• Consequências
Vantagens: • Objetivo
• Estrutura
Considere uma aplicação que carrega vários tipos de • Client: cria objetos solicitando um clone ao pro-
arquivos distintos. As funções básicas de busca, leitura e tótipo.
gravação são as mesmas em qualquer situação. Contudo,
cada arquivo possui características particulares que são
• Aplicabilidade
definidas por subclasses específicas. Portanto, o aplicativo
não sabe qual classe deve ser instanciada até a subclasse, O padrão Prototype pode ser empregado nas seguintes
associada a um arquivo, informá-lo. situações:
41
Arquitetura de Software
Vantagens:
possuem referenciais circulares. minado Singleton, que define uma instância de operações
única que provê acesso aos outros recursos do sistema.
• Exemplo de aplicação
um sistema deve trabalhar com vários tipos distintos de O padrão Singleton é adequado nos seguintes
arquivos. A diferença é que no modelo Prototype não é casos:
necessário implementar uma nova classe para cada tipo • Deve haver exatamente uma instância de uma
de arquivo suportado pelo sistema. Essa distinção é feita classe acessível de qualquer ponto do sistema;
42
Arquitetura de Software
• Quando a instância única deve ser extensível atra- 3 – Leia a situação problema abaixo e indique qual pa-
vés de subclasses e os clientes devem ser capazes drão de projeto pode ser utilizado para resolver o
de usar uma instância estendida sem modificar problema.
seu código.
“A empresa CPI precisa desenvolver um media player
para um grande cliente. O Software faz parte de uma cam-
• Consequências
panha de marketing da empresa que permitirá ao cliente
Vantagens: ouvir músicas em diferentes formatos. Trata-se de um
brinde da empresa que agregará valor aos produtos ven-
• Controlar o acesso à instância única, definindo didos.
quando e como ela poderá ser acessada;
A equipe desenvolvimento não está conseguindo impe-
• Reduz o uso de variáveis globais;
dir que apenas uma música seja tocada.
• Permite refinamento de operações e de represen-
tações, através de classes estendidas; Se o usuário clicar em duas músicas para tocá-las, o
• Permite variar o número de instâncias mantendo media player não interrompe a música anterior, tocando
o controle de acesso; uma música sobreposta pela outra”.
43
Arquitetura de Software
• Aplicabilidade
• Objetivo
Vantagens:
O padrão Adapter é usado quando queremos converter
a interface de uma classe em outra interface utilizada • Permite que uma aplicação utilize funcionalidades
conjunto, pois de outra forma seria impossível por causa • Uma classe Adapter implementa uma interface
de suas interfaces incompatíveis. conhecida dos clientes e permite acesso a instân-
cias de uma classe não conhecida
• Contexto
• Um objeto Adapter provê a funcionalidade prome-
Este padrão é bastante útil quando precisamos da tida por uma interface sem fixar a classe que de
comunicação entre classes que não poderiam trabalhar fato a implementa
juntas devido à incompatibilidade de suas interfaces.
• Exemplo de aplicação
44
Arquitetura de Software
• Aplicabilidade
Vantagens:
• Contexto
Caro aluno, vimos na seção 1.5 os princípios conhecidos • Separa interface de implementação;
como SOLID. Estes princípios nos auxiliam a lidar com o
• Melhora as hierarquias de abstração e Implemen-
acoplamento entre os objetos de um sistema o que evita a
tação;
degradação do código, em função das mudanças que ele
• Esconde detalhes de implementação dos clientes.
sofre. O padrão Bridge é uma das formas de desacoplar
objetos do sistema, porém este padrão propõe a separação
• Exemplo de aplicação
dos conceitos de implementações, ou seja, podemos
ter uma classe que representa o conceito de algo e outra
que especifica o código desta classe.
• Estrutura
45
Arquitetura de Software
• Consequências
Vantagens:
• Estrutura
dinamicamente.
46
Arquitetura de Software
• Exemplo de aplicação
Padrão Façade
• Objetivo
• Contexto
• Estrutura
47
Arquitetura de Software
• Consequências
Vantagens:
Capítulo 5 – Design Patterns – Padrões
Comportamentais
• Transparência, pois é utilizada a mesma sintaxe
na comunicação entre o cliente e o objeto real;
Caro aluno, neste capítulo serão apresenta-
• Tratamento inteligente dos dados no cliente dos os padrões de projetos classificados como
comportamentais pelo GoF. Observe que os pa-
• Maior eficiência com caching no cliente.
drões classificados nesta categoria atuam na ins-
tanciação das classes que descrevem o compor-
Desvantagens: tamento de uma aplicação de software.
48
Arquitetura de Software
• Aplicabilidade
Padrão Chain of Responsability
Gamma (1995) recomenda o uso deste padrão quando:
• Objetivo • Mais de um objeto pode tratar uma solicitação e
este é desconhecido.
Um sistema desenvolvido sob o paradigma orientado a
objetos trabalha com a interação entre os objetos que o • Quando quiser emitir um pedido de um dos vá-
O desenvolvedor do sistema precisa especificar qual o • O conjunto de objetos capaz de tratar da solicita-
objeto que irá tratar uma requisição (mensagem). O pa- ção deve ser especificado dinamicamente.
drão de projeto Chain of Responsability propõe uma parti-
cular maneira de tratar estas requisições.
• Consequências
• Contexto Vantagens:
49
Arquitetura de Software
• Aplicabilidade
Fonte: http://mundoestranho.abril.com.br/materia/como-
funcionam-as-maquinas-a-dinheiro-de-refrigerantes
Aplicável em sistemas que possuem um conjunto de
objetos que se comunicam de forma bem definida, mas
Este é um exemplo de desacoplamento, pois se alguém
complexa.
não resolver determinada tarefa ocorre uma delegação da
responsabilidade para outro objeto de forma transparente.
• Consequências
Vantagens:
Padrão Mediator
• Ao mudar um comportamento de diferentes clas-
• Objetivo
ses, apenas o Mediator será afetado.
O padrão Mediator define um objeto que encapsula a
• Um Mediator simplifica protocolos de objeto, uma
interação entre um conjunto de objetos. Favorece um aco-
vez que substitui uma interação muitos-para-
plamento fraco ao evitar que os objetos se refiram explici-
-muitos para interações um-para-muitos entre o
tamente uns aos outros, ou seja, gerencia as colaborações
Mediator e os seus colegas.
entre um grupo de objetos.
• A política de comunicações está centralizada no
mediador e pode ser alterada sem mexer nos seus
• Contexto
colegas.
Prezado aluno, caso já tenha alguma experiência com
Desvantagem:
programação em uma linguagem orientada a objetos, você
sabe que um programa possui um número muito gran-
de de classes e o código está espalhado nestas classes. • Um Mediator encapsula protocolos e pode tornar-
-se mais complexo do que qualquer colega indivi-
Quanto maior o número de classes seu projeto tiver, mais
dual. Isso pode tornar o Mediator muito complexo
complexa será a comunicação entre eles.
e com uma grande quantidade de código, o que
dificultará a sua manutenção.
Com o padrão Mediator, a comunicação entre os obje-
tos é encapsulada com um objeto Mediador reduzindo a • Exemplo de aplicação
dependência entre eles.
A torre de controle de um aeroporto, de forma análoga,
demonstra o uso deste padrão. Os pilotos dos aviões que
• Estrutura
se aproximam ou partem do aeroporto, comunicam-se com
A estrutura deste padrão é composta pelos seguintes a torre, em vez de se comunicarem entre si. As restrições
itens: de quem pode pousar ou levantar voo são definidas pela
50
Arquitetura de Software
torre. É importante notar que a torre não controla todo o • ClasseConcreta: Guarda os estados definidos e
voo de um avião. A sua função é apenas estabelecer as envia notificações para seus observadores.
restrições relativas ao pouso e decolagem do aeroporto.
• ClasseObservadora: mantém a referência para a
Exemplo adaptado de: http://pt.scribd.com/
ClasseConcreta. Implementa o Observador.
doc/39006620/23/Mediator-Mediador
• Aplicabilidade
• Contexto
• Tanto observadores quando sujeitos observados
Utilizado em situações em que se tem forte acoplamento
podem ser reutilizados e ter sua interface e imple-
de classes do tipo muito- para-muitos. Um Observador
mentação alteradas sem afetar o sistema.
conhece regiões críticas do sistema e pode reduzir os
efeitos colaterais de uma manutenção no código. • O acoplamento forte implicado pelo relacionamen-
to bidirecional é reduzido com o uso de interfaces
• Estrutura e classes abstratas.
• Observador: define uma interface de atualiza- • Sistemas em que todos notificam todos a cada
ção para objetos que devem ser notificados de mudança ficam inundados de requisições (“tem-
uma mudança. pestade de eventos”).
51
Arquitetura de Software
• Objetivo
• Conjunto de algoritmos relacionados.
O padrão Strategy define uma família de algorit-
mos, encapsula cada um e os torna intercambiáveis. Este • É uma alternativa ao uso de subclasses.
padrão permite que o algoritmo varie independentemente
• Elimina comandos condicionais.
dos clientes que o utilizam.
• Contexto Desvantagens:
Este padrão é utilizado quando se deseja que um algo-
ritmo trate de forma diferente os dados submetidos a ele, • Gera um aumento do número de objetos no sis-
ou seja, de acordo com um contexto o algoritmo apresen- tema.
tará um comportamento.
A estrutura deste padrão é composta pelos seguintes Caro aluno, suponha um banco que deva praticar uma
itens: taxa para cada tipo de cliente. Teríamos que implementar,
para cada tipo de cliente, um algoritmo diferente e para
• Estratégia: define uma interface comum para to-
cada novo tipo realizar um conjunto de alterações.
dos os algoritmos suportados.
• EstrategiaConcretaA e EstrategiaConcretaB: im-
O padrão Strategy pode definir os tipos de clientes,
plementa o algoritmo usando a interface de Es-
mas sua implementação deve estar em outras classes que
tratégia.
as implementam.
52
Arquitetura de Software
Fonte:http://www.serasaexperian.com.br/serasaexperian/publicacoes/revista/2008/67/revista_0358.htm
Acesse o link e veja um exemplo de implementação do padrão Strategy.
https://www.youtube.com/watch?v=tFX1uAjvrww
Padrão Visitor
• Objetivo
Este padrão representa uma operação a ser realizada nos elementos de um objeto. O Visitor permite definir uma
nova operação sem mudar as classes dos elementos nos quais opera. [GAMMA,1995].
Dentre os princípios de modelagem SOLID, o padrão Visitor contribui no atendimento ao princípio OCP, em que uma
classe deve estar “aberta” para extensão, porém fechada para modificação.
• Contexto
O Visitor permite plugar novas funcionalidades em objetos sem precisar alterar a estrutura de herança. É utilizado
para evitar espalhamento e fragmentação de código.
53
Arquitetura de Software
54
Arquitetura de Software
Considerações finais
55
Arquitetura de Software
criar efeitos colaterais, tornando árdua a atividade de ge- experiência em linguagens de programação e
56
Arquitetura de Software
3 - Cite um objetivo comum a todas as arquiteturas classe seja responsável por “tocar” a música. Esta classe
apresentadas neste capítulo e compare exemplos: deve ser implementada respeitando o padrão Singleton.
57
Arquitetura de Software
nestas classes. Quanto maior o número de classes maior OCP - Open Close Principle (Princípio Aberto-Fechado)
o nível de espalhamento e de dependência entre essas OMG - Object Management Group
classes. Com o padrão Mediator, a comunicação entre os OMT - Object Modeling Technique
objetos é encapsulada com um objeto Mediador reduzindo OO – Orientação a Objetos
a dependência entre eles. OOSE - Object-Oriented Software Engineering
POO – Programação Orientada a Objetos
2 – Quando você deseja incluir novas operações SRP - Single Responsability Principle (Princípio de
a um objeto sem precisar mudar sua estrutura de Responsabilidade Única)
herança, utilizamos qual padrão de projeto? SO – Sistema Operacional
UML – Unified Modeling Language (Linguagem de
O padrão Visitor, pois ele permite definir uma nova Modelagem Unificada)
operação sem mudar as classes dos elementos nos quais
opera.
Bibliografia
3 – Cite duas desvantagens na utilização do
padrão Observer. BASS L.; CLEMENTS P; KAZMAN R. Software Architec-
ture in Practice. Addison-Wesley, 2003.
O abuso do uso o Observer pode causar sério impacto
na performance; e os sistemas onde todos os objetos BLAHA, M. R.; RUMBAUGH, J. R. Modelagem e projetos
notificam todos a cada mudança ficam com muitas baseados em objetos com UML 2. Rio de Janeiro, Brasil;
requisições gerando muito eventos. Elsevier, 2006.
4 – Descreva um exemplo de aplicação do padrão BOOCH, G.; RUMBAUGH, J.; JACOBSON, I. UML – guia
Decorator e sua estrutura. do usuário. Rio de Janeiro: Editora Campus, 2006.
O padrão Decorator pode ser aplicado em um projeto BROOKS, F. P. No Silver Bullet: essence and accidents
que necessite, na sua interface gráfica, possuir uma Jane- of Software Engineering. IEEE Computer, April 1987.
la padrão, porém com variações do tipo Janela com borda,
janela com rolagem e/ou com borda e rolagem. BROOKS, F. P. The Mythical Man-Month: Essays on
Software Engineering. 20th Anniversary Edition. Addison-
O Decorator é composto por: Componente, Compo- Wesley Professional, 1995.
nenteConcreto, o Decorator e Decoradores (Decorator-
Concreto1 e DecoratorConcreto2, etc). BUSCHMANN, F.; MEUNIER, R.; ROHNERT, H.; SOM-
MERLAD, P.; STAL, M. A system of patterns: Pattern-ori-
ented software architecture. Chichester: Wiley, 1996.
58
Arquitetura de Software
LARMAN, Craig Applying UML and Patterns: An Intro- SHALLOWAY, A.; TROTT, J. R. Explicando Padrões de
duction to Object-Oriented Analysis and Design and Itera- Projeto: Uma Nova Perspectiva em Projeto Orientado a
tive Development. 1 ed. Prentice Hall, 2004. Objeto. Porto Alegre: Bookman, 2004.
LARMAN, Craig. Utilizando UML e Padrões. 3 ed. Porto SHAW, M.; CLEMENTS, P. A Field Guide to Boxology:
Alegre: Bookman, 2007. Preliminary Classification of Architectural Styles for Soft-
ware Systems. Proceedings of Computer Software and
LAUDON, K. C.; LAUDON, J. P. Management Informa- Applications Conference (COMPSAC ‘97), The Twenty-First
tion Systems: Managing the Digital Firm. 11th ed. Prentice Annual International, Washington, DC, EUA, pp. 6-13, au-
Hall, 2010. gust, 1997.
MARTIN, R. C. Agile Software Development, Principles, MORAIS, T. L. F. Padrões de Design. 2010. Disponí-
Patterns, and Practices. Upper Saddle River: Prentice Hall, vel em: http://di.uern.br/sebastiao/wp-content/uploa-
2003. ds/2010/04/ChainOfResponsibility.pdf. Acesso em: 20 fev.
2012.
PRESSMAN, R. S. Engenharia de Software. 8.ed. São
Paulo: McGraw-Hill, 2010. ZACHMAN, J. Enterprise Architecture: The Issue of the
Century. Database Programming and Design Magazine.
RUMBAUGH, James; et al. Modelagem e Projeto basea- San Francisco, CA, USA, 1997.
dos em objetos. Rio de Janeiro: Campus, 2006.
59