Php + gwt - forja de RedIRIS

Anuncio
PHP
Php Es un lenguaje dde programción integrado sdiseñado originalmente para la creación de páginas
web dinámicas.
Php es unacrónimo recursivo que significa Php Hipertext Pre-processor (inicialmente PHP Tools, o,
Personal Home Page Tools). Fue creado originalmente por Rasmus Lerdorf en 1994; sin embargo la
implementación principal de PHP es producida ahora por The PHP Group y sirve como el estándar
de facto para PHP al no haber una especificación formal. Publicado bajo la PHP License, la Free
Software Foundation considera esta licencia como software libre.
La baza para implantarse en le mercado es el gran parecido con otros lenguajes como C o Perl que
permiten a los progrmadores crear aplicaciones rápidamente con una curva de aprendizaje muy
baja.
El funcionamiento de php es el siguiente: Cuando el cliente hace una petición al servidor para que
le envíe una página web, el servidor ejecuta el intérprete de PHP. Éste procesa el script solicitado
que generará el contenido de manera dinámica (por ejemplo obteniendo información de una base de
datos). El resultado es enviado por el intérprete al servidor, quien a su vez se lo envía al cliente.
Mediante extensiones es también posible la generación de archivos PDF, Flash, así como imágenes
en diferentes formatos. Php es una alternativa a Java fácil de aprender.
El motor que permite el funcionamiento de php es Zend Engine. Actualmente php se encuentra en
su versión php5 y el motor que lo implementa es Zend Engine 2.0.
Las ventajas de php son las siguientes:
Es un lenguaje multiplataforma.
 Completamente orientado al desarrollo de aplicaciones web dinámicas con acceso a
información almacenada en una Base de Datos.
 El código fuente escrito en PHP es invisible al navegador y al cliente ya que es el servidor el
que se encarga de ejecutar el código y enviar su resultado HTML al navegador. Esto hace
que la programación en PHP sea segura y confiable.
 Capacidad de conexión con la mayoría de los motores de base de datos que se utilizan en la
actualidad, destaca su conectividad con MySQL y PostgreSQL.
 Capacidad de expandir su potencial utilizando la enorme cantidad de módulos (llamados
ext's o extensiones).
 Posee una amplia documentación en su página oficial, entre la cual se destaca que todas las
funciones del sistema están explicadas y ejemplificadas en un único archivo de ayuda.
 Es libre, por lo que se presenta como una alternativa de fácil acceso para todos.
 Permite aplicar técnicas de programación orientada a objetos.
 Biblioteca nativa de funciones sumamente amplia e incluida.
 No requiere definición de tipos de variables aunque sus variables se pueden evaluar también
por el tipo que estén manejando en tiempo de ejecución.
 Tiene manejo de excepciones (desde PHP5).
 php tiene soporte para la mayoría de los servidores. Una de sus mayores características es el
soporte que da a numerosas bases de datos: Adabas D, dBase, Empress, FilePro (read-only)
Hyperwave, IBM DB2, Informix, Ingres, InterBase, FrontBase, mSQL, Direct MS-SQL,
MySQL, ODBC, Oracle (OCI7 and OCI8), Ovrimos, PostgreSQL, SQLite, Solid, Sybase,
Velocis, Unix dbm.
Actualmente php tiene tres áreas de acción:
 Script cliente-servidor: Es el uso principal y tradicional. Hacen falta 3 cosas para hacer una
aplicación de este tipo: el PHP parser (En el módulo del servidor), un servidor web y un
navegador web capaz de reconocer php. La salida que genera un programa php puede verse
en el navegador.
 Escribir script para linea de comandos: Se puede hacer un script php para que ande sin un
servidor o un navegador. Solo hace falta el php parse para ello. Estos scripts son muy ideales
para ejecutarlos regularmente en consolas (unix o windows)
 Escribir aplicaciones de escritorio: Quizás no sea el mejor lenguaje para escribir
aplicaciones de escritorio con una interfaz gráfica pero aquellos programadores expertos en
php pueden usar algunas de sus características para crear aplicaciones escritorio usando hpgtk.
No hemos encontrado documentación alguna sobre los posibles módulos que forman php ni en la
documentación oficial ni en la informal sin embargo nos parece interesante dedicar un pequeño
espacio al motor Zend Engine “Cerebro y alma de php” (Según sus propios creadores)
Zend engine 2.0 es el motor que se encuentra detás de las versiones php 4 y php 5. Este motor
provee las características y servicios de los módulos de funciones además de iplementar la sintaxis
del lenguaje.
Zend Engine comenzó en su versión 1.0 siendo el motor de php 3.0 (una versión mas antigua Zend
engine 0.5) era el motor en versiones aún mas anteriores.
En un principio Zend Engine 1.0 el diseño del modelado eran onstancias de objetos con valores.
Esto significaba que cuando los programadores querían desarrollar aplicaciones tales como
asignación de variables y paso de parámetros a funciones los objetos se manipulaban de la misma
forma que otros tipos primitivos como String e Integer. Semánticamente eso significa que todo el
objeto se tiene que copiar. Un aproximamiento a Java obligaba a comenzar a usar referencias en vez
del objeto entero.
Sin embargo, este aproximamiento era imposible con la tecnología actual de Zend Engine 1.0 en su
implementación del modelado de objetos. Uno de los principales problemas es que esa
instanciación y duplicación es muy complicada de controlar. Cambiar ese modelado de objetos
hacía necesario una nueva reimplementación de Zend Engine (Su versión 2.0).
El modelo propuesto en la nueva versión es mucho mas perecido al modelo de java. En genreal,
cuando se crea un objeto el programador obtiene un manipulador que controla el propio objeto y su
instancia. Cuando este manipulador se envía en una función solo el manipulador se envía o se
copia. Nunca el objeto en sí. El resultado es que todos los manipuladores de un mismo objeto
apuntan a ese objeto constituyendo esta una solución consistente y evitando duplicaciones
innecesarias.
Cambios relacionados con el muevo modelado de objetos:
Los parones de diseño basados en objetos como el patrón Factory son cada vez mas y mas
populares y para implementar esos patrones hace falta una buena API orientada a objetos que
facilite interrelacionar unos objetos con otros. Esta mejora (poder pasar en funciones referencias a
objetos) es una clara mejora del nuevo manipulador (handled) Que hace posible pasar un nuevo
objeto como parámetro de una funcion sin muchas consideraciones.
La funcionalidad que da este nuevo modelo es la posibilidad de devolver objetos en funciones de la
misma forma que se devuelven lo tipos primitivos. El objeto devuelto siempre se referirá a un
específico objeto que se ha instanciado sin ningún tipo de copia "detras de las camaras".
Eliminación de referencias de objetos de apoyo:
Muchos desarrolladores PHP se han mostrados interesados ante la posibilidad de poder devolver
referencias a un objeto en las funciones. Con el anterior modelo se podía hacer pero pasando por
varias variables intermedias mientras que ahora se puede hacer directamente:
En Zend Engine 1.0
$tmp =& $object->method();
$tmp =& $tmp->method();
$tmp->method();
En Zend Engine 2.0
$object->method()->method()->method()
El nuevo modelo permite llamar varios métodos en cadena pasándoles simplemente una referencia
este metodo devuelve un manipulador que a su veza es la entrada de otra función,. En java se
permite hacer lo mismo.
Clonado de objetos:
Sin embargo, aunque se puede clonar objetos, a veces es necesario duplicar un objeto aunque no
queremos duplicar todos sus atributos y carácterísticas. Pr ejemplo si tenemos un objeto GTK
windows y un objeto que cuelga de él si creamos un duplicado del objeto tu puedes querer crear una
nueva ventana con las mismas proppiedades y tener un nuevo objeto colgando de esa nueva
ventana.
Cuando los desarrolladores preguntan para crear una nueva copia de un objeto Zend Engine checkea
si el método __clone() está definido o no. Si no se ha creado usa el método __clone() que
implementa por defecto que copiaqrá todas las características del objeto. Si el método está definido
este será el responsable de ver que características se clonan y de que forma.
Destructores:
hoy por hoy no existen mecanismos de destrucción de objetos aunque php tiene soporte para
funciones que permiten el cierre de solicitudes. La solución de Zend Engine es la misma que en la
mayoría de lenguajes orientados a objetos. Cuando la última referencia a un objeto es destruida se
llama al destructor y este borra el objeto de memoria. El usuario, tal y como ocurría con el método
__clone() puede definir su propio método __destruct().
Destrucción de objetos aún referenciados:
Con el anterior modelo de objetos no era posible destruir un objeto is este aún tenía características
asociadas a él. Sin embargo, puede no ser el caso y el programador podría querer eliminar el objeto
a pesar de todo por ejemplo si tenemos un objeto y lo ponemos a nulo $obj = null y este objeto tenía
colgando una referencia a otro objeto ese objeto sigue instanciado pero quizás sea recomentable
eliminarlo a poner a null el objeto del que cuelga eso obligaría a Zend Engine a destruir el objeto a
pesar de aún haber referencias a él. Esta característica la implementa el metodo __delete().
Aunque no se sabía si iba a implementarlo al final los desarrolladores decidieron implementar la
posibilidad de herencia múltiple en Zend Engine 2.0 con lo cual php puede soportar este tipo de
herencia. Lo mismo para la posiblilidad de definir variables privadas, excepciones, sobrecarga y
acceso a elementos de un String.
GWT
Como php es un lenguaje de lado servidor se hace necesario combinarlo con alguna tecnología que
proporciona alguna vista si no se quiere usar ajax puro en la aplicación. Una buena opción es usar
GWT (Google WebTool Kit)
Creado por google en 2006 este framework permite ocultar la complejidad de varios aspectos de la
tecnología ajax. Es compatible ocn varios navegadores y bastante sencillo. Básicamente lo que hace
es crear código Java usando cualquier IDE (como eclipse) y el compilador lo transforma todo en
html y javascript.
Con esta biblioteca los desarrolladores pueden desarrollar aplicaciones java con código ajax.
Cuando la aplicación se desplieda es cuando se hace la traducción a html y javascript. GWT puede
ser ejecutada de dos formas distintas: Modo host y modo web.
En el modo host La aplicación se ejecuta como código bytecode de Java dentro de la Máquina
Virtual de Java (JVM). Este modo es el más usado para desarrollo, soportando el cambio de código
en caliente y el depurado. Modo web (Web mode): La aplicación se ejecuta como código Javascript
y HTML puro, compilado a partir del código Java. Este modo se suele usar para el despliegue de la
aplicación
GWT se compone de 4 módulos en su arquitectura:
 GWT Java-to-JavaScript Compiler: la función de este componente es traducir el código
desarrollado en Java al lenguaje JavaScript. Lo empleamos cuando usamos al GWT en
modo web.
 Hosted Web Browser: este componente ejecuta la aplicación Java sin traducirla a
JavaScript, en modo host usando la máquina virtual de Java.
 JRE Emulation Library: contiene las bibliotecas más importantes de las clases de Java:
java.lang en donde se encuentran las clases fundamentales para poder programar en Java y
un subconjunto de las clases del paquete java.util. Java.lang incluye, entre otras, la clase
java.lang.object que es la clase fundamental de la que heredan o extienden todas las clases
en Java. El resto de los paquetes no están soportados por GWT.
 GWT Web UI Class Library: contiene un conjunto de elementos de interfaz de usuario que
permite la creación de objetos tales como textos, cajas de texto, imágenes y botones.
Las características de GWT son:
Componentes de la interfaz de usuario dinámicos y re-utilizables
Crea un Widget para construir otros. Coloca los Widgets automáticamente en Paneles. Envía tus
Widget a otros desarrolladores en archivos JAR.
RPC realmente fácil
Para comunicarte desde el navegador que lanza tu aplicación con tu servidor web, solamente
necesitas definir clases de Java serializables para las peticiones y respuestas. En producción, GWT
serializa automáticamente las peticiones delnavegador y de-serializa las repuestas desde el servidor
web . El mecanismo de RPC de GWT puede incluso manejar jerarquía de polimorfismo en clases, y
puedes manejar las posibles excepciones.
Administración del historial del navegador
Las aplicaciones en AJAX no necesitan utilizar el botón “atrás” (back) del navegador. Y GWT no es
la excepción, es decir, no es necesario que llames a otras páginas para realizar las diferentes
acciones, ni recargar elnavegador ni nada.
Depuración en tiempo real
Para cuando tu aplicación esté lista, el código de la misma es traducido a JavaScript, pero mientras
lo estás desarrollando este corre sobre una Java virtual machina (JVM). Lo que significa que en la
fase de Desarrollo tienes la posibilidad de depurar tu aplicación con los avanzados sistemas de
debugging y manipulación de excepciones incluidos en IDEs como Eclipse.
Compatibilidad con los navegadores
Tus aplicaciones en GWT serán automáticamente soportadas por navegadores como FireFox,
Internet Explorer, Mozilla, Safari, y Opera sin ningún tipo de operación para la detección de los
mismos, en la mayoría de los casos.
Integración con Junit
Mediante la integración de JUnit en GWT tu puedes probar tus aplicaciones y depurarlas en un
navegador mientras las construyes...incluso, puedes testear llamadas asíncronas a procedimientos
remotos RPC.
Internacionalización
Crea aplicaciones y librerías de Internacionalización rápida y fácilmente.
Interoperability and fine-grained control
Si las librerías de clases de GWT no son suficientes para lo que necesitas, puedes mezclar
JavaScript en el código de tu aplicación usando la interfaz nativa de scripts de Java (JavaScript
Native Interface, JSNI).
GWT es un proyecto de código abierto
Todo el código de GWT está disponible bajo la licencia Apache 2.0.
Además como se basa en tecnología java se puede usar cualqueir IDE que desarrolle en java (por
ejemplo eclipse) para implementarlo. Los errores mas comunes de javaScript son facilmente
detectables mientras se desarrolla la aplicación y no cuando el usuario final lo está ejecutando. Por
último, Los diseños en Java basados en la programación orientada a objetos es fácil de comunicar y
entender, por ende hace la base de tu código AJAX más comprensible con menos documentación.
Como php no es java para integrar las dos tecnologías es necesario un script php llamado json.
(Detalle: En el momento de la investigación inicial no lo encontramos pero recientemente
encontramos un framework llamado Gwtphp que integra ambas tecnologías, sin embargo dado que
finalmente decidimos dejar php para usar java no indagamos mas en este framework)
Sin embargo, tuvimos que desistir de usar esa combinación de tecnologías. Primero, como decíamos
en el último párrafo php no se integra de forma natural con gwt ya que gwt usa tecnología java y
php es otro lenguaje. Para integrarlos hacía falta un “parche” que era el script json. Sin embargo
apenas hay documentación sobre gwt (a parte de la oficial) y menos aún integrándolo con php. Al
final, tuvimos que desistir y en un intento por continuar con php decidimos usar ajax de la cual
había documentación de sobra.
Sin embargo, al final php también cayó por su propio peso. La razón fue que no facilitaba la
implementación del modelo MVC al contrario que otras tecnologías como Spring o Struts.
PHP también salía perdiendo si lo comparábamos con Java. Programar con Java se hace mucho mas
cómodo que programar con php ya que toda la api de java (y es mucho decir TODA la api de java)
está a disposición del programador si decide usar este lenguaje. Php tiene también una api muy
buena pero no se puede comparar con la api de java aunque va mejorando rápidamente.
Otro interesante motivo fue el hecho de que si queríamos aprovecharnos de las ventajas de un
framework (y pronto quisimos aprovecharnos de estas ventajas pues programar toda la aplicación a
pelo se hacía cansado y poco eficiente) lo mas actuales implementan tecnología Java como Struts (1
y 2) y Spring. Usar un framework actual permite implementar en el modelo MVC casi de forma
natural además que ahorra lineas de código automatizando muchos procesos que se usan
habitualmente.
El último motivo fue de comodidad. Estábamos mas familiarizados con el lenguaje JAVA que con
php. La curva de aprendizaje de php es muy pequeña pero la de java a estas alturas para nosotras era
prácticamente inexistente.
Documentos relacionados
Descargar