grasp patterns projetando objetos com responsabilidades

Download GRASP Patterns Projetando Objetos com Responsabilidades

Post on 07-Apr-2016

218 views

Category:

Documents

6 download

Embed Size (px)

TRANSCRIPT

  • GRASP PatternsProjetando Objetos com Responsabilidades

  • GRASPGeneral Responsibility Assignment Software Patterns

    Os padres GRASP fornecem uma abordagem sistemtica para a atribuio de responsabilidades s classes do projeto

  • GRASPQual a conexo entre Responsabilidades, GRASP e diagramas UML?A ocasio para considerar a atribuio de responsabilidades s classes durante a elaborao dos diagramas de seqncia

  • O que so padres?Importante: Padres tm nomesA expresso 'um novo padro' um paradoxoO livro da 'Gang of Four'

  • Os padres GRASPControllerCreator Information Expert Indirection Low CouplingHigh Cohesion Polymorphism Pure FabricationProtected Variations

  • O Criador

  • O Criador (Creator)Problema: Quem deve ser responsvel por criar uma nova instncia de uma classe?Soluo: Atribua classe B a responsabilidade de criar uma instncia de A se pelo menos um desses for verdadeiro (quanto mais melhor):B contm ou agrega AB registra a existncia de AB usa AB tem os dados necessrios para a inicializao de A que sero passados ao construtor de A

  • Exemplo: Jogo de Banco ImobilirioQuem deve criar os objetos correspondentes s peas do tabuleiro?

  • Exemplo: Jogo de Banco Imobilirioviso estticaviso dinmica

  • Outro exemplo: um ponto de vendaVantagens: LRG

    Contraindicaes : Criao de Objetos Complexos

  • O Especialista

  • O padro Especialista (Information Expert)Problema: Qual o princpio geral para a atribuio de responsabilidades aos objetos?

    Soluo: Atribua a responsabilidade ao especialista: a classe que tem as informaes necessrias para assumir a responsabilidade

  • Exemplo: O Banco ImobilirioQuem deve localizar uma posio do tabuleiro dada a sua identidade?

  • Exemplo: O ponto de vendaQuem deve ser responsvel por conhecer o total da venda?

  • Exemplo: O ponto de vendaQuem deve ser responsvel por conhecer o total da venda?

  • Exemplo: O ponto de vendaQuem deve ser responsvel por conhecer os subtotais?

  • Exemplo: O ponto de vendaQuem deve ser responsvel por conhecer o preo de cada item de venda?

  • Exemplo: O ponto de venda

  • O padro Especialista (Information Expert)Benefcios: O encapsulamento da informao mantido uma vez que os objetos usam seus prprios dados para realizar as tarefas.Isto normalmente leva a um baixo acoplamento entre as classes.O comportamento do sistema distribudo entre as classes que tm as informaes, encorajando a definio de classes mais "leves", mais fceis de entender e de manter.Contraindicaes : Em algumas situaes, a soluo sugerida pelo especialista pode ser indesejada. (Quem deve persistir uma venda no banco?)

  • Baixo Acoplamento

  • Baixo AcoplamentoProblema: Como prover baixa dependncia entre classes, reduzir o impacto de mudanas e obter alta reutilizao?

    Soluo: Atribua as responsabilidades de modo que o acoplamento entre classes permanea baixo. Use este princpio para avaliar alternativas.

  • Exemplo: O Banco ImobilirioPergunta: Por que o Tabuleiro e no um cachorro?

  • Baixo AcoplamentoPonto Chave: O Especialista favorece o Baixo AcoplamentoRetornando motivao do especialista: ele nos conduz a solues que favorecem o baixo acoplamento. O especialista nos pede que encontremos o objeto que tem a maior parte da informao necessria 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 informaes tero de ser compartilhadas entre os objetos.

  • Outro Exemplo: O ponto de vendaSuponha que temos de criar um objeto pagamento e associ-lo venda. Que classe deve ser responsvel por isso?1 alternativa2 alternativa

  • Acoplamento entre classesa) A ClasseA tem um atributo do tipo ClasseB

  • Acoplamento entre classesb) A ClasseA tem um mtodo que, de alguma forma, referencia uma instncia de ClasseB. Tipicamente, esta referncia se d atravs de um parmetro ou varivel local do tipo ClasseB ou por um objeto do tipo ClasseB retornado pela chamada de algum mtodo

  • Acoplamento entre classesc) A ClasseA uma subclasse de ClasseB

  • Acoplamento entre classesd) A ClasseB uma interface e a ClasseA implementa esta interface

  • Acoplamento entre classesDiscusso:Classes que, por natureza, so genricas e que tm alta probabilidade de reutilizao deveriam ter acoplamento baixoO caso extremo do baixo acoplamento o no acoplamento: contraria o princpio da orientao a objetos: objetos conectados, trocando mensagens entre si.O acoplamento alto no o problema em si. O problema o acoplamento a classes que, de alguma forma so instveis: sua interface, sua implementao ou sua mera presena.

  • O Controlador

  • O ControladorProblema: Que objeto, fora da camada de apresentao, deve receber e coordenar a solicitao da execuo de uma operao?

  • O princpio da separao Modelo-VistaO princpio da separao Modelo-Vista pode ser enunciado em duas partes:No conecte diretamente objetos pertencentes interface com o usurio (a vista) com objetos no pertencentes interface com o usurio (IU). No coloque lgica da aplicao (tal como o clculo de impostos) nos mtodos dos objetos da IU

  • O princpio da separao Modelo-VistaA motivao para a separao Modelo-Vista inclui:Suportar a criao de classes de negcio coesas, com foco nos processos do domnio ao invs de na interface com o usurio.Permitir o desenvolvimento separado das camadas de apresentao e negcio.Minimizar o impacto na camada de negcio das alteraes nos requisitos da interface com o usurio.

  • O princpio da separao Modelo-VistaPermitir que novas vistas sejam facilmente conectadas aos objetos de negcio existentes, sem afetar a camada de negcios.Permitir a existncia de mltiplas vistas simultneas para uma mesma camada de negcios (por exemplo, a visualizao de dados de vendas na forma tabular ou atravs de um grfico de pizzas)A motivao para a separao Modelo-Vista inclui:

  • O objeto ControladorO objeto Controlador responde a uma questo bsica no projeto de sistemas OO: Como conectar a camada de apresentao camada da lgica do negcio?

  • O objeto ControladorO controlador o primeiro objeto fora da camada de interface com o usurio a receber ou tratar uma mensagem para o sistema.Existem duas alternativas possveis para o objeto controlador:Um objeto Controlador para todo o sistemaUm objeto Controlador por Caso de Uso (ou por cenrio de Caso de Uso)

  • O objeto ControladorOs benefcios do padro controlador so:

    Diminui a sensibilidade da camada de apresentao em relao lgica de domnio

    Oportunidade para controlar o estado do caso de uso

  • Exemplo: Ponto de Venda

  • Coeso Alta

  • Coeso Alta Problema: Como manter os objetos focados, compreensveis, gerenciveis e, em conseqncia, com Baixo Acoplamento?Soluo: Atribua responsabilidades de modo que a coeso da classe permanea alta. Use esse critrio para avaliar alternativas

  • Coeso Alta

  • CoesoUma classe com baixa coeso sofre dos seguintes problemas:difcil de compreenderdifcil de reutilizardifcil de manterfrgil; freqentemente tem de ser alterada

  • CoesoComo um princpio bsico, uma classe com alta coeso:tem um nmero relativamente pequeno de mtodos, a funcionalidade desses mtodos altamente relacionada, e no faz trabalho de mais.

  • Polimorfismo

  • PolimorfismoProblema: Como tratar alternativas baseadas no tipo? Como criar componentes de software "plugveis"?Soluo: Quando alternativas ou comportamentos relacionados variam com o tipo (classe), atribua as responsabilidades aos tipos usando operaes polimrficas.

  • Exemplo

  • O Banco ImobilirioComo projetar para acomodar as diferentes aes baseadas no tipo da posio do tabuleiro?

    Um mau projeto:

  • O Banco ImobilirioO comportamento esttico:

  • O Banco ImobilirioO comportamento dinmico:

  • O Banco ImobilirioO comportamento dinmico:

  • O Banco ImobilirioO comportamento dinmico:

  • O Banco ImobilirioO comportamento dinmico:

  • O Banco ImobilirioO comportamento dinmico:

  • Pure Fabrication (Pura Inveno)

  • Pure FabricationProblema: Que objeto deve ter a responsabilidade quando voc no quer violar "Alta Coeso" e "Baixo Acoplamento", mas as solues oferecidas pelo "Especialista" no so apropriadas?Soluo: Atribua um conjuto coeso de responsabilidades a uma classe artificial que no representa um conceito no domnio da aplicao, uma classe fictcia que possibilite alta coeso, baixo acoplamento e o reuso.

  • Ponto de Venda: Salvar uma Venda no Banco de DadosO especialista nos diz para atribuir a responsabilidade classe Venda, uma vez que ela conhece os dados da venda. Considere no entanto as seguintes implicaes:Salvar um objeto no Banco de Dados implica em uma srie de operaes no relacionadas ao conceito de vendaA classe venda tem de ser associada interface do banco de dados relacional (JDBC, por exemplo)Vrias outras classes no projeto tero de fazer a mesma coisa.

  • Pure Fabrication

  • O Banco de Dados

  • Indireo

  • IndireoProblema: 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?Soluo: Atribua a responsabilidade a um objeto intermedirio que faa a mediao entre componentes ou servios de modo que eles no sejam diretamente acoplados.

  • IndireoExemplo: Indireo atravs de um adaptador

  • Indireo"A maior parte