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

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE (SL-110) CAPÍTULO 5: DECLARACIÓN, INICIALIZACIÓN Y USO DE VARIABLES Ing. Ronald Criollo.
Advertisements

Curso de java básico (scjp)
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
Sun Microsystems desarrolló, en 1991, el lenguaje de programación orientado a objetos que se conoce como Java. La intención de Sun era crear un lenguaje.
Características Generales y Entornos de Desarrollo
Curso de Java Capitulo 1: Introducción a Java Profesor:
Introducción a la programación en JAVA
Programación Interactiva Introducción a Java
Uso de variables de tipo valor
Curso de JAVA. Iniciando con las Técnologias Java.
INSTITUTO TECNOLOGICO DE MINATITLAN
Orientación a Objetos con Java SE
Introducción Abdelahad, Corina Natalia Abdelahad, Yanina Zoraida
Programación Orientada a Objetos
1.2 Sintaxis del lenguaje Java.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
ESTRUCTURAS DE SECUENCIA
Objetos y Clases en Java
Ingeniero Anyelo Quintero
Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código.
Conceptos Básicos de Java
Material Elaborado por: Lic. Saily González. CONTENIDO 2.1- Estructura de una Aplicación JAVA 2.2- Elementos básicos de la Programación JAVA Comentarios.
Primer Programa en JAVA
Unit 1: Overview and Positioning
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Modificadores.
POO Java Módulo 3 Elementos de programas Identificadores
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Clasificación del Software
UNIVERSIDAD DE MANAGUA I CUATRIMESTRE INTRODUCCION A LA PROGRAMACION
SCJP Sun Certified Programmer for Java 6
LENGUAJE “C” Programación.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
El lenguaje de programación Java
JAVA J.A.C..
Tema 2: Los tipos de datos
Introducción a la Programación. Lenguaje de Máquina.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Sintaxis de C# (Declaraciones y Tipos)
Curso Programación en Java
Tipo de Datos Básicos.
Un programa no es nada mas que una serie de instrucciones dadas al ordenador en un lenguaje entendido por el, para decirle exactamente lo que queremos.
1 Objetos y Clases en Java ELO-329: Diseño y Programación Orientados a Objetos.
Curso de Java La tecnología Java
Resumen Fundamentos de Programación/ Programación I
MBA. LIDA LOOR MACIAS2 Historia. El perfil de Java. Los padres de Java son James Gosling (emacs) y Bill Joy (Sun) Java desciende de un lenguaje llamado.
Programación orientada a objetos. El método main es el comportamiento por el cual comienzan todos los programas en Java, de la misma forma en la que C,
Ivette C. Martínez - Héctor Palacios Java – Modulo 1 Introducción y Fundamentos del lenguaje de programación Java.
MBA. LIDA LOOR MACIAS 1. 3 martes, 13 de octubre de 2014 OBJETIVO: El estudiante adquirirá los fundamentos básicos de la programación orientada a objeto.
IDENTIFICADORES Un identificador es un "nombre" que nos permite dirigirnos específicamente a una de las entidades propias del lenguaje, es decir, son los.
FUNDAMENTOS DE PROGRAMACIÓN
Términos algoritmo diseñar algoritmo implementar algoritmo
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.

Fundamentos de Programación
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
UNIDAD 4: Introducción a la Lógica Computacional Objetivo : Interpretar y aplicar adecuadamente los fundamentos básicos de la estructura y funcionamiento.
Elementos básicos.  Fuertemente tipeado.  Sintaxis similar a C/C++.  Sin punteros: garbage collection.  Portable.  Integra librerías para objetos.
Clases “ Es una Abstracción de un elemento del mundo real ”
Introducción a Java Sintaxis de Java QUIMESTRE II PARCIAL I.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Entorno de Trabajo e Introducción a Java Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 1.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Java y JSP Introducción a Java. Reseña histórica  Surge en 1991 por Sun Microsystems  Desarrollado para electrodomésticos  Se buscaba un código neutro.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

Dr. Diego Lz. de Ipiña Gz. de Artaza Java 1.4 Dr. Diego Lz. de Ipiña Gz. de Artaza http://paginaspersonales.deusto.es/dipina dipina@eside.deusto.es

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.

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. 1991 Sun Microsystems intenta crear un lenguaje para programar dispositivos eléctricos.

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: Entorno controlado.

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)

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

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.

Programación Orientada a Objetos en Java (II) Palabras reservadas en Java. abstract default goto operator synchronized boolean do if outer this break double implements package threadsafe byte else import private throw byvalue extends inner protected throws case false instanceof public transient cast final int rest true catch finally interface return try char float long short var class for native static void const future new super volatille continue generic null switch while

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

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.

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

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

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 método. @param id @return @throws Exception

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.

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 (-32768 < 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.

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.

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

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

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)

Programación Orientada a Objetos en Java (XIV) Edición, Compilación y Ejecución en Java. Software: http://www.java.sun.com 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.

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.

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.

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?

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;

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. Operador Operación Nivel de Precedencia +, - (unitarios) +25 1 -6.725 *, /, % 5 * 5 es 25 2 25 / 6 es 4 25 % 6 es 1 +, - 2 + 3 es 5 3 2 – 3 es -1

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

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.

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

Programación Orientada a Objetos en Java (XXIII) Operadores relacionales. Operadores que consiguen uno de los dos valores lógicos: true o false. Operador Significado Ejemplo == 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

Programación Orientada a Objetos en Java (XXIV) Operadores lógicos: Operador Significado Tabla de verdad Ejemplo ! No lógica, negación a !a !(x < y) true false || O lógica b a || b x < n || y > 9 && Y lógica a && b x < n && y > 9 ^ O exclusiva a ^ b x < n ^ y > 9

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 ‘&’

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

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

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) De 1 a N: do ... while do while(CONDICION);

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.

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?

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.

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

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;

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.

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?

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.

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

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

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

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

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.

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.

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.

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.

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.

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.

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)

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.

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.

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.

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

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.

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

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

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?

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

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.

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.

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

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

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.

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

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

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.

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?

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

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.

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

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

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;

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.

Patrones de diseño

Patrones de diseño El patrón Observer en la API de Java.

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.

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.

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.

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.

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.

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

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.

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.

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.

Swing (IV) La clase Container, además de ser un Component, permite almacenar Components. 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.

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.

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.

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.

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.

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.

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.

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.

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.

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

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.

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.

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.

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

Swing (XVIII) java.awt.BorderLayout java.awt.FlowLayout 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().

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

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.

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.

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.

Ant Herramienta para definir tareas a realizar. El software se puede conseguir en www.ant.apache.org 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.

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.

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. <target name=“objetivo” if=“propiedad”/> unless: Lo mismo que if pero al contrario, se ejecuta a menos que exista una propiedad. No es obligatorio. <target name=“objetivo” unless=“propiedad”/> description: Una descripción del objetivo. No es obligatorio.

Ant Tareas: task <name attrib2=“value1” attrib2=“value2” .../> 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.

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

Ant <project name="MyProject" default="dist" basedir="."> <description> simple example build file </description> <property name="src" location="src"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <target name="init"> <tstamp/> <mkdir dir="${build}"/> </target> <target name="compile" depends="init" description="compile the source"> <javac srcdir="${src}" destdir="${build}"/> <target name="dist" depends="compile" description="generate the distribution"> <mkdir dir="${dist}/lib"/> <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/> <target name="clean" description="clean up" > <delete dir="${build}"/> <delete dir="${dist}"/> </project>

Ant Las tareas <property>, <typedef> y <taskdef> 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.