DESARROLLO DE UN FRAMEWORK EN PHP PARA …



CFT ANDR?S BELLODEPARTAMENTO DE TECNOLOG?ADESARROLLO DE UN FRAMEWORK EN PHP PARA DESARROLLO DE APLICACIONES EN ENTORNOS WEBSJAVIER CARVAJAL OBREQUE.VINICIUS HERN?NDEZ SCHIFFERLI.ENRIQUE OSVALDO MONTERO SAN JUAN.JUAN CARLOS MARCHANT HERNANDEZ2017CFT ANDR?S BELLODEPARTAMENTO DE TECNOLOG?ADESARROLLO DE UN FRAMEWORK EN PHP PARA DESARROLLO DE APLICACIONES EN ENTORNOS WEBS.TRABAJO DE T?TULO PARA OPTAR AL T?TULO DE TECNICO DE NIVEL SUPERIOR EN COMPUTACI?N E INFORM?TICAPROFESOR GU?A: SRTA. SARA NAMINAOJAVIER CARVAJAL OBREQUE.VINICIUS HERN?NDEZ SCHIFFERLIENRIQUE OSVALDO MONTERO SAN JUANJUAN CARLOS MARCHANT HERNANDEZ2017AgradecimientosDedico esta tesis a todas esas personas que hicieron posible el que yo siga adelante con su apoyo y cari?o incondicional a mis profesores del centro de formación técnica Andrés Bello de la ciudad de Temuco, a mis compa?eros por su apoyo, a mis padres, tíos y tías y por darme fuerzas para salir adelante por estar siempre dispuestos a ayudarme cuando yo los necesite, a dios por hacer posible mis estudios. Gracias infinitas a todos.Javier CarvajalUn paso, una meta está siendo concluida. Agradezco en primera instancia a Luis Miranda y Sara Naminao mis profesores, quienes además de ense?ar el conocimiento adquirido, siempre aportaban entusiasmo y simpatía, cuando muchas veces el cansancio físico y psicológico a esas horas vencía. A mi familia, que siempre ha estado al tanto de mis situaciones académicas, en especial a mi hermano mayor Hamal, quien ha demostrado y tomado preocupación constante en mis labores académicas y situaciones personales. Esencialmente a Paulina, por haberme impulsado en todo mi proceso académico, ayudándome en cada momento, entregando calma, dedicación e impulsando cuando muchas veces la frustración ante algunas situaciones académicas me invadía, haciendo cada proceso más llevadero, a ti, muchas gracias. A mi grupo de Tesis, por el conocimiento compartido durante todo este tiempo. Todo lo que he recibido y todo lo que está por llegar se lo agradezco a Dios.Vinicius HernándezPrimero a mi Madre Gloria, por brindarme toda su ayuda y apoyo… gracias por todo lo que me has dado, gracias por amarme tanto, le doy gracias a Dios por tenerte y pedirle que sean por muchos a?os más.A mis suegros, Ramon y Leticia, por aceptarme tal cual como soy, por considerarme un hijo más y darme todo su apoyo. Gracias por todo eso.A mis tíos, Daniel, Héctor y José, porque siempre me han apoyado de una u otra forma. Gracias.A mis profesores del Instituto, gracias por compartir todas sus ense?anzas.A mis 2 amores chicos, mis hijos, Ramon y José, por entregarme todo su amor y apoyo. Alegrarme la vida con sus tonteras. No cambien nunca. Los amo con todo el corazón.Por último, agradecer a la persona que a estado conmigo desde que salimos junto del liceo; a mi esposa, compa?era fiel y amiga, Rossana, por aguantarme y apoyarme en todo, por estar siempre ahí cuando más lo necesite, por amarme con todo su corazón a pesar de mis errores y ma?as que me dan, por confiar en mis capacidades de estar trabajando y estudiando al mismo tiempo, por darme 2 hermosos hijos que han sido mis ojos, y por su amor condicional que nos a mantenido junto más de 20 a?os. Por todo eso…. Gracias…. Y te Amo Mucho.Osvaldo MonteroNah … ?A todos los quiero por igual hasta que me joden!Juan Carlos MarchantCONTENIDO TOC \o "1-3" \h \z \u Capítulo 1 INTRODUCCION PAGEREF _Toc489019408 \h 11.1Descripción del Problema PAGEREF _Toc489019409 \h 21.2Objetivo General. PAGEREF _Toc489019410 \h 31.3Objetivos Específicos. PAGEREF _Toc489019411 \h 4Capítulo 2 MARCO TE?RICO PAGEREF _Toc489019412 \h 52.1Introducción. PAGEREF _Toc489019413 \h 62.2Lenguajes de Programación. PAGEREF _Toc489019414 \h 72.2.1 Historia del Desarrollo Web. PAGEREF _Toc489019415 \h 72.2.2 Evolución de los Lenguajes de Programación. PAGEREF _Toc489019416 \h 92.2.3 PHP. PAGEREF _Toc489019417 \h 112.2.4 MySQL. PAGEREF _Toc489019418 \h 132.2.5 JavaScript, AJAX y JQuery. PAGEREF _Toc489019419 \h 142.2.6 HTML5, CSS3 y Bootstrap. PAGEREF _Toc489019420 \h 162.3Programación Orientada a Objetos. POO. PAGEREF _Toc489019421 \h 192.3.1 Introducción. PAGEREF _Toc489019422 \h 192.3.2 Elementos de la POO. PAGEREF _Toc489019423 \h 232.3.3 Características conceptuales de la POO. PAGEREF _Toc489019424 \h 252.4Patrones de Dise?o. PAGEREF _Toc489019425 \h 352.5Principios SOLID PAGEREF _Toc489019426 \h 382.7.1 Single Responsibility Principle. PAGEREF _Toc489019427 \h 392.7.2 Open Closed Principle. PAGEREF _Toc489019428 \h 392.7.3 Liskov Substitution Principle. PAGEREF _Toc489019429 \h 402.7.4 Interface Segregation Principle PAGEREF _Toc489019430 \h 402.7.5 Dependency Inversion Principle. PAGEREF _Toc489019431 \h 412.6MVC. PAGEREF _Toc489019432 \h 422.7Calidad del Software. PAGEREF _Toc489019433 \h 44Capítulo 3 Dise?o del Framework PAGEREF _Toc489019434 \h 493.1Introducción. PAGEREF _Toc489019435 \h 503.2Estructura Básica. PAGEREF _Toc489019436 \h 513.3Configuración Inicial. PAGEREF _Toc489019437 \h 543.4Controladores. PAGEREF _Toc489019438 \h 573.5Modelos. PAGEREF _Toc489019439 \h 583.6Vistas. PAGEREF _Toc489019440 \h 593.7Archivos de Configuración. PAGEREF _Toc489019441 \h 603.8Librerías y Módulos. PAGEREF _Toc489019442 \h 613.9Dependencias. PAGEREF _Toc489019443 \h 623.10Funcionamiento PAGEREF _Toc489019444 \h 643.11Observaciones: PAGEREF _Toc489019445 \h 69Capítulo 4 Aplicaciones modulares PAGEREF _Toc489019446 \h 714.1Introducción. PAGEREF _Toc489019447 \h 724.2Modulo de Usuarios. PAGEREF _Toc489019448 \h 734.2.1 Introducción. PAGEREF _Toc489019449 \h 734.2.2 Base de Datos. PAGEREF _Toc489019450 \h 754.2.3 Diagramas. PAGEREF _Toc489019451 \h 784.2.4 Interfaces. PAGEREF _Toc489019452 \h 874.3Modulo de Blog. PAGEREF _Toc489019453 \h 954.3.1 Introducción. PAGEREF _Toc489019454 \h 954.3.2 Base de Datos. PAGEREF _Toc489019455 \h 964.3.3 Interfaces. PAGEREF _Toc489019456 \h 994.4Modulo Bodega. PAGEREF _Toc489019457 \h 1014.4.1 Introducción. PAGEREF _Toc489019458 \h 1014.4.2 Base de Datos. PAGEREF _Toc489019459 \h 1034.4.3 Diagramas. PAGEREF _Toc489019460 \h 1064.4.4 Interfaces. PAGEREF _Toc489019461 \h 1104.5Modulo Tienda Online. PAGEREF _Toc489019462 \h 1144.5.1 Introducción. PAGEREF _Toc489019463 \h 1144.5.2 Base de Datos. PAGEREF _Toc489019464 \h 1164.5.3 Diagramas. PAGEREF _Toc489019465 \h 1204.5.4 Interfaces. PAGEREF _Toc489019466 \h 126Capítulo 5 Mejoras a futuro PAGEREF _Toc489019467 \h 132Capítulo 6 Conclusiones PAGEREF _Toc489019468 \h 136Capítulo 7 Bibliografía PAGEREF _Toc489019469 \h 138Capítulo 8 Anexos PAGEREF _Toc489019470 \h 139Anexo A. Siglas. PAGEREF _Toc489019471 \h 140Anexo B. Sobre Frameworks y CMS PAGEREF _Toc489019472 \h 141B.1 Sobre los Frameworks. PAGEREF _Toc489019473 \h 141B.2 Sobre los CMS. PAGEREF _Toc489019474 \h 142?NDICE DE TABLAS TOC \c "Tabla" Tabla 31 Estructura Inicial framework PHP PAGEREF _Toc489019475 \h 52Tabla 32 Configuración Inicial PAGEREF _Toc489019476 \h 55Tabla 33 Ejemplo URL petición sin modulo PAGEREF _Toc489019477 \h 67Tabla 34 Ejemplo URL petición con modulo PAGEREF _Toc489019478 \h 68Tabla 41 Caso de Uso. Registro de Usuario PAGEREF _Toc489019479 \h 78Tabla 42 Caso de Uso. Login de Usuario PAGEREF _Toc489019480 \h 79Tabla 43 Caso de Uso. Modificación de Usuario PAGEREF _Toc489019481 \h 79Tabla 44 Caso de Uso. Eliminación de Usuario PAGEREF _Toc489019482 \h 80Tabla 45 Caso de Uso. Creación de Permiso de Usuario PAGEREF _Toc489019483 \h 80Tabla 46 Caso de Uso. Modificación de Permiso de Usuario PAGEREF _Toc489019484 \h 81Tabla 47 Caso de Uso. Eliminación de Permiso de Usuario PAGEREF _Toc489019485 \h 81Tabla 48 Caso de Uso. Creación de Nuevo Rol PAGEREF _Toc489019486 \h 82Tabla 49 Caso de Uso. Modificación de Rol PAGEREF _Toc489019487 \h 82Tabla 410 Caso de Uso. Eliminación de Rol PAGEREF _Toc489019488 \h 83Tabla 411 Generación de Reportes PAGEREF _Toc489019489 \h 83Tabla 412 Caso de Uso. Creación de Orden de Compra. PAGEREF _Toc489019490 \h 106Tabla 413 Caso de Uso. Creación de Producto. PAGEREF _Toc489019491 \h 107Tabla 414 Caso de Uso. Creación de Proveedor. PAGEREF _Toc489019492 \h 107Tabla 415 Caso de Uso. Entrada de Producto. PAGEREF _Toc489019493 \h 108Tabla 416 Caso de Uso. Salida de Producto. PAGEREF _Toc489019494 \h 108Tabla 417 Generación de Reportes. PAGEREF _Toc489019495 \h 109Tabla 418 Registro de usuarios. PAGEREF _Toc489019496 \h 121Tabla 419 Confirmar Compra. PAGEREF _Toc489019497 \h 121Tabla 420 Exhibición de Productos. PAGEREF _Toc489019498 \h 122Tabla 421 Editar Perfil de Usuario. PAGEREF _Toc489019499 \h 122Tabla 422 A?adir Producto Carro. PAGEREF _Toc489019500 \h 123Tabla 423 Eliminar Producto Carro. PAGEREF _Toc489019501 \h 123Tabla 424 Modificar Producto Catalogo. PAGEREF _Toc489019502 \h 124Tabla 425 Validez de la cuenta registrada. PAGEREF _Toc489019503 \h 124?NDICE DE IMAGENES TOC \h \z \t "Titulo Imagen" \c Imagen 2.1. Eventos y Mensajes de los objetos PAGEREF _Toc489019504 \h 24Imagen 2.2. Abstracción PAGEREF _Toc489019505 \h 25Imagen 3.1. Estructura Básica PAGEREF _Toc489019506 \h 51Imagen 3.2. Configuración Inicial PAGEREF _Toc489019507 \h 54Imagen 3.3. Diagrama Patrón MVC PAGEREF _Toc489019508 \h 64Imagen 3.4. Core del Framework PAGEREF _Toc489019509 \h 69Imagen 4.1. Dise?o Conceptual Modulo Usuarios PAGEREF _Toc489019510 \h 75Imagen 4.2. Dise?o Lógico Modulo Usuarios PAGEREF _Toc489019511 \h 76Imagen 4.3. Dise?o Físico Modulo Usuarios PAGEREF _Toc489019512 \h 77Imagen 4.4. Casos de Uso Generales PAGEREF _Toc489019513 \h 84Imagen 4.5. Casos de Uso Administrador PAGEREF _Toc489019514 \h 84Imagen 4.6. Secuencia de Registro PAGEREF _Toc489019515 \h 85Imagen 4.7. Secuencia de Login PAGEREF _Toc489019516 \h 85Imagen 4.8. Diagrama de Nuevo Role PAGEREF _Toc489019517 \h 86Imagen 4.9. Registro de Usuarios PAGEREF _Toc489019518 \h 87Imagen 4.10. Login de Usuarios PAGEREF _Toc489019519 \h 88Imagen 4.11. Perfil de Usuario PAGEREF _Toc489019520 \h 88Imagen 4.12. Permisos de Usuario PAGEREF _Toc489019521 \h 89Imagen 4.13. Listado y Reportes de Usuarios PAGEREF _Toc489019522 \h 89Imagen 4.14. Permisos de Rol PAGEREF _Toc489019523 \h 90Imagen 4.15. Nuevo Usuario PAGEREF _Toc489019524 \h 90Imagen 4.16. Control de Permisos PAGEREF _Toc489019525 \h 91Imagen 4.17. Editar Permiso PAGEREF _Toc489019526 \h 91Imagen 4.18. Eliminar permiso PAGEREF _Toc489019527 \h 92Imagen 4.19. Nuevo Permiso PAGEREF _Toc489019528 \h 92Imagen 4.20. Control de Roles PAGEREF _Toc489019529 \h 93Imagen 4.21. Editar Role PAGEREF _Toc489019530 \h 93Imagen 4.22. Eliminar Role PAGEREF _Toc489019531 \h 94Imagen 4.23. Nuevo Role PAGEREF _Toc489019532 \h 94Imagen 4.24. Dise?o Conceptual Modulo Blog. PAGEREF _Toc489019533 \h 96Imagen 4.25. Dise?o Lógico Modulo Blog. PAGEREF _Toc489019534 \h 97Imagen 4.26. Dise?o Físico Modulo Blog. PAGEREF _Toc489019535 \h 98Imagen 4.27. Interface Blog 1. PAGEREF _Toc489019536 \h 99Imagen 4.28. Interface Blog 2. PAGEREF _Toc489019537 \h 99Imagen 4.29. Interface Blog 3. PAGEREF _Toc489019538 \h 100Imagen 4.30. Dise?o Fisico Modulo Bodega. PAGEREF _Toc489019539 \h 105Imagen 4.31. Listado de ?rdenes de Compra. PAGEREF _Toc489019540 \h 110Imagen 4.32. Nueva Orden de Compra. PAGEREF _Toc489019541 \h 110Imagen 4.33. Eliminar Orden de Compra. PAGEREF _Toc489019542 \h 111Imagen 4.34. Listado de Productos. PAGEREF _Toc489019543 \h 111Imagen 4.35. Agregar Nuevo Producto. PAGEREF _Toc489019544 \h 112Imagen 4.36. Eliminar Producto. PAGEREF _Toc489019545 \h 112Imagen 4.37. Listar Proveedores. PAGEREF _Toc489019546 \h 113Imagen 4.38. Nuevo Proveedor. PAGEREF _Toc489019547 \h 113Imagen 4.39. Dise?o Conceptual Modulo Tienda. PAGEREF _Toc489019548 \h 117Imagen 4.40. Dise?o Lógico Modulo Tienda. PAGEREF _Toc489019549 \h 118Imagen 4.41. Dise?o Físico Modulo Tienda. PAGEREF _Toc489019550 \h 119Imagen 4.42. Casos de Usos generales. PAGEREF _Toc489019551 \h 125Imagen 4.43. Listar Productos. PAGEREF _Toc489019552 \h 126Imagen 4.44. Nuevo Producto. PAGEREF _Toc489019553 \h 126Imagen 4.45. Editar Producto. PAGEREF _Toc489019554 \h 127Imagen 4.46. Eliminar producto. PAGEREF _Toc489019555 \h 127Imagen 4.47. Listado Marcas. PAGEREF _Toc489019556 \h 128Imagen 4.48. Nueva Marca PAGEREF _Toc489019557 \h 128Imagen 4.49. Editar Marca. PAGEREF _Toc489019558 \h 129Imagen 4.50. Eliminar Marca. PAGEREF _Toc489019559 \h 129Imagen 4.51. Listado de Categorías. PAGEREF _Toc489019560 \h 130Imagen 4.52. Nueva categoría. PAGEREF _Toc489019561 \h 130Imagen 4.53. Editar Categoría. PAGEREF _Toc489019562 \h 131Imagen 4.54. Eliminar Categoría. PAGEREF _Toc489019563 \h 131RESUMENEntendamos el concepto de Desarrollo de Aplicaciones Web, como la implementación de una solución a una necesidad especifica de un usuario, con la creación de un proyecto determinado que cumpla con los requerimientos del usuario y de calidad de software por medio del uso de tecnologías web y lenguajes de programación.Por otro lado, podemos definir un proyecto como un conjunto de modos y medios necesarios para llevar a cabo la implementación de una solución a un problema específico. En el entorno de la informática estos proyectos están encargados principalmente a desarrolladores o programadores de aplicaciones. Estos proyectos se desarrollan bajo un entorno de trabajo específico y adecuado para el fin que los crea.Para poder determinar la solución más idónea para un proyecto web determinado es necesario tomar bastantes decisiones y una de las cuales se basa en saber determinar que entorno de trabajo es el más apropiado para ese proyecto. Si se usa un gestor de contenidos, conocidos son los CMS, o se usa un Framework específico y se empieza el desarrollo desde cero.La presente Tesis trata sobre la creación de un Framework, o entorno de trabajo, basado en el lenguaje de programación PHP, como lenguaje nativo, para el desarrollo de Aplicaciones Web. El Framework gestionara principalmente el acceso a datos a través de la librería PDO, nativa de PHP que tiene soporte para gestores de base de datos como MySQL, SQL, ODBC, entre otros. Incluirá soporte para JQuery, librería basada en el lenguaje JavaScript y para HTML5 y CSS3, estos últimos dos lenguajes se ven reflejados en el uso de la librería de código abierto Bootstrap. Implementara composer como gestor de dependencias para tratar librerías de terceros.Al finalizar el desarrollo del Framework, este se aplicará en la construcción de tres desarrollos habituales en el mundo de la Web, como son la creación de un Blog, el desarrollo de un control de bodega y la implementación de una tienda online. Estas soluciones implican el desarrollo de un módulo que se hace común a cualquiera de estos desarrollos y que es el módulo de control de usuarios y sus permisos.INTRODUCCION1.1Descripción del ProblemaAnte la presencia de un nuevo proyecto de desarrollo web, una de las primeras decisiones que el desarrollador o grupo de desarrolladores debe tomar es que entorno de trabajo usar para el desarrollo. Ante esta cuestión las opciones son principalmente dos, o usar un CMS que cumpla con los requerimientos mínimos o usar un Framework que les permita escalar, desde una estructura nueva, el desarrollo para lograr una solución ideal.Cualquier decisión que se tome respecto a las soluciones vistas antes va a depender principalmente de factores como el económico, el tiempo de desarrollo, la curva de aprendizaje, la escalabilidad del proyecto, la optimización del proyecto final y sobre todo del fin último del proyecto.Debemos hacer notar que a día de hoy tanto los CMS como Frameworks más conocidos también cuentan con una gran comunidad de soporte y que algunos son de código abierto, lo que hace más o menos difícil la elección de estos para el desarrollo del proyecto.Para motivos de esta Tesis, daremos por supuesto que la decisión tomada es optar por un Framework. Este será uno personalizado y se iniciará desde cero. Más adelante hablaremos de los Frameworks más conocidos sin entrar en mayores detalles de estos (puede consultar el Anexo B para más detalles sobre este tema).1.2Objetivo General.Desarrollar un framework para el desarrollo de aplicaciones basadas en entono web construido bajo PHP y que implemente el patrón arquitectónico MVC. El framework debe desarrollar aplicaciones optimizadas, garantizar seguridad y permitir la escalabilidad.1.3Objetivos Específicos.Desarrollar un framework en PHP desde cero.Potenciar el conocimiento en tecnologías y lenguajes informáprender el paradigma de la programación orientada a prender el concepto de patrones de dise?o y del patrón arquitectónico MVC (Modelo-Vista-Controlador)Hacer uso del framework creado para desarrollar aplicaciones web de uso habitual como lo es un Blog, una Tienda Online y un Control de Bodega.Analizar el framework y la aplicación según parámetros de calidad del software. MARCO TE?RICO2.1Introducción.En el mundo de la programación, así como existen lenguajes de programación (Y sí que hay muchos) existen frameworks de desarrollos para cada uno de ellos, algunos están dise?ados para proyectos grandes y pesados y otros son más sencillos y livianos. Sin embargo, el conocer el uso de cualquiera de estos, implica el conocimiento previo del lenguaje en el cual se ha construido (esto último puede ser excluyente en algunos casos) para así poder entender, manejar y construir un buen proyecto.Ahora ?Cómo definir un framework? Podría definirlo como un entorno de trabajo incompleto (sin ninguna funcionalidad aparente, por sí solo no hace nada) y que posee cierto grado de configuración (u orden) en cómo se agregan las demás estructuras o componentes para llevar a cabo el desarrollo de un proyecto.En esta Tesis se construirá un Framework desde cero, revisando desde la estructura de archivos a la configuración básica que debe tener para un correcto funcionamiento. Se revisarán conceptos básicos sobre Programación Orientada a Objetos y Patrones de Dise?o, ambos necesarios para aplicar el patrón MVC sobre el cual se desarrollará el Framework. Luego se analizarán los conceptos sobre Calidad de Software y como se aplican tanto en el Framework como en una aplicación desarrollada bajo esta.2.2Lenguajes de Programación.En este capítulo se hará un breve recorrido solo la evolución del desarrollo web y de los lenguajes de programación. También se describirán los lenguajes que van a hacer partícipes en la creación del Framework con sus características principales.2.2.1 Historia del Desarrollo Web.La aparición de Internet y el protocolo HTTP, junto a la primera estandarización de HMTL marcaron los inicios del Desarrollo Web. Los cambios en la tecnología, el hardware y el software nos permiten diferenciar cuatro generaciones en el Desarrollo Web.La primera generación, entre los a?os 1992 y 1994 hace referencia a páginas web estáticas, donde la tecnología era muy limitada con módems de 2.4 kbps y monitores monocromáticos. El sitio web era una sola página, lo que la hacía muy larga, no tenía una estructura cohesionada, casi no tenían imágenes y su función era más educativa e informativa. Netscape se impone como navegador web.La aparición de la tecnología CGI permite la creación de páginas webs dinámicas y desde el a?o 1995 la segunda generación permite la incorporación de imágenes, iconos y banners. La aparición de los primeros libros de visitas y peque?os formularios son implementados con CGI. El tiempo de carga es lenta y siguen siendo sitios, en su mayoría, de una sola página y largas. Aparece la navegación jerárquica y el uso de tablas para mostrar datos e información más estructurada. Aparecen monitores y tarjetas gráficas de mayor resolución y esto permitió la mejora en la calidad del dise?o de sitios web. Un punto a mencionar es la notada separación de estándares entre los dos principales navegadores de la época, Internet Explorer y Netscape Navigator. Nace la W3C un consorcio internacional que genera recomendaciones y estándares que aseguran el crecimiento de la World Wide Web a largo plazo.La consolidación de la web dinámica llega en 1996 y con eso la tercera generación en el desarrollo web. Microsoft crea nuevas tecnologías como Internet Database Connector (IDC), posteriormente Active Server Pages (ASP). Aparece Coldfusion, PHP y las Java Server Pages (JSP) basadas en Java. La aparición de FLASH marca la tendencia en sitios webs hacia el dise?o más que a la experiencia del usuario y según el objetivo de la página, acercar más al usuario a la página ya sea para vender producto, servicios o información.La evolución de la tecnología permitió la aparición de la cuarta generación, la llegada del elemento multimedia, ahora se puede transmitir audio y video en tiempo real. Las Bases de Datos tienen un papel importante en esta generación, pues los sitios web se van construyendo en base a la información que se puede obtener desde las bases de datos. La evolución de HTML y la aparición de AJAX cambia la forma en cómo se manejan los sitios webs dinámicos. Aparecen los primeros equipos multidisciplinarios en el desarrollo de sitios webs. La experiencia del usuario es el enfoque principal, desde que llega a la página hasta que la abandona.El desarrollo Web hoy en día a cambiado para bien, tanto así que incluso los viejos navegadores se han tenido que actualizar y así sobrellevar el nuevo estándar que implementa HTML5 y CSS3. Las aplicaciones webs ya dejan de ser simples páginas webs sino más bien pasan a ser una aplicación que cumple una función específica. Estas ya permiten la escalabilidad, ser multi-usuario y multi-lenguaje. La seguridad en la información tiene un papel relevante. Todo esto hace que la aplicación gire en torno al usuario y que este pueda acceder a la aplicación en cualquier momento y desde cualquier dispositivo haciendo del cliente (navegador) una herramienta más.Aparece el termino Responsivo que alude a la capacidad de un sitio web de adaptarse a diferentes tama?os de pantalla. Estas webs responsivas son producto de la evolución en la telefonía celular y viene a ser una condición casi obligatoria para cualquier sitio web a día de hoy.Se habla de una quinta generación en el desarrollo web y es la que se inicia con el creciente auge de las páginas de streaming en línea, ya sea emitiendo video o audio, como las páginas de televisión. Se suma a esto la navegación desde la nube (Cloud Computing) y los sistemas operativos en la nube y hasta editores de texto.El desarrollo web esta implícitamente relacionado con el desarrollo de HTML y podemos relacionar las generaciones antes mencionadas con su evolución. A día de hoy el estándar en HTML5 y es con este lenguaje que se trabajara en el desarrollo del framework.Hacemos hincapié a la “nivelación hacia arriba”, a desarrollar con los nuevos estándares y hacer uso de los navegadores más actualizados2.2.2 Evolución de los Lenguajes de Programación.Si definimos como programa al conjunto de ordenes e instrucciones que se le dan a un computador para que resuelva un problema o ejecute alguna instrucción. Un lenguaje de Programación es un conjunto de ordenes e instrucciones ya programadas que facilitan la creación de los programas.Un lenguaje de bajo nivel es aquel que entiende el computador y que para el ser humano es muy difícil de interpretar. Un lenguaje de alto nivel es aquel en que el humano puede escribir e interpretar y que, a través de un compilador que reside en el computador, se puede traducir a lenguaje maquina o de bajo nivel.En los inicios de la Programación solo existía el lenguaje máquina, lenguaje que relaciona directamente al programa con la máquina, estaban escrito en código binario, eran lento en construcción y propenso a errores, a este lenguaje se le conoce con el nombre de ASSEMBLY.Junto al lenguaje maquina aparece también el primer traductor de código o compilador llamado ASSEMBLER que se encargaba de traducir el lenguaje de “alto nivel” escrito por los seres humanos en lenguaje maquina o de “bajo nivel”.Los primeros lenguajes de “alto nivel” utilizaban una programación no estructurada, una serie de líneas con instrucciones de salto (GOTO) y en un único bloque. No existían subrutinas. Entre estos lenguajes podemos encontrar a BASIC y FORTRAN.La aparición de PASCAL posibilito el empleo de subrutinas (funciones o procedimientos). A estos lenguajes se les ubica dentro de la programación procedimental.Ante la necesidad de claridad y legibilidad en la escritura de programas, aparecen las primeras reglas y estructuras en torno a la codificación. Surge así la programación estructurada que hacía énfasis en una estructura jerárquica top-down, dise?o modular, salidas y entradas claramente definidas, constructores de programación como: secuencia, selección, iteración y llamadas a procedimientos.La programación modular llevo a la división de aquellos programas de ciento o miles de líneas de código a separar estos en módulos y con esto la separación de tareas entre diferentes programadores. El problema de esta programación residía en que no permitía la instanciación ni la exportación de datos. Si bien los programas se podían separar en módulos aún estaban intrínsecamente o consecuencia a lo anterior aparecieron los TADs (Tipos Abstractos de Datos) permitiendo la exportación e instanciación de datos. Este tipo de programación da paso al siguiente nivel y que hasta el día de hoy perdura, la programación orientada a objetos.La programación orientada a objetos (POO) trae consigo tres nuevos conceptos, las clases, los objetos y la herencia. Podemos relacionar la POO con los TADs de manera que una clase es el tipo, el objeto un dato y que la POO es equivalente a un TAD más la característica de la herencia.La POO permite un nuevo paradigma de programación, en el cual se permite diferentes tipos de jerarquías, habilitando las subclases y superclases y con ellos una nueva característica en la programación, el polimorfismo.Las clases en la POO manejan objetos que se relacionan entre si a través de mensajes.La programación orientada al flujo de datos, usada hasta antes de la POO no favorecía la reutilización de código. Con esta última, las clases más generales pueden ser usadas en nuevas aplicaciones.Así mismo, la POO ya no es top-down, sino más bien, bottom-up, de lo especifico a lo general, de aquí la importancia de identificar bien los objetos que participaran en el proyecto.El primer lenguaje orientado a objetos fue Smalltalk, que sentó las bases para lenguajes como C++, Eiffel, Perl, entre otros. Los lenguajes orientados a objetos de hoy en día tienen sus raíces en los ya mencionados, ya sea heredando características o bien combinando la sintaxis propia de estos lenguajes. En este grupo tenemos lenguajes como por ejemplo PHP, Ruby, Python, Java, C#, Go.2.2.3 PHP.PHP (acrónimo recursivo de?PHP: Hypertext Preprocessor)?Es un lenguaje de código abierto y orientado a objetos desde la versión 5 que trabaja de lado del servidor y es independiente de la plataforma (es soportado por Windows, MAC, Linux), ideado para el desarrollo web y que puede ser incrustado en el HTML. PHP ejecuta código de lado del servidor que transforma a HTML y que puede ser leído en cualquier navegador web.Creado originalmente en 1994 por Rasmus Lerdorf, quien se basa en C, Java y Perl para crear un lenguaje que permita el desarrollo dinámico de contenido web. Su política de código abierto a permitido que muchos desarrolladores contribuyan en su código fuente. Actualmente se encuentra en su versión 7.1 y cuyo motor es Zend Engine.El acceso a datos en PHP se hace a través de librerías como mysql_*, mysqli_* o PDO, la primera esta descontinuada y el soporte a la segunda deja de ser en la última versión de PHP. PDO es una librería, existe desde la versión 5, que permite la conexión a diferentes gestores de Bases de Datos SQL como MySQL, Oracle, SQL Server, Informix, PostgreSQL, etcétera. Esta capacidad de PDO permite que el código para administrar la Base de datos pueda reutilizarse entre diferentes aplicaciones con distintos gestores de datos, tal vez solo tengas que reformular la sintaxis de las consultas para el nuevo gestor. También permite escribir código más limpio y seguro además de permitir un aumento de rendimiento al llamar a la misma consulta SQL muchas veces con parámetros ligeramente diferentes. Posee un buen manejo de errores. La librería PDO viene, en su mayoría, instalado por defecto al instalar PHP. Si no es el caso, solo falta ingresar al archivo de configuración de PHP para poder habilitar la librería y el driver necesario para el gestor de datos que se usara.Con lo antes explicado podemos decir que algunas de las ventajas de PHP son:Lenguaje Multiplataforma.Orientado al desarrollo de webs dinámicas y al acceso de datos.Soporte para diferentes gestores de datos.Lenguaje de tipado dinámico.Buen control de excepciones.La integración con librerías externas.?Desventajas? Desde la versión 5.0 las desventajas al usar PHP se han ido minimizando, tanto que PHP 7 ofrece una versión del motor que acelera la carga de la aplicación de hasta un 70% o más en algunos frameworks. También con la versión nueva se tiene soporte a sistemas Windows de 64 bits, ya que de forma nativa PHP estaba hecho para funcionar en un entorno LAMP.Para nuestro propósito, la construcción de un framework, se usa PHP en su versión 5.6. Sin embargo, actualizar el código del framework a la versión 7.0 o 7.1 es ya una necesidad, no solo por una cuestión de mantener el software actualizado, sino que para aprovechar las ventajas de las nuevas versiones de PHP.2.2.4 MySQL.MySQL es un sistema gestor de Bases de Datos desarrollada en sus inicios por MySQL AB la cual fue adquirida por Sun Microsystems en 2008 y está por Oracle en el 2010. Cuenta con licencia dual GPL/Comercial.Esta desarrollado en ANSI C y C++, es multiplataforma y es uno de los componentes de desarrollo en los sistemas LAMP y WAMP. Actualmente va en la Versión 5.7. Trabaja de fondo con el lenguaje SQL para gestionar las Bases de DatosDesde un principio MySQL utiliza el motor no transaccional MyISAM el cual es bien rápido para Bases de Datos de poca concurrencia, pero carece de soporte sobre integridad referencial y alto tráfico de transacciones. Con la llegada a manos de Oracle, MySQL agrego el motor InnoDB el que si soportaba las carencias de MyISAM y a partir de la versión 5.1 aparece el soporte nativo para otros motores como Falcon, Merge. CSV, Blackhole, entre otros. Estos se pueden ir a?adiendo en tiempo de ejecución.Entre sus características más importantes podemos decir que MySQL soporta hasta 50 millones de registros y hasta 64 índices por tabla.MySQL sirve fundamentalmente en desarrollos peque?os a medianos, en donde la cantidad de datos y transacciones no sea elevada (teniendo en cuenta los datos anteriores)Con la compra de MySQL por parte de Sun Microsystems, uno de sus fundadores, Michael Widenius, desarrollo a la par el gestor MariaDB, con licencia GPL y que proporciona dos motores de almacenamiento como Aria (por MyISAM) y XtraDB (por InnoDB).MariaDB es totalmente compatible con MySQL ya que posee las mismas órdenes, interfaces, APIs y bibliotecas, siendo su objetivo poder cambiar un servidor por otro directamente. En la práctica, por ejemplo, las versiones 5.2 de ambos gestores se pueden intercambiar sin problemas.Para el desarrollo del framework, se comenzó usando el gestor MySQL que venía integrado en versiones anteriores de XAMPP y que la aplicación web phpMyAdmin utilizaba. En las nuevas versiones del paquete XAMPP viene incluido el gestor MariaDB y no se han visto problemas en cuanto al respaldo, exportación e importación de los datos entre ambos gestores.2.2.5 JavaScript, AJAX y JQuery.En los a?os 90s, la conexión a internet se realizaba mediante módems a 28 kbps lo que conllevaba a velocidades muy lentas y junto al rápido desarrollo de las aplicaciones webs, hacía falta un lenguaje que facilitara el nexo entre el servidor y el navegador para disimular la tardanza entre la entrada de datos y la salida. Brendan Eich, programador de Netscape desarrollo JavaScript, adoptando la sintaxis de C y Java, con este propósito y que luego derivo en el estándar ECMAScript. Microsoft, a su vez, saco una copia de este lenguaje llamado JScript y que funcionaba en el navegador Internet Explorer.Hoy en día, JavaScript se considera una implementación del lenguaje ECMAScript, aunque hablar de uno equivale a hablar del otro en el ámbito cotidiano.ECMAScript va actualmente en la versión 7 de su desarrollo, aunque no es mayormente soportada por los navegadores y los programadores utilizan la versión 5 para tener mayor compatibilidad con los navegadores más actualizados.JavaScript es un lenguaje interpretado, ejecutado del lado del cliente (navegador), orientado a objetos (casi todo es un objeto), sensible a mayúsculas u minúsculas y de tipado dinámico.Este lenguaje es utilizado principalmente para escribir funciones incluidas en páginas HTML y que interactúan con el DOM de esta. Algunas utilidades serian, entre otras:Cargar contenido en la página o enviar datos al servidor a través de AJAXAnimar elementos de la página.Validar formulariosTransmitir información de los hábitos del usuario y las actividades de navegación.AJAX es definido como un conjunto de tecnologías que se unen para dar forma al desarrollo web asíncrono, es decir, el intercambio de información entre el servidor y el usuario se realiza en segundo plano lo que ayuda a la interacción con el usuario y la visualización de la página.Aparece por primera vez el 2005 y une tecnologías como:XHTML y CSS, para crear una presentación basada en estándares.DOM, para la interacción y manipulación dinámica de la presentación.XML, XSLT y JSON, para el intercambio y la manipulación de información.XMLHttpRequest, para el intercambio asíncrono de información.JavaScript, para unir todas las demás tecnologías.Esta tecnología es bastante útil en desarrollos web con PHP u otros lenguajes de programación que se manejen de lado del servidor.JQuery es una librería o biblioteca basada en JavaScript cuyo fin es hacer de la programación en script (entiéndase JavaScript) más simple, fácil y rápida del lado del cliente.JQuery aparece en enero del 2006, su creador fue John Resign, al mes siguiente tuvo soporte para AJAX y posee licencia MIT de código abierto. Además, cuenta con una gran comunidad de soporte.En el desarrollo del framework se promueve el uso tanto de JavaScript como de AJAX y JQuery. Su uso es opcional y está claramente ligado a las necesidades y experiencia del programador y requerimientos del proyecto.2.2.6 HTML5, CSS3 y Bootstrap.HTML5 es el nombre que recibe la última versión del lenguaje HTML y cuyo estándar es mantenido por la W3C. El origen de HTML se remonta a 1991 siendo la versión 2.0 la primera estandarizada en 1995. La versión 3.0 llega en 1996 bajo el estándar de la W3C y junto a la versión 4.0 en 1998 aparecen las hojas de estilos CSS. La versión actual es presentada en el 2008 pero es publicada oficialmente el 2014.HTML es un lenguaje de marcado, no de programación, que nos permite crear páginas webs mediante etiquetas o elementos. Los navegadores webs interpretan el contenido de la página web (lenguaje HTML) y lo presenta de forma visual.La versión actual del lenguaje provee características únicas como son el almacenamiento offline y la tecnología de Storage, el acceso a diferentes dispositivos, la amplia conectividad y capacidad multimedia, características 3D y gráficas, el nivel de rendimiento y por supuesto la incorporación de CSS3.Las hojas de estilo, CSS, se crearon ante la necesidad de definir un mecanismo que permitiera de forma consistente aplicar diferentes estilos a los documentos electrónicos. Si bien no es un lenguaje de programación, se define muy bien como un lenguaje de dise?o. En 1970 aparecieron las primeras hojas de estilo. Fue en 1995 cuando la W3C definió el primer estándar conocido como CSS nivel 1, la segunda revisión fue en 1998 y se estandarizo como CSS nivel 2. Hubo una revisión más, en el 2004, conocida como CSS2.1.La versión actual y aun en desarrollo, en realidad no está completamente estandarizada pues está en continua revisión, es la CSS3, que fue publicada en el 2011. Esta revisión ya soportada por la mayoría de los navegadores fue separada en módulos lo que influyo e influye en que los navegadores soporten o no algunas etiquetas. Se espera para el a?o 2019 la versión 4.0 de este estándar.En agosto del 2011, Mark Otto y Jacob Thorton, que en ese tiempo trabajaban como ingenieros de twitter, lanzan Bootstrap como una solución a la gran cantidad de librerías que se manejaban dentro del equipo de ingenieros de la plataforma causando inconsistencias y una gran carga en el mantenimiento de los proyectos. Fue lanzado como proyecto Open Source y desde ese momento y gracias al aporte de cientos de desarrolladores se ha constituido en uno de los frameworks de presentación web más populares para proyectos responsives y dispositivos mobiles.Bootstrap es una colección de elementos y funciones personalizables empaquetadas en una sola herramienta. Este paquete o framework es el resultado de combinar HTML, CSS y JavaScript y es perfectamente adaptable a cualquier desarrollo web. Para trabajar con Bootstrap solo es necesario enlazar la hoja de estilos en el header del HTML Para poder utilizar los elementos de JavaScript que trae Bootstrap, es necesario incluir la librería JQuery a la página web (documento HTML).A día de hoy, encontramos la versión 3.3.7 como las más estable y se espera muy pronto la versión 4.0. En nuestra tesis hemos adoptado Bootstrap como solución al dise?o para proyectos lo que no implica que siempre sea así. El uso de cualquier otra librería. Como JQuery UI, para dise?o u hoja de estilo personal está habilitado como se verá más adelante.2.3Programación Orientada a Objetos. POO.2.3.1 Introducción.La POO es un paradigma de programación (algunos lo llaman filosofía, otros lo denominan modelo) que utiliza objetos que interactúan entre si dentro de un sistema que proporciona una solución para un problema particular.Antes de esta filosofía, la programación estructurada trataba un problema de lo general a lo particular, dividiendo el sistema solución en subsistemas o sistemas más peque?os, estos últimos más fáciles de entender y de codificar. Se podría agregar que la estructura básica de este tipo de programación son las funciones o métodos, las cuales asignan valores a nuestros datos.Si queríamos saber la información de una persona, como sus nombres y fecha de nacimiento, se solía hacer de la siguiente manera. $nombre?=?'John'; $apellido?=?'Doe'; $fechaNacimiento?=?'1980-12-01';? function?nombreCompleto($nombre,?$apellido) {?? return?"{$nombre}?{$apellido}"; } function?edad($fechaNacimiento) {??// Calcular edad...??return?$edad;}Tenemos varios problemas con este tipo de programación. A saber:No hay forma de agrupar la información y las acciones.No se puede prevenir el cambio de valor de alguna variable sin que cambie la información de la persona.Si quisiéramos tener los datos de otra persona tendríamos que crear tres variables nuevas. $firstName2,?$lastName2,?$dateOfBirth2Se podría pensar en asignar los datos de las personas a un arreglo.<?php$persona?=?array(? ??'nombre'?=>?'John',? ??'apellido'?=>?'Doe',? ??'fechaNacimiento'?=>?'1980-12-01',);?>Pero tampoco evitamos que se pueda cambiar, por ejemplo, la fecha de nacimiento sin cambiar los datos de la persona.En la POO la estructura más básica es el objeto, que posee propiedades y comportamientos propios y que depende de una clase o entidad superior, que los agrupa según propiedades y comportamientos comunes. Así POO trabaja de lo particular a lo general, agrupando objetos en común en entidades denominadas clases.En nuestro ejemplo. Un objeto (una persona, en singular) pertenece a una clase que llamaremos Personas (en plural pues agrupa varios objetos) con características y funciones en común. <?php class?Personas {? ?? public?$nombre?=?'John';? ?? public?$apellido?=?'Doe';? ?? private?$fechaNacimiento?=?'1980-12-01';?? ?? public?function?__construct($nombre,?$apellido,?$fechaNacimiento) { $this->nombre =?$nombre;? ? ? ??$this->apellido?=?$apellido;? ? ? ??$this->fechaNacimiento =?$fechaNacimiento;? ??}?? ??public?function?nombreCompleto()? ??{? ? ? ??return?"{$this->nombre}?{$this->apellido}";? ??}?? ??public?function?edad()? ??{? ? ? ??# Calcular $edad con # $this->fechaNacimiento # ...? ? ? ??return?$edad;? ??}}?>Como se puede observar, la clase Personas agrupa las propiedades necesarias para que cada objeto persona sea independiente. Así para tener más objetos personas ahora solo nos basta con crear nuevos objetos de la clase.<?php$persona1?=?new?Personas("Juan",?"Perez",?"1970-01-01");$persona2?=?new?Personas("Maria",?"Rozas",?"1990-05-06");$persona3?=?new?Personas("Luis",?"Riquelme",?"1985-11-15");// ...?>Y si queremos obtener la edad de estas personas, solo tenemos que llamar al método de clase que sea necesario.<?php$persona1->edad();?# Devuelve la edad de $persona1$persona2->edad();?# Devuelve la edad de $persona2$persona3->edad();?# Devuelve la edad de $persona3// ...?>En este punto tenemos que decir que las variables $persona1,?$persona2,?$persona3 son denominadas instancias de clase y pertenecen a una única clase, la clase Personas.Si quisiéramos cambiar el nombre de una persona, tendríamos que crear un método de clase, en el ejemplo el método ya está creado, que nos permita el cambio y luego asignar ese método al objeto (o instancia) al cual queremos cambiarle el nombre. <?php? class?Personas {? ?? # [El resto del codigo iria aqui]?? ?? public?function?setNombre($nuevoNombre)? ?? { $this->nombre?=?$nuevoNombre;? ??}}?# Asignamos 'Manuel' como nombre al objeto $persona1$persona1->setNombre('Manuel');?# Obtenemos el nombre completo # del objeto ya cambiado$persona1->nombreCompleto();?>Como se puede notar, el cambio solo afecta al objeto referenciado y no a los demás objetos. Esto nos permite tener un mayor control sobre los datos que manejamos.2.3.2 Elementos de la POO.Los principales elementos de la POO serian: clases, objetos, métodos, propiedades y mensajes y eventos.Clase: Es un modelo que se utiliza para crear objetos que comparten propiedades y comportamientos en común, <?phpclass?Personas{??// propiedades??// métodos}?>Objeto: Es una entidad provista de métodos o mensajes a los cuales responde (comportamiento); atributos con valores concretos (estado); y propiedades (identidad).<?php$persona?=?new?Personas();/*?El objeto, ahora, es $persona,?que se ha creado siguiendo el modelo de la clase Personas*/?>Método: Es una función asociada a un objeto que indica la capacidad de que este puede hacer.<?phpfunction?caminar()?{??# Algoritmo que hace caminar a una persona}?>Propiedades: Son variables que contienen datos asociados a un objeto y que determinan su identidad<?phppublic?$nombre?=?'John';public?$apellido?=?'Doe';private?$fechaNacimiento?=?'1980-12-01';?>Evento y Mensaje: Mientras el evento es un suceso del sistema, el mensaje es la comunicación del suceso dirigido a un objeto. Imagen STYLEREF 1 \s 2. SEQ Imagen \* ARABIC \s 1 1. Eventos y Mensajes de los objetos2.3.3 Características conceptuales de la POO.La POO posee ciertas características que la identifican y diferencian de otros paradigmas. Estas características son: Abstracción, Encapsulamiento, Modularidad, Ocultación, Polimorfismo, Herencia y Recolector de basura. Abstracción: Aislación de un elemento de su contexto. Define las características esenciales de un objeto y su comportamiento. La abstracción permite ocultar el cómo se implementa el comportamiento de un objeto en relación con otros en el mismo sistema. Se hace más énfasis en el ?Qué hace? Que en ?Cómo se hace?Imagen STYLEREF 1 \s 2. SEQ Imagen \* ARABIC \s 1 2. AbstracciónEn la figura observamos 3 clases diferentes, Figura, Cuadrado y Circulo, todas implementan un método para calcular el área. La Abstracción impide conocer la lógica del método.Encapsulamiento: Reúne al mismo nivel de abstracción, a todos los elementos que puedan considerarse pertenecientes a una misma entidad. Básicamente protege las propiedades y métodos de los objetos ante posibles cambios desde fuera de la clase a la que pertenecen. Se suele confundir con la Ocultación, debido a que ambas características van de la mano.Un ejemplo claro suele ser lo que sucede con las librerías externas que se implementan en un sistema. Una vez instanciado un objeto, este tiene acceso solo a los métodos que la librería permite y no deja interactuar al programador con el funcionamiento interno de esta.Modularidad: Característica que permite dividir una aplicación en varias partes más peque?as (denominadas módulos), independientes unas de otras. Esta característica es la que hace de la POO y en general de cualquier sistema construido bajo esta filosofía, en términos de calidad de software, un sistema escalable y mantenible. Se recomienda, debido a esta característica programar usando la premisa “Programe pensando en quien mantendrá el código”.Ocultación: Los objetos están aislados del exterior, protegiendo a sus propiedades para no ser modificadas por aquellos que no tengan derecho a acceder a las mismas. A las propiedades del objeto solo se pueden acceder desde métodos internos y si es necesario la modificación de alguna propiedad, esta sea a través de un mensaje generado por un evento del usuario. Esta característica también es conocida como “principio de visibilidad”PHP define tres niveles de visibilidad para las propiedades y los métodos de una clase, public (accesible desde cualquier parte del sistema), private (accesible solo desde la clase que lo contiene) y protected (accesibles desde la propia clase y desde la clase que la herede) <?php /** ?* Definición de ClaseUno ?*/ class?ClaseUno {? ??public?$public?=?'Public';? ??protected?$protected?=?'Protected';? ??private?$private?=?'Private';?? ??function?holaMundo()? ??{? ? ? ??echo?$this->public;? ? ? ??echo?$this->protected;? ? ? ??echo?$this->private;? ??}}?$obj?=?new?MyClass();echo?$obj->public;?? ?// Funciona bienecho?$obj->protected;?// Error Fatalecho?$obj->private;???// Error Fatal// Muestra Public, Protected y Private$obj->holaMundo();?????/**?* Definición de ClaseDos?*/class?ClaseDos?extends?ClaseUno{? ??// Se pueden redeclarar las propiedades públicas // y protegida, pero no la privada? ??public?$public?=?'Public2';? ??protected?$protected?=?'Protected2';?? ??function?holaMundo()? ??{? ? ? ??echo?$this->public;? ? ? ??echo?$this->protected;? ? ? ??echo?$this->private;? ??}}?$obj2?=?new?MyClass2();echo?$obj2->public;?? ?// Funciona bienecho?$obj2->protected;?// Error Fatalecho?$obj2->private;???// Undefined// Muestra Public2, Protected2, Undefined$obj2->HolaMundo();?????>Polimorfismo: Es la capacidad que da a diferentes objetos, la posibilidad de contar con métodos, propiedades y atributos de igual nombre, sin que los de un objeto interfieran con el de otro. Si revisamos el ejemplo mencionado en la Abstracción y le asignamos algo de código tenemos lo siguiente: <?php abstract?class?Figura?{?? abstract?public?function?area(); } class?Cuadrado?extends?Figura?{?? private?$lado;??? public?function?__construct($lado)?{? ??$this->lado?=?$lado;??}??public?function?area()?{? ??$area?=? HYPERLINK "" pow($this->lado,?2);? ??echo?"El area del Cuadrado es?{$area}<br>";??}}class?Circulo?extends?Figura?{??private?$radio;???public?function?__construct($radio)?{? ??$this->radio?=?$radio;??}??public?function?area()?{? ??$area?=? HYPERLINK "" pow($this->radio,?2)?*?3.14;? ??echo?"El area de un Circulo es?{$area}<br>";??}}?$cuadrado?=?new?Cuadrado(3);# Imprime. El area del Cuadrado es 9$cuadrado->area(); ?$circulo?=?new?Circulo(3);# Imprime. El area de un Circulo es 28.26$circulo->area();?>Podemos ver como objetos diferentes acceden al método propio area() sin interferir el uno con el otro. Además cada clase hereda de Figura, clase abstracta padre, quien obliga a sus hijas a implementar el método area().Herencia: Esta característica hace de la POO la diferencia con otros paradigmas de programación. Es un mecanismo mediante el cual objetos específicos incorporan la estructura y comportamientos de objetos más generales.Una clase hija heredara las propiedades y métodos de una clase padre dependiendo el nivel de visibilidad de estas en la clase padre. Así las clases hijas solo heredaran las propiedades y métodos que sean protegidos en la clase padre y claramente por defecto tienen acceso a aquellas que tienen u visibilidad pública. <?php class?Figura?{?? private?$alto;?? private?$ancho;?? protected?function?areaFigura($figura)?{? ?? echo?"Sacando el area de un?{$figura}<br>";?? } } class?Cuadrado?extends?Figura?{??private?$lado;???public?function?__construct($lado)?{? ??$this->lado?=?$lado;??}???public?function?area()?{? ??$this->areaFigura("Cuadrado");??}}class?Circulo?extends?Figura?{??private?$radio;???public?function?__construct($radio)?{? ??$this->radio?=?$radio;??}???public?function?area()?{? ??$this->areaFigura("Circulo");??}}?$cuadrado?=?new?Cuadrado(3);$cuadrado->area();# Imprime. Sacando el area de un Cuadrado?$circulo?=?new?Circulo(3);$circulo->area();# Imprime. Sacando el area de un Circulo?>En el código anterior notamos que la clase Figura (clase padre) tiene un método protegido areaFigura() y las clases hijas (clase Circulo y clase Cuadrado) pueden heredar este método pero solo desde dentro de sus clases respectivas. Un objeto de las clases hijas no pueden llamar al método areaFigura() por el principio de encapsulación, sin embargo estas implementan un método propio area() que hace un llamado implícito al método areaFigura().En PHP no existe la herencia múltiple, sin embargo, para saltarse esta prohibición este lenguaje permite crear interfaces (clases especiales que implementan solo la definición de métodos). Una clase en PHP puede implementar múltiples interfaces.En el código siguiente se crea una interface que implementa un método para que las clases puedan calcular el perímetro de la figura que representan. <?php class?Figura?{?? private?$alto;? ?private?$ancho;?? protected?function?areaFigura($figura)?{? ?? echo?"Sacando el area de un?{$figura}<br>";?? } }?interface?Perimetro?{??public?function?getPerimetro();}?class?Cuadrado?extends?Figura?implements?Perimetro?{??private?$lado;??public?function?__construct($lado)?{? ??$this->lado?=?$lado;??}??public?function?area()?{? ??$this->areaFigura("Cuadrado");? ??$area?=? HYPERLINK "" pow($this->lado,?2);? ??echo?"Area Cuadrado:?{$area}<br>";??}??public?function?getPerimetro()?{? ??$perimetro?=?4*$this->lado;? ??echo?"Y su perimetro es:?{$perimetro}<br>";??}}?class?Circulo?extends?Figura?implements?Perimetro?{??private?$radio;??public?function?__construct($radio)?{? ??$this->radio?=?$radio;??}??public?function?area()?{? ??$this->areaFigura("Circulo");? ??$area?=? HYPERLINK "" pow($this->radio,?2)*3.14;? ??echo?"Area Circulo:?{$area}<br>";??}??public?function?getPerimetro()?{? ??$perimetro?=?2*3.14*$this->radio;? ??echo?"Y su perimetro es:?{$perimetro}<br>";??}}?$cuadrado?=?new?Cuadrado(3);$cuadrado->area();$cuadrado->getPerimetro();?$circulo?=?new?Circulo(3);$circulo->area();$circulo->getPerimetro();?>Recolector de basura: El GC es una función de la POO que se encarga de liberar la memoria que utilizan los objetos o variables dentro del lenguaje. Cuando un objeto o variable es creada y se le asigna un valor, se crea un puntero a la memoria que contiene esa información y cuando este puntero ya no existe, no es referenciado, el GC se preocupa de liberar ese espacio en la memoria.En PHP no se crean punteros, sino una referencia a dicho objeto en una tabla de símbolos. <?php class?Foo {? ?? public?$var;? ?? function?__construct()?{? ? ? ?? $this->var?=?1;? ?? }? ?? function?inc()?{?return?++$this->var;?} }?// $a "referencia" a un objeto Foo$a?=?new?Foo();//b también referencia al mismo objeto Foo que a$b?=?$a;?// ($a) == ($b) == <id> del objeto Foo, // pero a y b son entradas distintas // en la tabla de símbolos?echo?"\$a = "; HYPERLINK "" var_dump($a);echo?"\$b = "; HYPERLINK "" var_dump($b);?$c?=?&$a;?//$c es un alias de $a// ($a, $c) == <id> del objeto Foo, // c es un alias de a en la tabla de símbolosecho?"\$c = "; HYPERLINK "" var_dump($c);?$a?=?NULL;/** * Se elimina la entrada en la tabla de símbolos * donde se relacionaba a "$a" con el objeto Foo * Al eliminarse esta entrada, * $c también deja de estar relacionado con Foo * A todos los efectos, Foo sigue existiendo * en memoria, y sigue estando relacionado con $b **/echo?"\$a = "; HYPERLINK "" var_dump($a);echo?"\$b = "; HYPERLINK "" var_dump($b);echo?"\$c = "; HYPERLINK "" var_dump($c);echo?"\$b->var: ".$b->inc();echo?"\$b->var: ".$b->inc();?$b?=?NULL;/* * Se elimina la entrada en la tabla de símbolos * donde se relacionaba a "$b" con el objeto Foo * Ya no hay más entradas en la tabla de símbolos * que se relacionen con Foo, * Por lo que Foo ha dejado de estar referenciado * y puede ser eliminado por el garbage collector **/echo?"\$b = "; HYPERLINK "" var_dump($b);?>En PHP un objeto o variable podrá ser eliminada de la memoria cuando el GC no tenga ninguna referencia a dicho objeto en la tabla de símbolos. Es decir, PHP mantiene un contador de referencias a un objeto desde el momento en que éste es creado, de forma que durante la ejecución del script PHP va incrementando y decrementando dicho contador de referencias en función de las variables que le van “apuntando”. Una vez ese contador de referencias llega a 0 (es decir, nadie está relacionado con ese objeto y, por lo tanto, no se está utilizando dicho objeto), PHP marca ese objeto como basura o eliminable, de forma que en la siguiente pasada del GC, éste eliminará dicho objeto de memoria y esa posición de memoria será utilizable por PHP nuevamente.Esta función en PHP viene activada por defecto, pero también es posible ejecutarla o desactivarla en tiempo de ejecución.<?phpgc_enabled();??# Activa el GC y devuelve truedc_disabled();?# Desactiva el GC y devuelve NULL?>2.4Patrones de Dise?o.Desde la aparición de la Reusabilidad (o quizás antes) la programación se ha ido desarrollando bajo este concepto, en donde librerías o bibliotecas (independientes del lenguaje que se han escrito) ya probadas y documentadas se pueden usar en cualquier proyecto. Sin ir más lejos, PHP y JAVA están compuestos principalmente por librerías (de acceso a datos, de matemáticas, para manejar arreglos, etc.) desde las que podemos llamar a sus clases y funciones sin más que importar esa librería con una simple línea de código.Lo anterior estaba bien, pero la Reusabilidad no solucionaba de igual manera problemas comunes dentro de aplicaciones similares (El menú de una aplicación no tiene que ver con el menú de otra aplicación). Pues aparecen los patrones de dise?o como soluciones a problemas recurrentes en el desarrollo de un software. Estos patrones de dise?o, denominados así por The Gang of Four, facilitan la reutilización de dise?os y arquitecturas que han tenido éxito en otras aplicaciones.Patrones de Dise?o hay muchos y siguen apareciendo continuamente. El desarrollo de aplicaciones, como disciplina, está en constante cambio y así también los problemas de dise?o. Así que las herramientas que usamos para nuestros desarrollos también se van actualizando y mejorando en favor de estos cambios. ?Cuantos hay? Repito, muchos. es más simple clasificarlos en tres tipos, patrones de creación, patrones de comportamiento y patrones de estructura.Patrones de Creación: Hace referencia a la creación de objetos dinámicamente y algunos de estos patrones son, Singleton, Factory, Factory Method, Abstract Factory, Builder y otros.Patrones de Comportamiento: Se preocupa de resolver problemas sobre la estructura de clases. Tenemos a Interpreter, Iterator, Mediator, Memento, Observer, Strategy y otros.Patrones de Estructura: Relaciona el comportamiento entre los objetos de la aplicación. Acá encontramos a Adapter, Bridge, Composite, Decorator, Flyweight, Proxy.Hay mucha información en la web y en libros sobre el tema lo que hace que no exista una definición como tal para cada tipo y que esta sea subjetiva.Sin embargo, debemos tener presente los siguientes elementos para entender un patrón y sobre todo para la elección de uno: su nombre, el problema (cuando aplicar un patrón), la solución (descripción abstracta del problema) y las consecuencias (costos y beneficios).The Gang Of Four decidió todo lo anterior, que cada patrón debía tener un buen nombre, debe tener sinónimos, asociar un problema (la intención, la motivación y la aplicabilidad) y la solución que viene dada por una estructura (Un diagrama de clases), sus participantes (explican el rol que juegan las clases del diagrama anterior), las colaboraciones (diagramas de secuencia que explican las relaciones entre los objetos), la implementación (o comentarios de variaciones según ciertos detalles), un código (que demuestra cómo se implementa sobre un ejemplo concreto), los usos reconocidos y en donde se implementa junto a los patrones relacionados a este.En relación a las consecuencias, el uso de un patrón viene dada por su eficiencia, flexibilidad, uso de memoria, tiempo de ejecución y seguridad.En el framework se implementa el Patrón Singleton que pertenece a los patrones de creación. Este patrón restringe la creación de objetos de clase a uno solo. Garantiza que hay solo una instancia y proporciona un único punto de acceso global.2.5Principios SOLIDSOLID es un acrónimo de cinco principios del dise?o orientado a objetos y que combinados ayudan al desarrollador crear proyectos fáciles de mantener y expandir, generando un código robusto y dando como resultado un software de calidad. Estos principios son aplicables independientes del lenguaje de programación orientado a objetos que se esté utilizando.Estos principios fueron definidos por Robert C. Martin por el a?o 2000 pero fue más tarde cuando Michael Feathers juntando las iniciales de estos principios como SOLID que tomaron mayor relevancia.Para entender estos principios es necesario manejar dos conceptos fundamentales en cualquier desarrollo de software.Acoplamiento: Podemos definirlo como el grado en que una clase, método o cualquier otra entidad de software, está directamente vinculado a otro. Este grado de acoplamiento también puede ser visto como un grado de dependencia.Cohesión: es la medida en que dos o más partes de un sistema trabajan juntas para obtener mejores resultados que cada parte por separado.Para obtener un buen software siempre debemos tratar de tener un acoplamiento bajo y una alta cohesión, y los principios SOLID nos ayudan con esta tarea. Si seguimos estas pautas, nuestro código será más robusto, mantenible, reutilizable y extensible y evitaremos la tendencia de nuestro código a romperse en muchos lugares cada vez que se cambia o buenos principios, estos no tienen un orden especifico ni una importancia mayor uno del otro. Se necesita de bastante practica para aplicarlos pues es necesario reconocer las fallas en el código para luego refactorizar el código.2.7.1 Single Responsibility Principle.El Principio de Responsabilidad ?nica nos dice que una clase sólo debe tener un motivo para cambiar, lo que significa que sólo debe tener una tarea o responsabilidad.?Cuándo se está rompiendo este principio?Cuando en una clase encuentras métodos de capas diferentes.Un excesivo número de métodos públicos.Cuando la clase requiere en demasía de otras.Las variables de clase tienen métodos propios.Si agregas una funcionalidad a la clase, debes refactorizar.Lo que realmente se busca es aislar los cambios, no las responsabilidades, aunque normalmente las responsabilidades y las razones para hacer cambios van estrechamente ligados.2.7.2 Open Closed Principle.El Principio de Abierto/Cerrado habla sobre que los objetos o entidades deberían estar abiertas a su extensión, pero cerradas para su modificación.La forma más sencilla de entender este principio es cuando modificamos constantemente una clase a?adiéndole nuevas funcionalidades, estas implican modificar las que ya están escritas. Este hecho te da motivo para revisar el código y entender que necesitas de otra clase para que la original no sufra mayores cambios.La solución a este principio se basa en el Polimorfismo. En vez de obligar a la clase principal a saber cómo realizar una operación, delega esta a los objetos que utiliza, de tal forma que no necesita saber explícitamente cómo llevarla a cabo. Estos objetos tendrán una interfaz común que implementarán de forma específica según sus requerimientos.2.7.3 Liskov Substitution Principle.El Principio de Sustitución de Liskov dice que, si S es una subclase de T, entonces los objetos de T podrían ser substituidos por objetos del tipo S sin alterar las propiedades del problema. Esto es, cada clase que hereda de otra puede usarse como su padre sin necesidad de conocer las diferencias entre ellas.El principio de Liskov nos ayuda a utilizar la herencia de forma correcta, y a tener mucho más cuidado a la hora de extender clases.Este principio se rompe cuando creas una clase que extiende de otra, y ves que hay métodos que bien te sobran o están demás. Entonces no te queda otra solución que dejarlo vacío o que te avise de un error al intentar ejecutarlo. Si un método sobrescrito no hace nada o lanza una excepción, es muy probable que estés violando el principio de sustitución de Liskov.2.7.4 Interface Segregation PrincipleEl Principio de Segregación de Interfaces define que una clase nunca debe ser forzada a implementar una interface que no usa, empleando métodos que no tiene por qué usar.Las interfaces nos ayudan a desacoplar clases entre si. Una Interfaz define el comportamiento que una clase necesita para una funcionalidad, pero es la clase quien implementa el cómo se hará.Cuando las interfaces definen métodos que una clase no usa, estas violando este principio, entonces deberías construir varias interfaces e implementar métodos más específicos.2.7.5 Dependency Inversion Principle.El Principio de Inversión de Dependencias se refiere a que las entidades deben depender de abstracciones no de concreciones. Una clase de alto nivel no debe depender de las clases de bajo nivel, pero deben depender de abstracciones. Así mismo, las abstracciones no deben depender de detalles, sino que los detalles deben depender de las abstracciones.Cuando una clase instancia otras clases dentro de su ámbito, se está violando este principio. La clase principal depende de las clases que instancia y sería mejor abstraer esas clases fuera del ámbito actual y generar instancias para ser pasadas, por ejemplo, en el constructor o por setters a la clase principal. Así ningún cambio en esos objetos influye en la clase principal.2.6MVC.En la extensa literatura sobre el tema, podemos decir que no hay un acuerdo sobre que patrón de dise?o cumple MVC. Algunos dicen, que no es un patrón de dise?o, sino un patrón arquitectónico, otros lo dan como patrón de creación, y algunos más le meten dentro lo un estilo arquitectónico (estos organizan la jerarquía general de todo el software de un proyecto).Lo que si podemos asegurar es que MVC cumple con todos los elementos ya se?alados para denominarse un patrón con la salvedad de que abarca no un problema concreto en una aplicación, sino más bien se enfoca en como estructurar la solución al desarrollo (estilo arquitectónico).MVC, son las siglas de Modelo-Vista-Controlador que es uno de los tantos patrones de arquitectura de software y como buen patrón nos brinda de un marco de desarrollo de aplicaciones a través de la construcción de tres componentes distintos, el Modelo, la Vista y el ControladorEste patrón separa la lógica de negocio (Modelo) de la interfaz de usuario (Vista) y de la lógica de la aplicación (Controlador). Esta separación implica una mejor funcionalidad, mantenibilidad, escalabilidad y reusabilidad (Conceptos de Calidad del Software) de un sistema, de forma simple, sencilla, en código legible, entendible, y flexible a todo programador que esté en condiciones de desarrollar el sistema.Su fundamento es la separación del código en tres capas diferentes, acotadas por su responsabilidad. Modelos, Vistas y Controladores.Modelos: Representan la lógica del negocio. Es quien hace de intermediario con la Base de Datos, accediendo a los datos de esta. También posee reglas de negocio, que hace referencia al manejo de datos.Vistas: Representa la Interfaz de Usuario. Es quien se encarga de presentar los datos al usuario mediante una interfaz gráfica. Gestiona la información de entrada (como pedirla) y la de salida (como mostrarla).Controladores: Representa la lógica de la aplicación. Es quien hace de intermediario entre el modelo y la vista, a través de eventos generados por el usuario para así acceder a los datos necesarios y presentarlos en la vista.El funcionamiento básico del patrón MVC, puede resumirse en:El usuario realiza una peticiónEl controlador captura el evento (puede hacerlo mediante un manejador de eventos o peticiones, por ejemplo)Hace la llamada al modelo/modelos correspondientes (por ejemplo, mediante una llamada de retorno o callback) efectuando las modificaciones pertinentes sobre el modeloEl modelo será el encargado de interactuar con la base de datos, ya sea en forma directa, con una capa de abstracción para ello, un Web Service, etc. Y retornará esta información al controladorEl controlador recibe la información, la procesa y la envía a la vistaLa vista, recibe esta información y genera el dise?o de la interfaz gráfica o GUI. La lógica de la vista, una vez procesados los datos, los acomodará en base al dise?o de la GUI p plantilla, y los entregará al usuario de forma humanamente legible.2.7Calidad del Software.Si bien el concepto de software no es nuevo, la industria del software como tal si es algo relativamente nuevo y podríamos decir que vino acompa?ada con el desarrollo de los lenguajes de programación, de lo cual ya hemos hablado, y de los avances tecnológicos. Toda esta industria está produciendo software que cumpla con parámetros como la alta calidad, con un menor costo y que se desarrolle en el menor tiempo posible. Motivando la competitividad frente a clientes cada vez más exigentes.No se puede hablar de calidad de software sin dejar de mencionar errores comunes en el desarrollo de software.Mala definición de requisitos.Mala comunicación con el cliente.Mala organización presupuesto / tiempo.Errores lógicos de dise?o.Errores de codificación.Incumplimiento de estándares de codificación y documentación.Pruebas incompletasErrores de procedimiento.Errores de documentación.?Qué nos obliga a desarrollar software pensando en la calidad?Condiciones contractualesRelación cliente / proveedor.Trabajo en equipo.Cooperación y coordinación.Interfaces con otros sistemas de software.Cambios de componentes del equipo.Mantenimiento del producto.La calidad del software es el conjunto de cualidades que lo caracterizan y que determinan su utilidad y existencia. Si bien la idea no es definir conceptos, pues ya fueron tratados en su mayoría en asignaturas de la carrera, es necesario hacer un breve resumen que se aplique al tema de tesis. Siguiendo esta lógica cada desarrollo de software contara con parámetros distintos a evaluar en busca de la Calidad de Software. Entre los más importantes y reiterativos podemos enunciar los siguientes:Funcionalidad: Hace referencia a la precisión y seguridad de que el software hace lo que debe hacer.Portabilidad: Relaciona temas como la instalación y la adaptación del software en diferentes sistemas y entornos.Fiabilidad: habla de la madurez del software en relación a la tolerancia a fallos y su capacidad de recuperación frente a estos.Mantenibilidad: Capacidad del software para ser estable y mantenible en el tiempo.Eficiencia: Es la relación entre el comportamiento del software en el tiempo contra el uso de los recursos.Usabilidad: Hace referencia a la facilidad de aprendizaje del software y de uso del cliente o usuario final.Toda aplicación Web resultante de un desarrollo de software se puede separar en dos componentes principales, el Front-End y el Back-End. Podríamos definir al Back-End como todo lo que se ejecuta en el servidor, invisible al usuario, tales como las conexiones a las bases de datos y las consultas que realizamos a estas; así también se le denomina Back-End a toda la interfaz de administración de una aplicación web. Este componente se sirve principalmente de PHP para realizar sus tareas.Sobre el Front-End podemos decir que es todo lo que la aplicación web le muestra al usuario a través de un navegador. Este componente usa principalmente lenguajes como HTML, CSS y JavaScript.Por otro lado, el desarrollo de una aplicación web, o de cualquier software en general, se lleva a cabo en dos procesos o tiempos, el primero es el tiempo de desarrollo, durante el cual se programa todo el código y se realizan las pruebas necesarias antes de la entrega final, y el segundo es el periodo en tiempo de ejecución, durante el cual la aplicación está abierta al público o usuario final. Algunas veces y según los requerimientos entre ambos periodos existe un periodo de pruebas o ‘marcha blanca’ para solucionar algún problema no contemplado.Tanto en el Front-End como el Back-End, se deben asegurar ciertos atributos de Calidad de Software y estos son dependientes de cada desarrollo y sus requerimientos.Algunos atributos de calidad inherentes al proceso de desarrollo del software, referidos al Framework. pueden ser:Capacidad de ser configurable. Que el desarrollador pueda realizar cambios sin afectar al Framework.La capacidad de integrar módulos y dependencias al framework.Asegurar la Integridad de la información que manejara el framework.El framework debe garantizar la capacidad de mantenibilidad. Ser mantenible en el tiempo.Capacidad para ser ejecutado en distintos ambientes, tanto de software como de hardware.Tener la capacidad de ser reusable. Usar la misma estructura en futuros proyectos.Permitir la escalabilidad. Que el dise?o permita la ampliación del framework.Y sin que sea un atributo menor, pues dependerá del tipo de desarrollo, debe ser capaz de ser sometido a pruebas.Durante el proceso de ejecución del software, algunos atributos de calidad pueden ser:Disponibilidad de uso. Hace referencia a la usabilidad de la aplicación y su relación con el usuario finalConfidencialidad, puesto que se debe evitar el acceso no autorizado a secciones del sistema si este lo requiere.Funcionalidad. La aplicación debe cumplir con los requerimientos establecidos. Desempe?o. La aplicación debe dar siempre una respuesta ante una petición.Confiabilidad. El sistema de estar operativo y ser permanente en el tiempo.Seguridad. Tanto interna, evitando la perdida de información debido a errores del sistema, como externa, siendo capaz de impedir ataques, usos no autorizados, etc. Dise?o del Framework3.1Introduccióo es sabido, se utilizará el patrón arquitectónico MVC para el desarrollo del framework que estará escrito en PHP, será compatible desde la versión 5.3. Desde la versión 7.0, la más actual y estable (la 7.1 aun esta en desarrollo), la compatibilidad no es completa y el framework genera errores debido a nuevos cambios en el tipificado del código.El desarrollo se implementará en un entorno local bajo Windows 10, usando la distribución de XAMPP, software libre, en su versión 5.6.30. Esta versión incluye, entre otras cosas Apache 2.4.25, MariaDB 10.1.21, PHP 5.6.30, phpMyAdmin 4.6.5.2. Todos los componentes de XAMPP tienen su propia licencia y esta compilación permite la actualización de cada componente por separado si es necesario.La instalación de XAMPP sobre Windows (Linux o MAC) o la actualización de los componentes de la distribución no es materia de esta tesis. Tanto en su página como en Internet encontramos variada información al o editor de código se usó Notepad++, un editor de código libre que soporta múltiples lenguajes de programación. Posee una buena cantidad de plugins y plantillas que facilitan la escritura de código. Solo está disponible para sistemas Windows.El desarrollo del framework en PHP que tiene motivo en esta tesis se desarrollara bajo las condiciones antes mencionadas. En este capítulo se revisará la estructura básica y se comparará con la estructura actual del framework, así como también el desarrollo de los archivos iniciales y los cambios que han llevado a la configuración actual. Se hablará sobre el desarrollo de librerías y módulos para el framework y el cómo implementar un gestor de dependencias para este.3.2Estructura Básica.En la siguiente imagen se muestran las carpetas con la estructura inicial a la izquierda y a la derecha la estructura actual del framework.Imagen STYLEREF 1 \s 3.1. Estructura BásicaLa diferencia principal entre ambas estructuras radica en dos carpetas. La carpeta vendor y la carpeta Widgets. Debemos hacer notar que no es necesario que las carpetas tengan su nombre con la primera letra mayúscula, pero se recomienda seguir con el estándar para los namespaces.La primera es generada por el gestor de dependencias composer, quien se encarga de instalar las librerías de terceros que se utilizan en el framework. En su estructura actual, composer instala las librerías dompdf (que maneja la creación de archivos PDFs) y phpmailer (quien se encarga de crear, formatear y enviar correos). Este gestor también crea los archivos composer.json y composer.lockLa carpeta Widgets es generada durante el desarrollo y contiene los archivos para insertar widgets propios o de terceros en el front-end del proyecto.En la siguiente tabla se relaciona cada componente de la estructura básica y su función o contenido dentro del framework.Tabla STYLEREF 1 \s 3 SEQ Tabla \* ARABIC \s 1 1 Estructura Inicial framework PHPEstructura Inicial framework PHPCarpeta / ArchivoFunción / ContenidoArchivosContiene archivos y carpetas públicas que no son propias del framework.ClasesContiene los archivos necesarios para un correcto funcionamiento del framework.ControladoresArchivos relacionados con las clases controladorasLibreríasArchivos o carpetas de librerías externas o internasModelosArchivos con las clases modelosMódulosCarpetas relacionadas con los módulosVistasArchivos y carpetas necesarias para la visualización de las vistas..htaccessArchivo de configuración de servidor apache.index.htmlArchivo HTMLindex.phpArchivo PHPEl primer archivo a crear es index.php y el servidor es quien sirve este archivo ante cualquier petición. Contiene una función para autocargar de clases y define algunas variables necesarias para el funcionamiento del framework.El archivo index.html se crea ante la ausencia del archivo index.php.El archivo .htaccess es el archivo de configuración de apache. Este contiene las reglas necesarias para trabajar con URLs amigables. Además, impide el acceso a directorios, ficheros y enlaces simbólicos.3.3Configuración Inicial.En la carpeta clases encontramos el motor del framework. Esta carpeta contiene las clases necesarias para que el framework funcione y otras clases que se han ido agregando a medida que el framework se ha ido actualizando. En la imagen siguiente vemos la diferencia entre el estado inicial del framework y el actual.Imagen STYLEREF 1 \s 3.2. Configuración InicialEn la siguiente tabla se describe cada archivo haciendo mención al nombre, contenido, tipo de archivo.Tabla STYLEREF 1 \s 3 SEQ Tabla \* ARABIC \s 1 2 Configuración InicialArchivoTipoContenidoconfiguracion.phpArchivo PHPContiene definiciones de constantescontrolador.phpClase abstracta PHPEs el controlador padre del framework y contiene funciones globalesdatabase.phpClase PHPEs quien hace la conexión con la Base de Datos. Es la clase padre de Modeloerror.phpClase PHPEs la que maneja los errores del motor del framework.index.htmlArchivo HTMLEvita la navegación directa por la URLiniciar.phpClase PHPClase que se encarga de llamar al controlado pedido en una peticiónmodelo.phpClase PHPEs Modelo padre del framework.peticion.phpClase PHPEs la clase que recibe las peticiones y proporciona el controlador a la clase Iniciarregistro,phpClase PHPClase que implementa el Patrón Singletonvista.phpClase PHPClase que elabora las vistas del frameworkArchivos Actualesacl.phpClase PHPEs la encargada de manejar y controlar los accesos a los métodos y vistas de frameworkcargador.phpArchivo PHPContiene funciones para la carga automática de clases. Se puede eliminar si se instala composersesion.phpClase PHPEncargada de controlar las variables de sesión en el framework3.4Controladores.Un controlador está encargado de relacionar la lógica de negocio con la capa encargada de gestionar la interacción con el usuario.El Controlador principal está ubicado dentro de la carpeta Clases, este archivo obtiene la petición realizada y genera un objeto de la vista. También se encarga de crear objetos de los modelos y de las librerías del Framework.Cuando se realiza una petición el core del Framework rescata esa petición y se la envía al controlador apropiado. Ese controlador (controlador hijo) hereda del controlador principal y ejecuta las acciones necesarias según la petición generada por el usuario en la vista.Los controladores hijos pueden estar ubicados en dos partes, en la carpeta controladores o bien dentro de la carpeta controlador del módulo al que pertenezca.La teoría del patrón MVC puede entenderse como que a cada Controlador existente se le debe asociar un Modelo o una Vista. La existencia de un controlador hijo no implica necesariamente que tenga un modelo o una vista asociada. Esta abstracción permite que ese controlador pueda usarse desde la vista para manejar por ejemplo objetos JSON vía AJAX desde una vista cualquiera.3.5Modelos.Al igual que los controladores, el framework trabaja con un modelo padre y modelos hijos. Los hijos heredan del padre una variable que permite la conexión a la base de datos e implementan los métodos para interactuar con esta.En la carpeta Clases encontramos dos archivos. El primero, llamado database es la clase que hace la conexión a la base de datos mediante la librería PDO de PHP. El segundo archivo, modelo hereda del primero la conexión y es quien reparte esta conexión a los modelos hijos.La existencia de un modelo hijo implica una llamada desde un controlador hijo, Es decir, si se realiza una petición desde la vista por el usuario que implica una llamada a la base de datos, el controlador hijo debe pedir un acceso a esta.Los modelos hijos se encuentran en las carpetas Modelos, ya sea en el directorio raíz (cuando un modelo no pertenece a un módulo) o bien dentro de su modulo correspondiente.3.6Vistas.En la carpeta Clases se encuentra la clase Vista quien es la responsable de analizar, procesar y visualizar una página web. Básicamente una página web es una plantilla más una vista, en donde la platilla es la que controla la inclusión de archivos CSS y JS para darle un aspecto visual u otro y la vista es la que va cambiando según sea el controlador hijo que llame a la clase.En el framework es el Controlador padre quien crea un objeto de la clase Vista y es esta clase quien debe cargar la plantilla. El controlador hijo, quien es el que recibe una petición, es el que pide una vista determinada a la clase Vista a través de un método heredado desde el Controlador padre.Las vistas son archivos phtml que son requeridos por los controladores hijos y se encuentran en el directorio raíz (cuando un modelo no pertenece a un módulo) o bien dentro de su modulo correspondiente.3.7Archivos de Configuración.El framework trabaja con dos archivos de configuración. El primero está presente en la carpeta Clases y define constantes globales para el framework. El segundo archivo se encuentra en la carpeta Vistas/plantillas y contiene funciones que devuelven variables necesarias para elaborar la plantilla de las páginas web. Podríamos decir que existe un tercer archivo de configuración, composer.json y este se crea si se va a instalar el gestor de dependencias composer.3.8Librerías y Módulos.Una librería es un archivo o conjunto de varios archivos que permiten la realización de una tarea específica. Estas librerías pueden ser clases o un archivo con funciones. En el framework se pueden cargar librerías propias y de terceros. Nos referimos a librerías propias a las realizadas para el framework, en este tenemos varias librerías, para subir imágenes, generar reportes desde bases de datos, y una con funciones varias, y se pueden usar para cualquier proyecto que utilice el framework, Las librerías de terceros se pueden incluir sin problemas y solo teniendo al cuidado en el cómo se cargan.Un Módulo es un conjunto de clases y archivos implementados bajo la estructura MVC y que permiten la realización de varias tareas que en conjunto tienen un solo fin último.Un Módulo debe ser capaz de ser incluido en el Framework de manera que no altere la estructura ni el funcionamiento del sistema. Así mismo si ya no se necesita, al ser eliminado de la estructura no cause errores en el sistema. 3.9Dependencias.Cuando hablamos de dependencias nos referimos a recursos programados, desarrollados y ya probados por terceros, es decir, otros programadores. Estos recursos suelen ser librerías o plugins que un proyecto necesita para realizar una determinada tarea.Antes de PHP en su versión 5.3 el uso de estas dependencias estaba limitado principalmente por la colisión de nombres de clases entre las de un proyecto y las clases de la librería externa. Por ejemplo, en una carpeta de Windows no puedes tener dos archivos con el mismo nombre, la misma lógica se puede utilizar para visualizar el contexto. Desde la versión 5.3 y la aparición de los namespaces este problema se solucionó, pero si el proyecto era muy grande, el número de librerías externas aumentaba y con ello, actualizar cada una de ellas era engorroso.Los programadores en PHP desarrollaron composer, un programa que trabaja de forma local en tu equipo/servidor y que permite instalar, organizar y mantener actualizadas todas las dependencias de un proyecto. Estos procesos se realizan vía consola de comandos.El uso de esta herramienta en una configuración inicial no es necesario más si se requiere en un desarrollo más avanzado del framework, pero es algo tan útil que no mencionarlo limitaría la potencia de este o cualquier framework, sistema o proyecto web. Si se trabaja de forma local, composer se puede instalar mediante su ejecutable o en la carpeta del proyecto por medio de un archivo PHP que su misma web provee. Esta herramienta ya está instalada en todo buen poser crea una carpeta vendor en la raíz del proyecto y dentro de estas están todas las librerías que has requerido en el archivo composer.jsonLa utilidad más importante, para el framework, de este gestor es la inclusión de un autoload configurable desde el archivo composer.json para trabajar con namespaces en PHP, característica que sirve para encapsular clases tal como se hace en Windows con las carpetas para alojar archivos. Sin composer también se puede usar esta característica, pero se tendría que escribir y registrar un autolader para la carga automática de clases. El autoload trabaja bajo especificación PSR-4 (creada por PHP para estandarizar procesos), para la autocarga de clases.3.10FuncionamientoUn framework MVC es un patrón de arquitectura de tres capas, una capa controladora, una capa modelo y una capa vista. La primera es la encargada de relacionar las otras dos. En la imagen siguiente se puede observar el funcionamiento del framework en un proyecto o página web en seis pasos.Imagen STYLEREF 1 \s 3.3. Diagrama Patrón MVCPaso 1: El usuario envía una petición al controlador vía URL.Las URLs permitidas serán de dos tiposControlador/Método/param1/param2/param3/...Modulo/Controlador/Método/param1/param2/param3/...El encargado de procesar estas URLs es la clase Petición. Esta clase realiza la tarea de separar la URL en variables, así sea en un módulo si existe, un controlador, un método y agrupara los parámetros recibidos en un arreglo. Asigna cada valor a variables para que puedan ser utilizadas por la clase Iniciar que posee un único método que se encarga de hacer un llamado al controlador que corresponde.Cierto es que se pueden recibir variables por $_GET en el framework, pero eso depende de quién programe cada controlador. Paso 2: El controlador solicita los datos al modelo.Cuando el usuario final visita la página web pueden pasar dos cosas, que interactúe con la página ingresando algún dato que esta solicita (por ejemplo, en un login de usuario o un formulario de registro) o bien buscando alguna información (usando un buscador de la página), de forma que hablamos de una página web dinámica. Por el contrario, si la página web no solicita información ni mucho menos tiene un buscador para que el usuario interactúe con la página hablamos de una página web estática.En el primer caso, pagina web dinámica, el controlador solicita a la base de datos la información que el usuario requiere o envía.En una página web estática el controlador no solicita ninguna información a la base de datos y este paso se omite.Por lo explicado anteriormente, este paso es opcional según la página web y como el usuario puede interactuar con ella.Hay que hacer notar que, si la página web genera su contenido desde una base de datos, esta no se definirá como web dinámica hasta que el usuario interactúe con esta de alguna forma.Paso 3: El Modelo devuelve los datos.Esta acción es consecuencia del paso anterior. La base de datos solo devolverá datos si hubo alguna interacción con el usuario.Paso 4: El Controlador selecciona una Vista.Desde el momento en que se accede a la página web, los pasos anteriores se han ejecutado y ahora le toca al controlador seleccionar que vista le presenta al usuario.Si el usuario visita la raíz del sitio, por ejemplo web-. La clase Petición seleccionara al controlador por defecto que implementa el framework y este controlador seleccionara la vista que tiene asignada. Si el usuario ingresa a alguna sección dentro del sitio, por ejemplo web-ejemplo-como/productos/ La clase Petición enviara productos como controlador a la clase Iniciar la cual llamara al controlador productos para que presente la vista que está programada.Paso 5: Se devuelve la vista seleccionada al controlador.La Vista devuelve la vista seleccionada por el controlador lista para ser mostrada.Paso 6: El controlador carga la Vista.El Controlador recibe la vista ya renderizada y con la información proporcionada luego la envía al navegador para ser interpretada.Notas sobre el funcionamiento.Una petición del tipo controlador-hijo/método/argumento1/argumento2/… describe un controlador-hijo, un método y un conjunto de argumentos.El controlador-hijo debe ser clase y existir en la carpeta Controladores. Así el método debe de existir en la clase y debe llamar a la vista por medio de la variable que la clase hereda del controlador padre.Si es necesario acceder a un modelo, esto se realizará a través de un método heredado del controlador padre que cargará un objeto del modelo que realizara la interacción con la base de datos. El modelo debe estar en la carpeta Modelos.Dado que el controlador-hijo hereda un objeto de la vista desde el controlador padre, el primero puede acceder al método que crea la vista para que así se pueda visualizar en el navegador. La vista que se pide debe estar en la carpeta Vistas.Tabla STYLEREF 1 \s 3 SEQ Tabla \* ARABIC \s 1 3 Ejemplo URL petición sin moduloURLproducto/ver/articulo-1ControladorModeloVistaArchivoProductoControlador.phpProductoModelo.phpproducto.phtmlClaseProductoControladorProductoModeloRutaControladoresModelosVistas\productoSi la petición es modulo/controlador-hijo/método/args1/args2/… El procedimiento no varía, salvo que la ubicación del controlador-hijo, que en este caso se encuentra dentro de la carpeta modulos\controlador-hijo\controlador\. El modelo se encontraría en la carpeta modulos\controlador-hijo\modelo y la vista en la carpeta modulos\controlador-hijo\vista.Tabla STYLEREF 1 \s 3 SEQ Tabla \* ARABIC \s 1 4 Ejemplo URL petición con moduloURLproductos/listar/articulo-1ControladorModeloVistaArchivoListarControlador.phpListarModelo.phplistar.phtmlClaseListarControladorProductoModeloRutaModulos\productos\controladorModulos\ productos \modeloModulo\ productos \vista\listar3.11Observaciones:El patrón MVC como dise?o especifica que es el controlador quien recibe y administra las peticiones, esto según la teoría, pero la realidad y de acuerdo a los principios SOLID de los que ya se habló anteriormente hace que quien maneje las peticiones sea una clase especializada de forma que podamos abstraerla y que si en algún momento cambia no afecte al Controlador.En la siguiente imagen vemos como funciona el Framework desde que un usuario realiza una petición.Imagen STYLEREF 1 \s 3.4. Core del FrameworkLa Clase Registro implementa antes que todo el patrón Singleton que permite crear una instancia de una clase y otorgar un acceso global a esta. Así se crea un objeto de la Clase PeticiónCuando el usuario efectúa una petición, la Clase Petición recoge la URL y se encarga de administrar la petición realizada, determinando el controlador, método y argumentos apropiados y almacenando estos en variables.Quien es el encargado de llamar al controlador que el usuario pidió mediante una URL es la Clase Iniciar. Esta clase toma las variables que administra la Clase Petición y hace un llamado al controlador que la Clase Petición estimo correcto. Aplicaciones modulares4.1Introducción.Cuando hablamos de aplicaciones modulares nos estamos refiriendo a un conjunto de carpetas y scripts, que siguen el patrón MVC, reutilizables y exportables a diferentes tipos de desarrollo web usando el framework construido por nosotros.La modularizarían es uno de los aspectos fundamentales de la POO y por lo tanto se debe garantizar la reusabilidad del código. Estos aspectos implican la escalabilidad de cualquier proyecto por medio del framework y que, a su vez, cualquier modulo escrito para un proyecto particular pueda ser usado en otro con mínimos cambios en el código.Estos módulos deben seguir el estándar implementado por el framework. Cada módulo debe estar en una carpeta que lleva el mismo nombre del módulo. Dentro de esta deben existir las carpetas Controlador, Modelo y Vista que se aplica en el patrón MVC. Además, este módulo debe estar incluido en el archivo Peticion.php y que su clase pueda hacer la diferencia entre un módulo y un controlador.Los controladores extenderán del controlador padre y así también los modelos extenderán del modelo padre. Los namespace tiene que ser definidos de forma correcta módulos\nombre-modulo\controlador y módulos\nombre-modulo\modelo respectivamente.4.2Modulo de Usuarios.4.2.1 Introducción.Cuando un proyecto web requiere manejar datos e información privada, se requiere un módulo de usuarios que permita el acceso a esta información o bien restringirla. El módulo Usuarios cuenta con los scripts necesarios para realizar las siguientes tareas:Registro de Usuarios.Validación de cuenta de Usuario.Login de Usuarios.Control de sesión de Usuario.Recuperación de cuenta a través de emailCreación de nuevos Usuarios desde el Administrador.Reportes de Usuarios.Edición de perfil de UsuarioEliminar UsuariosPor otro lado, el control de acceso se puede realizar por medio de dos clases diferentes. La Clase Sesión y la Clase ACL, ambas clases se encuentran ligadas a las mismas tablas de la Base de Datos y se puede usar indistintamente una o la otra. Ambas manejan el sistema de roles y permisos para proporcionar los accesos a los controladores, pero la Clase ACL es la única que puede agregar, modificar o eliminar estos.Ambas clases tienen métodos para controlar el acceso a los controladores, emitiendo un error en caso de que el usuario no tenga los permisos, así como también estos métodos se pueden aplicar en las vistas para deshabilitar alguna sección o contenido para ciertos usuarios.El sistema de Roles incluye tres roles básicos, el Super Administrador, el Administrador y el Usuario. Se pueden crear más roles si es necesario. Estos roles poseen permisos y son estos permisos los que son aplicados en los controladores para dar acceso o no a un determinado rol.La cantidad de roles y permisos dependerá exclusivamente del tipo de proyecto web que se esté realizando y cuales sean los requerimientos.4.2.2 Base de Datos.4.2.2.1 Especificación de Requisitos.La implementación del módulo está condicionada al tipo de proyecto web que se realiza y si se necesita algún nivel de acceso a datos o información que requiera de un sistema de usuarios.4.2.2.2 Dise?o Conceptual.El módulo relaciona cada Usuario con un Rol definido según el proyecto. Cada Rol puede tener una o muchas tareas o permisos.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 1. Dise?o Conceptual Modulo Usuarios4.2.2.3 Dise?o Lógico:Usuarios (id, nombres, apellidos, clave, email, activado)Roles (id_role, role)Permisos (id_permiso, permiso, llave)Tienen (id_role, id_permiso)A la relación “tienen” le llamaremos permiso_roleImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 2. Dise?o Lógico Modulo Usuarios4.2.2.4 Dise?o Físico:Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 3. Dise?o Físico Modulo Usuarios4.2.3 Diagramas.Siendo el framework el sistema y los usuarios sus actores, independiente del proyecto, el módulo de Usuario contempla los siguientes casos de usoRegistro de usuario.Login de Usuario.Modificar un usuario.Eliminación de usuario.Creación, modificación y eliminación de permisos de usuarioCrear, modificar y eliminar roles de usuario.Generación de reportes de usuarios.4.2.3.1 Casos de Uso.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 1 Caso de Uso. Registro de UsuarioDescripción de Caso de UsoNombreRegistro de UsuarioAliasRegistroActoresUsuario, AdministradorFunciónValidar el registro de un nuevo usuario al sistema.DescripciónUn usuario accede al registro del sistema y rellena los datos que el sistema le pide. El sistema valida esos datos y el usuario recibe un correo para activar la cuenta o envía un mensaje de error si los datos no son validados.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 2 Caso de Uso. Login de UsuarioDescripción de Caso de UsoNombreLogin de UsuarioAliasLoginActoresUsuario, AdministradorFunciónValidar el acceso de un usuario al sistema.DescripciónUn usuario accede al Login del sistema y rellena los datos que el sistema le pide. El sistema valida esos datos y el usuario es dirigido a su perfil o envía un mensaje de error si los datos no son validados.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 3 Caso de Uso. Modificación de UsuarioDescripción de Caso de UsoNombreModificación de UsuarioAliasModificarActoresUsuario, AdministradorFunciónEditar el perfil de un usuario del sistema.DescripciónUn usuario accede a su perfil en el sistema y modifica los datos que el sistema le tiene almacenados. El sistema valida esos datos y el usuario recibe un mensaje con los cambios realizados o envía un mensaje de error si los datos no son validados.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 4 Caso de Uso. Eliminación de UsuarioDescripción de Caso de UsoNombreEliminación de UsuarioAliasEliminarActoresUsuario, AdministradorFunciónDarse de baja del sistema.DescripciónUn usuario accede a su perfil y se da de baja e el sistema. El Sistema lo elimina de su Base de Datos.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 5 Caso de Uso. Creación de Permiso de UsuarioDescripción de Caso de UsoNombreCreación de Permiso de UsuarioAliasActoresAdministradorFunciónCrear un nuevo permiso de usuario en el sistema.DescripciónEl Administrador ingresa los datos para crear un nuevo permiso de usuario en el sistema. El sistema valida estos datos y crea el permiso o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 6 Caso de Uso. Modificación de Permiso de UsuarioDescripción de Caso de UsoNombreModificación de Permiso de UsuarioAliasActoresAdministradorFunciónModificar un permiso de usuario en el sistema.DescripciónEl Administrador modifica los datos de un permiso de usuario ya existente en el sistema. El sistema valida estos datos y modifica el permiso o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 7 Caso de Uso. Eliminación de Permiso de UsuarioDescripción de Caso de UsoNombreEliminación de Permiso de UsuarioAliasActoresAdministradorFunciónElimina un permiso de usuario en el sistema.DescripciónEl Administrador elimina un permiso de usuario ya existente en el sistema. El sistema valida la petición y elimina el permiso o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 8 Caso de Uso. Creación de Nuevo RolDescripción de Caso de UsoNombreCreación de Nuevo Rol de UsuarioAliasActoresAdministradorFunciónCrear un nuevo Rol de usuario en el sistema.DescripciónUn Administrador ingresa los datos para crear un nuevo Rol de Usuario en el Sistema. El Sistema valida estos datos y crea el Rol o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 9 Caso de Uso. Modificación de RolDescripción de Caso de UsoNombreModificación de Rol de UsuarioAliasActoresAdministradorFunciónModificar un Rol de usuario en el sistema.DescripciónUn Administrador modifica los datos de un Rol de Usuario existente en el Sistema. El Sistema valida estos datos y modifica el Rol o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 10 Caso de Uso. Eliminación de RolDescripción de Caso de UsoNombreEliminación de Rol de UsuarioAliasActoresAdministradorFunciónEliminar un Rol de usuario en el sistema.DescripciónUn Administrador elimina un Rol de Usuario ya existente en el Sistema. El Sistema valida la petición y elimina el Rol o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 11 Generación de ReportesDescripción de Caso de UsoNombreGeneración de ReportesAliasReportesActoresAdministradorFunciónGenerar un Reporte de Usuarios.DescripciónUn Administrador le solicita al sistema generar un reporte de usuarios existentes en el sistema.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 4. Casos de Uso GeneralesImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 5. Casos de Uso Administrador4.2.3.2 Diagrama de Secuencias.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 6. Secuencia de RegistroImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 7. Secuencia de LoginImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 8. Diagrama de Nuevo Role4.2.4 Interfaces.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 9. Registro de UsuariosImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 10. Login de UsuariosImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 11. Perfil de UsuarioImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 12. Permisos de UsuarioImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 13. Listado y Reportes de UsuariosImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 14. Permisos de RolImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 15. Nuevo UsuarioImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 16. Control de PermisosImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 17. Editar PermisoImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 18. Eliminar permisoImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 19. Nuevo PermisoImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 20. Control de RolesImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 21. Editar RoleImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 22. Eliminar RoleImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 23. Nuevo Role4.3Modulo de Blog.4.3.1 Introducción.‘El blog’ una simple herramienta que sirve como diario personal de uno o mas autores los cuales pueden ser comentados por los lectores. Además de diario personal puede servir como una red social en que los lectores charlan con el autor o autores al comentar lo narrado.El blog cuenta con los scripts necesarios para realizar las siguientes tareas:4.3.2 Base de Datos.4.3.2.1 Dise?o Conceptual.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 24. Dise?o Conceptual Modulo Blog.4.3.2.2 Dise?o Lógico.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 25. Dise?o Lógico Modulo Blog.4.3.2.3 Dise?o Físico.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 26. Dise?o Físico Modulo Blog.4.3.3 Interfaces.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 27. Interface Blog 1.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 28. Interface Blog 2.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 29. Interface Blog 3.4.4Modulo Bodega.4.4.1 Introducción.La función de almacenaje es una parte fundamental del sistema de distribución total y representa un punto de separación entre los aspectos de la oferta y la demanda de cualquier negocio. Tradicionalmente, la naturaleza física de la operación ha puesto énfasis en su intensivo grado de trabajo, exigiendo un elevado nivel de gestión y control por parte del hombre. El rápido crecimiento del soporte tecnológico ha ofrecido una oportunidad para conseguir una mayor eficacia y eficiencia. Este soporte tecnológico va desde la introducción de mejores equipos de manipulación y almacenaje hasta la utilización de sistemas de control computarizados. Al igual que sucede con otros elementos de la función de distribución, como por ejemplo el transporte y la administración de inventarios; al almacén le conciernen dos objetivos principales: costo y servicio. El principal objetivo es conseguir una posición óptima en relación a estos dos factores a través de la minimización del costo total de la operación, la provisión de los niveles de servicio deseados. Para conseguir estos objetivos, la gestión de almacenes necesita considerar sus tres principales elementos: recursos humanos, espacio y equipos, los cuales dan lugar al costo total de operación del almacén. Este costo total depende del nivel de productividad de cada uno de los elementos y de cómo éstos interactúan, y el nivel de servicio ofrecido a los clientes viene determinado por la eficiencia y eficacia de los procesos y procedimientos utilizados para recibir, almacenar y expedir productos. Este módulo está dise?ado para proporcionarle al usuario, un manejo fácil y cómodo en el manejo de un control de bodega, ya sea para un almacén peque?o o para un negocio grande.El módulo de bodega está definido por:Creación de Orden de CompraCreación de un ProductoIngresos y Salidas de ProductosIngresos de Proveedores.4.4.2 Base de Datos.4.4.2.1 Especificación de Requisitos.La implementación del módulo de bodega depende del tipo de proyecto y solicitud del usuario, ya que se realizará dependiendo de las necesidades que tenga el usuario para implementarlo en su negocio.4.4.2.2 Dise?o Lógico.?rdenes de Compra (Id, Rut, Nombre, Producto, Cantidad, Precio, Total)Productos (Id, Código, Nombre, Unidad, Tipo)Proveedores (Id, Rut, Nombre, Giro, Dirección, Teléfono)GRAFICO………………4.4.2.3 Dise?o Físico.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 30. Dise?o Fisico Modulo Bodega.4.4.3 Diagramas.El módulo Bodega contempla los siguientes casos de usos.Creación de Orden de CompraCreación de ProductoCreación de ProveedorEntrada de ProductoSalida de Producto4.4.3.1 Casos de Uso.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 12 Caso de Uso. Creación de Orden de Compra.Descripción de Caso de UsoNombreCreación de Orden de CompraAliasActoresUsuarioFunciónCrear una nueva orden de compra en el sistema.DescripciónEl Usuario ingresa los datos para crear una nueva orden de compra en el sistema. El sistema valida estos datos y crea la orden de compra o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 13 Caso de Uso. Creación de Producto.Descripción de Caso de UsoNombreCreación de ProductoAliasActoresUsuarioFunciónCrear un nuevo producto en el sistema.DescripciónEl Usuario ingresa los datos para crear una nueva orden de compra en el sistema. El sistema valida estos datos y crea el producto o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 14 Caso de Uso. Creación de Proveedor.Descripción de Caso de UsoNombreCreación de ProveedorAliasActoresUsuarioFunciónCrear un nuevo Proveedor en el sistema.DescripciónEl Usuario ingresa los datos para crear un nuevo Proveedor en el sistema. El sistema valida estos datos y crea al proveedor o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 15 Caso de Uso. Entrada de Producto.Descripción de Caso de UsoNombreEntrada de ProductoAliasEntradaActoresUsuarioFunciónIngresa una nueva cantidad del Producto en el sistema.DescripciónEl Usuario ingresara una nueva cantidad de Producto en el sistema. El sistema valida estos datos y sumara una nueva cantidad en el producto o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 16 Caso de Uso. Salida de Producto.Descripción de Caso de UsoNombreSalida de ProductoAliasSalidaActoresUsuarioFunciónRetira una cantidad del Producto en el sistema.DescripciónEl Usuario retira una cantidad de Producto en el sistema. El sistema valida estos datos y restara una cantidad en el producto o envía un error.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 17 Generación de Reportes.Descripción de Caso de UsoNombreGeneración de ReportesAliasReportesActoresUsuarioFunciónGenerar un Reporte de Productos.DescripciónEl Usuario le solicita al sistema generar un reporte de productos existentes en el sistema.4.4.4 Interfaces.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 31. Listado de ?rdenes de Compra.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 32. Nueva Orden de Compra.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 33. Eliminar Orden de Compra.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 34. Listado de Productos.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 35. Agregar Nuevo Producto.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 36. Eliminar Producto.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 37. Listar Proveedores.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 38. Nuevo Proveedor.4.5Modulo Tienda Online.4.5.1 Introducción.La tienda virtual, medio tan simplificado para usuarios compradores, pero a la vez complejo para su administrador, debe tener una especificación clara para que sea eficiente dada la modalidad caracterizada, procurando uno como administrador de tener visualizada la carencia, gustos o preferencia de quienes visiten nuestro sitio web.Una tienda Online cuenta con los scripts necesarios para realizar las siguientes tareas:Registro de Usuarios.Validez de la cuenta registrada.Modalidades de Compra, costo y envío.Exhibición de Productos (categoría, características y detalle valorizado)Carro de Usuario registrado.Perfil de Usuario (editar perfil, datos de identificación, actualización de datos)Buzón de pedidos.Aceptación, eliminación y edición de Usuarios.Edición de datos e interfaz de la página.Un responsable de una tienda online debe desenvolverse con soltura con las principales disciplinas de marketing online mediante uso de:CMS: es básica la facilidad y prioridad de aprender a utilizar gestores de contenidos. Por eso deberemos estimar la experiencia con cualquier tipo de CMS como WordPress, Prestashop, Drupal, Magento, entre otros.Copywriting: la capacidad de redacción es imprescindible para el administrador de la plataforma virtual responsable debe manejar la buena dicción al ofertar los productos; sepa escribir rápido y de forma creativa para poder llegar al mercado de quien se interese en nuestros productos.No es obligatorio que sea un experto en cada una de ellas, pero sí debe tener el conocimiento suficiente como para supervisar de una forma eficaz la subcontratación de estos servicios.4.5.2 Base de Datos.4.5.2.1 Especificación de requisitosCuando de especificación hablamos en cuando a la tienda online, consideramos un aspecto de gran relevancia.Para dar inicio a la tienda y tener todo lo necesario en un servidor, es de carencia tener un servicio de alojamiento web “hosting”, para llevar nuestro propio servidor gratuito. Cuando expresamos que la tienda online a crear debe tener ventajas comparativas sobre la competencia, debemos considerar una web con alta carga de tráfico y por lo demás una potente conexión de red. Según la programación y estudio realizado MySQL (o similares como MariaDB) como sistema de gestión de bases de datos y PHP (Perl, Python) como lenguajes de programación para las apps webs, son las más idóneas, simples y concretas para dar inicio a la Tienda Online.4.5.2.2 Dise?o Conceptual.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 39. Dise?o Conceptual Modulo Tienda.4.5.2.3 Dise?o Lógico.Productos (id producto, código, nombre, descripción, stock, precio)Categorías (id categoría, nombre)Marcas (id marca, nombre)Pedidos (id pedido, cantidad, precio)Facturas (id factura, fecha)Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 40. Dise?o Lógico Modulo Tienda.4.5.2.4 Dise?o Físico.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 41. Dise?o Físico Modulo Tienda.4.5.3 Diagramas.En El sistema de Tienda Online los escenarios en que actúan los usuarios, son los siguientes casos de usos:Registro de Usuario.Confirmar compra.Exhibición de catálogo.Editar perfil.A?adir producto carro.Eliminación producto carro.Modificar producto catálogo.Validación de cuenta.4.5.3.1 Casos de Uso.Los casos de uso proporcionan uno o más escenarios que indican cómo debería interactuar el sistema con el usuario o con otro sistema para conseguir un objetivo específico.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 18 Registro de usuarios.Descripción de Caso de UsoNombreRegistro de UsuariosAliasRegistroActoresUsuario, AdministradorFunciónAdmisión y validación de un nuevo usuario cliente a la página.DescripciónSe validan los datos ingresado del nuevo usuario/cliente por medio del correo electrónico.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 19 Confirmar Compra.Descripción de Caso de UsoNombreConfirmar compraAliasCompra - VentaActoresUsuario, AdministradorFunciónEntregar claridad al usuario de la tienda Online, respecto a precios de compra, precio de envío, métodos de pago y facilidades de compra, para poder hacerla efectiva y registrarla en la base de datos.DescripciónDatos del usuario para la compra.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 20 Exhibición de Productos.Descripción de Caso de UsoNombreExhibición de ProductosAliasCatalogoActoresAdministradorFunciónOfertar al cliente los productos que tenemos disponible para la carencia que tenga el usuario.DescripciónPor medio de la pesta?a podremos ver con claridad el detalle de los productos ofertados.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 21 Editar Perfil de Usuario.Descripción de Caso de UsoNombreEditar Perfil de UsuarioAliasPerfilActoresUsuarioFunciónIdentificar al cliente registradoDescripciónEdición de Foto de Perfil, datos de completa identificación (nombre completo, correo electrónico, fecha de nacimiento)Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 22 A?adir Producto Carro.Descripción de Caso de UsoNombreA?adir producto CarroAliasCarroActoresUsuarioFunciónSumar un producto más a la compraDescripciónUna vez registrado el cliente puede a?adir al carro de compra lo que el desee.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 23 Eliminar Producto Carro.Descripción de Caso de UsoNombreEliminar Producto CarroAlias CarroActoresUsuario FunciónRestar un producto más a la compra DescripciónTeniendo los productos seleccionados que desee comprar, podrá quitar del carro.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 24 Modificar Producto Catalogo.Descripción de Caso de UsoNombreCarro de Usuario RegistradoAliasCarroActoresUsuariosFunciónModifica los datos de un producto a excepcióndel identificadorDescripciónEl producto ha de existir en la base de datos, modificando solo datos básicos.Tabla STYLEREF 1 \s 4 SEQ Tabla \* ARABIC \s 1 25 Validez de la cuenta registrada.Descripción de Caso de UsoNombreValidez de la cuenta registradaAliasValidezActoresUsuario, administradorFunciónHacer efectivos los datos ingresados por los clientesDescripciónAl correo electrónico del usuario llegara un correo para la validación.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 42. Casos de Usos generales.4.5.4 Interfaces.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 43. Listar Productos.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 44. Nuevo Producto.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 45. Editar Producto.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 46. Eliminar producto.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 47. Listado Marcas.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 48. Nueva MarcaImagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 49. Editar Marca.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 50. Eliminar Marca.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 51. Listado de Categorías.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 52. Nueva categoría.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 53. Editar Categoría.Imagen STYLEREF 1 \s 4. SEQ Imagen \* ARABIC \s 1 54. Eliminar Categoría.Mejoras a futuroDebido a la naturaleza intrínseca de MVC, recordar que este patrón nos ayuda a implementar una estructura en donde se separa claramente la lógica del negocio y la lógica de la aplicación de la interfaz de usuario, mayores cambios o mejoras no pueden hacerse. Y si por el contrario el proyecto exige un cambio real a esta estructura talvez la solución más efectiva sea cambiar de patrón.Un punto a tomar en cuenta antes de empezar a realizar mejoras es atender a que el Framework es PHP puro, es decir, no contiene una interfaz gráfica que ayude al programador a generar consultas a la base de datos o a generar vistas al navegador. Es el programador quien debe realizar estas acciones a través de clases y objetos que debe ir construyendo siguiendo la estructura MVC. Es cierto que el framework ya posee una estructura bien definida para estas situaciones, pero también es cierto que permite la adaptabilidad de quien lo use según sea su necesidad.Desde el punto de vista de la lógica de la aplicación las mejoras nacen desde la necesidad de separar cada vez más los componentes necesarios para desarrollar un proyecto. Sabemos que es el Controlador quien hace la tarea principal, la lógica de la aplicación, en esta estructura y que además es el encargado de unir los demás componentes como la lógica del negocio y la interfaz de usuario. Asignarle una tarea distinta como por ejemplo la creación de reportes de los usuarios del sistema (esto puede ocurrir pues según el modelo MVC, es el usuario a través de la vista que le pide al controlador un informe de usuarios y es este quien exige los datos al modelo para generar el informe) violaría el principio de responsabilidad única en donde una clase solo debe de realizar una sola tarea. El Controlador principal del Framework realiza validaciones de datos, esta tarea debería ser implementada en otra clase, es decir abstraer esta responsabilidad a una clase ajena y que el controlador si la necesita sea capaz de generar una instancia de esta.Desde la mirada de la Vista, lo mejora más interesante seria realizar una especie de plantilla base, una clase PHP, que genere HTML. El framework genera las vistas desde plantillas, pero estas traen código PHP embebido en ellas. Lo ideal sería que el controlador llamase a una clase que haga de interprete la vista, reemplazando código PHP y convirtiendo este en salida HTML.La lógica del negocio, manejada por el Modelo, quien toma una conexión desde una clase padre llamada Database podría verse mejorada con la creación de un ORM y así ir generando de forma automática los datos exigidos por el controlador. El Framework trabaja con modelos separados, es decir que cada clase controladora tiene su par en una clase modelo que usa para ir generando los datos que se le piden. Es decir, si la clase necesita los teléfonos de los usuarios, el programador escribe un método en el modelo que extraiga los teléfonos. Desde la concepción del Framework siempre se ha visto con buenos ojos esta política, de crear funciones a medida que se necesiten, pues si pensamos en un ORM como el que usan los Frameworks más renombrados (como Laravel o CodeIgniter), o mejor aún, si pensamos en usar algún ORM como dependencia (librerías como Doctrine o Eloquent), estos implican clases que quizás nunca uses en el proyecto actual y solo aporten peso, lentitud y tiempo de aprendizaje.Actualizar el Framework a PHP 7 es una necesidad ante las claras mejoras que esta versión del lenguaje ofrece, más aún si se entiende que el Framework es PHP puro. Sobre si actualizar JavaScript o cambiar de gestor de Base de Datos, esto es solo decisión del programador pues no influye en el framework y si influye en, por ejemplo, la creación de formularios en back-end y su validación.Mejorar la documentación es un tema aparte. Documentar las clases y las librerías junto a sus métodos se deben mejorar en favor de la calidad del software. Esto ayuda a la mantención y a las futuras modificaciones de terceros.A medida que el Framework crece, según el tipo de proyecto, debería ser capaz de implementar pruebas unitarias bajo PHPUnit como dependencia. Esto último siempre será opcional y según el tipo de proyecto que se tenga enfrente. ConclusionesEn Internet se pueden encontrar decenas de tutoriales sobre como empezar un Framework y sin ir más lejos, este framework se realizó siguiendo una serie de video tutoriales allá por el a?o 2012. Desde ese tiempo el Framework ha ido madurando según las necesidades y las actualizaciones del lenguaje PHP principalmente.Escribir un Framework desde cero no es complicado, pero si te toma algo de tiempo y si estas frente a un desarrollo a corto plazo talvez no sea la mejor opción que se pueda tomar y elegir un Framework o algún CMS conocido que cumpla los requerimientos del proyecto ayudara mucho mejor.No se trata de reinventar la rueda, sino de tomar las herramientas que ya tienes para construir y mejorar, no modificar, algo que ya existe y de acuerdo a tus propias necesidades y las de cualquier proyecto presente o futuro.La POO y MVC es una excelente combinación para ir entendiendo y aplicando los conceptos vistos en este libro y la realización de un Framework sería la mejor forma de evaluar el conocimiento-Realizar un framework propio claramente te ayuda a comprender mejor el funcionamiento de los ya existentes pues como se ha visto en este libro, las materias a conocer son muchas y variadas sin embargo no te hará un conocedor de estos por razones obvias. BibliografíaAnexosAnexo A. Siglas.AJAX: Acrónimo de Asynchronous JavaScript And XMLCGI: Common Gataway Interface.CSS: Hojas de Estilo en Cascada (Cascading Style Sheets)CMS: Sistema de Administración de Contenidos (Content Management System).DAP: Desarrollo de Aplicaciones Web.DOM: Acrónimo de Document Object Model.GC: Acrónimo de Garbage Collector.HTML: Hypertext Markup Language (Lenguaje de Marcado de Hipertexto)HTTP: Hypertext Transfer Protocol (Protocolo de Transferencia de Hipertexto)LAMP: Acrónimo para Linux – Apache – MySQL – PHP.ORM: Object Relational Mapping. Mapeo Relacional de ObjetosPDO: Acrónimo recursivo de PHP Data Objects.PHP: Acrónimo recursivo de PHP Hypertext Preprocessor.PHTML: Archivo URL: Uniform Resource Locator.WAMP: Acrónimo de Windows – Apache – MySQL - PHPMVC: Modelo – Vista – Controlador (Model – View - Controller)W3C: World Wide Web Consortium.Anexo B. Sobre Frameworks y CMSSi bien el motivo final de esta tesis es desarrollar un Framework desde cero que permita el desarrollo de aplicaciones webs de forma más rápida y sencilla según requerimientos del proyecto, es necesario dar a conocer las diferentes alternativas actuales que el mercado ofrece al desarrollador para realizar cualquier tipo de proyecto web.Las alternativas básicamente pasan por tres candidatos, un desarrollo desde cero (razón de esta tesis), un Framework conocido o bien en usar un CMS (Gestor de Contenidos.B.1 Sobre los Frameworks.Algunos de los Frameworks más populares, robustos y madurados hoy en día y que, por cierto, han empezado desde cero (al menos la mayoría) son:PHP: Zend, Laravel, Symfony, Codeigniter, CakePHP, Yii.Python: DjangoRuby: Ruby On RailsJavaScript: Embed.js, Backbone.js, AngularJSVentajas de usar alguno de estos pueden ser su adaptabilidad y escalabilidad independientes del tipo de proyecto, simple o más complejo. Aportan una estructura base que se puede adaptar, a lo largo del tiempo, a los requerimientos del proyecto. Cuentan con una gran comunidad detrás de ellos.La desventaja más notoria es sin duda el hecho que hay que saber programar en el lenguaje que está realizado el Framework. Por supuesto hay que entender que algunos de estos frameworks no llevan un entorno web que facilite su implementación.B.2 Sobre los CMS.Los Sistemas de Administración de Contenidos, CMS, son un conjunto de funcionalidades que, bajo un entorno web, le permiten al desarrollador (o usuario) crear contenido web rápido y sencillo sin necesidad de saber programar.Algunos MCS que podemos encontrar son:Wordpress, Joomla.Prestashop, Magento. Para aplicaciones de eCommerceDrupal, Para portales y sitios varios.Las ventajas de estos sistemas varían principalmente en la curva de aprendizaje, algunos son muy sencillos y fáciles de usar y en otros se puede necesitar saber algo de programación. Cuentan con un buen soporte detrás en lo referente a plugins y librerío desventaja principal, debe tomarse en cuenta que son sistemas completos y que para aplicaciones web simples (de tres o cuatro secciones) habría que optimizar el sitio para una mejor carga en el navegador. ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download