Full Transcript

Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 23 numero = Integer.parseInt( strNumero ); } catch ( NumberFormatException ex ) { throw ex; } } • Bloque finally : este bloque es opcional pero si se incluye, sus s entencias se ejecutan siempre...

Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 23 numero = Integer.parseInt( strNumero ); } catch ( NumberFormatException ex ) { throw ex; } } • Bloque finally : este bloque es opcional pero si se incluye, sus s entencias se ejecutan siempre independientemente de si ha habido error o no, y del tipo del error. try { // Sentencias para controlar errores } catch (ExceptionClass1 ex1) { // Sentencias para tratar la excepción 1 } catch (ExceptionClass2 ex2) { // Sentencias para tratar la excepción 2 } catch (ExceptionClass3 ex3) { // Sentencias para tratar la excepción 3 } finally { // Sentencias que se ejecutan SIEMPRE } Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 24 TEMARIO OPOSICIONES COIICV | TEMA 29 2.2.7. E/S en Java La forma que tiene Java para manejar los flujos de entrada y salida de datos a los programas es mediante los streams (flujos de datos). Podemos definir un stream como una conexión entre el programa y la fuente de datos. P. e. cuando se quiere escribir en un fichero se ha ce a través de un stream , se utiliza este canal tanto para leer como para escribir. Este mecanismo se utiliza de manera similar sea cual sea la fuente de datos: ficheros, sockets, pantalla, tecla do,… Las clases que se utlizan para la entrada de datos están contenidas en el paquete java.io . Estas clases pueden dividirse en clases para la lectura d e datos y clases para la salida de datos, y dentro de estas, clases que trabajan con bytes y clases qu e trabajan con caracteres. La nomenclatura de las clases del paquete java.io e stá sistematizada, de manera que permite deducir la función de la clase a partir de su nombr e. Tabla V: Nomenclatura de java.io InputStream, OutoputStream Lectura/Escritura de byt es. Reader, Writer Lectura/Escritura de caracteres. File Ficheros String, CharArray, ByteArray, StringBuffer Tipo de dato a leer. Piped Pipe (tubo de datos). Buffered Buffer de datos. Print Imprimir. De esta manera, se puede deducir la función de esta s clases: FileReader , FileWriter , FileInputStream , FileOutputStream , StringReader , StringWriter , etc… La E/S de datos estándar por teclado y pantalla se realiza mediante la clase System que pertence al paquete java.lang . Esta clase tiene tres objetos principales para ma nejar la E/S: • System.in : Objeto de la clase InputStream para recibir datos del dispositivo por defecto (teclado). Se utiliza el método read(). • System.out : Objeto de la clase PrintStream para escribir en el dispositivo por defecto (pantalla). Se utilizan los métodos print() y println() . • System.err : Objeto de la clase PrintStream para escribir mensajes de error en el dispositivo por defecto (pantalla). Se utilizan los métodos print() y println() . Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 25 Se puede modificar el dispositivo de entrada y sali da por defecto con los métodos setIn() , setOut() y setErr() . 2.2.8. Hilos (Threads) En la actualidad, los procesadores y los sistemas o perativos permiten le ejecución simultanea de varios programas, esto es lo que se conoce como mul titarea. Los procesadores que disponen de más de una CPU realizan multitarea “real”, mientras los que tienen una única CPU utilizan los tiempos muertos de unos procesos (p. e. lectura/esc ritura de ficheros) para ejecutar otros procesos y “simular” la multitarea. Algunos conceptos básicos sobre multitarea: • Proceso: programa que se ejecuta de manera independ iente con su propio espacio de memoria. • Hilo (thread): es un flujo secuencial de instruccio nes dentro de un proceso. P. e. un editor de textos es un proceso, y cada uno de los documentos que estamos editando sería un hilo de ejecución. Figura 4: Un programa con un hilo (A) y un programa con dos hilos (B) En Java existen dos formas de crear hilos. La prime ra consiste en crear una clase que herede de la clase Thread y redefina el método run(). public class miThread extends Thread { // El construcctor llama al de la clase Thread Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 26 TEMARIO OPOSICIONES COIICV | TEMA 29 public miThread ( String str ) { super ( str ); } // Redefinción del método run() public void run () { System.out.println ( “Este es el hilo: “ + getNam e() ); } } miThread objetoThread = new miThread(“HiloDePrueba” ); objetoThread.start(); La segunda consiste en la definición de una clase q ue derive de la Interfaz Runnable y que implemente el método run() ; a continuación se crea un objeto de esta clase ( objetoRunnable ) y otro objeto de la clase Thread ( objetoThread ) pasándole al constructor el objetoRunnable . public class miRunnable implements Runnable { // Variable con el nombre del hilo String nombreThread; // Constructor public miRunnable ( String str ) { nombreThread = str; } // Definición del método run() public void run() { System.out.println ( “Este es el hilo: “ + nombre Thread); } } miRunnable objetoRunnable = new miRunnable(“HiloDeP rueba”); Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 27 Thread objetoThread = new Thread(objetoRunnable); objetoThread.start(); 2.2.9. Herramientas de Java El entorno de desarrollo Java (JDK) proporciona una sería de herramientas para facilitar la creación de aplicaciones. Las herramientas básicas son: • javac: compila los ficheros fuente ( .java) que se le pasan como parámetro. Genera tantos ficheros en bytecodes ( .class) como clases tenga el fichero fuente. • java: interprete de los ficheros de bytecodes ( .class). Ejecuta los ficheros que se le pasan como parámetro. • jdb: depurador de línea de comandos. Se utiliza par a encontrar y corregir errores. • javah: genera ficheros cabeceras en formato C para comunicar aplicaciones en Java con aplicaciones programadas en C. • javap: desensamblador que a partir de ficheros en bytecodes ( .class) muestra información sobre dicha clase (atributos y métodos) . • javadoc: generador de documentación. A partir de lo s comentarios de los ficheros de fuentes genera documentación de las clases en forma to html. 2.3. Principales frameworks Un framework (entorno de trabajo) para aplicaciones web es un conjunto de herramientas, librerías y estilo de programación que facilita y hace compre nsible para otros programadores el desarrollo de aplicaciones. Las ventajas de utilizar un framework son: • Evitar la programación de funciones y tareas repeti tivas que aparecen en todos los proyectos (conexión a base de datos, envío de mails , gestión de errores, …). • Minimizar el riesgo de aparición de errores al util izar unas rutinas que han sido ampliamente probadas. • Ordenar el proyecto creando una estructura de la ap licación concreta. • Sistematizar la nomenclatura de la aplicación. También el uso de un framework implica algunos inco nvenientes: Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 28 TEMARIO OPOSICIONES COIICV | TEMA 29 • Tiempo de aprendizaje de aprendizaje. Algunos frame works requieren invertir mucho tiempo de aprendizaje. • El proceso de configuración de la aplicación puede ser complejo. • Complejidad del código escrito por terceros. En cada proyecto se debe valorar la necesidad o no de utilizar un framework. 2.3.1. Spring Spring fue desarrollado inicialmente por Rod Johnso n quien lo liberó en 2.002 junto a la publicación de su libro Expert One-on-One J2EE Design and Development . Actualmente es desarrollado por SpringSource. El framework incluye diversos módulos, siendo los p rincipales: • Contenedor de inversión de control: administra el c iclo de vida de los objetos Java, principalmente a través de la inyección de dependen cias. • Acceso a datos: permite el acceso a datos mediante el uso de JDBC y ORM. • Modelo-Vista-Controlador: implementa el patrón MVC basado en HTTP y servlets. • Acceso remoto: permite la importación y exportación , al estilo de RPC, de objetos Java. • Autenticación: incorpora procesos de seguridad conf igurables para la autenticación de usuarios. 3. PHP 3.1. Introducción PHP (Hipertext Preprocessor) es un lenguaje interpr etado (2) de propósito general. Su sintaxis es similar a C, Java y Perl. Al ser de propósito general puede ser utilizado par a: • Programación web: Este es su uso principal. El inte rprete de PHP se ejecuta en un servidor web y se generan páginas web dinámicas. • Programación en consola: Se crean aplicaciones de c onsola. Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 29 • Programación de interfaces gráficas: Usando la exte nsión PHP-GTK se pueden programar aplicaciones con interface gráfica. 3.2. Historia PHP fue creado por Rasmus Lerdorf en 1994 como un c onjunto de herramientas para sustituir a los scripts de Perl que utilizaba Rasmus para su página web personal. En 1995 se lanzó la primera versión de PHP para el público en general (PHP v2). En 1997 Zeev Suraski y Andi Gutmans, reescribieron la mayor parte del núcleo de PHP y lanzaron, junto con Rasmus, la versión 3. Zeev y Andi fundaron Zend Technologies y continuaro n con la mejora del núcleo de PHP para en el año 2000 lanzar la versión 4. En 2004 se publica la versión 5 de PHP que ya inclu ye soporte completo para la programación orientada a objetos. También se incluyeron caracter ísticas importantes como una capa de abstracción para el acceso a base de datos (PDO - P HP Data Objects), tratamiento de excepciones y mejoras en el tratamiento de XML. Est a versión supuso un punto de ruptura con la versión 4, ya que prácticamente los programas desar rollados con PHP 4 eran incompatibles con la nueva versión PHP 5. En 2008 se dejó de dar soporte a la versión PHP 4. El desarrollo de PHP continuó y en 2009 se lanzó la versión 5.3 con importantes características como los espacios de nombres y funciones anónimas. En 2012 se publicó PHP 5.4, en 2013 la versión 5.5 y en 2014 PHP 5.6. La versión actual es PHP 7 que se lanzó en noviembr e de 2015 3.3. Características principales El uso principal de PHP es de programación web. Es un lenguaje del lado del servidor (es el servidor web el que ejecuta el interprete) que pued e ser embebido en las páginas HTML de una web. Un ejemplo sencillo. El fichero index.php contiene el siguiente código PHP embebido en códig o HTML. <!DOCTYPE html> Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 30 TEMARIO OPOSICIONES COIICV | TEMA 29 Hola mundo PHP El cliente solicita al servidor a través de Interne t la página index.php . El servidor detecta que esta página debe ser preprocesada antes de enviarla e invoca al intérprete de PHP para que la procese y genere la página index.html que se devuelve al cliente. Figura 5: Esquema de ejecución de un script PHP El código HTML que recibe el cliente es el siguient e: <!DOCTYPE html> Hola mundo PHP Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 31 Hola mundo! 3.3.1. Delimitadores y comentarios Como se puede apreciar en el ejemplo anterior, el c ódigo PHP embebido en páginas HTML está escrito entre los delimitadores . Estos delimitadores son los más comunes, pero exi sten otros: <? … ?> ... <?= … ?> Delimitador de expresiones en línea. P. e. <?= 2+2 ?> Los comentarios en PHP son similares a los de C++ o Java. Comentarios de una sola línea ( // o #) y comentarios de más de una línea ( /* … */ ). 3.3.2. Variables En PHP no es necesario declarar una variable antes de usarla, se creará simplemente la primera vez que se asignemos un valor. El nombre de las var iables (identificadores) deben cumplir las siguientes reglas: • Deben empezar por $. • Pueden tener cualquier longitud e incluir letras, n úmero y guiones bajos. • En los nombres de variables se distingue entre mayú sculas y minúsculas. • Un variable puede tener el mismo nombre que una fun ción. Respecto a los tipos de datos, PHP es un lenguaje d ébilmente tipado, es decir, no controla los tipos de datos de las variables que se declaran. El tipo de dato de una variable dependerá en cada momento del valor que tenga asignado. $num_productos = 10; // La variable se declara de t ipo entero Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 32 TEMARIO OPOSICIONES COIICV | TEMA 29 $num_productos = 11.0; // La variable pasa a ser de tipo doble Los tipos de datos admitidos en PHP son: entero, fl otante o doble, cadena, booleano, array o conjunto de datos y objeto. Una particularidad de PHP es que se permite el uso del tipo “variable”. Esto lo veremos mejor con un ejemplo: $nombre_variable = ‘num_productos’; $$nombre_variable = 5; // Equivale a $num_productos = 5 En cuanto a la visibilidad o ámbito de las variable s, las podemos clasificar en: • Locales: su ámbito es el de la función en la que se crean. • Globales: su visibilidad es en cualquier parte del código excepto en el interior de una función. • Superglobales: variables que se pueden utilizar en cualquier script de la aplicación. Algunas de estas variables creadas por PHP son $GLOBALS , $_GET, $_POST y $_SESSION . 3.3.3. Operadores Los operadores en PHP son muy similares a los de ot ros lenguajes de programación. Pueden clasificarse en los siguientes tipos: • Asignación: permite asignar un valor a una variable (=). $x = 34; • Aritméticos: realizan las operaciones habituales de suma (+), resta (-), multiplicación (), división (/), resto de la división (%) y exponente () $y = $x * 4; Se pueden utilizar junto con el operador de asignac ión: +=, -=. =, /= y %= $x = 4; // $x = $x * 4; • Unarios: se utilizan para mantener cambiar el signo de una variable: + (mantener) y - (cambiar). y = −x; // $y = $x * (-1); Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 33 • instanceof: permita conocer si un objeto es de una clase. $b = $x instanceof String; • Condicional ?: funciona igual que en C++. Permite a signar valores condicionalmente. $x = 1; $y = 2; z = (x > $y) ? 10 : 20; // $z = 2 0 • Incrementales: Incrementan (++) o decrementan (–) el valor de la variable a la que preceden o siguen. $x++; // $x = $x + 1; • Relacionales: Se utilizan para realizar comparacion es entre valores de las variables. Mayor que (>), mayor o igual que (>=), menor que (<), men or o igual que (<=), igual (==) y distinto (!=). En PHP existen dos operadores especiales, de identi dad, que además de comparar el valor verifican que el tipo de dato sea el mismo en los d os elementos. Se suelen emplear en las sentencias de control (ver punto 4.3.4). if ( $x >= 10 ) $y = 20; • Lógicos: AND (&& o and), OR (|| o or), negación (!) y OR-exclusiva (xor). if ( $a >= 10 && $y >= 20) $z = 30; • De bit: actúan a nivel de bits. Desplazamiento a la derecha (>>), desplazamiento a la izquierda (<<), AND a nivel de bits (&), OR a nivel de bits (|), XOR a nivel de bits (^), complemento a nivel de bits (~). $x = 12; $y = $x >> 2; // $y = 3; • De cadena: Concatenador de cadenas (.). $a = ‘Hola’; $b = ‘Mundo!’; $c = $a . ‘ ‘ . $b; // $c = ‘Hola Mundo!’ Al igual que los aritméticos se pueden usar junto c on el operador de asignación. $a = ‘Hola’; $a .= ‘ Mundo!’; // $a = ‘Hola Mundo!’ La siguiente tabla muestra la precedencia de las op eraciones en PHP (de mayor a menor). Cuando dos operadores tienen la misma precedencia, su asoc iatividad decide como se agrupan. Los operadores de igual precedencia que no son asociati vos no pueden usarse unos junto a otros. Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Antonio Campos Serna 34 TEMARIO OPOSICIONES COIICV | TEMA 29 Tabla VI: Precedencia de operadores (3) Asociatividad Operadores no asociativo clone new izquierda [ derecha derecha ++ – ~ (int) (float) (string) (array) (obj ect) (bool) @ no asociativo instanceof derecha ! izquierda / % izquierda + - . izquierda << >> no asociativo < <= > >= no asociativo == != === !== <> <=> izquierda & izquierda ^ izquierda | izquierda && izquierda || derecha ?? izquierda ? : derecha = += -= *= **= /= .= %= &= |= ^= <<= >>= izquierda and izquierda xor izquierda or 3.3.4. Sentencias de control Las sentencias en PHP deben terminar con un punto y coma (;) y se permite tener varias sentencias en la misma línea. En este aspecto es ig ual que en C++ o Java. Al igual que en otros lenguajes de programación, la s sentencias de control permiten modificar el flujo lineal de los programas. Se clasifican en dos tipos: bifurcaciones y bucles. 3.3.4.1. Bifurcaciones En función del valor de una expresión lógica o rela cional se ejecuta un flujo de sentencias u otro. • if … else: Con esta sentencia se selecciona un conj unto de instrucciones a ejecutar. if ( expresión ) { sentencias_A; Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019Tecnologías para el desarrollo de aplicaciones. MS. NET, JAVA y PHP TEMARIO OPOSICIONES COIICV | TEMA 29 35 } else { sentencias_B; } Si el valor de la expresión se evalúa como verdadero ( true) se ejecuta el conjunto de sentencias_A , si se evalúa como falso ( false) se ejecuta el conjunto de sentencias_B . Este tipo de bifurcaciones pueden anidarse y concat enarse. // Anidamiento if ( expresión_1) { if ( expresión_2 ) { … } } // Concatenación if ( expresión_1 ) { … } elseif ( expresión_2 ) { … } else { … } Cuando el código PHP se ejecuta embebido en una pág ina HTML, existe una sintaxis alternativa: Se autoriza el uso exclusivo de este documento a María Amparo Pavía García, DNI 20013968N, a 26 de julio de 2019