Usuari:Josepagustimas/proves

De la Viquipèdia, l'enciclopèdia lliure

Template method

A dins del marc de la programació orientada a objectes, el patró Template method (mètode plantilla o model) es un patró per solucionar problemes comuns de software.

Abstract.

El Template method és un patró de comportament que serveix per definir l'esquelet d'un algorisme delegant a les seves subclasses alguns dels passos d'aquest algorisme. El Template method és utilitzat quan moltes classes han d'implementar un mateix comportament que només varia en algunes parts, també ens trobem amb la implementació de hooks, petits salts en el flux del programa que ens permeten realitzar consultes a les classes concretes, el patró template també utilitza el principi de Hollywood (o principi d'inversió): Don't call us, we'll call you.

Propòsit.

Permetre que certs passos d’un algorisme definit en una operació d’una superclasse, siguin re-definits en les subclasses sense necessitat de tenir que sobreescriure l’operació sencera.

Aplicabilitat.

La utilització del patró  Mètode plantilla es adequada en els següents casos:

  • Quan tenim un algorisme amb varis passos que no canvien, tal que aquest serien implementats en la superclasse, deixant els passos que canvien per les subclasses.
  • Per evitar la replicació de codi amb la generalització del comportament comú de varies subclasses en una única superclasse.
  • Per controlar les extensions de les subclasses. El Template Method utilitza mètodes especials( mètodes de ganxo o hooks) en alguns punts, senels únics punts que poden ser redefinits i per tan els únics punts on es possible la extensió.

Estructura.

Es mostra a continuació l'estructura que utilitza el patró Template:

Estructura del mètode Template
Estructura del mètode Template

Participants.

  • Classe Abstracta: proporciona la definició de una sèrie d’operacions primitives (normalment abstractes) que implementen els passos d’un algorisme i que seran definits en les subclasses. S’encarrega també de la implementació d’un mètode en el que s’invocaran entre altres les operacions primitives. Aquest mètode actua com plantilla, per això el nom del patró, definint la seqüència d’operacions d’un algorisme.
  • Classe Concreta: implementa les operacions primitives definides en la classe abstracta de la qual hereta, quedant determinat el comportament específic del algorisme definit en el mètode plantilla, per cada subclasse.

Col·laboracions.

Las classes concretes es basen en la classe abstracta per implementar la part invariant del algorisme.

Implementació.

Per implementar aquest patró es té que tenir en compte els següents detalls:

  • Es recomanable declarar les operacions primitives de tal manera que nomes puguin ser cridades per el mètode plantilla (protected si es treballa en Java).
  • Es té que reduir al màxim el numero de operacions primitives que seran invocades des de el mètode plantilla. De aquesta manera es reduirà la complexitat de les subclasses i per tan la implementació serà mes fàcil.

Exemple d'implementació en Java.

Per implementar el mètode plantilla es vol simular el desplaçament d’un cotxe, que bàsicament es pot simplificar en: accelerar, canviar de marxa i frenar. El procés de accelerar i frenar es pot considerar que es idèntic en tots els cotxes, i ha diferencia en la forma canviar de marxa que varia d’uns als altres, els cotxes amb canvi manual i els de canvi automàtic.

Podem considerar una superclasse Cotxe en la que es defineix el mètode plantilla (Template Method) desplaçar, des de el que es crida a l’operació primitiva canviarMarxa(), que es implementada d’una forma en la subclasse CotxeManual i de forma diferent en la subclasse CotxeAutomatic.

diagrama de clases Template
diagrama de clases Template
abstrac class Cotxe
abstrac class Cotxe
class CotxeAutomatic
class CotxeAutomatic
class CotxeManual
class CotxeManual
class Principal
class Principal

El resultat de l'execució del programa es el següent:

resultat de execució
resultat de execució


Patrons relacionats.

El mètode plantilla es relaciona freqüentment amb els següents patrons de disseny:

  • Strategy Method. Els mètodes plantilla fan servir l’herencia per variar el comportament d’un algorisme. En el cas del patró Strategy es fa servir la delegació i es modifica el algorisme senser.
  • Factory Method.  Els mètodes Factory (fabricació) solen ser cridats des de el mètode plantilla.