Escolar Documentos
Profissional Documentos
Cultura Documentos
Design Patterns
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DESIGN PATTERNS
Referências:
INTRODUÇÃO
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
HERANÇA
De modo simplificado, herança é “uma classe (classe filha) que tem os mesmos atributos
de outra (classe pai), mais alguns atributos distintos”.
Exemplo: uma classe cliente, que é a classe principal, e duas classes filhas da classe
principal, “Pessoa Física” e “Pessoa Jurídica”.
Neste exemplo, as duas classes podem ser entendidas como um cliente, mas cada uma
com alguns atributos a mais:
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMPOSIÇÃO
Composição é bem mais simples de entender que a herança. Ela acontece quando uma
determinada classe A está contida em outra determinada classe B.
Exemplo: imagine duas classes distintas, sendo que a primeira é a classe Carro e a
segunda é a classe Motor. Imagine que toda classe Carro tenha uma classe Motor. Neste
exemplo há uma relação de composição entre Carro e Motor, pois o motor está contido na
classe Carro.
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Além disso, os objetos que foram instanciados e estão contidos na classe que os instan-
ciou são acessados somente através de sua interface, seguindo assim o princípio de progra-
mar para uma interface e não para uma implementação.
A composição também apresenta uma menor dependência de implementações e temos
cada classe focada em apenas uma tarefa, seguindo o princípio da responsabilidade única.
Por fim, a composição também tem um bom encapsulamento, em que os detalhes inter-
nos dos objetos instanciados não são visíveis.
A grande desvantagem é que um software muito dinâmico e parametrizado é mais difícil
de entender do que software mais estático.
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
MELHORES PRÁTICAS
DIRETO DO CONCURSO
1. (2019/CESPE/MPC/PA/ANALISTA MINISTERIAL/TECNOLOGIA DA INFORMA-
ÇÃO) Assinale a opção que apresenta os três grupos em que se segmentam os De-
sign Patterns.
a. Padrões de criação, padrões estruturais e padrões comportamentais.
ANOTAÇÕES
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
Padrões de Criação: esses padrões de design fornecem uma maneira de criar objetos
enquanto ocultam a lógica de criação, em vez de instanciar objetos diretamente usando o
operador new. Isso dá ao programa mais flexibilidade para decidir quais objetos precisam
ser criados para um determinado caso de uso.
Padrões Estruturais: esses padrões de design dizem respeito à classe e à composição
do objeto. O conceito de herança é usado para compor interfaces e definir maneiras de
compor objetos para obter novas funcionalidades.
Padrões Comportamentais: esses padrões de design se preocupam especificamente
com a comunicação entre objetos.
GABARITO
1. a
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DESIGN PATTERNS II
FACTORY / FÁBRICA
Vamos mostrar os tipos de design patterns com os nomes em inglês e em português. Nas
provas, têm sido cobrado o nome em inglês.
O padrão de fábrica é um dos padrões de design mais usados em Java. Esse tipo de
padrão de design se enquadra no padrão criacional, pois fornece uma maneira de criar
um objeto.
No padrão Factory, criamos objetos sem expor a lógica de criação ao cliente e nos refe-
rimos ao objeto recém-criado usando uma interface comum.
A ShapeFactory vai retornar uma shape (uma interface, que pode ser um retângulo, um
quadrado ou um círculo).
ANOTAÇÕES
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
5m
A programação acima representa o lado esquerdo do organograma.
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Não é obrigado a ter factory no nome, mas é bom descrever a classe para que outro
desenvolvedor possa identificá-la.
Os padrões de fábrica trabalham em torno de uma superfábrica que cria outras fábricas.
Esta fábrica também é chamada de fábrica de fábricas. Esse tipo de padrão de design se
enquadra no padrão criacional, pois fornece uma maneira de criar um objeto.
No padrão Abstract Factory, uma interface é responsável por criar uma fábrica de objetos
relacionados sem especificar explicitamente suas classes. Cada fábrica gerada pode forne-
cer os objetos conforme o padrão de fábrica.
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
10m
ANOTAÇÕES
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANOTAÇÕES
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
SINGLETON
O Singleton é um dos padrões de design mais simples em Java. Esse tipo de padrão de
design se enquadra no padrão criacional.
Esse padrão envolve uma única classe responsável por criar um objeto, assegurando
que apenas um único objeto seja criado. Essa classe fornece uma maneira de acessar seu
único objeto que pode ser acessado diretamente sem a necessidade de instanciar o objeto
da classe.
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ANOTAÇÕES
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
BUILDER / CONSTRUTOR
O padrão Builder cria um objeto complexo usando objetos simples e usando uma aborda-
gem passo a passo. Esse tipo de padrão de design se enquadra no padrão criacional.
Uma classe Builder cria o objeto final passo a passo. Este construtor é independente de
outros objetos.
20m
ANOTAÇÕES
8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ANOTAÇÕES
9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANOTAÇÕES
10 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANOTAÇÕES
11 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
PROTOTYPE / PROTÓTIPO
Esse padrão envolve a implementação de uma interface de protótipo que informa para
criar um clone do objeto atual. Esse padrão é usado quando a criação do objeto diretamente
é cara. Por exemplo, um objeto deve ser criado após uma operação cara do banco de dados.
Podemos armazenar em cache o objeto, retornar seu clone na próxima solicitação e atualizar
o banco de dados conforme e quando necessário, reduzindo assim as chamadas ao banco
de dados.
25m
ANOTAÇÕES
12 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ANOTAÇÕES
13 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (UF-MA/UF-MA/ANALISTA DE TECNOLOGIA DA INFORMAÇÃO/2019) De acordo com
Gamma, padrões de projeto são soluções reutilizáveis de software orientado a objetos.
Considere as três afirmativas a seguir e depois informe a alternativa correta.
ANOTAÇÕES
14 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
I – Não é usado o new e o usuário passa à outra classe a criação do objeto.
II – Os padrões miram a forma para compor padrões maiores.
III – Os padrões comportamentais se preocupam com a comunicação.
15 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
Singleton: O padrão Singleton é um dos padrões de design mais simples em Java. Esse
tipo de padrão de design se enquadra no padrão criacional. Esse padrão envolve uma
única classe responsável por criar um objeto, assegurando que apenas um único objeto
seja criado. Essa classe fornece uma maneira de acessar seu único objeto que pode ser
acessado diretamente sem a necessidade de instanciar o objeto da classe.
GABARITO
1. e
2. a
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
16 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ADAPTER / ADAPTADOR
O padrão do adaptador funciona como uma ponte entre duas interfaces incompatí-
veis. Esse tipo de padrão de design se enquadra no padrão estrutural, pois combina a capa-
cidade de duas interfaces independentes.
Esse padrão envolve uma única classe responsável por unir funcionalidades de
interfaces independentes ou incompatíveis.
Um exemplo da vida real pode ser um caso de leitor de cartão que atua como um adap-
tador entre o cartão de memória e um laptop. Você pluga o cartão de memória no leitor de
cartões e o leitor de cartões no laptop para que o cartão de memória possa ser lido via laptop.
ANOTAÇÕES
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
5m
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
BRIDGE / PONTE
É usado quando precisamos separar uma abstração de sua implementação para que
as duas possam variar independentemente. Esse tipo de padrão de design se enquadra no
padrão estrutural, pois desacopla a classe de implementação e a classe abstrata, fornecendo
uma estrutura de ponte entre eles.
Esse padrão envolve uma interface que atua como uma ponte que torna a funciona-
lidade de classes concretas independente das classes do implementador de interface.
Ambos os tipos de classes podem ser alterados estruturalmente sem se afetarem.
10m
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
FILTER / FILTRO
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ANOTAÇÕES
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
15m
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O código recebe dois critérios na entrada, e vai selecionando os dados conforme o aten-
dimento aos critérios.

ANOTAÇÕES
8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANOTAÇÕES
9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMPOSITE / COMPOSIÇÃO
10 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ANOTAÇÕES
11 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
12 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (2018/UFPR/UFPR/TÉCNICO DE TECNOLOGIA DA INFORMAÇÃO) Em relação aos
Padrões de Projeto, é correto afirmar que:
COMENTÁRIO
a. Adapter / Adaptador: o padrão do adaptador funciona como uma ponte entre duas in-
terfaces incompatíveis. Esse tipo de padrão de design se enquadra no padrão estrutural,
pois combina a capacidade de duas interfaces independentes. Esse padrão envolve uma
única classe responsável por unir funcionalidades de interfaces independentes ou
incompatíveis. Um exemplo da vida real pode ser um caso de leitor de cartão que atua
como um adaptador entre o cartão de memória e um laptop. Você pluga o cartão de memó-
ria no leitor de cartões e no leitor de cartões no laptop para que o cartão de memória possa
ser lido via laptop.
b. Composite / Composição: o padrão de composição é usado onde precisamos tratar um
grupo de objetos de maneira semelhante a um único objeto. O padrão compõe objetos
ANOTAÇÕES
13 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
GABARITO
1. a
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
14 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DESIGN PATTERNS IV
Decorator / Decorador
O padrão decorador permite que um usuário adicione novas funcionalidades a um objeto
existente sem alterar sua estrutura.
Obs.: Sugere-se que o aluno relacione o nome do Patterns com a característica dele, pois,
de fato, o Decorator vai decorar um objeto “sem alterar sua estrutura”.
Esse tipo de padrão de design se enquadra no padrão estrutural, visto que atua como um
invólucro para a classe existente;
Esse padrão cria uma classe decoradora que agrupa a classe original e fornece funcio-
nalidade adicional, mantendo intacta a assinatura dos métodos de classe;
Obs.: Uma característica importante é manter intacta a assinatura dos métodos de classe.
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Exemplo:
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
No Shape redRectabgle, tem-se a mesma situação. Então, será impresso o círculo normal
(circle.draw), depois o círculo com a borda vermelha (redCircle.draw) e, por fim, o retângulo
com a borda vermelha (redRectangle.draw).
A saída desse programa será o círculo com borda normal, depois o círculo com a borda
vermelha e, finalmente, o retângulo com a borda vermelha.
Esse é um exemplo de Decorator, que é bastante comum no desenvolvimento de Java. O
ponto principal dele é que tanto o Shape Circle quanto o redCircle são Shapes. No entanto,
o redCircle receberá a própria Shape interiormente.
O próximo padrão apresentado é também muito usual: trata-se do padrão de fachada.
Facade / Fachada
O padrão de fachada oculta as complexidades do sistema e fornece uma interface para o
cliente, permitindo que o cliente possa acessar o sistema. Esse tipo de padrão de design se
enquadra no padrão estrutural, pois adiciona uma interface ao sistema existente para ocultar
suas complexidades. Portanto, trata-se de um sistema complexo que se torna mais simples
de utilizar, no qual essa complexidade é oculta por uma fachada, como o nome sugere.
Esse padrão envolve uma única classe que fornece métodos simplificados exigidos pelo
cliente e delega chamadas para métodos de classes de sistema existentes. Em outras pala-
vras, existe uma classe em que será possível fazer uma chamada mais simples. Ela poten-
cialmente fará uma série de outras chamadas mais complexas internamente, fornecendo
uma fachada que simplificará a utilização do sistema.
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

Há aqui uma interface Shape com o retângulo, o quadrado e o círculo. Observa-se o que
ocorre com o ShapeMaker:
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Essa classe internamente possui o círculo, o retângulo e o quadrado. Quando ela estiver
construída e for chamado o seu construtor, será feito um círculo, um retângulo e um qua-
drado. Assim, o ShapeMaker chamará o método drawCircle, que demandará o circle.draw, o
rectangle.draw no drawRectangle e o drawSquare no square.draw.
Torna-se notória a existência de somente uma classe, o ShapeMaker. Porém, interna-
mente a ela, existem três outras classes distintas. Então, ela se responsabiliza por criar as
instâncias dessas classes. Dessa forma, no momento em que é chamado o método drawCir-
cle, drawRectangle e drawScare, convoca-se o método draw do objeto correto interno dele.
ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Flyweight
O padrão Flyweight é usado principalmente para reduzir o número de objetos criados,
diminuir o espaço ocupado na memória e aumentar o desempenho. Esse tipo de padrão de
design se enquadra no padrão estrutural, pois fornece maneiras de diminuir a contagem de
objetos, melhorando assim a estrutura do aplicativo.
Obs.: Para cada um desses Patterns, há palavras-chave que se relacionam e vão aparecer
nas questões de concurso. Por exemplo, Facade liga-se à diminuição da complexida-
de e Flyweight à economia de memória. Dessa forma, pode se dizer que, para cada
problema que ocorra durante o desenvolvimento de um sistema, existirão Patterns
mais adequados para a situação.
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Exemplo:
ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Nesse exemplo há a Interface Shape, um Circle, que implementa o Shape, e onde ele vai
ter uma cor ponto x, y, raio e um consultor, além de um método de desenhar. Nesse método
poderá ser escrito o draw, a cor, o ponto x, y e o raio do círculo. Para construir essas formas
existe o ShapeFactory.
O primeiro passo na Factory é o HashMap, no qual está toda a chave do método. Esse
HashMap serve como um cache, uma memória especial para o círculo. O HashMap funciona
como uma árvore de hash, no qual é possível armazenar uma chave valor K/V. Depois de
chamar essa chave, novamente será obtido o valor armazenado nesse lugar.
O método getCircle se encontra com uma determinada cor, então ele vai obter, por meio
dessa cor, o Circle. Caso este seja nulo, ele criará um novo círculo com a cor, colocará o
círculo no Hashmap, expressará isso e retornará ao círculo. Em síntese, o método vai tentar
buscar no cache o círculo, caso não seja possível, será criado um círculo que depois será
colocado no cache, isso porque, em um próximo acionamento desse método, se ele já existir,
o cache vai ser recuperado. Vale ressaltar que o cache também se mantém com uma carac-
15m terística estética, ou seja, ele vai continuar existindo entre as chamadas do ShapeFactory.
ANOTAÇÕES
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Proxy
No padrão de proxy, uma classe representa a funcionalidade de outra classe. Esse tipo
de padrão de design está sob um padrão estrutural. Nessa interface, cria-se um objeto que
possui o objeto original para fazer a interface de sua funcionalidade com o mundo exterior.
O padrão Proxy retoma o proxy de internet. Por exemplo, uma empresa poderá configu-
rar o navegador para acessar à internet por meio do Proxy, que é a sua interface. O proxy se
torna uma barreira e pode impedir o acesso a sites maliciosos, fazendo uma série de políticas
importantes para uma empresa, assim como evitar que haja acessos indevidos e tentativas
de invasão.
Pode haver, nesse programa, uma Image, que é uma interface, uma RealImage e uma
Proxyimagem. Ambas implentam a interface image. Então, o ProxyPatterDemo utiliza a Pro-
xyImage. Exemplo:
ANOTAÇÕES
www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O ProxyImage implementa Image, mas internamente ele tem uma RealImage e um file-
Name. O ProxyImage recebe o fileName e, quando faz o display e a realImage está igual a
null, ele busca a imagem real do fileName para, em seguida, realizar o realImage.display.
Em outras palavras, ele faz um Proxy diante do objeto RealImage e o aciona assim que
20m necessário.
ANOTAÇÕES
www.grancursosonline.com.br 12
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: O ProxyImage no display carrega a Image uma vez no disco e guarda a RealImage.
www.grancursosonline.com.br 13
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 14
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 15
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A base possui uma cadeia na qual se cria algo e passa-se para a próxima, ou seja, uma
cadeia de responsabilidade.
ANOTAÇÕES
www.grancursosonline.com.br 16
DESENVOLVIMENTO WEB
Design Patterns IV
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
COMENTÁRIO
GABARITO
1. E
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 17
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DESIGN PATTERNS V
COMANDO / COMMAND
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
É perceptível no programa que o Execute é uma ordem que vem da interface Order.
Assim, tanto se pode realizar uma ordem de compra como uma de venda das ações.
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O Broker tem uma lista de ordens (orderList). Então, ele pode aceitar as ordens (takeor-
5m der) e executar as ordens (placeOrders) e, por fim, limpá-las (orderList.clear).
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
INTERPRETER / INTÉRPRETE
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A interface Expression com o método interpret recebe um String context, ou seja, o con-
teúdo que vai ser interpretado retornando uma resposta do tipo boolean.
A expressão mais simples no programa é a terminal (TerminalExpression). Pode-se dizer
que ela é uma expressão atômica.
Obs.: O interpret verifica se o contexto tem determinado dado fornecido quando a expres-
são foi criada.
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
A AndExpression, assim como a citada anteriormente, tem duas expressões. Nas expres-
sões “&&” e “| |”, ambas precisam ser verdadeiras nas suas operações.
10m
A seguir, apresenta-se o InterpreterPattern em execução:

ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ITERATOR

ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
MEDIATOR / MEDIADOR
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
MEMENTO
O padrão Memento é usado para restaurar o estado de um objeto para um estado anterior,
ou seja, memorizar o seu estado. Ele se enquadra na categoria de padrão comportamental.
20m
ANOTAÇÕES
www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Há, nessa parte, uma classe concreta chamada Memento que tem um estado e, ao cons-
truí-lo, realiza o getState. Percebe-se que ele não tem o setState, ou seja, ele vai permanecer
enquanto a classe existir.
O método Caretaker tem uma lista de mementos, podendo adicionar um Memento state
ou recuperá-lo por meio de int index. A seguir, tem-se o programa MementoPatternDemo
em execução:

Obs.: O Memento não é um Pattern muito utilizado.
ANOTAÇÕES
www.grancursosonline.com.br 12
DESENVOLVIMENTO WEB
Design Patterns V
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
COMENTÁRIO
GABARITO
1. E
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 13
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DESIGN PATTERNS VI
OBSERVADOR / OBSERVER
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Nesse assunto (subject), a cada vez que o estado é alterado, todos os observadores são
notificados (notifyAllObservers). O subject tem a opção de atachar/anexar um novo observa-
dor. Logo, ele se vale da sua lista de observadores e adiciona um novo observador.
Em síntese, toda vez que o subject sofrer um setState, ele é alterado. Assim, é chamada
a função de notificação, que percorre a lista de observadores, solicitando o método update
de cada um deles.
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ESTADO / STATE
No padrão State, o comportamento de uma classe muda com base em seu estado. Ele é
classificado como padrão de comportamento.
Nesse padrão, criam-se objetos que representam vários estados e um objeto de contexto
cujo comportamento varia conforme o objeto de estado muda.
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Esse é um exemplo para mostrar para que serve o State. Ele não é muito cobrado
em questões, mas é importante conhecer os design Patterns, saber como se classi-
ficam e como funcionam. Inclusive, a classificação dos padrões Patterns é bastante
cobrada em provas.
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Percebe-se que isNil retorna false porque ele não é nulo.
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Uma opção possível no sistema: no lugar de retornar Null, volta-se uma classe concreta
que é Null.
15m
ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Diante do exemplo apresentado, é possível dizer que essa forma evita que o usuário rea-
lize muitas verificações do tipo “if’ Not Null”, pois há a garantia de que o objeto nunca será
nulo. Quando ele for nulo, haverá o método isNil=”true”.
STRATEGY/ ESTRATÉGIA
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Esse é um padrão muito solicitado em questões de concurso. Apesar de ser mais
complexo, é bem popular.
www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
20m
Tem-se, nesse Pattern, uma classe de contexto que altera a forma executada em tempo
de execução do programa. Assim, é possível criar novos contextos com estratégias diferen-
tes, sendo que cada uma delas possui uma implementação distinta do que será feito.
ANOTAÇÕES
www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
COMENTÁRIO
Essa pode ser considerada uma questão difícil, porque envolve conhecimento de atua-
lidades. Para entender a questão, é pertinente retomar o conceito de programação reativa:
A programação reativa é um paradigma de programação orientado em torno dos fluxos de
dados e da propagação da mudança. Isso significa que deve ser possível expressar fluxos de
dados estáticos ou dinâmicos com facilidade nas linguagens de programação usadas, além
de que o modelo de execução subjacente propagará automaticamente as alterações através
do fluxo de dados.
Outro conceito que precisa ser retomado é o de Observador: O padrão observador é
usado quando há um relacionamento do tipo um-para-muitos e, quando um objeto for modi-
ficado, seus objetos dependentes devem ser notificados automaticamente. Ele se enquadra
na categoria padrão comportamental. Ao retomar os dois conceitos, evidencia-se a relação
25m do Observer com os fluxos de dados e a propagação da mudança.
ANOTAÇÕES
www.grancursosonline.com.br 12
DESENVOLVIMENTO WEB
Design Patterns VI
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
GABARITO
1. b
2. d
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 13
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
MODELO / TEMPLATE
No padrão de Modelo, uma classe abstrata expõe formas definidas/modelos para execu-
tar seus métodos. Suas subclasses podem substituir a implementação do método conforme a
necessidade, mas a chamada deve ser da mesma maneira definida por uma classe abstrata.
Ele terá uma classe abstrata com vários métodos abstratos, mas essa classe terá uma imple-
mentação concreta de um método chamado Modelo, pois ele dará uma garantia de como os
métodos vão ser executados.
Esse padrão está classificado na categoria padrão de comportamento.
Há aqui uma classe abstrata chamada Game. Essa classe é um Template. Ela possui
duas implementações concretas (Cricket e Football).
ANOTAÇÕES
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
5m
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Pode-se observar que, na classe Cricket, assim como na classe Football, não há um
método Play implementado, pois quem o tem é a classe Game.
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
VISITANTE / VISITOR
No padrão Visitor, usa-se uma classe de visitantes que altera o algoritmo de execução de
uma classe de elemento. Dessa maneira, o algoritmo de execução do elemento pode variar
conforme o visitante variar. Ele está na categoria padrão de comportamento. De acordo com
o padrão, o objeto de elemento deve aceitar o objeto visitante para que o mesmo lide com a
operação no objeto de elemento. Pode-se dizer que ele é uma forma de integrar várias clas-
ses distintas, permitindo uma alteração no comportamento interno da classe por uma outra
classe externa.
Todas as classes implementam o método accept. É a partir dele que ocorrerá a interação
10m com o visitante (Visitor).
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br

ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Este é um exemplo concreto do Design Pattern Visitante (Visitor). Esse padrão, como
observado, consegue alterar o algoritmo e percorrê-lo.
O próximo Design Pattern apresentado foi criado pelo JEE.
BUSINESS DELEGATE
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Os padrões utilizados atualmente pelo JEE estão mais próximos de casos de uso
real de desenvolvimento, a exemplo do Business Delegate. Há também o foco em
separar as camadas ou torná-las menos acopladas.

ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Há, no exemplo, duas opções de execução da lógica de negócios, via EJB OU JMS.

ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Tem-se exposta, neste Pattern, uma execução que favorece o desacoplamento entre a
camada mais próxima da interface e a camada de negócios. Para isso, utiliza-se o Busines-
sDelegate para decidir qual o tipo de serviço que seria executado a depender do parâme-
tro passado.
ANOTAÇÕES
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
COMENTÁRIO
Pode-se considerar esse tipo de questão como desleal, pois não avalia muito o conheci-
mento do candidato. Trata-se de uma questão relativamente difícil, porque o aluno terá que
saber a classificação de cada um dos Design Patterns. Dessa forma, é necessária atenção
para o conteúdo teórico.
A bibliografia dispõe sobre a classificação de cada um dos Design Patterns:
Padrões de Criação Padrões Estruturais Padrões Comportamentais
Abstract Factory Private Class Data Chain of Responsability
Object Pool Adapter Command
Builder Bridge Interpreter
Factory Method Composite Iterator
Prototype Decorator Mediator
Singleton Business Delegate Memento
Flyweight Observer
Proxy State
Façade (ou Facade) Strategy
Template Method
Visitor
ANOTAÇÕES
www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Design Patterns VII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Tendo em vista a questão, é pertinente retomar o conceito de Visitor: “No padrão Visitor,
usa-se uma classe de visitantes que altera o algoritmo de execução de uma classe de
elemento. Dessa maneira, o algoritmo de execução do elemento pode variar conforme o
visitante variar. Esse padrão está na categoria padrão de comportamento”.
COMENTÁRIO
GABARITO
1. c
2. c
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• O Padrão de Objeto de Acesso a Dados ou padrão DAO é usado para separar API ou
operações de acesso de dados de baixo nível dos serviços de negócio de alto nível. É
composto por:
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
student.setName(“Michael”);
studentDao.updateStudent(student);
//recupera o estudante
studentDao.getStudent(0);
System.out.println(“Student: [RollNo: “ + student.getRollNo() +
“, Name: “ + student.getName() + “ ]”);
}
// Saída
Student: [RollNo: 0, Name: Robert ]
Student: [RollNo: 1, Name: John ]
Student: Roll No 0, atualizado no banco de dados
Student: [RollNo: 0, Name: Michael ]
10m
FRONT CONTROLLER
➢ Front Controller: Manipulador único para todos os tipos de solicitações que chegam ao
aplicativo;
➢ Dispatcher: O Front Controller pode usar um objeto despachante que pode despachar
a solicitação para o manipulador específico correspondente.
➢ View: Views são o objeto para o qual as solicitações são feitas.
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
else{
HomeView.show();
}
15m
public class FrontController {
private Dispatcher dispatcher;
public FrontController(){
dispatcher = new Dispatcher();
}
private boolean isAuthenticUser(){
System.out.println(“Usuário autenticado com sucesso.”);
return true;
}
private void trackRequest(String request){
System.out.println(“Página solicitada: “ + request);
}
public void dispatchRequest(String request){
//loga cada solicitação
rackRequest(request);
//autentica o usuário
if(isAuthenticUser()){
dispatcher.dispatch(request);
}
public class FrontControllerPatternDemo {
public static void main(String[] args) {
FrontController frontController = new FrontController();
frontController.dispatchRequest(“HOME”);
frontController.dispatchRequest(“STUDENT”);
}
// Saída
Página solicitada: HOME
Usuário autenticado com sucesso.
Exibindo Home Page
Página solicitada: STUDENT
ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
SERVICE LOCATOR
• O padrão de design Service Locator é usado quando queremos localizar vários servi-
ços usando a consulta JNDI.
• Considerando o alto custo de procurar um serviço na JNDI, o padrão Service Locator
utiliza a técnica de cache.
• Na primeira vez em que um serviço é necessário, o Service Locator consulta no JNDI
e armazena em cache o objeto de serviço.
• Outras pesquisas para o mesmo serviço via Service Locator são feitos em seu cache,
o que melhora o desempenho do aplicativo em grande medida.
• Os componentes deste padrão de design são:
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
}.
public class ServiceLocatorPatternDemo {
public static void main(String[] args) {
Service service = ServiceLocator.getService(“Service1”);
service.execute();
service = ServiceLocator.getService(“Service2”);
service.execute();
service = ServiceLocator.getService(“Service1”);
service.execute();
service = ServiceLocator.getService(“Service2”);
service.execute();
/ Saída
Buscando e criando um novo objeto Service1
Executando Service1
Buscando e criando um novo objeto Service2
Executando Service2
Retornando objeto cacheado Service1
Executando Service1
Retornando objeto cacheado Service2
Executando Service2
DIRETO DO CONCURSO
1. (FCC/TJ–PE/TÉCNICO JUDICIÁRIO/2012) Analise o texto: É um design pattern que
25m
permite que uma aplicação seja desenvolvida de forma que a camada de acesso aos
dados seja isolada das camadas superiores. Numa aplicação que utiliza a arquitetura
MVC, todas as funcionalidades de bancos de dados, tais como estabelecimento de
conexões, mapeamento de objetos Java para tipos de dados SQL ou execução de
comandos SQL, devem ser feitas por classes representadas nesse design pattern.
www.grancursosonline.com.br 10
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
•O Padrão de Objeto de Acesso a Dados ou padrão DAO é usado para separar API ou
operações de acesso de dados de baixo nível dos serviços de negócio de alto nível. É
composto por:
➢ Interface de objeto de acesso a dados: essa interface define as operações padrão a
serem executadas nos objetos de modelo;
➢ Classe concreta Data Access Object: essa classe implementa a interface acima. Essa
classe é responsável por obter dados de uma fonte de dados que pode ser bancos de da-
dos, xml ou qualquer outro mecanismo de armazenamento;
Em se tratando de acesso de dados, comandos SQL, o único desing pattern possível é o
Data Access Object.
www.grancursosonline.com.br 11
DESENVOLVIMENTO WEB
Design Patterns VIII
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
• O padrão de design Front Controller é usado para fornecer um mecanismo centralizado
de tratamento de solicitações, para que todas as solicitações sejam tratadas por um único
manipulador.
• Esse manipulador pode fazer a autenticação/autorização/log ou rastreamento de solici-
tação e depois passar as solicitações para os manipuladores correspondentes. É formado
pelos seguintes componentes:
➢ Front Controller: Manipulador único para todos os tipos de solicitações que chegam ao
aplicativo;
➢ Dispatcher: O Front Controller pode usar um objeto despachante que pode despachar a
solicitação para o manipulador específico correspondente.
GABARITO
1. b
2. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 12
Padrões GRASP
Professor Rogerão Araújo
2
Teoria, prática e questões de
concursos
Algoritmo Padrão
Algoritmo Padrão
É uma receita culinária É mais como um modelo
Nome do padrão
Problema Solução Consequências
31
Questões de concursos
[CONSULPLAN 2017 TRE/RJ – Analista Judiciário – Análise de Sistemas]
Um padrão de projeto nomeia, identifica e abstrai os aspectos-chave de
uma estrutura de projeto comum para torná-la útil para a criação de
um projeto orientado a objetos reutilizável. Um padrão, em geral,
possui quatro elementos essenciais; assinale-os.
• [A] Solução; aplicação; abstração; e, reutilização.
• [B] Problema; elementos; abstração; e, consequências.
• [C] Consequências; aplicação; reutilização; e, problema.
• [D] Nome do padrão; problema; solução; e, consequências.
32
Questões de concursos
[Instituto AOCP 2016 EBSERH – Analista de Tecnologia da Informação –
Processos (CH-UFPA)] Em projetos orientados a objetos (OO) em geral
aplica-se padrões definidos para serem utilizados no desenvolvimento,
como o GRASP, por exemplo.
A eficiência e a
Planejada Implementada manutenibilidade de
sistemas
Claramente Bem
Autônomos Autocontidos
definidas compreendidas
Fracamente Altamente
acoplados coesos
Professor Rogerão Araújo 45
Objetivos do RDD
Isso permite uma
maior flexibilidade e
Fazer com que cada objeto
uma manutenção
mais fácil do sistema
É definida Está
como relacionada
Um contrato ou
obrigação de uma Ao comportamento
classe
Professor Rogerão Araújo 49
Responsabilidade dos objetos
As responsabilidades de um projeto
podem ser divididas em
Conhecer Fazer
Professor Rogerão Araújo 50
Responsabilidade dos objetos
Responsabilidades conhecer
Saber
São relacionadas com a distribuição das características do sistema entre as
classes
O conhecimento dos dados
Saber a respeito de outros objetos Saber sobre as coisas que pode
privados que o objeto em questão
relacionados derivar ou calcular
encapsula
Responsabilidades fazer
São relacionadas com a distribuição do comportamento
do sistema entre as classes
Fornecem uma
Consistem em diretrizes
abordagem sistemática
Para atribuir responsabilidade a Para a atribuição de
classes e objetos em projeto responsabilidades às classes do
orientado a objetos projeto
Facilitando
A manutenção A extensibilidade
Têm objetivo de
Melhorar Torná-lo mais
A qualidade do
projeto de Flexível Extensível Fácil de manter
software
Responsabilidades
Baixo acoplamento Projetos Cenários
bem definidas
2
Teoria, prática e questões de
concursos
Especialista na
Criador Alta Coesão
Informação
Determina quando devemos
Determina qual classe deve ser Determina que as classes
delegar a responsabilidade para
responsável devem se focar
um outro objeto
Especialista na Informação
Determina quando devemos delegar a responsabilidade
para um outro objeto
Campos
Métodos Assim em diante
computados
Professor Rogerão Araújo 11
Conceituação
Esse princípio
colocará a
Uma abordagem geral para atribuir responsabilidades é
responsabilidade na
classe
Criador
Determina qual classe deve ser responsável
É uma propriedade
É uma das mais comuns
fundamental da relação
atividades em um sistema
entre objetos de classes
orientado a objetos
particulares
Professor Rogerão Araújo 28
Questões de concursos
[CESPE 2021 SEFAZ/CE – Cargo 4] Com relação à arquitetura de
desenvolvimento de software, julgue os itens a seguir.
• Aplicando-se o padrão de projetos especialista da informação da
abordagem GRASP no desenvolvimento de software orientado a
objetos, ficará claramente definida de quem é a responsabilidade
pela criação de nova instância de uma classe.
Alta Coesão
Determina que as classes devem se focar
Baixo Acoplamento
Determina que as classes não devem depender de
objetos concretos e sim de abstrações
Coesão Acoplamento
Sobre acoplamento,
Deve-se buscar
no modelo de projeto
No entanto, a
É necessário que as
Remoção de colaboração deverá
classes de projeto
Máxima coesão acoplamento ser mantida em um
colaborem umas
desnecessário nível mínimo
com as outras
aceitável
52
Questões de concursos
[FUNCAB 2015 Sinesp – Gerente de Projetos em Tecnologia da
Informação] Esta definição se refere à característica de uma classe de
projeto bem formada, conhecida como:
• [A] isolamento.
• [B] baixa coesão.
• [C] independência.
• [D] refatoração.
• [E] baixo acoplamento.
53
Questões de concursos
[FUNCAB 2015 Sinesp – Gerente de Projetos em Tecnologia da
Informação] Esta definição se refere à característica de uma classe de
projeto bem formada, conhecida como:
• [A] isolamento.
• [B] baixa coesão.
• [C] independência.
• [D] refatoração.
• [E] baixo acoplamento.
54
Questões de concursos
[FUNCAB 2014 MDA – Analista de Sistemas] Durante o
desenvolvimento de software com decomposição funcional utilizando
modularização, o objetivo do desenvolvedor é usar rotinas com:
• [A] fraco acoplamento e baixa coesão.
• [B] forte acoplamento e baixa coesão.
• [C] moderado acoplamento e sem coesão.
• [D] forte acoplamente e alta coesão.
• [E] fraco acoplamento e alta coesão.
55
Questões de concursos
[FUNCAB 2014 MDA – Analista de Sistemas] Durante o
desenvolvimento de software com decomposição funcional utilizando
modularização, o objetivo do desenvolvedor é usar rotinas com:
• [A] fraco acoplamento e baixa coesão.
• [B] forte acoplamento e baixa coesão.
• [C] moderado acoplamento e sem coesão.
• [D] forte acoplamente e alta coesão.
• [E] fraco acoplamento e alta coesão.
56
Questões de concursos
[FCC 2018 DPE/AM – Assistente Técnico de Defensoria – Programador]
O paradigma de programação Orientada a Objetos − OO utiliza, como
um de seus componentes essenciais, a classe. Uma classe, em
conformidade com os melhores padrões da OO, (Marque CERTO ou
ERRADO o texto da letra)
• [A] deve ter alta coesão, que implica em ter um conjunto limitado de
responsabilidades, e baixo acoplamento, que implica em ter baixa
dependência de outros componentes.
57
Questões de concursos
[FCC 2018 DPE/AM – Assistente Técnico de Defensoria – Programador]
O paradigma de programação Orientada a Objetos − OO utiliza, como
um de seus componentes essenciais, a classe. Uma classe, em
conformidade com os melhores padrões da OO, (Marque CERTO ou
ERRADO o texto da letra)
• [A] deve ter alta coesão, que implica em ter um conjunto limitado de
responsabilidades, e baixo acoplamento, que implica em ter baixa
dependência de outros componentes.
• Gabarito: CERTO.
58
Questões de concursos
[FCC 2018 DPE/AM – Assistente Técnico de Defensoria – Programador]
O paradigma de programação Orientada a Objetos − OO utiliza, como
um de seus componentes essenciais, a classe. Uma classe, em
conformidade com os melhores padrões da OO, (Marque CERTO ou
ERRADO o texto da letra)
• [B] deve ser completa, portanto, quanto mais atributos os métodos
da classe tiver em comum com outros métodos, mais completa ela se
torna.
59
Questões de concursos
[FCC 2018 DPE/AM – Assistente Técnico de Defensoria – Programador]
O paradigma de programação Orientada a Objetos − OO utiliza, como
um de seus componentes essenciais, a classe. Uma classe, em
conformidade com os melhores padrões da OO, (Marque CERTO ou
ERRADO o texto da letra)
• [B] deve ser completa, portanto, quanto mais atributos os métodos
da classe tiver em comum com outros métodos, mais completa ela se
torna.
• Gabarito: ERRADO.
• Coesão
• A interface pública será considerada coesa se todos os seus recursos estiverem
relacionados ao conceito que a classe representa
60
Questões de concursos
[FCC 2018 DPE/AM – Assistente Técnico de Defensoria – Programador]
O paradigma de programação Orientada a Objetos − OO utiliza, como
um de seus componentes essenciais, a classe. Uma classe, em
conformidade com os melhores padrões da OO, (Marque CERTO ou
ERRADO o texto da letra)
• [C] deve manter o número de colaborações com outras classes, por
meio de seus objetos, o mais alto possível para facilitar os testes.
61
Questões de concursos
[FCC 2018 DPE/AM – Assistente Técnico de Defensoria – Programador]
O paradigma de programação Orientada a Objetos − OO utiliza, como
um de seus componentes essenciais, a classe. Uma classe, em
conformidade com os melhores padrões da OO, (Marque CERTO ou
ERRADO o texto da letra)
• [C] deve manter o número de colaborações com outras classes, por
meio de seus objetos, o mais alto possível para facilitar os testes.
• Gabarito: ERRADO.
• Deve-se buscar:
• Máxima coesão
• Remoção de acoplamento desnecessário
62
Questões de concursos
[FAURGS 2018 BANRISUL – Gestão de TI] Uma dada classe VideoClipe de um
software de edição de vídeo contém um conjunto de métodos para editar
videoclipe. Contanto que cada método se concentre somente em atributos
associados a videoclipe, qual característica de projeto orientado a objetos é
mantida?
• [A] Primitivismo.
• [B] Baixo acoplamento.
• [C] Coesão.
• [D] Polimorfismo.
• [E] Herança.
63
Questões de concursos
[FAURGS 2018 BANRISUL – Gestão de TI] Uma dada classe VideoClipe de um
software de edição de vídeo contém um conjunto de métodos para editar
videoclipe. Contanto que cada método se concentre somente em atributos
associados a videoclipe, qual característica de projeto orientado a objetos é
mantida?
• [A] Primitivismo.
• [B] Baixo acoplamento.
• [C] Coesão.
• [D] Polimorfismo.
• [E] Herança.
64
Questões de concursos
[FAURGS 2014 TJ/RS – Programador] Como é denominada a
característica de uma classe de projeto que tem um conjunto de
responsabilidades, pequeno e focado e que, de forma resoluta, aplica
atributos e métodos para implementar essas responsabilidades?
• [A] Baixo acoplamento.
• [B] Alto acoplamento.
• [C] Baixa coesão.
• [D] Alta coesão.
• [E] Persistência.
65
Questões de concursos
[FAURGS 2014 TJ/RS – Programador] Como é denominada a
característica de uma classe de projeto que tem um conjunto de
responsabilidades, pequeno e focado e que, de forma resoluta, aplica
atributos e métodos para implementar essas responsabilidades?
• [A] Baixo acoplamento.
• [B] Alto acoplamento.
• [C] Baixa coesão.
• [D] Alta coesão.
• [E] Persistência.
66
Questões de concursos
[CS/UFG 2014 CELG/GT/GO – Analista de Gestão – Analista de
Sistemas] Um resultado desejável de projeto de software é
• [A] alto acoplamento e alta coesão.
• [B] alto acoplamento e baixa coesão.
• [C] baixo acoplamento e alta coesão.
• [D] baixo acoplamento e baixa coesão.
• [E] alto acoplamento e moderada coesão.
67
Questões de concursos
[CS/UFG 2014 CELG/GT/GO – Analista de Gestão – Analista de
Sistemas] Um resultado desejável de projeto de software é
• [A] alto acoplamento e alta coesão.
• [B] alto acoplamento e baixa coesão.
• [C] baixo acoplamento e alta coesão.
• [D] baixo acoplamento e baixa coesão.
• [E] alto acoplamento e moderada coesão.
68
Questões de concursos
[COMPERVE 2018 UFRN – Analista de Tecnologia da Informação] Em
um sistema de controle acadêmico, as entidades professor, aluno,
instituição e disciplina são identificadas pelo nome e por um
identificador como CPF, CNPJ ou outro código, dependendo do tipo de
entidade.
70
Questões de concursos
[COMPERVE 2018 UFRN – Analista de Tecnologia da Informação] Todas
essas entidades possuem informação de endereço e, para modelá-las,
as seguintes ideias foram propostas:
• [I] modelar como uma única classe as entidades professor, aluno,
instituição e disciplina, com atributos nome e identificador.
• [II] criar uma entidade para modelar o endereço.
71
Questões de concursos
[COMPERVE 2018 UFRN – Analista de Tecnologia da Informação] Todas
essas entidades possuem informação de endereço e, para modelá-las,
as seguintes ideias foram propostas:
• [III] criar uma classe vínculo para representar a relação entre uma
pessoa e uma instituição.
• [IV] criar os identificadores CPF, CNPJ e outro código na mesma classe.
72
Questões de concursos
[COMPERVE 2018 UFRN – Analista de Tecnologia da Informação]
Considerando as boas práticas de modelagem orientada a objetos, as
ideias cuja aplicação resultaria em uma modelagem ruim são
• [A] I e III.
• [B] II e III.
• [C] I e IV.
• [D] II e IV.
73
Questões de concursos
[COMPERVE 2018 UFRN – Analista de Tecnologia da Informação]
Considerando as boas práticas de modelagem orientada a objetos, as
ideias cuja aplicação resultaria em uma modelagem ruim são
• [A] I e III.
• [B] II e III.
• [C] I e IV.
• [D] II e IV.
74
Questões de concursos
[CESPE 2017 TRT 7ª Região – Técnico Judiciário – Tecnologia da
Informação] Acerca de orientação a objetos, assinale a opção correta.
(Marque CERTO ou ERRADO o texto da letra)
• [A] Os desenvolvedores de um sistema devem ter como objetivo a
construção de classes com baixa coesão e alto acoplamento.
75
Questões de concursos
[CESPE 2017 TRT 7ª Região – Técnico Judiciário – Tecnologia da
Informação] Acerca de orientação a objetos, assinale a opção correta.
(Marque CERTO ou ERRADO o texto da letra)
• [A] Os desenvolvedores de um sistema devem ter como objetivo a
construção de classes com baixa coesão e alto acoplamento.
• Gabarito: ERRADO.
• Deve-se buscar:
• Máxima coesão
• Remoção de acoplamento desnecessário
76
Questões de concursos
[CESPE 2015 STJ – Analista Judiciário – Análise de Sistemas de
Informação] Julgue o item subsequente, acerca da linguagem de
programação Delphi e da programação orientada a objetos.
• O princípio da responsabilidade única estabelece que uma classe deva
executar apenas uma tarefa; dessa forma, caso uma classe possua
mais uma responsabilidade, deve–se considerar sua decomposição
em duas ou mais classes.
77
Questões de concursos
[CESPE 2015 STJ – Analista Judiciário – Análise de Sistemas de
Informação] Julgue o item subsequente, acerca da linguagem de
programação Delphi e da programação orientada a objetos.
• O princípio da responsabilidade única estabelece que uma classe deva
executar apenas uma tarefa; dessa forma, caso uma classe possua
mais uma responsabilidade, deve–se considerar sua decomposição
em duas ou mais classes.
• Gabarito: CERTO.
78
Questões de concursos
[CESPE 2013 PF – Cargo 3] No que se refere às linguagens de
programação, julgue o item subsecutivo.
• Coesão e acoplamento são dois critérios úteis para se analisar a
qualidade da interface pública de uma classe. A interface pública será
considerada coesa se todos os seus recursos estiverem relacionados
ao conceito que a classe representa, enquanto, no acoplamento, uma
classe é dependente de outra.
79
Questões de concursos
[CESPE 2013 PF – Cargo 3] No que se refere às linguagens de
programação, julgue o item subsecutivo.
• Coesão e acoplamento são dois critérios úteis para se analisar a
qualidade da interface pública de uma classe. A interface pública será
considerada coesa se todos os seus recursos estiverem relacionados
ao conceito que a classe representa, enquanto, no acoplamento, uma
classe é dependente de outra.
• Gabarito: CERTO.
80
Questões de concursos
[CESPE 2011 BRB – Cargo 2] A respeito de programação orientada a
objetos, julgues os itens.
• Para que a interface pública de uma classe seja considerada coesa, é
necessário que todos os recursos dessa interface estejam
relacionados ao conceito que a classe representa.
81
Questões de concursos
[CESPE 2011 BRB – Cargo 2] A respeito de programação orientada a
objetos, julgues os itens.
• Para que a interface pública de uma classe seja considerada coesa, é
necessário que todos os recursos dessa interface estejam
relacionados ao conceito que a classe representa.
• Gabarito: CERTO.
82
Controller
Controlador
Atribui a responsabilidade de lidar com os eventos do
sistema
92
Questões de concursos
[CESPE 2013 SUFRAMA – Analista de Sistemas] Com relação a padrões
de projeto e GRASP, julgue o próximo item.
• Enquanto os padrões GRASP refletem práticas mais pontuais da
aplicação de técnicas orientadas a objetos, os padrões de projeto GoF
(Gang of Four) exploram soluções mais específicas. Dessa forma, não
há, Há no GRASP, um padrão que ajude a solucionar, por exemplo, a
definição de qual classe deve ser a responsável por lidar com um
evento de determinada interface.
• Gabarito: ERRADO.
93
Questões de concursos
[CESPE 2010 INMETRO – Pesquisador – Desenvolvimento de Sistemas]
Assinale a opção correta com referência aos padrões comportamentais
e aos padrões GRASP. (Marque CERTO ou ERRADO o texto da letra)
• [D] O padrão GRASP denominado Controller é um padrão avaliativo
que dita como atribuir responsabilidades a um desenho orientado a
objeto visando obter baixo acoplamento.
94
Questões de concursos
[CESPE 2010 INMETRO – Pesquisador – Desenvolvimento de Sistemas]
Assinale a opção correta com referência aos padrões comportamentais
e aos padrões GRASP. (Marque CERTO ou ERRADO o texto da letra)
• [D] O padrão GRASP denominado Controller é um padrão avaliativo
que dita como atribuir responsabilidades a um desenho orientado a
objeto visando obter baixo acoplamento.
• Gabarito: ERRADO.
95
Referências
2
Teoria, prática e questões de
concursos
6
Conceituação
S O L I D
SRP OCP LSP ISP DIP
8
5 Princípios
S O L I D
Princípio da
Principio da Princípio da Princípio da inversão da
Princípio Aberto- dependência
Responsabilidade Substituição de Segregação da
Fechado
Única Liskov Interface
Deve-se depender
de abstrações
Deve-se ser capaz As classes As interfaces
Uma classe deve
de estender um derivadas devem devem ser
ter um, e somente
comportamento de ser substituíveis refinadas e que
um, motivo para Não de
uma classe, sem por suas classes sejam específicas
mudar implementações
modificá-lo base ao cliente
9
SRP – Single Responsiblity Principle
Classe deve ter apenas uma única Significa que cada classe deve ter
responsabilidade uma única tarefa ou funcionalidade
Ou seja, deve haver apenas uma O que torna o código mais fácil de
razão para que ela seja alterada entender, testar e manter
10
OCP – Open-Closed Principle
Princípio Aberto-Fechado
Significa que as mudanças no
As entidades de software (classes,
comportamento de uma entidade devem
módulos, etc) devem estar abertas para
ser realizadas por meio da adição de
extensão
novas funcionalidades
11
LSP – Liskov Substitution Principle
12
ISP – Interface Segregation Principle
13
DIP – Dependency Inversion Principle
14
Benefícios
15
Benefícios
Resultados em códigos
17
Benefícios
Facilita a manutenção Promove a reutilização
do código de código
18
Benefícios
Melhora a testabilidade Reduz o acoplamento
do software entre as classes
19
Benefícios
Aumenta a escalabilidade Facilita a colaboração
do software entre desenvolvedores
Um código organizado e seguindo
Um código mais organizado e modular padrões conhecidos é mais fácil de ser
é mais fácil de escalar entendido e mantido por outros
desenvolvedores
21
Questões de concursos
[IESES 2017 CREA/SC – Analista de Sistemas] Assinale a alternativa
correta:
[A] SOLID é um acróstico e, cada letra está relacionada a um princípio
para programação e design orientado a objetos de autoria de Robert
C. Martin. O Acrostico é formado pela inicial de Sistema, Objeto,
Lógica, Informação e, Disign pelas iniciais de SPR, OCP, LSP, ISP e DIP.
[B] SOLID é um acróstico e, cada letra está relacionada a um princípio
para programação e design orientado a objetos de autoria de Robert
C. Martin.
22
Questões de concursos
[IESES 2017 CREA/SC – Analista de Sistemas] Assinale a alternativa correta:
[C] SOLID é um acróstico formado pelas iniciais de SPR, OCP, LSP, ISP e DIP. É
um conjunto consistente de princípios para modelagem matemática e
computacional de sólidos tridimensionais. A modelagem sólida distinguese
das áreas relacionadas de modelagem geométrica e computação gráfica por
sua ênfase na fidelidade física.
[D] Em programação Orientada a Objetos É um conjunto consistente de
princípios para modelagem matemática e computacional de sólidos
tridimensionais. A modelagem sólida distingue-se das áreas relacionadas de
modelagem geométrica e computação gráfica por sua ênfase na fidelidade
física.
23
Questões de concursos
[IESES 2017 CREA/SC – Analista de Sistemas] Assinale a alternativa correta:
[C] SOLID é um acróstico formado pelas iniciais de SPR, OCP, LSP, ISP e DIP.
É um conjunto consistente de princípios para modelagem matemática e
computacional de sólidos tridimensionais. A modelagem sólida distinguese
das áreas relacionadas de modelagem geométrica e computação gráfica por
sua ênfase na fidelidade física.
[D] Em programação Orientada a Objetos É um conjunto consistente de
princípios para modelagem matemática e computacional de sólidos
tridimensionais. A modelagem sólida distingue-se das áreas relacionadas de
modelagem geométrica e computação gráfica por sua ênfase na fidelidade
física.
24
Questões de concursos
[IESES 2017 CEGÁS – Assistente Técnico – Programador] Há um conjunto de
princípios para programação e design orientado a objetos estabelecido por
Robert C. Martin. Identifique a alternativa que apresenta corretamente a
sigla e seus significados:
[A] SRP-Princípio da Responsabilidade Única; OCPPrincípio Aberto-Fechado;
LSP-Princípio da Substituição de Liskov; ISP-Princípio da inversão da
dependência; DIP-Princípio da Segregação da Interface.
[B] SRP-Principio da Responsabilidade Única; OCPPrincípio da Substituição de
Liskov; LSP-Princípio Aberto-Fechado; ISP-Princípio da Segregação da
Interface; DIP-Princípio da Independência de Processos.
25
Questões de concursos
[IESES 2017 CEGÁS – Assistente Técnico – Programador] Há um conjunto de
princípios para programação e design orientado a objetos estabelecido por
Robert C. Martin. Identifique a alternativa que apresenta corretamente a
sigla e seus significados:
[A] SRP-Princípio da Responsabilidade Única; OCPPrincípio Aberto-
Fechado; LSP-Princípio da Substituição de Liskov; ISP-Princípio da inversão
da dependência; DIP-Princípio da Segregação da Interface.
[B] SRP-Princípio da Responsabilidade Única; OCPPrincípio da Substituição
de Liskov; LSP-Princípio Aberto-Fechado; ISP-Princípio da Segregação da
Interface; DIP-Princípio da Independência de Processos.
26
Questões de concursos
[IESES 2017 CEGÁS – Assistente Técnico – Programador] Há um conjunto de
princípios para programação e design orientado a objetos estabelecido por
Robert C. Martin. Identifique a alternativa que apresenta corretamente a
sigla e seus significados:
[C] SRP-Princípio da Responsabilidade Única; OCPPrincípio Aberto-Fechado;
LSP-Princípio da Substituição de Liskov; ISP-Princípio da Segregação da
Interface; DIP-Princípio da inversão da dependência.
[D] SRP-Princípio da Responsabilidade Única; OCPPrincípio Aberto-Fechado;
LSP-Princípio da Substituição de Liskov; ISP-Princípio da Informação e da
Segregação da Interface; DIP-Princípio da inversão da dependência.
27
Questões de concursos
[IESES 2017 CEGÁS – Assistente Técnico – Programador] Há um conjunto de
princípios para programação e design orientado a objetos estabelecido por
Robert C. Martin. Identifique a alternativa que apresenta corretamente a
sigla e seus significados:
[C] SRP-Princípio da Responsabilidade Única; OCPPrincípio Aberto-
Fechado; LSP-Princípio da Substituição de Liskov; ISP-Princípio da
Segregação da Interface; DIP-Princípio da inversão da dependência.
[D] SRP-Princípio da Responsabilidade Única; OCPPrincípio Aberto-
Fechado; LSP-Princípio da Substituição de Liskov; ISP-Princípio da da
Informação e da Segregação da Interface; DIP-Princípio da inversão da
dependência.
28
Questões de concursos
[IESES 2017 CEGÁS – Assistente Técnico – Programador] Há um
conjunto de princípios para programação e design orientado a objetos
estabelecido por Robert C. Martin. Identifique a alternativa que
apresenta corretamente a sigla e seus significados:
29
Questões de concursos
[FEPESE 2023 Prefeitura de Balneário Camboriú/SC – Especialista em
Inteligência de Dados] São princípios SOLID válidos:
[1] Princípio de substituição de Liskov.
[2] Princípio de responsabilidade compartilhada.
[3] Princípio de inversão de dependência.
[4] Princípio de agregação da interface.
30
Questões de concursos
[FEPESE 2023 Prefeitura de Balneário Camboriú/SC – Especialista em
Inteligência de Dados] São princípios SOLID válidos:
[1] Princípio de substituição de Liskov.
[2] Princípio de responsabilidade compartilhada.
[3] Princípio de inversão de dependência.
[4] Princípio de agregação da interface.
31
Questões de concursos
[FEPESE 2023 Prefeitura de Balneário Camboriú/SC – Especialista em
Inteligência de Dados] Assinale a alternativa que indica todas as
afirmativas corretas.
[A] São corretas apenas as afirmativas 1 e 3.
[B] São corretas apenas as afirmativas 1, 2 e 3.
[C] São corretas apenas as afirmativas 1, 2 e 4.
[D] São corretas apenas as afirmativas 1, 3 e 4.
[E] São corretas as afirmativas 1, 2, 3 e 4.
32
Questões de concursos
[FEPESE 2023 Prefeitura de Balneário Camboriú/SC – Especialista em
Inteligência de Dados] Assinale a alternativa que indica todas as
afirmativas corretas.
[A] São corretas apenas as afirmativas 1 e 3.
[B] São corretas apenas as afirmativas 1, 2 e 3.
[C] São corretas apenas as afirmativas 1, 2 e 4.
[D] São corretas apenas as afirmativas 1, 3 e 4.
[E] São corretas as afirmativas 1, 2, 3 e 4.
33
Questões de concursos
[Instituto AOCP 2018 PRODEB – Especialista de TIC – Construção de
Software] Em relação aos padrões de projeto de software e princípios
arquiteturais, em programação orientada a objetos, existe um princípio
denominado de SOLID. Ele, por sua vez, é composto por 05 princípios
de acordo com as suas iniciais, sendo eles:
[A] S (Single responsibility principle) – O (Openclosed principle) – L
(Liskov substitution principle) – I (Interface segregation principle) e D
(Dependency inversion principle).
[B] S (Solid principle) – O (Open principle) – L (Library principle) – I
(Integration principle) – D (Double principle).
34
Questões de concursos
[Instituto AOCP 2018 PRODEB – Especialista de TIC – Construção de
Software] Em relação aos padrões de projeto de software e princípios
arquiteturais, em programação orientada a objetos, existe um princípio
denominado de SOLID. Ele, por sua vez, é composto por 05 princípios
de acordo com as suas iniciais, sendo eles:
[A] S (Single responsibility principle) – O (Openclosed principle) – L
(Liskov substitution principle) – I (Interface segregation principle) e D
(Dependency inversion principle).
[B] S (Solid principle) – O (Open principle) – L (Library principle) – I
(Integration principle) – D (Double principle).
35
Questões de concursos
[Instituto AOCP 2018 PRODEB – Especialista de TIC – Construção de
Software] Em relação aos padrões de projeto de software e princípios
arquiteturais, em programação orientada a objetos, existe um princípio
denominado de SOLID. Ele, por sua vez, é composto por 05 princípios de
acordo com as suas iniciais, sendo eles:
[C] S (Security closed principle) – O (Open extend principle) – L (Liskov
include principle) – I (Interface duplication principle) – D (Duplicate structure
principle).
[D] S (Single closed principle) – O (Open-closed principle) – L (Library
exclusive principle) – I (Integration case principle) – D (Dependency inversion
principle).
36
Questões de concursos
[Instituto AOCP 2018 PRODEB – Especialista de TIC – Construção de
Software] Em relação aos padrões de projeto de software e princípios
arquiteturais, em programação orientada a objetos, existe um princípio
denominado de SOLID. Ele, por sua vez, é composto por 05 princípios de
acordo com as suas iniciais, sendo eles:
[C] S (Security closed principle) – O (Open extend principle) – L (Liskov
include principle) – I (Interface duplication principle) – D (Duplicate structure
principle).
[D] S (Single closed principle) – O (Open-closed principle) – L (Library
exclusive principle) – I (Integration case principle) – D (Dependency
inversion principle).
37
Questões de concursos
[Instituto AOCP 2018 PRODEB – Especialista de TIC – Construção de
Software] Em relação aos padrões de projeto de software e princípios
arquiteturais, em programação orientada a objetos, existe um princípio
denominado de SOLID. Ele, por sua vez, é composto por 05 princípios
de acordo com as suas iniciais, sendo eles:
[E] S (Security basic principle) – O (Open extern principle) – L (Liskov
include principle) – I (Interface duplication principle) – D (Duplicate
segregation principle).
38
Questões de concursos
[CESPE/CEBRASPE 2022 BANRISUL – Quality Assurance (QA) e Analistas
de Teste] Julgue o item a seguir, com relação aos conceitos de SOLID.
Os princípios de programação orientada a objetos que correspondem
aos princípios SOLID são: criador (creator), especialista na informação
(information expert), controlador (controller), polimorfismo
(polymorphism), fabricação pura (pure fabrication).
39
Questões de concursos
[CESPE/CEBRASPE 2022 BANRISUL – Quality Assurance (QA) e Analistas
de Teste] Julgue o item a seguir, com relação aos conceitos de SOLID.
Os princípios de programação orientada a objetos que correspondem
aos princípios SOLID padrões GRASP são: criador (creator), especialista
na informação (information expert), controlador (controller),
polimorfismo (polymorphism), fabricação pura (pure fabrication).
Gabarito: ERRADO.
40
SRP
Single Responsibility Principle
Classe deve ter apenas uma única Significa que cada classe deve ter uma
responsabilidade única tarefa ou funcionalidade
Ou seja, deve haver apenas uma razão O que torna o código mais fácil de
para que ela seja alterada entender, testar e manter
42
Conceituação
Uma classe deve ter um, e somente um, motivo para mudar
Deve-se evitar a
Uma classe deve
criação de God Class
Possuir apenas uma
Ser especializada responsabilidade dentro do Classe Deus
software
43
Conceituação
Estabelece que uma classe deve ter apenas uma
única responsabilidade
44
Objetivos
45
Questões de concursos
[FCC 2017 TRE/PR – Técnico Judiciário – Programação de Sistemas] Os
princípios SOLID reúnem cinco boas práticas para projetos Orientados a
Objetos-OO. O princípio S, que se refere ao Single Responsability
Principle-SRP ou Princípio de Responsabilidade Única, indica que uma
classe deve ter uma e, apenas uma, razão para mudar.
46
Questões de concursos
[FCC 2017 TRE/PR – Técnico Judiciário – Programação de Sistemas]
Considere a classe Java abaixo.
public class UrnaEleitoral {
public void AdicionarCandidato(String nome, int numero, int partido) { }
public decimal CalcularTotalVotosCandidato() { }
public void CadastrarPartidos() { }
public void CadastrarEleitores() { }
public void CadastrarMesarios() { }
}
47
Questões de concursos
[FCC 2017 TRE/PR – Técnico Judiciário – Programação de Sistemas] Com
base no princípio SRP e nas boas práticas para projetos OO, é correto
afirmar:
[A] O SRP visa aumentar o acoplamento entre classes e separar
responsabilidades como forma de melhorar o código da aplicação OO
sendo desenvolvida.
[B] A classe UrnaEleitoral tem acoplamento baixo, ou seja, tem um
número pequeno de dependências e, portanto, fica mais sujeita a
mudanças em decorrência de alterações em outras classes.
48
Questões de concursos
[FCC 2017 TRE/PR – Técnico Judiciário – Programação de Sistemas] Com
base no princípio SRP e nas boas práticas para projetos OO, é correto
afirmar:
[C] Uma classe com mais de um motivo para mudar possui mais de
uma responsabilidade e apresentando dificuldade de manutenção,
mas, por outro lado, tem maior facilidade de reúso e de coesão.
[D] A classe UrnaEleitoral apresenta uma quebra do SRP, uma vez que
possui responsabilidades que deveriam ser de componentes distintos
do software.
49
Questões de concursos
[FCC 2017 TRE/PR – Técnico Judiciário – Programação de Sistemas] Com
base no princípio SRP e nas boas práticas para projetos OO, é correto
afirmar:
[E] Em um projeto com várias classes seguindo o padrão da classe
UrnaEleitoral fica mais fácil manter a coesão em um nível mais alto ou
em nível de componentes, pois o software fica com uma divisão clara
de camadas.
50
Questões de concursos
[FCC 2017 TRE/PR – Técnico Judiciário – Programação de Sistemas] Com
base no princípio SRP e nas boas práticas para projetos OO, é correto
afirmar:
[D] A classe UrnaEleitoral apresenta uma quebra do SRP, uma vez que
possui responsabilidades que deveriam ser de componentes distintos
do software.
51
OCP
Open-Closed Principle
Princípio Aberto-Fechado
Significa que as mudanças no comportamento
As entidades de software (classes, módulos,
de uma entidade devem ser realizadas por meio
etc) devem estar abertas para extensão
da adição de novas funcionalidades
53
Conceituação
Quando novos
Objetos ou entidades devem comportamentos e recursos
estar abertos para extensão precisam ser adicionados no
software
54
Objetivos
Estruturar o código de forma a permitir a inclusão de novas
funcionalidades sem que haja a necessidade de alterar o código existente
Isso pode ser feito, por exemplo, através do uso de interfaces, classes abstratas
e padrões de design que permitam a adição de novas funcionalidades
55
Objetivos
Evitar a criação de código duplicado ou espalhado por várias partes do
sistema
Reutilização Modularidade
56
LSP
Liskov Substitution Principle
58
Conceituação
Se para cada objeto o1 do tipo S há Se S é um
um objeto o2 do tipo T de forma que subtipo de T
Então os objetos do tipo T,
O comportamento de P é em um programa, podem ser
Para todos os programas P inalterado substituídos pelos objetos de
tipo S
59
Objetivos
Garantir que uma classe derivada possa ser usada como uma substituição da
classe base
Uma classe derivada deve ser substituível pela classe base em todas as
situações em que a classe base é usada
60
Objetivos
61
Exemplo
class A { function imprime (A $objeto) {
public function getNome() { return $objeto->getNome();
echo 'Meu nome é A';
}
}
} // Meu nome é A:
class B extends A { imprimeNome($objeto1);
public function getNome() { // Meu nome é B:
echo 'Meu nome é B'; imprimeNome($objeto2);
}
}
$objeto1 = new A;
$objeto2 = new B;
62
Questões de concursos
[Instituto AOCP 2018 PRODEB – Especialista de TIC – Construção de
Software] Com base no modelo SOLID utilizado como referência para
padrões de projeto e princípios arquiteturais, um dos seus princípios
denominados de LSP (Liskov substitution principle) diz respeito ao fato
de que
[A] uma classe deve ter apenas uma razão para mudar, sendo coesa.
[B] os objetos devem ser substituíveis com instâncias de seus tipos
base, sem prejudicar o funcionamento do software.
[C] todo o processo de desenvolvimento de software deve ser baseado
em abstrações, já que elas pouco mudam.
64
Questões de concursos
[Instituto AOCP 2018 PRODEB – Especialista de TIC – Construção de
Software] Com base no modelo SOLID utilizado como referência para
padrões de projeto e princípios arquiteturais, um dos seus princípios
denominados de LSP (Liskov substitution principle) diz respeito ao fato de
que
[A] uma classe deve ter apenas uma razão para mudar, sendo coesa.
SRP - Princípio da Responsabilidade Única
[B] os objetos devem ser substituíveis com instâncias de seus tipos base,
sem prejudicar o funcionamento do software.
[C] todo o processo de desenvolvimento de software deve ser baseado em
abstrações, já que elas pouco mudam.
DIP - Princípio da Inversão de Dependência
65
Questões de concursos
[Instituto AOCP 2018 PRODEB – Especialista de TIC – Construção de
Software] Com base no modelo SOLID utilizado como referência para
padrões de projeto e princípios arquiteturais, um dos seus princípios
denominados de LSP (Liskov substitution principle) diz respeito ao fato
de que
[D] deve-se utilizar o conceito de herança o máximo possível,
estendendo para todo e qualquer atributo que possua alguma
semelhança.
[E] os módulos devem ser enxutos tendo poucos comportamentos.
66
Questões de concursos
[Instituto AOCP 2018 PRODEB – Especialista de TIC – Construção de
Software] Com base no modelo SOLID utilizado como referência para
padrões de projeto e princípios arquiteturais, um dos seus princípios
denominados de LSP (Liskov substitution principle) diz respeito ao fato
de que
[D] deve-se utilizar o conceito de herança o máximo possível,
estendendo para todo e qualquer atributo que possua alguma
semelhança.
OCP - Open-Closed Principle
[E] os módulos devem ser enxutos tendo poucos comportamentos.
67
Questões de concursos
[IFB 2017 IFB – Professor – Informática] Avalie as afirmativas abaixo
sobre projeto de Software. (Marque CERTO ou ERRADO o texto do
item)
[IV] O princípio da substituição de Liskov sugere que um componente
que usa uma classe base deve funcionar apropriadamente, caso esta
seja substituída por sua superclasse.
68
Questões de concursos
[IFB 2017 IFB – Professor – Informática] Avalie as afirmativas abaixo
sobre projeto de Software. (Marque CERTO ou ERRADO o texto do
item)
[IV] O princípio da substituição de Liskov sugere que um componente
que usa uma classe base deve funcionar apropriadamente, caso esta
seja substituída por sua superclasse.
Gabarito: ERRADO.
Uma classe derivada deve ser substituível por sua classe base
Sem afetar a corretude do programa
69
ISP
Interface Segregation Principle
71
Conceituação
Esse princípio
basicamente diz que é
Uma classe
melhor criar interfaces
mais específicas
73
Objetivos
75
Questões de concursos
[CESPE/CEBRASPE 2022 BANRISUL – Desenvolvimento de Sistemas]
Acerca dos padrões de projeto em arquitetura de software, julgue o
próximo item.
O princípio da segregação de interface dos padrões SOLID não define
que uma classe deve possuir somente uma operação para ser
executada.
Gabarito: ERRADO.
76
DIP
Dependency Inversion Principle
78
Conceituação
79
Objetivos
Promover a modularidade e a reutilização do código
Invertendo a direção das dependências entre as classes
O DIP estabelece que as classes de alto nível não devem depender das classes de baixo
nível,
80
Objetivos
82
Questões de concursos
[IFB 2017 IFB – Professor – Informática] Avalie as afirmativas abaixo
sobre projeto de Software. (Marque CERTO ou ERRADO o texto do
item)
[V] O princípio da inversão de dependência sugere que um
componente não deve depender de classes concretas mas sim de
abstrações, como Interfaces.
Gabarito: CERTO.
83
Questões de concursos
[FUNDEP (Gestão de Concursos) 2022 UFJF – Técnico de Tecnologia da
Informação – Edital nº 70] No contexto dos princípios SOLID, analise as
afirmativas a seguir.
[I] O princípio de inversão de dependência estabelece que uma classe deve
depender de implementações abstratas e não concretas, sempre que
possível.
[II] O princípio aberto / fechado estabelece que uma classe deve estar
fechada para extensões, mas aberta para modificações.
[III] O princípio da responsabilidade única é uma aplicação da propriedade
de coesão, por propor que toda classe deve ter uma única finalidade.
84
Questões de concursos
[FUNDEP (Gestão de Concursos) 2022 UFJF – Técnico de Tecnologia da
Informação – Edital nº 70] No contexto dos princípios SOLID, analise as
afirmativas a seguir.
[I] O princípio de inversão de dependência estabelece que uma classe deve
depender de implementações abstratas e não concretas, sempre que
possível.
[II] O princípio aberto / fechado estabelece que uma classe deve estar
fechada para extensões, mas aberta para modificações.
É o inverso
[III] O princípio da responsabilidade única é uma aplicação da propriedade
de coesão, por propor que toda classe deve ter uma única finalidade.
85
Questões de concursos
[FUNDEP (Gestão de Concursos) 2022 UFJF – Técnico de Tecnologia da
Informação – Edital nº 70] Está(ão) correta(s) a(s) afirmativa(s)
[A] I, apenas.
[B] II, apenas.
[C] III, apenas.
[D] I e III, apenas.
[E] II e III, apenas.
86
Questões de concursos
[FUNDEP (Gestão de Concursos) 2022 UFJF – Técnico de Tecnologia da
Informação – Edital nº 70] Está(ão) correta(s) a(s) afirmativa(s)
[A] I, apenas.
[B] II, apenas.
[C] III, apenas.
[D] I e III, apenas.
[E] II e III, apenas.
87
Questões de concursos
[CS/UFG 2018 Câmara de Goiânia/GO – Assessor Técnico Legislativo –
Analista de Sistemas] Sejam as classes A e B tais que o relacionamento
entre elas é dado pelo fato de A usar (referenciar) a classe B. Dessa
forma, qual das refatorações a seguir implementa o princípio da
inversão de dependência?
[A] Cria interface para serviços oferecidos por B; a classe A passa a usar
a interface criada; a classe B passa a implementar a interface criada; a
classe A não usa mais a classe B.
[B] Cria interface para serviços oferecidos por A; a classe A passa a
implementar a interface criada; a classe B passa a usar a interface
criada; a classe A não usa mais a classe B.
88
Questões de concursos
[CS/UFG 2018 Câmara de Goiânia/GO – Assessor Técnico Legislativo –
Analista de Sistemas] Sejam as classes A e B tais que o relacionamento entre
elas é dado pelo fato de A usar (referenciar) a classe B. Dessa forma, qual das
refatorações a seguir implementa o princípio da inversão de dependência?
[C] Cria um relacionamento de herança entre as classes A e B (A torna-se
uma especialização de B); métodos da classe B empregados pela classe A são
migrados para a classe A; a classe A não usa mais a classe B.
[D] Cria uma referência para a classe B na classe A; cria um método para
receber uma instância de B (injeção de dependência) e guarda-a na
referência criada; a classe A não usa mais a classe B.
89
Questões de concursos
[CS/UFG 2018 Câmara de Goiânia/GO – Assessor Técnico Legislativo –
Analista de Sistemas] Sejam as classes A e B tais que o relacionamento
entre elas é dado pelo fato de A usar (referenciar) a classe B. Dessa
forma, qual das refatorações a seguir implementa o princípio da
inversão de dependência?
[A] Cria interface para serviços oferecidos por B; a classe A passa a
usar a interface criada; a classe B passa a implementar a interface
criada; a classe A não usa mais a classe B.
90
Referências
CLEAN CODE
Introdução
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Clean Code
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• O clean code orienta para quais são as melhores práticas e como realmente escre-
ver código;
Code Review: processo em que outros analistas fazem a revisão do código escrito por
outro analista. Um código bom gera poucas dúvidas nesse processo, um código ruim gera
diversas dificuldades para os analistas nesse processo de avaliarem sua estrutura.
10m
• Deve ser elegante – o código limpo deve ser agradável de ler; → apesar do termo ser
abstrato, é possível depreender que o autor se refere à organização, nomenclatura de
variáveis e a forma de estruturação do código.
• O código limpo é focado – cada função, cada classe, cada módulo expõe uma atitude
obstinada que permanece inteiramente sem distrações e sem poluir pelos detalhes ao
redor; → as funções são pequenas e cada parte exerce um pequeno papel dentro do
todo que compõe o sistema.
• O código limpo é cuidado – Alguém reservou um tempo para mantê-lo simples e orde-
nado. Foi prestada a devida atenção aos detalhes; → é possível perceber que sistemas
feitos de modo apressados apresentam repetições de códigos, conceitos espalhados,
diversas funções realizando códigos muito semelhantes dentre outros elementos que
demonstrem a falta de organização.
• Executa todos os testes; → é essencial que o código seja testado.
• Não contém duplicação; → analisar trechos de código duplicados, pode ser realizado
por meio de ferramentas como o sonar, que analisa blocos de códigos e sugere uma
possível alteração.
• Minimiza o número de entidades, como classes, métodos, funções e similares; → um
projeto com muitas classes e funções, geralmente, é considerado mal feito, pois as
abstrações não foram utilizadas de maneira adequada.
15m
Nomes Significativos
• Use nomes que revelam uma intenção; → esses nomes podem se referir a classes,
métodos, funções e variáveis. Os nomes devem ser significativos e remeter a algo
específico. Mesmo que o código seja executável, dificulta o entendimento da equipe.
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Clean Code
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Escolher nomes bons gasta tempo, mas economiza mais do que gasta; → devem
revelar a sua intenção. Ex.: “classe cliente” em vez de “classe A”.
• O nome de uma variável, função ou classe deve responder a todas as grandes
perguntas;
• Deve dizer por que existe, o que faz e como é usado;
• Se um nome exigir um comentário, ele não revela sua intenção;
Ex.:
int d; // tempo decorrido em dias.
• Devemos escolher um nome que especifique o que está sendo medido e a unidade
dessa medida;
• Um nome melhor seria:
int tempoDecorridoEmDias;
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Clean Code
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Funções
O autor aparenta também ser contra a ideia de blocos de código, recomendando que as
funções sejam extraídas para funções separadas.
25m
• Isso não apenas mantém a função pequena mas também agrega valor ao documental,
porque a função chamada dentro do bloco pode ter um nome bem descritivo;
Argumentos de Função
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Clean Code
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Reduzir o número de argumentos criando objetos a partir deles pode parecer trapaça,
mas não é;
• Agora, quando se diz para reduzir o tamanho de uma função, você definitivamente
pensa em como reduzir o try-catch, pois ele já torna seu código muito maior;
• A resposta é criar uma função contendo apenas as instruções try-catchfinally;
• E separe os corpos do bloco try / catch / finally em funções separadas;
Ex.: Sempre que tiver um try catch, é recomendado criar uma função que terá unicamente
o try catch.
Apagar todas as páginas e referência, passa a página, chama o método delete page que
tem o bloco try catch. Depois será apagada a página, chamando outro método e por fim apa-
gará a chave e o método de log, que foi extraído para haver o mínimo possível de repetição
de código. → o tratamento de erros ficou completamente separado em uma função só que
tornou o método muito mais claro. Segundo o autor, isso tornaria a lógica mais clara.
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Clean Code
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (2016/CESPE/TRE-PI/ANALISTA JUDICIÁRIO/ANÁLISE DE SISTEMAS) Acerca do
Clean Code, assinale a opção correta.
a. A segurança do código é vital, por isso os programadores devem deixar o código o
mais obscuro possível.
b. Se um valor deve ser utilizado em múltiplos locais do código, é imperativo atribuir
esse valor a uma variável ou a uma constante com nome amigável.
c. As classes devem possuir nome amigável oriundo de verbos, escolhidos no infinitivo,
e não no gerúndio.
d. Para customizar o código, deve-se utilizar o mesmo termo para duas diferentes ideias.
e. Os nomes das variáveis devem ser simplificados, de forma a não criar códigos gordos
(fat codes) – por exemplo, o uso de x para o nome de uma variável é mais apropriado
que MediadosAlunosAprovados.
COMENTÁRIO
Obs.: A respostas devem seguir de acordo com a opinião do autor do termo Clean Code.
a) A segurança do código é vital, por isso os programadores devem deixar o código o mais
claro possível.
30m
b) Se um valor deve ser utilizado em múltiplos locais do código, é imperativo atribuir esse
valor a uma variável ou a uma constante com nome amigável.
c) As classes devem possuir nome amigável oriundo de substantivos.
d) Para customizar o código, não se deve utilizar o mesmo termo para duas diferen-
tes ideias.
ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Clean Code
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
e) Os nomes das variáveis devem ser descritivos – por exemplo, o uso de MediadosAlu-
nosAprovados para o nome de uma variável é mais apropriado que x.
COMENTÁRIO
a) Os nomes utilizados devem ser pronunciáveis e devem ter sentido conhecido.
b) Os nomes de métodos devem ser verbos no infinitivo e os de classes devem ser
substantivos.
c) Os nomes de funções e de métodos devem ser descritivos.
d) Cada função deve ter, no máximo, três parâmetros.
e) O comando return deve ser evitado, ao passo que continue e break devem ser prioriza-
dos, diferente do go to.
GABARITO
1. b
2. a
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Clean code II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
CLEAN CODE II
Comentários
• Se você está escrevendo comentários para provar seu argumento, está come-
tendo um erro;
• Idealmente, os comentários não são obrigatórios;
• Se seu código precisar ser comentado, você está fazendo algo errado;
• Nosso código deve explicar tudo;
• As linguagens de programação modernas são muito fluentes, através das quais pode-
mos explicar facilmente nosso ponto; → atualmente não há as limitações de antiga-
mente, o que permite que o nome seja descritivo e autoexplicativo.
• A nomeação correta pode remover a necessidade de comentários;
• Comentarios legais não são considerados aqui (declarações de direitos autorais e
licenças);
Formatação
• Tente escrever uma classe com no máximo 500 linhas. Classes menores são mais
fáceis de entender;
ANOTAÇÕES
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Clean code II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O objeto nasceu da structure do ser, sendo uma forma primitiva do objeto, mas com o
passar do tempo passaram a ter diferenças importantes.
Ex.: um objeto “cliente” terá uma série de atributos, como nome. Um método chamado
setnome ou getnome será usado para recuperar ou alterar o nome do cliente.
Ex.: estrutura de dados: pilha com uma lista de dados. É possível empilhar ou desempi-
lhar nessa pilha.
10m
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Clean code II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Clean code II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Clean code II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Agora podemos facilmente adicionar novas formas, isto é, estruturas de dados em com-
paração com o caso anterior.
A classe implementa uma interface chamada shape. Código mais orientado ao objeto.
O ponto topleft e o lado são privados, e não públicos, exigindo um método get cept.
É mais fácil adicionar uma forma, pois não há uma classe centralizada como geometry
que precise se toda alterada.
15m
Se tivermos que adicionar a função perimeter() em apenas um Shape, somos forçados a
implementar essa função em todas as classes Shapes, pois a classe Shape é uma interface
que contém as funções area() e perimeter(); → lado negativo.
As estruturas de dados facilitam a adição de novas funções sem alterar as estruturas de
dados existentes.
O código OO (usando objetos) facilita a adição de novas classes sem alterar as funções
existentes.
O analista deve analisar qual será a abordagem mais vantajosa para seu trabalho.
Ex.: sistema de processamento em lote: a partir de uma entrada, realiza um processa-
mento e gera uma saída, contando com uma série de funções. A abordagem orientado ao
objeto não seria a mais útil, sendo a procedural mais adequada para esse tipo de sistema.
O código procedural (usando estruturas de dados) dificulta a adição de novas estruturas
de dados, porque todas as funções devem ser alteradas;
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Clean code II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O código OO dificulta a adição de novas funções, pois todas as classes devem ser
alteradas.
Portanto, as coisas difíceis para OO são fáceis para procedural, e as coisas difíceis para
procedural são fáceis para OO.
Em qualquer sistema complexo, haverá momentos em que queremos adicionar novos tipos
de dados em vez de novas funções. Para esses casos, objetos e OO são mais apropriados.
Por outro lado, também haverá momentos em que desejaremos adicionar novas funções
em oposição aos tipos de dados. Nesse caso, o código procedural e as estruturas de dados
serão mais apropriadas.
Programadores maduros sabem que a ideia de que tudo é um objeto é um mito. Às
vezes, você realmente fazer deseja estruturas de dados simples com os procedimentos ope-
racionais sobre eles. Dessa forma, deve-se pensar cuidadosamente no que implementar,
pensando também na perspectiva futura de que será fácil atualizar.
Considerando o exemplo acima, como qualquer nova forma pode ser adicionada no
futuro, a forma escolhida seria a abordagem OO.
20m
Tratamento de Erros
• O tratamento de erros deve ser planejado com cuidado por todos os programadores;
• Quando coisas erradas acontecem, deve haver um fluxo correto para tratar;
• Deve-se dar preferência ao lançamento de uma exceção do que tratá-la apenas para
ocultar o erro;
• Crie mensagens com informações sobre o erro;
• Mencione o que falhou. Onde foi esse fracasso? Se possível, mencione por que falhou;
• Examine regras de negócios separadas para erros e tratamento de erros;
• Evite retornar um NULL nos métodos, de preferência para retornar um objeto vazio;
• Evite passar NULL para os métodos; isso pode gerar NullPointerExceptions;
DIRETO DO CONCURSO
1. (2015/CESPE/STJ/ANALISTA JUDICIÁRIO/ANÁLISE DE SISTEMAS DE INFORMA-
ÇÃO) Julgue o próximo item, referente a criptografia, clean code e refatoração.
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Clean code II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
No contexto de clean code, as funções devem ter tamanho reduzido.
COMENTÁRIO
Os atuais ambientes de programação permitem que um único arquivo de código-fonte seja
desenvolvido em diferentes linguagens, embora o ideal seja que um código-fonte contenha
apenas uma linguagem.
COMENTÁRIO
De acordo com as diretivas do Clean Code, o número de argumentos de uma função não
deve ser igual ou superior a três, devido a sua influência no entendimento da função.
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Clean code II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
GABARITO
1. C
2. c
3. C
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Web Services
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
WEB SERVICES
Referências
A referência bibliográfica utilizada nessa aula será W3C – Web Services Architecture.
Link:
https://www.w3ºrg/TR/2004/NOTE-ws-arch-20040211/
Introdução
• Os Web Services fornecem um meio padrão de interoperar entre diferentes aplicativos
de software, executando em uma variedade de plataformas e/ou estruturas.
Obs.: Até antes de se ter o Web Services, existiam meios para interoperar diferentes apli-
cativos, mas eram soluções acopladas à tecnologia, logo tinha-se que programar em
Java, CIC, C++, para que fosse possível a comunicação de duas aplicações distin-
tas. Contudo, surgiu a necessidade de comunicar dois sistemas diferentes, sendo
que cada um estava executando uma linguagem e uma outra tecnologia, foi nessa
necessidade que o Web Services nasceu.
ANOTAÇÕES
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: O web service descreve como será a comunicação de dois serviços distintos.
Obs.: A web service anda em paralelo com a web, sendo esta menos estruturada, pois tem
o objetivo dar informação a serem consumidas por humanos.
Agentes e Serviços
• Um Web Service é uma noção abstrata que deve ser implementada por um
agente concreto;
• O agente é o software ou hardware concreto que envia e recebe mensagens, enquanto o
serviço é o recurso caracterizado pelo conjunto abstrato de funcionalidades fornecidas;
• Para ilustrar essa distinção, pode-se implementar um Web Service específico usando
um agente (talvez escrito em uma linguagem de programação) e posteriormente um
agente diferente (talvez escrito em uma linguagem de programação diferente) com a
mesma funcionalidade.
Ex.: Uma abertura de conta foi escrita em uma certa linguagem (papel de agente), depois
transferiu para outro agente mantendo o mesmo protocolo. Nesse caso, o outro lado que está
se comunicando com esse Web Service pouco se importa com qual é a tecnologia de imple-
mentação, importando apenas se o protocolo é o mesmo.
10m
ANOTAÇÕES
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Embora o agente possa ter sido alterado, o Web Service permanece o mesmo.
Solicitantes e Provedores
• O objetivo de um Web Service é fornecer algumas funcionalidades em nome de seu
proprietário – uma pessoa ou organização, como uma empresa ou um indivíduo;
• A entidade provedora é a pessoa ou organização que fornece um agente apropriado
para implementar um serviço específico;
• Uma entidade solicitante é uma pessoa ou organização que deseja fazer uso do Web
Service da entidade prestadora. Ele usará um agente solicitante para trocar mensa-
gens com o agente da entidade prestadora;
• Na maioria dos casos, o agente solicitante é quem inicia a troca de mensagens,
embora nem sempre;
• Para que essa troca de mensagens seja bem-sucedida, a entidade solicitante e a enti-
dade fornecedora devem primeiro concordar com a semântica e a mecânica da
troca de mensagens;
15m
ANOTAÇÕES
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Descrição do Serviço
• A mecânica da troca de mensagens está documentada em uma descrição de Web Ser-
vice (WSD);
• O WSD é uma especificação processável por máquina da interface do Web Service,
escrita em WSDL;
• Ele define os formatos de mensagem, tipos de dados, protocolos de transporte e for-
matos de serialização de transporte que devem ser usados entre o agente solicitante
e o agente provedor;
• Ele também especifica um ou mais locais de rede nos quais um agente provedor pode
ser chamado e pode fornecer algumas informações sobre o padrão de troca de men-
sagens esperado;
• Em essência, a descrição do serviço representa um acordo governando a mecânica de
interação com esse serviço;
ANOTAÇÕES
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Semântica
• A semântica de um Web Service é a expectativa compartilhada sobre o comporta-
mento do serviço, em particular em resposta às mensagens enviadas a ele;
• É o "contrato" entre a entidade solicitante e a entidade prestadora em relação ao obje-
tivo e às consequências da interação;
• Embora este contrato represente o acordo geral entre a entidade solicitante e a enti-
dade prestadora sobre como e por que seus respectivos agentes irão interagir, ele não
é necessariamente escrito ou negociado explicitamente;
• Pode ser explícita ou implícita, oral ou escrita, processável por máquina ou orientado
a um humano, e pode ser um acordo legal ou um informal (não legal) acordo;
20m
• Enquanto a descrição do serviço representa um contrato que rege a mecânica da
interação com um serviço específico, a semântica representa um contrato que rege o
significado e o objetivo dessa interação.
Obs.: o descritor (descrição do serviço) será regido por máquinas, agora a semântica será
fora das questões técnicas.
ANOTAÇÕES
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• A linha divisória entre esses dois não é necessariamente rígida. À medida que são
usadas linguagens semanticamente mais ricas para descrever a mecânica da intera-
ção, mais informações essenciais podem migrar da semântica informal para a descri-
ção do serviço;
• À medida que essa migração ocorre, mais do trabalho necessário para obter uma inte-
ração bem-sucedida pode ser automatizado.
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (CESPE/SLU-DF/ANALISTA DE GESTÃO DE RESÍDUOS SÓLIDOS/INFORMÁTI-
CA/2019) Acerca de arquitetura de software, julgue o item a seguir. Um Web Service
pode assumir o papel de provedor de serviço e de consumidor de serviço.
25m
COMENTÁRIO
Definição formal. Veja:
Solicitantes e Provedores
• O objetivo de um Web Service é fornecer algumas funcionalidades em nome de seu pro-
prietário – uma pessoa ou organização, como uma empresa ou um indivíduo;
• A entidade provedora é a pessoa ou organização que fornece um agente apropriado para
implementar um serviço específico;
• Uma entidade solicitante é uma pessoa ou organização que deseja fazer uso do Web
Service da entidade prestadora. Ele usará um agente solicitante para trocar mensagens
com o agente da entidade prestadora.
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
d. portlet para que cada software possa converter os dados dos contribuintes para um
formato XML padrão e validá-los com base na mesma lógica centralizada.
e. web service para validar e incluir contribuintes, de forma que os demais softwares
possam simplesmente consumir esse serviço de maneira adequada.
COMENTÁRIO
a. Não suporta múltiplas linguagens.
b. Não é uma ideia boa.
c. RESTful não utiliza SOAP, e não mantém o estado da chamada de serviço.
d. O portlet são pequenos widgets e possuem sistemas distintos, contudo nem todo siste-
ma tem uma interface gráfica.
GABARITO
1. C
2. e
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
WEB SERVICES II
SISTEMAS DISTRIBUÍDOS
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Falha parcial: considere que é necessário chamar vários web services, mas algum
falha. Nesse caso, será necessário avaliar qual o melhor procedimento para solucionar
o problema.
• Sistemas de objetos distribuídos são sistemas nos quais a semântica da inicialização
do objeto e chamada de método são expostos a sistemas remotos, através de uns
mecanismos proprietários ou padronizados para brokers de solicitações para além das
fronteiras do sistema.
• Sistemas de objetos distribuídos tipicamente são caracterizados por objetos que
mantêm um estado interno complexo necessário para suportar seus métodos, uma
interação refinada entre o objeto e o programa que o utiliza, e um foco em um sistema
de tipo de implementação compartilhado e hierarquia de interfaces entre o objeto e o
programa que o usa.
Obs.: Em suma, tem-se um sistema que é preparado para trabalhar de forma distribuída.
Por exemplo, suponha que existe um sistema que possui vários módulos que se
comunicam e fazem abertura de contas. Para transformar isso em um sistema no
web service, bastaria transformar em módulos e colocar cada um em um web ser-
vice diferente? Não, pois a forma como um módulo se comunicava com o outro era
muito intensa e será necessário mudar a lógica do sistema para que ele se torne um
sistema de objeto distribuído. Portanto, quando se altera um sistema de execução da
máquina para um sistema de objeto distribuído, isso terá implicações arquitetônicas,
principalmente no sistema de comunicação entre os módulos.
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• A World Wide Web opera como um sistema de informações em rede que impõe várias
restrições:
– os agentes identificam objetos no sistema, chamados recursos, com URIs (Uniform
Resource Identifiers);
– os agentes representam, descrevem e comunicam o estado do recurso por meio de
representações do recurso em uma variedade de formatos de dados amplamente
compreendidos (por exemplo, XML, HTML, CSS, JPEG, PNG);
– os agentes trocam representações por meio de protocolos que usam URls para iden-
tificar e abordar direta ou indiretamente os agentes e recursos;
Obs.: existe uma similaridade arquitetônica entre World Wide Web e Web Service.
• Um estilo de arquitetura ainda mais restrito para aplicativos confiáveis da Web, conhe-
cido como Representation State Transfer (REST), foi proposto por Roy Fielding e
inspirou o documento de arquitetura do W3C Technical Architecture Group e muitos
que o veem como um modelo de como construir Web Services;
• A Web REST é o subconjunto da WWW (com base no HTTP) no qual os agentes forne-
cem semântica uniforme de interface – essencialmente criam, recuperam, atualizam e
excluem – em vez de interfaces arbitrárias ou específicas de aplicativos, e manipulam
recursos apenas pela troca de representações;
20m
• Além disso, as interações REST são "sem estado" no sentido de que o significado de
uma mensagem não depende do estado da conversa;
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: essa não é uma restrição tão grande no Web Service, mas no REST, sim. Neste não
existe um estado inicial, tudo estará na própria requisição.
Obs.: o Web Service tradicional se comunica mais na forma XML. O REST se comunica
com o JSON, que é menos restrito e menos formal.
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
SOAP
• O SOAP fornece uma estrutura padrão e extensível para empacotar e trocar men-
sagens XML.
• Define uma estrutura de mensagens baseada em XML: um modelo de processamento
e um modelo de extensibilidade. As mensagens SOAP podem ser transportadas por
uma variedade de protocolos de rede; como HTTP, SMTP, FTP, RMI / IIOP ou um pro-
tocolo de mensagens proprietário.
• Define três componentes opcionais: um conjunto de regras de codificação para expres-
sar instâncias de tipos de dados definidos por aplicativo, uma convenção para repre-
sentar chamadas e respostas a procedimentos remotos (RPC) e um conjunto de regras
para usar SOAP com HTTP.
• Embora o SOAP não seja definido como um acrônimo, há duas expansões do termo
que refletem essas diferentes maneiras pelas quais a tecnologia pode ser interpretada:
– Protocolo de Arquitetura Orientada a Serviços: uma mensagem SOAP repre-
senta as informações necessárias para chamar um serviço ou reflete os resultados
de uma chamada de serviço e contém as informações especificadas na definição da
interface de serviço.
– Protocolo de Acesso a Objetos Simples: ao usar a representação SOAP RPC
opcional, uma mensagem SOAP representa uma chamada de método em um objeto
remoto e a serialização na lista de argumentos desse método que deve ser movida
do ambiente local para o ambiente remoto.
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
WSDL
ATENÇÃO
Perceba que no Web Service não importa a linguagem de implementação dos dados, pois
ele é um estilo arquitetônico que independe disso.
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
COMENTÁRIO
a. A resposta das requisições não é sempre feita no formato JSON.
b. O nome não é stateless.
d. O surgimento ocorreu com Roy Fielding, e não foi em 2010.
e. Podem ser usados qualquer um dos métodos HTTP.
Veja:
World Wide Web e a Arquitetura REST
• Um estilo de arquitetura ainda mais restrito para aplicativos confiáveis da Web, conheci-
do como Representation State Transfer (REST), foi proposto por Roy Fielding e inspirou o
documento de arquitetura do W3C Technical Architecture Group e muitos que o veem como
um modelo de como construir Web Services.
• A Web REST é o subconjunto da WWW (com base no HTTP) no qual os agentes for-
necem semântica uniforme de interface – essencialmente criam, recuperam, atualizam
e excluem – em vez de interfaces arbitrárias ou específicas de aplicativos, e manipulam
recursos apenas pela troca de representações.
• Além disso, as interações REST são "sem estado" no sentido de que o significado de
uma mensagem não depende do estado da conversa.
8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Web Services II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
a. REST.
b. WSDL.
c. CORBA.
d. RESTFUL.
e. HTML.
COMENTÁRIO
Utiliza-se o WSDL.
Veja:
• WSDL é uma linguagem para descrever Web Services.
• O WSDL descreve os Web Services começando com as mensagens que são trocadas
entre o solicitante e os agentes do provedor. As próprias mensagens são descritas de
maneira abstrata e depois vinculadas a um protocolo de rede e formato de mensagem
concretos.
• As definições de serviço da Web podem ser mapeadas para qualquer linguagem de im-
plementação, plataforma, modelo de objeto ou sistema de mensagens.
• Extensões simples à infraestrutura existente da Internet podem implementar Web Servi-
ces para interação por meio de navegadores ou diretamente dentro de um aplicativo.
GABARITO
1. c
2. b
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Bibliografia:
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O que é SOA?
SOA não é uma tecnologia. Há tanto de negócio quanto de tecnologia em SOA. As tec-
nologias (padrões) que dão suporte a SOA são o que a viabiliza, mas SOA não é uma tecno-
logia por si só;
SOA pode ser considerada uma filosofia arquitetural. SOA é uma linha de pensa-
mento que permeia a implementação de necessidades de negócio, refletida em diretrizes,
políticas e metodologias corporativas, não necessariamente restritas à área de TI;
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: um serviço atômico é aquele que não depende de um outro estado. Além disso, ou
ele dá certo ou ele dá errado. Ex.: em uma empresa de seguros, registrar apólice é
um dos serviços. Nesse caso, insere-se os dados da apólice e do cliente, sendo que,
no final, esse serviço dará certo ou errado, não ficando no meio termo. O baixo aco-
plamento é a menor dependência de outros serviços possível.
Obs.: esse barramento é um canal que existirá para que as aplicações possam consumir
os serviços. Em regra, o ideal é que esse canal seja único.
Esse barramento disponibiliza com maior facilidade os serviços do sistema para os usu-
ários e outras aplicações, acelerando processos de integração.
ANOTAÇÕES
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Exemplo:
Obs.: é importante perceber que esse barramento também é um ponto de falha bastante
perigoso, pois, caso ele saia do ar, todos os sistemas ligados a ele irão falhar. Assim,
é importante que ele seja muito bem implementado e que possua mecanismos para
se evitar falhas, pois, caso ele fique indisponível, isso pode indisponibilizar o funcio-
namento da empresa como um todo.
Vantagens
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Orientação a Serviços
Obs.: esse único bloco também é conhecido como monolito (ou aplicação monolítica), que
é uma aplicação formada por um grande bloco. Atualmente, essa não é considerada
uma boa prática.
Características
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: em muitos casos, será feito um catálogo de serviços em uma fonte central. Dessa
forma, quando for feita uma nova operação, será possível consultar esse catálogo e
reutilizar serviços que já estão prontos em um novo processo de negócio.
Diagrama de funcionamento:
ANOTAÇÕES
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Benefícios do SOA
Padrões Utilizados
O ciclo de vida de um serviço envolve diversas fases e cada uma destas fases tem um
padrão a ser adotado para que o serviço seja corretamente especificado.
Um serviço deve seguir padrões com relação ao formato do protocolo de mensagens,
assim como com relação à forma de descrevê-lo ou torná-lo disponível em um serviço de
diretórios.
Obs.: nesse sentido, o SOA irá focar bastante no padrão de como um serviço irá se comu-
nicar com o outro, muito mais do que na forma de implementação do serviço em si.
25m
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
XML
Obs.: a principal vantagem do XML é que ele pode mostrar qualquer tipo de dado. Existem
várias ferramentas nas linguagens de programação para tratar esses arquivos XML.
Exemplo:
ANOTAÇÕES
8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
SOAP é um protocolo baseado em XML que é utilizado para definir um modo uniforme de
transmitir dados representados no formato XML.
Ele é um protocolo para troca de mensagens de via única e que não guarda informações
sobre interações anteriores (stateless).
Este protocolo não é responsável pelo envio em si da mensagem, mas sim por um con-
ceito conhecido como envelope.
O protocolo SOAP encapsula a mensagem e agrega informações tais como a quem se
destina a mensagem, exatamente como um envelope de uma carta.
WSDL é um protocolo também baseado em XML que é responsável por revelar o que um
serviço pode fazer, onde ele está, como invocá-lo e quais tipos de dados enviar ao serviço ou
seja ele descreve a interface de um serviço.
Através da descrição no formato determinado pelo protocolo WSDL, tem-se acesso a
todas as informações necessárias para realizar a comunicação com um certo serviço.
ANOTAÇÕES
9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Relação:
ANOTAÇÕES
10 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
SOA – Service Oriented Architecture
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (2013/CESPE/MPOG/TECNOLOGIA DA INFORMAÇÃO) No que se refere ao SOA
(service-oriented architeture), julgue o item a seguir.
COMENTÁRIO
Item correto, pois traz o conceito de SOA.
COMENTÁRIO
A descoberta é realizada por meio do UDDI, já a descrição é feita por meio do WSDL.
35m
GABARITO
1. C
2. c
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
11 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
REST - Representational State Transfer
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Bibliografia
https://www.codecademy.com/articles/what-is-rest
https://www.devmedia.com.br/rest-tutorial/28912
https://www.oracle.com/technetwork/articles/java/restful-142517.html
A bibliografia mais importante sobre REST é a tese de doutorado do Roy Thomas Fielding.
O conceito de REST surgiu a partir dessa tese que se opunha à maneira como as coisas eram
feitas, principalmente com relação a complexidade: ele simplificou utilizando protocolos mais
leves. O “pai” do REST é Roy Fielding.
Essa tese é um pouco longa e os conceitos já foram atualizados desde então. Existem
vários outros artigos, mais curtos e mais atuais que são recomendados.
Definição de REST
• REST, ou REpresentational State Transfer (Transferência de Estado Representa-
cional), é um estilo arquitetural que fornece padrões entre sistemas de computador
na Web, facilitando a comunicação entre os sistemas.
• Os sistemas compatíveis com REST, geralmente chamados de sistemas RESTful, são carac-
terizados pela falta de estado e por separar as responsabilidades do cliente e do servidor;
• Possibilita a criação de web services, cujas principais diferenças em relação ao modelo
5m tradicional (SOAP) estão na:
°° Utilização semântica dos métodos HTTP (GET, POST, PUT e DELETE);
°° Leveza dos pacotes de dados transmitidos na rede;
°° Simplicidade, fazendo desnecessária a criação de camadas intermediárias (Ex.:
Envelope SOAP) para encapsular os dados;
ANOTAÇÕES
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
REST - Representational State Transfer
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
REST - Representational State Transfer
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Sem Estado
• Os sistemas que seguem o paradigma REST são sem estado, o que significa que o ser-
vidor não precisa saber nada sobre o estado do cliente e vice-versa;
• Dessa maneira, tanto o servidor quanto o cliente podem entender qualquer mensagem
recebida, mesmo sem ver as mensagens anteriores;
• Essa restrição é imposta pelo uso de recursos, em vez de comandos;
• Recursos são os substantivos da Web - eles descrevem qualquer objeto, documento
ou coisa que você pode precisar armazenar ou enviar para outros serviços;
• Essas restrições ajudam os aplicativos RESTful a obter confiabilidade, desempenho
rápido e escalabilidade, como componentes que podem ser gerenciados, atualizados e
reutilizados sem afetar o sistema como um todo, mesmo durante a operação do sistema;
Realizando Requisições
REST requer que um cliente faça uma solicitação ao servidor para recuperar ou modificar
dados no servidor. Uma solicitação geralmente consiste em:
• Um verbo HTTP, que define o tipo de operação a ser executada;
• Um cabeçalho, que permite ao cliente passar informações sobre o pedido;
• Um caminho para um recurso;
• Um corpo de mensagem opcional contendo dados;
Verbos HTTP
Existem 4 verbos HTTP básicos que usamos em pedidos para interagir com recursos em
um sistema REST:
• GET – recupera um recurso específico (por id) ou uma coleção de recursos;
• POST – cria um recurso;
• PUT – atualiza um recurso específico por id;
• DELETE – remove um recurso específico por id;
ANOTAÇÕES
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
REST - Representational State Transfer
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Cabeçalhos
• No cabeçalho da solicitação, o cliente envia o tipo de conteúdo que pode receber do
servidor. Isso é chamado de campo "accept" e garante que o servidor não envie dados
que não possam ser compreendidos ou processados pelo cliente;
• Por exemplo, um arquivo de texto contendo HTML seria especificado com o tipo "text/
html";
Um arquivo de texto genérico seria denotado como "text/plain".
Ex.: GET /articles/23
Accept: text/html, application/xhtml
Caminhos (URL)
• As solicitações devem conter um caminho para um recurso no qual a operação deve ser
executada. Nas APIs RESTful, os caminhos devem ser projetados para ajudar o cliente
a saber o que está acontecendo;
• Convencionalmente, a primeira parte do caminho deve ser a forma plural do recurso.
Isso mantém os caminhos aninhados simples de ler e fáceis de entender;
• Por exemplo, um caminho como: fashionboutique.com/customers/223/orders/12
• É claro no que ele aponta, mesmo que você nunca tenha visto esse caminho especí-
fico antes, porque é hierárquico e descritivo. Podemos ver que estamos acessando o
pedido com id 12 para o cliente com id 223;
• Os caminhos devem conter as informações necessárias para localizar um recurso com
20m
o grau de especificidade necessário. Ao se referir a uma lista ou coleção de recursos,
não é necessário adicionar um ID a uma solicitação POST para um caminho fashion-
boutique.com/customers que não precisaria de um identificador extra, pois o servidor
gerará um id para o novo objeto;
• Se estamos tentando acessar um único recurso, precisaríamos acrescentar um ID ao
caminho;
• Por exemplo: GET fashionboutique.com/customers/:id - recupera o item no recurso de
clientes com o ID especificado
DELETE fashionboutique.com/customers/:id - exclui o item no recurso de clientes com o
ID especificado.
ANOTAÇÕES
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
REST - Representational State Transfer
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Enviando Respostas
Tipos de Conteúdos
• Nos casos em que o servidor está enviando dados para o cliente, o servidor deve incluir
um "content-type" no cabeçalho da resposta;
• Esse campo de cabeçalho do tipo de conteúdo alerta o cliente para o tipo de dados que
está enviando no corpo da resposta;
• Esses tipos de conteúdo são tipos MIME, assim como estão no campo "accept" do
cabeçalho da solicitação;
• O tipo de conteúdo que o servidor envia de volta na resposta deve ser uma das opções
que o cliente especificou no campo "accept" da solicitação;
Exemplo:
Requisição
GET /articles/23 HTTP/1.1
Accept: text/html, application/xhtml
Resposta
HTTP/1.1 200 (OK)
Content-Type: text/html
Códigos de Resposta
25m • As respostas do servidor contêm códigos de status para alertar o cliente sobre informa-
ções sobre o sucesso da operação;
• Para cada verbo HTTP, há códigos de status esperados que um servidor deve retornar
após sucesso:
• GET – returna 200 (OK)
• POST – returna 201 (CREATED)
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
REST - Representational State Transfer
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
DIRETO DO CONCURSO
1. (2017/CESPE/TRE-PE/ANALISTA JUDICIÁRIO/ANÁLISE DE SISTEMAS) REST (repre-
30m
sentational state transfer) é:
a. um estilo de desenvolvimento que utiliza o protocolo HTTP e se baseia na interação
simples entre cliente e servidor.
b. um software de infraestrutura em um sistema distribuído que auxilia no gerenciamento
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
REST - Representational State Transfer
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
a) um estilo de desenvolvimento que utiliza o protocolo HTTP e se baseia na interação
simples entre cliente e servidor.
b) um software de infraestrutura em um sistema distribuído que auxilia no gerenciamento de
interações entre entidades distribuídas em serviços web (REST não é um software);
c) uma linguagem web voltada a definição de predicados que se apliquem a classes de
objetos e de interações em um modelo U M L (REST não é uma linguagem web);
d) uma linguagem de programação com tipos dinâmicos, voltada principalmente para
desenvolvimento de aplicações web (REST não é uma linguagem);
e) um modelo de desenvolvimento de software estruturado e organizado como um conjunto
de classes de objeto e de relações entre essas classes (REST não é software).
GABARITO
1. a
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES
7 www.grancursosonline.com.br
LINGUAGEM DE PROGRAMAÇÃO
GraphQL
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
GRAPHQL
• Web service
• APIs rest
O API rest teve uma grande adesão e, atualmente, é considerado como a forma mais
popular de troca de informações no sistema.
www.grancursosonline.com.br 1
LINGUAGEM DE PROGRAMAÇÃO
GraphQL
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Ao realizar uma requisição de API rest, não haverá controle sobre os dados de res-
posta, enquanto o GraphQL permite consultas dinâmicas.
5m
• GraphQL é uma linguagem de consulta para APIs e um runtime para atender a essas
consultas com seus dados existentes;
• O GraphQL fornece uma descrição completa e compreensível dos dados em sua API,
oferece aos clientes o poder de solicitar exatamente o que eles precisam e nada mais,
facilita a evolução de APIs ao longo do tempo e permite ferramentas de desenvolvedor
poderosas;
Obs.: Atualmente o API rest possui uma especificação denominada open APF.
www.grancursosonline.com.br 2
LINGUAGEM DE PROGRAMAÇÃO
GraphQL
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 3
LINGUAGEM DE PROGRAMAÇÃO
GraphQL
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• Uma consulta GraphQL para uma API obtém exatamente o necessário, nada mais e
nada menos;
• As consultas do GraphQL sempre retornam resultados previsíveis;
• Os aplicativos que usam o GraphQL são rápidos e estáveis porque controlam os dados
que obtêm, não o servidor;
Obs.: As consultas podem ser interativas, tendo em vista que a ferramenta disponibilizada
na página permite a realização dessas consultas.
Obs.: O GraphQL foi desenvolvido pelo Facebook, visando melhorar suas próprias APIs.
Ex.: Um usuário possui uma lista de “friends”. Considerando o banco de dados rela-
cional, pode-se dizer que há uma relação de um para muitos, ou seja, um usuário possui
muitos amigos.
Para retornar o usuário e os três primeiros amigos, será necessário realizar quatro requi-
sições: uma para pegar o usuário e três para pegar os amigos.
Obs.: É possível solicitar os dados do usuário e dos amigos em uma única query.
• Embora as APIs REST típicas exijam carregamento de várias URLs, as APIs do Gra-
phQL obtêm todos os dados de que o aplicativo precisa em uma única solicitação;
Obs.: No caso do GraphQL, serão submetidas várias querys distintas para uma URL única
e, dependendo da query submetida, será retornada uma informação diferente.
• Os aplicativos que usam o GraphQL podem ser rápidos mesmo em conexões de rede
móvel lentas;
ANOTAÇÕES
www.grancursosonline.com.br 4
LINGUAGEM DE PROGRAMAÇÃO
GraphQL
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
15m
www.grancursosonline.com.br 5
LINGUAGEM DE PROGRAMAÇÃO
GraphQL
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Através do GraphQL é possível percorrer outros elementos que irão retornar os da-
dos sem perda de banda desnecessária.
Obs.: No API rest há um conjunto de endpoints, sendo que cada URL vai devolver
um recurso.
O GraphQL terá primeiro uma definição dos elementos que estão disponíveis com
tipos e campos.
Obs.: A segunda imagem apresenta as entidades e as query que podem ser realizadas.
ANOTAÇÕES
www.grancursosonline.com.br 6
LINGUAGEM DE PROGRAMAÇÃO
GraphQL
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Os aplicativos podem consumir a tipagem no GraphQL, visando ter uma expectativa
correta de qual tipo de dados irá receber.
• Novos campos e tipos podem ser adicionados à sua API GraphQL sem afetar as con-
sultas existentes;
Obs.: Não será necessário versionar, pois, as querys antigas continuarão sendo
apresentadas.
www.grancursosonline.com.br 7
LINGUAGEM DE PROGRAMAÇÃO
GraphQL
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Com o uso em larga escala do rest, percebeu-se que possuía algumas deficiências
como o retorno sempre numa escala fixa de campos, entre outros.
20m
No API Rest, à medida que vai versionando, serão geradas bases de códigos repetidas.
• O GraphQL cria uma API uniforme em todo o aplicativo sem ser limitado por um meca-
nismo de armazenamento específico;
• As APIs GraphQL que aproveitam os dados e códigos existentes com engines Gra-
phQL disponíveis em vários linguagens;
• São fornecidas funções para cada campo no sistema de tipos e o GraphQL as chama
de forma concorrente;
ANOTAÇÕES
www.grancursosonline.com.br 8
LINGUAGEM DE PROGRAMAÇÃO
GraphQL
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 9
LINGUAGEM DE PROGRAMAÇÃO
GraphQL
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O GraphQL irá funcionar como uma ponte para receber a requisição com a query e acio-
nar as funções para gerar respostas adequadas.
Após o serviço de GraphQL estiver em execução, poderá receber e consultar as operações.
25m
�Este material foi elaborado pela equipe pedagógica do Gran Concursos, de acordo com a aula pre-
parada e ministrada pelo professor Tiago Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 10
CONHECIMENTOS ESPECÍFICOS
GraphQL II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
GRAPHQL II
Obs.: GraphQL é uma linguagem e um ambiente de execução que permite uma evolu-
ção nas APIs.
Obs.: Na imagem acima apresenta um formato proprietário onde percorreu o grafo das
informações.
www.grancursosonline.com.br 1
CONHECIMENTOS ESPECÍFICOS
GraphQL II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: há a possibilidade de passar alguns argumentos, sendo possível dar um dado a mais.
Ex.: Uma query dos”humanos” com o ID número 1.000 retornou um dado específico,
sendo que na query anterior foram voltados todos os dados.
Caso não fosse possível passar os argumentos o GraphQL não teria utilidade, sendo que
para passar o argumento, é necessário acrescentar o valor seguido de dois pontos.
No Rest, em geral, o ID é passado na URL.
Os parâmetros apresentados podem servir de conversão de dados.
No Rest, é possível passar um parâmetro como ID, porém no caso apresentado acima,
foi realizada uma conversão de unidade para “pés”.
5m
www.grancursosonline.com.br 2
CONHECIMENTOS ESPECÍFICOS
GraphQL II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 3
CONHECIMENTOS ESPECÍFICOS
GraphQL II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: O fragmento é o trecho de uma query que pode ser salva e reutilizada em outros
locais, sem ter a necessidade de repetir os elementos.
10m
www.grancursosonline.com.br 4
CONHECIMENTOS ESPECÍFICOS
GraphQL II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Caso seja colocado o nome da operação, será necessário descrever o seu tipo.
Obs.: Na maioria dos aplicativos, os argumentos dos campos podem ser dinâmicos.
15m
Ex.: Pode apresentar uma lista que permite selecionar em qual episódio o indivíduo está
interessado e um campo de pesquisa com um conjunto de filtros.
www.grancursosonline.com.br 5
CONHECIMENTOS ESPECÍFICOS
GraphQL II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: Será feita uma substituição do valor e irá permitir que a query seja ajustada na medi-
da de sua necessidade.
Obs.: Caso a função seja chamada sem nenhum valor, será assumido um valor padrão.
www.grancursosonline.com.br 6
CONHECIMENTOS ESPECÍFICOS
GraphQL II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
• @include(if: Boolean) Apenas inclua este campo no resultado se o argumento for true;
• @skip(if: Boolean) Ignore este campo se o argumento for true;
No Rest, será utilizado o método post que irá persistir um dado. Geralmente, não se reco-
menda que seja realizado um ged para alteração de dados.
20m
No GraphQL, qualquer consulta pode ser implementada para causar uma grava-
ção de dados.
Todas as operações que causam gravações devem ser declaradas explicitamente como
uma mutação.
Obs.: Quando estiver disposto “mutation”, haverá uma alteração no banco de dados ou
mecanismo de persistência que estiver sendo utilizado.
www.grancursosonline.com.br 7
CONHECIMENTOS ESPECÍFICOS
GraphQL II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Obs.: O GraphQL é mais voltado para as consultas, no entanto, também permite realizar
as mutações.
Obs.: Assim como outros esquemas de tipos, os esquemas do GraphQL incluem a capaci-
dade de definir interfaces e tipos de união.
Caso a consulta for realizada em um campo que retorne uma interface ou um tipo união,
irá precisar usar o fragmento para acessar dados do tipo concreto.
25m
ANOTAÇÕES
www.grancursosonline.com.br 8
CONHECIMENTOS ESPECÍFICOS
GraphQL II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Ex.: Conforme está apresentado na imagem acima, a pesquisa do tipo “an” busca todos
os resultados “an”.
EXERCÍCIOS DE FIXAÇÃO
1. (2018/CESPE/CEBRASPE/STM/Analista Judiciário/Análise de Sistemas) Em relação
ao desenvolvimento de aplicativos, julgue o seguinte item.
A linguagem GraphQL é utilizada para consulta a objetos gráficos em bancos de dados
relacionais.
( ) Certo
( ) Errado
COMENTÁRIO
O “Graph” corresponde à relação direcional entre eles e não de objetos gráficos de imagem.
O GraphQL não se limita aos bancos de dados relacionais, podendo ser utilizado também
no banco de dados não relacionais.
GABARITO
1. E
�Este material foi elaborado pela equipe pedagógica do Gran Concursos, de acordo com a aula pre-
parada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Domain Driven Design
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Referências
 Introdução
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Domain Driven Design
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Muitos projetos realizam trabalhos de modelagem sem obter muitos benefícios reais no
final. Os padrões do DDD reúnem práticas bem-sucedidas de projetos em que há reais bene-
fícios na modelagem. O DDD não irá propor algo inteiramente novo, mas boas práticas já
reconhecidas.
Juntos, eles estabelecem uma abordagem bastante diferente para modelagem e desen-
volvimento de software, que vai de detalhes finos a visão de alto nível.
As convenções rigorosas de modelagem devem ser equilibradas com a exploração livre
de modelos em colaboração com pessoas não técnicas.
Táticas e estratégia devem ser combinadas para ter sucesso, e o DDD trata do design
tático e do estratégico. O design tático é o mais próximo da linha de código, mais refinado,
enquanto o design estratégico é mais de alto nível, de comunicação entre sistemas.
10m
Domínio
Contexto Limitado
Vários modelos estão em jogo em qualquer projeto grande. Eles surgem por muitas razões.
Dois subsistemas geralmente atendem comunidades de usuários muito diferentes, com
trabalhos diferentes, onde modelos diferentes podem ser úteis.
ANOTAÇÕES
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Domain Driven Design
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Domain Driven Design
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Linguagem Onipresente
Integração Contínua
Depois que um contexto delimitado é definido, devemos mantê-lo correto, isto é, garantir
que ele não se deteriore ao longo do tempo.
Quando várias pessoas estão trabalhando no mesmo contexto limitado, há uma forte ten-
dência para o modelo se fragmentar.
Quanto maior a equipe, maior o problema, mas apenas poucas pessoas podem encontrar
problemas sérios.
No entanto, dividir o sistema em contextos cada vez menores acaba perdendo um nível
valioso de integração e coerência.
Portanto, instale um processo de mesclagem de todos os códigos e outros artefatos de
implementação com frequência, com testes automatizados para sinalizar a fragmentação
rapidamente.
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Domain Driven Design
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Model-Driven Design
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Domain Driven Design
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Hands-on Modelers
Se as pessoas que escrevem o código não se sentem responsáveis pelo modelo ou não
entendem como fazer o modelo funcionar para um aplicativo, o modelo não terá relação com
o software.
Se os desenvolvedores não perceberem que a alteração do código altera o modelo, sua
refatoração enfraquece o modelo, em vez de fortalecê-lo, ou seja, o código ficará cada vez
mais longe do modelo.
Enquanto isso, quando um modelador é separado do processo de implementação, ele ou
ela nunca adquire, ou perde rapidamente, uma sensação das restrições da implementação.
A restrição básica do design orientado a modelo – que o modelo suporta uma implemen-
tação efetiva e abstrai as principais informações sobre o domínio – foi reduzida pela metade
e os modelos resultantes serão impraticáveis.
Finalmente, o conhecimento e as habilidades de designers experientes não serão trans-
feridos para outros desenvolvedores se a divisão do trabalho impedir o tipo de colaboração
que transmite as sutilezas de codificar um design orientado a modelos.
Portanto, qualquer pessoa técnica que contribui para o modelo deve passar algum tempo
tocando no código, seja qual for o papel principal que ele ou ela desempenhe no projeto. O
autor defende que quem faz a modelagem tenha também conhecimento de código e que
quem codifica tenha também conhecimento de modelagem.
DIRETO DO CONCURSO
1. (2015/CESPE/STJ/Técnico Judiciário/Tecnologia da Informação) Acerca de arquitetura
de software e Domain-Driven Design, julgue o seguinte item.
Domain-Driven Design pode ser aplicada ao processo de concepção arquitetural de um
sistema de software, sendo que domain, em um software, designa o campo de ação,
conhecimento e influência.
30m
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Domain Driven Design
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
O foco é no problema, não na tecnologia.
GABARITO
1. C
2. C
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conte-
údo ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura
exclusiva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO DE SISTEMAS
Arquitetura Hexagonal
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
ARQUITETURA HEXAGONAL
Obs.: o professor Tiago recomenda a leitura do artigo presente no seguinte endereço ele-
trônico: https://alistair.cockburn.us/hexagonal-architecture/
www.grancursosonline.com.br 1
DESENVOLVIMENTO DE SISTEMAS
Arquitetura Hexagonal
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
e testes que estão interligados, uma vez que para testar é necessário automatizar a edição
do software.
Objetivo: permitir que um aplicativo seja conduzido igualmente por usuários, programas,
testes automatizados ou scripts em lote, seja desenvolvido e testado isoladamente de seus
eventuais dispositivos de tempo de execução e bancos de dados.
Existem comunicações no hexágono e em seu interior o core business se comunica tanto
com a base de dados quanto pela interface do usuário, com a ideia de que esse software
possa funcionar como agnóstico em relação a troca de portas.
5m
• Quando qualquer driver deseja usar o aplicativo em uma porta, envia uma solicita-
ção que é convertida por um adaptador para a tecnologia específica do driver em
uma chamada ou mensagem de procedimento utilizável, que passará para a porta do
aplicativo.
Obs.: driver é quem conduz o software, por exemplo, um usuário, um teste automatizado
ou um script em lote.
www.grancursosonline.com.br 2
DESENVOLVIMENTO DE SISTEMAS
Arquitetura Hexagonal
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
www.grancursosonline.com.br 3
DESENVOLVIMENTO DE SISTEMAS
Arquitetura Hexagonal
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Motivação
• Um dos grandes bugs dos aplicativos de software ao longo dos anos tem sido a infil-
tração da lógica de negócios no código da interface do usuário;
O que acontece muitas vezes é que a lógica da aplicação acaba infiltrando na interface,
vazando. Por exemplo, utilizando a imagem acima como ilustração e a seguinte situação: ao
abrir uma conta bancária por meio de aplicativo a regra é que deve ser maior de 18 anos,
ao inserir essa informação na UI, no controle de tela para que não apareça mensagem se o
usuário for maior de 18 ano, ocorre uma infiltração na regra de negócios, na interface e, se
houver uma outra API se comunicando diretamente, essa restrição sobre maior de 18 anos
não aparecerá por não estar na aplication core, mas na interface. O correto seria que essa
regra estivesse no aplication core.
Ao vazar a lógica, gera uma série de problemas, o sistema não poderá ser testado com
perfeição pois existe lógica que não está inserida no core. Assim, no momento que o teste
for interagir com o core pela ausência da lógica, acarretará um problema. Pela mesma razão
é possível mudar o uso do sistema que pode ser dirigido por ação humana para um sis-
tema executado em lote. Utilizando o mesmo exemplo da abertura de conta, que ocorre pela
interface ou pelo sistema em lote por meio de um formulário, como não é possível executar
por meio da interface, segue direto via arquivo, a regra de negócios não será obedecida,
o que gera um problema, já que a regra de negócios ficou apenas na interface, bem como
ANOTAÇÕES
www.grancursosonline.com.br 4
DESENVOLVIMENTO DE SISTEMAS
Arquitetura Hexagonal
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
torna impossível permitir que o programa seja conduzido por outro, ou através de uma API,
integração.
Dessa forma, as empresas tentavam criar uma nova camada de arquitetura com a pro-
messa que nenhum malote de negócio escaparia da nova camada. Entretanto, não há nenhum
mecanismo que possa comprovar que mesmo diante da criação de novas camadas, o modelo
MVC, não poderia vazar também, é um problema que sempre acabava reaparecendo.
A ideia é exatamente bloquear para que a regra de negócio fique perfeita, para que no
momento da automatização, execução e processamento do software, interação de uma apli-
cação com outra, independentemente da interface a ser utilizada, a regra de negócio a ser
trabalhada será a mesma.
Natureza da Solução
• Tanto os problemas do lado do usuário quanto do lado do servidor são causados pelo
mesmo erro de design e programação — o emaranhamento entre a lógica de negócios
e a interação com entidades externas;
15m
Diferentemente do modelo em camadas em que não era percebida uma simetria, como
no modelo hexagonal.
No modelo em camadas, o vazamento da regra de negócio para quaisquer lados, tanto
para cima, quanto para baixo era considerado ofensivo. Já no modelo hexagonal demons-
tra que qualquer dos elementos externos à aplicação são tão ofensivos quanto, em relação
ao vazamento da regra de negócio. O hexágono é mais uma representação visual no sen-
tido de demonstrar a existência de várias portas de comunicação, do que a literalidade dos
seis lados.
ANOTAÇÕES
www.grancursosonline.com.br 5
DESENVOLVIMENTO DE SISTEMAS
Arquitetura Hexagonal
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Geralmente existem vários adaptadores para qualquer porta e várias tecnologias que
podem ser conectadas a ela. Pode ser diretamente interface, pode ser uma comunicação
web, entre outros nesse sentido.
Estrutura
A imagem abaixo demonstra uma conexão HTTP, há duas portas API (do usuário e de
dados) que podem ter vários adaptadores. Supondo que o API do usuário seja um CRUD de
usuário, poderá utilizar por meio uma interface gráfica, de uma aplicação para outra aplica-
ção, por várias formas. As duas portas API estão do lado do controle de aplicativo e do lado
da recuperação de dados.
O desenho demonstra que o aplicativo pode ser conduzido igualmente por um conjunto
de testes, independentemente da forma como for nomeada, a aplicação terá o mesmo resul-
tado porque está tudo inserido no core da aplicação.
www.grancursosonline.com.br 6
DESENVOLVIMENTO DE SISTEMAS
Arquitetura Hexagonal
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Microsserviços
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
MICROSSERVIÇOS
Esta aula é sobre microsserviços. Esse é um assunto muito atual e está em voga por ser
muito utilizado por empresas, como Amazon, Google e Netflix. O microsserviço é uma boa
estratégia para escalar produtos e serviços. As empresas brasileiras começaram a intensifi-
car a sua utilização nos últimos anos e as estatais também, por isso este assunto tem sido
cobrado em provas.
Referências Bibliográficas
Em geral, não há uma literatura acadêmica vasta sobre este assunto, mas há bastante
conteúdo na internet. Recomenda-se que busquem autores ou sites que sejam referên-
cia na área.
– https://www.martinfowler.com/articles/microservices.html
– https://azure.microsoft.com/pt-br/blog/microservices-anapplication-revolution-powe-
red-by-the-cloud/
– https://microservices.io/
– https://www.redhat.com/pt-br/topics/microservices
Obs.: o que mais se aproxima de uma discussão mais completa é o artigo do Martins
Fowler, que é uma referência no mercado.
Introdução
• O termo “Arquitetura de Microsserviços” surgiu nos últimos anos para descre-
ver uma maneira particular de projetar aplicativos de software como conjuntos
de serviços de implantação independente;
5m
• Embora não haja uma definição precisa desse estilo de arquitetura, há certas carac-
terísticas comuns em torno da organização em relação à capacidade comercial, à
implantação automatizada, à inteligência nos endpoints e ao controle descentralizado
de linguagem e dados;
Isto é, não tem uma definição precisa ou uma especificação formal. Existe uma série de
conceitos comuns que vão formar o microsserviço.
ANOTAÇÕES
www.grancursosonline.com.br 1
DESENVOLVIMENTO WEB
Microsserviços
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Introdução
• O estilo arquitetural de microsserviço é uma abordagem para desenvolver um
único aplicativo como um conjunto de pequenos serviços, cada um executando
em seu próprio processo e comunicando-se com mecanismos leves, geralmente
uma API HTTP;
Exemplo: para abertura de uma conta é preciso fazer o cadastro do cliente e fazer algu-
mas consultas no Serasa e SPC, além de fazer a própria abertura da conta. Perceba que
cada um desses passos são pequenos serviços.
Em vez de ter um grande programa, como banco.exe, há vários sistemas pequenos que
vão se comunicar por meio de uma API de comunicação entre os serviços, sendo que eles
podem estar em diferentes máquinas ou em diferentes partes da rede. Em geral, eles vão se
comunicar na rede por meio de uma API HTTP, que é um protocolo para transmitir dados, e
uma API REST, em um nível mais alto, para transmitir esses dados e conversar entre essas
aplicações.
• Esses serviços são criados com base nos requisitos de negócio e implementados de
maneira independente por um mecanismo de implantação totalmente automatizado;
10m
Obs.: um serviço pode ser retirado do ar e colocado novamente sem que se tenha que tirar
todo o sistema do ar.
www.grancursosonline.com.br 2
DESENVOLVIMENTO WEB
Microsserviços
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Uma das premissas é que é possível ter uma certa arquitetura organizacional desse
microsserviço, um certo tipo de controle desse microsserviço, mas é possível ser implemen-
tado em diferentes tecnologias, inclusive banco de dados diferentes.
Por exemplo, um microsserviço em Node, outro em Python, outro em Java eles se comu-
nicam através de uma API REST sem problemas. É possível ter banco de dados diferentes
um em SQL, outro em UDB.
A tecnologia anterior:
Monolito
Obs.: ideia de uma peça única e grande.
Por exemplo, um Front-end com HTML e CSS e Javascript vai se comunicar com o Back-
-end (que pode ser em Java) e esse Back-end por sua vez vai se comunicar com a Database.
No Back-end, em geral, ficam as regras de negócios, segurança.
• Este aplicativo do lado do servidor é um monolito - um único executável lógico. Quais-
quer alterações no sistema envolvem a criação e a implantação de uma nova versão
do aplicativo do lado do servidor;
Por exemplo, no sistema chamado banco.exe, toda vez que é feita alguma alteração, tem
que desinstalar todo o sistema e implantá-lo. Atualmente, com o uso de mais recursos, os
softwares começaram a ficar muito grandes e esse estilo de trabalho com o monólito acabou
ficando um pouco defasado, pois traz problemas no desenvolvimento.
ANOTAÇÕES
www.grancursosonline.com.br 3
DESENVOLVIMENTO WEB
Microsserviços
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Monolito - Problemas
• Aplicativos monolíticos podem ser bem-sucedidos, mas cada vez mais as pessoas
estão sentindo frustrações com elas - especialmente à medida que mais aplica-
tivos são implantados na nuvem.
15m
• Os ciclos de mudança ficam amarradas - uma alteração feita em uma pequena parte
do aplicativo requer que todo o monolito seja reconstruído e implantado.
Exemplo: o grande aplicativo banco.exe, se está fazendo um ajuste na parte de capita-
lização, por causa desse ajuste, terá que versionar todo o sistema do banco e implantá-lo
inteiramente. Este é um problema.
Outro problema seria:
• Ao longo do tempo, muitas vezes é difícil manter uma boa estrutura modular, tor-
nando mais difícil manter as alterações que devem afetar apenas um módulo dentro
desse módulo. Caso necessário, deve-se escalar todo o aplicativo, em vez de partes
dele que exigem maior recurso.
A primeira parte é a relação da divisão do software, a outra parte citada é em relação
de escala.
Exemplo: o sistema banco.exe começa a ter muitos clientes consumindo a parte de pre-
vidência. A parte de previdência fica bastante exausta e começa a consumir recursos. Nesta
situação, o que deve ser feito é escalar esse sistema e montar um cluster de servidores.
Só que quando montar esse cluster será necessário replicar o sistema inteiro do banco em
cada um dos servidores porque não está dividido. Então, quando tem que escalar por uma
pequena parte do sistema, tem que escalar o sistema todo. No microsserviço, poderia ser
escalada somente a parte da previdência e consumir bem menos recursos.
www.grancursosonline.com.br 4
DESENVOLVIMENTO WEB
Microsserviços
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Então, quando tem que escalar, ou seja, atender mais clientes, o que deve ser feito é
replicar, mas replicar o sistema como um todo, gastando bastante recursos para instalar.
Uma arquitetura de microsserviços coloca cada elemento de funcionalidade em um
serviço distinto...
Perceba que é como se tivesse vários sistemas menores, cada um está fazendo um pouco.
www.grancursosonline.com.br 5
DESENVOLVIMENTO WEB
Microsserviços
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Por exemplo, o serviço bola está nas quatro máquinas, digamos que temos quatro instân-
cias dele. Alguns têm apenas três instâncias, outros apenas uma instância. Estamos esca-
lando de forma distinta.
À medida que vamos dividindo o sistema em microsserviço, conseguimos escalar no sen-
tido de colocar mais máquinas para executar aquele serviço, mas de uma maneira menor,
apenas para o microsserviço necessário.
Microsserviços
• Essas frustrações levaram ao estilo arquitetural de microsserviço: construir
aplicativos como conjuntos de serviços.
20m
• Além do fato de que os serviços são independentemente implantáveis e escaláveis, cada
serviço também fornece uma fronteira rígida entre os módulos, permitindo até mesmo
que diferentes serviços sejam escritos em diferentes linguagens de programação;
• Eles também podem ser gerenciados por equipes diferentes.
O primeiro ponto: quando falam que os serviços são independentes, escaláveis e implan-
táveis de forma independente, significa escalar, implantar e até tirar sem mexer no sistema
como um todo. Podemos escalar, colocar mais instâncias, mais cópias do serviço para ser
executado, para atender um número maior de clientes de uma forma independente, escalar
só o que está dando problema.
ANOTAÇÕES
www.grancursosonline.com.br 6
DESENVOLVIMENTO WEB
Microsserviços
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Exemplo: temos um serviço para o cadastro, outro para previdência, outro para capita-
lização e eles estão separados. Se alterar algo na capitalização, não vai alterar o serviço de
previdência, pois estão separados devido a uma fronteira muito rígida (talvez até por lingua-
gem de programação) um pode estar em Node e outro em Java esses são os benefícios de
trabalhar dessa forma.
www.grancursosonline.com.br 7
DESENVOLVIMENTO WEB
Microsserviços
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Diferença entre biblioteca e serviço neste conceito: uma biblioteca é uma dependência do
projeto em que as funcionalidades da biblioteca são chamadas por meio de memória, porque
está integrado ali, faz parte do conjunto do software. E o microsserviço seria algo chamado
através de uma rede.
• Um dos principais motivos para usar os serviços como componentes (em vez de biblio-
tecas) é que os serviços são implantáveis de maneira independente;
Poderíamos dividir o software do sistema do banco e em vez de ser tudo no mesmo
executável, podemos ter uma biblioteca chamada capitalização, outra chamada previdência,
uma abertura de contas. Mas isso não seria microsserviço, porque a implantação final desse
sistema, isto é, a maneira como vamos colocar para rodar,é como um único monólito, apesar
de ter bibliotecas que dividem os módulos dos serviços, no final é um único monólito que
consome essa biblioteca, mas não está dividindo o microsserviço.
• Se você tiver um aplicativo que consista em várias bibliotecas em um único pro-
cesso, uma mudança em qualquer componente único resultará na necessidade
de reimplantar o aplicativo inteiro.
• Porém, se for decomposto em vários serviços, mudanças em um serviço exigem que
somente ele seja reimplantado. No entanto, algumas mudanças irão mudar as interfa-
ces de serviço resultando em alguma coordenação, mas o objetivo da arquitetura de
microsserviço é minimizá-las através de limites de serviço coesos e mecanismos de
evolução nos contratos de serviço.
• Porém há algumas desvantagens na utilização de serviços.
• As chamadas remotas são mais caras do que as chamadas em processo e, por-
tanto, as APIs remotas precisam ser menos granulares, o que geralmente as
torna mais complicadas de se utilizar.
As chamadas remotas são mais caras que as chamadas em processo, porque a cha-
mada em processo é uma chamada da memória do sistema. Um aplicativo chama o outro
através da memória, então é muito mais barato para executar. Ao passo que um microsser-
viço se comunica com outro através da rede e essa chamada é bem mais cara.
• Se for necessário alterar a alocação de responsabilidades entre os componentes,
esses movimentos de comportamento são mais difíceis de serem feitos quando se
está cruzando os limites do processo;
30m
ANOTAÇÕES
www.grancursosonline.com.br 8
DESENVOLVIMENTO WEB
Microsserviços
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
www.grancursosonline.com.br 9
DESENVOLVIMENTO WEB
Microsserviços II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
MICROSSERVIÇOS II
• Quando as equipes são separadas, até mesmo alterações simples podem levar a um
projeto de múltiplas equipes, que leva tempo e aprovação orçamentária;
Exemplo: no sistema de um banco, uma equipe cuida da interface, outra equipe da lógica
desse sistema e uma terceira equipe cuida do banco de dados. Perceba que toda vez que
se fizer uma alteração, como uma nova tela no sistema de abertura de contas, envolverá as
três equipes, tal modelo que pode ser caro em termos burocráticos e em termos de negócio
da instituição.
Obs.: O sistema reflete a própria hierarquia da empresa. Se a empresa tem uma hierarquia,
uma divisão, o software reflete a mesma divisão.
ANOTAÇÕES
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Digamos que o sistema é dividido por funcionalidade de negócios, quando tem que fazer
uma intervenção em uma parte do sistema, é possível fazê-la de uma forma mais rápida, pois
todas as equipes estão reunidas.
Um exemplo pode ser visto na imagem abaixo:
Aplicar essa estratégia no monólito, pode gerar alguns problemas. O fato de ele ser
monolítico, isto é, o aplicativo ficar todo junto, fazer essa divisão dos times é bem mais difícil.
ANOTAÇÕES
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O monólito não tem uma fronteira muito rígida entre os módulos e os contextos.
• Além disso, vemos que as fronteiras modulares exigem muita disciplina para
serem aplicadas. A separação necessariamente mais explícita exigida pelos
componentes de serviço facilita a manutenção dos limites da equipe;
Outra abordagem é:
• Os defensores de microsserviços tendem a evitar esse modelo, preferindo a
noção de que uma equipe deve possuir um produto durante toda sua vida útil.
Uma inspiração comum para isso é a noção da Amazon de "você constrói, você o
executa", onde uma equipe de desenvolvimento assume total responsabilidade pelo
software em produção. Isso leva os desenvolvedores ao contato diário com o modo
como o software se comporta na produção e aumenta o contato com os usuários, já
que eles precisam assumir pelo menos parte da carga de suporte;
10m
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Outra abordagem que acaba sendo muito utilizada no microsserviço é que depois de
construído, o software vai para manutenção e continuará sendo monitorado, isto é, o software
continua sendo responsabilidade da equipe que o construiu.
Essa é uma visão de produto e não projeto. No produto, a equipe é responsável pela
construção, implantação e manutenção.
A visão é mais de negócio, de como o software vai produzir resultados e não apenas que
um projeto foi concluído.
• Não há razão para que essa mesma abordagem não possa ser usada com aplicativos
monolíticos, mas a menor granularidade dos serviços pode facilitar a criação de
relacionamentos pessoais entre os desenvolvedores de serviços e seus usuários;
DIRETO DO CONCURSO
1. (2018/CESPE/MPE-PI/ANALISTA MINISTERIAL/TECNOLOGIA DA INFORMAÇÃO)
Julgue o item a seguir, concernentes a microsserviços e arquiteturas de integração.
Um princípio básico dos microsserviços é que cada serviço gerencia seus próprios
dados, sendo responsável pelo armazenamento particular desses dados e também
pela execução em seus próprios processos.
COMENTÁRIO
O microsserviço vai trabalhar com os dados separados. Cada serviço vai ter uma base
de dados separada específica e não vai construir uma grande base de dados, como era o
monólito. No microsserviço, inclusive pode ter base de dados diferentes e também estar
executando o próprio processo.
ANOTAÇÕES
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
a. A arquitetura de microsserviços não é similar à arquitetura monolítica em relação à
quantidade de componentes e de módulos.
b. É o contrário, a falha em microsserviço não compromete os demais, somente aquele
microsserviço.
c.Quando se trabalha com microsserviço é baixo acoplamento e alta coesão, mas não tem
restrição na linguagem de programação, podendo trabalhar em qualquer linguagem.
15m
d. O sistema será distribuído por pequenos serviços coesos, cada um faz algo que realmente
faz sentido.
e. São características do monólito.
Obs.: Pode-se perceber que a cobrança das bancas é com base em conceitos.
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços II
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Há dois tipos em geral de comunicação entre os microsserviços: API via REST, que é
uma comunicação síncrona, e uma comunicação utilizando uma MQ RabbitMQ ou ZeroMQ,
que é uma comunicação assíncrona.
Exemplo: Um sistema com o monólito será migrado para uma série de microsserviços.
A forma mais ingênua de se fazer isso é simplesmente pegar as chamadas de função.
Não é uma abordagem muito boa, pois vai exigir uma comunicação muito intensa e é um
tráfego muito grande de rede, porque a comunicação não será mais em termos de memória
e sim em tráfego de rede, isso acaba tornando o sistema mais lento e a situação é piorada.
A argumentação é que tem de ser menos granular o serviço. Por isso essa divisão de
simplesmente pegar os módulos e transformá-los em microsserviço não é uma boa abordagem.
GABARITO
1. C
2. d
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
MICROSSERVIÇOS III
Governança Descentralizada
• Uma das consequências da governança centralizada é a tendência de padroni-
zar plataformas tecnológicas únicas. A experiência mostra que esta abordagem é
constritiva – nem todo problema é um prego, nem toda solução é um martelo.
É preferível usar a ferramenta certa para o trabalho certo e, embora os aplicativos
monolíticos possam tirar vantagem de diferentes linguagens até certo ponto,
isso não é comum.
Isso significa que quando estamos trabalhando com o monólito do sistema (banco.exe,
por exemplo, é um grande monólito que faz todas as funcionalidades do banco), estamos res-
tringindo todo mundo a trabalhar com a mesma tecnologia. Ao passo que, no microsserviço,
vamos para um modelo de governança descentralizada. Neste sentido, é possível trabalhar
com tecnologias diferentes para problemas diferentes.
O microsserviço é dividido em vários pequenos serviços e cada um pode ter uma pilha
tecnológica diferente que melhor se adapte àquele problema que se busca resolver.
1 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
não terá impacto no resto do sistema, porque basicamente vai comunicar com o mesmo ser-
viço e ele vai devolver a mesma informação. Portanto, não vai alterar o resto do sistema, o
que é uma grande vantagem quando se está trabalhando com microsserviço.
Governança Descentralizada
• Claro, só porque você pode fazer alguma coisa, não significa que você deva - mas
particionar seu sistema com microsserviços significa que você tem a opção;
5m
Ou seja, não é o caso de fazer 30, 40 microsserviços e cada um com uma pilha tecno-
lógica diferente do outro. Pode até ser feito, mas não é o ideal, pois estará indo para outro
extremo, em que o custo de manutenção é bem mais difícil, pois a equipe deverá conhecer
várias tecnologias diferentes. Entretanto, quando é feito de forma consciente e controlada, é
bastante vantajoso.
2 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
No sistema monolítico, todos acessando o mesmo banco de dados, isso forçava uma
visão homogênea de toda a empresa. Por exemplo, o suporte tem o conceito de “cliente”, ao
passo que o setor de vendas possui outro conceito de “cliente”, e quando fica tudo junto no
monólito, é muito complicado de fazer manutenção, porque mistura o código de uma equipe
com outra.
• Esse problema é comum entre aplicativos, mas também pode ocorrer dentro de
aplicativos, especialmente quando esse aplicativo é dividido em componentes
separados;
• Uma maneira útil de pensar sobre isso é a noção de Contexto Limitado do Design
Orientado a Domínio. O DDD (Domain Driven Design) divide um domínio complexo
em vários contextos limitados e mapeia as relações entre eles. Esse processo é útil
para arquiteturas monolíticas e de microsserviço, mas há uma correlação natural entre
limites de um microsserviço e um contexto que ajuda a esclarecer.
10m
ANOTAÇÕES
3 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Hoje em dia já se pensa em dividir o sistema usando a técnica do DDD, não dividindo de
forma técnica, mas dividindo em termos de orientação de domínios de negócios, isto é, mar-
cando as fronteiras do sistema em relação aos domínios de negócios e não em relação aos
domínios de sistema, é isso que preconiza o DDD.
Também é possível usar essa técnica de DDD para o monólito, dividindo cada uma das
partes do sistema de acordo com o domínio de negócio que esteja atuando. No entanto,
quando fazemos isso com o microsserviço, é muito mais simples, porque em geral cada
domínio desse negócio vai ser seu próprio microsserviço.
Obs.: É uma prática muito comum. Até por questões de licenciamento e custos, é comum
que se tenha um único banco de dados no modelo monolítico.
• Os microsserviços preferem permitir que cada serviço gerencie seu próprio banco
de dados, sejam instâncias diferentes da mesma tecnologia de banco de dados
ou sistemas de banco de dados totalmente diferentes – uma abordagem chamada
Persistência Poliglota.
ANOTAÇÕES
4 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
5 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Existe a possibilidade de ter transações distribuídas, mas elas são bastante complicadas
de implementar. Geralmente, no microsserviço, não se trabalha tanto com Begin Transaction
como no modelo monolítico, trabalha-se com operações de compensação, ou seja, faz uma
operação e se ela der errado, o sistema de forma programada chama outra operação para
fazer a compensação disso. É um sistema menos seguro com relação a esse lado de con-
sistência dos dados, porque a transação garante a consistência. No entanto, a transação é
custosa, porque trava o banco de dados enquanto está ocorrendo.
Eventualmente, é possível que o sistema tenha uma inconsistência, por exemplo, uma
venda que foi feita e não tem mais produto no estoque é uma situação inconsistente, já foi
gravada na tabela de vendas, quando temos o sistema de transaction, conseguimos reverter
de uma forma mais fácil, quando estamos no sistema de banco de dados descentralizados
é um pouco mais difícil de contornar. Esse é o lado que dificulta o microsserviço, o fato de
geralmente não trabalhar com transações, e sim operações de compensação e é uma con-
sistência eventual do sistema.
ANOTAÇÕES
6 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Automação de Infraestrutura
Lembrando que a integração contínua significa que cada vez que se faz uma entrega
no repositório de código fonte, ele vai fazer o teste, e, muitas vezes, vai fazer a entrega da
implantação desse pacote nesse ambiente de desenvolvimento.
A entrega contínua vai além, pode entregar em outros ambientes até chegar à produção
de uma forma contínua, mas desde que passe todos os testes.
20m
As equipes que constroem o software desta maneira fazem uso extensivo de técnicas de
automação de infraestrutura.
7 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Ou seja, o microsserviço vai passar por todas essas fases, em geral, de uma forma auto-
matizada. Cada vez que se conclui uma fase, passa para a próxima, em que são executados
novos scripts e novas rotinas, até chegar ao momento em que é implantado em produção.
Isso é chamado de pipeline de desenvolvimento de implantação.
• Uma aplicação monolítica será construída, testada e transmitida por meio desses
ambientes de forma bastante feliz;
• Acontece que, depois de investir na automação do caminho para a produção de um
monolito, a implantação de mais aplicativos não parece mais tão complexa.
Se a empresa já teve um nível de dedicação para tornar mesmo seu monólito com uma
entrega contínua, uma implantação contínua será muito mais fácil se adequar ao microsser-
viço, porque vai aumentar a quantidade ativos que vão seguir o fluxo. No entanto, a automa-
ção já está pavimentada.
8 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Muitos microsserviços devem ter um design orientado que espere que as coisas
deem errado.
Se o sistema de capitalização deu errado, não quer dizer que todo o sistema do banco vai
falhar imediatamente. É preciso estar preparado, pois algum componente do software pode
falhar. Uma das principais ou relevantes formas de fazer isso é ter uma monitoração eficiente.
Mas monitoração tanto no nível de software e hardware, isto é, tanto de mais baixo nível de
banco de dados quanto das métricas de negócios.
Design Evolutivo
• Os profissionais de microsserviço, em geral, vêm de um histórico de design evolu-
cionário e veem a decomposição de serviços como uma ferramenta adicional
para permitir que os desenvolvedores de aplicativos controlem as alterações em
seus aplicativos sem reduzir a velocidade das alterações. O controle de mudança
ANOTAÇÕES
9 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
O microsserviço tenta trazer isso, um design em que possam ser feitas mais alterações
no software, que seja mais adequado ao mercado e às necessidades do cliente e mais rápida
que o monólito.
Exemplo: O processo de revisão cadastral e abertura de conta estão juntos, pois a aber-
tura de conta depende da revisão cadastral, neste caso, eles podem estar, então, no mesmo
microsserviço. Agora, se tiver capitalização e abertura de conta, são assuntos muito distintos,
então é provável que esteja em microsserviço distintos.
30m
10 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
Por exemplo, um microsserviço que traz os dados do cliente como nome, telefone e
endereço, essa é uma versão do microsserviço. Agora uma outra versão vai trazer nome,
telefone, endereço, nome do pai e da mãe. O ideal é que nesse caso nem precise versionar,
simplesmente estamos aumentando a quantidade de respostas, então para os serviços ante-
riores, que não esperavam essa resposta, o ideal é que não quebrem e simplesmente igno-
rem essa informação adicional. Com isso, conseguimos ser mais resilientes às mudanças no
microsserviço.
DIRETO DO CONCURSO
1. (CESPE/TRT- 8ª Região (PA e AP)/TÉCNICO JUDICIÁRIO-TECNOLOGIA DA INFOR-
MAÇÃO/2016) Acerca da arquitetura de microsserviços, assinale a opção correta.
a. A arquitetura de microsserviços é um padrão para a criação de aplicações distribuí-
das, porém não possui alta escalabilidade.
b. A comunicação entre os microsserviços é feita por meio de mecanismos padrões de
tecnologia, como, por exemplo, o REST (representational state transfer).
c. Microsserviços utilizam uma única base de dados lógica para a persistência de dados.
d. Um requisito fundamental da arquitetura de microsserviços é o uso de versionamento
de mudanças.
e. Os microsserviços são componentes autônomos e de alto acoplamento, de modo que
há a necessidade de se utilizar uma mesma linguagem na sua construção.
ANOTAÇÕES
11 www.grancursosonline.com.br
DESENVOLVIMENTO WEB
Microsserviços III
Viu algum erro neste material? Contate-nos em: degravacoes@grancursosonline.com.br
COMENTÁRIO
a. Possui alta escalabilidade. Conseguimos escalar melhor os microsserviços, que é um
dos objetivos dele.
c. Descentralizam a governança da base de dados.
d. Pode ser, mas não é fundamental. É uma possibilidade usar o versionamento de mudanças.
e. É baixo acoplamento e alta coesão e não precisam ser na mesma linguagem.
COMENTÁRIO
Os microsserviços são autônomos e por essa característica são independentes e implan-
táveis de forma independente.
GABARITO
1. b
2. C
�Este material foi elaborado pela equipe pedagógica do Gran Cursos Online, de acordo com a aula
preparada e ministrada pelo professor Tiago Lage Payne de Pádua.
A presente degravação tem como objetivo auxiliar no acompanhamento e na revisão do conteúdo
ministrado na videoaula. Não recomendamos a substituição do estudo em vídeo pela leitura exclu-
siva deste material.
ANOTAÇÕES
12 www.grancursosonline.com.br