Anda di halaman 1dari 18

Repblica Bolivariana de Venezuela Ministerio de Poder popular para la Educacin Universitaria Universidad Politcnica Territorial del Oeste de Sucre

lodosbaldo Russian! u"an# Estado Sucre

Patrones de $ise%o de So&t'are $ecorator!

Cuman, Junio de 2013

Introduccin El concepto de patrn so&t'are( "#s concreta"ente el concepto de patrn de dise%o( se )izo popular dentro del "undo del desarrollo del so&t'are en *++, con la publicacin del libro $esi-n Patterns. Ele"ents o& Reusable Ob/ect0Oriented So&t'are( cu1os autores son Eric) 2a""a( Ric)ard 3el"( Ralp) 4on)son 1 4o)n Vlissides 5nor"al"ente re&erenciados co"o la Banda de los 7our 6 o si"ple"ente por 2o789 Real"ente el uso del tr"ino patrn( con el si-ni&icado :ue actual"ente se le da en la ;n-enier<a del So&t'are 1 "#s concreta"ente en el #rea de la tecnolo-<a de ob/etos( se deriva de los traba/os del ar:uitecto =le>ander desde "ediados de los a%os ?@9 E>isten varios tipos de patrones de dise%o( entre los :ue destacan. =daptador( 7actor1( MV ( Re-istr1( $ecorator( entre otros9 = continuacin e>plicare"os detallada"ente el uso del patrn $ecorator9 )ristop)er uatro 6 T)e 2an- o&

Contenido Patrones de Diseo de Software Se-n Brad =ppleton *++A( un patrn es una unidad de in&or"acin instructiva con no"bre :ue captura la estructura esencial 1 la co"prensin de una &a"ilia de soluciones e>itosas probadas para un proble"a recurrente :ue ocurre dentro de un cierto conte>to 1 de un siste"a de &uerzas9 Para 4a"es oplien *++B( cada patrn es una re-la constituida por tres

partes( la cual e>presa una relacin entre un cierto conte>to( un cierto siste"a de &uerzas :ue ocurren repetida"ente en ese conte>to( 1 una cierta con&i-uracin de so&t'are :ue per"ite a estas &uerzas resolverse as< "is"as9 Un patrn de dise%o es una descripcin de clases 1 ob/etos

co"unic#ndose entre s<( adaptado para resolver un proble"a de dise%o -eneral en un conte>to particular9 Se describen en &or"a te>tual( aco"pa%ados de dia-ra"as 5)abitual"ente de clases e interaccin8 1 pseudocdi-o9 ada patrn describe un proble"a :ue ocurre una 1 otra vez en nuestro entorno 1 describe ta"bin el ncleo d e l a s o l u c i n d e p r o b l e " a s ( d e & o r " a :ue pueda utilizarse un "illn de veces sin tener :ue )acer dos veces lo "is"o9 Motivacin e im ortancia en e! uso de atrones Cos patrones de dise%o son i"portantes de usar( por:ue sirven de -u<a para resolver proble"as co"unes en pro-ra"acin9 =l aprenderlos( aprender#s a identi&icar de "e/or "anera los proble"as :ue vas a tener( antes de :ue aparezcan( 1 aprender#s :u solucin es la :ue "e/or se aplica a tu proble"a9

Ca idea de los patrones de dise%o es especi&icar soluciones buenas 1 deter"inar sus caracter<sticas de al-n "odo para :ue puedan ser inte-radas en los dise%os de aplicaciones incluso por dise%adores no e>pertos9 C!asificacin Se"#n su ro sito. Patrones de creacin9 Se re&ieren a la creacin de instancias9 $entro de los patrones de creacin tene"os.
o $%stract &actor'( Proporciona una inter&az para crear &a"ilias de ob/etos

o :ue dependen entre s<( sin especi&icar sus clases concretas9


o )ui!der *Constructor+( Separa la construccin de un ob/eto co"ple/o de

su representacin( de &or"a :ue el "is"o proceso de construccin pueda crear di&erentes representaciones9
o &actor' Met,od *M-todo de &%rica+( $e&ine una inter&az para crear un

ob/eto( pero de/a :ue sean las subclases :uienes decidan :u clase instanciar9 Per"ite :ue una clase dele-ue en sus subclases la creacin de ob/etos9
o Protot' e *Prototi o+( Especi&ica los tipos de ob/etos a crear por "edio

de una instancia protot<pica( 1 crear nuevos ob/etos copiando este prototipo9 Patrones estructura!es9 Se re&ieren a las relaciones entre clases 1Du ob/etos9 Estos son.
o $da ter(

onvierte la inter&az de una clase en otra distinta :ue es la :ue

esperan los clientes9 Per"iten :ue cooperen clases :ue de otra "anera no podr<an por tener inter&aces inco"patibles9
o )rid"e( $esvincula una abstraccin de su i"ple"entacin( de "anera

:ue a"bas puedan variar de &or"a independiente9

Decorator( =%ade din#"ica"ente nuevas responsabilidades a un ob/eto(

proporcionando una alternativa &le>ible a la )erencia para e>tender la &uncionalidad9


o &acade( Proporciona una inter&az uni&icada para un con/unto de

inter&aces de un subsiste"a9 $e&ine una inter&az de alto nivel :ue )ace :ue el subsiste"a es "#s &#cil de usar9
o &!'wei",t( Usa el co"parti"iento para per"itir un -ran n"ero de

ob/etos de -rano &ino de &or"a e&iciente9 Pro>19 Proporciona un sustituto o representante de otro ob/eto para controlar el acceso a ste9
o Com osite( Per"ite co"binar ob/etos en estructuras de #rbol para

representar /erar:u<as9 Per"ite ade"#s( a-rupar varios ob/etos co"o si &ueran uno solo9

Patrones de com ortamiento9

aracterizan la &or"a en :ue las clases u

ob/etos interactan 1 distribu1en sus responsabilidades 5servicios89


o C,ain of .es onsi%i!it'( Evita acoplar el e"isor de una peticin a su

receptor( al dar a "#s de un ob/eto la posibilidad de responder a la peticin9 rea una cadena con los ob/etos receptores 1 pasa la peticin a travs de la cadena )asta :ue esta sea tratada por al-n ob/eto9
o Command( Encapsula una peticin en un ob/eto( per"itiendo as<

para"etrizar a los clientes con distintas peticiones( encolar o llevar un re-istro de las peticiones 1 poder des)acer la operaciones9
o Inter reter( $ado

un len-ua/e( de&ine una representacin de su

-ra"#tica /unto con un intrprete :ue usa dic)a representacin para interpretar las sentencias del len-ua/e9
o Iterator( Proporciona un "odo de acceder secuencial"ente a los

ele"entos de un ob/eto a-re-ado sin e>poner su representacin interna9

Mediator( $e&ine un ob/eto :ue encapsula c"o interactan un con/unto

de ob/etos9 Pro"ueve un ba/o acopla"iento al evitar :ue los ob/etos se re&ieran unos a otros e>pl<cita"ente( 1 per"ite variar la interaccin entre ellos de &or"a independiente9 Me"ento9 Representa 1 e>ternaliza el estado interno de un ob/eto sin violar la encapsulacin( de &or"a :ue ste puede volver a dic)o estado "#s tarde9
o /%server( $e&ine una dependencia de uno0a0"uc)os entre ob/etos( de

&or"a :ue cuando un ob/eto ca"bia de estado se noti&ica 1 actualizan auto"#tica"ente todos los ob/etos9
o State( Per"ite :ue un ob/eto "odi&i:ue su co"porta"iento cada vez :ue

ca"bia su estado interno9 Parecer# :ue ca"bia la clase del ob/eto9


o Strate"'( $e&ine una &a"ilia de al-orit"os( encapsula uno de ellos 1 los

)ace

interca"biables9

Per"ite

:ue

un

al-orit"o

var<e

independiente"ente de los clientes :ue lo usan9


o 0em !ate Met,od( $e&ine en una operacin el es:ueleto de un al-orit"o(

dele-ando en las subclases al-unos de sus pasos9 Per"ite :ue las subclases rede&inan ciertos pasos del al-orit"o sin ca"biar su estructura9
o 1isitor( Representa

una operacin sobre los ele"entos de una

estructura de ob/etos9 Per"ite de&inir una nueva operacin sin ca"biar las clases de los ele"entos sobre los :ue opera9
o Memento( Se utiliza para -uardar el estado de un ob/eto 1 poder lue-o

restaurar el ob/eto a un estado previo9 o Pro2'( Proporciona un representante o dele-ado :ue se encar-a de controlar el acceso a un ob/eto( -eneral"ente por "otivos de e&iciencia9 Se"#n su m%ito. Patrones de clases9 Tratan con relaciones de )erencia 5est#tica8 entre clases9

Patrones de ob/etos9 Se re&ieren a relaciones de co"posicin entre ob/etos( :ue pueden ca"biar en tie"po de e/ecucin 1 son "#s din#"icas9

Patrn Decorator

Este patrn de dise%o per"ite a%adir responsabilidades adicionales a un ob/eto de &or"a din#"ica9 Proporciona una alternativa &le>ible a la subclasi&icacin para a%adir &uncionalidad( ade"#s( se usa cuando es i"posible la e>tensin de &uncionalidad por )erencia( por ser a:uella i"previsible en tipo 1 n"ero9 =porta una "a1or &le>ibilidad :ue la )erencia est#tica( per"itiendo( entre otras cosas( a%adir una &uncionalidad dos o "#s veces9 Ta"bin evita concentrar en lo alto de la /erar:u<a clases -uiadas por las responsabilidades( es decir( :ue pretenden 5en vano8 satis&acer todas las posibilidades9 $e esta &or"a las nuevas &uncionalidades se co"ponen de piezas si"ples :ue se crean 1 se co"binan con &acilidad( independiente"ente de los ob/etos cu1o co"porta"iento e>tienden9 Responde a la necesidad de a-re-ar &uncionalidad a un ob/eto por "edio de la asociacin de clases9 Es un ob/eto con el :ue se puede e/ecutar &uncionalidades de varias clases a la vez9 Pro sito de! Patn Decorator

Per"ite a%adir responsabilidades e>tra a ob/etos concretos de "anera din#"ica Proporciona una alternativa &le>ible a la )erencia para e>tender

&uncionalidad( ta"bin conocido co"o 'rapper9 Im !ementacin

Este patrn soluciona proble"as de una "anera "uc)o "#s sencilla 1 e>tensible9 Se crea a partir de Ventana la subclase abstracta VentanaDecorator 1( )eredando de ella( BordeDecorator 1 BotonDeAyudaDecorator9 VentanaDecorator encapsula el co"porta"iento de Ventana 1 utiliza co"posicin recursiva para :ue sea posible a%adir tantas FcapasF de $ecorators co"o se desee9 Pode"os crear tantos $ecorators co"o :uera"os )eredando de VentanaDecorator.

El decorador debe cu"plir la inter&az de la clase

o"ponente para :ue el

cliente no distin-a entre ob/etos b#sicos 1 decorados9 uando slo e>ista la posibilidad de a%adir un tipo de &uncionalidad a los ob/etos b#sicos se puede o"itir la clase abstracta $ecorador9 En -eneral esto no es as< 1 ade"#s conviene ponerla por:ue proporciona "a1or &le>ibilidad al dise%o9 Se debe "antener la clase o"ponente o o"ponent li-era9 =s< la

de&inicin de los datos de representacin deber<a )acerse en las subclases por:ue si no se )ar# a las clases decoradoras "u1 pesadas para poder ser usadas de &or"a anidada9 =de"#s a%adir de"asiada &uncionalidad en la inter&az o"ponente au"enta la probabilidad de :ue se pon-an caracter<sticas :ue para un caso en concreto no se utilicen9

Motivacin = veces se :uiere a%adir &uncionalidad a un ob/eto concreto( no a una clase entera9 E/. Un toolGit para 2U;s proporciona soporte para a%adir "arcos( barras de desplaza"iento999 a co"ponentes9 So!ucin3 3erencia. no es &le>ible( la &uncionalidad se a%ade est#tica"ente $e&inir una clase decoradora! :ue envuelve al co"ponente( 1 le proporciona la &uncionalidad adicional re:uerida. "#s &le>ible( transparente al cliente( se pueden anidar decoradores

Patrn de Diseo 4structura! Decorator $ecorator es un patrn de dise%o estructural( cu1o ob/etivo principal es el de evitar un sin &in de clases )erederas9

Ca idea de decorar un ob/eto 5o envolver( co"o ta"bin se conoce8( es a-re-arle nuevas &uncionalidades o caracter<sticas al "is"o9 Estas nuevas &uncionalidades se pueden lo-rar "ediante el uso de )erencia si"ple( pero )a1 ocasiones en :ue la )erencia -enera "uc)as co"binaciones9

on $ecorator se :uiere solucionar los si-uientes proble"as. Se tiene un ob/eto al :ue se le :uiere aplicar una nueva caracter<stica9 Ca caracter<stica se le debe aplicar din#"ica"ente9

Ho se sabe :u caracter<stica es la :ue se va aplicar9

Para lo-rar esto( se utiliza el si-uiente patrn.

3a1 al-unos puntos a to"ar en cuenta de este patrn de dise%o.

3a1 clases -enricas :ue van a ser )eredadas( de "anera :ue los "todos del ob/eto a decorar sean accesibles9 Se crea un ob/eto decorador! :ue conozca todas las caracter<sticas :ue se van a a-re-ar9 Se crean los ob/etos de caracter<sticas :ue las a-re-an9 Partici antes

Com onent 5VisualComponent8. de&ine la inter&az de los ob/etos a los :ue se puede a%adir responsabilidades de "anera din#"ica9 ConcreteCom onent 5TextView8: de&ine un ob/eto al :ue a%adir responsabilidades de "anera din#"ica9 Decorator: "antiene una re&erencia al ob/eto co"ponente 1 de&ine una inter&az con&or"e a la del co"ponente9 ConcreteDecorator 5BorderDecorator( ScrollDecorator8. a%ade responsabilidades al co"ponente al :ue re&erencia9

Co!a%oradores El decorador rediri-e las peticiones al co"ponente asociado 1 opcional"ente puede realizar tareas adicionales antes oD1 despus de rediri-ir la peticin9

Consecuencias Es "#s &le>ible :ue la )erencia est#tica9 Cas responsabilidades se a%aden 1 eli"inan din#"ica"ente9 7acilita de&inir una propiedad varias veces 5e/9 doble "arco89

Evita :ue las clases "#s altas en la /erar:u<a estn de"asiado car-adas de &uncionalidad 1 sean co"ple/as9 Ho )a1 precio :ue pa-ar por propiedades :ue no se usan9 7acilita la de&inicin de nuevos decoradores9 Un decorador 1 el co"ponente al :ue se re&iere no son idnticos 5esto es( tienen distinto identi&icador89 Provoca la creacin de "uc)os ob/etos pe:ue%os parecidos 1 encadenados( co"plicando la depuracin9

$ !ica%i!idad El patrn $ecorator se usa. Para a%adir responsabilidades a ob/etos concretos de "anera din#"ica 1 transparente( esto es( sin a&ectar a otros ob/etos Para responsabilidades :ue se pueden a%adir 1 :uitar uando la )erencia sea i"practicable( por:ue i"pli:ue crear "ltiples subclases para todas las co"binaciones posibles 5e/"9 Te>tVie'Scroll( Te>tVie'ScrollBorder( 9998

45em !o de! Patrn Decorator usando P6P

78 , interface i o&&ee I u%!ic function -etBase ost58J K c!ass o&&ee i"ple"ents i o&&ee I rotected LMbase ost N @J

u%!ic function -etBase ost58 I return Lt)is0OMbase ostJ K K c!ass BlacG o&&ee e2tends o&&ee I u%!ic function MMconstruct58 I Lt)is0OMbase ost N ,J K K a%stract c!ass o&&ee$ecorator i"ple"ents i o&&ee I rotected LMco&&eeJ u%!ic function MMconstruct5i o&&ee L o&&ee8 I Lt)is0OMco&&ee N L o&&eeJ K K c!ass Pit) rea" e2tends o&&ee$ecorator I u%!ic function -etBase ost58 I return Lt)is0OMco&&ee0O-etBase ost58 Q *9,J K K c!ass Pit)MilG e2tends o&&ee$ecorator I u%!ic function -etBase ost58 I return Lt)is0OMco&&ee0O-etBase ost58 Q RJ K K c!ass Pit) )ocolate e2tends o&&ee$ecorator I u%!ic function -etBase ost58 I return Lt)is0OMco&&ee0O-etBase ost58 Q ,J

K K Lco&&ee N new Pit) )ocolate5new Pit)MilG5new Pit) rea"5new BlacG o&&ee58888J ec)o SEl precio del ca&e es. LS 9 Lco&&ee0O-etBase ost58J

Dia"rama de C!ases de! Patrn Decorator

1enta5as de! Patrn Decorator

="pl<a la &uncionalidad de una inter&az al tie"po :ue la "antiene i-ual 1 se )ace din#"ica"ente9 Ho altera la &uncionalidad e>istente( solo a%ade "#s &unciones9 Cas responsabilidades se pueden a%adir o :uitar9

Desventa5as de! Patrn Decorator


Si estas decorando de"asiado a un ob/eto( vas a ter"inar con un "ontn de decoraciones 5clases8 pe:ue%as9 Si tu cdi-o est# "u1 desordenado( entonces vas a tener pesadillas tratando de encontrar las clases decorativas9 =u"ento en la co"ple/idad a la )ora de instanciar el ob/eto a ser decorado9 =l instanciarlo( debes envolverlo en :uin sabe cu#ntas decoraciones( as< :ue es i"portante usar el sentido co"n9 El e>ceso de decoraciones :ue a-re-an "todos a un ob/eto( puede ser proble"#tico si no se especi&ican :ue decoraciones e>tienden el =P; del ob/eto 1 cu#les son los nuevos "todos :ue se aportan9 Esta situacin ta"bin nos pueden causar di&icultades cuando )a1 :ue debuguear una aplicacin9 En al-unos casos el pro-ra"ador debe aprender el orden en el cual las decoraciones deben ser instanciadas9 Si va"os al lti"o e/e"plo( si el pro-ra"ador usa el decorador 9 erCaseal &inal( los ta-s dentro del 3TMC van a ser trans&or"ados a "a1sculas ta"bin9 Por eso es vital :ue el pro-ra"ador entienda cu#l es la intencin detr#s de cada decoracin9

:4s a !ica%!e e! atrn asi"nado ara e! dia"rama de c!ase de su ro'ecto8 El patrn de dise%o de so&t'are asi-nado 5$ecorator8( no es aplicable al dia-ra"a de clases de nuestro pro1ecto( debido a :ue nin-una clase )ereda de otra clase9

Dia"rama de C!ase de! Pro'ecto

Conc!usiones El patrn $ecorator( nos per"ite e>tender ob/etos incluso en situaciones cuando la e>tensin v<a )erencia no es viable o no es necesaria9 =dicional"ente nos a1uda a conservar el principio de $%ierto;Cerrado( en donde se dicta :ue cada entidad debe estar abierta a e>tensin pero cerrada a "odi&icacin9 Cas decoraciones evitan la labor de crear clases co"ple/as con "uc)o cdi-o( :ue en la "a1or<a de los casos no ser# evaluado9 Se puede usar distintas co"binaciones 5o secuencias8 de decoraciones para -enerar distintos co"porta"ientos o resultados9 Para :ue una solucin sea considerada un patrn debe poseer ciertas caracter<sticas9 Una de ellas es :ue debe )aber co"probado su e&ectividad resolviendo proble"as si"ilares9

)i%!io"raf<a

)ttp.DDGuainasi9ciens9ucv9veDideas@ADdocu"entosDtutorialesDTUTOR;=CErnestoPi"e ntel9pd& )ttp.DDes9scribd9co"DdocDB+,?TARBDP=TROHES0$E0$;SEHO0$E0SO7TP=RE )ttp.DDzarza9usal9esDU&-arciaDdocDpatrones*9pd& )ttp.DD'''9ecured9cuDinde>9p)pDPatrV WVBWnMdeMdiseV WVB*oMdeMso&t'are )ttp.DDes9scribd9co"DdocD,T@A*+?BD;n&or"e0Patron0de0$iseno0$ecorador0 $ecorator


http://webdiis.unizar.es/~jmerse/IS-2/TeoriaPatronesV2_2.pdf

Anda mungkin juga menyukai