(→Exemplo) |
|||
Line 13: | Line 13: | ||
Café, Chá, BebidaQuente. | Café, Chá, BebidaQuente. | ||
− | [[category:PO | + | Este exemplo mostra a evolução de uma aplicação à medida que são aplicadas técnicas de programação com objectos, em que se refactoriza algum código, e de aplicação de padrões, neste caso, o ''template method''. |
+ | |||
+ | === Situação Inicial === | ||
+ | |||
+ | Na situação inicial há repetição de código e não há abstracção de conceitos comuns nem, por isso, reutilização. | ||
+ | |||
+ | |||
+ | |||
+ | === Segundo Cenário: Abstracção de CaracterÃsticas Comuns === | ||
+ | |||
+ | Nesta situação abstrairam-se algumas das caracterÃsticas comuns e procurou-se reutilizar o máximo de funcionalidade. Note-se que, ainda assim, há repetição da estrutura do "algoritmo" de aquecimento. | ||
+ | |||
+ | |||
+ | |||
+ | === Terceiro Cenário: Aplicação do Padrão Template Method === | ||
+ | |||
+ | Manteve-se a abstracção conseguida no segundo cenário e aplicou-se o padrão template method. O resultado é o desaparecimento do algoritmo repetido: agora aparece apenas na superclasse e as partes dependentes das subclasses são definidas por cada uma. Note-se que a interface é agora imposta pela superclasse e que pode haver necessidade de renomear alguns dos métodos existentes (ou, alternativamente, de os chamar a partir dos que implementam a interface devida à aplicação do padrão). | ||
+ | |||
+ | |||
+ | |||
+ | [[category:PO]] |
Material correspondente à aula 25.
O padrão "template method" corresponde à definição do esqueleto de um algoritmo de uma operação em que alguns passos são delegados em subclasses. O padrão permite que as subclasses redefinam partes do algoritmo sem a estrutura do algoritmo seja alterada.
O padrão template method tem a seguinte estrutura de classes:
Café, Chá, BebidaQuente.
Este exemplo mostra a evolução de uma aplicação à medida que são aplicadas técnicas de programação com objectos, em que se refactoriza algum código, e de aplicação de padrões, neste caso, o template method.
Na situação inicial há repetição de código e não há abstracção de conceitos comuns nem, por isso, reutilização.
Nesta situação abstrairam-se algumas das caracterÃsticas comuns e procurou-se reutilizar o máximo de funcionalidade. Note-se que, ainda assim, há repetição da estrutura do "algoritmo" de aquecimento.
Manteve-se a abstracção conseguida no segundo cenário e aplicou-se o padrão template method. O resultado é o desaparecimento do algoritmo repetido: agora aparece apenas na superclasse e as partes dependentes das subclasses são definidas por cada uma. Note-se que a interface é agora imposta pela superclasse e que pode haver necessidade de renomear alguns dos métodos existentes (ou, alternativamente, de os chamar a partir dos que implementam a interface devida à aplicação do padrão).