Modulo II Padrões GRASP



Documentos relacionados
Modulo I Princípios e Padrões de Projeto de SW em Java

Padrões de Projeto de Software

Módulo I Princípios e Padrões de Projeto de SW em Java

Módulo III Padrões GOF: Bridge

Módulo III Padrões GOF: Iterator

Módulo III Padrões GOF

Padrões para atribuir responsabilidades: Expert

Proporcionar a modelagem de sistemas utilizando todos os conceitos da orientação a objeto;

Análise e Projeto Orientados por Objetos

INF1013 MODELAGEM DE SOFTWARE

Módulo III Padrões GOF-VI: MVC

1.1. Definição do Problema

Introdução a Padrões, GRASP. Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Modulo II Tópicos em Java - Ant

Análise Orientada a Objetos

Padrões de Projeto. Factory Method

Programação de Computadores - I. Profª Beatriz Profº Israel

GRASP. Nazareno Andrade (baseado em Hyggo Almeida e Jacques Sauvé)

UML & Padrões Aula 7. UML & Padrões - Profª Kelly C C Silva

GRASP: PADRÕES PARA ATRIBUIÇÃO DE RESPONSABILIDADES. SSC 124 Análise e Projeto Orientado a Objeto Profa. Dra. Elisa Yumi Nakagawa

Algoritmos e Programação II

Banco de Dados. Modelo Entidade Relacionamento Estendido DCC IME USP. João Eduardo Ferreira Osvaldo Kotaro Takai Marcelo Finger

Modem e rede local Guia do usuário

- Campus Salto. Disciplina: Sistemas de Arquivos Docente: Fernando Santorsula

Padrões GRASP. Leonardo Gresta Paulino Murta

Orientação a Objetos

Padrões de Projeto. Conteúdo. Objetivos

Herança. Prof. Leonardo Barreto Campos 1

ANÁLISE E PROJETO ORIENTADO A OBJETO (Parte 3)

AUTOMAÇÃO COMERCIAL UNIDADE VI

DIVISÃO DE ASSUNTOS ACADÊMICOS Secretaria Geral de Cursos PROGRAMA DE DISCIPLINA

3. Numerar a coluna da direita conforme a da esquerda 1) Classe (2) :Aluno 2) Um dado objeto (3) oaluno:aluno 3) Objeto (1) Aluno

Representatividade das MPEs:

Como as provas discursivas são corrigidas

Padrões de Projeto de Software

Seis Sigma em Serviços - 2. desafios e adequações necessárias

Exercícios. Tópico: Cliente e grupos de clientes

Ementa 22/08/2012. Teoria Geral de Sistemas. TADS 2. Semestre Prof. André Luís. Aula 01. Apresentação da Disciplina Conceito de Sistemas

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Programação Orientada a Objetos

INSTITUTO NACIONAL DE PESQUISAS ESPACIAIS - INPE

CRM: Mais que Tecnologia

Análise de Sistemas Informáticos FREQUÊNCIA 14JUN2002

Modelagem de Dados com UML. Modelagem de Dados com UML. Modelagem de Dados com UML. Modelagem de Dados com UML. Diagrama de Classes

Métodos Quantitativos Aplicados

3 Informações para Coordenação da Execução de Testes

PROGRAMAÇÃO ORIENTADA A OBJETO INTRODUÇÃO

Programação Orientada a Objetos. Professor Leonardo Cabral - Larback

Tutorial de utilização do Sistema E-CONTROLE. Maio 2013

OBSERVAÇÕES: EXERCÍCIOS

O que há de novo. Audaces Vestuário Versão Clube Audaces

3º Trabalho de GI Análise DFD

LINHAS MESTRAS; FASES; DISCIPLINAS; PRINCÍPIOS E MELHORES PRÁTICAS.

Processo de Desenvolvimento de Software

5 - Qual é a principal vantagem de desenvolvimento de código por pares:

Sistemas de Informação para Bibliotecas

Dado, informação, conhecimento e inteligência

O Segredo De Como colocar links externos no Youtube e Aumentar sua taxa de conversão em 1000%

7. Defina encapsulamento. R.: Encapsular é ocultar. Criar uma cápsula ao redor da classe, para proteger o que está dentro dela.

que não torne uma variável básica negativa. Se esse valor for infinito, o PL é ilimitado. Caso contrário, escolha uma variável

Projeto Orientado a Objetos

NORMA TÉCNICA E PROCEDIMENTOS PARA REALIZAR ALTERAÇÕES NO BANCO DE DADOS CORPORATIVO

Social Media. é tudo uma questão de relacionamento

UNIPAC Araguari FACAE - Faculdade de Ciências Administrativas e Exatas SISTEMAS DE INFORMAÇÃO

ção a Objetos em Java

PROJETO DE ARQUITETURA

Desenho de Símbolos, Logotipos e Logomarcas com Software Livre. Introdução ao curso

Lista de exercícios de UML

Refatoração Melhorando o sistema e preparando pra a Web

Linguagens de Programação:

INTEGRAÇÃO JAVA COM ARDUINO

ADMINISTRAÇÃO DE MATERIAIS GESTÃO

SUMÁRIO PARTE I. Princípios de Projeto, a Linguagem de Modelagem Unificada (Unified Modeling Language, ou UML) e Projeto em Nível de Código

Linguagens e Técnicas de Programação II

Bem-vindo ao tópico sobre conceitos de determinação de preços.

Análise e Projeto de Sistemas OO

Modelo Entidade Relacionamento (MER)

Projeto da Camada de Domínio. Diagramas de Colaboração/Comunicação Diagrama de Classes de Projeto (DCP)

INTRODUÇÃO. HowTO: How TO: Recuperar s com o Veeam Explorer for Microsoft Exchange (gratuito)

Programação em JAVA. Subtítulo

Ref: Observatório Nacional de Clima e Saúde Projeto Observatorium.

Resumo Aula-tema 07: Desbravando o Mundo Digital

Correlação e Regressão linear simples

Trabalho sobre Topologia de Redes

UTILIZAÇÃO DE ARQUITETURA EM CAMADAS BASEADA NO MODEL VIEW CONTROLLER, EM APLICAÇÕES WEB

Plano da Apresentação. Correlação e Regressão linear simples. Correlação linear. Associação entre hábitos leitura e escolaridade.

BOLONHA: GRANDES NÚMEROS ESTUDO 1

Diagramas de Sequência

ATIVIDADES PRÁTICAS SUPERVISIONADAS

MODELAGEM MATEMÁTICA DE UM SISTEMA DE DISTRIBUIÇÃO DE ENERGIA ELÉTRICA EM MÉDIA TENSÃO 1. Gabriel Attuati 2, Paulo Sausen 3.

Geração de Nota Fiscal Eletrônica de Serviço (06085)

Redes de Computadores I

Rede Local - Administração Políticas de Backup, Redundância e Fiabilidade

Manual do Usuário SISCOLE - Sistema de Cadastro de Organismos e Laboratórios Estrangeiros

Transcrição:

Modulo II Padrões GRASP Professores Eduardo Bezerra edubezerra@gmail.com Ismael H F Santos ismael@tecgraf.puc-rio.br April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 1 Ementa Padrões de Projeto GRASP Padrões GRASP High Coesion Low Coupling Expert Creator Controller Outros Padrões Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 2 1

Bibliografia Craig Larman, Utilizando UML e Padrões, Ed Bookman Eric Gamma, et ali, Padrões de Projeto, Ed Bookman Martin Fowler, Analysis Patterns - Reusable Object Models, Addison-Wesley,1997 Martin Fowler, Refatoração - Aperfeiçoando o projeto de código existente, Ed Bookman Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 3 Livros Core Java 2, Cay S. Horstmann, Gary Cornell Volume 1 (Fundamentos) Volume 2 (Características Avançadas) Java: Como Programar, Deitel & Deitel Thinking in Patterns with JAVA, Bruce Eckel Gratuito. http://www.mindview.net/books/tij/ Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 4 2

POO-Java Padrões GRASP Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 5 Padrões GRASP GRASP: General Responsibility Assignment Software Patterns. Padrões de análise catalogados por Craig Larman. Indicam como atribuir responsabilidades a classes da melhor forma possível. Úteis na construção de diagramas de interações diagramas de classes Alguns padrões GRASP: Expert, Creator, High Coesion, Low Coupling, Controller. Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 6 3

POO-Java High Coesion Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 7 High Coesion (Coesão Alta) A coesão é uma medida do quão fortemente relacionadas e focalizadas são as responsabilidades de uma classe. Uma classe com baixa coesão: faz muitas coisas não-relacionadas executa trabalho demais. Classes não coesas são: difíceis de compreender difíceis de reutilizar difíceis de manter sensíveis a mudanças. Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 8 4

High Coesion (Coesão Alta) É extremamente importante assegurar que as responsabilidades atribuídas a cada classe sejam altamente relacionadas. Em um bom projeto OO, cada classe não deve fazer muito trabalho. cada classe deve capturar apenas uma abstração. Como perceber que a coesão de uma classe está baixa? Quando alguns atributos começam a depender de outros. Quando há subgrupos de atributos correlacionados na classe. Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 9 POO-Java Low Coupling Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 10 5

Low Coupling (Acoplamento Fraco) O acoplamento é uma medida de quão fortemente uma classe está conectada a outras classes, tem conhecimento das mesmas ou depende delas. Uma classe com baixo (fraco) acoplamento não depende de muitas outras. Uma classe com acoplamento forte é: mais difícil de compreender isoladamente mais difícil de reutilizar (seu uso depende da reutilização das outras classes da qual ela depende) sensível a mudanças nas classes associadas. Sempre que possível, evite que o envio de mensagens implique na criação de associações redundantes no modelo. Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 11 Low Coupling (Acoplamento Fraco) Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 12 6

Low Coupling (Acoplamento Fraco) No slide anterior: Que configuração de classes é melhor? Por que? Aspectos gerais: Qual a relação do conceito de acoplamento com os objetos de controle em um caso de uso? Quais propriedades de um produto de software estão relacionadas com esse conceito de acoplamento? Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 13 POO-Java Expert Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 14 7

Expert É o padrão mais usado para atribuir responsabilidades Problema: dado um comportamento (responsabilidade) a qual classe essa responsabilidade deve ser alocada? Solução: atribuir essa responsabilidade ao especialista da informação a classe que tem a informação necessária para satisfazer a responsabilidade. Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 15 Expert Exemplo: Caso de uso registrar venda, foi identificada a responsabilidade do sistema gerar o total da venda. Que classe deve assumir essa responsabilidade? Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 16 8

Expert A informação necessária para uma tarefa computacional freqüentemente está espalhada por vários objetos. Portanto, há muitos experts parciais Exemplo: determinar o total de uma venda requer a colaboração de 3 objetos, em 3 classes diferentes. Neste caso mensagens são usadas para estabelecer as colaborações Note que, com o uso do padrão Expert o encapsulamento das classes é mantido, já que: objetos usam sua própria informação para cumprir suas responsabilidades ou enviam mensagens a seus colaboradores para obter informações que não possuem Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 17 Expert Um aspecto importante a notar é que a atribuição de responsabilidades muitas vezes não tem correspondente no mundo real. Por exemplo, no mundo real, uma venda não calcula seu próprio total Isso seria feito por uma pessoa (se não houvesse software) Mas no mundo OO: Entidades inertes (como produtos) ou até conceitos (como uma venda) podem ter responsabilidades Personificação dos objetos: objetos estão vivos! Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 18 9

POO-Java Creator Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 19 Creator Problema: quem deve ser o responsável por criar instâncias de uma determinada classe? Solução: um objeto deve ser criado por outro que o possua como parte (agregação) ou esteja fortemente associado a ele. Para identificar o criador de um objeto A, verifique: se o objeto A é parte em um relacionamento todo/parte; normalmente o todo é o responsável pela criação de A. se algum outro objeto tem uma associação de um para muitos, onde A é o lado muitos. se o objeto A está associado ao objeto de controle. se alguma classe tem dados necessários à inicialização de A. Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 20 10

Creator Exemplo: Quem deve criar objetos ItemVenda? Quem deve criar objetos Pagamento? Quem deve criar objetos Venda? Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 21 Creator É mais adequado escolher criador que estará conectado ao objeto criado, de qualquer forma, depois da criação. Isso leva ao acoplamento baixo, já que o objeto criado deve normalmente ser visível ao criador. Exemplo de criador que possui os valores de inicialização Uma instância de Pagamento deve ser criada A instância deve receber o total da venda Quem tem essa informação? Venda Venda é um bom candidato para criar objetos da classe Pagamento Creator é um caso particular de Expert Por que? Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 22 11

POO-Java Controller Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 23 Controller Problema: quem deveria ser responsável por tratar um evento do sistema? Solução: atribuir a responsabilidade do tratamento de um evento do sistema a uma classe que representa uma das seguintes escolhas: Representa o sistema todo (controlador fachada) Representa um tratador oficial de todos os eventos de sistema de um caso de uso (controlador de caso de uso) Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 24 12

POO-Java Outros Padrões Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 25 Outros padrões de análise Além dos padrões GRASP catalogados por Craig Larman, Martin Fowler escreveu um excelente livro sobre padrões de análise: Martin Fowler, Analysis Patterns - Reusable Object Models, Addison-Wesley,1997. Alguns padrões descritos no livro: Padrões de organizações e responsabilidades. Padrões de Observações e Medições Padrões de Observações para a Finanças Corporativas Padrões de Inventário e Contabilidade Padrões de Planejamento Padrões para o Comércio Padrões de Contratos de Derivativos Julho 06 Prof(s). Eduardo Bezerra & Ismael H. F. Santos 26 13