Está en la página 1de 44

PatronesdediseoyOrientacinaObjetosenPHP5

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Licencia
Copyright(c)2006AnibalRojas Copyright(c)20042006ErnestoHernndezNovich. Modificacionesyadaptaciones. Copyright(c)2006,2007LeonardoCaballero/JessLara. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free SoftwareFoundation;withnoInvariantSections,noFrontCover Texts,andnoBackCoverTexts.Acopyofthelicenseisincluded inthesectionentitled"GNUFreeDocumentationLicense".

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
GNUFreeDocumentationLicense
Puedeobtenerunacopiadelalicencia"GNUFreeDocumentation License" en los ficheros llamados "copyright.txt" en ingles, "copyright.es.txt"enespaoloenlossiguientessitiosenInternet:

http://www.gnu.org/copyleft/fdl.html http://www.fsf.org/licensing/licenses/fdl.html

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Definicionesbsicas
Estasdefinicionessonmsimportantedeloqueparece.

Desarrollodesoftware. DiseoWeb. DesarrolloWeb. AplicacinWeb.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
TecnologasinvolucradasenlaWeb.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
FuncionamientobsicodeunaAplicacinWeb.
DesdeelpuntodevistadelUsuario: 1) ElusuarioabreunURL. 2) Llenaunformulario. 3) Oprimealgunodelosbotones. 4) Laaplicacingeneraunnuevoformularioconresultados.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
FuncionamientobsicodeunaAplicacinWeb::Continuacin.
Esundocumento.php

Solicitaun Documento

Lapginase ejecutay cambia cdigo HTML LapginaHTMLse envaalcliente

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
FuncionamientobsicodeunaAplicacinWeb::Continuacin.

Basede Datos

MdulodeFunciones

ODBC
Motor Zend

1 6
Interfasedelservidor

Compila

4 5
Ejecuta

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
ProyeccionesdelaWeb.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
FactibilidadparaeldesarrollodeAplicacionesWeb.
Cuntocuestaencontrarunprogramadorquesepatodoeso? Cuntocuestamantenertodaestamezclademultilenguaje? Encuantotiempopuedeofreceralclienteunprototipodelaaplicacin? Cuantotiemponecesitaparacambiartodalainterfazdeusuariodelaaplicacin

alasnecesidadesdelcliente?
Puede garantizar que la aplicacin cumpla con los estndares y normativas de

accesibilidad,reusabilidadyoperatividaddelaWeb?

Sinosabesresponderaestaspreguntasconrespuestasatiempos cortos,prcticosyrazonables,yaentiendeselgranproblema!

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
HablemosdePHP.

OriginalmentePHPfuesiglasdePersonalHomePageTools. Creadoen1995porRasmuLerdorf. Ao1997,cambiossignificativos. AlredefinirseelmotorrecibilassiglasdelacrnimoHypertextPreProcessor PHP3,creadoporAndiGutmansyZeevZuraski. MotorZend. PHP4(ao2000). PHP5(ao2004). Estprevistoellanzamientoenbrevedelarama6dePHP. PHP4perdersuestadodeestableel31dediciembredel2007.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
IntroduccinaPHP5.

SoporteslidoparaProgramacinOrientadaaObjetos(oOOP)conPHP. DataObjects. Mejorasderendimiento. MejorsoporteparaMySQLconextensinderewritecompleta. MejorsoporteaXML(XPath,DOM,entreotros). SoportenativoparaSQLite. SoporteintegradoparaSOAP. Iteradoresdedatos. Excepcionesdeerrores.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
PHP5yProgramacinOrientacinaObjetos.
PHP5soportaunagrancantidaddefuncionalidadesparaOOP.

Mtodosconstructoresydestructores. Mtodossetterygetter. Mtodosmgicos. Clases,objetosyvariablesestticas,privadasyprotegidas. Clasesabstractas. Interfaces. Abstraccindedatos. StandardPHPLibrary(SPL). Clasesextendidas,excepciones,iteradores.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Patronesdediseo.
Lospatronessonsimplessolucionesaproblemasrecurrentesqueocurrenunayotra vezennuestroentorno. Luegodellegaralasolucin,encapsulamostodaslasvariablesyfactoresparallegar alasolucinydisponemosdeunarecetapararesolvermilveceselproblemasin tenerquereinventarlarueda. Los desarrolladores los usan como una forma de reutilizar la experiencia, clasificando las soluciones bajo trminos de comn denominacin Un diccionario?,esolohacesconunsingleton+registrypattern. Causandoadems,unidiomacomnentreprogramadoresdedistintoslenguajes.

Uno de los principales precursores del movimiento acerca de los Design Patterns fue Martin Fowler. Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Patronesdediseo::Continuacin.
Enelreadepatronesdediseohablamosdesolventarproblemasde:

Interfazgrfica. OptimizacindeCdigo. Reutilizacindecomponentes. Simplicidaddelassoluciones.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Usodelospatronesdediseo.
Lospatronesdediseonospermiten:

Extensibilidad. Flexibilidad. Concurrencia. Organizacin. Solucionesyaprobadasyefectivas. Mayorfacilidadparahacercambios. Reutilizacin. Refactorizacin. Idiomacomndeintercambiodesoluciones. BuenasprcticaseneldesarrollodeSoftware.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Ideasbsicaseneldesarrollodeaplicaciones.
Loqueselograentodaaplicacin,alimplementarpatronesesque,enconjuntocon laprogramacinOrientadaaObjetos(OOP):

Encapsulemoslalgicadelaaplicacindetalmaneraquesea innecesariopensarabajonivel.
(Tendrqueescribirunafuncinquehagaeso?)

Desviarsedelalgicademiaplicacin.
(ParaimplementarAJAXdebousarotracosa?)

Preocuparsenicamenteporlaoperatividaddelaaplicacin
(Funcionaresaimplementacinderolesyseguridadquemeinvent?).

Lograrunaflexibilidadsinlmites
(Funcionareseobjetoenotroproyectofuturo?).

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Clasificacindelospatronesdediseo.
Decreacin:
Comosecreaninstanciasdelosobjetosy/ocomoseimplementan.

Singleton,Multiton,Facade.

Estructurales:
Comoserelacionanycombinanlasclasesparacrearnuevasestructuras.

AbtractFactory,Visitor,Facade,Flyweight,Adapter.

Decomportamiento:
Comointeractanycooperanlasclases.

Decorator,Memento,ChainofResponsability,Flyweight,Adapter.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Clasificacindelospatronesdediseo::Continuacin.
Dembito: DeComoseutilizandinmicamentelosObjetos.

Delegator,Observer,Interpreter,Visitor.

Deoperacin
Decomosecomportarlaaplicacin.

BusinessLogic,ProxyAdapter,FrontController,ModelViewController.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
MVC(Modelviewcontroller).
1) Patrndediseoorientadoaobjetos. 2) Describe cualquier aplicacin con interaccin humana y es particularmente adecuadoparaaplicacionesWeb. 3) Separaclarayconsistentementelas"preocupaciones": 1) Modelo(Model)Interaccinconlabasededatos. 2) Vista(View)Presentacindelainformacinalusuario. 3) Controlador(Controller)Flujodeinformacinyprocesos. SisuaplicacinnoestdiseadasiguiendoMVC,inevitablementetendrproblemas deescalabilidad,demantenimientoydeextensin.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
MVC(Modelviewcontroller)::Continuacin.
Permitemltiplesrepresentaciones(vistas)delamismainformacin(modelo). De forma muy fcil permite agregar, remover o cambiar interfaces de usuarios (vistas). Permite responder a lo ingresado por el usuario (controladora) para ser fcilmentecambiando. Permitequemltiplesdesarrollossimultneamenteactualizalainterfaz,lalgica denegociosointroducirunaplicacinnuevasinafectaraotroscdigofuentes. Loscambiospuedensucederdinmicamenteenlaejecucindelaaplicacin. Prometereducircdigo(ej.unavistapuedeserusadacondiferentesmodelos). Ayudaaenfocaralosdesarrolladoresenunsolosimpleaspectodelaaplicacin almismotiempo.
Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
MVCconPHP5.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
MVCconPHP5::Continuacin.
1) Solicitud:ElusuarioejecutaunNavegador,pideunURLsolicitandoalaAplicacin. 2) Despacha:LaAplicacindelegaalacapaControladoralapeticindelusuariodesde elNavegador. 3) Almacena:ConsultaenlacapaModelopormedioalacapadeDatosdelmanejador debasededatosexistente. 4) Devuelve:LacapadeDatosdevuelvelosresultadosendatapuraalacapa Controladora. 5) Genera:LacapaControladorageneralacapadeVistaenbasealostiposdedatos generadosporlacapadeDatos. 6) Responde:LaVistageneradaseenvacomorespuestaalasolicitudalNavegador.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
MVCconPHP5::Continuacin.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
ClasificacindelospatronesdeacuerdoalacapaMVC. CapadeDatos(DataLayer)

ORMActiveRecord. DataLayer. Delegator.

Modelo(Lgica)

AbstractFactoryyRegistry. ValueObject. BusinessDelegate. AggregateEntity. ServiceLocator. Strategy.


Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
ClasificacindelospatronesdeacuerdoalacapaMVC. Controladora

InheritApplicationController. FrontController. DelegateController. ServiceController.

Vista

DecorationFilter. HelperView. CompositeView. TemplateView. DispatcherView.


Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
PatternsDesign:theRealLife!
Memento+Singleton>Gestindedeshacer,rehacer,historia,transacciones. Facade>Gestindedocumentosdevariostiposenunamismainterfaz. Facade+Adapter>Unanicainterfazdeaccesoparamltiplesbasesdedatos. Singleton + Registry > Sistemas de Diccionario, i18n (Internacionalizacin), RegistrosdeSistemayconfiguracin. Abstract + Composite + Helper View > Construccin de vistas complejas a partirdearchivossencillos. Observer+State>Sistemadegestinonlinedeusuarios. Decorator+Composite>Sistemasdereportes.
Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
PatternsDesign:theRealLife!
AbstractFactory+Singleton>Fabricaabstractadecontrolescomplejos. Flyweight>Gestindevistasyusodeclass(CSS)yIDREF(XML). Iterator+DataLayer >Explorardatosdentrodelosobjetossiniterarsobreel objetoensi(ej.ExplorarsobrelosdatosdeunaDBusandoFOREACH). Singleton+Decorator+HierarchicalVisitor>GestindeusuariosyRoles. Composite + Facade + Interpreter > Gestores de idiomas especializados, parsersdefunciones. SessionFacade+Delegator>Loggersygestoresdesesionesdeusuario.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
UnejemploDesglosado(Memento):

Necesidad:

Retornarunestadoprevio deunaoperacin (operacionesundoo Rollback). Retonaraestados especficosdelobjeto (History). Crearestadosdeguardado temporaloCheckpoints.


Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
UnejemploDesglosado(Memento):

Sumario:(Qudebemosidentificar):

Identificar la clase que posee la habilidad de tomar un snapshot de si misma.(claseconelrolOriginator). Disear una clase que no hace nada ms que que aceptar y entregar los distintossnapshotsdeobjetos(claseconelrolmemento). Disear una clase gestora a la cual el originator puede preguntar para que retorne un estado; puede causar que eloriginator vuelvaa estados previos(claseconelrolcaretaker). Laclasecliente(Originator)sabecuandodebesalvarsesusnapshot. Laclasecuidadora(CareTaker)sabecomodebeguardarseelsnapshot. Laclasecontenedora(memento)sabedondedebeguardarseelsnapshot.
Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
UnejemploDesglosado(Memento):

Estructura:

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
UnejemploDesglosado(Memento):

Estructura:(Continuacin):
DiagramadeSecuencia:

El objeto (originator) pide un checkpoint o revisin inicial a su custodio(caretaker). El custodio (caretaker) toma el objeto actual y guarda una copia en unaclaseestticamemento(Set). Sielclientedeseaunrollbackodeshacerunaaccin,simplemente le solicita al custodio retornar a un estado previo y este extrae del memento el estado solicitado; borra de memoria (haciendo el checkpoint respecto para posibles redo) el Originator actual y lo reemplazaconelextradodesdeelmemento.
Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
UnejemploDesglosado(Memento):

Implementacin:

Cadaobjetopuedellamarestticamenteaunmementoobject(CheckpointState) usando una clase pasarela llamada Caretaker, que toma las funciones de monitorizacindelobjetobase(Originator);inicialmenteelobjetocreaunacopiade simismodentrodelmemento(primerestado). Memento Object puede simplemente recibir (en un arreglo esttico) nuevas copias (snapshots) del objeto base (Originator) e indizarlas para su obtencin rpida (unlimitedundoylistadehistoria). Mementodebeseropaco;esdecir,solamentedebesaberqueguardunestadode unobjeto,sinaveriguarquetipodeobjetoguard(Claroqueguardandoel ndicede aquienguard);adicionalmente,elcliente(Originator)desconocelanaturalezadel memento(seentiendeconlatravsdelcaretaker).
Paramsimplementacioneslesrecomiendoquevisiten www.phppatterns.com Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Delohorribleapractico::ElCaminoMVCen10pasos
1. Desarrollas proceduralmente segn tu manual de 10 das de PHP3, mezclas HTML, cdigodeconexinalabasededatos,loopssobreresultsets,lgicacondicional,estilo (CSS)enunamismapgina. 2. Tedascuentaquesiabstraesproceduralmentelalgicadeconexinadatos(conectar, consultar,insertar,borrar)podrscambiardeDBsintraumas(esodicest). 3. Siabstraeslalgicatambin,nosermejor?,nacenlosincludesinfinitos!. 4. Ysicentralizoestaclaseenunobjeto?,puedotenervariasinstancias!. 5. Creoquelaclasehacemucho,porquenolaseparamosyreducimoselacoplamiento delosobjetos?. 6. Dosobjetosdiferentestienenpropiedadessimilares,Porqunounaclaseabstracta?. 7. Puedo gestionar todo desde una clase nica de registro?, configuraciones nicas y ControladoraFrontal.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Delohorribleapractico::ElCaminoMVCen10pasos
8. Te das cuenta que si separas el cdigo HTML de las clases de la aplicacin, puedes tenerotrostiposdevistas(PDF,XML,WSDL,GTK,entreotros). 9. Tu gran aplicacin consiste en miles de clases, unidas entre s (alta cohesin) en distintas capas (ntier), con pocas relaciones entre ellas (bajo acoplamiento), que interactan unas con otras sin conocerse (alta composicin), muy genricas (baja implementacin) y con estndares seguros sobre ordenamiento, nombres de funciones(interfaces)yseguimientodepatrones. 10.Felicidades!,hazllegadoaMVC!...yahora...que?

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Delohorribleapractico::Frameworks
Un Framework, Marco de Trabajo o WAF (Web Application Framework), es una seriedelibreras(toolkits)quesehanunidobajounnicoesquemadecolaboracin para que de manera rpida (RAD: Rapid Application Development) logremos desarrollarnuestrasaplicaciones. Entrelasventajassecuenta:

No hay que definir marco de desarrollo, solo rellenar los huecos que los frameworksnosindican. TrabajamossobreunEstndarquemilesdepersonasyaconocen. Facilidadparaencontrarherramientas,librerasodocumentacin. RelacinCostedeaprendizajevs.Aplicabilidadmnima.
Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Delohorribleapractico::Frameworks
AlgunosFrameworkMVC:

Solar. CakePHP. CodeIgniter. Symfony. PHPonTrax. ZendFramework. Agavi,entreotros...

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Comparativade10FrameworkenPHP

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Conclusiones
Eldesarrollodewebaplicacionesmezclaesunconjuntodetecnologas, estndares ynormativasdeaccesibilidad,reusabilidadyoperatividaddelaWebquesedeben cumplirparaevitarposterioresdoloresdecabezapordesconocimientodelentorno dedesplieguedelaaplicacin,esdecirlaWeb. Lospatronesdediseo,esunaformasimplederesolverproblemascotidianosyque que son muy repetitivos en nuestro entorno. No requiere una implantacin con lenguajedeprogramacinporloqueofrece,unidiomacomnentreprogramadores dedistintoslenguajes.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Conclusiones::Continuacin.
LaprogramacinMVCaplicadaalawebnoesunaopcin,esunanecesidad! Porque?

Desarrollasparaunainterfaz,noparaunaimplementacin. Todotuequiposededicaasuespecialidadpreferida. Desarrollosostenibleymantenible. Esposiblemigrarendiferentesdirecciones. Evolucinrpidadelaaplicacin. Terminasmsrpido!.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
Conclusiones::Continuacin.
LosllamadosFrameworko,WAF,esunaseriedelibreras(toolkits)quesehan unido bajo un nico esquema de colaboracin para que de manera rpida (RAD: RapidApplicationDevelopment)logremosdesarrollarnuestrasaplicaciones.

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
SitiosenInternet::Continuacin
Definicionesbsicas

DesarrollodesoftwareWikipedia(http://es.wikipedia.org/wiki/Desarrollo_de_software) *DiseowebWikipedia(http://es.wikipedia.org/wiki/Diseno_web) DesarrollowebWikipedia(http://es.wikipedia.org/wiki/Desarrollo_web) AplicacinwebWikipedia(http://es.wikipedia.org/wiki/Aplicacion_web) PatronesdediseoconPHP5(http://www.phppatterns.com/) CharlaDesarrollodeAplicacionesWebconPerlSimplicidad,Productividady Elegancia,Copyright(c)20042006,ErnestoHernndezNovich,VELUG,CaracasPerl Mongers.<emhn@usb.ve>

CharlaDesarrollowebenPythonusandoelframeworkDjangoBlogdeMilMazz

(http://www.milmazz.com/)

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5
SitiosenInternet::Continuacin
PatronesdeDiseo

*PatrndediseoWikipedia(http://es.wikipedia.org/wiki/Patron_de_diseno) Designpattern(computerscience)Wikipedia MVCWikipedia(http://es.wikipedia.org/wiki/MVC) ModelViewControllerWikipedia(http://en.wikipedia.org/wiki/Modelviewcontroller) PatronesdeDiseo(http://home.earthlink.net/~huston2/dp/patterns.html)

(http://en.wikipedia.org/wiki/Design_pattern_(computer_science))

Desarrollorpidodeaplicaciones!

PatronesdediseoyOrientacinaObjetosenPHP5

Graciasporsuatencin!
VisitanuestrosBlog!

http://lcaballero.8k.com/ http://www.jesuslara.com.ve/blog/
Visitaydescargaestetrabajo!

https://finde.gob.ve/projects/lcaballerodoc/
Escribenos!
leonardocaballero@gmail.com jesuslara@gmail.com

Desarrollorpidodeaplicaciones!

También podría gustarte