La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza

Presentaciones similares


Presentación del tema: "Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza"— Transcripción de la presentación:

1 Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza

2 Introducción a la plataforma Java (I) Evolución de la programación ¿Qué es programar? Fases de un proyecto informático Análisis. Diseño. Codificación + compilación. Depuración + pruebas. Documentación.

3 Introducción a la plataforma Java (II) Evolución de los lenguajes. Lenguajes máquina. Lenguajes ensamblador. Lenguajes de alto nivel. Programación estructurada. Instrucciones secuenciales. Instrucciones condicionales. Instrucciones repetitivas. Un programa en ejecución: proceso. La relación con la máquina. Los orígenes del lenguaje Java Sun Microsystems intenta crear un lenguaje para programar dispositivos eléctricos.

4 Introducción a la plataforma Java (III) Primera versión se llamó OAK. No tuvo éxito. Nueva orientación: Internet. En 1996 surge la primera versión. Características principales del lenguaje Java. Multiplataforma. Compilación -> ByteCode -> JVM (Java Virtual Machine). Ventajas: Multiplataforma. Entorno controlado.

5 Introducción a la plataforma Java (IV) Desventajas Menor rendimiento. Pérdida de características específicas. Orientación a Objetos. Applets. Programación distribuida RMI (Remote Method Invocation) Multiproceso / Multihilo (MultiThreading) Programación móvil J2ME (Micro Edition) Programación aplicaciones web JSP (Java Server Pages)

6 Introducción a la plataforma Java (V) La evolución del lenguaje Java. La orientación actual es la de ofrecer multitud de utilidades para facilitar el desarrollo de aplicaciones. Servidores de aplicaciones. Transparencia en el acceso a datos. Desarrollo basado en componentes (beans).

7 Programación Orientada a Objetos en Java (I) ¿Qué es la Programación Orientada a Objetos? Paradigma de programación que permite modelar de forma sencilla conceptos del mundo real a nivel de programación. ¿Por qué es útil la POO? Ofrece un conjunto de herramientas que una vez interiorizadas permiten gran flexibilidad en el diseño de una solución.

8 Programación Orientada a Objetos en Java (II) Palabras reservadas en Java. abstractdefaultgotooperatorsynchronized booleandoifouterthis breakdoubleimplementspackagethreadsafe byteelseimportprivatethrow byvalueextendsinnerprotectedthrows casefalseinstanceofpublictransient castfinalintresttrue catchfinallyinterfacereturntry charfloatlongshortvar classfornativestaticvoid constfuturenewsupervolatille continuegenericnullswitchwhile

9 Programación Orientada a Objetos en Java (III) Herramientas de la POO. La clase como elemento mínimo. Una clase es una representación de un concepto del mundo real. Contiene dos componentes / miembros: Datos = Atributos. Acciones = Métodos. Se usa el operador punto. para acceder a los miembros. Una clase se define con la palabra reservada class. Clase Vs Objeto Clase = Concepto = Definición [= Receta]. Objeto = Instancia = Elemento real [= Pastel].

10 Programación Orientada a Objetos en Java (IV) Paquetes. Concepto que permite englobar en una misma idea varias clases. Semejanza con estructura de directorios. Puede haber una jerarquía. En compilación, se generan directorios físicos. Se usa el operador punto. para poder acceder a las clases de un paquete o a los subpaquetes. Visibilidad de paquete. Pública: Se permite usar esa clase desde otro paquete. No pública: Sólo se puede usar esa clase desde ese paquete.

11 Programación Orientada a Objetos en Java (V) Estructura básica de un fichero fuente Java. Definición de paquete (opcional): package Importación de clase (opcional): import Se pueden importar todas las clases usando * Definición de clases. Sólo una con visibilidad pública de paquete. El fichero debe llamarse igual que esta clase. package paquete; import otroPaquete.OtraClase; public class ClaseConVisibilidadPublica { } class ClaseConVisibilidadNoPublica { }

12 Programación Orientada a Objetos en Java (VI) Reglas de estilo básicas. Los nombres de paquete en minúsculas. paquete Los nombres de clase en mayúscula la primera letra y en mayúscula la primera letra de cada cambio de concepto. NombreDeClase Los nombres de miembros en minúsculas y en mayúscula la primera letra de cada cambio de concepto. nombreDeMiembroDeClase Los nombres de constantes en mayúsculas todas las letras y cada cambio de concepto con un guión bajo _. NOMBRE_DE_CONSTANTE

13 Programación Orientada a Objetos en Java (VII) Comentarios. Hay 3 tipos. De Bloque: Comienzan por /* y terminan por */. No se permiten anidaciones. De Línea: Definidos por //. De Documentación: Permiten insertar texto en las páginas web generadas con la herramienta javadoc del JDK. Comienzan por /** y terminan por */. Se suelen poner en ciertos puntos: Antes de una clase. Antes de un atributo. Antes de un id Exception

14 Programación Orientada a Objetos en Java (VIII) Encapsulación. Control de acceso a los miembros. 2 tipos de encapsulación: Pública: Un miembro accesible desde cualquier punto. Se usa la palabra reservada public antes de definir el miembro. Privada: Un miembro accesible únicamente desde la propia clase. Se usa la palabra reservada private antes de definir el miembro. Los datos públicos pueden cambiar en cualquier momento. Mediante encapsulación privada, sólo pueden cambiar desde métodos = control.

15 Programación Orientada a Objetos en Java (IX) Tipos de datos en Java. Primitivos. Enteros. byte : 8 bits positivos y negativos (-128 < 0 < 127) char : 16 bits positivos (0 < 65535) short : 16 bits positivos y negativos ( < 0 < 32767) int : 32 bits positivos y negativos long : 64 bits positivos y negativos Decimales. float : 32 bits double : 64 bits Lógicos. boolean : true o false No primitivos: Clases.

16 Programación Orientada a Objetos en Java (X) Variables. tipo + identificativo + [=VALOR_INICIAL] + ; El concepto de ámbito. Define la visibilidad, accesibilidad, duración de una variable. Se representa mediante { y }. Existen 2 tipos: De clase: Las variables de clase (estáticas) y de instancia. De método: Las variables locales a un método. Diferencia entre variables de tipo primitivo y objetos.

17 Programación Orientada a Objetos en Java (XI) Miembros estáticos. Definidos con la palabra reservada static Un miembro estático (o de clase) es único para todos los objetos que se creen. Se puede decir que siempre está creado. Se puede acceder a él sin necesidad de un objeto. Un miembro no estático (o de instancia) pertenece a cada objeto individual. Se puede decir que se crea junto con el objeto. Desde un método estático no se puede acceder a miembros no estáticos. Creación de objetos. Cuando se declara una variable de tipo no primitivo, realmente representa una referencia a un posible objeto. Para poder crear el objeto al que referenciar se usa el operador new.

18 Programación Orientada a Objetos en Java (XII) Contantes. Enteras ( int, por defecto) 12345L ( long ) 0123 (octal) 0xF0A (hexadecimal) Decimales ( double, por defecto) f ( float ) Carácter. a Cadena. cadena

19 Programación Orientada a Objetos en Java (XIII) Existen constantes con nombre declarándolas igual que las variables con la palabra reservada final. final int CONSTANTE = 5; Conversión de tipos. No perder información / precisión. Implícita. Explícita. Operador cast (tipo)

20 Programación Orientada a Objetos en Java (XIV) Edición, Compilación y Ejecución en Java. Software: JDK: Java Development Kit. Compilador + JVM. JRE: Java Runtime Enviroment. JVM. Edición en cualquier editor. El directorio bin del JDK contiene los comandos. Compilación. Comando javac. -d : Indica el directorio donde generar los.class. -classpath : Indica las rutas a los.class a usar. javac –d RUTA –classpath RUTA fichero.java El fichero.java puede ser *.java.

21 Programación Orientada a Objetos en Java (XV) Ejecución. Comando java. -cp : Indica las rutas de los.class a usar. java –cp RUTA fichero No se indica la extensión dado que se interpretaría como paquete.subpaquete...clase Documentación. Comando javadoc. -d : Indica el directorio donde generar la documentación. javadoc –d RUTA fichero.java El fichero.java puede ser *.java.

22 Programación Orientada a Objetos en Java (XVI) public class PrimerPrograma { public static void main(String[] args) { System.out.println(El primer programa en Java.); } Editar, compilar y ejecutar este programa. Realizar varios cambios en el programa. Modificar la cadena a presentar. Añadir el paquete cursojava.primero. ¿Qué implicaciones tiene? Documentar el código fuente. Generar documentación.

23 Programación Orientada a Objetos en Java (XVII) package cursojava.tipos; public class TiposPrimitivos { public static void main(String[] args) { byte b = 127; char c = 65; // Representa el carácter A short s = 32767; // Conversiones implícitas int i = b; long l = s; float f = i; double d = f; } Realizar varios cambios en el programa. Asignar valores fuera de rango a cada tipo. Intentar realizar conversiones inadecuadas. ¿Cómo se forzarían?

24 Programación Orientada a Objetos en Java (XVIII) Expresiones. 2 elementos. Operadores. Operandos. 2 tipos de operadores. Binarios: 2 operandos. Unarios: 1 operando. Asignación = variable = valor; variable1 = variable2 = variable3 = valor;

25 Programación Orientada a Objetos en Java (XIX) Aritméticas. Suma + : Binario. Enteros y decimales. Más + : Unario. Enteros y decimales. Resta - : Binario. Enteros y decimales. Menos - : Unario. Enteros y decimales. Multiplicación * : Binario. Enteros y decimales. División / : Binario. Enteros y decimales. Resto % : Binario. Enteros. OperadorOperaciónNivel de Precedencia +, - (unitarios) *, /, %5 * 5 es / 6 es 4 25 % 6 es 1 +, es – 3 es -1

26 Programación Orientada a Objetos en Java (XX) Incremento ++ y Decremento -- Pre: Se incrementa/decrementa y después se evalúa la expresión. ++variable; --variable; Post: Se evalúa la expresión y luego se incrementa/decrementa. variable++; variable--;

27 Programación Orientada a Objetos en Java (XXI) package cursojava.incdec; public class IncrementoDecremento { public static void main(String[] args) { int variable = 5; System.out.println(variable); System.out.println(++variable); System.out.println(variable++); System.out.println(variable--); System.out.println(--variable); System.out.println(variable); } Indicar la salida por pantalla de cada instrucción.

28 Programación Orientada a Objetos en Java (XXII) Operadores aritméticos en conjunción con el operador de asignación variable += expresion; // variable = variable + expresion variable -= expresion; // variable = variable – expresion variable /= expresion; // variable = variable / expresion variable *= expresion; // variable = variable * expresion variable %= expresion; // variable = variable % expresion

29 Programación Orientada a Objetos en Java (XXIII) Operadores relacionales. Operadores que consiguen uno de los dos valores lógicos: true o false. OperadorSignificadoEjemplo == Igual a a == b != No igual a a != b > Mayor que a > b < Menor que a < b >= Mayor o igual que a >= b <= Menor o igual que a <= b

30 Programación Orientada a Objetos en Java (XXIV) Operadores lógicos: OperadorSignificadoTabla de verdadEjemplo ! No lógica, negación a!a!(x < y) truefalse true || O lógica aba || bx 9 true falsetrue falsetrue false && Y lógica aba && bx 9 true false truefalse ^ O exclusiva aba ^ bx 9 true false truefalsetrue falsetrue false

31 Programación Orientada a Objetos en Java (XXV) Operan sobre operandos booleanos y generan resultados booleanos. Se evalúan de izquierda a derecha. El máximo exponente son las operaciones OR y AND. OR: Si el operando de la izquierda es true, no se evalúa el de la derecha. AND: Si el operando de la izquierda es false, no se evalúa el de la derecha. Para obligar a evaluar ambos: | y &

32 Programación Orientada a Objetos en Java (XXVI) Instrucciones condicionales. Simple: if (CONDICION) { INSTRUCCIONES } Doble: if (CONDICION) { INSTRUCCIONES } else { INSTRUCCIONES }

33 Programación Orientada a Objetos en Java (XXVII) Múltiple: switch(VARIABLE) { case VALOR1: break; case VALOR2: break;... case VALORn: break; default: break; }

34 Programación Orientada a Objetos en Java (XVIII) Instrucciones repetitivas: Hay de dos tipos: De 0 a N: for y while for (INICIALIZACION; CONDICION; PASO) { INSTRUCCIONES } while(CONDICION) { INSTRUCCIONES } De 1 a N: do... while do { INSTRUCCIONES } while(CONDICION);

35 Programación Orientada a Objetos en Java (XXIX) Métodos. La signatura de un método es lo que lo define. tipo_retorno + identificativo + ( + [parámetro(s)] + ) Los parámetros son definiciones de variables con ámbito local (de método) pero que reciben un valor inicial cuando se haga la llamada el método. tipo + identificativo Java soporta sobrecarga: definición de dos métodos en la misma clase con el mismo identificativo pero con número o tipo de parámetros diferentes. Si no se quiere devolver nada se usa el tipo void. Tipos primitivos Vs tipos no primitivos (clases) en métodos.

36 Programación Orientada a Objetos en Java (XXX) Constructores Métodos especiales que se ejecutan en el momento de creación de un objeto ( new ). No devuelven valor (ni void ). Se llaman igual que la clase. Puede haber sobrecarga. Por defecto siempre hay un constructor que no recibe parámetros. Preguntas: ¿Qué pasa si ponemos un único constructor con parámetros? ¿Qué pasa si ponemos un constructor con encapsulación privada?

37 Programación Orientada a Objetos en Java (XXXI) El tipo de datos String Es un tipo de datos abstracto (clase) que está definido en el paquete java.lang. Es el único tipo abstracto de Java que tiene su propia constante literal conocida dentro de la sintaxis del lenguaje (la gramática). Por ello, una asignación como String s = cadena; Implica directamente la creación (new) de un objeto. Es similar a: String s = new String(cadena); Tiene multitud de funcionalidades útiles para control de subcadenas. Para poder concatenar cadena se usa el operador + que permite incluso convertir tipos de datos no String a cadenas.

38 Programación Orientada a Objetos en Java (XXXII) Ejemplo: Desarrollar un programa para aclarar el concepto de variable estática (de clase) y no estática (de instancia). package cursojava.estatic; public class DeClaseDeInstancia { public static void main(String[] args) { Ayuda a1 = new Ayuda(); Ayuda a2 = new Ayuda(); Ayuda a3 = new Ayuda(); System.out.println(a1.deClase); System.out.println(a1.deInstancia); } class Ayuda { public static int deClase; public int deInstancia; public Ayuda() { deClase++; deInstancia++; }

39 Programación Orientada a Objetos en Java (XXXIII) Ejemplo: Desarrollar un programa para aclarar el paso de parámetros por valor y por referencia. package cursojava.valref; public class ValorYReferencia { public static void metodo(int valor) { valor++; } public static void metodo(Ayuda valor) { valor.valor++; } public static void main(String[] args) { int valor = 5; metodo(valor); System.out.println(valor); Ayuda objeto = new Ayuda(); objeto.valor = 5; metodo(objeto); System.out.println(objeto.valor); } class Ayuda { public int valor = 0; }

40 Programación Orientada a Objetos en Java (XXXIV) Arrays en Java Un array es un conjunto de datos del mismo tipo situados de forma consecutiva. Las variables array en Java son referencias. Por tanto, los arrays son objetos y hay que crearlos. tipo + [] + id + = + new + tipo + [ + cantidad + ] + ; El new ha creado el objeto del array. 2 casos: Tipos primitivos: Los datos del array se habrán creado también (ya que los tipos primitivos se crean directamente). Tipos no primitivos (clases): Los datos son referencias a null y por tanto deben crearse a parte.

41 Programación Orientada a Objetos en Java (XXXV) En la declaración se pueden poner los corchetes []: Después del tipo: Indica que TODOS los identificativos que se definan serán arrays. tipo + [] + id... Después del identificativo: Indica que ese identificativo será el único que es array. tipo + id + [] +... En Java no se permite indicar en la declaración del array el número de elementos del mismo. tipo + [] + id + = + new + tipo + [ + cantidad + ] + ; Los arrays en Java tienen índices entre 0 y cantidad – 1. ¿Qué pasa si me salgo de rango?

42 Programación Orientada a Objetos en Java (XXXVI) La inicialización de los elementos de un array puede ser: Elemento a elemento: tipo[] id = new tipo[2]; id[0] = valor; id[1] = valor; Inicialización en declaración: Se usan llaves. tipo[] id = {valor, valor}; La copia entre arrays no se puede realizar mediante la asignación (¿por qué?). Existe un método java.lang.System.arrayCopy que ofrece el mayor rendimiento. El tamaño de un array se puede conocer haciendo uso de un atributo llamado length que todo array en Java posee.

43 Programación Orientada a Objetos en Java (XXXVII) Los arrays multidimensionales se declaran mediante el uso de [] consecutivos. Realmente son referencias que contienen referencias (arrays dentro de arrays). tipo[][] id = new tipo[cantidad1][cantidad2]; tipo[][] id = {{valor, valor}, {valor, valor}}; Para acceder a conocer el número de elementos de cada dimensión se usa el mismo atributo length pero desde referencias distintas. id.length // Indica la cantidad1 id[indice].length // Indica la cantidad2

44 Programación Orientada a Objetos en Java (XXXVIII) Entrada/Salida estándar. java.lang.System.out es de tipo java.io.PrintStream que tiene los métodos necesarios para mostrar información por la salida estándar. java.io.PrintStream.print() java.io.PrintStream.println() java.lang.System.in es de tipo java.io.InputStream que tiene métodos muy básicos de lectura de información desde la entrada estándar. Para leer información más elaborada (cadenas de caracteres) se suelen usar objetos del tipo java.io.BufferedReader. new BufferedReader(new InputStreamReader(System.in))

45 Programación Orientada a Objetos en Java (XXXIX) Excepciones (básico). Las excepciones son una forma de control de flujo. Se usan para indicar situaciones concretas en la ejecución del programa (errores, avisos, etc.) Lanzamiento de excepciones: Uso de la instrucción throw acompañando a un objeto (que es el que se lanza).

46 Programación Orientada a Objetos en Java (XXXX) Gestión de excepciones Bloque de código entre las instrucciones try { } catch(PARAMETRO) { } Relanzamiento: El método puede indicar que no será él el encargado de capturar la excepción y transmite su gestión sucesivamente a los método que le llamaron. Se usa la palabra reservada throws acompañando al tipo de datos de la excepción al final de la definición del método. tipo_retorno + identificativo + ( + [parámetro(s)] + ) + throws tipo_excepcion

47 Programación Orientada a Objetos en Java () Existen dos tipos de excepciones. Excepciones en tiempo de ejecución (Runtime): Como son excepciones que pueden surgir en cualquier momento por errores en tiempo de ejecución, no es obligatoria su captura ni su relanzamiento. Las demás excepciones: Se determina que el desarrollador querrá tener control (capturar o relanzar) este tipo de situaciones, por lo que son obligatorias.

48 Programación Orientada a Objetos en Java () Mapeo de tipos primitivos en tipos abstractos. Java ofrece dentro del paquete java.lang un mapeo de lo tipos primitivos de datos en tipos abstractos (clases). byte Byte char Character short Short int Integer float Float double Double Esta característica tiene multitud de utilidades. Una de las más peculiares es la posibilidad de construir valores primitivos desde valores de tipo cadena.

49 Programación Orientada a Objetos en Java () Ejercicio Propuesto: Desarrollar un programa ( cursojava.param.Parametros ) que presente por pantalla todos los parámetros que se le hayan pasado por línea de comandos.

50 Programación Orientada a Objetos en Java () Ejercicio Propuesto: Crear una clase llamada EntradaDatos dentro del paquete cursojava.util que permita leer de teclado valores de tipos de datos primitivos: int : leerEntero double : leerReal char : leerCaracter String : leerCadena Realizar el control correspondiente mediante iteraciones sucesivas.

51 Programación Orientada a Objetos en Java () Ejercicio Propuesto: Desarrollar un programa ( cursojava.euros.DesgloseCantidad ) que pida al usuario que introduzca un valor entero en euros por teclado y desglose dicha cantidad en: Billetes: 500є, 200є, 100є, 50є, 20є, 10є Monedas: 2є, 1є Visualizar cada cantidad por pantalla.

52 Programación Orientada a Objetos en Java () Ejercicio Propuesto: Desarrollar un programa ( cursojava.aritmetica.MenuAritmetico ) que visualice repetidamente un menú por pantalla donde se puedan seleccionar distintas operaciones a realizar: 1.- Suma 2.- Resta 3.- Multiplicación 4.- División 5.- Resto 6.- ¿Es primo? 7.- Salir. Realizar modularmente la programación necesaria para resolver los cálculos.

53 Programación Orientada a Objetos en Java () Ejercicio Propuesto: Desarrollar un programa ( cursojava.rect.RectanguloRelleno ) que pida al usuario que introduzca la base y la altura (enteras de no más de 15) de un rectángulo para dibujarlo usando asteriscos: ****** Modificarlo para que el usuario introduzca el carácter a usar en el dibujado. Modificarlo para que dibuje un rectángulo sin rellenar. ( cursojava.rect.RectanguloHueco )

54 Programación Orientada a Objetos en Java () Ejercicio Propuesto: Desarrollar un programa ( cursojava.adivina.AdivinaNumero ) que calcule un número aleatorio entre 1 y 100 y pida sucesivamente al usuario que intente adivinarlo indicándole si el número aleatorio es mayor o menor al número que haya introducido. Modificarlo para que el usuario pueda decidir si quiere o no jugar una vez acertado el número.

55 Programación Orientada a Objetos en Java () El objeto this. La referencia para poder usar EL objeto desde el código de una clase. Siempre accesible en entornos no estáticos. No es obligatorio más que en algunas ocasiones: Para poder llamar a un constructor desde otro constructor. Debe ser la primera instrucción del constructor. En casos de ambigüedad entre datos miembro y variables locales de un método.

56 Programación Orientada a Objetos en Java () Relaciones entre objetos. Las clases no son conceptos independientes. La POO permite modelar en dominio del problema a nivel de programación de forma casi directa. Hay dos tipos de relaciones. Inclusión: Define la relación... tiene un.... Se materializa mediante un atributo de una clase en otra. Un atributo de la clase es un objeto de otra clase Herencia: Define la relación... es un.... Se materializa mediante la generalización de una clase sobre otra.

57 Programación Orientada a Objetos en Java () Herencia. Herramienta que permite generalizar conceptos. Se crea una jerarquía. Los conceptos padre definen características comunes que los conceptos hijo heredan como propias. Java no permite la herencia múltiple. Se usa la palabra reservada extends para relacionar las dos clases. class ClaseDerivada extends ClaseBase

58 Programación Orientada a Objetos en Java () Con esta nueva forma de relacionar conceptos surge un nuevo tipo de encapsulación: protegida. Se usa la palabra reservada protected. Define miembros que son accesibles desde la propia clase y desde las clases derivadas. Además, es equivalente a la encapsulación pública para clases del mismo paquete.

59 Programación Orientada a Objetos en Java () Encapsulación. EncapsulaciónDesde la claseDesde clase derivada Desde clase del paquete Desde clase de otro paquete private X en blanco XX protected XXX public XXXX

60 Programación Orientada a Objetos en Java () Gracias a la herencia se permite poder referenciar a un objeto de tipo derivado como tipo base. TipoBase objBase = new TipoDerivado(); Esta utilidad permite poder tratar de la misma forma a todos los elementos derivados (estén en el punto en el que estén dentro de la jerarquía). TipoBase[] array = new TipoBase[cantidad]; array[indice0] = new TipoDerivado1(); array[indice1] = new TipoDerivado2();

61 Programación Orientada a Objetos en Java () Los objetos derivados se construyen en cascada, empezando desde la clase más base hacia abajo. Así puede observarse realmente que cuando se crea un objeto derivado, realmente se crean los objetos base también. Este comportamiento tiene sus implicaciones cuando se pierde el constructor por defecto: Hay que llamar explícitamente al constructor base. Existe el objeto super que representa la referencia al objeto base que también se creó. Este objeto se puede utilizar para: Explicitar el uso de un miembro base. Llamar a constructores base desde constructores derivados. Debe ser la primera instrucción del constructor. Toda clase en Java hereda siempre de la clase java.lang.Object. ¿Qué utilidad puede tener esto?

62 Programación Orientada a Objetos en Java () Polimorfismo. Una característica de la POO aplicable a los métodos. Permite ejecutar un código de método distinto según el objeto que se haya instanciado y al que se referencie. Necesidades para que se dé en Java: Relación de herencia. Exactamente la misma signatura de método en ambas clases (padre e hija).

63 Programación Orientada a Objetos en Java () Clases abstractas. Son clases declaradas con la palabra reservada abstract. public abstract class ClaseDeclaradaAbstracta {... No se pueden instanciar (no se puede hacer new ClaseDeclaradaAbstracta ). Su única finalidad es que otras clases hereden de ellas. Sirven para poder implementar conceptos que no deban existir físicamente.

64 Programación Orientada a Objetos en Java () Los métodos puede declararse con la palabra reservada abstract public abstract void metodo(); Estos métodos no pueden tener cuerpo (se pone un ; al final directamente). Una clase con al menos un método abstracto, debe declararse abstracta. La característica de la abstracción se propaga por la jerarquía. Los métodos abstractos deberán ser implementados gracias al polimorfismo en clases derivadas.

65 Programación Orientada a Objetos en Java () Interfaces. El máximo exponente del polimorfismo. Son equivalentes a una clase completamente abstracta: todos sus métodos son abstractos (sin cuerpo). Se declaran con la palabra reservada ( interface ). public interface NombreInterfaz { // datos // métodos (sólo signatura) } Puede tener datos. Los métodos se declaran de forma normal (sin abstract ) y definen la signatura a implementar en las clases que implementen la interfaz. Las clases pueden implementar todas las interfaces que quieran. Se usa la palabra reservada implements. public class ClaseConInterfaz implements NombreInterfaz

66 Programación Orientada a Objetos en Java () La abstracción permite definir interfaces (signaturas de métodos) que gracias al polimorfismo, implementarán las clases derivadas/implementadoras. Gracias a que un objeto creado como derivado puede referenciarse desde un tipo de datos base (clase abstracta o interfaz), se puede ejecutar código distinto según el objeto derivado sin tener que conocerlo. ClaseAbstracta[] objAbs = new ClaseAbstracta[cantidad]; objAbs[indice0] = new ClaseImplementadora1(); objAbs[indice1] = new ClaseImplementadora2();

67 Programación Orientada a Objetos en Java () Métodos y clases final. Si se indica en un método, no se podrá polimorfear ese método en clases derivadas. class MiClase { public final void metodoNoPolimorfeable() {... Si se indica en una clase, no se podrá heredar de dicha clase. final class ClaseNoHeredable {... Por ejemplo, los tipos de datos básicos mapeados en clases son de tipo final.

68 Programación Orientada a Objetos en Java () Mediante el operador instanceof se pueden conocer los tipos abstractos de un objeto que se creó con el operador new. boolean b = (objeto instanceof TipoClase);

69 Programación Orientada a Objetos en Java () Ejemplos de uso de herencia/polimorfismo: Empresa – Empleados. Lectura / Escritura de datos. (XML, PrintWriter ( System.out o en Servlets), etc.) Editor gráfico. Profesor – Conexión – Alumnos. Interfaz humano computador (texto, ventana, web,...). Desarrollo de componentes ( java.util.* ) java.lang.Object equals, finalize, toString, toString, clone, hashCode

70 Programación Orientada a Objetos en Java () Consecuencias del polimorfismo: Ampliable: Permite poder añadir nuevos tipos de datos completamente nuevos. Plug-ins. Reusable: Permite definir elementos que usan una interfaz y que pueden compilarse una sola vez y durarán para siempre. Flexible: Se puede cambiar el comportamiento de forma muy sencilla (un simple new). Independencia: Los módulos se independizan. Se podrían incluso desarrollar en paralelo.

71 Programación Orientada a Objetos en Java () Excepciones (Avanzado) Las excepciones poseen una estructura jerárquica. Para que un objeto pueda ser lanzado ( throw ) necesita heredar de la clase java.lang.Throwable. De esta clase heredan los errores ( java.lang.Error ) y las excepciones ( java.lang.Exception ). Los desarrolladores deben capturar las excepciones. A partir de Exception heredan muchas excepciones pero las java.lang.RuntimeException no hay obligatoriamente que capturarlas. Las instrucciones catch se ven afectadas por la jerarquía y deben ponerse en orden ascendente, desde las más bajas en la jerarquía a las más altas. ¿Qué pasaría si se pusiese un catch de java.lang.Throwable ?

72 Programación Orientada a Objetos en Java () Bloque finally Esta palabra reservada permite indicar un bloque de código que se ejecutará siempre tanto si se lanza una excepción como si no. Su uso está muy ligado a la liberación correcta de recursos. Por ejemplo, cerrar un fichero, indicar valores en caso de error etc. public static void main(String[] args) {... try {... }... // catches, pero es opcional finally { }

73 Jar Permite conseguir en un fichero englobar distintos ficheros objeto. Se encuentra en el directorio bin del JDK. Tiene diversas opciones c : crear un fichero.jar. v : Crear una salida con información más detallada del proceso. f : Indicar el nombre del fichero. x : extraer ficheros. jar cvf FICHERO.jar FICHEROS_O_RUTAS_CON_.class En el classpath se pueden indicar o rutas (directorios) o ficheros.jar.

74 Patrones de diseño Diseños establecidos para poder dar soluciones a problemas comunes. Usan las herramientas de la orientación a objetos como base pero pueden ser implementados en cualquier lenguaje orientado a objetos (java, C++, Smalltalk, C#,...)

75 Patrones de diseño Singleton Planteamiento: ¿Cómo puedo conseguir controlar el número de instancias que se van a crear de una clase? Solución: Control = Encapsulación. Creación = Constructores. Combinación = Constructores privados. ¿Cómo conseguir que se pueda construir desde dentro si no puedo construir? Acceso mediante un método estático. Control mediante variables estáticas (únicas).

76 Patrones de diseño public class Singleton { private static Singleton instance = null; private Singleton() { } public static Singleton getInstance() { if (instance == null) instance = new Singleton(); return instance; }

77 Patrones de diseño Observer Planteamiento: ¿Cómo puedo avisar de cierto comportamiento de una clase a todos aquellos que quieran conocerlo independientemente de quién quiera conocerlo? Solución: Independencia = abstracción = interfaz. Hay dos elementos: Generador = Observable. Escuchador = Observer.

78 Patrones de diseño

79 El patrón Observer en la API de Java.

80 Acceso a Bases de Datos en Java (I) Uso de la API JDBC (Java Data Base Control) Se trata de una API que define interfaces de acceso a datos completamente independientes de la implementación real de dichos datos. La API engloba a distintos conceptos definidos en el paquete java.sql.

81 Acceso a Bases de Datos en Java (II) El acceso a la implementación de datos lo realiza un driver concreto. Esta carga se realiza usando la API de reflection de Java. Class.forName(NOMBRE_CON_PAQUETES_DE_LA_CLASE_DRIVER); Los drivers no son más que clases Java. El acceso real se realiza a través de conexiones a los datos. La clase DriverManager se encarga de crear la conexión a partir del driver que se necesite. DriverManager.getConnection(URL_DE_CONEXIÓN_SEGÚN_DRIVER); El objeto que se crea implementa la interfaz Connection.

82 Acceso a Bases de Datos en Java (III) Consultas con JDBC De la conexión a datos se pueden crear sentencias (statement). Las sentencias se crean con los métodos: Statement createStatement() PreparedStatement prepareStatement(String) de Connection.

83 Acceso a Bases de Datos en Java (IV) La interfaz Statement permite controlar las sentencias. En su uso más sencillo permite: Actualización: DELETE, UPDATE, INSERT int executeUpdate(String) // Devuelve el nº de elementos actualizados Consulta: SELECT ResultSet executeQuery(String) // Devuelve una vista La interfaz PreparedStatement extiende a Statement por lo que permite lo mismo. En su cadena de especificación se usa el carácter ? para identificar los valores variables. Posee métodos específicos para asignarlos posteriormente ( setXXX(int indice, XXX) ) en orden 1 a N.

84 Acceso a Bases de Datos en Java (V) El recorrido de un objeto que implemente la interfaz ResultSet: ResultSet rs = XXXXX; while(rs.next()) { } Ahora se pueden ir extrayendo los datos usando los métodos getXXX() con dos posibles parámetros: Nombre de la columna. Índice de la columna de 1 a N.

85 Acceso a Bases de Datos en Java (VI) Acceso a MetaDatos Permite conocer la estructura de la base de datos (no su contenido). Se usan las interfaces: DataBaseMetaData: Aporta toda la información acerca del acceso a datos (nombres de tablas, columnas de una tabla, primary keys, foreign keys,...). Se extrae de la interfaz Connection. DataBaseMetaData getMetaData() ResultSetMetaData: Aporta información sobre la vista. Se extrae de la interfaz ResultSet. ResultSetMetaData getMetaData()

86 Swing (I) API que define un extenso conjunto de clases para manejar componentes visuales a nivel de ventana en el paquete javax.swing y subpaquetes. Se basa en una API llamada AWT (Abstract Window Toolkit) definida en java.awt. Gracias a la herencia se puede extender la funcionalidad básica.

87 Swing (II) Todo componente visual hereda de java.awt.Component. Define lo básico: Tamaño. Posición. Dibujado. Visibilidad/Habilitación. Eventos: Teclado Ratón Redimensionado Jerarquía.

88 Swing (III) Además de haber una jerarquía de clases, AWT, y por tanto Swing, define una jerarquía de componentes mediante inclusión.

89 Swing (IV) La clase Container, además de ser un Component, permite almacenar Component s. Container tiene un Component. De esta forma se puede hacer que algunos componentes contengan a otros, que a su vez pueden ser contenedores de otros etc... Esta relación se crea usando el método add.

90 Swing (V) Aunque se puede usar AWT, Swing es todavía más independiente de plataforma. Swing añade nuevas funcionalidades avanzadas. AWT y Swing poseen inmensidad de funcionamiento interno, desde control de hilos independientes hasta comunicación nativa con el Sistema Operativo.

91 Swing (VI) Ventana: En AWT: java.awt.Frame En Swing: javax.swing.Jframe Realmente la de Swing extiende a la de AWT. Se suele extender de ellas para ampliar su funcionalidad. Crean un hilo de ejecución paralelo al de la aplicación. Es un Container por lo que puede contener a otros componentes.

92 Swing (VII) Métodos principales: void setVisible(boolean) : Permite visualizar o no un componente. void dispose() : Cierra la ventana. void setSize(int, int) : Asigna un tamaño a un componente. Width = ancho Height = alto. java.awt.Dimension getSize() : Permite conocer el tamaño de un componente. void setEnabled(boolean) : Permite habilitar/Deshabilitar un componente.

93 Swing (VIII) Panel: En AWT: java.awt.Panel. En Swing: javax.swing.JPanel. En este caso no hay relación herencia. Es el contenedor más sencillo. Su utilidad suele ser la de poder manejar los componentes que engloba desde un único punto. Ayuda a organizar los componentes.

94 Swing (IX) Label: En AWT: java.awt.Label. En Swing: javax.swing.JLabel. En este caso no hay relación de herencia. Permite visualizar un texto simple. Métodos principales: void setText(String) : Asigna el texto. String getText() : Recoge el texto. void setHorizontalAlignment(int) : Sólo en Swing. Asigna el tipo de alineación horizontal del texto. Los valores están definidos en SwingConstants. int getHorizontalAlignment() : Sólo en Swing. Recoge el tipo de alineación horizontal del texto. void setAlignment(int) : Sólo en AWT. Los valores están definidos en Label. int getAlignment() : Sólo en AWT.

95 Swing (X) Cuadros de texto: En AWT: java.awt.TextField. En Swing: javax.swing.JTextField. En este caso no hay relación de herencia. Permite introducir un texto de una línea. Métodos principales: void setText(String) : Asigna el texto. String getText() : Recoge el texto. void setHorizontalAlignment(int) : Sólo en Swing. Asigna el tipo de alineación horizontal del texto. Los valores están definidos en SwingConstants. int getHorizontalAlignment() : Sólo en Swing. Recoge el tipo de alineación horizontal del texto. void setAlignment(int) : Sólo en AWT. Los valores están definidos en Label. int getAlignment() : Sólo en AWT.

96 Swing (XI) Áreas de texto: En AWT: java.awt.TextArea. En Swing: javax.swing.JTextArea. En este caso no hay relación de herencia. Permite introducir un texto de una línea. Métodos principales: void setText(String) : Asigna el texto. String getText() : Recoge el texto. void append(String) : Añade texto al final. void insert(String, int) : Inserta texto en una posición.

97 Swing (XII) Botones: Los hay de muchos tipos. El tipo básico: En AWT: java.awt.Button. En Swing: javax.swing.JButton. En este caso no hay relación de herencia. Métodos principales: void setLabel(String) : Asigan el texto (Deprecated en Swing). void setText(String) : Asigna el texto. String getLabel() : Recoge el texto (Deprecated en Swing). String getText() : Recoge el texto.

98 Swing (XIII) Botones con estado: En AWT: java.awt.CheckBox. En Swing: javax.swing.JCheckBox. En este caso no hay relación de herencia. Métodos principales: void setLabel(String) : Asigan el texto (Deprecated en Swing). void setText(String) : Asigna el texto. String getLabel() : Recoge el texto (Deprecated en Swing). String getText() : Recoge el texto. boolean getState() : Recoge el estado (sólo en AWT).

99 Swing (XIV) Contenedores de items: Listas: En AWT: java.awt.List Métodos: void add(String) : Añade un elemento. void remove(String) : Elimina un elemento. void remove(int) : Elimina un elemento según su posición. int getItemCount() : Indica el nº de elementos que contiene. String getItem(int) : Recoge un elemento según su posición. String[] getItems() : Recoge todos los elementos. int getSelectedIndex() : Recoge el índice del elemento seleccionado. void select(int) : Indica cúal debe ser el elemento seleccionado. void setMultipleMode(boolean) : Permite aplicar la selección múltiple. boolean isMultipleMode() : Indica si permite selección múltiple. String[] getSelectedItems() : Recoge los elementos seleccionados.

100 Swing (XV) En Swing: javax.swing.JList Para modificar su contenido se le asocia un concepto que implemente la interfaz javax.swing.ListModel. Existe una implementación por defecto javax.swing.DefaultListModel. Métodos de DefaultListModel : void add(int, Object) : Añade un elemento en una posición. void addElement(Object) : Añade un elemento al final. Object get(int) : Recoge un elemento de una posición. int getSize() : Indica el nº de elementos. void remove() : Elimina elemento. Recibe o un int o un Object. Métodos de JList : void setModel(ListModel) : Asigna un modelo. int getSelectedIndex() : Indica el elemento seleccionado. int[] getSelectedIndices() : Indica los elementos seleccionados. int getSelectionMode() : Un valor definido en ListSelectionModel.

101 Swing (XVI) Combo boxes: Sólo en Swing: javax.swing.JComboBox Para modificar su contenido se le asocia un concepto que implemente la interfaz javax.swing.ComboBoxModel. Existe una implementación por defecto javax.swing.DefaultComboBoxModel. Métodos de DefaultComboBoxModel : void addElement(Object) : Añade un elemento en una posición. Object getElementAt(int) : Recoge un elemento de una posición. int getSize() : Indica el nº de elementos. void removeElement(Object) : Elimina un elemento. Métodos de JComboBox : void setModel(ComboBoxModel) : Asigna un modelo. int getSelectedIndex() : Indica el elemento seleccionado. int[] getSelectedIndices() : Indica los elementos seleccionados. int getSelectionMode() : Un valor definido en ListSelectionModel.

102 Swing (XVII) Layouts: Se definen ciertos conceptos para poder organizar los componentes dentro de un Container. Los Layouts definen la interfaz LayoutManager y se relacionan con el Container mediante el método void setLayout(LayoutManager) El uso del Layout se especifica al añadir el componente al Container mediante las sobrecargas del método add().

103 Swing (XVIII) java.awt.BorderLayout Permite ordenar componentes de un Container usando los puntos cardinales: NORTH, SOUTH, EAST, WEST y CENTER. Estas constantes están definidas en la propia clase BorderLayout. contenedor.add(componente, BorderLayout.NORTH) java.awt.FlowLayout Ordena los componentes de un Container de izquierda a derecha secuencialmente según el orden de inclusión usando el método add().

104 Swing (XIX) java.awt.GridLayout Permite ordenar los componentes de un Container en forma de matriz bidimensional. La propia clase tiene métodos para poder especificar las dimensiones de la matriz. Los componentes se van asignando a la matriz de izquierda a derecha y de arriba abajo al utilizar el método add().

105 Swing (XX) Gestión de Eventos: Se utiliza el patrón observer pero con implementaciones particulares según el componente y los eventos. Se define una interfaz XXXListener que se asocia con el generador mediante métodos del addXXXListener o removeXXXListener. Para cada XXXListener con más de un método, existe una implementación vacía XXXAdapter para facilitar ciertos casos de uso.

106 Swing (XXI) Eventos comunes (Interfaces asociadas): java.awt.Component java.awt.event.ComponentListener : Eventos relacionados con lo general en un componente. java.awt.event.KeyListener : Eventos de teclado. Sólo son activos cuando el componente tiene el foco. java.awt.event.MouseListener : Eventos de ratón. Sólo referentes al componente. java.awt.event.MouseMotionListener : Evntos de ratón en movimiento y drag-and-drop. java.awt.Container java.awt.event.ContainerListener : Eventos relacionados con la jerarquía de componentes. java.awt.Window java.awt.event.WindowListener : Eventos relacionados con una ventana.

107 Swing (XXII) java.awt.Button, java.awt.List, java.awt.TextField, javax.swing.JAbstractButton, javax.swing.JComboBox, java.awt.event.ActionListener : Evento que se lanza cuando se actúa sobre el componente. java.awt.CheckBox, java.awt.List java.awt.event.ItemListener : Evento que se lanza cuando hay un cambio de selección. java.awt.TextComponent java.awt.event.TextListener : Evento relacionado con el cambio del texto. javax.swing.JList javax.swing.event.ListSelectionListener : Evento relacionado con el cambio de selección de un elemento.

108 Ant Herramienta para definir tareas a realizar. El software se puede conseguir en Simplemente basta con descomprimir. Hay que añadir algunas variables del sistema: ANT_HOME : El directorio base donde está instalado Ant. No es mala idea añadir el directorio bin de la instalación de Ant a la variable PATH.

109 Ant Elementos de un fichero BuildFile de Ant: Proyecto: Un conjunto de objetivos. project Atributos: name : El nombre del proyecto. No es obligatorio. default : El objetivo por defecto que se ejecutará. Es obligatorio. basedir : La ruta sobre la que trabajar. No es obligatorio.

110 Ant Objetivo: Es un conjunto de tareas. target Atributos: name : El nombre del objetivo. Es obligatorio. depends : Permite indicar que un objetivo depende de la ejecución de otro(s). Los distintos objetivos se indican separados por comas. No es obligatorio. if : Permite condicionar la ejecución de un objetivo a la existencia de una propiedad. No es obligatorio. unless : Lo mismo que if pero al contrario, se ejecuta a menos que exista una propiedad. No es obligatorio. description : Una descripción del objetivo. No es obligatorio.

111 Ant Tareas: task En los valores se puede hacer referencia a propiedades definidas con anterioridad. Existen tareas ya creadas, otras opcionales y es muy sencillo crear nuevas tareas. A cualquier tarea se le puede asignar un atributo id para poder identificarla/usarla en otros puntos.

112 Ant Propiedades: Se definen mediante la tarea property o fuera de Ant. Se les asigna un nombre con el atributo name. Para poder tener acceso a ellas se pueden usar indicando el nombre entre ${ y }. Ant permite acceso a las variables del sistema. Un listado de las mismas se puede obtener en la documentación de la API de java en el método java.lang.System.getProperties. Además Ant posee otras propiedades. basedir ant.file ant.version ant.project.name ant.java.version

113 Ant simple example build file

114 Ant Las tareas, y son especiales y se permite definirlas fuera de un objetivo. Cuando se añade el atributo description a un objetivo, es como si se declarase público.


Descargar ppt "Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza"

Presentaciones similares


Anuncios Google