La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Introducción al lenguaje Java

Presentaciones similares


Presentación del tema: "Introducción al lenguaje Java"— Transcripción de la presentación:

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

3 Caracteristicas de Java
¿Porqué Java? Caracteristicas básicas Utilidad Evolución Compilación y ejecución

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

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

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

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)

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

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 fuente bytecodes bytecodes Bytecodes API MVJ Compilación Compilación Montaje Entorno compilación Entorno ejecución tradicional java

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 Implementación MVJ MacOS fuente objeto ejecutable fuente bytecodes Linux Solaris windows Compilación Compilación Montaje MVJ java tradicional

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

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

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

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)

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.

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

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

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

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)

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

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

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.

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

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)

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, ...

26 POO (Programación Orientada a Objetos)
Control de complejidad Tipos definidos por el usuario Herencia Enlace dinámico

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

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 nombre implementación interfaz

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)

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

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)

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

33 Estructura básica de una aplicación Java
Conceptos y sintaxis básicos Organización de la MVJ Referencias, tipos, vectores Variables, objetos, GC Clases abtractas e interfaces

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 heap Class X { int i=12; Integer i1= new Integer(12); Integer i2=i1; ... pila 12 Ref. info. X i i1 i2 12

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

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()

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’}};

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;} }

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');} }

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 paquete import java.util.Vector; Vector v ...

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) ...

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

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

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

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

46 Sentencias de control Selección Iteración Salto
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: s 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)

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;} }

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

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);} }

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

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

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)

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

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)); }

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

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)

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)

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

59 Colecciones Clases internas Entrada/Salida Excepciones
Miscelánea Colecciones Clases internas Entrada/Salida Excepciones

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)

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-)

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)

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)

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

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

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)

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)

68 Ejemplo Definimos la clase Lista y uno de sus clientes
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 } } }

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)

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

71 Plataforma J2EE.- Descripción técnica
Evolución de la MVJ Soporte para Enterprise Computing Entorno J2EE Arquitectura J2EE Componentes y Contenedores

72 Evolución de la MVJ Java = WORA (Write Once, Run Anywhere)
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

73 Las MVJ Java Card Personal Java J2SE (Java 2 Standard Edition) J2EE
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

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

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.

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.

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)

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)

79 Entorno J2EE

80 Arquitectura J2EE

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)


Descargar ppt "Introducción al lenguaje Java"

Presentaciones similares


Anuncios Google