1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

81
1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API

Transcript of 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

Page 1: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

1

Introducción al lenguaje Java

Características

POO

Estructura básica de una aplicación

API

Page 2: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

2

Objetivos

• Presentar las caracteristicas y ámbito de aplicación de Java

• Desarrollar las ideas fundamentales (soporte OO, estructura de los programas, máquina virtual, sintáxis básica,...)

• Detallar el soporte para Programación Orientada a Objetos de Java

• Presentar el conjunto de bibliotecas básico (API)• Proporcionar una base sólida para profundizar

posteriormente en aspectos concretos

Page 3: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

3

Caracteristicas de Java

¿Porqué Java?Caracteristicas básicas

UtilidadEvolución

Compilación y ejecución

Page 4: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

4

¿Porqué Java?

• Mejoras hardware, software, uso de la red -> nuevas posibilidades y nuevas aplicaciones (más complejas)

• Java se adapta bien a las nuevas aplicaciones (portabilidad, soporte POO, seguridad, control de la complejidad, etc.)– El concepto de ‘máquina virtual java (MVJ) proporciona

seguridad y portabilidad– Dispone de una vasta biblioteca– Mejora la productividad de los desarrolladores

• Java = lenguaje + MVJ + API

Page 5: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

5

Java es Orientado a Objetos

• Java es Orientado a Objetos (OO) en sentido estricto (únicamente soporta programación procedural para dar código a las clases)

• OO = extensión del lenguaje con nuevos tipos de datos• Clase = tipo de datos definido por el programador• Objeto = variable (instancia) de una clase• Java proporciona mecanismos para definir nuevas clases y

objetos• Aplicación Java = conjunto de objetos interactuando en una

MVJ• Filosofía -> extensión del lenguaje hacia el dominio del

problema, creando tipos de datos que puedan reutilizarse en distintas aplicaciones dentro de un determinado contexto

Page 6: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

6

Gestión de memoria simplificada

• Los objetos usan el heap (espacio de memoria dinámica) . Todos los objetos son variables dinámicas que se acceden por referencia– Creación explícita (operador new) = referencia al nuevo

objeto– Destrucción automática (cuando no quedan referencias a

un objeto) -> Garbage Collection (GC)

• No existen punteros ni aritmética con direcciones• Elimina una de las principales fuentes de error

Page 7: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

7

Excepciones

• Permiten gestionar cualquier situación anormal de forma estructurada (resolución de los errores lógicos detectados durante la ejecución)

• El compilador obliga a gestionar errores potenciales (cada fragmento de código indica un conjunto de errores potenciales, y el programador debe indicar una respuesta a dicha posibilidad)

• Podemos crear nuevos tipos de excepciones (definir excepciones que reflejen el dominio del problema)

Page 8: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

8

Multitarea

• Permite lanzar actividades simultáneas = paralelismo– Permite crear y planificar distintas tareas– Proporciona mecanismos para sincronizar y comunicar

datos entre tareas

• Facilita el desarrollo de aplicaciones que responden a eventos externos (ej. sistemas reactivos) o deben sincronizar su actividad con otras aplicaciones (ej.- intercambiando datos por la red)

• Mejora el nivel del interactividad con el usuario• Permite realizar la recolección de resíduos en memoria

(GC) de forma contínua y con la mínima interferencia con la ejecución normal

Page 9: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

9

Enlace dinámico de bibliotecas

• No existe el concepto de aplicación monolítica• Soporta compilación separada, pero no hay fase de montaje (link)• Lanzar la ejecución = indicar la clase principal (referencias a

otras bibliotecas, incluso remotas, se resuelven de forma automática)

fuente objeto ejecutable

Compilación Montaje

tradicional

fuente bytecodes

Compilación

java

bytecodes Bytecodes API

Entorno compilación Entorno ejecución

MVJ

Page 10: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

10

Portabilidad

• El código obtenido al compilar (bytecodes) se puede ejecutar en plataformas distintas– Se basa en el concepto de máquina virtual (MVJ)– Los bytecodes se interpretan en la máquina virtual

• MVJ = +seguridad, +portabilidad, -eficiencia

MacOS

Linux

Solaris

windows

fuente objeto ejecutable

Compilación Montaje

tradicional

fuente bytecodes

Compilación

MVJ

Implementación MVJ

java

Page 11: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

11

Seguridad

• Lenguaje seguro: no soporta aritmética de punteros, dispone de gestión automática de la memoria, mecanismo de excepciones, etc.

• Comprobaciones por parte del soporte en ejecución: rangos en los accesos a vectores, pila, formato E/S, etc.

• La MVJ rechaza la ejecución de fragmentos de código sospechosos

Page 12: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

12

Simplicidad

• Se basa en un número mínimo de conceptos• El núcleo del lenguaje es reducido: gran parte de la

funcionalidad en el API• Familiar.- sintaxis similar a C/C++• Legible

Page 13: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

13

Eficiencia

• (-) La MVJ es un emulador (debe traducir los bytecodes al código máquina correspondiente a la combinación hard/SO sobre la que se ejecuta)

• (+) multitarea = aprovecha tiempos muertos (ej.- solape con E/S) y optimiza el uso del procesador

• (+) compiladores Just In Time• Eficiencia suficiente para aplicaciones no críticas y

aplicaciones que interaccionan con el usuario

Page 14: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

14

Utilidad

• Java es una herramienta de propósito general, especialmente bien adaptada para:– Aplicaciones en red, donde la portabilidad y seguridad son

básicas– Aplicaciones multitarea y distribuidas– Aplicaciones web multinivel (ej.- con separación entre

interfaz con el cliente, lógica del negocio, y nivel de datos)

Page 15: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

15

API

• Conjunto de bibliotecas de soporte (forman parte del estándar, y se distribuyen gratuitamente)

• Equivalen a un interfaz con un SO abstracto = portabilidad.• Realizan operaciones básicas de interfaz con el usuario, implementan estructuras de

datos, facilitan la E/S, y proporcionar mecanismos para programación en red Ejemplos:– ES (io).- lectura/escritura de datos en ficheros, tiras, sockets,

etc.– GUI (awt).- gráficos, modelo de eventos, controles interacción– Componentes software.- JavaBeans– RED (net).- URL, sockets, RMI, etc– BD (jdbc).- acceso a bases de datos– WEB.- applets, servlets, JSP, etc.

Page 16: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

16

API.- Enterprise

• Consiste en un cto de APIs que facilitan el desarrollo de sistemas de información corporativos

– JDBC.- conectividad con BD relacionales

– RMI.- Invocación de métodos remotos (servicios distribuidos, especifico para java)

– CORBA IDL.- Common Object Request Broker, Interface Definition Language (servicios distribuidos independientes de la plataforma y lenguaje)

– Servicios transaccionales.- Api OLTP (Online Transaction Processing)

– serialización de objetos.- mecanismo de bajo nivel usado principalmente para migrar objetos dentro de un sistema distribuido

– ODBMS.- API para comunicación con Object Database Management Systems

Page 17: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

17

API.- Media

• Se centra en la difusión de gráficos y sonido, animación, etc.– Media framework.- reproductores audio, vídeo, midi: consiste en Java Media

Player, Java Media Capture, y Java Media Conference

– gráficos 2d.- operaciones básicas de gráficos e impresión

– gráficos 3d.- rendering, animación, etc.

– telefonía

– SRAPI.- API para reconocimiento de voz

– VRML.- API para Virtual Reality Modeling Languaje

Page 18: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

18

Java Beans

• Es una familia de especificaciones y algunas clases básicas que facilitan la escritura de componentes java

• JavaBean = estandard para creación de objetos que poseen un comportamiento bien definido y documentado

• Los componentes pueden combinarse (en lugar de crear aplicaciones desde cero)

• Los java beans publican información sobre sí mismos en un entorno de desarrollo integrado (IDE)

• El IDE puede presentar al desarrollador los atributos del objeto, y notificarle los eventos a los que responde

• La creación de beans requiere el paquete java.beans y el Beans Developer Toolkit. Ambos est n disponibles de forma gratuita

Page 19: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

19

API.- Comercio

• Es parte de una iniciativa de mayor envergadura denominada JECF (java electronic commerce framework)

• Permite realizar las operaciones básicas de un esquema de comercio electrónico

– JavaWallet.- gestor de compras y API para GUI

– Payment and Service.- APIs para el procesamiento de pagos

– Merchant APIs.- proporciona posibilidades para carta de compras y cargo de costes

– Java card.- API para interfaz con Smart Cards (tarjetas chip)

Page 20: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

20

API.- Sistemas Empotrados

• interfaz básico para aplicaciones diseñadas para dispositivos simples (small footprint)

• Estos dispositivos disponen de recursos limitados (memoria, procesamiento, capacidad gráfica, ancho de banda,..)

• El API 'embedded' es una versión reducida que permite realizar las operaciones básicas

Page 21: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

21

API.- Gestión

• conjunto de paquetes para monitorizar y mantener items en una red

• objetivo = crear un mecanismo que permita controlar el estado de diversos dispositivos desde un punto único

– JMAPI.- Java Management API define distintos APIs para garantizar una apariencia (look and feel) común entre distintos servicios de gestión

Page 22: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

22

API.- Seguridad

• Conjunto de paquetes que proporcionan el soporte para desarrollar aplicaciones sobre internet de forma segura

– ACL access control list

– Core security.- incluye criptografía, gestión de claves, rutinas para hashing, firmas digitales, etc.

Page 23: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

23

API.- Servidor

• Familia de productos para desarrollar aplicaciones basadas en el servidor

• Principalmente para desarrollar servicios online sobre internet o una intranet

• servlet = programa ejecutable en la parte servidor (coopera con el servidor web, ej. para creación de contenido dinámico)

– java server toolkit.- entorno para del desarrollo de aplicaciones servidor

– java web server.- servidor web completamente funcional escrito en java

– java servlet engine.- complementa a los servidores web, proporcionando soporte para la ejecución de servlets

– java NC server.- servidor para Network Computers

Page 24: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

24

Evolución del lenguaje

• Evolución rápida. Líneas de evolución– GUI: nuevo sistema de gestión de eventos, migración de awt

a swing, desarrollo visual– WEB: servlets (programas de apoyo al servidor web) y JSP

(páginas HTML con código java empotrado)– Componentes: Java Beans (objetos que siguen normas

estrictas de interfaz para facilitar composición)– Prog. distribuida.- RMI (acceso a objetos remotos), JMS

(soporte para sistemas de distribución de mensajes), etc.– BD: JDBC (nivel de acceso a Bases de Datos)– XML: SAX, DOM (facilita el intercambio de información

entre aplicaciones, separa estructura/contenido/presentación)

Page 25: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

25

Enterprise computing en Java• Java está cambiando el negocio de la computación• Nuevo esquema donde dominan las redes, se expande la computación distribuida, y

encontramos objetos en cualquier contexto• Java hasta ahora:

– Enfasis en el aprendizaje básico de Java– Enfasis en aplicaciones relativamente simples para la parte cliente (applet)– Mercado en proceso de maduración– Material didáctico enfocado hacia la introducci¢n a la programación con Java

• Java ahora– Se ha reforzado la imagen de portabilidad y seguridad en un entorno distribuido– Opción seria para desarrollo de aplicaciones corporativas, desarrollo profesional, y

aplicaciones a gran escala– Separación de la aplicación en niveles (datos, lógica del negocio, interfaz cliente,..)– Conectividad con BD, escalado de aplicaciones mediante progr. distribuida, etc.– Para ‘exprimir’ los paquetes 'Enterprise’ debemos replantear el proceso de desarrollo– Tendencia a sistemas abiertos, mayor énfasis en objetos, seguridad, conectividad, ...

Page 26: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

26

POO (Programación Orientada a Objetos)

Control de complejidadTipos definidos por el usuario

HerenciaEnlace dinámico

Page 27: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

27

¿Porqué POO?

• Es el mejor mecanismo de abstracción hasta la fecha -> control de la complejidad

• Separa interfaz/implementación = Flexibilidad -> limita las repercusiones de cambios en la especificación

• Se basa en 'extender' el lenguaje hacia el dominio de la aplicación (nuevos tipos de datos)

• No genera una solución a medida para un problema concreto, sino un marco de trabajo para desarrollar soluciones a una familia de problemas (reutilización

Page 28: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

28

Abstracción = control complejidad

• Abstracción = resaltar aspectos relevantes, ocultar detalles sin importancia

• Ocultación de información = separa interfaz (relevante, equivale a un contrato) de implementación (irrelevante)

• Los diseñadores ocultan los detalles de implementación a los clientes, lo que les permite– Mantener el control de los datos internos– Cambiar la implementación sin invalidar código de los

clientes

nombreinterfaz implementación

Page 29: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

29

Tipo Abstracto de Datos (TAD)

• Un tipo de datos predefinido (ej.- int) es una abstracción– Interfaz = rango de valores representables, conjunto de

operaciones legales– Representación = representación de los datos en memoria, código

para implementar las operaciones– Permite declarar variables (instanciación)

• TAD = tipo de datos definido por el programador. Debe indicar– Interfaz (comportamiento) = operaciones aplicables sobre las

variables de ese tipo -> métodos– Representación (estado interno) -> campos o propiedades

• Una vez definido el TAD (digamos Coord), el lenguaje soporta la instanciación (declaración de variables) y la invocación de operaciones

Coord x = new Coord(); x.op(param)

Page 30: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

30

Herencia

• Cuando definimos un nuevo tipo de datos existen dos opciones:– Definirlo desde cero– Definirlo como extensión de otro preexistente (tipo base) ->

herencia

• El mecanismo de herencia introduce:– Reutilización de código (campos y métodos). El tipo base

indica la representación y comportamiento por defecto de la extensión. La extensión puede redefinir el comportamiento y/o añadir nuevas propiedades y métodos

– Compatibilidad de tipos.- Como mínimo mantiene el mismo interfaz que el tipo base, con lo que cualquier fragmento de código capaz de gestionar objetos de un tipo X puede gestionar objetos de extensiones de X

Page 31: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

31

Enlace dinámico

• En los lenguajes ‘fuertemente tipados’ todo identificador posee un tipo asociado (tipo estático)– el compilador lo utiliza para validar los programas, y determinar el código

asociado a cada invocación (enlace estático)

• Los lenguajes que no asocian tipo a las variables determinan el código asociado a cada invocación durante la ejecución (enlace dinámico)

• Java es un lenguaje fuertemente tipado (para mejorar la eficiencia y la detección temprana de errores) -> toda variable posee tipo estático

• ‘compatibilidad’ entre tipos -> una variable de tipo estático X puede referenciar en ejecución (tipo dinámico) a objetos de tipo X o extensiones– El tipo dinamico se utiliza para determinar el código a ejecutar– Una aplicación no necesita distinguir entre variantes -> Extensibilidad

(incluso en direcciones no previstas a priori)

Page 32: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

32

Definiciones

• POO = TAD + herencia + enlace dinámico• POO = Extensión del lenguaje hacia el contexto del

problema• Clase = tipo de datos definido por el usuario• Objeto = variable (instancia) definida a partir de una

clase

Page 33: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

33

Estructura básica de una aplicación Java

Conceptos y sintaxis básicosOrganización de la MVJ

Referencias, tipos, vectoresVariables, objetos, GC

Clases abtractas e interfaces

Page 34: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

34

Almacenamiento de los datos

• Heap: zona de memoria dinámica (zona para objetos)– Representación de un objeto– Descriptor de clase

• Pila: variables locales• Tipos primitivos vs. tipos accedidos por referencia

pila

heap

Class X {

int i=12;

Integer i1= new Integer(12);

Integer i2=i1;

...

i i1 i2

12Ref. info. X

12

Page 35: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

35

Tipos de datos primitivos

• Todo identificador y expresión poseen tipo asociado -> determina el cto. de valores que puede tomar y las operaciones que pueden invocarse sobre él

• Rangos y comportamiento estandarizados (independientes de la plataforma)• Los valores primitivos son atómicos (no comparten estado con otros

valores)– Números

• Enteros (integrales): byte, short, int, long (1,2,4,8 bytes). No hay enteros sin signo• Reales: float, double (4, 8 bytes)

– Caracter: char (2 bytes, codificación Unicode)– Lógico: boolean (sólo valores true y false). Compatible con cualquier expresión

lógica, incompatible con expresiones numéricas

• Tipos 'wrapper' inmutables (Byte, Short, Integer, Long, Float, Double, Boolean,

Character)

int i=23; Integer i1=new Integer(i), i2=i1

Page 36: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

36

Clases = tipos definidos por el programador

• Estado = campos (propiedades) -> variables de cualquier tipo, incluso de otras clases (composición)– Todos los objetos de clase dada poseen la misma estructura en

memoria, pero cada uno dispone de su propio conjunto de campos

• Comportamiento = operaciones (métodos)– todos los objetos de una clase dada comparten el mismo

comportamiento– parámetros = Lista de pares 'tipo identificador' separadas por

comas. Siempre se pasan por valor– identidad = combinación del nombre y los tipos de sus parámetros

(permite sobrecargar nombres de métodos)class Coord {int x,y;

public void desplaza(int dx, int dy) {x+=dx; y+=dy;}

}

... Coord a,b; a=new Coord()

Page 37: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

37

Vectores

• Colección ordenada homogénea y de talla fija. Acceso por posición (para vector de N elementos, posiciones 0..N-1)

• Son objetos– deben crearse explícitamente mediante ‘new’– siempre se acceden por referencia– en la declaración únicamente se indica el número de

dimensiones, pero no la talla en cada dimensión. Esos valores sólo son necesarios al crear el vector de forma efectiva

– disponen de un conjunto de propiedades y métodos (ej.- length)

• Pueden inicializarse mediante una lista de valores• Se realizan comprobaciones de seguridad (ej.- indice fuera de

rango)int[] v= new int[5];

char[][] vc= {{‘h’,’a’,’l’},{‘a’,’b’,’c’},{‘x’,’y’,’w’}};

Page 38: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

38

Declaraciones y reglas de ámbito

• Todo identificador debe declararse (indicar tipo estático)– Declaración de variables: tipo identificador y opcionalmente valor– Declaración de constantes: final tipo identificador = valor

• Bloque = conjunto de sentencias entre '{' y '}’. Pueden anidarse• Ambito de una variable.- desde su definición al final del bloque

– Excluye los ámbitos de objetos del mismo nombre en bloques anidados

– Ningún identificador puede denotar más de un objeto en el mismo ámbito

– Un objeto sólo puede referenciarse desde su ámbito

{ int i=10; {int i=5, j=20;}

}

Page 39: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

39

Referencias a objetos

• Pueden mantenerse 0..n referencias a un mismo objeto• La asignación e igualdad de objetos actúan sobre

referencias• Objeto inaccesible (residuo) = 0 referencias al mismo

– El GC libera el espacio de memoria ocupado por los residuos

{ Integer i=new Integer(10); {Character c= new Character('x');}

}

Page 40: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

40

Paquete = conjunto de clases relacionadas

• Evitan colisiones por la proliferación de nombres de clases. Ej.- la clase x del paquete A es A.x, y la clase x del paquete B es B.x (no hay colisión)– En cualquier fragmento de código podemos usar nombres cualificados

(nombre completo del paquete y la clase ej.- java.util.Vector)– Podemos importar una clase concreta con la sentencia ‘import nombre

cualificado’. Luego usamos el nombre simple (nombre de la clase)

• Permiten organizar el programa en grupos relacionados lógicamente (ej.- las APIs se organizan en paquetes)

• Organización en paquetes independiente de la clasificación (ej.- creamos en un paquete una extensión cuya clase base está en otro paquete)

• Los ficheros fuente o .class se estructuren en una jerarquía de directorios que refleja el nombre del paqueteimport java.util.Vector;

Vector v ...

Page 41: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

41

Campos y métodos de clase

• Se definen mediante el prefijo 'static’• Campos de clase.- una única copia del campo (en lugar

de una por objeto), accesible desde cualquier objeto de la clase

• Métodos de clase.- en lugar de la invocación objeto.op() se invocan como clase.op()

class Coche { static int prestados=0; static void toma() {n++;} static void deja() {n--;} static int prestados(){return n;}

}

... if (Coche.prestados()>4) ...

Page 42: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

42

Estructura de un programa

• Puede estar formado por uno o más ficheros fuente (.java) que se compilan por separado

• Cada fichero fuente contiene el paquete del que forma parte (opcional), sentencias de importación (opcionales), y una secuencia de una o más clases

• Sólo una de las clases está etiquetada como pública (public). El nombre del fichero y dicha clase deben coincidir

Page 43: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

43

Sintaxis básica

• Formato libre (los blancos no significativos se ignoran), distingue mayúsculas/minúsculas

• Comentarios desde // a final línea, o entre pares /* */ o /** **/• Identificadores formados por letras, dígitos, y caracteres '_' y '$'• Toda sentencia termina en ';'• Constantes

– caracter (Unicode). Entre '', como '\xxx' (código octal) o '\c' (caracter)

– lógicas (true, false)– enteras: 0dddd = octal, 0xdddd = hexadecimal, resto decimal.

Sufijo L = largo– reales: Siempre punto decimal, opcional notación exponencial (letra

e). Sufijo F = corto– Tiras entre dobles comillas

Page 44: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

44

Operadores

• Sobre números: igualdad (==, !=), relacionales (<, <=, >, >=), signo(+, -) aritméticos (+, -, *, /), incremento/decremento (++, --)– Sobre enteros además resto de la división entera (%) y

operaciones sobre bits (&. |, ^, ~, <<, >>>)

• Sobre caracteres: igualdad y relacionales• Sobre valores lógicos: igualdad y operadores lógicos (!,

&, |, &&, ^, ||)• Sobre tiras: concatenación (+)• Asignación: (=, operador binario=)• Condicional: expresión lógica ? valor si cierto: valor si

falso

Page 45: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

45

Sentencias y bloques

• Las sentencias denotan acciones (asignación, invocación de funciones, etc.)

• Toda sentencia termina con el caracter ';', y puede incluir una o más expresiones

• La sentencia vacía (;) no ejecuta acción alguna• Las sentencias pueden agruparse en bloques (conjunto de

sentencias delimitadas por '{' '}')• Los bloques pueden usarse en los mismos contextos que

las sentencias, y pueden anidarse• Bloque = ámbito de vida. Una sentencia declarada en un

bloque desaparece cuando el flujo de control abandona ese bloque

Page 46: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

46

Sentencias de control• Selección

– Entre dos alternativas: if (expresión lógica) sentencia else sentencia– Entre n alternativas en base a una expresión de tipo entero o caracter: switch (expresión) { case literal: s1 case literal: s2 .... default: sn }

• Iteración– Bucle while: while (condición) sentencia– Bucle do while: do { sentencias } while (condición)– Bucle for: for (inicialización; test; incremento) sentencia

• Salto– break.- aparece dentro de un bucle o sentencia switch. Abandona la

sentencia– continue.- aparece dentro de un bucle. Inicia una nueva iteración– Etiqueta = identificador que podemos asociar a bucles y sentencias

switch– break y continue seguidos de una etiqueta no hacen referencia a la

sentencia que los contiene, sino a la que lleva esa etiqueta (ej. util en bucles anidados)

Page 47: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

47

Creación y destrucción de objetos• Denominamos ‘constructor’ a un método ‘especial’

– A nivel semántico.- se activan de forma implícita al crear un objeto. Sirve para inicializar los campos del objeto (garantizar que el estado inicial del objeto es coherente)

– A nivel sintáctico.- mismo nombre que la clase, no poseen tipo de retorno

– Si no definimos un constructor, el compilador genera uno por defecto (sin parámetros, y que inicializa cada campo a su valor por defecto)

• Destructor.- GC invoca automáticamente el método finalize de un residuo antes de liberar la memoria que ocupa– Util para liberar recursos (ej.- conexiones de red, ficheros abirtos,

etc.)class Vivos { static int n=0;

Vivos() {n++} // constructor

void finalize(){n--;} // destructor

int cuantos(){return n;}

}

Page 48: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

48

Sobrecarga de métodos

• Los métodos sobrecargados comparten nombre, pero se distinguen por el número o tipo de los parámetros

• Los constructores también son métodos, y pueden sobrecargarse

• No podemos sobrecargar basándonos en un tipo de retorno distinto, porque puede ser ambiguo

int indexOf(char ch){..}

int indexOf(String s){..} // ok

char[] subtira(int desde) {..}

String subtira(int desde){..} // ilegal

Page 49: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

49

Referencia 'this’

• Es una referencia al objeto actual (objeto sobre el que hemos invocado una operación)– Representa el parámetro implícito de cualquier método de instancia– En el código de los métodos podemos acceder a los campos del

objeto sobre el que se aplica la operación como this.campo o simplrmente campo

– En el código de los métodos podemos invocar nuevos métodos de la clase como this.metodo(param) o simplemente metodo(param)

• Podemos usar this() en el constructor (debe ser la primera instrucción) para invocar otro constructor

class Coord { int x,y;

Coord(int x0, int y0){x=x0; y=y0;}

Coord(){this(100,100); }

Coord(int x0) {this(x0,100);}

}

Page 50: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

50

Inicialización de variables

• Los campos poseen valor por defecto– 0 para enteros, 0.0 para reales, null para referencias null,

‘\0’ para caracteres, false para lógicos

• Las variables locales deben inicializarse de forma explícita

• Mecanismos de inicialización– Las variables pueden inicializarse durante la declaración

(inicializadores)– Podemos introducir bloques de inicialización– Podemos definir constructores

Page 51: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

51

Unidades de compilación en Java

• Cada fichero .java puede tener únicamente una clase pública, y el nombre del fichero coincide con el de la clase pública

• Cada clase en un fichero .java se compila en su propio fichero .class, llamado nombreDeLaClase.class

Page 52: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

52

Visibilidad

• La palabra 'package' al principio de un fichero indica el paquete del que forma parte dicho fichero– Las clases en un paquete pueden tener acceso público o

package– Las clases públicas son accesibles para cualquiera. La clases

con acceso package (sin prefijo) sólo son accesibles para los miembros del paquete

• Acceso a las propiedades de una clase– El prefijo private sólo permite acceso desde código de esa clase– package (sin prefijo) desde código de cualquier clase del

paquete– protected desde la clase, el resto del paquete, y extensiones de

la clase (aunque estén en otros paquetes)– public desde cualquiera (en ese y otros paquetes)

Page 53: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

53

Composición vs. Herencia

• Composición = campos que mantienen referencias a otros objetos– sirve para utilizar otros objetos como bloques constructivos– Podemos añadir nuevos miembros a las extensiones– Los objetos pueden cambiar durante la ejecución, y la

delegación es explícita

• Herencia (class B extends A)– refleja una relación de tipo 'es un caso particular de’ – las relaciones entre objetos se fijan en compilación, y

determinan la delegación de invocaciones– Unicamente una clase base (herencia simple)– Toda clase deriva directa o indirectamente de

java.lang.Object (jerarquía en forma de árbol). 'extends Object' es opcional

Page 54: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

54

Herencia

• Las extensiones heredan de su clase base:– El interfaz (aceptan las mismas operaciones) -> compatibilidad– Por defecto, la implementación (mismo código ante una determinada

invocación) -> pero podemos dar nuevo código a la operación. Podemos invocar el código definido en la clase base mediante la palabra 'super'

– Los campos (aunque el acceso a los mismos desde el código de la extensión depende de las reglas de visibilidad)

• Un método ‘final’ no puede sobreescribirse, una clase ‘final’ no es extensible

• Ej.- TerminalMay como Terminal que sólo soporta caracteres en mayúscula

class Terminal { void escribe(char c) {..} void escribe(String s) { for (int i=0; i<length(); i++) escribe(s.charAt(i)); }}

class TerminalMay extends Terminal { void escribe(char c) { super.escribe(cap(c)); }}

Page 55: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

55

Compatibilidad

• Además de reutilización de código, la herencia introduce compatibilidad.- en el contexto pensado para una clase X se admite cualquiera de sus extensiones– Podemos utilizar una variable del tipo base para

almacenar una referencia a un objeto correspondiente a una extensión

– Podemos añadir nuevas extensiones, y el código que funcionaba con la clase base seguirá funcionando

• Ej.- escribimos un editor gráfico que gestionen figuras (a nivel de selección, desplazamiento, copia, borrado, etc.). Soportará cualquier tipo de figura potencial

Page 56: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

56

Clase base y extensiones

• La clase base establece un interfaz común a las distintas extensiones

• Las extensiones implementan el interfaz común, posiblemente de formas distintas

• Cuando en un dominio de aplicación encontramos tipos de datos similares intentamos extraer factor común– El resultado es una clase base (factor común) y un

conjunto de extensiones (que podremos seguir ampliando a posteriori)

Page 57: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

57

Clases abstractas

• Es probable que la clase base represente un concepto abstracto, no un tipo de datos concreto (ej.- figura, conexión, mensaje, etc.)– Fija un interfaz que todas las extensiones deben cumplir,

pero no podremos concretar algunos métodos (ej.- 'dibuja' sobre Figura no tiene código) -> método abstracto (etiqueta ‘abstract’)

– Toda clase abstracta (etiqueta ‘abstract’) posee uno o más métodos abstractos

– Una clase abstracta puede aparecer como tipo estático, pero no como tipo dinámico (no podemos crear objetos de clases abstractas)

– El compilador obliga a las extensiones a implementar todos los métodos abstractos de la clase base (o seguir definiéndolos como abstractos)

Page 58: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

58

Interfaces

• interface = sintaxis especial para definir una clase abstracta sin campos y en la que todos los métodos son abstractos– Los métodos declarados en un interface son

explícitamente públicos, abstractos y finales– Los interfaces pueden heredar varios interfaces mediante

la sintaxis 'extends’

• Las clases pueden heredar varios interfaces mediante la sintaxis 'implements’

• Un interfaz puede aparecer como tipo estático, pero no como tipo dinámico

Page 59: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

59

Miscelánea

ColeccionesClases internasEntrada/SalidaExcepciones

Page 60: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

60

Colecciones

• El interfaz básico Collection permite– Añadir y eliminar elementos (talla máxima variable)– Obtener el número de elementos, comprobar si está vacía,

comprobar si contiene determinado elemento– Obtener un iterador

• El tipo base de los elementos es Object• List (colección ordenada) y Set (colección sin

duplicados) son extensiones de Collection• También se define el concepto Map (diccionario de

pares clave/valor)

Page 61: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

61

Listas (List)

• Colección de elementos ordenados, que permite:– acceso por posición (índice)– borrar/insertar elementos en una posición dada– Podemos obtener un iterador (recorrido adelante/atrás)– obtener una sublista

• Implementaciones– ArrayList: como vector redimensionable (acceso aleatorio

rápida, inserción/borrado lento)– LinkedList: como lista enlazada (acceso aleatorio lento,

inserción/borrado rápido, podemos añadir/obtener/eliminar en ambos extremos -pilas, colas, dicolas-)

Page 62: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

62

Diccionarios (Map)

• Mantiene pares clave/valor. Dada una clave devuelve el valor asociado– ArrayMap: Map implementado mediante ArrayList

(creación/iteración rápida para diccionarios pequeños, lento para diccionarios grandes)

– HashMap: Map implmentado mediante una tabla hash (para uso general)

– TreeMap: Map implementado mediante árboles red/black (ordenado -orden natural-, permite comparar objetos)

Page 63: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

63

Conjuntos (Set)

• Colección sin elementos duplicados– ArraySet: implementación mediante vector

redimensionable (útil para conjuntos pequeños -creación e insrción rápidas-, ineficiente en conjuntos grandes)

– HashSet: implementación mediante HashMap (para uso general)

– TreeSet: implementación de SortedSet mediante TreeMap (elementos ordenados en orden natural)

Page 64: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

64

Clases internas (anidadas)

• Podemos definir clases como– Miembros de otras clases– Locales dentro de un bloque de sentencias– Anónimas en una expresión

• Las clases internas poseen una referencia a la instancia que las encierra

• El uso más frecuente de las clases anidadas es definir gestores de eventos

Page 65: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

65

Entrada/salida

• La entrada/salida sobre consola y ficheros se define en java.io y se basa en streams (flujos de datos)

• stream = secuencia de datos que fluye entre fuente y destino

• Ventajas. Los algoritmos de lectura/escritura son independientes:– del tipo de datos a leer/escribir– del origen/destino de la información

Page 66: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

66

E/S.- Tipos de streams

• Según el tipo de datos sobre los que opera– Streams de caracteres (Unicode– Streams de bytes (para datos binarios)

• Según el propósito:– Lectura/Escritura desde/a una fuente externa– Procesamiento de la información (filtro)

Page 67: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

67

Excepciones

• Software más complejo -> mayor probabilidad de errores lógicos durante la ejecución (excepciones)– ¿Cómo se gestiona el error?– ¿Qué parte del programa lleva a cabo esa gestión?– ¿Cómo recuperar el funcionamiento normal?

• División de responsabilidades:– Detección del error (notificación).- para indicar problemas

durante la ejecución se crean objetos de tipo 'Exception'– Respuesta ante el error (recuperación).- es responsabilidad

del cliente (código que usa la clase que ha detectado la excepción)

Page 68: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

68

Ejemplo

class ListaLlena

extends Exception {}

class Lista { Object[] v = new Object[20]; int n=0; ... public void inserta(Object x)

throws ListaLlena { if (n>=20)

throw new ListaLlena(); ... // procesamiento normal }

}

class cliente { ... public void m() { Lista list= new Lista(); try {

for (int i=0; i<45; i++)

list.inserta(

new Integer(i)); } catch (ListaLlena e) {

// recuperación

} }

}

Definimos la clase Lista y uno de sus clientes

Page 69: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

69

Activación de excepciones

• Todo método parcial (no aplicable en todos los estados posibles del objeto):– Debe preveer la posibilidad de activar excepciones– Su cabecera debe indicar qué excepciones puede activar

(palabra 'throws')

• Al activar la excepción se interrumpe la ejecución normal y se pasa a buscar el código de recuperación

• Dicha búsqueda desanda la cadena de invocaciones (si el método A invoca B, y éste a C, y C notifica un error, se busca el código de recuperación en orden inverso CBA)

Page 70: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

70

Excepciones.- resumen

• Las excepciones proporcionan un mecanismo estructurado para transferir el control desde el punto donde ocurre el error al punto donde se recupera

• Las excepciones representan una ruptura del contrato. Indican una de las siguientes situaciones:– problemas en el código del cliente (el cliente ha roto el

contrato) – el servicio no puede cumplir su parte del contrato

• Debemos definir y utilizar un tipo de excepción distinto para cada tipo de situación anormal

Page 71: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

71

Plataforma J2EE.- Descripción técnica

Evolución de la MVJSoporte para Enterprise Computing

Entorno J2EEArquitectura J2EE

Componentes y Contenedores

Page 72: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

72

Evolución de la MVJ

• Java = – lenguaje (clases e interfaces) +

– compilador (traduce a bytecodes = formato independiente de la plataforma) +

– MVJ (compila/interpreta bytecodes)

• WORA (Write Once, Run Anywhere)– Una aplicación java puede ejecutarse en cualquier MVJ

– Hay MVJ para prácticamente cualquier plataforma

– Requiere definir la configuración mínima del entorno de ejecución para garantizar portabilidad (qué APIs debe soportar la MVJ

• Se requieren distintas especificaciones de la MVJ, debido a:– diversificación de las plataformas (desde tarjetas chip a entornos empresariales)

– número creciente de APIs

Page 73: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

73

Las MVJ

• Java Card– para tarjetas chip

• Personal Java– para dispositivos personales con recursos

limitados

• J2SE (Java 2 Standard Edition)– configuración estándar, para un sistema de

propósito general• core APIs (java.*, javax.swing.*, IDL,

org.omg.CORBA.*, org.omg.CosNaming.*)

• J2EE (Java 2 Enterprise Edition)– calidad de servicio– portabilidad e interoperabilidad

• extensiones estándar (javax.*)• Enterprise APIs (EJB, JNDI, RMI/IIOP, Servlets

y JSP, JMS, JTA JTS, JDBC, JavaMail, JAF)

J2EE

J2SE

Personal java

Java card

Page 74: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

74

Comercio Electrónico

• Distintos tipos de interacción– B2B.- entre negocios (ej.- compras a un proveedor)– B2C.- entre negocio y clientes (ej.- sistema de venta on-line– C2C.- entre clientes (ej.- mediación de acuerdos entre clientes)– intraB.- dentro de una empresa o negocio (ej.- envío de datos internos entre

sucursales)

• Impone nuevos requisitos– Escalable.- internet es enorme y sigue creciendo de forma explosiva– Disponible.- en muchos casos no debemos/podemos paralizar el servicio para realizar

mantenimiento– Fiable– Seguro.- debemos identificar/autenticar a los usuarios (evitar accesos no autorizados)

y preservar la integridad de los datos– Integridad transaccional– Distribución

Page 75: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

75

Modelo de aplicación tradicional

• Nivel cliente.- implementa la lógica de presentación y la lógica de negocio

• Nivel de datos.- implementa los servicios de gestión de BD

• (-) Puesta en marcha de las aplicaciones costosa• (-) Se requiere actualización frecuente del nivel cliente• No cumple los requisitos de escalabilidad, disponibilidad, etc.

Page 76: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

76

Modelo de aplicación multi-nivel (>2)

• Nivel cliente.- imprementa la lógica de presentación• Nivel aplicación.- implementa la lógica de negocio• Nivel de datos.- implementa los servicios de gestión de BD

• (+) cambios en la lógica de negocio, esquema BD, etc. NO afectan clientes• (+) optimiza recursos, oculta el nivel de aplicación• Puede cumplir los requisitos de escalabilidad, disponibilidad, seguridad, etc.

Page 77: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

77

Tipos de aplicación multinivel

• Tradicional– comunicación cliente/servidor aplicación basada en RPC

– comunicación stateless (el servidor no mantiene info. de estado sobre los clientes)

– no modular -> resulta difícil actualizar la lógica de negocio

• Basada en componentes– Componente = código pensado para ejecutarse en el contexto de un contenedor

determinado (en este caso un servidor de aplicaciones)

– Diseño modular (simplifica la actualización de la lógica de negocio)

– El servidor implementa el concepto de sesión (podemos mantener la identidad y estado de los clientes)

– Los aspectos de seguridad, persistencia, transacciones, etc. Se consideran servicios que presta el servidor de aplicaciones (de forma transparente para los componentes)

Page 78: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

78

Arquitectura J2EE

• Componentes.- fragmentos de código que se pueden ensamblar en aplicaciones. Se ejecutan en un contexto (contenedor)

– applet.- Interfaz usuario. Puede ejecutarse en un navegador (o cualquier otro contenedor que soporte J2SE, JNDI y el modelo de programación del applet

– servlets y JSP.- componentes servidor que se ejecutan en un servidor web. Gestionan peticiones HTTP (solicitud de servicios), procesan la solicitud, y devuelven el resultado (ej. como HTML o XML) -> puente entre el cliente y el servidor de aplicaciones

– EJB (Enterprise Java Bean).- componentes servidor que implementan los servicios. Se ejecutan en un servidor de aplicaciones

• Contenedores.- – servidor de aplicaciones.- entorno de ejecución que combina técnicas

transaccionales y distribución de objetos. Es un entorno de altas prestaciones, escalable y robusto. Simplifica el desarrollo

• Conectores.- acceso a sistemas propietarios (en especificación futura)

Page 79: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

79

Entorno J2EE

Page 80: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

80

Arquitectura J2EE

Page 81: 1 Introducción al lenguaje Java Características POO Estructura básica de una aplicación API.

81

J2EE consiste en

• Especificación.- define los APIs especificos a soportar para dar determinadas garantías de servicio

• Test compatibilidad.- verifica que una implementación cumple la especificación. Dado que se necesita un amplio rango de productos y servicios, y pueden proceder de fiversas fuentes, los productos deben estar certificados (LOGO)

– Un vendedor sólo puede incluir el logo si supera el test de compatibilidad

• Implementación de referencia.- implementación mínima del servidor de aplicación y APIs Enterprise (funcionalidad básica, para evaluación y pruebas)