Padrões de Projeto
Padrões de Projeto
Padrões de Projeto
DE PROJETO
FICHA CATALOGRÁFICA
176 p.
CDD - 620.0042
Impresso por:
03507346
RECURSOS DE IMERSÃO
Este item corresponde a uma proposta Utilizado para temas, assuntos ou con-
de reflexão que pode ser apresentada por ceitos avançados, levando ao aprofun-
meio de uma frase, um trecho breve ou damento do que está sendo trabalhado
uma pergunta. naquele momento do texto.
E U I N D I CO ZOOM NO CONHECIMENTO
INDICAÇÃO DE L IVRO
E M FO CO
4
SUMÁRIO
7 UNIDADE 1
PADRÕES DE CRIAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
PADRÕES DE ESTRUTURA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
65 UNIDADE 2
PADRÕES DE COMPORTAMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
PADRÕES DE ARQUITETURA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
ANTIPADRÕES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
119 UNIDADE 3
5
UNIDADE 1
TEMA DE APRENDIZAGEM 1
MINHAS METAS
8
U N I AS S E LVI
9
T E MA DE A PRE ND IZAGEM 1
P L AY N O CO NHEC I M ENTO
VAMOS RECORDAR?
Os padrões de projeto envolvem inúmeros conceitos associados à arquitetura
de software ou programação orientada a objetos. Acerca desse assunto, sugiro o
vídeo, a seguir, que apresenta os conceitos de padrões de projetos e sua aplicação,
e faz parte da série de vídeos chamada Dicionário do Programador.
Disponível em: https://www.youtube.com/watch?v=J-lHpiu-Twk.
1
1
U N I AS S E LVI
IN D ICAÇ ÃO DE FI LM E
UM BOM PROJETO
Criar um bom projeto é algo que sempre deve ser perseguido pela equipe de
desenvolvimento. Diversos padrões e ferramentas auxiliam nessa criação, como
parâmetros de qualidade, testes, arquitetura, outros.
No desenvolvimento não é diferente. Os desenvolvedores devem buscar cons-
tantemente as melhores práticas, como código reutilizável e extensibilidade, ou
seja, o software deve ser flexível para melhorias futuras e escalabilidade, de ma-
neira que funcione bem para um número cada vez maior de usuários.
As ações mencionadas são importantes para o desenvolvimento de qualquer
projeto. Essa definição, no entanto, é subjetiva, podendo variar, dependendo
do cenário em que a empresa está inserida. “Utilizar padrões de projeto é uma
maneira de aumentar a flexibilidade dos componentes do software e torná-los
de mais fácil reutilização. Contudo, isso, às vezes, vem com um preço de tornar
os componentes mais complicados” (Shvets, 2021, p. 37).
1
1
T E MA DE A PRE ND IZAGEM 1
“
Um padrão de projeto sistematicamente nomeia, motiva e explica
uma solução de projeto geral, que trata um problema recorrente de
projeto em sistemas orientados a objetos. Ele descreve o problema,
a solução, quando aplicar a solução e suas consequências. Também
dá sugestões e exemplos de implementação. A solução é um arranjo
genérico de objetos e classes que resolve o problema. A solução
é customizada e implementada para resolver o problema em um
contexto particular (Gamma, 1995 apud Valente, 2004, p. 4).
Segundo Shvets (2021), eles são como plantas de obra pré-fabricadas, que podem
ser customizadas para solucionar um problema de projeto recorrente em seu
código. Assim, faz-se necessário diferenciar algoritmo de padrões, pois muitas
pessoas confundem esses conceitos. O algoritmo é uma sequência bem definida
para se atingir o fim desejado e o padrão de projetos instrui para esse objetivo; a
sequência, no entanto, é definida por você, como na analogia acima.
1
1
U N I AS S E LVI
Grupos de Padrões
Os padrões de projeto podem ser classificados em quatro grupos principais. São eles:
PADRÕES DE CRIAÇÃO
PADRÕES DE ESTRUTURA
1
1
T E MA DE A PRE ND IZAGEM 1
PADRÕES DE COMPORTAMENTO
PADRÕES DE ARQUITETURA
São padrões para problemas abrangentes, de alto nível, em situações que envolvem a
forma com que a aplicação será organizada de acordo com a infraestrutura disponível
e necessária.
Não é muito preciso afirmarmos quem criou os padrões de projeto, pois esses parâme-
tros são soluções adotadas para problemas conhecidos, de forma que elas começaram
com o desenvolvimento em si, no entanto, as raízes dos padrões são inspiradas na ar-
quitetura e engenharia civil, uma vez que as alternativas empregadas nessas áreas eram
frequentemente aplicadas para resolver problemas recorrentes nas estruturas físicas.
“
O conceito de padrões foi primeiramente descrito por Christopher
Alexander em Uma Linguagem de Padrões. O livro descreve uma ‘lin-
guagem’ para o projeto de um ambiente urbano. As unidades dessa
linguagem são os padrões. Eles podem descrever quão alto as janelas
devem estar, quantos andares um prédio deve ter, quão largas as áreas
verdes de um bairro devem ser, e assim em diante (Shvets, 2021, p. 32).
Depois desse livro, foram lançadas outras publicações, sendo que, em 1994, Design Pat-
terns: elements of reusable object-oriented software, de Erich Gamma e outros autores,
foi apelidado de “o livro da Gangue dos Quatro (Gang of Four)” (Shvets, 2021, p. 33).
Esse livro foi muito bem aceito na comunidade de desenvolvimento de soft-
ware, impactando de maneira significativa, já que estabeleceu uma linguagem
comum aos desenvolvedores no que dizia respeito a estruturas de desenvolvi-
mento. Desde o lançamento dessa publicação, padrões em inúmeros projetos
foram aplicados e muitos outros são criados a cada dia, levando a comunidade
de desenvolvedores a otimizar e tornar seus códigos mais claros e flexíveis.
1
1
U N I AS S E LVI
IN D ICAÇ ÃO DE LI V RO
1
1
T E MA DE A PRE ND IZAGEM 1
OS ANTIPADRÕES
Assim como existem padrões de projeto, existem os antipadrões, que são as solu-
ções intuitivas, os quais, porém, levam a problemas estruturais e de manutenção
e destacam práticas a serem evitadas.
A P RO F UNDA NDO
O termo foi definido por Andrew Koenig, em 1995, um ano após o lançamento do
livro Gang of Four. “Um antipadrão sugere outros padrões aplicáveis que podem
oferecer soluções melhores” (Freeman; Freeman, 2007, p. 479). Adicionalmente,
afirma-se que: “um antipadrão sempre parece ser uma boa solução, mas, ao ser
aplicado, acaba produzindo o efeito contrário” (Freeman; Freeman, 2007, p. 479).
GOD OBJECT
SPAGHETTI CODE
1
1
U N I AS S E LVI
“
Os design patterns desempenham um relevante papel na constru-
ção de projetos, pois foram desenvolvidos para serem reutilizados.
Assim, subsidiando aos arquitetos de software uma ferramenta que
irá evitar que os problemas sejam resolvidos a partir de princípios
elementares, ou seja, fazendo tudo desde o início (Valentim; Souza
Neto, 2005, p. 69).
E M FO CO
1
1
T E MA DE A PRE ND IZAGEM 1
NOVOS DESAFIOS
Os padrões de projeto e suas aplicações são extremamente úteis no dia a dia das
empresas, permitindo que elas reduzam o tempo de desenvolvimento e, conse-
quentemente, diminuindo o tempo de implementação das soluções e otimizando
os lucros dos projetos. Além disso, o código ficará extremamente bem estrutura-
do, reduzindo a manutenção, o que levará à redução de custos durante o ciclo de
vida do software implementado, itens que são extremamente valiosos para uma
empresa que atue no ramo de software.
Os padrões de projeto expandem, cada dia mais, as suas áreas de aplicação.
Isso estimulará os profissionais a se especializarem, cada vez mais, nessas apli-
cações e se valorizem, uma vez que o profissional com esse conhecimento se
destacará no competitivo mercado de trabalho.
No início deste tema, questionou-se a respeito da solução que poderia ser ado-
tada, propondo um exercício mental a respeito. Por meio deste conteúdo, a resposta
pôde ser desenvolvida. Em se tratando dos padrões de projeto, como verificamos,
os padrões de criação poderiam ser aplicados para solucionar as questões relacio-
nadas à criação de objetos, sobretudo os padrões factory method e builder.
Percebemos que se trata de um ramo muito interessante para que você ad-
quira mais conhecimentos e especialize-se para que se diferencie no disputado
mercado de trabalho. Discorremos acerca da importância dos padrões de pro-
jeto e do auxílio que esses parâmetros nos fornecem para definir as soluções de
desenvolvimento encontradas no dia a dia do desenvolvimento, revelando-se
como resposta à nossa questão inicial, que era a reflexão por meio das soluções
dos problemas de software.
1
1
AUTOATIVIDADE
I - Os padrões incluídos no livro Gang of Four podem ser considerados os padrões da pri-
meira geração.
II - No livro, os autores identificaram e documentaram 23 padrões de design.
III - No livro, os padrões foram agrupados em três principais categorias: padrões de criação,
padrões estruturais e padrões comportamentais.
a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.
1
1
AUTOATIVIDADE
3. “Um antipadrão sempre parece ser uma boa solução, mas, ao ser aplicado, acaba produ-
zindo o efeito contrário” (Freeman; Freeman, 2007, p. 479).
2
2
REFERÊNCIAS
FREEMAN, E.; FREEMAN, E. Use a cabeça: padrões de projetos. 2. ed. Rio de Janeiro: Alta Books,
2007.
GAMMA, E. et al. Design Patterns: elements of reusable object-oriented software. Reading: Ad-
dison-Wesley, 1995.
VALENTIM, R. A. de M.; SOUZA NETO, P. A. de. O impacto da utilização de design patterns nas
métricas e estimativas de projetos de software: a utilização de padrões tem alguma influência
nas estimativas? Revista da FARN, Natal, v. 4, n. 1, p. 63-74, 2005.
2
2
GABARITO
1. Alternativa A.
A opção A está correta, pois faz parte dos benefícios estudados no tema acerca dos padrões
de projeto.
A opção B está errada, pois a manutenção só é facilitada ao longo do tempo.
As opções C e D estão erradas, pois a manutenção é facilitada.
A opção E está errada, pois a escalabilidade fica maior.
2. Alternativa E.
3. Alternativa C.
2
2
MINHAS ANOTAÇÕES
2
2
TEMA DE APRENDIZAGEM 2
PADRÕES DE CRIAÇÃO
MINHAS METAS
Estabelecer o uso dos padrões de criação e sua função nas soluções dos problemas de
desenvolvimento.
2
2
U N I AS S E LVI
2
2
T E MA DE A PRE ND IZAGEM 2
Os padrões de projeto são soluções que devem ser bem analisadas e antes de
serem soluções que possam ser aplicadas mecanicamente, você deverá refletir a
respeito do seu uso, situações em que podem ser aplicadas as mesmas soluções
propostas ou com algumas alterações.
P L AY N O CO NHEC I M ENTO
VAMOS RECORDAR?
Os padrões de criação ajudam a definir a estrutura do software e constituem a
fundação do software, dentre eles, podemos citar o padrão Singleton, amplamente
utilizado. Este vídeo ilustra esse parâmetro para sua compreensão: https://www.
youtube.com/watch?v=Q4APeeSpClo.
2
2
U N I AS S E LVI
PADRÕES DE CRIAÇÃO
São design patterns que se concentram na maneira de criar objetos ou classes, geren-
ciando a sua instância e dependências. Exemplos incluem: Singleton, Factory Method
e Abstract Factory, que ajudam a centralizar e organizar a criação de objetos em um
sistema, promovendo flexibilidade e manutenibilidade do código.
PADRÕES DE ESTRUTURA
Definem como classes e objetos são compostos para formar estruturas maiores. Eles
facilitam a organização e a comunicação entre os componentes do sistema. Exemplos
incluem: Adapter, Decorator e Composite, que permitem que objetos trabalhem juntos
de maneira eficiente e flexível, garantindo a coesão e a baixo acoplamento.
COMPORTAMENTO
Lidam com a interação entre objetos e responsabilidades distribuídas entre eles. Eles
definem como os objetos se comunicam e como o comportamento é delegado entre
eles. Exemplos incluem: Observer, Strategy e Command, que permitem definir algo-
ritmos, comportamentos e responsabilidades de forma independente, promovendo a
reutilização e a extensibilidade do código.
ARQUITETURA
São padrões de alto nível que definem a estrutura geral e a organização de sistemas
de software. Eles fornecem diretrizes abstratas para projetar sistemas escaláveis,
robustos e flexíveis. Exemplos incluem: MVC (Model-View-Controller), MVVM (Model-
View-View-Model) e Microservices, que orientam a divisão de responsabilidades, a
separação de preocupações e a escalabilidade de sistemas complexos.
2
2
T E MA DE A PRE ND IZAGEM 2
“
Efetivamente, os designs patterns podem contribuir para suavizar a
transição do modelo de análise para o modelo de implementação, haja
vista, balizam-se em tipos recorrentes de problemas de implementação
em projetos de software. Assim, podendo ser vistos como um modelo
de ‘microarquitetura’ aplicado a um dado problema, o que estabelece
uma linguagem comum entre a construção de aplicações que per-
meiam um mesmo contexto (Valentim; Souza Neto, 2005, p. 70).
P E N SA N D O J UNTO S
2
2
U N I AS S E LVI
PADRÕES DE CRIAÇÃO
Padrão Singleton
Esse padrão é relacionado à criação de instância de classes. Ele garante que tere-
mos apenas uma instância da classe criada.
Muitos dos objetos que instanciamos precisam de apenas uma instância.
Um erro de execução poderia ser criado se instanciássemos mais de uma vez.
Como exemplo, podemos citar o objeto que referencia um arquivo de confi-
guração ou uma placa gráfica no seu computador. Por esse motivo, o padrão
faz-se necessário.
Você pode se perguntar por que precisaríamos de um padrão, ao passo que,
poderíamos utilizar variáveis globais e convencionar o uso. Nesse caso, porém,
recursos desnecessários, como memória, poderiam ser desperdiçados.
O padrão Singleton também se trata de uma convenção. Para iniciar o seu
desenvolvimento, devemos observar os passos em comum a seguir:
1. Quando criamos métodos para essa classe, devemos confeccionar o cons-
trutor padrão privado. Assim, impedimos que outras classes acessem esse
bloco de códigos.
Descrição da Imagem: a figura apresenta um quadrado com uma linha horizontal, dividido em duas partes. No
quadro de baixo, temos o método construtor Singleton(), com o sinal de menos do lado esquerdo. Fim da descrição.
2
2
T E MA DE A PRE ND IZAGEM 2
Figura 2 – Classe padrão Singleton e método estático / Fonte: Shvets (2021, p. 154).
Descrição da Imagem: a figura apresenta um quadrado com duas linhas horizontais, que o dividem em três partes. Na
primeira, temos a inscrição Singleton; na segunda, o sinal de menos, ao lado direito, e a palavra “instância” seguida por
dois pontos; e na terceira, a inscrição Singleton, seguida por um abre e fecha de parênteses, assim como, na linha de bai-
xo, o termo GetInstance, um abre e fecha de parênteses, o sinal de dois pontos e a palavra Singleton. Fim da descrição.
“
O padrão Singleton é uma estrutura que define classes que serão instan-
ciadas uma única vez. Classes, como spooler, windowmanager, filesystem,
entre outras, são implementadas dessa forma. Tais classes devem prover
um mecanismo de controle para a criação de uma instância única, ofere-
cendo acesso global ao único objeto criado, bem como permitir uma fácil
especialização em subclasses (Albuquerque; Rojas; Ribeiro, 2010, p. 16).
3
3
U N I AS S E LVI
Padrão Factory
3
3
T E MA DE A PRE ND IZAGEM 2
Segundo Shvets (2021, p. 83), “as subclasses só podem retornar tipos diferentes
de produtos se esses produtos tiverem uma classe ou interface base em comum”.
Descrição da Imagem: em um quadrado, linhas delimitam o espaço com a descrição “interface Produto”. À direita, há
também um quadrado, representando a superclasse, identificada como “Estabelecimento”. Dentro dela, há o método
construtor: CriarEstabelecimento(), delineado por linhas mais espessas. Abaixo, dividindo o restante do espaço, estão dois
quadrados: um rotulado como “Restaurante” e outro como “Lanchonete”. Abaixo do quadrado “Interface”, temos duas im-
plementações de objeto concreto, identificadas como “Concreto Restaurante” e “Concreto Lanchonete”. Fim da descrição.
3
3
U N I AS S E LVI
Figura 5 – Diagrama de classes do padrão Factory – exemplo de plataforma cruzada / Fonte: Shvets (2021, p. 87).
Descrição da Imagem: em um quadrado com o nome Dialog, há o texto: render(), ligado por uma seta pontilhada
à interface Button (outro quadrado) e dois outros quadrados abaixo: um com o rótulo WindowsDialog e outro com
o nome WebDialog, seguidos pelos textos: “create button”. Também temos os respectivos objetos (quadrados)
Windows Button e HTML Button. Fim da descrição.
3
3
T E MA DE A PRE ND IZAGEM 2
Descrição da Imagem: a figura apresenta um quadro com o texto “Interface” e nome “Móveis”, o qual possui
duas classes: EstiloA e EstiloB, logo abaixo, também representadas por quadrados. Cada uma delas, por sua vez,
contém as expressões: criarMesa e criarCadeira, ambos ligados por uma seta à interface móveis. Fim da descrição.
3
3
U N I AS S E LVI
Descrição da Imagem: em um quadro, há um texto com o nome da interface “Produto”, com os textos: “criarPro-
duto” e “criarCadeira”. Abaixo, outros dois quadros, que são as classes: “EstiloA” e “EstiloB”, também com os textos:
“criarMesa” e “criarCadeira”. Essa interface possui dois métodos, representados pelos textos: “criarMesa” e “criar-
Cadeira”, ambos implementados pelas classes mencionadas. Abaixo do quadrado, encontra-se a representação
de duas cadeiras, representadas pelos textos “Cadeira Estilo A” e “Cadeira Estilo B”, respectivamente, com linhas
contínuas, indicando sua estrutura. À esquerda, estão dois quadrados, representando os objetos “Mesa Estilo A”
e “Mesa Estilo B”, respectivamente, também representada por linhas contínuas. Fim da descrição.
“
O código cliente tem que funcionar com ambas as fábricas e produ-
tos via suas respectivas interfaces abstratas. Isso permite que você
mude o tipo de uma fábrica que passou para o código cliente, bem
como a variante do produto que o código cliente recebeu, sem que-
brar o código cliente atual (Shvets, 2021, p. 101).
3
3
T E MA DE A PRE ND IZAGEM 2
Padrão Builder
Descrição da Imagem: em um quadrado, há uma representação textual do diagrama de classes do padrão Builder com
os textos Director, Change Builder e Make, que são os métodos. Na parte à esquerda, encontra-se outro quadrado com o
texto interface Builder e os textos: reset, buildPassoA, buildPassoB, buildPassoZ. Abaixo, há dois quadrados com os textos
Concreto Builder1 e Concreto Builder2, respectivamente, representando as diferentes classes de produtos, cada uma im-
plementando a interface mencionada, ou seja, com os textos: reset, buildPassoA, buildPassoB, buildPassoZ e getResult do
produto. Abaixo, outros quadrados com os textos: Produto 1 e Produto 2 representam os objetos criados. Fim da descrição.
3
3
U N I AS S E LVI
Padrão Prototype
Com esse padrão, torna-se possível copiar objetos sem que sua codificação fique
dependente deles. Fazer a cópia do objeto, por si, pode acarretar alguns problemas.
Por exemplo, se você copiar, não verá métodos privados que a classe possa utilizar.
Outro entrave seria a classe ficar com uma dependência da classe que irá copiar.
O padrão Prototype permite a criação do clone do objeto sem acoplar seu
código à respectiva classe. Esse parâmetro delega a tarefa de clone ao próprio
objeto a ser clonado.
Descrição da Imagem: na esquerda, temos um quadrado com a inscrição Client. Mais à direita, há um quadrado
com a inscrição “Interface”, sendo os dois interligados por uma linha contínua. Em outra linha, temos a palavra “Pro-
totype” e na seguinte, “clone”, indicando os métodos. Abaixo, há outro quadrado com o texto “ConcretePrototype”,
o texto “field1” e os métodos “ConcretePrototype” e “clone”. Logo abaixo, temos outro quadrado com o nome
“SubclassPrototype”, indicando o atributo “field2” e os textos “SubclassPrototype” e “Clone”. Fim da descrição.
3
3
T E MA DE A PRE ND IZAGEM 2
IN D ICAÇÃO DE FI LM E
O Jogo da Imitação
O filme retrata a história de Alan Turing, um matemático e pio-
neiro da computação que desempenhou um papel fundamen-
tal na quebra do código Enigma, usado pelos nazistas durante
a Segunda Guerra Mundial.
Refletindo sobre a história: ao longo do longa-metragem, você
pode observar paralelos entre os desafios enfrentados por Tu-
ring e sua equipe na decodificação do Enigma e os conceitos
de design patterns na engenharia de software. Eles precisavam
identificar padrões nos códigos criptografados para desenvol-
ver estratégias eficazes de decodificação, destacando a impor-
tância de reconhecer e aplicar padrões para resolver proble-
mas complexos, seja na computação, seja em outros campos.
E M FO CO
3
3
U N I AS S E LVI
NOVOS DESAFIOS
Neste tema de aprendizagem, abordamos padrões de projeto de criação que são
reutilizáveis para a solução dos problemas comuns no desenvolvimento de soft-
ware. Verificamos, também, como os padrões Singleton, Factory, Abstract Fac-
tory, Builder e Prototype podem nos ajudar.
A aplicação desses padrões é essencial ao desenvolvimento de software. Para
os estudantes em início de carreira na área de programação, um ponto que os
destaca é o conhecimento de soluções para problemas conhecidos. Portanto, o
desenvolvimento de padrões de criação é um diferencial no mercado de traba-
lho, uma vez que as empresas valorizam candidatos que apresentem habilidades
sólidas em design de software.
Tenha sempre em mente, estudante, que a prática contínua faz parte do aper-
feiçoamento. Isso não apenas lhe ajudará como desenvolvedor, mas também lhe
auxiliará a avançar na carreira.
Como você abordaria o planejamento e desenvolvimento das soluções? Será
que os padrões de criação poderiam contribuir com as atividades?
No início do tema, propusemos um questionamento acerca da forma com
que você abordaria o planejamento e o desenvolvimento das soluções e de-
safios impostos, se de fato os padrões de criação poderiam contribuir com as
atividades necessárias.
Podemos entender que todos os padrões são soluções que foram amplamente
experimentadas e aplicadas, de forma que, entendendo o objetivo e tendo em
mente os benefícios da aplicação, conseguimos aplicar esses temas em nossas
soluções e desafios impostos pelo mercado, usufruindo os benefícios proporcio-
nados pela aplicação de padrões, como flexibilidade e escalabilidade do sistema,
mantendo uma estrutura bem fundada.
Durante o tema, evidenciamos vários padrões, que apresentam soluções vá-
lidas e documentadas para diversos problemas que se apresentam no dia a dia.
Diante desses problemas e soluções apresentadas, podemos responder que o
padrão de projetos é realmente muito importante, pois apresenta soluções para
problemas do cotidiano.
3
3
AUTOATIVIDADE
2. “Imagine que você criou um objeto, mas depois de um tempo, decidiu criar um novo. Ao
invés de receber um objeto fresco, você obterá um que já foi criado” (Shvets, 2021, p. 151).
a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.
4
4
AUTOATIVIDADE
3. “Você está criando uma aplicação de gerenciamento de logística. A primeira versão da sua
aplicação pode lidar apenas com o transporte de caminhões, portanto, a maior parte do
seu código fica dentro da classe Caminhão. Depois de um tempo, sua aplicação se torna
bastante popular. Todos os dias, você recebe dezenas de solicitações de empresas de
transporte marítimo para incorporar a logística marítima na aplicação” (Shvets, 2021, p. 81).
Diante do exposto, assinale a alternativa que representa o padrão que deve ser aplicado ao
cenário descrito:
a) Singleton.
b) Factory Method.
c) Adapter.
d) Decorator.
e) Template Method.
4
4
REFERÊNCIAS
ALBUQUERQUE, M.; ROJAS, A.; RIBEIRO, P. C. M. Utilizando design patterns GoF no apoio ao de-
senvolvimento de um framework Java. Cadernos do IME, Rio de Janeiro, v. 30, n. 1, p. 13-27, 2010.
FREEMAN, E.; FREEMAN, E. Use a cabeça: padrões de projetos. 2. ed. Rio de Janeiro: Alta Books,
2007.
VALENTIM, R. A. de M.; SOUZA NETO, P. A. de. O impacto da utilização de design patterns nas
métricas e estimativas de projetos de software: a utilização de padrões tem alguma influência
nas estimativas? Revista da FARN, Natal, v. 4, n. 1, p. 63-74, 2005.
4
4
GABARITO
1. Alternativa A.
A opção A está correta, pois o Singleton faz parte dos padrões de criação.
As demais opções estão incorretas, pois: B) Factory Method é um padrão comportamental;
C) Decorator é um padrão de extensão; D) State é um padrão de operação; E) Visitor é um
padrão de extensão.
2. Alternativa E.
3. Alternativa B.
4
4
MINHAS ANOTAÇÕES
4
4
MINHAS ANOTAÇÕES
4
4
TEMA DE APRENDIZAGEM 3
PADRÕES DE ESTRUTURA
MINHAS METAS
Definir padrões consolidados, como: Adapter, Facade, Decorator e outros modelos estruturais.
Ilustrar, por meio de diagramas de classes, como o aluno identifica as conexões e chama-
das de métodos.
4
4
U N I AS S E LVI
4
4
T E MA DE A PRE ND IZAGEM 3
P L AY N O CO NHEC I M ENTO
VAMOS RECORDAR?
As situações que enfrentamos no dia a dia envolvem resolução de problemas, as
quais devem ser trabalhadas de forma que apresentem implementações sólidas
e estruturadas. Acerca dos padrões, sobretudo o Strategy, e de sua codificação,
assista ao vídeo sugerido.
Disponível em: https://www.youtube.com/watch?v=WPdrnuSHAQs.
“
[...] efetivamente, os designs patterns podem contribuir para suavizar a
transição do modelo de análise para o modelo de implementação, haja
vista, balizam-se em tipos recorrentes de problemas de implementação
em projetos de software. Assim, podendo ser vistos como um modelo
de ‘microarquitetura’ aplicado a um dado problema, o que estabelece
uma linguagem comum entre a construção de aplicações que per-
meiam um mesmo contexto (Valentim; Souza Neto, 2005, p. 70).
4
4
U N I AS S E LVI
ADAPTER PATTERN
Esse padrão de projeto permite que objetos com interfaces incompatíveis tra-
balhem juntos, convertendo classes e fazendo com que elas trabalhem entre si.
E U IN D ICO
Este vídeo ressalta o padrão Adapter e seu uso explicado com a codificação.
Disponível em: https://www.youtube.com/watch?v=tNbaQpg0k_E.
4
4
T E MA DE A PRE ND IZAGEM 3
A classe responsável por fazer a adaptação herda a interface da classe que precisa
ser adaptada. Essa classe, então, implementa os métodos necessários para suprir
o esperado pela interface, adaptando as chamadas de forma transparente.
Para a classe Adapter conseguir adaptar as comunicações entre os objetos,
ela herda interfaces dos dois padrões a serem utilizados. Como no exemplo da
tomada, ela herda uma interface da tomada alemã e outra da brasileira, mantendo
características dos dois padrões.
A classe que pode ser chamada de adaptadora mantém uma instância da que
precisa ser adaptada, delegando a chamada dos métodos para a solicitação criada,
quando não desejamos herdá-la da classe que deve ser adaptada, como a abor-
dagem anteriormente mencionada.
A seguir, podemos identificar a representação das classes na adaptação por
composição.
5
5
U N I AS S E LVI
BRIDGE PATTERN
“
[...] [ele] permite que você divida uma classe grande ou um con-
junto de classes intimamente ligadas em duas hierarquias separa-
das – abstração e implementação – que podem ser desenvolvidas
independentemente umas das outras.
P E N SA N DO J UNTO S
Imagine que você tenha uma classe chamada forma, a qual possui duas subclas-
ses: uma chamada círculo e outra, quadrado. Cada uma delas tem duas classes,
por exemplo, círculo azul, círculo vermelho, quadrado azul, quadrado vermelho.
Em outras palavras, se criarmos mais uma classe de tipo forma, teremos mais duas
subclasses. Assim, a criação da hierarquia segue uma progressão geométrica.
Compreendeu o problema enfrentado?
“
O padrão Bridge tenta resolver esse problema ao trocar de herança para
composição do objeto. Isso significa que você extrai uma das dimensões
em uma hierarquia de classe separada, para que as classes originais
referenciem um objeto da nova hierarquia, ao invés de ter todos os seus
estados e comportamentos dentro de uma classe (Shvets, 2021, p. 179).
Como exemplo, podemos citar uma API que pode ter várias versões: uma para Windo-
ws; uma para Linux, MacOS e várias GUIs; uma para clientes; e uma para administrado-
res. Uma nova GUI ou sistema operacional fará a hierarquia crescer exponencialmente.
E U IN D ICO
Este vídeo ressalta o padrão Bridge e seu uso explicado com a codificação.
Disponível em: https://www.youtube.com/watch?v=rCyg-8eiLZI.
5
5
T E MA DE A PRE ND IZAGEM 3
ABSTRAÇÃO
Camada GUI
IMPLEMENTAÇÃO
COMPOSITE PATTERN
“
O Composite é um padrão de projeto estrutural que permite que
você componha objetos em estruturas de árvores e, então, trabalhe
com essas estruturas como se elas fossem objetos individuais. Por
exemplo, imagine que você tem dois tipos de objetos: produtos e
caixas. Uma Caixa pode conter diversos Produtos, bem como um
número de Caixas menores. Essas Caixas menores também podem
ter alguns Produtos ou até mesmo Caixas menores que elas, e assim
por diante (Shvets, 2021, p. 195).
O padrão Composite sugere trabalhar com a ideia de produtos e caixas por meio
de uma interface comum. De acordo com Freeman e Freeman (2007, p. 291), ele
“permite que você componha objetos em estruturas de árvore para representar
hierarquias parte-todo. Com esse padrão, os clientes podem tratar objetos indi-
viduais ou composições de objetos de maneira uniforme”.
Um exemplo de aplicação poderiam ser menus e submenus, os quais com-
põem uma árvore. A Figura 1 ilustra o diagrama de classes do padrão.
5
5
U N I AS S E LVI
Figura 1 – Diagrama de classes do padrão Composite / Fonte: Freeman e Freeman (2007, p. 293).
Descrição da Imagem: na parte superior esquerda, há um quadrado, representando o objeto Cliente. Logo à direita, há
outro quadrado com o nome Componente, dividido por duas linhas horizontais, que representam as divisões para o nome
da classe “Componente”, atributos “field” e métodos da classe, representados pelos textos: “operação”, “acrescentar”,
“remover” e “recuperarFilho”. Abaixo desse segundo quadrado, há dois outros, um ao lado do outro, ambos com linhas
contínuas ao redor, indicando a subclasse “Folha” e “Composite”, respectivamente. A “Folha” contém o texto “operação”
e a classe “Composite” contém os textos: “operação”, “acrescentar”, “remover” e “recuperarFilho”. Fim da descrição.
DECORATOR PATTERN
5
5
T E MA DE A PRE ND IZAGEM 3
Descrição da Imagem: no diagrama, há um grande quadrado que representa a “superclasse Notificação”. Dentro
dele, há um texto que diz “superclasse Notificação”. Saindo desse quadrado, há uma linha contínua, conectando-o
a um segundo quadrado, que representa a “classe agregada chamada BaseDecorator”. Dentro desse segundo
quadrado, há um texto que diz “classe agregada BaseDecorator”. Além disso, partindo do segundo quadrado, há
três linhas contínuas, conectando-o a três quadrados menores. O primeiro quadrado menor representa a classe
para envio de mensagens SMS, o segundo representa a classe para envio de mensagens Facebook e o terceiro
representa a classe para envio de mensagens Slack. Cada um desses quadrados menores contém um texto que
indica qual tipo de mensagem é utilizado (SMS, Facebook, Slack). Fim da descrição.
FACADE PATTERN
5
5
U N I AS S E LVI
E U IN D ICO
FLYWEIGHT PATTERN
“
A maioria das implementações de editores de documentos possuem
formatação e edição de texto, instalações que são modularizadas
até certo ponto. Editores de documentos orientados a objetos nor-
malmente usam objetos para representar elementos incorporados,
como tabelas e figuras. No entanto, eles geralmente não usam um
objeto para cada personagem no documento, embora isso promo-
vesse flexibilidade nos melhores níveis da aplicação. Caracteres e
elementos incorporados poderiam, então, ser tratados uniforme-
mente em relação à forma como são desenhados e formatados. A
aplicação poderia ser estendida para suportar novos conjuntos de
caracteres sem perturbar outras funcionalidades. A estrutura do
objeto do aplicativo pode imitar a estrutura física do documento
(Gamma et al., 1995, p. 218, tradução nossa).
5
5
T E MA DE A PRE ND IZAGEM 3
Descrição da Imagem: no centro da representação visual, há um quadrado grande que representa o objeto
“cliente”. Abaixo do objeto “cliente”, há outro quadrado que representa a classe agregada “contexto”. Dentro desse
segundo quadrado, há um texto que diz “context”. Partindo da classe agregada “contexto”, há uma linha contínua,
conectando-a a um terceiro quadrado, que representa a classe “flyweight”. Dentro desse terceiro quadrado, há
um texto que diz “flyweight”. Além disso, dentro da classe “flyweight”, há dois textos: um que diz “operacao” e
outro que diz “estado único”. Ao lado da classe “flyweight”, há outro quadrado que representa a classe “flyweight-
factory”. Dentro desse quadrado, há um texto que diz classe “flyweightfactory”. Além disso, dentro da classe
“flyweightfactory”, há um texto que diz “getfliweight”. Fim da descrição.
PROXY PATTERN
5
5
U N I AS S E LVI
permitindo a execução de ações antes ou depois que uma solicitação seja enca-
minhada ao objeto original.
Podemos comparar um cartão de crédito, por exemplo, a um intermediário
para uma conta bancária, que, por sua vez, representa uma reserva financeira.
Ambos aderem à mesma funcionalidade, evitando a necessidade de transpor-
tar grandes somas em dinheiro físico. Isso traz comodidade ao cliente, que não
precisa lidar com os riscos associados ao transporte de dinheiro. Além disso,
o comerciante também se beneficia, já que a receita da transação é adicionada
eletronicamente à sua conta, eliminando preocupações, como perdas ou roubos,
durante o transporte ao banco.
Descrição da Imagem: no centro da representação visual, há um quadrado que representa o objeto “Cliente”. Den-
tro desse quadrado, há um texto que diz “Cliente”. Saindo desse quadrado, há uma linha contínua, conectando-o a
outro quadrado (à direita), que representa a interface “ServiceInterface”. Dentro desse segundo quadrado, há um
texto que diz: “interface, ServiceInterface+operação()”. Uma linha pontilhada conecta-o a um terceiro quadrado,
que representa a subclasse “Proxy”. Ele contém os termos: “proxy”, “checarAcesso” e “Operacao”. Por fim, ao
lado direito da classe “Proxy”, há um quadrado que representa “Serviço”. Estas duas últimas classes citadas são
interligadas por uma seta contínua, com um losango na origem. Fim da descrição.
5
5
T E MA DE A PRE ND IZAGEM 3
E M FO CO
NOVOS DESAFIOS
Ao se desenvolver um software para uma grande empresa, você se deparará com inúme-
ras situações de códigos frágeis, extremamente acoplados e que necessitem refatoração.
Podemos citar, por exemplo, um sistema de gerenciamento de conteúdo,
em que você criará várias páginas, com artigos e imagens, os quais, por sua
vez, podem conter outros elementos. Nessa abordagem, você poderia aplicar
o padrão Composite.
Nesse momento, você deverá considerar os padrões de projeto que irão de-
finir, com maior robustez e flexibilidade, seu software. Por exemplo, se você se
deparar com um software que apresenta muitas classes com responsabilidades
sobrepostas ou mal definidas, poderá aplicar o padrão Facade para simplificar
a interface, ou se o código estiver consumindo muitos recursos computacionais
devido ao excesso de objetos em memória, poderá usar o padrão Flyweight.
Neste tema de aprendizagem, relacionamos vários padrões que poderão lhe
ajudar a simplificar o seu código-fonte de uma forma concreta, sendo que, com
todo o conteúdo visto, conseguimos chegar a uma resposta a respeito da pergunta
feita inicialmente que é o desafio de um código complexo e ajudar a torná-lo
simples, ou seja, com o auxílio dos padrões de projeto de estrutura, poderemos
simplificar nossas atividades diárias, tornando os sistemas mais robustos.
5
5
AUTOATIVIDADE
1. “O Flyweight é um padrão de projeto estrutural que permite a você colocar mais objetos na
quantidade de RAM disponível ao compartilhar partes comuns de estado entre os múltiplos
objetos ao invés de manter todos os dados em cada objeto” (Shvets, 2021, p. 239).
Com base nas informações apresentadas, avalie as asserções, a seguir, e a relação proposta
entre elas:
PORQUE
2. “O Bridge é um padrão de projeto estrutural que permite que você divida uma classe
grande ou um conjunto de classes, intimamente ligadas, em duas hierarquias separadas
– abstração e implementação – que podem ser desenvolvidas independentemente umas
das outras” (Shvets, 2021, p. 177).
I - Desacoplar uma abstração de sua implementação para que as duas possam variar in-
dependentemente é uma intenção do padrão Bridge.
II - Termos, como abstração e implementação, fazem parte da definição do padrão Bridge.
III - A abstração é a camada de controle de alto nível, a qual não faz nenhum trabalho por
conta própria e deve delegar para a camada de implementação.
IV - No padrão Bridge, a abstração contém uma referência para uma implementação, de
modo que pode delegar parte de seu comportamento para a implementação.
5
5
AUTOATIVIDADE
a) I, apenas.
b) II e IV, apenas.
c) III e IV, apenas.
d) I, II e III, apenas.
e) I, II, III e IV.
3. “Um padrão adaptador faz uma interface estar conforme com outra, fornecendo, assim,
uma abstração de diferentes interfaces; uma classe faz isso, herdando privadamente de
uma classe adaptada” (Gamma, 1995, p. 155, tradução nossa).
I - É um padrão de projeto estrutural que permite que objetos com interfaces incompatíveis
colaborarem entre si.
II - Ele é útil quando você deseja usar uma classe existente, mas sua interface não atende
às necessidades do seu aplicativo, e não é possível ou desejável modificar a classe
existente diretamente.
III - É um padrão de projeto criacional, que permite copiar objetos existentes sem fazer seu
código ficar dependente de suas classes.
IV - O Adapter atua como uma camada intermediária entre o cliente e a classe adaptada,
traduzindo solicitações do cliente para chamadas compatíveis com a classe adaptada
e vice-versa.
a) I, apenas.
b) II e IV, apenas.
c) III e IV, apenas.
d) I, II e IV, apenas.
e) I, II, III e IV.
6
6
REFERÊNCIAS
FREEMAN, E.; FREEMAN, E. Use a cabeça: padrões de projetos. 2. ed. Rio de Janeiro: Alta Books,
2007.
GAMMA, E. et al. Design Patterns: elements of reusable object-oriented software. Reading: Ad-
dison-Wesley, 1995.
VALENTIM, R. A. de M.; SOUZA NETO, P. A. de. O impacto da utilização de design patterns nas
métricas e estimativas de projetos de software: a utilização de padrões tem alguma influência
nas estimativas? Revista da FARN, Natal, v. 4, n. 1, p. 63-74, 2005.
6
6
GABARITO
1. Alternativa A.
2. Alternativa E.
3. Alternativa D.
6
6
MINHAS ANOTAÇÕES
6
6
UNIDADE 2
TEMA DE APRENDIZAGEM 4
PADRÕES DE COMPORTAMENTO
MINHAS METAS
Compreender o papel dos padrões de projeto, como guias para a solução dos problemas.
Refletir acerca dos desafios enfrentados e da aplicação dos padrões de projeto, sobretu-
do os comportamentais.
Estabelecer conexões entre teoria e prática na solução dos problemas, usando os pa-
drões de projeto.
6
6
U N I AS S E LVI
P L AY N O CO NHEC I M ENTO
VAMOS RECORDAR?
No vídeo sugerido, Macoratti fala brevemente a respeito dos padrões de projeto e
dos padrões comportamentais.
Disponível em: https://www.youtube.com/watch?v=1KdbOJ7EwKs.
6
6
T E MA DE A PRE ND IZAGEM 4
“
Efetivamente, os design patterns podem contribuir para suavizar a
transição do modelo de análise para o modelo de implementação, haja
vista, balizam-se em tipos recorrentes de problemas de implementação
em projetos de software. Assim, podendo ser vistos como um modelo
de ‘microarquitetura’ aplicado a um dado problema, o que estabelece
uma linguagem comum entre a construção de aplicações que per-
meiam um mesmo contexto (Valentim; Souza Neto, 2005, p. 70).
Esse padrão permite que vários objetos recebam uma solicitação e possam lidar com
elas. Ele é usado quando há múltiplos dispositivos para tratar uma chamada e o sis-
tema não sabe qual deles lidará com ela. A estrutura é composta por três elementos:
6
6
U N I AS S E LVI
ELEMENTO 1
Handler
ELEMENTO 2
ConcretHandler
ELEMENTO 3
Client
COMMAND PATTERN
“
O padrão Command sugere que os objetos GUI (como botões) não
enviem esses pedidos diretamente à classe de negócios. Ao invés
disso, você deve extrair todos os detalhes do pedido, tais como o
objeto a ser chamado, o nome do método e a lista de argumentos
em uma classe comando separada, que tem apenas um método que
aciona esse pedido (Shvets, 2021, p. 296).
6
6
T E MA DE A PRE ND IZAGEM 4
INTERPRETER PATTERN
E U IN D ICO
ITERATOR PATTERN
7
7
U N I AS S E LVI
MEDIATOR PATTERN
“
O padrão Mediator sugere que você deveria cessar toda comunicação
direta entre componentes que quer tornar independentes um do outro.
Ao invés disso, esses componentes devem colaborar indiretamente,
chamando um objeto mediador especial que redireciona as chamadas
para os componentes apropriados. Como resultado, os componentes
dependem apenas de uma única classe mediadora, ao invés de serem
acoplados a dúzias de outros colegas (Shvets, 2021, p. 330).
7
7
T E MA DE A PRE ND IZAGEM 4
MEMENTO PATTERN
“
[...] algumas vezes, é necessário armazenar o estado interno de um ob-
jeto, por exemplo, em pontos de checagem ou mecanismo de desfazer,
mas objetos normalmente encapsulam o estado, tornando inacessível
para outros objetos externamente (Gamma et al., 1995, p. 316).
Descrição da Imagem: quadrado com o nome “Originator”, representando a classe com os textos “state”, “save” e “restore”,
correspondendo aos seus métodos. Logo à direita, outra classe é representada pelo texto “Memento” e os termos “Me-
mento”, correspondendo ao o método, e “getState”. Ao lado dela, a classe chamada “Caretaker”, com os textos “originator”
e “history”, indicando se tratar de um atributo do tipo “Memento”, com os textos “dosomething” e “undo”. Fim da descrição.
OBSERVER PATTERN
Define uma relação de um-para-muitos entre objetos, de modo que, quando um objeto
muda de estado, todos os relacionados são notificados e atualizados automaticamente.
“
O padrão Observer sugere que você adicione um mecanismo de
assinatura, para a classe publicadora, para que objetos individuais
possam assinar ou desassinar uma corrente de eventos vindos da-
quela publicadora. Nada tema! Nada é complicado como parece.
Na verdade, esse mecanismo consiste em um vetor para armazenar
uma lista de referências aos objetos do assinante e alguns métodos
públicos que permitem adicionar assinantes e removê-los da lista
(Shvets, 2021, p. 364).
7
7
U N I AS S E LVI
STATE PATTERN
“
O padrão State sugere que você crie novas classes para todos os
estados possíveis de um objeto e extraia todos os comportamentos
específicos de estados para dentro dessas classes.
Descrição da Imagem: quadrado com o texto “Context”, representando a classe com esse nome. Há um texto dentro
do mesmo quadrado, representando o atributo “estado”. Abaixo e dentro do mesmo quadrado, há os textos: “Contexto”,
com o termo, entre parênteses, “estadoinicial”; “mudar estado”, com “estado” entre parênteses; e “acaoA” e “acaoB”
em cada linha. Abaixo desse quadrado, há outra classe chamada “EstadoConcreto”, com os textos: “contexto”, “setCon-
texto”, “AcaoA e AcaoB. Mais para a esquerda, um quadrado pequeno representa o objeto “Cliente”. Fim da descrição.
7
7
T E MA DE A PRE ND IZAGEM 4
STRATEGY PATTERN
É um padrão que permite definir uma família de algoritmos, os quais são en-
capsulados em classes separadas, chamadas de estratégia, implementando uma
mesma interface ou herdando de uma classe abstrata.
A P RO F UNDA NDO
Descrição da Imagem: quadrado com o texto “Context”, representando a classe com esse nome. Um texto, dentro
do mesmo quadrado, representa o atributo “estrategia”. Abaixo dele, há as expressões: “setStrategy”, com “estra-
tégia” entre parênteses, e “acaoa”. No lado direito, interligado por uma linha contínua e um diamante na origem,
temos um outro quadrado, representando a interface “Estrategia”, com o texto “executar” e a palavra “dado” entre
parênteses. Abaixo, temos outro quadrado com o nome “Estrategia Concreta” e o texto “executar”, com a palavra
“dado” entre parênteses. Da classe “EstrategiaConcreta”, parte uma linha pontilhada, que se liga à interface
“Estrategia”. À esquerda e abaixo do quadrado “Context”, temos um quadrado menor com o texto “Cliente”, repre-
sentando o objeto “Cliente” e ligando-se por uma linha pontilhada à classe “EstrategiaConcreta”. Fim da descrição.
7
7
U N I AS S E LVI
“
O padrão Template Method define o esqueleto de um algoritmo
dentro de um método, transferindo alguns de seus passos para as
subclasses. O Template Method permite que as subclasses rede-
finam certos passos de um algoritmo sem alterar a estrutura do
próprio algoritmo (Freeman; Freeman, 2007, p. 238).
E U IN D ICO
Esse método é muito utilizado em web frameworks. Isso, porque existem etapas
que seguem um padrão ao lidar com o HTTP, mas algumas partes podem variar,
dependendo da necessidade.
7
7
T E MA DE A PRE ND IZAGEM 4
VISITOR PATTERN
Esse padrão permite adicionar novas operações a uma estrutura de objetos, sem
modificá-los, ou seja, colocando o novo comportamento em uma classe criada
separadamente e de nome visitante, sendo que o objeto original é parametrizado.
A Figura 4, seguir, apresenta o diagrama do padrão para identificação da
relação entre as classes.
Descrição da Imagem: um quadrado com o texto “Interface” e o texto “Visitor”, representando a interface com
esse nome. Dentro do mesmo quadrado, temos o texto “visita” e, entre parênteses, os termos “elemento A. Na
linha seguinte, temos o texto “visita” novamente, com os termos, entre parênteses, “elemento B”. No lado direito,
interligado por duas linhas pontilhadas, temos dois quadrados: um com o texto “Elemento A” e outro com o texto
“Elemento B”, os quais representam o nome de cada classe. Um deles possui o texto “featureA” e o outro, “featu-
reB”. Nos dois quadrados, há também o termo “accept” com o texto “Visitante” entre parênteses. No canto superior
direito, temos um outro quadrado com o texto “interface” e o termo “Elemento”, indicando o nome da interface.
Também, temos o texto “aceita”, com os termos “visitante” entre parênteses. As linhas que saem de “Elemento
A” e “Elemento B” são pontilhadas. Abaixo, à esquerda, temos um quadrado com o texto “Visitantes Concretos”,
com os textos “visita” e “elemento A” entre parênteses. Na linha seguinte, temos “visita” e “Elemento B” entre
parênteses. Abaixo, ao centro, temos um quadrado menor com o texto “Cliente”, representando o objeto cliente
interligado com linhas pontilhadas a “VisitantesConcretos” e interface “Elemento”. Fim da descrição.
7
7
U N I AS S E LVI
Shvets (2021, p. 436) recomenda: “Utilize o Visitor quando você precisa fazer
uma operação em todos os elementos de uma estrutura de objetos complexa,
por exemplo, uma árvore de objetos”.
E M FO CO
NOVOS DESAFIOS
Como os padrões de projeto são soluções já aplicadas para problemas conheci-
dos, é fundamental o seu conhecimento e aplicação prática. Na teoria, você está
aprendendo e consolidando seus conhecimentos nos design patterns.
No mercado de trabalho, esses padrões comportamentais são aplicados
frequentemente, representando um papel crucial na criação e manutenção
de sistemas, de forma que é fundamental seu entendimento e aplicação dos
conceitos aqui tratados.
Quando você iniciou sua jornada neste tema, deparou-se com uma indagação
acerca da área de atuação dos padrões comportamentais. A resposta para essa
questão segue na linha de que os padrões comportamentais se concentram na
interação entre os objetos. Em um sistema de software, eles definem como os
objetos se comunicam e como eles colaboram para realizar uma tarefa ou res-
ponder a um evento em tempo de execução, subindo um pouco a granularidade
e avaliando em um contexto mais amplo. Sob o aspecto da área de atuação, os
padrões comportamentais se aplicariam a áreas como:
7
7
T E MA DE A PRE ND IZAGEM 4
7
7
AUTOATIVIDADE
a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.
7
7
AUTOATIVIDADE
8
8
REFERÊNCIAS
FREEMAN, E.; FREEMAN, E. Use a cabeça: padrões de projetos. 2. ed. Rio de Janeiro: Alta Books,
2007.
GAMMA, E. et al. Design Patterns: elements of reusable object-oriented software. Reading: Ad-
dison-Wesley, 1995.
VALENTIM, R. A. de M.; SOUZA NETO, P. A. de. O impacto da utilização de design patterns nas
métricas e estimativas de projetos de software: a utilização de padrões tem alguma influência
nas estimativas? Revista da FARN, Natal, v. 4, n. 1, p. 63-74, 2005.
8
8
GABARITO
1. Alternativa C.
2. Alternativa E.
3. Alternativa D.
8
8
MINHAS ANOTAÇÕES
8
8
TEMA DE APRENDIZAGEM 5
PADRÕES DE ARQUITETURA
MINHAS METAS
8
8
U N I AS S E LVI
P L AY N O CO NHEC I M ENTO
Ouça nosso podcast acerca do tema Arquitetura de Software para Aplicações Mo-
bile. Acesse e atualize seus conhecimentos. Recursos de mídia disponíveis no
conteúdo digital do ambiente virtual de aprendizagem.
VAMOS RECORDAR?
O vídeo do canal Eu TI Ensino fala brevemente acerca dos padrões de projeto
arquiteturais. Acesse-o e entenda!
Disponível em: https://www.youtube.com/watch?v=fJafcf9loOw.
8
8
T E MA DE A PRE ND IZAGEM 5
IN D ICAÇÃO DE FI LM E
Matrix (1999)
O filme conta a história de um futuro distópico em que as má-
quinas dominam os humanos, os quais vivem em uma reali-
dade criada por computador. Os personagens vivem em um
mundo simulado e, nesse ambiente, encontra-se o experiente
programador Neo, que surge como uma espécie de salvador.
Refletindo sobre a história: no longa-metragem, os persona-
gens, que vivem em um mundo simulado, identificam padrões
no código e podem interagir com ele. Dessa forma, você pode
traçar um paralelo entre os parâmetros identificados, os quais são
necessários em projetos para que não ocorram anormalidades.
MVC PATTERN
Esse padrão é uma arquitetura de software que divide a aplicação em três cama-
das: Model (modelo), View (visualização) e Controller (controlador).
A camada Model é responsável pelos dados e regra de negócios da aplicação;
a camada View é responsável por exibir ao usuário telas, mensagens, resultados;
e a camada Controller faz a intermediação entre a Model e a View.
Para fazer a divisão em seu ambiente de software, você pode usar a divisão
em pacotes ou namespaces. As camadas, porém, são agrupadas de acordo com
a funcionalidade. Essa divisão clara de responsabilidades facilita a manutenção,
flexibilizando a aplicação que está sendo desenvolvida.
8
8
U N I AS S E LVI
“
Imagine que você esteja usando o seu aparelho de MP3 favorito,
como o Itunes. Você pode usar a interface para adicionar novas
músicas, com o nome das trilhas. O aparelho cuida de uma pe-
quena base de dados, contendo todas as suas músicas, com os
nomes associados a elas e os respectivos dados. Além disso, ele
cuida da reprodução das músicas e, enquanto faz isso, atualiza
constantemente a sua interface de usuário para exibir o nome da
música atual, o tempo de execução e outras informações. Bem, o
que faz tudo isso funcionar é o modelo-visualização-controlador
(Freeman; Freeman, 2007, p. 421).
Figura 1 – Representação gráfica do MVC com separação das camadas / Fonte: o autor.
Descrição da Imagem: quadrado com nome Model, ligado por uma linha com um quadrado com o nome View, por
sua vez, ligado por uma linha com o nome Controller. Abaixo de cada quadrado, uma ilustração representa cada
objeto: um disco (um cilindro), algumas engrenagens e um página de internet, figuras que representam o Model,
View e Controller respectivamente. Fim da descrição.
MVVM PATTERN
Esse modelo demonstra, também, uma divisão dos componentes, criada por
meio das camadas Model, View e ViewModel (MVVM).
A camada Model é responsável por representar os dados e a lógica de negócios da
aplicação, contendo classes que definem a estrutura dos dados e respectivas operações.
A camada de View diz respeito às telas, botões e demais interfaces gráficas,
ou seja, a parte que interage com o usuário.
8
8
T E MA DE A PRE ND IZAGEM 5
EVENT-DRIVEN ARCHITECTURE
8
8
U N I AS S E LVI
2. Realize uma série de operações, como atualização a banco, envio de e-mail etc.
8
8
T E MA DE A PRE ND IZAGEM 5
MICROSERVICES ARCHITECTURE
REQUISITO 1
REQUISITO 2
REQUISITO 3
Como um microsserviço poderá ter uma demanda maior que outro em um certo mo-
mento, torna-se necessário que este possa escalar de maneira independente.
REQUISITO 4
9
9
U N I AS S E LVI
“
Para melhor compreensão desse estilo arquitetural, bem como as
vantagens e desvantagens inerentes, é relevante explicar um estilo
arquitetural mais tradicional, o monolítico. Uma aplicação mono-
lítica é desenvolvida como uma unidade única e é organizada em
módulos dependentes da aplicação. Esses módulos não podem, as-
sim, serem reutilizados por outra aplicação (Carrusca, 2018, p. 10).
9
9
T E MA DE A PRE ND IZAGEM 5
SERVICE-ORIENTED ARCHITECTURE
“
Essa solução promove a reutilização de código e permite uma maior
facilidade de manutenção, ao mesmo tempo que possibilita subs-
tituir um serviço por outro, sem haver perceção disso. No entanto,
isso só é possível se a semântica for a mesma. SOA é uma arquitetura
que oferece níveis de abstração, conectividade heterogênea e or-
questração de serviços, assim como a possibilidade de alinhar os ob-
jetivos do negócio com as capacidades dos programadores. Apesar
de haver grande esforço no sentido da utilização dessa arquitetura, a
verdade é que ainda existe uma falta de consenso em como utilizá-la
de forma correta (Gonçalves, 2023, p. 11).
AUTENTICAÇÃO
CATÁLOGO DE PRODUTOS
CARRINHO
PAGAMENTO
9
9
U N I AS S E LVI
ZO O M N O CO NHEC I M ENTO
Segundo Gonçalves (2023), alguns críticos afirmam que a estrutura dos micros-
serviços não é algo novo e que se trataria de uma arquitetura orientada a serviços
(SOA). De acordo com o autor:
“
Ambas surgem com o mesmo objetivo: o de transformar arquite-
turas inflexíveis (legacy) em arquiteturas orientadas a serviços, as
quais são mais flexíveis e ágeis para desenvolver soluções digitais
inovadoras. Em um nível elevado de abstração, ambas as arquite-
turas são um estilo de arquitetura que estrutura um sistema como
um conjunto de serviços (Gonçalves, 2023, p. 10).
9
9
T E MA DE A PRE ND IZAGEM 5
E M FO CO
NOVOS DESAFIOS
Nas atividades diárias, você se deparará com momentos em que conhecimentos
adquiridos, muitas vezes teóricos, se aplicarão a situações reais para as quais você
poderá propor alternativas para resolução.
No início do nosso estudo, você foi questionado a respeito de uma situação
específica: como resolveria o desafio imposto e que tipo de arquitetura usaria?
Vimos, neste tema de aprendizagem, arquiteturas, como SOA ou microsser-
viços, poderiam se adaptar bem. Assim, sendo a arquitetura de microsserviços
mais independente, ela se adaptaria melhor ao cenário proposto.
O mercado de trabalho busca profissionais que tenham um conhecimento
da arquitetura e do desenvolvimento, pois uma aplicação deve ser projetada com
padrões desde o início, permitindo um software de melhor qualidade e maior
reconhecimento no mercado.
No início da jornada, foi solicitada uma pesquisa a respeito do padrão de
arquitetura que poderia auxiliar na flexibilidade do código, usando a criação
de objetos sem especificar as classes exatas. A resposta a esse questionamento
é o padrão Factory Method, pois ele permite a criação de objetos sem especifi-
car suas classes exatas, delegando responsabilidades de instanciar objetos para
subclasses específicas.
O Factory Method é útil quando uma classe não conhece antecipadamente
as classes de objetos que deve criar, ou quando queremos que as subclasses
possam modificar a lógica de criação de objetos. O Factory Method promove
o princípio do encapsulamento, permitindo a criação de objetos de maneira
flexível e extensível.
9
9
AUTOATIVIDADE
1. “Imagine que você esteja usando o seu aparelho de MP3 favorito, como o Itunes. Você pode
usar a interface para adicionar novas músicas, com o nome das trilhas. O aparelho cuida de
uma pequena base de dados, contendo todas as suas músicas, com os nomes associados a
elas e os respectivos dados. Além disso, ele cuida da reprodução das músicas e, enquanto
faz isso, atualiza constantemente a sua interface de usuário para exibir o nome da música
atual, o tempo de execução e outras informações. Bem, o que faz tudo isso funcionar é o
modelo-visualização-controlador” (Freeman; Freeman, 2007, p. 421).
a) O padrão MVC separa a aplicação em três componentes principais: Model, View e Controller.
b) No padrão MVC, o Model é responsável por gerenciar a interação do usuário com a
interface gráfica.
c) No padrão MVC, a View é responsável pela manipulação dos dados e pela lógica de
negócios da aplicação.
d) O padrão MVC não permite a separação clara de responsabilidades entre os compo-
nentes da aplicação.
e) No padrão MVC, a comunicação entre o Model e a View ocorre diretamente, sem a in-
tervenção do Controller.
a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.
9
9
AUTOATIVIDADE
3. “Para melhor compreensão deste estilo arquitetural, bem como as vantagens e desvan-
tagens inerentes, é relevante explicar um estilo arquitetural mais tradicional, o monolítico.
Uma aplicação monolítica é desenvolvida como uma unidade única e é organizada em
módulos dependentes da aplicação. Estes módulos não podem assim, serem reutilizados
por outra aplicação” (Carrusca, 2018, p. 36).
9
9
REFERÊNCIAS
FREEMAN, E.; FREEMAN, E. Use a cabeça: padrões de projetos. 2. ed. Rio de Janeiro: Alta Books,
2007.
9
9
GABARITO
1. Alternativa A.
2. Alternativa E.
3. Alternativa A.
A alternativa A está correta, pois descreve o conceito central de uma arquitetura monolítica.
A alternativa B está incorreta, pois a arquitetura monolítica não enfatiza a modularização.
A alternativa C está incorreta, pois a aplicação é implantada e escalada como uma única
unidade. A alternativa D está incorreta, pois a estrutura monolítica tende a ser menos flexível
do que abordagens mais modernas. A alternativa E está incorreta, pois não é possível afirmar
que uma aplicação monolítica é, geralmente, composta por múltiplas unidades de código
independentes, cada uma responsável por uma função específica da aplicação.
9
9
MINHAS ANOTAÇÕES
9
9
TEMA DE APRENDIZAGEM 6
ANTIPADRÕES
MINHAS METAS
Despertar, no estudante, o interesse pela compreensão dos impactos que maus hábitos
de programação podem causar.
Reconhecer os antipadrões.
1
1
1
U N I AS S E LVI
P L AY N O CO NHEC I M ENTO
VAMOS RECORDAR?
Este vídeo do canal de Rony Marcolino aborda os antipadrões de projetos. Acesse-o
e atualize-se!
Disponível em: https://www.youtube.com/watch?v=YY4mLXOm6Ms
1
1
1
T E MA DE A PRE ND IZAGEM 6
1
1
1
U N I AS S E LVI
“
Um God Object contém código desordenado que é difícil de man-
ter, estender, usar, testar e integrar com outras partes do aplicativo.
Eles violam o princípio da responsabilidade única (SRP) e a Lei
de Deméter ou princípio do conhecimento mínimo, que reduz as
dependências entre classes e ajuda a construir componentes que são
fracamente acoplados (Macoratti, 2023, on-line).
A P RO F UNDA NDO
“
A lei especifica que os métodos e propriedades de uma classe só
devem invocar os membros dos seguintes objetos:
• O objeto no qual o método ou propriedade é declarado.
• Os objetos que são passados para o membro, utilizando os seus parâmetros.
• Os objetos que são declarados dentro da mesma classe como o mé-
todo de chamada ou propriedade. Esses são os objetos componentes
diretos da classe que contém o membro.
• Os objetos globais, embora geralmente devam ser minimizados
(Macoratti, 2013, on-line).
1
1
1
T E MA DE A PRE ND IZAGEM 6
PONTO 1
PONTO 2
1
1
1
U N I AS S E LVI
PONTO 3
É frágil, ou seja, se alterar uma parte tem grandes chances de afetar o sistema todo.
PONTO 4
Dificulta os testes.
PONTO 5
Tem uma escalabilidade limitada; à medida que cresce, o software se torna difícil de
manter e se adaptar a novos requisitos.
• Falta de estruturação.
• Acoplamento excessivo.
• Duplicação de código.
• Complexidade desnecessária.
• Dificuldade de manutenção.
1
1
1
T E MA DE A PRE ND IZAGEM 6
ANTIPADRÃO
DEPENDÊNCIA CIRCULAR
1
1
1
U N I AS S E LVI
ZO O M N O CO NHEC I M ENTO
IN D ICAÇ ÃO DE FI LM E
Ao identificar um código que não está muito claro, muitas vezes, conseguimos
identificar alguns padrões básicos da codificação.
1
1
1
T E MA DE A PRE ND IZAGEM 6
1
1
1
U N I AS S E LVI
Antes de tudo, é essencial que a equipe tenha um sólido conhecimento acerca dos
antipadrões existentes e esteja consciente dos impactos negativos que podem causar.
Isso envolve compreender os conceitos por trás dos antipadrões, reconhecer sinais de
sua presença e estar aberto a discutir e abordar esses problemas proativamente.
PONTO 4 – REFATORAÇÃO
Testes automatizados são cruciais para garantir que o software funcione conforme o es-
perado e para identificar regressões após mudanças no código. A falta de testes adequa-
dos pode resultar em antipadrões, como código de difícil manutenção e baixa qualidade.
1
1
1
T E MA DE A PRE ND IZAGEM 6
Por fim, é crucial estabelecer um ciclo de feedback e melhoria contínua. Isso inclui
solicitar retornos regularmente, tanto de colegas quanto de clientes, e estar aberto a
aprender com os erros e aprimorar constantemente os processos de desenvolvimento
para evitar a reincidência de antipadrões.
Levando em consideração todos esses pontos ressaltados, seu código será bem
estruturado e você evitará os antipadrões.
E M FO CO
1
1
1
U N I AS S E LVI
NOVOS DESAFIOS
Ao desempenhar seu papel como desenvolvedor no mercado de trabalho, a
identificação de problemas no código-fonte será muito importante, pois isso
permitirá que você identifique problemas comuns no código real do mundo
profissional, ao reconhecer antipadrões, como o Spaghetti Code, em um projeto
real poderá ajudar a priorizar pontos como refatoração constante, tendo como
objetivo a melhoria do seu código.
No início de sua jornada, você foi incitado a elaborar uma pesquisa a respeito das
práticas inadequadas e consequências negativas, que resultam dos padrões de pro-
jeto. Três práticas inadequadas e três consequências foram solicitadas para reflexão.
• Risco de erros: quanto mais confuso e com exceções, aumenta-se o risco de erros.
1
1
1
AUTOATIVIDADE
1. “Um God Object contém código desordenado que é difícil de manter, estender, usar, testar
e integrar com outras partes do aplicativo. Eles violam o princípio da responsabilidade única
(SRP) e a Lei de Deméter ou princípio do conhecimento mínimo que reduz as dependências
entre classes e ajuda a construir componentes que são fracamente acoplados” (Macoratti,
2023, on-line).
2. “Código espaguete é uma gíria usada para se referir a uma teia emaranhada de código-fon-
te de programação em que o controle, dentro de um programa, salta para todos os lados,
e é difícil de seguir. O código espaguete normalmente possui muitas instruções GOTO e é
comum em programas antigos, que usavam tais instruções extensivamente” (Rouse, 2017,
on-line, tradução nossa).
I - Não é uma boa prática, pois é frágil, ou seja, se alterar uma parte, há grandes chances
de afetar o sistema todo.
II - Tem uma escalabilidade limitada; à medida que cresce, o software se torna difícil de
manter e se adaptar a novos requisitos.
III - Tem baixa legibilidade devido à grande quantidade de códigos e regras diferentes no
mesmo bloco.
a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.
1
1
1
AUTOATIVIDADE
a) A Grande Bola de Lama é uma arquitetura altamente modular e bem estruturada, faci-
litando a adição de novos recursos ao sistema de forma organizada.
b) É um modelo arquitetônico ideal que promove a flexibilidade e a adaptabilidade do
sistema às mudanças de requisitos.
c) Abordagem de design bem-sucedida que prioriza a simplicidade e a eficiência na im-
plementação de sistemas de software.
d) É um antipadrão arquitetônico que surge quando os desenvolvedores dedicam tempo e
esforço suficientes para planejar e projetar a interação entre os diferentes componentes
do sistema.
e) É um antipadrão arquitetônico que surge quando novos recursos são adicionados ao
sistema sem considerar como eles devem interagir de maneira modular e sustentável.
1
1
1
REFERÊNCIAS
ARCELLI, D.; CORTELESSA, V.; TRUBIANI, C. Antipattern-based model refactoring for softwa-
re performance improvement. In: QOSA – INTERNATIONAL ACM SIGSOFT CONFERENCE ON
QUALITY OF SOFTWARE ARCHITECTURES, 8., 2012, Bertinoro. Proceedings [...]. New York: Asso-
ciation for Computing Machinery, 2012.
BIG ball of mud. DevIQ, [s. l.], 9 maio 2021. Disponível em: https://deviq.com/antipatterns/big-
-ball-of-mud. Acesso em: 25 jun. 2024.
MACORATTI, J. C. A Lei de Demeter (LoD). Macoratti.net, [s. l.], 20 jan. 2013. Disponível em: ht-
tps://www.macoratti.net/13/01/net_dem1.htm. Acesso em: 25 jun. 2024.
MACORATTI, J. C. Apresentando o antipadrão: god object. Macoratti.net, [s. l.], 6 jun. 2023. Dispo-
nível em: https://macoratti.net/21/01/c_godobj1.htm. Acesso em: 25 jun. 2024.
ROUSE, M. What Does Spaghetti Code Mean? Techopedia, Panama City, 1 feb. 2017. Disponível
em: https://www.techopedia.com/definition/9476/spaghetti-code. Acesso em: 25 jun. 2024.
SMITH, C.; WILLIAMS, L. Software performance antipatterns for identifying and correcting per-
formance problems. In: WOSP – INTERNATIONAL WORKSHOP ON SOFTWARE AND PERFOR-
MANCE, 2., 2000, Ottawa. Proceedings [...]. New York: Association for Computing Machinery,
2000.
1
1
1
GABARITO
1. Alternativa C.
2. Alternativa E.
3. Alternativa E.
A alternativa A está incorreta, pois a descrição é o oposto e destaca a falta de design modular.
A alternativa B está incorreta, pois esse antipadrão não é nem modular nem sustentável,
além de ser de difícil manutenção.
A alternativa C está incorreta, pois a falta de estrutura desse antipadrão leva à ineficiência.
A alternativa D está incorreta, pois é o resultado da falta de esforço na criação de um design
modular.
A alternativa E está correta, pois destaca a falta de design modular e desorganização, re-
fletindo esse antipadrão.
1
1
1
MINHAS ANOTAÇÕES
1
1
1
MINHAS ANOTAÇÕES
1
1
1
UNIDADE 3
TEMA DE APRENDIZAGEM 7
TENDÊNCIAS E FUTURO
MINHAS METAS
1
1
1
U N I AS S E LVI
P L AY N O CO NHEC I M ENTO
VAMOS RECORDAR?
O vídeo do canal de Elder Moraes discute a aplicação dos design patterns nos
microsserviços. Acesse e se atualize!
Disponível em: https://www.youtube.com/watch?v=S7oYU8qBKIE.
1
1
1
T E MA DE A PRE ND IZAGEM 7
IN D ICAÇÃO DE FI LM E
Computação na nuvem é uma realidade cada vez mais presente em nosso coti-
diano. Todos nós acessamos nossos e-mails em um webmail alocado na nuvem
ou por meio de aplicativos de edição de texto na nuvem, sistemas ERP na nuvem,
dentre outras aplicações.
Com todos esses recursos, podemos imaginar que exista uma programação
extensa nos bastidores, seguindo uma arquitetura largamente adaptada, motivo
de preocupação constante no que diz respeito a questões, como performance,
otimização, manutenção, entre outras, de forma que alguns padrões de projetos
foram definidos para essa nova abordagem de arquitetura.
1
1
1
U N I AS S E LVI
Embaixador
“
Chamadas de rede também podem exigir configuração significa-
tiva para conexão, autenticação e autorização. Se essas chamadas
forem usadas em vários aplicativos, criados, usando vários idio-
mas e estruturas, as chamadas deverão ser configuradas para cada
uma dessas instâncias. Além disso, funcionalidade de segurança de
rede poderá precisar ser gerenciada por uma equipe central na sua
organização. Com uma base de código grande, pode ser arriscado
para essa equipe atualizar código de aplicativo com a qual não esteja
familiarizada (Microsoft Learn, 2024, on-line).
1
1
1
T E MA DE A PRE ND IZAGEM 7
A P RO F UNDA NDO
1
1
1
U N I AS S E LVI
Cada microsserviço deve ter uma única responsabilidade e não deve ser misturado
com outras atribuições (Principais..., 2022).
SERVICE DISCOVERY
API GATEWAY
Um ponto único de entrada para todas as chamadas de serviço, o que facilita a gestão
de autenticação, autorização e roteamento (Principais..., 2022).
MICROSERVICE CHASSIS
Cada microsserviço deve ser projetado para lidar com comandos e consultas de forma
diferente, o que ajuda a evitar conflitos de concorrência (Principais..., 2022).
EVENT-DRIVEN ARCHITECTURE
CIRCUIT BREAKER
Uso de um mecanismo para lidar com falhas de serviço, o que ajuda a evitar cascatas
de falha (Principais..., 2022).
DATA REPLICATION
1
1
1
T E MA DE A PRE ND IZAGEM 7
Esses são alguns dos principais padrões de microsserviços. Há outros que podem
lhe auxiliar, estudante, na trajetória do desenvolvimento com os microsserviços.
Trata-se de um padrão ideal para aplicativos servless, pois responde aos eventos
em tempo real, usando recursos apenas quando ocorre um evento real. Assim, o
EDA permite ampla escalabilidade e eficiência.
As aplicações financeiras, por exemplo, podem processar e reagir às altera-
ções nos preços das ações em tempo real ou enviar milhares de notificações em
resposta a eventos importantes (Guide..., 2023).
1
1
1
U N I AS S E LVI
PASSO 1
Configurar o AWS IOT Core, que é um dos serviços projetados para facilitar a comu-
nicação entre dispositivos conectados pela internet das coisas (IOT). Ele atua como
um broker MQTT, permitindo a publicação e a subscrição de mensagens em tópicos
específicos. Por exemplo, ele pode publicar um tópico chamado “sensor temperatura”.
PASSO 2
PASSO 3
Implementar outro componente ou dispositivo para atuar como assinante das men-
sagens. O assinante pode, por exemplo, inscrever-se como “sensor temperatura” para
receber atualizações de temperatura.
1
1
1
T E MA DE A PRE ND IZAGEM 7
Padrão Comando
Espera-se que as alternativas IoT interajam com os dispositivos de tal forma que a
solução, ou as pessoas que a utilizam, possam solicitar aos dispositivos, de forma
confiável, que executem uma ação. Além disso, essa interação deve ocorrer por meio
de redes intermitentes, muitas vezes, utilizando dispositivos com recursos limitados.
O processo executado é:
PASSO 1
PASSO 2
PASSO 3
PASSO 4
Após a conclusão da ação solicitada pelo Comando, o dispositivo publica uma mensa-
gem de conclusão do comando para o servidor por meio do terminal do protocolo.
1
1
1
U N I AS S E LVI
Telemetria
PASSO 1
PASSO 2
PASSO 3
O servidor pode, então, aplicar uma ou mais regras às mensagens, a fim de realizar um
roteamento refinado em alguns ou todos os dados de medição da mensagem, o qual
pode enviar uma mensagem para outro componente da solução (IOT Atlas, 2024).
Esse padrão pode ser combinado com o padrão Pub-Sub mencionado anteriormente.
Para esse universo de IOT, existem outros inúmeros padrões que podem ser
explorados e aplicados em suas soluções, por exemplo: inicialização do disposi-
tivo, virtualização, virtualização com middleware, dentre outros.
“
Não existe uma arquitetura de referência única para uma internet
das coisas. Padrões de design são uma forma de construir soluções
de arquitetura para casos de uso e classes de casos de uso específicos.
1
1
1
T E MA DE A PRE ND IZAGEM 7
“
O trabalho para encontrar soluções de arquitetura de sistema para
problemas de internet das coisas levou à conclusão óbvia de que não
existe uma arquitetura única apropriada para a maioria dos casos de
uso de IoT. O espectro completo da IoT apresenta uma ampla gama
de diversos casos de uso e restrições de recursos e, portanto, motiva
uma série de soluções de arquitetura. Ainda assim, gostaríamos de
basear a discussão num conjunto de referência de conceitos técni-
cos para ajudar a promover uma compreensão unificada e quebrar
os silos de pensamento em torno da arquitetura IoT (Kost, 2014,
on-line, tradução nossa).
O conceito devops está cada vez mais presente no dia a dia dos desenvolvedores.
Essa arquitetura agiliza o ciclo de deploy, padronizando os processos das aplica-
ções e suas instalações. Isso agiliza os processos de negócio, fazendo com que a
empresa consiga reduzir custos nessa área.
A plataforma AWS oferece um portfólio de serviços amplo, que deve ser
considerado para modernizar a TI.
1
1
1
U N I AS S E LVI
Lembre-se de que a transformação não envolve apenas TI, mas todo o fluxo de valor
da organização, desde marketing e vendas até desenvolvimento e operações de TI.
THINK PAAS
1
1
1
T E MA DE A PRE ND IZAGEM 7
PENSE EM PAAS
E M FO CO
NOVOS DESAFIOS
Como toda grande caminhada começa com um primeiro passo, precisamos en-
tender os princípios dos padrões de projetos. No início da jornada, solicitamos
uma pesquisa acerca dos princípios do design patterns.
A respeito dessas noções, podemos considerar os seguintes conceitos:
1
1
1
U N I AS S E LVI
1
1
1
AUTOATIVIDADE
1. “Chamadas de rede também podem exigir configuração significativa para conexão, au-
tenticação e autorização. Se essas chamadas forem usadas em vários aplicativos, criados,
usando vários idiomas e estruturas, as chamadas deverão ser configuradas para cada uma
dessas instâncias. Além disso, funcionalidade de segurança de rede poderá precisar ser
gerenciada por uma equipe central na sua organização. Com uma base de código grande,
pode ser arriscado para essa equipe atualizar código de aplicativo com a qual não esteja
familiarizada” (Microsoft Learn, 2024, on-line).
Referente a esse assunto, a qual das opções, a seguir, o texto se refere? Assinale a alterna-
tiva correta:
2. O padrão de arquitetura de microsserviços é definido para que a aplicação seja, cada vez
mais, escalável e cada parte consiga operar de forma independente. Cada microsserviço
é uma parte do todo e atua de forma independente, tornando o processo de manutenção
mais ágil e inteligente.
I - Single responsibility principle: cada microsserviço deve ter uma única responsabilidade
e não deve ser misturado com outras responsabilidades.
II - API gateway: um ponto único de entrada para todas as chamadas de serviço, o que
facilita a gestão de autenticação, autorização e roteamento.
III - Circuit breaker: usando um mecanismo para lidar com falhas de serviço, o que ajuda a
evitar cascatas de falha.
a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.
1
1
1
AUTOATIVIDADE
3. A necessidade de padrões de design sem servidor eficazes aumenta à medida que mais
usuários adotam a arquitetura sem servidor. Os padrões de projeto são soluções reutilizáveis
para problemas comuns. Eles podem lhe orientar na criação da melhor arquitetura para
aplicativos sem servidor eficientes, escaláveis e confiáveis (Guide..., 2023).
1
1
1
REFERÊNCIAS
ABDOULAYE, P. 3 AWS Design Patterns to Maximize DevOps Value. DevOps.com, [s. l.], 11 oct.
2016. Disponível em: https://devops.com/aws-design-patterns-maximize-devops/. Acesso em:
26 jun. 2024.
GUIDE to serverless architecture design patterns. Trend Micro, Cork, 8 jun. 2023. Disponível em:
https://www.trendmicro.com/en_ie/devops/23/f/serverless-architecture-design-patterns-
-guide.html. Acesso em: 26 jun. 2024.
KOST, M. Design patterns for the internet of things. Arm Community, Cambridge, 27 may 2014.
Disponível em: https://community.arm.com/arm-community-blogs/b/internet-of-things-
-blog/posts/design-patterns-for-an-internet-of-things. Acesso em: 26 jun. 2024.
MICROSOFT LEARN. Padrão embaixador. c2024. Centro de arquitetura. Disponível em: https://
learn.microsoft.com/pt-br/azure/architecture/patterns/ambassador. Acesso em: 26 jun. 2024.
PRINCIPAIS padrões de arquitetura de microservices. Papo.dev, [s. l.], 23 fev. 2022. Disponível
em: https://papo.dev/posts/principais-padroes-de-arquitetura-de-microservices. Acesso em:
Acesso em: 26 jun. 2024.
1
1
1
GABARITO
1. Alternativa C.
A opção C está correta, pois o padrão embaixador isola os clientes do serviço de comunicação.
As demais opções estão incorretas, pois se tratam de padrões de microsserviços.
2. Alternativa E.
3. Alternativa E.
A alternativa A está incorreta, pois a introdução da arquitetura sem servidor não elimina a
importância dos padrões de design. Pelo contrário, a complexidade dos aplicativos sem
servidor pode aumentar a necessidade de padrões para garantir eficiência, escalabilidade
e confiabilidade.
A alternativa B está incorreta, pois os padrões de design são soluções reutilizáveis para
problemas comuns. Eles não são exclusivos para arquitetura sem servidor; são aplicáveis
em várias outras áreas de design de software.
A alternativa C está incorreta, pois, mesmo na arquitetura sem servidor, é crucial considerar
padrões de design para garantir eficiência, escalabilidade e confiabilidade dos aplicativos.
A alternativa D está incorreta, pois os padrões de design são concebidos como soluções
reutilizáveis para problemas comuns.
A alternativa E está correta, pois, com a crescente adoção da arquitetura sem servidor, há
uma demanda crescente por padrões de design eficazes para garantir que os aplicativos
sem servidor sejam eficientes, escaláveis e confiáveis.
1
1
1
MINHAS ANOTAÇÕES
1
1
1
MINHAS ANOTAÇÕES
1
1
1
TEMA DE APRENDIZAGEM 8
MINHAS METAS
Entender que o desenvolvimento é uma área em que o aprendizado deve ser contínuo.
1
1
1
U N I AS S E LVI
P L AY N O CO NHEC I M ENTO
VAMOS RECORDAR?
No vídeo do canal Sharpax, Marks Vinicius aborda as boas práticas para
programação. Acesse e atualize-se!
Disponível em: https://www.youtube.com/watch?v=7KuB-mZTdiE.
1
1
1
T E MA DE A PRE ND IZAGEM 8
IN D ICAÇÃO DE FI LM E
Blackberry
Mike Lazaridis e Douglas Fregin estão prestes a criar o primeiro
smartphone do mundo e a mudar a forma como as pessoas
trabalham e se conectam. Entretanto, negócios duvidosos e,
talvez o concorrente mais perigoso, o iPhone, ameaçam o in-
crível sucesso da empresa.
Refletindo sobre a história: Esse filme mostra a importância da
inovação e constante atualização, chamando a atenção para o
senso de boas práticas a serem seguidas. Ele também mos-
tra que a não observância de alguns desses pontos, como a
compreensão profunda dos requisitos dos usuários, pode ser
determinante para o sucesso, ou não, de um projeto.
1
1
1
U N I AS S E LVI
P E N SA N DO J UNTO S
“
Embora a atividade de comunicação forneça uma boa fundamen-
tação para o entendimento, a análise de requisitos refina esse en-
tendimento por meio de interpretações adicionais. À medida que a
estrutura do problema é delineada como parte do modelo de requi-
sitos, invariavelmente, surgem perguntas. São essas perguntas que
preenchem as lacunas – ou, em alguns casos, realmente nos ajudam
a encontrar as lacunas (Pressman; Maxim, 2016, p. 215).
1
1
1
T E MA DE A PRE ND IZAGEM 8
CÓDIGO LIMPO
1
1
1
U N I AS S E LVI
CONSISTÊNCIA E CLAREZA
REUTILIZAÇÃO DE CÓDIGO
FLEXIBILIDADE E ESCALABILIDADE
FACILIDADE DE MANUTENÇÃO
Projetos que seguem os design patterns são mais fáceis de manter a longo prazo, por conta
da melhor organização e estruturação do código. Assim, a partir do momento em que novos
desenvolvedores analisam o código, eles conseguem dar uma manutenção mais assertiva.
COMUNICAÇÃO
1
1
1
T E MA DE A PRE ND IZAGEM 8
REFATORAR
“
Quando um software é refatorado, o projeto existente é examinado
em termos de redundância, elementos de projeto não utilizados,
algoritmos ineficientes ou desnecessários, estruturas de dados mal
construídas ou inadequadas ou qualquer outra falha de projeto que
possa ser corrigida para produzir um projeto melhor.
LEGIBILIDADE
Simplifica o código, deixando-o mais legível para outros e para você mesmo em um futuro.
MANUTENIBILIDADE
REDUÇÃO DE BUGS
MELHORIA DE PERFORMANCE
1
1
1
U N I AS S E LVI
A prática de refatorar está ligada aos padrões de projeto, as quais visam melhorar a
estrutura de código, que, ao refatorar o desenvolvedor, poderá identificar a necessi-
dade da aplicação de padrões de projeto, trazendo, assim, os benefícios mencionados.
COMENTÁRIOS
1
1
1
T E MA DE A PRE ND IZAGEM 8
REVISÕES DE CÓDIGO
“
Durante uma revisão, várias pessoas examinam o software e sua
documentação associada, procurando problemas potenciais e não
conformidades com os padrões. A equipe de revisão faz julgamen-
tos informados sobre o nível de qualidade do software ou dos do-
cumentos do projeto (Sommerville, 2018, p. 674).
AUTOMATIZE TESTES
1
1
1
U N I AS S E LVI
PADRONIZAÇÃO
Propicia o alinhamento de padrões, uma vez que sintaxe e código são avaliados.
SEGURANÇA
1
1
1
T E MA DE A PRE ND IZAGEM 8
MODULARIDADE
“
Software monolítico (um grande programa composto de um único
módulo) não pode ser facilmente entendido por um engenheiro
de software. O número de caminhos de controle, abrangência de
referências, número de variáveis e complexidade geral tornaria o
entendimento quase impossível. Em quase todos os casos, devemos
dividir o projeto em vários módulos para facilitar a compreensão
e, consequentemente, reduzir o custo necessário para construir o
software (Pressman; Maxim, 2016, p. 234).
APRENDA CONTINUAMENTE
E M FO CO
1
1
1
U N I AS S E LVI
NOVOS DESAFIOS
O desenvolvimento de software apresenta uma variedade desafios. Muitos deles
podem ser contornados ou ter seu caminho facilitado, com o uso de padrões e
boas práticas de desenvolvimento, áreas que estão continuamente sendo aprimo-
radas. A conexão entre teoria e prática no desenvolvimento de software, aliada às
boas práticas e tendências tecnológicas, lhe preparará para enfrentar os desafios
e aproveitar as oportunidades do mercado de trabalho de TI.
No início desta jornada, foram propostos uma situação-problema e um
questionamento:
Ao ser contratado por uma empresa de software conhecida no mercado, assim que suas
atividades se iniciam, você se depara com um grande desafio: o código legado da empresa.
Com o início do seu primeiro projeto, você percebe que o código está desorganizado,
com poucos comentários, pouca descrição nos nomes das variáveis e falta de
padrões de projeto claros. Isso torna a manutenção e a implementação de novas
funcionalidades extremamente difíceis, impactando a produtividade da equipe.
A pergunta levantada acerca desse contexto foi: qual o problema central e como
você resolveria essa questão? Pois bem, o problema central, nesse caso, é o código
legado complexo e de baixa qualidade. Essa questão será resolvida por meio da
refatoração das partes mais críticas do software.
Os pontos a refatorar dependem de cada aplicação do software em questão, mas em
todos os códigos podem ser citados pontos críticos e passíveis de refatoração, quais sejam:
■ Reduzir a complexidade do código, tornando-o mais simples.
■ Encontrar códigos duplicados e eliminá-los.
■ Eliminar códigos que não estão sendo utilizados.
■ Verificar a má gestão de memória em cada objeto carregado.
■ Verificar os pontos de lógica.
■ Verificar as brechas de segurança.
■ Analisar outros pontos que julgue necessário.
1
1
1
AUTOATIVIDADE
1. “Você não pode apenas encontrar um padrão e copiá-lo para dentro do seu programa,
como você faz com funções e bibliotecas que encontra por aí. O padrão não é um pedaço
de código específico, mas um conceito geral para resolver um problema em particular.
Você pode seguir os detalhes do padrão e implementar uma solução que se adeque às
realidades do seu próprio programa” (Shvets, 2021, p. 29).
a) I, apenas.
b) III, apenas.
c) I e III, apenas.
d) II e III, apenas.
e) I, II e III.
1
1
1
AUTOATIVIDADE
1
1
1
REFERÊNCIAS
JACOBSON, I. A Resounding ‘Yes’ to Agile Processes – but also more. Cutter IT Journal, Boston,
v. 15, n. 1, p. 18-24, 2002.
SOMMERVILLE, I. Engenharia de software. 10. ed. São Paulo: Pearson, 2018. E-book.
1
1
1
GABARITO
1. Alternativa A.
Os padrões de design fornecem diretrizes e melhores práticas, que podem ser aplicadas
para resolver problemas comuns de forma eficiente e comprovada.
A alternativa B está incorreta, pois os padrões são amplamente utilizados na indústria de
software e têm demonstrado sua eficácia na prática.
A alternativa C está incorreta, pois os padrões de design são utilizados principalmente para
resolver problemas de design de software, como arquitetura, estruturação de código, e
interação entre componentes de software.
A alternativa D está incorreta, pois os padrões de design são conceitos estabelecidos e
amplamente reconhecidos que têm sido utilizados há décadas para melhorar a qualidade
e a eficiência do desenvolvimento de software.
A alternativa E está incorreta, pois os padrões de design são especificamente destinados a
resolver problemas relacionados ao design de software, não de hardware.
2. Alternativa A.
1
1
1
GABARITO
3. Alternativa C.
1
1
1
MINHAS ANOTAÇÕES
1
1
1
TEMA DE APRENDIZAGEM 9
COLABORAÇÃO E TRABALHO
EM EQUIPE
MINHAS METAS
1
1
1
U N I AS S E LVI
P L AY N O CO NHEC I M ENTO
1
1
1
T E MA DE A PRE ND IZAGEM 9
VAMOS RECORDAR?
O vídeo do canal Front Beginners discute a questão do trabalho em equipe na vida
de um programador. Muitas vezes, a rotina desse profissional aparenta ser solitária,
no entanto, o trabalho em equipe é essencial nessa área e será o padrão dessa
profissão. Acesse e saiba mais!
Disponível em: https://www.youtube.com/watch?v=xGtz78iI8Nk.
“
A adoção de padrões de projetos tem como finalidade aumentar
o entendimento do software, sendo considerada uma parte da
documentação do sistema. O uso de padrões tem como intuito a
produção de sistemas eficientes com características de reusabilida-
de, extensibilidade e manutenibilidade, fornecendo uma solução
completa e melhor estruturada ao invés de uma solução imediata
(Sturm; Silva, 2014, p. 1).
“
[...] será que alguém já desenvolveu uma solução para esse pro-
blema? A resposta é quase sempre sim. O problema é encontrar a
solução; garantir que, de fato, adapte-se ao problema em questão;
1
1
1
U N I AS S E LVI
Educação e conscientização
“
Durante o desenvolvimento de software, a equipe procura aplicar
técnicas que melhorem a qualidade do código, deixando-o legí-
vel, organizado e de fácil manutenção. Como resultado, há grandes
chances de se obter um sistema livre de defeitos e muito próximo
do desejado (Sturm; Silva, 2014, p. 3).
1
1
1
T E MA DE A PRE ND IZAGEM 9
IN D ICAÇÃO DE LI V RO
Use a Cabeça!
O livro traz um compilado de informações acerca das lições
aprendidas por aqueles que se depararam com os mesmos
problemas de desenvolvimento de software. Apresentada de
maneira leve e muito informativa, a publicação é recomendada
para a fixação dos conhecimentos a respeito dos padrões de
projeto: ele associa a teoria com exemplos práticos por meio
de analogias divertidas.
1
1
1
U N I AS S E LVI
Ferramentas, como linters e static code analyzers, podem ser utilizadas para
identificar, de forma automática, possíveis violações dos padrões de design no
código-fonte dos projetos. Esses recursos podem fornecer sugestões e recomen-
dações para corrigir violações dos padrões de design, facilitando a conformidade
com as diretrizes da equipe.
Seguindo tais práticas, as equipes poderão colher os benefícios de uma abordagem
centrada em padrões de design, incluindo código modular, de fácil manutenção, esca-
lável e reutilizável, além de melhorar a fluidez da comunicação da equipe no projeto.
A P RO F UNDA NDO
1
1
1
T E MA DE A PRE ND IZAGEM 9
EDUCAÇÃO E CONSCIENTIZAÇÃO
Toda a equipe deve ter uma compreensão sólida dos princípios e conceitos dos pa-
drões de design.
COLABORAÇÃO EM DESIGN:
FERRAMENTAS E METODOLOGIAS
1
1
1
U N I AS S E LVI
Versionamento
1
1
1
T E MA DE A PRE ND IZAGEM 9
Metodologias ágeis
Diagramas de modelagem
1
1
1
U N I AS S E LVI
DIAGRAMA DE CLASSES
DIAGRAMAS DE SEQUÊNCIA
DIAGRAMAS DE ATIVIDADE
Demonstra o sistema do ponto de vista das execuções das atividades e ilustra o fluxo
de controle.
1
1
1
T E MA DE A PRE ND IZAGEM 9
VERSIONAMENTO
METODOLOGIAS ÁGEIS
DIAGRAMAS DE MODELAGEM
E M FO CO
1
1
1
U N I AS S E LVI
NOVOS DESAFIOS
No mercado de trabalho, cada vez mais, fazem-se necessários a colaboração e
trabalho em equipe, com a integração de padrões de design ao ambiente de de-
senvolvimento. Esses pontos podem ser impulsionados, e mais facilmente alcan-
çados, uma vez que, como vimos, os padrões de projeto trazem padronização,
facilitando a comunicação entre a equipe.
Passamos por tópicos, como a integração de padrões em equipes de desenvol-
vimento, ressaltando como tais parâmetros são integrados e auxiliam as equipes,
além de assuntos, como a conscientização e a educação da equipe no uso de pa-
drões, nomenclatura ou revisões de código poderão auxiliar no desenvolvimento
do software e integração do time.
Assuntos, como a colaboração em design, são fundamentais para facilitar a
documentação, pois nos mostram, em formatos visuais, estruturas do sistema. No
início do tema, propusemos o experimento de pesquisar a respeito do impacto
que um padrão de projeto poderia causar na colaboração entre os membros da
equipe. A resposta a esse questionamento indica que esse impacto pode ser posi-
tivo em alguns aspectos, como: comunicação facilitada, divisão clara de respon-
sabilidades, reutilização de soluções comprovadas, flexibilidade e adaptabilidade.
Os padrões de desenvolvimento trazem esses benefícios para uma implan-
tação, a qual, aliada a outros métodos gerenciais de comunicação, certamente,
trará resultados positivos para seu projeto.
1
1
1
AUTOATIVIDADE
a) É essencial que toda a equipe de desenvolvimento tenha uma compreensão sólida dos
princípios e conceitos por trás dos padrões de design.
b) Padrões de projeto são soluções únicas e exclusivas para problemas de desenvolvimento
de software, não havendo necessidade de sua reutilização ou adaptação para diferentes
contextos.
c) Padrões de projeto são restritos a uma única linguagem de programação e não podem
ser aplicados em diferentes ambientes de desenvolvimento.
d) Padrões de projeto são obsoletos e não oferecem benefícios significativos no desen-
volvimento de software moderno, sendo mais vantajoso criar soluções personalizadas
em cada projeto.
e) Padrões de projeto são apenas diretrizes teóricas sem aplicação prática no desenvolvi-
mento de software, sendo irrelevantes para a construção de sistemas reais.
a) I, apenas.
b) III, apenas.
c) I e II, apenas.
d) II e III, apenas.
e) I, II e III.
1
1
1
AUTOATIVIDADE
1
1
1
REFERÊNCIAS
TEIXEIRA, E.; ANTUNES, J.; NEVES, N. F. Avaliação de ferramentas de análise estática de código
para detecção de vulnerabilidades. In: CONFERÊNCIA NACIONAL SOBRE SEGURANÇA INFOR-
MÁTICA NAS ORGANIZAÇÕES, 3., 2007, Coimbra. Anais [...]. Coimbra: Universidade de Coimbra,
2007.
1
1
1
GABARITO
1. Alternativa A.
2. Alternativa E.
3. Alternativa A.
A alternativa A está correta, pois reflete a natureza das ferramentas de análise estática, des-
tacando que elas são especializadas em encontrar vulnerabilidades específicas e empregam
diferentes técnicas, o que dificulta a comparação de suas capacidades efetivas.
A alternativa B está incorreta, pois as ferramentas de análise estática possuem conjuntos de
funcionalidades diferentes e são especializadas em encontrar diferentes tipos de vulnera-
bilidades, tornando a escolha entre elas desafiadora.
1
1
1
GABARITO
A alternativa C está incorreta, pois as ferramentas de análise estática variam em sua capaci-
dade de detectar diferentes tipos de vulnerabilidades e algumas podem ser mais eficazes
em determinados cenários do que outras.
A alternativa D está incorreta, pois as ferramentas de análise estática são úteis na detecção
de vulnerabilidades. Elas continuam sendo uma parte importante do processo de garantia
de qualidade de software.
A alternativa E está incorreta, pois as ferramentas de análise estática variam em suas capaci-
dades e abordagens, e algumas podem oferecer vantagens distintas em termos de detecção.
1
1
1
MINHAS ANOTAÇÕES
1
1
1
MINHAS ANOTAÇÕES
1
1
1