1 / 40

Aplicaciones software avanzadas con Java™

Aplicaciones software avanzadas con Java™. Germán Bordel (CD4 P1.6) german.bordel@ehu.es Mikel Peñagarikano (CD4 P1.5) mikel.penagarikano@ehu.es. Requisitos:. Conocimiento del lenguaje de programación Java™. Objetivo:.

licia
Download Presentation

Aplicaciones software avanzadas con Java™

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Aplicaciones software avanzadas con Java™ Germán Bordel(CD4 P1.6) german.bordel@ehu.es Mikel Peñagarikano(CD4 P1.5) mikel.penagarikano@ehu.es

  2. Requisitos: • Conocimiento del lenguaje de programación Java™ Objetivo: • Desarrollo deAplicaciones Web basadas en Data Mining, XML y Bases de Datos. Práctica (caso de uso): • Presentación dinámica en una web de información relativa a las cotizaciones del Nasdaq

  3. Material bibliográfico • The Java™ Tutorials • http://docs.oracle.com/javase/tutorial • Java™ Platform, Standard Edition7 API Specification • http://docs.oracle.com/javase/7/docs/api

  4. Temario • IDE: El entorno de desarrollo integrado • NetBeans + JDK • La bolsa. Cotizaciones del Nasdaq • Descarga de contenido web • Expresiones Regulares • Extracción de cotizaciones • Estructuras de datos • Diseño de estructuras para almacenar cotizaciones • XML como representación de la información • Cotizaciones en formato XML

  5. Temario II • Procesamiento (parsing) de XML • Instanciación de objetos desde XML • Servidores Web • Instalación de un servidor de aplicaciones • Aplicaciones web: JSPs • Servicio dinámico de información de cotizaciones Nasdaq • Bases de Datos: MySQL • Almacenamiento de cotizaciones en una Base de Datos • Consulta web a una base de datos

  6. IDE: Entorno de desarrollo integrado • IDE: IntegratedDevelopmentEnvironment • Editor + compilador/intérprete + depurador

  7. NetBeans: http://netbeans.org

  8. Podemos instalar ambos a la vez JDK: Java Development Kit http://www.oracle.com/technetwork/java/javase/downloads

  9. La bolsa. Cotizaciones del Nasdaq • Bolsa de Valores (es.wikipedia.org): organización privada que brinda las facilidades necesarias para que sus miembros, atendiendo los mandatos de sus clientes, introduzcan órdenes y realicen negociaciones de compra y venta de valores. • acciones de sociedades o compañías anónimas, • bonos públicos y privados • Certificados • títulos de participación • ... • NASDAQ (NationalAssociation of SecuritiesDealersAutomatedQuotation): la bolsa de valores electrónica y automatizada más grande de los Estados Unidos

  10. La bolsa. Cotizaciones del Nasdaq • Bolsa de Valores (es.wikipedia.org): organización privada que brinda las facilidades necesarias para que sus miembros, atendiendo los mandatos de sus clientes, introduzcan órdenes y realicen negociaciones de compra y venta de valores. • acciones de sociedades o compañías anónimas, • bonos públicos y privados • Certificados • títulos de participación • ... • NASDAQ (NationalAssociation of SecuritiesDealersAutomatedQuotation): la bolsa de valores electrónica y automatizada más grande de los Estados Unidos • http://www.nasdaq.com/

  11. http://charting.nasdaq.com/ext/charts.dll?2-1-14-0-0-512-03NA000000GOOG-&SF:6|5-WD=530-HT=395--XTBL-http://charting.nasdaq.com/ext/charts.dll?2-1-14-0-0-512-03NA000000GOOG-&SF:6|5-WD=530-HT=395--XTBL-

  12. Aplicación Java • Compuesta por Clases (estructuras) • Campos (variables) • Métodos (funciones) • Al instanciar una clase, creamos un nuevo objeto • Los campos y métodos pueden ser • Propios de cada instancia/objeto • Estáticos (compartidos por todas las instancias) • Herencia • Si una clase extiende a otra, hereda todos sus componentes • Si no extiende nada, extiende Object • Los componentes heredados pueden ser sobreescritos • Las clases se agrupan en paquetes (librerías) • Java API: conjunto de paquetes preexistentes

  13. Proyecto de Netbeans • Permite agrupar clases en un conjunto de paquetes • Gestión de clases y paquetes • Generación de código fuente (esqueletos) • Gestión de plataforma Java (JVM) • Gestión de versión del código fuente (JDK 7) • Gestión de la clase principal (aplicación) comentarios declaración de paquete declaración de clase declaración de método

  14. ¡Hola Mundo! • Programa mínimo • Para poder utilizar una clase, debemos importarla (indicar a qué paquete pertenece), excepto: java.lang.* • System == java.lang.System • System.out • Objeto de tipo PrintStream • Contiene el método voidprintln(String x) • Muestra una cadena por la salida estándar • Ejecutar una aplicación (F6) • Se ejecuta el método main(String[] args) de la clase declarada como principal (prueba.Main)

  15. I/O Streams(java.io) • Clases que representan Flujos de entrada/salida de datos • Permiten conectar nuestra aplicación a • Dispositivos de entrada/salida • Ficheros • Aplicaciones remotas (sockets) • Estructuras de datos • Conjunto básico de Streams • InputStream/OutputStream: lectura/escritura a nivel de byte • BufferedInputStream /BufferedOutputStream : añade buffering • BufferedReader: lectura de caracteres con buffering (StringreadLine()) • PrintWriter: escritura con formato (voidprintln(…))

  16. Descarga de contenido web • La clase URL (java.net.URL) permite crear una URL a partir de su descripción textual (p. ej. , http://www.ehu.es). • El método openStream() devuelve un InputStream, de donde poder leer el contenido web (lectura de bytes). • Con el InputStream podemos crear un InputStreamReader (lectura a nivel de caracteres). • A partir del InputStreamReader podemos crear un BufferedReader (lectura por líneas)

  17. Descarga de contenido web II • Ciertos métodos pueden generar Excepciones • Podemos Atenderlas o Declararlas • Las excepciones son también clases  importarlas • Debemos cerrar todos los Streams abiertos • “try withresources” (jdk 1.7) • readLine() devuelve null cuando ya no hay más datos

  18. package prueba; importjava.io.BufferedReader; importjava.io.IOException; importjava.io.InputStreamReader; importjava.net.MalformedURLException; importjava.net.URL; publicclassMain { publicstaticvoidmain(String[] args) throwsMalformedURLException, IOException { System.out.println(getHTML("http://www.ehu.es")); } publicstaticStringgetHTML(Stringurl) throwsMalformedURLException, IOException{ StringBuildersb = new StringBuilder(); try ( BufferedReader in = new BufferedReader( new InputStreamReader( new URL(url).openStream())); ){ String s; while ((s = in.readLine()) != null) sb.append(s).append('\n'); } returnsb.toString(); } }

  19. Expresiones Regulares - Clases • Java.lang.String • matches(Stringregex) • replaceAll(Stringregex, Stringreplacement) • replaceFirst(Stringregex, Stringreplacement) • split(Stringregex) • split(Stringregex) • java.util.regex.Pattern • Pattern.compile(Stringregex) • java.util.regex.Matcher • pattern.matcher(CharSequence input)

  20. Expresiones Regulares - Ejemplos • Representa un conjunto de cadenas mediante un patrón • “hola*” representa a“hol”, “hola”, “holaa”, “holaaa”,… • “co*sa” representa a“csa”, “cosa”, “coosa”, “cooosa”,… • “hola|adiós” representa únicamente a“hola” y “adios” • “(p|m)adre” representa únicamente a “padre” y “madre” • “.*” representa a todas la posibles cadenas • Existe un conjunto de caracteres especiales: • <([{\^-=$!|]})?*+.> • Si deseamos incluirlos en las expresiones • Para incluirlos, debemos poner “\” por delante • “.*” representa a todas la posibles cadenas • “\.*” representa a “”, “.”, “..”, “...”,… • “\\” representa a “\” En java, debemos además añadir un “\” para representar “\”, por lo cual, la expresión regular que representa “\” es: “\\\\”

  21. Clases (conjuntos) de caracteres

  22. Clases predefinidas

  23. Cuantificadores

  24. Patrones de borde

  25. Captura de grupos (subsequencias) • Cualquier par de paréntesis captura una subsecuencia • El patrón ((A)(B(C))) captura 4 grupos: • 1: ((A)(B(C))) • 2: (A) • 3: (B(C)) • 4: (C) • Es posible referenciar capturas mediante “\numero” • El patrón “(\d\d)\1” representa a “1212” pero no a “1234”

  26. Extracción de patrones • Se usan las clases Patterny Matcher: Pattern p = Pattern.compile(Stringregex); Matcher m = p.matcher(CharSequence input); • La clase Matcher permite localizar subcadenas mediante expresiones regulares: while (m.find()) { System.out.println(m.group()); } • Es posible obtener los grupos capturados en la regexp m.group(int i) m.group() == m.group(0)

  27. Interfaces en Java • Una interfaz es una especie de contrato. • Es sintácticamente similar a una clase, sólo puede contener: • Constantes • Prototipos de métodos (funciones) • Nombre + tipos de los argumentos • No pueden existir dos métodos con un mismo prototipo • Tipos anidados (clases, interfaces…) • Pueden ser • Implementadas por clases • Toda clase (no abstracta) que implemente una interfaz debe contener las funciones de la interfaz (de ahí el concepto de contrato) • Una clase puede implementar tantas interfaces como desee. • Extendidas por otra interfaz • Es posible crear jerarquías de interfaces

  28. Estructuras de datos • La API de java incluye una familia de interfaces/clases diseñadas para servir de estructuras de datos genéricas: java.util.Collection • Se basa en una jerarquía de interfaces que define de manera abstracta un conjunto de estructuras de datos de uso general:

  29. Interfaz Collection public interface Collectionextends Iterable { // Basic operations intsize(); booleanisEmpty(); booleancontains(Objectelement); // optional booleanadd(Objectelement); // optional booleanremove(Objectelement); // Bulkoperations booleancontainsAll(Collection c); // optional booleanaddAll(Collection c); // optional booleanremoveAll(Collection c); // optional booleanretainAll(Collection c); // optional voidclear(); // Arrayoperations Object[] toArray(); … … }

  30. Genericos en Java • Permiten el uso de los tipos (clases e interfaces) comoparámetros al definirclases, interfaces y métodos: • Permiteminimizarerrores de programación en la compilación • No existen en tiempo de ejecución (X  Object) public Caja { Object o; publicvoid guarda(Object o){ this.o = o; } publicObject recupera(){ return o; } } …… Caja micaja = new Caja(); public Caja<X> { X o; publicvoid guarda(X o){ this.o = o; } public X recupera(){ return o; } } …… Caja<Cacharros> micaja = new Caja<>();

  31. Interfaz Collection - Generics public interface Collection<E> extends Iterable<E> { // Basic operations intsize(); booleanisEmpty(); booleancontains(Objectelement); // optional booleanadd(E element); // optional booleanremove(Objectelement); // Bulkoperations booleancontainsAll(Collection<?> c); // optional booleanaddAll(Collection<? extends E> c); // optional booleanremoveAll(Collection<?> c); // optional booleanretainAll(Collection<?> c); // optional voidclear(); // Arrayoperations Object[] toArray(); <T> T[] toArray(T[] a); … }

  32. XML (Extensible MarkupLanguage) • Lenguaje de Marcas • Forma de codificar un documento que, junto con el texto, incorpora etiquetas o marcas que contienen información adicional acerca de la estructura del texto o su presentación (p.ej.: HTML) • Estándar para el intercambio de información estructurada entre diferentes plataformas/aplicaciones. • Características: • Extensible, estructurado y legible (basado en texto) • El analizador (parser) puede ser genérico • Codificación de texto no ambigua • <?xmlversion="1.0"encoding="iso-8859-1"?> <Nombre>Mikel Peñagarikano</Nombre> <?xmlversion="1.0"encoding="UTF-8"?> <Nombre>Mikel Peñagarikano</Nombre> <?xmlversion="1.0"encoding="UTF-8"?> <俄语>данные</俄语>

  33. XML - Estructura • Prólogo (opcional) • Una declaración XML <?xmlversion="1.0" encoding="UTF-8"?> • Una declaración de tipo de documento <!DOCTYPE MiXML SYSTEM "http://midominio.org/Mi.dtd"> • Uno o más comentarios e instrucciones de procesamiento <!-- esto es un comentario --> • Cuerpo: un único elemento raíz • Elementos <ElementoSimple /> <ElementoComplejo> … </ElementoComplejo> • Atributos: características propias de los elementos <Texto tamaño="12“ estilo=="cursiva"> Mañana volveremos en coche </Texto> • Entidades: &lt; ("<"), &gt; (">"), &amp; ("&") • Comentarios • Texto: entre las etiquetas • Secciones CDATA (ignorado por el parser): <![CDATA[ … ]]>

  34. XML - Ejemplos <?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> <?xml version="1.0" encoding="UTF-8"?> <note to="Tove" from="Jani" heading="Reminder"> Don't forget me this weekend! </note> <?xml version="1.0" encoding="UTF-8"?> <note to="Tove" from="Jani" heading="Java example"> Look at my code: <![CDATA[ for (int i = 0; i < v.length(); i++) ]]> Did you like it? </note>

  35. XML – Definición de Estructura • DTD (DocumentTypeDefinition) • Tipos de elementos, listas de atributos, entidades y notaciones permitidas • XML Schema • Similar a un DTD, pero basado en XML y pudiendo especificar tipos de datos. <?xmlversion="1.0" encoding="UTF-8"?> <matricula>   <personal>     <dni>52945813C</dni>     <nombre>Ricardo Borillo Domenech</nombre>     <titulacion>Enginiería Informática (Plan 2001)</titulacion>     <curso_academico>2002/2003</curso_academico>     <domicilios>       <domicilio tipo="familiar">         <nombre>C/ Principal nº1</nombre>       </domicilio>       <domicilio tipo="habitual">         <nombre>C/ Secundaria nº2</nombre>       </domicilio>     </domicilios>   </personal>   <pago>     <tipo_matricula>Matrícula ordinária</tipo_matricula>   </pago> </matricula> 

  36. XML – DTD <?xmlversion="1.0" encoding="UTF-8"?> <!DOCTYPE matricula SYSTEM "matricula.dtd"> <matricula>   <personal>     <dni>52945813C</dni>     <nombre>Ricardo Borillo Domenech</nombre>     <titulacion>Enginiería Informática (Plan 2001)</titulacion>     <curso_academico>2002/2003</curso_academico>     <domicilios>       <domicilio tipo="familiar">         <nombre>C/ Principal nº1</nombre>       </domicilio>       <domicilio tipo="habitual">         <nombre>C/ Secundaria nº2</nombre>       </domicilio>     </domicilios>   </personal>   <pago>     <tipo_matricula>Matrícula ordinária</tipo_matricula>   </pago> </matricula>  <!ENTITY matricula (personal, pago)> <!ENTITY personal (dni, nombre titulacion, curso_academico, domicilios)> <!ENTITY dni (#PCDATA)> <!ENTITY nombre (#PCDATA)> <!ENTITY titulacion (#PCDATA)> <!ENTITY curso_academico (#PCDATA)> <!ENTITY domicilios (domicilio+)> <!ENTITY domicilio (nombre)> <!ATTLIST domicilio    tipo (familiar|habitual) #REQUIRED> <!ENTITY nombre (#PCDATA)> <!ENTITY pago (tipo_matricula)> <!ENTITY tipo_matricula (#PCDATA)> 

  37. <?xmlversion="1.0" encoding="UTF-8"?> <xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="ES"> <xs:elementname="matricula" type="tMatricula"/> <xs:complexTypename="tMatricula"> <xs:sequence> <xs:elementname="personal" type="tPersonal"/> <xs:elementname="pago" type="tPago"/> </xs:sequence> </xs:complexType> <xs:complexTypename="tPersonal"> <xs:all> <xs:elementname="dni" type="xs:string"/> <xs:elementname="nombre" type="xs:string"/> <xs:elementname="titulacion" type="xs:string"/> <xs:elementname="curso_academico" type="xs:string"/> <xs:elementname="domicilios" type="tDomicilio"/> </xs:all> </xs:complexType> <xs:complexTypename="tPago"> <xs:all> <xs:elementname="tipo_matricula" type="xs:string"/> </xs:all> </xs:complexType> <xs:complexTypename="tDomicilio"> <xs:sequence> <xs:elementname="domiclio" maxOccurs="unbounded"> <xs:complexType> <xs:all> <xs:elementname="nombre" type="xs:string"/> </xs:all> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:schema> XML – XSD <?xmlversion="1.0" encoding="UTF-8"?> <matricula xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="prueba.xsd"> <matricula>   <personal>     <dni>52945813C</dni>     <nombre>Ricardo Borillo Domenech</nombre>     <titulacion>Enginiería Informática (Plan 2001)</titulacion>     <curso_academico>2002/2003</curso_academico>     <domicilios>       <domicilio tipo="familiar">         <nombre>C/ Principal nº1</nombre>       </domicilio>       <domicilio tipo="habitual">         <nombre>C/ Secundaria nº2</nombre>       </domicilio>     </domicilios>   </personal>   <pago>     <tipo_matricula>Matrícula ordinária</tipo_matricula>   </pago> </matricula> 

  38. XML – Analizador (parser) • Framework programable para procesar XML • Dos APIs estándares: • SAX (Simple API for XML) • Procesamiento secuencial • Eficiente (tiempo y memoria), pero difícil de manipular • Implementamos los manejadores de eventos • DOM (DocumentObjectModel) • Se carga el XML dentro de un único objeto y posteriormente se procesa el objeto • No eficiente, pero sencill0 • Extraemos la información del objeto

  39. XML – SAX & DOM SAXParserFactory SAXParser SAXReader DefaultHandler ContentHandlerMethods ErrorHandlerMethods DTDHandler EntityResolver Document Node Element

More Related