patrones de diseño y orientacion a objetos en php
-
Upload
julio-cesar-brizuela -
Category
Documents
-
view
1.848 -
download
6
description
Transcript of patrones de diseño y orientacion a objetos en php
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
LicenciaLicencia
Copyright (c) 2006 Anibal RojasCopyright (c) 2006 Anibal Rojas
Copyright (c) 20042006 Ernesto HernándezNovich.Copyright (c) 20042006 Ernesto HernándezNovich.
Modificaciones y adaptaciones. Modificaciones y adaptaciones.
Copyright (c) 2006, 2007 Leonardo Caballero / Jesús Lara.Copyright (c) 2006, 2007 Leonardo Caballero / Jesús Lara.
Permission is granted to copy, distribute and/or modify this Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation document under the terms of the GNU Free Documentation
License, Version 1.2 or any later version published by the Free License, Version 1.2 or any later version published by the Free
Software Foundation; with no Invariant Sections, no FrontCover Software Foundation; with no Invariant Sections, no FrontCover
Texts, and no BackCover Texts. A copy of the license is included Texts, and no BackCover Texts. A copy of the license is included
in the section entitled "GNU Free Documentation License".in the section entitled "GNU Free Documentation License".
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
GNU Free Documentation LicenseGNU Free Documentation License
Puede obtener una copia de la licencia "GNU Free Documentation Puede obtener una copia de la licencia "GNU Free Documentation
License" en los ficheros llamados "copyright.txt" en ingles, License" en los ficheros llamados "copyright.txt" en ingles,
"copyright.es.txt" en español o en los siguientes "copyright.es.txt" en español o en los siguientes ssitiositios en Internet en Internet::
• http://www.gnu.org/copyleft/fdl.htmlhttp://www.gnu.org/copyleft/fdl.html
• http://www.fsf.org/licensing/licenses/fdl.htmlhttp://www.fsf.org/licensing/licenses/fdl.html
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Definiciones básicasDefiniciones básicas
Estas definiciones son más importante de lo que parece. Estas definiciones son más importante de lo que parece.
• Desarrollo de software.Desarrollo de software.
• Diseño Web.Diseño Web.
• Desarrollo Web.Desarrollo Web.
• Aplicación Web.Aplicación Web.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Tecnologías involucradas en la Web.Tecnologías involucradas en la Web.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Funcionamiento básico de una Aplicación Web.Funcionamiento básico de una Aplicación Web.
1)1) El usuario abre un URL.El usuario abre un URL.
2)2) Llena un formulario.Llena un formulario.
3)3) Oprime alguno de los botones.Oprime alguno de los botones.
4)4) La aplicación genera un nuevo formulario con resultados.La aplicación genera un nuevo formulario con resultados.
Desde el punto de vista del Usuario:Desde el punto de vista del Usuario:
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Funcionamiento básico de una Aplicación Web :: Continuación.Funcionamiento básico de una Aplicación Web :: Continuación.
Solicita un Documento
Es un documento .php
La página se ejecuta y cambia código HTML
La página HTML se envía al cliente
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Funcionamiento básico de una Aplicación Web :: Continuación.Funcionamiento básico de una Aplicación Web :: Continuación.
Interfase del servidor
Compila
Ejecuta
Base de Datos
Motor Zend
Módulo de Funciones
ODBC
1 2
4
3
5
6
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Proyecciones de la Web.Proyecciones de la Web.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Factibilidad para el desarrollo de Aplicaciones Web.Factibilidad para el desarrollo de Aplicaciones Web.
• ¿Cuánto cuesta encontrar un programador que sepa todo eso?¿Cuánto cuesta encontrar un programador que sepa todo eso?
• ¿Cuánto cuesta mantener toda esta mezcla de multilenguaje?¿Cuánto cuesta mantener toda esta mezcla de multilenguaje?
• ¿En cuanto tiempo puede ofrecer al cliente un prototipo de la aplicación?¿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 ¿Cuanto tiempo necesita para cambiar toda la interfaz de usuario de la aplicación
a las necesidades del cliente?a las necesidades del cliente?
• ¿Puede garantizar que la aplicación cumpla con los estándares y normativas de ¿Puede garantizar que la aplicación cumpla con los estándares y normativas de
accesibilidad, reusabilidad y operatividad de la Web?accesibilidad, reusabilidad y operatividad de la Web?
¡Si no sabes responder a estas preguntas con respuestas a tiempos ¡Si no sabes responder a estas preguntas con respuestas a tiempos
cortos, prácticos y razonables, ya entiendes el gran problema!cortos, prácticos y razonables, ya entiendes el gran problema!
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Hablemos de PHP.Hablemos de PHP.
• Originalmente PHP fue siglas de Personal Home Page Tools. Originalmente PHP fue siglas de Personal Home Page Tools.
• Creado en 1995 por Rasmu Lerdorf. Creado en 1995 por Rasmu Lerdorf.
• Año 1997, cambios significativos. Año 1997, cambios significativos.
• Al redefinirse el motor recibió las siglas del acrónimo Hypertext Pre Processor Al redefinirse el motor recibió las siglas del acrónimo Hypertext Pre Processor
• PHP 3, creado por Andi Gutmans y Zeev Zuraski. PHP 3, creado por Andi Gutmans y Zeev Zuraski.
• Motor Zend. Motor Zend.
• PHP 4 (año 2000). PHP 4 (año 2000).
• PHP 5 (año 2004). PHP 5 (año 2004).
• Está previsto el lanzamiento en breve de la rama 6 de PHP. 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.PHP 4 perderá su estado de estable el 31 de diciembre del 2007.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Introducción a PHP5.Introducción a PHP5.
• Soporte sólido para Programación Orientada a Objetos (o OOP) con PHP.Soporte sólido para Programación Orientada a Objetos (o OOP) con PHP.
• Data Objects. Data Objects.
• Mejoras de rendimiento. Mejoras de rendimiento.
• Mejor soporte para MySQL con extensión de rewrite completa. Mejor soporte para MySQL con extensión de rewrite completa.
• Mejor soporte a XML (XPath, DOM, entre otros). Mejor soporte a XML (XPath, DOM, entre otros).
• Soporte nativo para SQLite. Soporte nativo para SQLite.
• Soporte integrado para SOAP. Soporte integrado para SOAP.
• Iteradores de datos. Iteradores de datos.
• Excepciones de errores. Excepciones de errores.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
PHP5 y Programación Orientación a Objetos.PHP5 y Programación Orientación a Objetos.
PHP5 soporta una gran cantidad de funcionalidades para OOP.PHP5 soporta una gran cantidad de funcionalidades para OOP.
• Métodos constructores y destructores.Métodos constructores y destructores.
• Métodos setter y getter.Métodos setter y getter.
• Métodos mágicos.Métodos mágicos.
• Clases, objetos y variables estáticas, privadas y protegidas.Clases, objetos y variables estáticas, privadas y protegidas.
• Clases abstractas.Clases abstractas.
• Interfaces.Interfaces.
• Abstracción de datos.Abstracción de datos.
• Standard PHP Library (SPL).Standard PHP Library (SPL).
• Clases extendidas, excepciones, iteradores.Clases extendidas, excepciones, iteradores.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Patrones de diseño.Patrones de diseño.
Los patrones son simples soluciones a problemas recurrentes que ocurren una y otra Los patrones son simples soluciones a problemas recurrentes que ocurren una y otra vez en nuestro entorno.vez en nuestro entorno.
Luego de llegar a la solución, encapsulamos todas las variables y factores para llegar 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 a la solución y disponemos de una “receta” para resolver mil veces el problema sin tener que “reinventar la rueda”.tener que “reinventar la rueda”.
Los desarrolladores los usan como una forma de reutilizar la experiencia, Los desarrolladores los usan como una forma de reutilizar la experiencia, clasificando las soluciones bajo “términos” de común denominación ¿Un clasificando las soluciones bajo “términos” de común denominación ¿Un diccionario?, eso lo haces con un singleton+registry pattern.diccionario?, eso lo haces con un singleton+registry pattern.
Causando además, un idioma común entre programadores de distintos lenguajes.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.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
● Interfaz gráfica.
● Optimización de Código.
● Reutilización de componentes.
● Simplicidad de las soluciones.
En el área de patrones de diseño hablamos de solventar problemas de:
Patrones de diseño :: Continuación.Patrones de diseño :: Continuación.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Uso de los patrones de diseño.Uso de los patrones de diseño.
Los patrones de diseño nos permiten: Los patrones de diseño nos permiten:
• Extensibilidad.Extensibilidad.
• Flexibilidad.Flexibilidad.
• Concurrencia.Concurrencia.
• Organización.Organización.
• Soluciones ya probadas y efectivas.Soluciones ya probadas y efectivas.
• Mayor facilidad para hacer cambios.Mayor facilidad para hacer cambios.
• Reutilización.Reutilización.
• Refactorización.Refactorización.
• Idioma común de intercambio de soluciones.Idioma común de intercambio de soluciones.
• Buenas prácticas en el desarrollo de Software.Buenas prácticas en el desarrollo de Software.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
● 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?).
Lo que se logra en toda aplicación, al implementar patrones es que, en conjunto con la programación Orientada a Objetos (OOP):
Ideas básicas en el desarrollo de aplicaciones.Ideas básicas en el desarrollo de aplicaciones.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Clasificación de los patrones de diseño.Clasificación de los patrones de diseño.
De creación:De creación:
Como se crean instancias de los objetos y/o como se implementan.Como se crean instancias de los objetos y/o como se implementan.
• Singleton, Multiton, Facade.Singleton, Multiton, Facade.
Estructurales:Estructurales:
Como se relacionan y combinan las clases para crear nuevas estructuras.Como se relacionan y combinan las clases para crear nuevas estructuras.
• Abtract Factory, Visitor, Facade, Flyweight, Adapter.Abtract Factory, Visitor, Facade, Flyweight, Adapter.
De comportamiento:De comportamiento:
Como interactúan y cooperan las clases.Como interactúan y cooperan las clases.
• Decorator, Memento, Chain of Responsability, Flyweight, Adapter.Decorator, Memento, Chain of Responsability, Flyweight, Adapter.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Clasificación de los patrones de diseño :: Continuación.Clasificación de los patrones de diseño :: Continuación.
De ámbito:De ámbito:
De Como se utilizan dinámicamente los Objetos.De Como se utilizan dinámicamente los Objetos.
• Delegator, Observer, Interpreter, Visitor.Delegator, Observer, Interpreter, Visitor.
De operaciónDe operación
De como se comportará la aplicación.De como se comportará la aplicación.
• Business Logic, Proxy Adapter, Front Controller, ModelView Controller.Business Logic, Proxy Adapter, Front Controller, ModelView Controller.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
MVC (Model view controller).MVC (Model view controller).
1)1) Patrón de diseño orientado a objetos.Patrón de diseño orientado a objetos.
2)2) Describe cualquier aplicación con interacción humana y es particularmente Describe cualquier aplicación con interacción humana y es particularmente
adecuado para aplicaciones Web.adecuado para aplicaciones Web.
3)3) Separa clara y consistentemente las "preocupaciones":Separa clara y consistentemente las "preocupaciones":
1)1) Modelo (Model) Interacción con la base de datos.Modelo (Model) Interacción con la base de datos.
2)2) Vista (View) Presentación de la información al usuario.Vista (View) Presentación de la información al usuario.
3)3) Controlador (Controller) Flujo de información y procesos.Controlador (Controller) Flujo de información y procesos.
Si su aplicación no está diseñada siguiendo MVC, inevitablemente tendrá problemas Si su aplicación no está diseñada siguiendo MVC, inevitablemente tendrá problemas
de escalabilidad, de mantenimiento y de extensión.de escalabilidad, de mantenimiento y de extensión.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
MVC (Model view controller) :: Continuación.MVC (Model view controller) :: Continuación.
• Permite múltiples representaciones (vistas) de la misma información (modelo).Permite múltiples representaciones (vistas) de la misma información (modelo).
• De forma muy fácil permite agregar, remover o cambiar interfaces de usuarios De forma muy fácil permite agregar, remover o cambiar interfaces de usuarios
(vistas).(vistas).
• Permite responder a lo ingresado por el usuario (controladora) para ser Permite responder a lo ingresado por el usuario (controladora) para ser
fácilmente cambiando.fácilmente cambiando.
• Permite que múltiples desarrollos simultáneamente actualiza la interfaz, la lógica 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.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.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”).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 Ayuda a enfocar a los desarrolladores en un solo simple aspecto de la aplicación
al mismo tiempo.al mismo tiempo.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
MVC con PHP5.MVC con PHP5.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
MVC con PHP5 :: Continuación.MVC con PHP5 :: Continuación.
1)1) Solicitud: El usuario ejecuta un Solicitud: El usuario ejecuta un NavegadorNavegador, pide un URL solicitando a la , pide un URL solicitando a la AplicaciónAplicación..
2)2) Despacha: La Despacha: La AplicaciónAplicación delega a la capa delega a la capa ControladoraControladora la petición del usuario desde la petición del usuario desde
el el NavegadorNavegador..
3)3) Almacena: Consulta en la capa Almacena: Consulta en la capa ModeloModelo por medio a la capa de por medio a la capa de DatosDatos del manejador del manejador
de base de datos existente.de base de datos existente.
4)4) Devuelve: La capa de Devuelve: La capa de DatosDatos devuelve los resultados en “data pura” a la capa devuelve los resultados en “data pura” a la capa
ControladoraControladora..
5)5) Genera: La capa Genera: La capa ControladoraControladora genera la capa de genera la capa de VistaVista en base a los tipos de datos en base a los tipos de datos
generados por la capa de generados por la capa de DatosDatos..
6)6) Responde: La Responde: La VistaVista generada se envía como respuesta a la solicitud al generada se envía como respuesta a la solicitud al NavegadorNavegador..
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
MVC con PHP5 :: Continuación.MVC con PHP5 :: Continuación.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Clasificación de los patrones de acuerdo a la capa MVC.Clasificación de los patrones de acuerdo a la capa MVC.
Capa de Datos (Data Layer)Capa de Datos (Data Layer)• ORM – ActiveRecord.ORM – ActiveRecord.
• Data Layer.Data Layer.
• Delegator.Delegator.
Modelo (Lógica)Modelo (Lógica)• Abstract Factory y Registry.Abstract Factory y Registry.
• Value Object.Value Object.
• Business Delegate.Business Delegate.
• Aggregate Entity.Aggregate Entity.
• Service Locator.Service Locator.
• Strategy.Strategy.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Clasificación de los patrones de acuerdo a la capa MVC.Clasificación de los patrones de acuerdo a la capa MVC.
ControladoraControladora• Inherit Application Controller.Inherit Application Controller.
• Front Controller.Front Controller.
• Delegate Controller.Delegate Controller.
• Service Controller.Service Controller.
VistaVista• Decoration Filter.Decoration Filter.
• Helper View.Helper View.
• Composite View.Composite View.
• Template View.Template View.
• Dispatcher View.Dispatcher View.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Patterns Design: the Real Life!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.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Patterns Design: the Real Life!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.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Un ejemplo Desglosado (Memento):Un ejemplo Desglosado (Memento):
Necesidad:
● Retornar un estado previo de una operación (operaciones “undo” o “Rollback”).
● Retonar a estados “específicos” del objeto (History).
● Crear estados de “guardado temporal” o “Check points”.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
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.
Un ejemplo Desglosado (Memento):Un ejemplo Desglosado (Memento):
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Un ejemplo Desglosado (Memento):Un ejemplo Desglosado (Memento):
Estructura:
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
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.
Un ejemplo Desglosado (Memento):Un ejemplo Desglosado (Memento):
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
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”).
Un ejemplo Desglosado (Memento):Un ejemplo Desglosado (Memento):
Para más implementaciones les recomiendo que visitenwww.phppatterns.com
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
De lo horrible a practico :: El Camino MVC en 10 pasosDe 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.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
De lo horrible a practico :: El Camino MVC en 10 pasosDe 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?
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
De lo horrible a practico :: FrameworksDe lo horrible a practico :: Frameworks
Un Framework, “Marco de Trabajo” o WAF (Web Application Framework), es una 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 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 para que de manera rápida (RAD: Rapid Application Development) logremos
desarrollar nuestras aplicaciones.desarrollar nuestras aplicaciones.
Entre las ventajas se cuenta:Entre las ventajas se cuenta:
• No hay que definir “marco de desarrollo”, solo “rellenar” los huecos que los No hay que definir “marco de desarrollo”, solo “rellenar” los huecos que los
frameworks nos indican.frameworks nos indican.
• Trabajamos sobre un Estándar que miles de personas ya conocen.Trabajamos sobre un Estándar que miles de personas ya conocen.
• Facilidad para encontrar herramientas, librerías o documentación.Facilidad para encontrar herramientas, librerías o documentación.
• Relación Coste de aprendizaje vs. Aplicabilidad mínima.Relación Coste de aprendizaje vs. Aplicabilidad mínima.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
De lo horrible a practico :: FrameworksDe lo horrible a practico :: Frameworks
Algunos Framework MVC:Algunos Framework MVC:
• Solar.Solar.
• CakePHP.CakePHP.
• CodeIgniter.CodeIgniter.
• Symfony.Symfony.
• PHP on Trax.PHP on Trax.
• Zend Framework.Zend Framework.
• Agavi, entre otros...Agavi, entre otros...
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Comparativa de 10 Framework en PHPComparativa de 10 Framework en PHP
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
ConclusionesConclusiones
El desarrollo de web aplicaciones mezcla es un conjunto de tecnologías, El desarrollo de web aplicaciones mezcla es un conjunto de tecnologías, estándares estándares
y normativas de accesibilidad, reusabilidad y operatividad de la Web que se deben y normativas de accesibilidad, reusabilidad y operatividad de la Web que se deben
cumplir para evitar posteriores “dolores de cabeza” por desconocimiento del entorno cumplir para evitar posteriores “dolores de cabeza” por desconocimiento del entorno
de despliegue de la aplicación, es decir la Web.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 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 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 lenguaje de programación por lo que ofrece, un idioma común entre programadores
de distintos lenguajes.de distintos lenguajes.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Conclusiones :: Continuación.Conclusiones :: Continuación.
La programación MVC aplicada a la web no es una opción, ¡es una necesidad!La programación MVC aplicada a la web no es una opción, ¡es una necesidad!
¿Por que?¿Por que?
• Desarrollas para una interfaz, no para una implementación.Desarrollas para una interfaz, no para una implementación.
• Todo tu equipo se dedica a su especialidad preferida.Todo tu equipo se dedica a su especialidad preferida.
• Desarrollo sostenible y mantenible.Desarrollo sostenible y mantenible.
• Es posible migrar en diferentes direcciones.Es posible migrar en diferentes direcciones.
• Evolución rápida de la aplicación.Evolución rápida de la aplicación.
• ¡Terminas más rápido!.¡Terminas más rápido!.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
Conclusiones :: Continuación.Conclusiones :: Continuación.
Los llamados “Framework” o , “WAF”, es una serie de librerías (toolkits) que se han 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: unido bajo un único esquema de colaboración para que de manera rápida (RAD:
Rapid Application Development) logremos desarrollar nuestras aplicaciones.Rapid Application Development) logremos desarrollar nuestras aplicaciones.
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
SitiosSitios en Internet en Internet :: Continuación :: Continuación
Definiciones básicasDefiniciones básicas
• Desarrollo de software Wikipedia Desarrollo de software Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_de_software)(http://es.wikipedia.org/wiki/Desarrollo_de_software)
• * Diseño web Wikipedia * Diseño web Wikipedia (http://es.wikipedia.org/wiki/Diseno_web)(http://es.wikipedia.org/wiki/Diseno_web)
• Desarrollo web Wikipedia Desarrollo web Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_web)(http://es.wikipedia.org/wiki/Desarrollo_web)
• Aplicación web Wikipedia Aplicación web Wikipedia (http://es.wikipedia.org/wiki/Aplicacion_web)(http://es.wikipedia.org/wiki/Aplicacion_web)
• Patrones de diseño con PHP5 Patrones de diseño con PHP5 (http://www.phppatterns.com/)(http://www.phppatterns.com/)
• Charla “Desarrollo de Aplicaciones Web con Perl Simplicidad, Productividad y Charla “Desarrollo de Aplicaciones Web con Perl Simplicidad, Productividad y
Elegancia”, Copyright (c) 20042006, Ernesto HernándezNovich, VELUG, Caracas Perl Elegancia”, Copyright (c) 20042006, Ernesto HernándezNovich, VELUG, Caracas Perl
Mongers. Mongers. <[email protected]><[email protected]>
• Charla “Desarrollo web en Python usando el framework Django” Blog de MilMazzCharla “Desarrollo web en Python usando el framework Django” Blog de MilMazz
(http://www.milmazz.com/)(http://www.milmazz.com/)
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
SitiosSitios en Internet en Internet :: Continuación :: Continuación
Patrones de DiseñoPatrones de Diseño
• * Patrón de diseño Wikipedia * Patrón de diseño Wikipedia ((http://es.wikipedia.org/wiki/Patron_de_disenohttp://es.wikipedia.org/wiki/Patron_de_diseno))
• Design pattern (computer science) Wikipedia Design pattern (computer science) Wikipedia
((http://en.wikipedia.org/wiki/Design_pattern_(computer_science)http://en.wikipedia.org/wiki/Design_pattern_(computer_science)))
• MVC Wikipedia MVC Wikipedia ((http://es.wikipedia.org/wiki/MVChttp://es.wikipedia.org/wiki/MVC))
• Model View Controller Wikipedia Model View Controller Wikipedia ((http://en.wikipedia.org/wiki/Modelviewcontrollerhttp://en.wikipedia.org/wiki/Modelviewcontroller))
• Patrones de Diseño Patrones de Diseño (http://home.earthlink.net/~huston2/dp/patterns.html)(http://home.earthlink.net/~huston2/dp/patterns.html)
Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5
¡¡DesarrolloDesarrollo rápidorápido dede aplicacionesaplicaciones!!
¡Gracias por su atención!
[email protected]@[email protected]@gmail.com
¡¡VisitaVisita nuestrosnuestros Blog! Blog!
¡Escribenos!¡Escribenos!
¡Visita y descarga este trabajo!¡Visita y descarga este trabajo!
https://finde.gob.ve/projects/lcaballerodoc/https://finde.gob.ve/projects/lcaballerodoc/
http://lcaballero.8k.com/http://lcaballero.8k.com/http://www.jesuslara.com.ve/blog/http://www.jesuslara.com.ve/blog/