SlideShare uma empresa Scribd logo
1 de 62
GRASP Patterns
Projetando Objetos com Responsabilidades
GRASP
• General Responsibility Assignment Software Patterns
• Os padrões GRASP fornecem uma abordagem
sistemática para a atribuição de responsabilidades às
classes do projeto
GRASP
• Qual é a conexão entre Responsabilidades, GRASP e
diagramas UML?
• A ocasião para considerar a atribuição de
responsabilidades às classes é durante a elaboração
dos diagramas de seqüência
O que são padrões?
• Importante: Padrões têm nomes
• A expressão 'um novo padrão' é um paradoxo
• O livro da 'Gang of Four'
Os padrões GRASP
• Controller
• Creator
• Information Expert
• Indirection
• Low Coupling
• High Cohesion
• Polymorphism
• Pure Fabrication
• Protected Variations
O Criador
O Criador (Creator)
Problema: Quem deve ser responsável por criar uma nova
instância de uma classe?
Solução: Atribua à classe B a responsabilidade de criar
uma instância de A se pelo menos um desses for
verdadeiro (quanto mais melhor):
• B contém ou agrega A
• B registra a existência de A
• B usa A
• B tem os dados necessários para a inicialização de A que
serão passados ao construtor de A
Exemplo: Jogo de Banco Imobiliário
Quem deve criar os objetos correspondentes às peças
do tabuleiro?
Exemplo: Jogo de Banco Imobiliário
visão estática
visão dinâmica
Outro exemplo: um ponto de venda
Vantagens: LRG
Contraindicações :
Criação de Objetos
Complexos
O Especialista
O padrão Especialista (Information Expert)
Problema: Qual é o princípio geral para a atribuição de
responsabilidades aos objetos?
Solução: Atribua a responsabilidade ao especialista: a
classe que tem as informações necessárias para assumir a
responsabilidade
Exemplo: O Banco Imobiliário
Quem deve localizar uma posição do tabuleiro dada a
sua identidade?
Exemplo: O ponto de venda
Quem deve ser responsável por conhecer o total da
venda?
Exemplo: O ponto de venda
Quem deve ser responsável por conhecer o total da
venda?
Exemplo: O ponto de venda
Quem deve ser responsável por conhecer os subtotais?
Exemplo: O ponto de venda
Quem deve ser responsável por conhecer o preço de
cada item de venda?
Exemplo: O ponto de venda
O padrão Especialista (Information Expert)
Benefícios:
O encapsulamento da informação é mantido uma vez que os
objetos usam seus próprios dados para realizar as tarefas.
Isto normalmente leva a um baixo acoplamento entre as classes.
O comportamento do sistema é distribuído entre as classes que
têm as informações, encorajando a definição de classes mais
"leves", mais fáceis de entender e de manter.
Contraindicações :
Em algumas situações, a solução sugerida pelo especialista
pode ser indesejada. (Quem deve persistir uma venda no
banco?)
Baixo Acoplamento
Baixo Acoplamento
Problema: Como prover baixa dependência entre classes,
reduzir o impacto de mudanças e obter alta reutilização?
Solução: Atribua as responsabilidades de modo que o
acoplamento entre classes permaneça baixo. Use este
princípio para avaliar alternativas.
Exemplo: O Banco Imobiliário
Pergunta: Por que o Tabuleiro e não um cachorro?
Baixo Acoplamento
Ponto Chave: O Especialista favorece o Baixo Acoplamento
Retornando à motivação do especialista: ele nos conduz a
soluções que favorecem o baixo acoplamento. O especialista
nos pede que encontremos o objeto que tem a maior parte da
informação necessária para assumir a responsabilidade (por
exemplo, o tabuleiro)
Se pusermos a responsabilidade em algum outro lugar qualquer
(por exemplo, o cachorro) o acoplamento global será maior
porque mais informações terão de ser compartilhadas entre os
objetos.
Outro Exemplo: O ponto de venda
Suponha que temos de criar um objeto pagamento e
associá-lo à venda. Que classe deve ser responsável por
isso?
1ª alternativa
2ª alternativa
Acoplamento entre classes
a) A ClasseA tem um atributo do tipo ClasseB
Acoplamento entre classes
b) A ClasseA tem um método que, de alguma forma,
referencia uma instância de ClasseB. Tipicamente, esta
referência se dá através de um parâmetro ou variável
local do tipo ClasseB ou por um objeto do tipo ClasseB
retornado pela chamada de algum método
Acoplamento entre classes
c) A ClasseA é uma subclasse de ClasseB
Acoplamento entre classes
d) A ClasseB é uma interface e a ClasseA implementa
esta interface
Acoplamento entre classes
Discussão:
• Classes que, por natureza, são genéricas e que têm alta
probabilidade de reutilização deveriam ter acoplamento
baixo
• O caso extremo do baixo acoplamento é o não
acoplamento: contraria o princípio da orientação a
objetos: objetos conectados, trocando mensagens entre
si.
• O acoplamento alto não é o problema em si. O problema
é o acoplamento a classes que, de alguma forma são
instáveis: sua interface, sua implementação ou sua mera
presença.
O Controlador
O Controlador
Problema: Que objeto, fora da camada de apresentação,
deve receber e coordenar a solicitação da execução de
uma operação?
O princípio da separação Modelo-Vista
O princípio da separação Modelo-Vista pode ser
enunciado em duas partes:
• Não conecte diretamente objetos pertencentes à
interface com o usuário (a vista) com objetos não
pertencentes à interface com o usuário (IU).
• Não coloque lógica da aplicação (tal como o cálculo
de impostos) nos métodos dos objetos da IU
O princípio da separação Modelo-Vista
A motivação para a separação Modelo-Vista inclui:
• Suportar a criação de classes de negócio coesas, com foco
nos processos do domínio ao invés de na interface com o
usuário.
• Permitir o desenvolvimento separado das camadas de
apresentação e negócio.
• Minimizar o impacto na camada de negócio das alterações
nos requisitos da interface com o usuário.
O princípio da separação Modelo-Vista
• Permitir que novas vistas sejam facilmente conectadas
aos objetos de negócio existentes, sem afetar a camada
de negócios.
• Permitir a existência de múltiplas vistas simultâneas para
uma mesma camada de negócios (por exemplo, a
visualização de dados de vendas na forma tabular ou
através de um gráfico de pizzas)
A motivação para a separação Modelo-Vista inclui:
O objeto Controlador
O objeto Controlador responde a uma questão básica no
projeto de sistemas OO: Como conectar a camada de
apresentação à camada da lógica do negócio?
O objeto Controlador
O controlador é o primeiro objeto fora da camada de interface
com o usuário a receber ou tratar uma mensagem para o
sistema.
Existem duas alternativas possíveis para o objeto controlador:
• Um objeto Controlador para todo o sistema
• Um objeto Controlador por Caso de Uso (ou por cenário
de Caso de Uso)
O objeto Controlador
Os benefícios do padrão controlador são:
• Diminui a sensibilidade da camada de apresentação
em relação à lógica de domínio
• Oportunidade para controlar o estado do caso de uso
Exemplo: Ponto de Venda
Coesão Alta
Coesão Alta
Problema: Como manter os objetos focados,
compreensíveis, gerenciáveis e, em conseqüência, com
Baixo Acoplamento?
Solução: Atribua responsabilidades de modo que a coesão
da classe permaneça alta. Use esse critério para avaliar
alternativas
Coesão Alta
Coesão
Uma classe com baixa coesão sofre dos seguintes
problemas:
• difícil de compreender
• difícil de reutilizar
• difícil de manter
• frágil; freqüentemente tem de ser alterada
Coesão
Como um princípio básico, uma classe com alta coesão:
• tem um número relativamente pequeno de métodos,
• a funcionalidade desses métodos é altamente
relacionada, e
• não faz trabalho de mais.
Polimorfismo
Polimorfismo
Problema: Como tratar alternativas baseadas no tipo? Como
criar componentes de software "plugáveis"?
Solução: Quando alternativas ou comportamentos
relacionados variam com o tipo (classe), atribua as
responsabilidades aos tipos usando operações polimórficas.
Exemplo
O Banco Imobiliário
Como projetar para acomodar as diferentes ações baseadas
no tipo da posição do tabuleiro?
Um mau projeto:
O Banco Imobiliário
O comportamento estático:
O Banco Imobiliário
O comportamento dinâmico:
O Banco Imobiliário
O comportamento dinâmico:
O Banco Imobiliário
O comportamento dinâmico:
O Banco Imobiliário
O comportamento dinâmico:
O Banco Imobiliário
O comportamento dinâmico:
Pure Fabrication (Pura Invenção)
Pure Fabrication
Problema: Que objeto deve ter a responsabilidade quando
você não quer violar "Alta Coesão" e "Baixo Acoplamento",
mas as soluções oferecidas pelo "Especialista" não são
apropriadas?
Solução: Atribua um conjuto coeso de responsabilidades a
uma classe artificial que não representa um conceito no
domínio da aplicação, uma classe fictícia que possibilite alta
coesão, baixo acoplamento e o reuso.
Ponto de Venda: Salvar uma Venda no Banco de
Dados
O especialista nos diz para atribuir a responsabilidade à
classe Venda, uma vez que ela conhece os dados da venda.
Considere no entanto as seguintes implicações:
• Salvar um objeto no Banco de Dados implica em uma série
de operações não relacionadas ao conceito de venda
• A classe venda tem de ser associada à interface do banco de
dados relacional (JDBC, por exemplo)
• Várias outras classes no projeto terão de fazer a mesma
coisa.
Pure Fabrication
O Banco de Dados
Indireção
Indireção
Problema: Onde colocar uma responsabilidade de modo a
evitar o acoplamento direto entre duas ou mais classes?
Como desacoplar objetos de modo a possibilitar o baixo
acoplamento e manter alta a possibilidade de reuso?
Solução: Atribua a responsabilidade a um objeto
intermediário que faça a mediação entre componentes ou
serviços de modo que eles não sejam diretamente
acoplados.
Indireção
Exemplo: Indireção através de um adaptador
Indireção
"A maior parte dos problemas em Ciência da Computação
pode ser resolvida por um nível adicional de indireção"
Velho provérbio com especial relevância para
sistemas orientados a objetos
"A maior parte dos problemas de desempenho pode ser resolvida removendo-se algumas camadas de indireção"

Mais conteúdo relacionado

Mais procurados

Segurança de redes - Conceitos de firewall
Segurança de redes - Conceitos de firewall Segurança de redes - Conceitos de firewall
Segurança de redes - Conceitos de firewall Cleber Ramos
 
Gerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUGerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUAlexandre Duarte
 
Ameaças e riscos da internet -Segurança da informação
Ameaças e riscos  da internet -Segurança da informaçãoAmeaças e riscos  da internet -Segurança da informação
Ameaças e riscos da internet -Segurança da informaçãoSthefanie Vieira
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetossoncino
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de RequisitosCloves da Rocha
 
Sqlite - Introdução
Sqlite - IntroduçãoSqlite - Introdução
Sqlite - IntroduçãoJoao Johanes
 
Arquitetura e Organização de Computadores: Introdução
Arquitetura e Organização de Computadores: IntroduçãoArquitetura e Organização de Computadores: Introdução
Arquitetura e Organização de Computadores: IntroduçãoWellington Oliveira
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockWellington Oliveira
 
Revolução Francesa e Império Napoleônico
Revolução Francesa e Império NapoleônicoRevolução Francesa e Império Napoleônico
Revolução Francesa e Império NapoleônicoElton Zanoni
 
Pipeline Técnica de processadores.
Pipeline Técnica de processadores.Pipeline Técnica de processadores.
Pipeline Técnica de processadores.Cleber Ramos
 
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~Preferred Networks
 
ApresentaçãO Tipos De Memorias
ApresentaçãO  Tipos De MemoriasApresentaçãO  Tipos De Memorias
ApresentaçãO Tipos De Memoriasecompo
 
Sistemas Informaticos
Sistemas InformaticosSistemas Informaticos
Sistemas Informaticosguest946ee6d
 
Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidorMarcia Abrahim
 
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory EngineRedis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory EngineScaleGrid.io
 
Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)
Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)
Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)Leinylson Fontinele
 
Dispositivos Ativos e Passivos
Dispositivos Ativos e PassivosDispositivos Ativos e Passivos
Dispositivos Ativos e PassivosRikelmo19
 
Aprendizagem por reforço
Aprendizagem por reforçoAprendizagem por reforço
Aprendizagem por reforçoLuís Nunes
 

Mais procurados (20)

Segurança de redes - Conceitos de firewall
Segurança de redes - Conceitos de firewall Segurança de redes - Conceitos de firewall
Segurança de redes - Conceitos de firewall
 
Gerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUGerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPU
 
Ameaças e riscos da internet -Segurança da informação
Ameaças e riscos  da internet -Segurança da informaçãoAmeaças e riscos  da internet -Segurança da informação
Ameaças e riscos da internet -Segurança da informação
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetos
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 
Sqlite - Introdução
Sqlite - IntroduçãoSqlite - Introdução
Sqlite - Introdução
 
Arquitetura e Organização de Computadores: Introdução
Arquitetura e Organização de Computadores: IntroduçãoArquitetura e Organização de Computadores: Introdução
Arquitetura e Organização de Computadores: Introdução
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 Deadlock
 
Revolução Francesa e Império Napoleônico
Revolução Francesa e Império NapoleônicoRevolução Francesa e Império Napoleônico
Revolução Francesa e Império Napoleônico
 
Pipeline Técnica de processadores.
Pipeline Técnica de processadores.Pipeline Técnica de processadores.
Pipeline Técnica de processadores.
 
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
 
ApresentaçãO Tipos De Memorias
ApresentaçãO  Tipos De MemoriasApresentaçãO  Tipos De Memorias
ApresentaçãO Tipos De Memorias
 
Sistemas Informaticos
Sistemas InformaticosSistemas Informaticos
Sistemas Informaticos
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidor
 
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory EngineRedis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
Redis vs. MongoDB: Comparing In-Memory Databases with Percona Memory Engine
 
Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)
Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)
Introdução à computação - Aula 11 - Banco de Dados (Definições gerais, SGBD)
 
Dispositivos Ativos e Passivos
Dispositivos Ativos e PassivosDispositivos Ativos e Passivos
Dispositivos Ativos e Passivos
 
Aula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLiteAula 06 - TEP - Introdução SQLite
Aula 06 - TEP - Introdução SQLite
 
Aprendizagem por reforço
Aprendizagem por reforçoAprendizagem por reforço
Aprendizagem por reforço
 

Semelhante a Projetando com GRASP e padrões de responsabilidade

Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosEvandro Agnes
 
As vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projetoAs vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projetoGabriel Galdino
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.pptssuser7025cf
 
Projeto e Implementação de Software Utilizando Padrões
Projeto e Implementação de Software Utilizando PadrõesProjeto e Implementação de Software Utilizando Padrões
Projeto e Implementação de Software Utilizando PadrõesAntonio Passos
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Taller Negócio Digitais
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: ClassesInael Rodrigues
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5oliveiraprog
 

Semelhante a Projetando com GRASP e padrões de responsabilidade (20)

Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetos
 
As vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projetoAs vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projeto
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
 
Projeto e Implementação de Software Utilizando Padrões
Projeto e Implementação de Software Utilizando PadrõesProjeto e Implementação de Software Utilizando Padrões
Projeto e Implementação de Software Utilizando Padrões
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
 
Sld 4
Sld 4Sld 4
Sld 4
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
Aula1
Aula1Aula1
Aula1
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5
 
Naked Objects
Naked ObjectsNaked Objects
Naked Objects
 

Mais de evandro163685

Mais de evandro163685 (10)

verbos modais.ppt
verbos modais.pptverbos modais.ppt
verbos modais.ppt
 
TEORIA-DA-COMUNICAÇÃO.ppt
TEORIA-DA-COMUNICAÇÃO.pptTEORIA-DA-COMUNICAÇÃO.ppt
TEORIA-DA-COMUNICAÇÃO.ppt
 
2301.ppt
2301.ppt2301.ppt
2301.ppt
 
###modal_verbs.ppt
###modal_verbs.ppt###modal_verbs.ppt
###modal_verbs.ppt
 
IN+4.ppt
IN+4.pptIN+4.ppt
IN+4.ppt
 
compreensao_textual.ppt
compreensao_textual.pptcompreensao_textual.ppt
compreensao_textual.ppt
 
Redação-aula-2-1.pdf
Redação-aula-2-1.pdfRedação-aula-2-1.pdf
Redação-aula-2-1.pdf
 
38566.pdf
38566.pdf38566.pdf
38566.pdf
 
SLIDES-Tipo-textual-DISSERTATIVO.pdf
SLIDES-Tipo-textual-DISSERTATIVO.pdfSLIDES-Tipo-textual-DISSERTATIVO.pdf
SLIDES-Tipo-textual-DISSERTATIVO.pdf
 
Degrees of Adjectives.ppt
Degrees of Adjectives.pptDegrees of Adjectives.ppt
Degrees of Adjectives.ppt
 

Último

ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...licinioBorges
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxTainTorres4
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfEmanuel Pio
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfmaurocesarpaesalmeid
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 

Último (20)

ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdf
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 

Projetando com GRASP e padrões de responsabilidade

  • 1. GRASP Patterns Projetando Objetos com Responsabilidades
  • 2. GRASP • General Responsibility Assignment Software Patterns • Os padrões GRASP fornecem uma abordagem sistemática para a atribuição de responsabilidades às classes do projeto
  • 3. GRASP • Qual é a conexão entre Responsabilidades, GRASP e diagramas UML? • A ocasião para considerar a atribuição de responsabilidades às classes é durante a elaboração dos diagramas de seqüência
  • 4. O que são padrões? • Importante: Padrões têm nomes • A expressão 'um novo padrão' é um paradoxo • O livro da 'Gang of Four'
  • 5. Os padrões GRASP • Controller • Creator • Information Expert • Indirection • Low Coupling • High Cohesion • Polymorphism • Pure Fabrication • Protected Variations
  • 7. O Criador (Creator) Problema: Quem deve ser responsável por criar uma nova instância de uma classe? Solução: Atribua à classe B a responsabilidade de criar uma instância de A se pelo menos um desses for verdadeiro (quanto mais melhor): • B contém ou agrega A • B registra a existência de A • B usa A • B tem os dados necessários para a inicialização de A que serão passados ao construtor de A
  • 8. Exemplo: Jogo de Banco Imobiliário Quem deve criar os objetos correspondentes às peças do tabuleiro?
  • 9. Exemplo: Jogo de Banco Imobiliário visão estática visão dinâmica
  • 10. Outro exemplo: um ponto de venda Vantagens: LRG Contraindicações : Criação de Objetos Complexos
  • 12. O padrão Especialista (Information Expert) Problema: Qual é o princípio geral para a atribuição de responsabilidades aos objetos? Solução: Atribua a responsabilidade ao especialista: a classe que tem as informações necessárias para assumir a responsabilidade
  • 13. Exemplo: O Banco Imobiliário Quem deve localizar uma posição do tabuleiro dada a sua identidade?
  • 14. Exemplo: O ponto de venda Quem deve ser responsável por conhecer o total da venda?
  • 15. Exemplo: O ponto de venda Quem deve ser responsável por conhecer o total da venda?
  • 16. Exemplo: O ponto de venda Quem deve ser responsável por conhecer os subtotais?
  • 17. Exemplo: O ponto de venda Quem deve ser responsável por conhecer o preço de cada item de venda?
  • 18. Exemplo: O ponto de venda
  • 19. O padrão Especialista (Information Expert) Benefícios: O encapsulamento da informação é mantido uma vez que os objetos usam seus próprios dados para realizar as tarefas. Isto normalmente leva a um baixo acoplamento entre as classes. O comportamento do sistema é distribuído entre as classes que têm as informações, encorajando a definição de classes mais "leves", mais fáceis de entender e de manter. Contraindicações : Em algumas situações, a solução sugerida pelo especialista pode ser indesejada. (Quem deve persistir uma venda no banco?)
  • 21. Baixo Acoplamento Problema: Como prover baixa dependência entre classes, reduzir o impacto de mudanças e obter alta reutilização? Solução: Atribua as responsabilidades de modo que o acoplamento entre classes permaneça baixo. Use este princípio para avaliar alternativas.
  • 22. Exemplo: O Banco Imobiliário Pergunta: Por que o Tabuleiro e não um cachorro?
  • 23. Baixo Acoplamento Ponto Chave: O Especialista favorece o Baixo Acoplamento Retornando à motivação do especialista: ele nos conduz a soluções que favorecem o baixo acoplamento. O especialista nos pede que encontremos o objeto que tem a maior parte da informação necessária para assumir a responsabilidade (por exemplo, o tabuleiro) Se pusermos a responsabilidade em algum outro lugar qualquer (por exemplo, o cachorro) o acoplamento global será maior porque mais informações terão de ser compartilhadas entre os objetos.
  • 24. Outro Exemplo: O ponto de venda Suponha que temos de criar um objeto pagamento e associá-lo à venda. Que classe deve ser responsável por isso? 1ª alternativa 2ª alternativa
  • 25. Acoplamento entre classes a) A ClasseA tem um atributo do tipo ClasseB
  • 26. Acoplamento entre classes b) A ClasseA tem um método que, de alguma forma, referencia uma instância de ClasseB. Tipicamente, esta referência se dá através de um parâmetro ou variável local do tipo ClasseB ou por um objeto do tipo ClasseB retornado pela chamada de algum método
  • 27. Acoplamento entre classes c) A ClasseA é uma subclasse de ClasseB
  • 28. Acoplamento entre classes d) A ClasseB é uma interface e a ClasseA implementa esta interface
  • 29. Acoplamento entre classes Discussão: • Classes que, por natureza, são genéricas e que têm alta probabilidade de reutilização deveriam ter acoplamento baixo • O caso extremo do baixo acoplamento é o não acoplamento: contraria o princípio da orientação a objetos: objetos conectados, trocando mensagens entre si. • O acoplamento alto não é o problema em si. O problema é o acoplamento a classes que, de alguma forma são instáveis: sua interface, sua implementação ou sua mera presença.
  • 31. O Controlador Problema: Que objeto, fora da camada de apresentação, deve receber e coordenar a solicitação da execução de uma operação?
  • 32. O princípio da separação Modelo-Vista O princípio da separação Modelo-Vista pode ser enunciado em duas partes: • Não conecte diretamente objetos pertencentes à interface com o usuário (a vista) com objetos não pertencentes à interface com o usuário (IU). • Não coloque lógica da aplicação (tal como o cálculo de impostos) nos métodos dos objetos da IU
  • 33. O princípio da separação Modelo-Vista A motivação para a separação Modelo-Vista inclui: • Suportar a criação de classes de negócio coesas, com foco nos processos do domínio ao invés de na interface com o usuário. • Permitir o desenvolvimento separado das camadas de apresentação e negócio. • Minimizar o impacto na camada de negócio das alterações nos requisitos da interface com o usuário.
  • 34. O princípio da separação Modelo-Vista • Permitir que novas vistas sejam facilmente conectadas aos objetos de negócio existentes, sem afetar a camada de negócios. • Permitir a existência de múltiplas vistas simultâneas para uma mesma camada de negócios (por exemplo, a visualização de dados de vendas na forma tabular ou através de um gráfico de pizzas) A motivação para a separação Modelo-Vista inclui:
  • 35. O objeto Controlador O objeto Controlador responde a uma questão básica no projeto de sistemas OO: Como conectar a camada de apresentação à camada da lógica do negócio?
  • 36. O objeto Controlador O controlador é o primeiro objeto fora da camada de interface com o usuário a receber ou tratar uma mensagem para o sistema. Existem duas alternativas possíveis para o objeto controlador: • Um objeto Controlador para todo o sistema • Um objeto Controlador por Caso de Uso (ou por cenário de Caso de Uso)
  • 37. O objeto Controlador Os benefícios do padrão controlador são: • Diminui a sensibilidade da camada de apresentação em relação à lógica de domínio • Oportunidade para controlar o estado do caso de uso
  • 40. Coesão Alta Problema: Como manter os objetos focados, compreensíveis, gerenciáveis e, em conseqüência, com Baixo Acoplamento? Solução: Atribua responsabilidades de modo que a coesão da classe permaneça alta. Use esse critério para avaliar alternativas
  • 42. Coesão Uma classe com baixa coesão sofre dos seguintes problemas: • difícil de compreender • difícil de reutilizar • difícil de manter • frágil; freqüentemente tem de ser alterada
  • 43. Coesão Como um princípio básico, uma classe com alta coesão: • tem um número relativamente pequeno de métodos, • a funcionalidade desses métodos é altamente relacionada, e • não faz trabalho de mais.
  • 45. Polimorfismo Problema: Como tratar alternativas baseadas no tipo? Como criar componentes de software "plugáveis"? Solução: Quando alternativas ou comportamentos relacionados variam com o tipo (classe), atribua as responsabilidades aos tipos usando operações polimórficas.
  • 47. O Banco Imobiliário Como projetar para acomodar as diferentes ações baseadas no tipo da posição do tabuleiro? Um mau projeto:
  • 48. O Banco Imobiliário O comportamento estático:
  • 49. O Banco Imobiliário O comportamento dinâmico:
  • 50. O Banco Imobiliário O comportamento dinâmico:
  • 51. O Banco Imobiliário O comportamento dinâmico:
  • 52. O Banco Imobiliário O comportamento dinâmico:
  • 53. O Banco Imobiliário O comportamento dinâmico:
  • 54. Pure Fabrication (Pura Invenção)
  • 55. Pure Fabrication Problema: Que objeto deve ter a responsabilidade quando você não quer violar "Alta Coesão" e "Baixo Acoplamento", mas as soluções oferecidas pelo "Especialista" não são apropriadas? Solução: Atribua um conjuto coeso de responsabilidades a uma classe artificial que não representa um conceito no domínio da aplicação, uma classe fictícia que possibilite alta coesão, baixo acoplamento e o reuso.
  • 56. Ponto de Venda: Salvar uma Venda no Banco de Dados O especialista nos diz para atribuir a responsabilidade à classe Venda, uma vez que ela conhece os dados da venda. Considere no entanto as seguintes implicações: • Salvar um objeto no Banco de Dados implica em uma série de operações não relacionadas ao conceito de venda • A classe venda tem de ser associada à interface do banco de dados relacional (JDBC, por exemplo) • Várias outras classes no projeto terão de fazer a mesma coisa.
  • 58. O Banco de Dados
  • 60. Indireção Problema: Onde colocar uma responsabilidade de modo a evitar o acoplamento direto entre duas ou mais classes? Como desacoplar objetos de modo a possibilitar o baixo acoplamento e manter alta a possibilidade de reuso? Solução: Atribua a responsabilidade a um objeto intermediário que faça a mediação entre componentes ou serviços de modo que eles não sejam diretamente acoplados.
  • 62. Indireção "A maior parte dos problemas em Ciência da Computação pode ser resolvida por um nível adicional de indireção" Velho provérbio com especial relevância para sistemas orientados a objetos "A maior parte dos problemas de desempenho pode ser resolvida removendo-se algumas camadas de indireção"