Eng Soft

download Eng Soft

of 8

Transcript of Eng Soft

UNIVERSIDADE ESTADUAL DE MARING

UNIVERSIDADE ESTADUAL DE MARINGCENTRO DE CINCIAS EXATAS

DEPARTAMENTO DE INFORMTICAENGENHARIA DE SOFTWARE 2

DESCRIO DOS MTODOS DO PADRO GoF: FACADE E TEMPLATE METHODACADMICO(S): Marco Aurlio G. Tamiozzo RA 49308 Adriano Maldonado Mariano RA 62066

Matheus Antonio M. dos Santos RA 59701

TURMA: 31 PROFESSOR: Renato BalancieriMaring, 11 de Abril de 2013TEMPLATE METHOD1- INTENOUm Template Method auxilia na definio de um algoritmo com partes do mesmo definidos por Mtodo abstratos. As subclasses devem se responsabilizar por estas partes abstratas, deste algoritmo, que sero implementadas, possivelmente de vrias formas, ou seja, cada subclasse ir implementar sua necessidade e oferecer um comportamento concreto construindo todo o algoritmo.

O Template Method fornece uma estrutura fixa, de um algoritmo, esta parte fixa deve estar presente na superclasse, sendo obrigatrio uma classea abstrata que possa conter um mtodo concreto, pois em uma interface s possvel conter mtodos abstratos que definem um comportamento, esta a vantagem de ser uma Classe Abstrata porque tambm ir fornecer mtodos abstratos s suas subclasses, que por sua vez herdam este mtodo, por Herana (programao), e devem implementar os mtodos abstratos fornecendo um comportamento concreto aos mtodos que foram definidos como abstratos. Com isso certas partes do algoritmo sero preenchidos por implementaes que iro variar, ou seja, implementar um algoritmo em um mtodo, postergando a definio de alguns passos do algoritmo, para que outras classes possam redefin-los.Resumindo a inteno do padro Template Method: Segundo o GoF, define um esqueleto de algum algoritmo em um mtodo, adiando a implementao dos passos deste algoritmo para as sub-classes. Esses mtodos que so criados nesta classe so chamados de Primitive Operations (Operaes Primitivas), e o mtodo em que este algoritmo implementado o chamamos de Template Method..

Nesta Pattern temos no mnimo dois participantes envolvidos que veremos abaixo:

Classe Abstrata: Define as operaes primitivas (como mtodos abstratos), e o Template Method que definir o esqueleto do algoritmo.

Classe Concreta: Qual implementa as operaes primitivas.

O diagrama abaixo ilustrar estes participantes:

Figura 1 - Participantes do Template Method.

Como podemos ver no diagrama acima, a AbstractClass define os mtodos abstratos (Primitive Operations) que devem ser implementados nas sub-classes. Alm disso, a AbstractClass ainda define um Mtodo Template, que por sua vez ir estruturar as chamadas aos mtodos (Primitive Operations), criando assim o esqueleto do algoritmo

2- PROBLEMAO Template Method tem como proposta facilitar a implementao de cenrios onde se deseja encapsular algoritmos, fornecendo as classes derivadas o poder de definir as pr-condies (input) do algoritmo e deixando a classe Base responsvel pela estrutura do algoritmo, pr-condies globais que fazem sentido a todas classes deviradas, bem como, as ps-condies (output).

A idia bsica por trs desse modelo disponibilizar uma nica classe base que ficar responsvel pela estrutura do algoritmo, evitando ter "pedaos" do algoritmo espalhados pelas classes derivadas o que gera redundncia no cdigo, a classe derivada ser responsvel de implementar o algoritmo de forma independente, cada classe devirada implementar o algoritmo de uma forma diferente ou igual porm sempre respeitando a estrutura do algoritmo que estar definida na classe Base.

Para implementar partes invariantes de um algoritmo uma nica vez e deixar subclasses implementarem o comportamento varivel

Quando comportamento comum entre subclasses deveria ser fatorado e localizado numa classe comum para evitar duplicao

um passo freqente de "refactoring" de cdigo

Primeiro identifique as diferenas

Coloque as diferenas em novos mtodos

Substitua o cdigo das diferenas por uma chamada a um dos novos mtodos

Para controlar extenses de subclasses

Voc pode definir um Template Method que chame operaes-gancho (hook) e pontos especficos, permitindo extenses apenas nestes pontos

Faa com que apenas os mtodos-gancho possam sofrer override, usando adjetivos de visibilidade

"public final" para o Template Method

"protected" para mtodos que devem/podem sofrer override (est relacionado ao uso de Herana, uma classe pode ser extendida e com isso gerar sub classes que herdam todos os seus atributos e comportamentos)3- SOLUO

A ideia bsica por trs desse modelo disponibilizar uma nica classe base que ficar responsvel pela estrutura do algoritmo, evitando ter "pedaos" do algoritmo espalhados pelas classes derivadas o que gera redundncia no cdigo, a classe derivada ser responsvel de implementar o algoritmo de forma independente, cada classe derivada implementar o algoritmo de uma forma diferente ou igual porm sempre respeitando a estrutura do algoritmo que estar definida na classe Base.Resumindo, ele definir esqueletos do algoritmo em algumas operaes, postergando passos similares para as subclasses.4- PARTICIPANTES E COLABORADORES

Os participantes do padro Template Method pode ser divido da seguinte forma:

Classe Abstrata:

- Define operaes abstratas que subclasses concretas definem para implementar certas etapas do algoritmo

- Implementa um Template Method definindo o esqueleto de um algoritmo

- O Template Method chama vrias operaes, entre as quais as operaes abstratas da classeClasse Concreta:

- Implementa as operaes abstratas para desempenhar as etapas do

algoritmo que tenham comportamento especfico a esta subclasse

J em relao as colaboraes, temos:

Classe Concreta - Depende de Classe Abstrata para implementar as partes invariantes do algoritmo

5- CONSEQUNCIAS

Template Methods constituem uma das tcnicas bsicas de reuso de cdigo:

- So particularmente importantes em frameworks e bibliotecas de

classes para o fatoramento de comportamento comum

- Template Methods levam a uma inverso de controle

- O cdigo particular de uma aplicao chamado pelo resto do

cdigo

- Normalmente, escrevemos o cdigo "de cima" e chamamos

partes comuns "em baixo" - Aqui, o contrrio

- Tambm chamado de "Hollywood Principle": "Don't call us, we'll call you" O Template Method pode chamar vrios tipos de operaes:

- Operaes concretas (da Classe Concreta ou de outras

classes) - Operaes concretas de Classe Abstrata (operaes comuns

teis s subclasses)

- Operaes abstratas (onde o comportamento varia)

Devem sofrer override - Factory Methods Operaes-gancho:- Podem sofrer override - Uma operao-gancho tem implementao nula (fazendo nada)

na Classe Abstrata

- A subclasse pode fazer override para inserir algo neste ponto

(da, "gancho") - uma forma limpa de estender o comportamento de uma

classe de forma controlada, isto , apenas nos pontos onde h ganchos

6- IMPLEMENTAO importante minimizar o nmero de operaes abstratas que devem sofrer override para completar o algoritmo, pois o Template Method tem como proposta facilitar a implementao de cenrios onde se deseja encapsular algoritmos, fornecendo as classes derivadas o poder de definir as pr-condies (input) do algoritmo e deixando a classe Base responsvel pela estrutura do algoritmo, prcondies globais que fazem sentido a todas as classes derivadas, bem como, as ps-condies (output):- Convenes de nome

- Mtodos abstratos que devem sofrer override deveriam ter

algo de comum no nome

Exemplo: faaAlgo() // comea com faa"

- Mtodos-gancho que podem sofrer override deveriam ter algo

de comum no nome

Exemplo: logHook() // termina com "Hook"7- EXEMPLOS DE APLICAOO Template Method utiliza uma classe abstrata base, que vai encapsular o template do algoritmo em um mtodo, para que as classes concretas possam herdar desta classe e realizar a implementao de determinados passos deste algoritmo. Observe o diagrama abaixo: O diagrama acima ilustra o que foi dito acima, o template do algoritmo encapsulado na classe base e as classes concretas podem implementam cada passo dentro do algoritmo, mas o algoritmo em si no muda. vejamos um exemplo de cdigo:

J no cdigo comeamos a entender como aplicar este pattern, vemos que o template mthod o metodo ProcessaPedido, ele quem encapsula dentro dele o algoritmo a ser executado, note que existem alguns mtodos dentro dele que representam os passos para implementao do algoritmo. Veja a figura abaixo:

Veja que os mtodos CalculaPesoPacote e CalculaFrete so abstratos, ou seja, so as classes concretas que iro definir a implementao. Existe ainda, um que chamado mtodo gancho que o mtodo CalculaDesconto, que opcional, as classes filhas o definem como quiser, como por exemplo o clculo do desconto pode variar, por exemplo, de acordo com a poca do ano ou dia do ms por exemplo.

O Template method muito til tambm, quando voc ainda no sabe detalhes da implementao, ou seja , voc define o algoritmo atravs de mtodos abstratos e deixa que as classes concretas o implementem. Observe um exemplo de implementao:

Apenas para ilustrar o que foi dito at aqui, o cdigo acima, mostra uma classe concreta em que nela sero definidos todos os detalhes para implementao do algoritmo definido na classe base. O que se nota tambm que os passos do algoritmo podem ser definidos de vrias formas, mas o template method, que o que contm o algoritmo no; dentro dele esto todos os passos que no podero mudar.

8- BIBLIOGRAFIA

FOWLER, Martin, Padres de Arquitetura de Aplicaes Corporativas, Porto Alegre: Bookman, 2006.

GAMMA, Erich, HELM, Richard, JOHNSON, Ralph & VLISSIDES, John, Padres de Projeto Solues Reutilizveis de Software Orientado a Objetos, 2 edio, Porto Alegre: Bookman, 2000.

EVANS, Eric, Domain-Driven Design Atacando as Complexidades no Corao do Software, Rio de Janeiro: Alta Books, 2004.