Este manual es sobre la ponencia de "Patrones de diseño y Orientación a Objetos en PHP5", la cual toca los siguientes temas: Definiciones básicas sobre los siguientes términos: Desarrollo de software, Diseño y Desarrollo Aplicación Web, Tecnología involucrada, Funcionamiento básico, Proyecciones de la Web, Factibilidad para el desarrollo de aplicación. Luego se habla sobre PHP, seguidamente se introduce a PHP5 y sus características de programación Orientación a Objetos. Además se demuestran las nociones básicas de los Patrones de diseños, sus usos, sus ideas básicas para el desarrollo de aplicaciones, clasificaciones, MVC (Model View Controller) aplicándolo en cada una de las capas los patrones de diseño y desarrollo mas comunes con PHP5. Luego se describe el uso de patrones de diseño en la vida real, es decir con usos prácticos, se explica un ejemplo Desglosado del patrón Memento. Siguiendo de con las buenas practicas lo llevamos "De lo horrible a lo practico" dando una guia hacia el Camino MVC en 10 pasos, luego explicamos los Framework, mostramos una tabla comparativa de dichas herramientas en PHP. Y para concluir se demostrara un caso de uso con el Framework de desarrollo Tomates desarrollo hecho en Venezuela, como anexo se dejan las referencias electrónicas de Sitios de Internet.
2. Patrones de diseño y Orientación a Objetos en PHP5
Licencia
Copyright (c) 2006 Anibal Rojas
Copyright (c) 20042006 Ernesto HernándezNovich.
Modificaciones y adaptaciones.
Copyright (c) 2006, 2007 Leonardo Caballero / Jesús Lara.
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
Software Foundation; with no Invariant Sections, no FrontCover
Texts, and no BackCover Texts. A copy of the license is included
in the section entitled quot;GNU Free Documentation Licensequot;.
¡Desarrollo rápido de aplicaciones!
3. Patrones de diseño y Orientación a Objetos en PHP5
GNU Free Documentation License
Puede obtener una copia de la licencia quot;GNU Free Documentation
Licensequot; en los ficheros llamados quot;copyright.txtquot; en ingles,
quot;copyright.es.txtquot; en español o en los siguientes sitios en Internet:
http://www.gnu.org/copyleft/fdl.html
•
http://www.fsf.org/licensing/licenses/fdl.html
•
¡Desarrollo rápido de aplicaciones!
10. Patrones de diseño y Orientación a Objetos en PHP5
Factibilidad para el desarrollo de Aplicaciones Web.
• ¿Cuánto cuesta encontrar un programador que sepa todo eso?
• ¿Cuánto cuesta mantener toda esta mezcla de multilenguaje?
• ¿En cuanto tiempo puede ofrecer al cliente un prototipo de la aplicación?
• ¿Cuanto tiempo necesita para cambiar toda la interfaz de usuario de la aplicación
a las necesidades del cliente?
• ¿Puede garantizar que la aplicación cumpla con los estándares y normativas de
accesibilidad, reusabilidad y operatividad de la Web?
¡Si no sabes responder a estas preguntas con respuestas a tiempos
cortos, prácticos y razonables, ya entiendes el gran problema!
¡Desarrollo rápido de aplicaciones!
11. Patrones de diseño y Orientación a Objetos en PHP5
Hablemos de PHP.
Originalmente PHP fue siglas de Personal Home Page Tools.
•
Creado en 1995 por Rasmu Lerdorf.
•
Año 1997, cambios significativos.
•
Al redefinirse el motor recibió las siglas del acrónimo Hypertext Pre Processor
•
PHP 3, creado por Andi Gutmans y Zeev Zuraski.
•
Motor Zend.
•
PHP 4 (año 2000).
•
PHP 5 (año 2004).
•
Está previsto el lanzamiento en breve de la rama 6 de PHP.
•
PHP 4 perderá su estado de estable el 31 de diciembre del 2007.
•
¡Desarrollo rápido de aplicaciones!
12. Patrones de diseño y Orientación a Objetos en PHP5
Introducción a PHP5.
Soporte sólido para Programación Orientada a Objetos (o OOP) con PHP.
•
Data Objects.
•
Mejoras de rendimiento.
•
Mejor soporte para MySQL con extensión de rewrite completa.
•
Mejor soporte a XML (XPath, DOM, entre otros).
•
Soporte nativo para SQLite.
•
Soporte integrado para SOAP.
•
Iteradores de datos.
•
Excepciones de errores.
•
¡Desarrollo rápido de aplicaciones!
13. Patrones de diseño y Orientación a Objetos en PHP5
PHP5 y Programación Orientación a Objetos.
PHP5 soporta una gran cantidad de funcionalidades para OOP.
Métodos constructores y destructores.
•
Métodos setter y getter.
•
Métodos mágicos.
•
Clases, objetos y variables estáticas, privadas y protegidas.
•
Clases abstractas.
•
Interfaces.
•
Abstracción de datos.
•
Standard PHP Library (SPL).
•
Clases extendidas, excepciones, iteradores.
•
¡Desarrollo rápido de aplicaciones!
14. Patrones de diseño y Orientación a Objetos en PHP5
Patrones de diseño.
Los patrones son simples soluciones a problemas recurrentes que ocurren una y otra
vez en nuestro entorno.
Luego de llegar a la solución, encapsulamos todas las variables y factores para llegar
a la solución y disponemos de una “receta” para resolver mil veces el problema sin
tener que “reinventar la rueda”.
Los desarrolladores los usan como una forma de reutilizar la experiencia,
clasificando las soluciones bajo “términos” de común denominación ¿Un
diccionario?, eso lo haces con un singleton+registry pattern.
Causando además, un idioma común entre programadores de distintos lenguajes.
Uno de los principales precursores del movimiento
acerca de los Design Patterns fue Martin Fowler.
¡Desarrollo rápido de aplicaciones!
16. Patrones de diseño y Orientación a Objetos en PHP5
Uso de los patrones de diseño.
Los patrones de diseño nos permiten:
Extensibilidad.
•
Flexibilidad.
•
Concurrencia.
•
Organización.
•
Soluciones ya probadas y efectivas.
•
Mayor facilidad para hacer cambios.
•
Reutilización.
•
Refactorización.
•
Idioma común de intercambio de soluciones.
•
Buenas prácticas en el desarrollo de Software.
•
¡Desarrollo rápido de aplicaciones!
17. Patrones de diseño y Orientación a Objetos en PHP5
Ideas básicas en el desarrollo de aplicaciones.
Lo que se logra en toda aplicación, al implementar patrones es que, en conjunto con
la programación Orientada a Objetos (OOP):
Encapsulemos la lógica de la aplicación de tal manera que sea
●
innecesario pensar a bajo nivel.
(¿Tendré que escribir una función que haga eso?)
Desviarse de la lógica de mi aplicación.
●
(¿Para implementar AJAX debo usar otra cosa?)
Preocuparse únicamente por la “operatividad de la aplicación”
●
(¿Funcionará esa implementación de roles y seguridad que me “inventé”?).
Lograr una flexibilidad sin límites
●
(¿Funcionará ese objeto en otro proyecto futuro?).
¡Desarrollo rápido de aplicaciones!
18. Patrones de diseño y Orientación a Objetos en PHP5
Clasificación de los patrones de diseño.
De creación:
Como se crean instancias de los objetos y/o como se implementan.
Singleton, Multiton, Facade.
•
Estructurales:
Como se relacionan y combinan las clases para crear nuevas estructuras.
Abtract Factory, Visitor, Facade, Flyweight, Adapter.
•
De comportamiento:
Como interactúan y cooperan las clases.
Decorator, Memento, Chain of Responsability, Flyweight, Adapter.
•
¡Desarrollo rápido de aplicaciones!
20. Patrones de diseño y Orientación a Objetos en PHP5
MVC (Model view controller).
1) Patrón de diseño orientado a objetos.
2) Describe cualquier aplicación con interacción humana y es particularmente
adecuado para aplicaciones Web.
3) Separa clara y consistentemente las quot;preocupacionesquot;:
1) Modelo (Model) Interacción con la base de datos.
2) Vista (View) Presentación de la información al usuario.
3) Controlador (Controller) Flujo de información y procesos.
Si su aplicación no está diseñada siguiendo MVC, inevitablemente tendrá problemas
de escalabilidad, de mantenimiento y de extensión.
¡Desarrollo rápido de aplicaciones!
21. Patrones de diseño y Orientación a Objetos en PHP5
MVC (Model view controller) :: Continuación.
• Permite múltiples representaciones (vistas) de la misma información (modelo).
• De forma muy fácil permite agregar, remover o cambiar interfaces de usuarios
(vistas).
• Permite responder a lo ingresado por el usuario (controladora) para ser
fácilmente cambiando.
• Permite que múltiples desarrollos simultáneamente actualiza la interfaz, la lógica
de negocios o introducir un aplicación nueva sin afectar a otros código fuentes.
• Los cambios pueden suceder dinámicamente en la ejecución de la aplicación.
• Promete reducir código (ej. “una vista puede ser usada con diferentes modelos”).
• Ayuda a enfocar a los desarrolladores en un solo simple aspecto de la aplicación
al mismo tiempo.
¡Desarrollo rápido de aplicaciones!
23. Patrones de diseño y Orientación a Objetos en PHP5
MVC con PHP5 :: Continuación.
1) Solicitud: El usuario ejecuta un Navegador, pide un URL solicitando a la Aplicación.
2) Despacha: La Aplicación delega a la capa Controladora la petición del usuario desde
el Navegador.
3) Almacena: Consulta en la capa Modelo por medio a la capa de Datos del manejador
de base de datos existente.
4) Devuelve: La capa de Datos devuelve los resultados en “data pura” a la capa
Controladora.
5) Genera: La capa Controladora genera la capa de Vista en base a los tipos de datos
generados por la capa de Datos.
6) Responde: La Vista generada se envía como respuesta a la solicitud al Navegador.
¡Desarrollo rápido de aplicaciones!
27. Patrones de diseño y Orientación a Objetos en PHP5
Patterns Design: the Real Life!
Memento + Singleton > Gestión de deshacer,rehacer,historia, transacciones.
Facade > Gestión de documentos de varios tipos en una misma interfaz.
Facade + Adapter > Una única interfaz de acceso para múltiples bases de datos.
Singleton + Registry > Sistemas de Diccionario, i18n (Internacionalización),
Registros de Sistema y configuración.
Abstract + Composite + Helper View > Construcción de vistas complejas a
partir de archivos sencillos.
Observer + State > Sistema de gestión online de usuarios.
Decorator + Composite > Sistemas de reportes.
¡Desarrollo rápido de aplicaciones!
28. Patrones de diseño y Orientación a Objetos en PHP5
Patterns Design: the Real Life!
Abstract Factory + Singleton > Fabrica abstracta de controles complejos.
Flyweight > Gestión de vistas y uso de class (CSS) y IDREF (XML).
Iterator + Data Layer > Explorar datos dentro de los objetos sin iterar sobre el
objeto en si (ej. Explorar sobre los datos de una DB usando FOREACH).
Singleton + Decorator + Hierarchical Visitor > Gestión de usuarios y Roles.
Composite + Facade + Interpreter > Gestores de idiomas especializados,
parsers de funciones.
Session Facade + Delegator > Loggers y gestores de sesiones de usuario.
¡Desarrollo rápido de aplicaciones!
30. Patrones de diseño y Orientación a Objetos en PHP5
Un ejemplo Desglosado (Memento):
Sumario: (Qué debemos identificar):
Identificar la clase que posee la “habilidad” de tomar un “snapshot” de si
●
misma. (clase con el rol “Originator”).
Diseñar una clase que no hace nada más que que aceptar y entregar los
●
distintos “snapshots” de objetos (clase con el rol “memento”).
Diseñar una clase “gestora” a la cual el “originator” puede preguntar para
●
que retorne un “estado”; puede causar que el “originator” vuelva a estados
previos (clase con el rol “caretaker”).
La clase cliente (Originator) sabe “cuando” debe salvarse su snapshot.
●
La clase cuidadora (CareTaker) sabe “como” debe guardarse el snapshot.
●
La clase contenedora (memento) sabe “donde” debe guardarse el snapshot.
●
¡Desarrollo rápido de aplicaciones!
32. Patrones de diseño y Orientación a Objetos en PHP5
Un ejemplo Desglosado (Memento):
Estructura: (Continuación):
Diagrama de Secuencia:
El objeto (originator) pide un “checkpoint” o revisión inicial a su
●
custodio (caretaker).
El custodio (caretaker) toma el objeto actual y guarda una copia en
●
una clase estática memento (Set).
Si el cliente desea un “rollback” o deshacer una acción, 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
reemplaza con el extraído desde el memento.
¡Desarrollo rápido de aplicaciones!
33. Patrones de diseño y Orientación a Objetos en PHP5
Un ejemplo Desglosado (Memento):
Implementación:
Cada objeto puede llamar “estáticamente” a un “memento object” (Checkpoint State)
●
usando una clase “pasarela” llamada Caretaker, que toma las funciones de
monitorización del objeto base (Originator); inicialmente el objeto crea una copia de
si mismo dentro del memento (primer estado).
Memento Object puede simplemente recibir (en un arreglo estático) nuevas copias
●
(snapshots) del objeto base (Originator) e indizarlas para su obtención rápida
(unlimited undo y lista de historia).
Memento debe ser “opaco”; es decir, solamente debe saber que guardó un estado de
●
un objeto, sin averiguar que tipo de objeto guardó (Claro que guardando el índice de
“a quien” guardó); adicionalmente, el cliente (Originator) desconoce la naturaleza del
memento (se entiende con él a través del “caretaker”).
Para más implementaciones les recomiendo que visiten
www.phppatterns.com
¡Desarrollo rápido de aplicaciones!
34. Patrones de diseño y Orientación a Objetos en PHP5
De lo horrible a practico :: El Camino MVC en 10 pasos
1. Desarrollas proceduralmente según tu manual de 10 días de PHP3, mezclas HTML,
código de conexión a la base de datos, loops sobre resultsets, lógica condicional, estilo
(CSS) en una misma página.
2. Te das cuenta que si abstraes proceduralmente la lógica de conexión a datos (conectar,
consultar, insertar, borrar) podrás cambiar de DB sin traumas (eso dices tú).
3. ¿Si abstraes la lógica también, no será mejor?, ¡nacen los includes infinitos!.
4. ¿Y si centralizo esta clase en un objeto?, ¡puedo tener varias instancias!.
5. Creo que la clase hace mucho, ¿por que no la separamos y reducimos el acoplamiento
de los objetos?.
6. Dos objetos diferentes tienen propiedades similares, ¿Por qué no una clase abstracta?.
7. ¿Puedo gestionar todo desde una clase única de registro?, configuraciones únicas y
Controladora Frontal.
¡Desarrollo rápido de aplicaciones!
35. Patrones de diseño y Orientación a Objetos en PHP5
De lo horrible a practico :: El Camino MVC en 10 pasos
8. Te das cuenta que si separas el código HTML de las clases de la aplicación, puedes
tener otros tipos de vistas (PDF, XML, WSDL, GTK, entre otros).
9. Tu gran aplicación consiste en miles de clases, unidas entre sí (alta cohesión) en
distintas capas (ntier), con pocas relaciones entre ellas (bajo acoplamiento), que
interactúan unas con otras sin conocerse (alta composición), muy genéricas (baja
implementación) y con estándares seguros sobre ordenamiento, nombres de
funciones (interfaces) y seguimiento de patrones.
10. ¡Felicidades!, haz llegado a MVC! ... ¿y ahora ... que?
¡Desarrollo rápido de aplicaciones!
36. Patrones de diseño y Orientación a Objetos en PHP5
De lo horrible a practico :: Frameworks
Un Framework, “Marco de Trabajo” o WAF (Web Application Framework), es una
serie de librerías (toolkits) que se han unido bajo un único esquema de colaboración
para que de manera rápida (RAD: Rapid Application Development) logremos
desarrollar nuestras aplicaciones.
Entre las ventajas se cuenta:
No hay que definir “marco de desarrollo”, solo “rellenar” los huecos que los
•
frameworks nos indican.
Trabajamos sobre un Estándar que miles de personas ya conocen.
•
Facilidad para encontrar herramientas, librerías o documentación.
•
Relación Coste de aprendizaje vs. Aplicabilidad mínima.
•
¡Desarrollo rápido de aplicaciones!
39. Patrones de diseño y Orientación a Objetos en PHP5
Conclusiones
El desarrollo de web aplicaciones mezcla es un conjunto de tecnologías, estándares
y normativas de accesibilidad, reusabilidad y operatividad de la Web que se deben
cumplir para evitar posteriores “dolores de cabeza” por desconocimiento del entorno
de despliegue de la aplicación, es decir la Web.
Los patrones de diseño, es una forma simple de resolver problemas cotidianos y que
que son muy repetitivos en nuestro entorno. No requiere una implantación con
lenguaje de programación por lo que ofrece, un idioma común entre programadores
de distintos lenguajes.
¡Desarrollo rápido de aplicaciones!
40. Patrones de diseño y Orientación a Objetos en PHP5
Conclusiones :: Continuación.
La programación MVC aplicada a la web no es una opción, ¡es una necesidad!
¿Por que?
Desarrollas para una interfaz, no para una implementación.
•
Todo tu equipo se dedica a su especialidad preferida.
•
Desarrollo sostenible y mantenible.
•
Es posible migrar en diferentes direcciones.
•
Evolución rápida de la aplicación.
•
¡Terminas más rápido!.
•
¡Desarrollo rápido de aplicaciones!
41. Patrones de diseño y Orientación a Objetos en PHP5
Conclusiones :: Continuación.
Los llamados “Framework” o , “WAF”, es una serie de librerías (toolkits) que se han
unido bajo un único esquema de colaboración para que de manera rápida (RAD:
Rapid Application Development) logremos desarrollar nuestras aplicaciones.
¡Desarrollo rápido de aplicaciones!
42. Patrones de diseño y Orientación a Objetos en PHP5
Sitios en Internet :: Continuación
Definiciones básicas
Desarrollo de software Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_de_software)
•
* Diseño web Wikipedia (http://es.wikipedia.org/wiki/Diseno_web)
•
Desarrollo web Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_web)
•
Aplicación web Wikipedia (http://es.wikipedia.org/wiki/Aplicacion_web)
•
Patrones de diseño con PHP5 (http://www.phppatterns.com/)
•
Charla “Desarrollo de Aplicaciones Web con Perl Simplicidad, Productividad y
•
Elegancia”, Copyright (c) 20042006, Ernesto HernándezNovich, VELUG, Caracas Perl
Mongers. <emhn@usb.ve>
Charla “Desarrollo web en Python usando el framework Django” Blog de MilMazz
•
(http://www.milmazz.com/)
¡Desarrollo rápido de aplicaciones!
43. Patrones de diseño y Orientación a Objetos en PHP5
Sitios en Internet :: Continuación
Patrones de Diseño
* Patrón de diseño Wikipedia (http://es.wikipedia.org/wiki/Patron_de_diseno)
•
Design pattern (computer science) Wikipedia
•
(http://en.wikipedia.org/wiki/Design_pattern_(computer_science))
MVC Wikipedia (http://es.wikipedia.org/wiki/MVC)
•
Model View Controller Wikipedia (http://en.wikipedia.org/wiki/Modelviewcontroller)
•
Patrones de Diseño (http://home.earthlink.net/~huston2/dp/patterns.html)
•
¡Desarrollo rápido de aplicaciones!
44. Patrones de diseño y Orientación a Objetos en PHP5
¡Gracias por su atención!
¡Visita nuestros Blog!
http://lcaballero.8k.com/
http://www.jesuslara.com.ve/blog/
¡Visita y descarga este trabajo!
https://finde.gob.ve/projects/lcaballerodoc/
¡Escribenos!
leonardocaballero@gmail.com
jesuslara@gmail.com
¡Desarrollo rápido de aplicaciones!