Escolar Documentos
Profissional Documentos
Cultura Documentos
html#
Padrões GRASP
Prof. Alexandre Luis Correa
Descrição
Propósito
Preparação
1 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Objetivos
Módulo 1
Módulo 2
2 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Módulo 3
Módulo 4
Introdução
GRASP é o acrônimo para o termo em inglês general responsibility
assignment software patterns proposto por Craig Larman no livro
Applying UML and patterns, que define as diretrizes para a
atribuição de responsabilidades em software. Os padrões GRASP
podem ser vistos como os princípios gerais de um projeto de
software orientado a objetos que são aplicáveis na solução de
3 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
4 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Ao �nal deste módulo, você será capaz de reconhecer o propósito e as situações de aplicação
dos padrões Especialista na Informação e Criador.
5 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Atenção
6 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Java
7 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
8 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Java
1
2 public class ItemPedido {
3 public ItemPedido(int numero, int quantidade, Produto prod
4 this.numero = numero;
5 this.quantidade = quantidade;
6 this.produto = produto;
7 }
8 public BigDecimal obterValor() {
9 return produto.obterPrecoParaQuantidade(quantidade);
10 }
11 … // restante da classe ItemPedido
12 }
13
14 public class Produto {
Etapa 1
Etapa 2
10 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Resposta
O padrão Criador
A instanciação de objetos é uma das instruções mais presentes em um
programa orientado a objetos. Sempre que necessário, pode-se utilizar o
operador new para criar um objeto em Java. Entretanto, a instanciação
indiscriminada – e sem critérios bem definidos – de objetos em
diferentes partes do código tende a gerar uma estrutura pouco flexível,
difícil de modificar e com alto acoplamento entre os módulos.
11 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Solução do Criador
O padrão Criador recomenda atribuir a uma classe X a responsabilidade
de criar uma instância da classe Y se uma ou mais das seguintes
condições for(em) verdadeira(s):
12 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
• X contém instâncias de Y.
• X registra instâncias de Y.
Veja no código adiante que a classe Pedido contém uma lista de itens.
Essa lista implementa o relacionamento de composição entre Pedido e
13 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Java
1
2 public class Pedido {
3 private int numero;
4 private java.util.Date data;
5 private List<ItemPedido> itens;
6
7 public void adicionarItem(int quantidade, Produto produto)
8 itens.add(new ItemPedido(itens.size() + 1, quantidade,
9 }
10 public Iterator<ItemPedido> getItens() {
11 return itens.iterator();
12 }
13 public BigDecimal obterValorTotal() {
14 BigDecimal resultado = new BigDecimal(0);
Classe Pedido.
14 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Consequências do Criador
O padrão Criador é especialmente indicado para a criação de instâncias
que formam parte de um agregado, pois o elemento que controla o ciclo
de vida das suas partes é o próprio agregado, o qual, aliás, naturalmente
já está relacionado com as suas partes. Esse padrão não é apropriado
em algumas situações especiais, como é o caso da criação condicional
de uma instância de uma família de classes similares.
Exemplo
15 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Introdução aos padrões GRASP
No vídeo a seguir, apresentaremos uma visão geral dos padrões GRASP.
16 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Questão 1
17 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
18 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Questão 2
19 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
20 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
21 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Coesão de um pacote
Coesão de um subsistema
22 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Coesão coincidente
Java
1
2 public class Utils {
3 public String formatarData (Date data) {
4 // implementação da formatação de data no formato DD/M
5 }
6 public double converterMetrosEmPolegadas (double metros) {
7 // implementação da conversão de metros em polegadas
8 }
9 public double converterPolegadasEmMetros (double polegadas
10 // implementação da conversão de polegadas em metros
11 }
12 public void enviarArquivoPorFTP (File arquivo, String ende
13 // implementação do envio do arquivo por FTP
14 }
Classe Utils.
Atenção
23 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Atenção
Coesão lógica
Um arquivo texto local.
Um arquivo obtido via FTP.
Um banco de dados relacional.
Esse é um exemplo de classe com coesão lógica, pois são reunidas em
uma mesma classe todas as operações capazes de ler dados de
produtos independentemente da fonte de dados disponível. Uma
solução mais adequada seria separar a leitura de cada fonte em um
módulo à parte.
24 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
módulo à parte.
Java
1
2 public class ProdutoRepository {
3 public static final int ARQUIVO_LOCAL = 1;
4 public static final int ARQUIVO_FTP = 2;
5 public static final int BANCO_RELACIONAL = 3;
6
7 public Produto obterProduto (int origem, String chave) {
8 switch (origem) {
9 case ARQUIVO_LOCAL:
10 return obterProdutoViaArquivoLocal (chave);
11 case ARQUIVO_FTP:
12 return obterProdutoViaArquivoFTP (chave);
13 case BANCO_RELACIONAL:
14 return obterProdutoViaBancoRelacional (chave);
Classe ProdutoRepository.
Coesão temporal
Inicialização do log do sistema
25 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Inicialização da interface grá�ca com o
usuário
Inicialização das conexões com banco de
dados
Inicialização das tarefas de segundo plano
Reúnem-se em um módulo, assim, as responsabilidades de diferentes
naturezas por elas serem executadas em um momento específico, isto
é, a inicialização do sistema. Uma solução mais adequada seria separar
cada problema de inicialização (log, interface gráfica, banco de dados e
assim por diante) em um módulo à parte. O código adiante ilustra um
exemplo de módulo com coesão temporal.
Java
1
2 public class Startup {
3 public void inicializar() {
4 inicializarLog();
5 inicializarGUI();
6 inicializarConexoesBD();
7 inicializarTarefasSegundoPlano();
8 }
9 private void inicializarLog() {
10 // inicializar log do sistema
26 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
11 }
12 private void inicializarGUI() {
13 // inicializar interface gráfica com o usuário
14 }
Classe Startup.
Coesão procedural
Java
1
2 public class ServicoPedido {
3 public void confirmarPedido() {
4 obterDadosPagamento();
5 validarDadosPagamento();
6 aprovarPagamento();
7 salvarPedido();
8 atualizarEstoque();
9 enviarPedidoParaProvisionamento();
10 enviarEmailConfirmacao();
11 }
27 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
11 }
12 private void obterDadosPagamento() {
13 // obter dados do cliente para o pagamento
14 }
Classe ServicoPedido.
Atenção
Coesão de comunicação
Java
1
2 public class Conta {
3 public BigDecimal saldo() {
4 // obter o saldo da conta
5 }
28 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Classe Conta.
Coesão sequencial
Java
29 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
1
2 public class ServicoBilhetagem {
3 public void capturarBilhete(String dados) {
4 Bilhete bilheteFormatado = formatarBilhete(dados);
5 Bilhete bilheteIdentificado = identificarBilhete(bilhe
6 salvarBilhete(bilheteIdentificado);
7 }
8 private Bilhete formatarBilhete(String dados) {
9 // formata o bilhete, extraindo os campos do texto rec
10 }
11 private Bilhete identificarBilhete(Bilhete bilhete) {
12 // gera o campo de identificação do bilhete baseado no
13 }
14 private void salvarBilhete(Bilhete bilhete) {
Classe ServicoBilhetagem.
Coesão funcional
30 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
FileOutputStream
Para a escrita de arquivos binários.
FileInputStream
Para a leitura desses arquivos.
FileReader
Para a leitura de arquivos texto.
FileWriter
Para a escrita desses arquivos.
31 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
O padrão Controlador
Um sistema interage com elementos externos, também conhecidos
como atores. Muitos desses elementos geram eventos que devem ser
capturados e processados, e gerar alguma resposta, seja ela interna ou
externa.
Exemplo
32 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
vendas dela.
Solução do Controlador
O padrão Controlador recomenda que a responsabilidade de receber um
evento de sistema e de coordenar a produção da sua resposta precisa
ser alocada a uma classe que represente uma das seguintes opções:
Opção 1
Opção 2
33 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Exemplo
34 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Atenção
Consequências do Controlador
Ao receber uma requisição, um módulo Controlador normalmente
coordena e controla os elementos responsáveis pela produção da
resposta. Imagine uma orquestra com um maestro e vários músicos. Ela
conta com um maestro (controlador) que comanda o momento em que
cada músico deve entrar em ação, mas ele mesmo não toca nenhum
instrumento.
35 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
36 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Coesão de módulos de software
No vídeo a seguir, abordaremos a importância de se produzir módulos
com coesão alta e os principais tipos de coesão.
37 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Questão 1
38 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
39 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Questão 2
40 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
41 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Atenção
42 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
43 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
44 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Acoplamento de conteúdo
Java
45 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
1
2 public class Data {
3 public int dia;
4 public int mes;
5 public int ano;
6
7 public int getDiaSemana() {
8 // implementação para retornar o dia da semana corresp
9 }
10 public adicionaDias(int dias) {
11 // implementação para adicionar x dias à data
12 }
13 }
14
Acoplamento global
Java
46 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Java
1
2 public class Globais {
3 public static int limiteParaSaque = 500;
4 public static String nomeBanco;
5 }
6
7 public class ModuloA {
8 public void operacaoA() {
9 if (valor <= Globais.limiteParaSaque) {
10 System.out.println(“valor dentro do limite”);
11 }
12 }
13 }
14
Acoplamento externo
47 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Primeira situação
Segunda situação
Acoplamento de controle
48 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Java
1
2 public class ProdutoRepository {
3 public static final int ARQUIVO_LOCAL = 1;
4 public static final int ARQUIVO_FTP = 2;
5 public static final int BANCO_RELACIONAL = 3;
6
7 public Produto obterProduto(int origem, String chave) {
8 switch (origem) {
9 case ARQUIVO_LOCAL:
10 return obterProdutoViaArquivoLocal (chave);
11 case ARQUIVO_FTP:
12 return obterProdutoViaArquivoFTP (chave);
13 case BANCO_RELACIONAL:
14 return obterProdutoViaBancoRelacional (chave);
49 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Acoplamento de estrutura
Java
1
2 public class Pedido {
3 private Date data;
4 private int local;
5 private List<ItemPedido> itens;
6 private Cliente cliente;
7 private Endereco enderecoEntrega;
8 private Pagamento;
9
10 // restante da classe Pedido
11 }
12
13 public class CalculadoraFrete {
14 public BigDecimal obterValorFrete(Pedido pedido) {
50 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Acoplamento de dados
Java
1
2 public class Pedido {
3 private Date data;
4 private int local;
5 private List<ItemPedido> itens;
6 private Cliente cliente;
7 private Endereco enderecoEntrega;
8 private Pagamento pagamento;
9
10 // restante da classe Pedido
11 }
12
13 public class CalculadoraFrete {
14
51 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Heurística 1
Heurística 2
Heurística 3
52 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Um método de�nido em X
invoca operações de�nidas
em Y (operações com
escopo de classe).
Um método de�nido em X
utiliza uma instância de Y,
seja ela criada localmente
no método, recebida como
53 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
X é descendente (herda
direta ou indiretamente) de
Y.
Y é uma interface, e X a
implementa.
54 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Atenção
O padrão Polimor�smo
Suponha que você esteja implementando os requisitos de pagamento
em cartão de uma loja on-line. Para implementar um pagamento em
cartão que interaja diretamente com uma administradora de cartão, é
preciso passar por um longo e complexo processo de homologação
perante a administradora. Imagine então realizar esse processo com
cada uma!
Comentário
Agora imagine que você seja o responsável por fornecer uma solução de
sistema para diferentes lojistas que podem escolher os brokers de
pagamento em função das suas exigências de segurança, preço e
volume de transações, entre outros fatores de influência. Isso significa
55 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Java
1
2 public class FechamentoPedido {
3 private ConfiguracaoSistema config;
4
5 public FechamentoPedido(ConfiguracaoSistema config) {
6 this.config = config;
7 }
8
9 public BigDecimal fecharPedido(Pedido pedido) {
10 if (config.brokerPagamento == ConfiguracaoSistema.BROK
11 config.broker1.efetuarPagamento_Broker1();
12 else if (config.brokerPagamento == ConfiguracaoSistema
13 config.broker2.efetuarPagamento_Broker2();
14 else if (config.brokerPagamento == ConfiguracaoSistema
Classe FechamentoPedido.
56 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
seguintes problemas:
Como produzir uma solução genérica para alternativas baseadas no tipo
de um elemento criando módulos plugáveis?
Como evitar construções condicionais complexas contendo um código
condicional baseado no tipo do objeto ou em alguma propriedade
específica?
Comentário
Solução do Polimor�smo
Você percebeu como a solução baseada em estruturas condicionais do
tipo if-then-else ou switch-case, além de ser mais complexa, cria um
acoplamento do módulo chamador com cada implementação
específica? Note como a classe FechamentoPedido depende
diretamente de todas as implementações de broker de pagamento. Você
se lembra de que um princípio geral de bons projetos orientados a
objetos é haver implementações dependentes de abstrações,
especialmente em casos nos quais essas abstrações possam ter várias
implementações?
57 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Java
1
2 public interface BrokerPagamento {
3 void efetuarPagamento(Pedido pedido);
58 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
4 }
5
6 public class Broker_1_Adapter implements BrokerPagamento {
7 private Broker1 broker1 = new Broker1();
8 public void efetuarPagamento(Pedido pedido) {
9 // código específico para utilização do broker 1
10 broker1.efetuarPagamento_Broker1();
11 }
12 }
13
14 public class Broker_2_Adapter implements BrokerPagamento {
Criação de adaptadores
59 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Implementação da operação
efetuarPagamento
Dica
60 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Consequências do Polimor�smo
O Polimorfismo é um princípio fundamental em projetos de software
orientados a objetos que nos ajuda a resolver, de forma sintética,
elegante e flexível, o problema de se lidar com variantes de
implementação de uma mesma operação conceitual. O conceito dele
está presente na definição de diversos padrões GoF. Listaremos alguns
deles a seguir:
• Adapter;
• Command;
• Composite;
• Proxy;
• State;
• Strategy;
61 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
62 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Questão 1
63 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Questão 2
64 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
65 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
66 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Solução da Invenção
67 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Java
1
2 public class Pedido {
3 private int numero;
4 private java.util.Date data;
5 private List<ItemPedido> itens;
6
7 public BigDecimal obterValorTotal() {
8 BigDecimal resultado = new BigDecimal(0);
9 itens.forEach(item -> {
10 resultado.add(item.obterValor());
11 });
12 return resultado;
13 }
14 public int getNumero() {
Classe Pedido.
68 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Exemplo
69 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
O padrão Indireção
Indireção é uma das técnicas mais simples e mais utilizadas em
projetos de software. Ela pode ser utilizada em diversas situações.
70 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Abstração de tecnologia
Redução de acoplamento
71 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Solução da Indireção
A solução proposta pelo padrão Indireção consiste em substituir a
conexão direta entre dois ou mais objetos por uma estrutura de
comunicação mediada por um objeto intermediário. Assim, se um objeto
A enviar uma mensagem diretamente para B, ele passará a mandá-la
para um objeto intermediário X, o qual, por sua vez, fica responsável pela
comunicação com B.
72 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Abstração de tecnologia
Redução de acoplamento
73 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Consequências da Indireção
Indireção é um princípio fundamental muito utilizado em padrões de
projeto.
74 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Atenção
Resposta
75 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
76 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Regras de negócio
Java
1
2 public class ServicoFechamentoPedido {
3 private PedidoRepository;
4
5 public ServicoFechamento(PedidoRepository repository) {
77 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
78 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Relacional
Como Oracle, Microsoft SQL Server e MySQL.
NoSQL
Como MongoDB, Redis e Cassandra.
Java
79 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
1
2 public class ServicoFechamentoPedido {
3 private PedidoRepository pedidoRepository;
4
5 public ServicoFechamento(PedidoRepository repository) {
6 this.pedidoRepository = repositor;
7 }
8
9 public fecharPedido(Pedido pedido) {
10 ...
11 pedidoRepository.inserirPedido(pedido);
12 ...
13 }
14 }
Atenção
80 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Atenção
Padrão GRASP Indireção
No vídeo a seguir, abordaremos a aplicação do padrão Indireção.
81 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
82 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Questão 1
83 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Especialista na Informação.
Questão 2
84 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
B
com o propósito de reduzir o acoplamento entre
eles.
85 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Considerações �nais
Neste conteúdo, verificamos como os padrões GRASP podem ser
utilizados para distribuir as responsabilidades do sistema entre as
classes com o propósito de gerar uma solução com módulos mais
coesos e menos acoplados. Vimos ainda que o padrão Especialista na
Informação estabelece uma heurística simples de atribuição de
responsabilidade baseada no conhecimento que cada classe possui.
86 of 89
04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Podcast
Ouça o podcast. Nele, falaremos da importância do padrão GRASP e das
principais dificuldades enfrentadas para a sua aplicação.
Explore +
Para saber mais sobre a programação orientada a objetos, acesse o site
da DevMedia e leia este artigo: Utilização dos princípios Solid na
aplicação de padrões de projeto. Consultado na internet em: 18 out.
2021.
87 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
Referências
GAMMA, E. et al. Design patterns: elements of reusable object-oriented
software. 1. ed. Boston: Addison-Wesley, 1994.
Download material
Relatar problema
88 of 89 04/04/2024, 09:51
Padrões GRASP https://stecine.azureedge.net/repositorio/00212ti/02686/index.html#
89 of 89 04/04/2024, 09:51