Ple Ut10

66
U.T. 10: Programación Orientada a Objetos Programación Orientada a Eventos C.F.G.S. “Desarrollo de Aplicaciones Informáticas” C.E.F.P. Juan de Colonia (Burgos) Francisco Iglesias Villasol David H. Martín Alonso Serafina Martín Marcos José Antonio Palma Escudero - Curso 2005/2006 - Programación en Programación en Lenguajes Estructurados Lenguajes Estructurados

description

Apuntes de programación: Introducción a Java.

Transcript of Ple Ut10

Page 1: Ple Ut10

U.T. 10:Programación Orientada a ObjetosProgramación Orientada a Eventos

C.F.G.S. “Desarrollo de Aplicaciones Informáticas”

C.E.F.P. Juan de Colonia (Burgos)

Francisco Iglesias VillasolDavid H. Martín AlonsoSerafina Martín Marcos

José Antonio Palma Escudero

- Curso 2005/2006 -

Programación enProgramación enLenguajes EstructuradosLenguajes Estructurados

Page 2: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

2

Contenidos (I)Contenidos (I)1.- Programación Orientada a Objetos

– POO: Objetos– POO: Historia– POO: Diseño con UML

2.- Java: Identidad3.- Java: Herramientas4.- Instalación JDK

– MS Windows– GNU-Linux

5.- Primer programa: Hola Mundo6.- Arrays7.- String8.- Tipos primitivos y referencias9.- Modificadores de acceso

Page 3: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

3

Contenidos (II)Contenidos (II)10.- Operadores11.- Estructuras de control12.- Herencia13.- Polimorfismo14.- Interfaces15.- Paquetes16.- Genericidad17.- Excepciones18.- Entrada/Salida19.- Eventos20.- Referencias21.- Licencia

Page 4: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

4ProgramaciónProgramaciónOrientada a ObjetosOrientada a Objetos

Modelo o paradigma de programaciónProgramación procedimental, modular, orientada a procesos

– El código actúa sobre los datos

Programación orientada a objetos– El programa se organiza en torno a los datos

Programación orientada a eventos– Acciones de respuesta

Beneficios de la POO:Calidad: robustez del código / reducción de erroresReutilización de códigoFacilidad de mantenimientoReducción de costes globalesGestión de elementos con mucha variedad

– Entornos gráficos de usuario

Incorporado a todos los lenguajes modernos

Page 5: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

5

Tipo compuesto: abstracción, estructura con datos y operacionesDatos, atributos, variables → EstadoOperaciones, funciones, métodos → Comportamiento

Principios de la POO:Encapsulación, ocultamiento

– Datos afines se mantienen de forma conjunta y privada– Los procedimientos ligados a esos datos también– Los cambios están controlados– El acceso se hace a través de un interfaz de métodos públicos

Herencia– Clases: definición de tipos– Objetos: múltiples instancias de esas clases – Podemos derivar otras clases con funcionalidades añadidas

Polimorfismo– Una misma acción puede presentar distintas formas en los descendientes

POO: ObjetosPOO: Objetos

Page 6: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

6

1967: Simula'70: Smalltalk1983: C++1985: Eiffel1995: Java2001: C# (plataforma .NET)Incorporado en los lenguajes modernos

– Perl, PHP, Python

POO: HistoriaPOO: Historia

Page 7: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

7

Lenguaje Unificado de Modelado (Unified Modelling Language)Herramienta gráfica de diseño para OO

Describe diversos tipos de diagramasLos diagramas de clase permiten representar

Jerarquía de clases / interfacesElementos

– Atributos, tipos y ámbitos– Métodos y sus parámetros formales– Asociaciones

[TUML]

POO: Diseño con UML (I)POO: Diseño con UML (I)

Page 8: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

8

Actividades ComodínActividades Comodín

Esbozar el diagrama UML de clases de una pila de Esbozar el diagrama UML de clases de una pila de enteros.enteros.

Page 9: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

9

Repasando conceptos... (I)Repasando conceptos... (I)

POO

UML

Clases

Objetos

Atributos

Métodos

Page 10: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

10

Java: IdentidadJava: IdentidadLenguaje orientado a objetos de propósito general

Popularidad asociada a su uso en InternetLenguaje interpretado

Se emplea una máquina virtual para su ejecuciónHay una compilación intermedia para mejorar el rendimiento

Código Fuente → Bytecodes (código binario independiente de arquitectura)Anécdota: El Magic Number es 0xCAFEBABE

Promotor: Sun MicrosystemsEstándar de facto. En 1999 Sun retira la propuesta de estándar ECMA.

OrigenDiseñador: James Gosling (Sun, 1990)Nombre original: OAK (1990-1994)

– Marca registrada de fabricante de tarjetas de vídeo

Referente: C y C++Orientación original: Sistemas embebidos, microelectrónica

Page 11: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

11

Java: Herramientas (I)Java: Herramientas (I)El entorno más extendido es el de Sun, aunque existen otros

J2SE - Java 2 Edición Estándar (Standard Edition)– Versión actual: J2SE 5.0 (2004, renumerada de 1.5.0)– JSE 6 en proyecto para otoño 2006

J2EE - Java 2 Edición Empresa (Enterprise Edition)– Aplicaciones web distribuidas– Versión actual: J2EE 1.4 (JEE 5 disponible para pruebas)

J2ME - Java 2 Edición Micro (Micro Edition)– Modular. Desarrollo para PDA y móviles– Versión actual:

MultiplataformaSoportados por Sun: Solaris, MS Windows, GNU/LinuxVersion Apple para MAC OS X

Page 12: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

12

Java: Herramientas (II)Java: Herramientas (II)Dos versiones:

JRE (Java Runtime Environment)– Ejecución: Máquina virtual + librerías de clases

JDK (Java Development Kit)– JRE + herramientas de compilación/documentación/depuración– Aplicaciones de consola, no incluye herramientas gráficas

Diversidad de entornos de desarrollo gráficos (libres y comerciales)NetBeans 5.0 de SunEclipse 3.2 con licencia EPL (Eclipse Public License)

Page 13: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

13

Java: Herramientas (III)Java: Herramientas (III)java

La máquina virtualjavaw para aplicaciones de ventanaappletviewer para “miniaplicaciones” en web (applets)

javacEl compilador de clases

javadocEl generador de documentación

jdbEl depurador de consola

javapUn desensamblador de clases

Page 14: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

14

Instalación del JDK (I)Instalación del JDK (I)Descarga desde http://java.sun.com

J2SE → Descarga completa ~ 50MInstaladores automatizados para distintos sistemas

MS Windows (ejecutable):– jdk-1_5_0_0X-windows-i586-p.exe (ejecutable)

GNU-Linux:– jdk-1_5_0_0X-linux-i586-rpm.bin (ejecutable + RPM)– jdk-1_5_0_0X-linux-i586.bin (ejecutable, instalación no root)

Tras la instalación basta fijar dos variables de entorno:PATH: Añadir directorio bin

– Para ejecutar las herramientas desde el SO (java, javac, javadoc, etc.)

CLASSPATH:– Para que la máquina virtual Java MVJ localice los ficheros de clases

Cambiándolos se puede trabajar alternadamente con 2 JDK

Page 15: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

15

Instalación del JDK (II)Instalación del JDK (II)Normalmente se requieren derechos de administrador/rootOpciones para establecer PATH y CLASSPATH en MS Windows:

Fichero jdk.bat asociado a un icono de consola de sistema– cmd.exe o command.com + parámetro /k

MiPC/Propiedades/Variables de entornoOpciones para establecer PATH y CLASSPATH en GNU-Linux:

Fichero de inicio particular: ~/.profile o ~/.bashrcFichero global de inicio del sistema: /etc/profileCrear un fichero de inicio particular: /etc/profile.d/jdk.sh

Atención a las diferencias:En DOS el separador de subdirectorios es '\' y en UNIX '/'En UNIX se separa rutas con ':' y en DOS con ';'

– Para evitar conflicto con letras de unidad “X:”

Page 16: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

16

Instalación del JDK (III-Windows)Instalación del JDK (III-Windows)

@echo offPATH=c:\jdk5.0\bin;%PATH%set CLASSPATH=.\;c:\jdk5.0\junit\junit.jarjava -version

Page 17: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

17

Instalación del JDK (IV-Linux)Instalación del JDK (IV-Linux)/etc/profile.d/jdk.sh

#!/bin/shJAVA_HOME="/usr/java/jdk1.5.0_06"JUNIT_JAR="/usr/java/junit4.0/junit.jar"if [ -d "$JAVA_HOME" ]; then PATH="$JAVA_HOME/bin:$PATH"; export PATH JAVA_HOME if [ -f "$JUNIT_JAR" ]; then

CLASSPATH=".:$JUNIT_JAR" else

CLASSPATH="." fi export CLASSPATH;fi

Page 18: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

18

Repasando conceptos... (II)Repasando conceptos... (II)

Bytecodes

Máquina Virtual Java

PATH / CLASSPATH

*.java / *.class

Page 19: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

19Programas en Java:Programas en Java:el método el método mainmain (I) (I)

¿Cómo son los programas en Java?Múltiples ficheros .class compilados a bytecodesAplicación distribuida en directorios, discos o máquinas diversasNo hay enlazado de módulos → “recolección” en tiempo de ejecuciónLa máquina virtual Java crea, instancia objetos a partir de las clases

¿Quién crea el primer objeto para iniciar la ejecución?Método principal main() en alguna claseModificador static: permanente, no necesita ser creado

– Depende de la clase, no de un objeto concreto

Los métodos static no pueden usar variables de instancia– Variables locales (métodos)– Variables de instancia (objetos, probablemente privadas o private)– Variables de clase (static)

main() puede crear ya los primeros objetos, incluso de su propia clase

Page 20: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

20Programas en Java:Programas en Java:el método el método mainmain (II) (II)

A partir de la clase con main() se compila en cascada todojavac ClaseConMain.java

A partir de la clase con main() se ejecuta la aplicaciónjava ClaseConMain argumento1 argumento2 ...

Recibe como parámetro los argumentos de ejecuciónUn array o tabla de cadenas Stringpublic static void main(String[] args)

public class HolaMundo {public static void main(String[] args) {

for (int i = 0; i < 10; i++) {System.out.printf("Hola Mundo --> (%d)\n", i);

}}

} Sintaxis estilo C

Podemos declarar en cualquier sitio

printf() desde JDK 5.0

¡Hola Mundo!¡Hola Mundo!

Page 21: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

21

Compilación y ejecuciónCompilación y ejecuciónEl código se escribe con cualquier editor

– Sintaxis heredada de C– Variables, operadores, expresiones, estructuras de control al estilo C

El nombre del fichero coincide exactamente con el de la clase– HolaMundo.java– Atención a las mayúsculas y minúsculas– Capitalización “Camel Case”: CadaPalabraEmpiezaConMayúscula– Los identificadores de clases empiezan por mayúscula: NombreClase– Variables y métodos empiezan por minúscula: referenciaObjeto– Las constantes (final) todo mayúsculas con '_' : CONSTANTE_EJEMPLO

Se compila para obtener los ficheros de bytecodes– javac HolaMundo.java → HolaMundo.class

Se invoca la máquina virtual Java– Sin argumentos: java HolaMundo– Con argumentos: java HolaMundo uno dos tres “cuarenta y cuatro”...

Page 22: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

22

Arrays (I)Arrays (I)Agrupación sencilla de tipos primitivos u objetos, de tamaño fijo

Existen clases para estructuras con mayor funcionalidad: ArrayListTres etapas:

Declaración: int[] lista; Mp3[] album; Creación: lista=new int[22]; album=new Mp3[100];Asignación: lista[16]=−437; album[5]=new Mp3(“Noa”);

Tamaño integrado como atributo lista.length → 22, album.length → 100Utilidades en la clase Arrays (ordenación, búsqueda, etc.)

public class EjArray {public static void main(String[] args) {

for (int i=0;i<args.length;i++){System.out.println(args[i]);

}}

}

PLE> java EjArray uno 45 “ochenta y uno”uno45ochenta y unoPLE> _println() muestra objetos,

de la forma más adecuada

Page 23: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

23

Arrays (II)Arrays (II)/*** Ejemplo sencillo mostrando la declaración e inicialización* de un array de cadenas de texto. Las cadenas se construyen* empleando el método de utilidad <em>String.format()</em>* que sigue el modelo de <em>printf()</em> en lenguaje C.*/public class EjArray2 {

public static void main(String[] args) {String[] lista;lista=new String[5];for (int i = 0; i < lista.length; i++) {

lista[i] = String.format("--%02d--", i);}for (int i = 0; i < lista.length; i++) {

System.out.println(lista[i]);}

}}

Familia de los printf() y sprintf() de C

PLE> java EjArray2--00----01----02----03----04--PLE> _

Sistema de documentación propio: Javadoc

String: clase para cadenas de texto

Page 24: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

24

Arrays (III)Arrays (III)public class EjArray3 {

private static String[] lista;public static void main(String[] args) {

lista = new String[5];for (int i = 0; i < lista.length; i++) {

lista[i] = String.format("--%02d--", i);}mostrar();

}private static void mostrar() {

for (String s : lista) {System.out.println(s);

}}

}

Método static sólo puede acceder a métodos y atributos static

private: no es accesible desde métodos fuera de su clase PLE> java EjArray3--00----01----02----03----04--PLE> _

Nuevo for (PARACADA)que recorre colecciones

Page 25: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

25

Repasando conceptos... (III)Repasando conceptos... (III)

main()

System.out.println() / System.out.printf() / String.format()

array.length

new

public, private

static, final

Page 26: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

26

StringStringClase básica para cadenas de texto: String

– En el paquete java.lang (clases básicas de Java –las clases se organizan en paquetes)

Representa una cadena de texto no modificable– Los literales “entre comillas” son realmente objetos de la clase String

Operaciones de cadena que generan otros String nuevos– Segmentación, concatenación, etc.

Existe un tipo primitivo char de 2 bytes para caracteres Unicodepublic class EjString {

public static void main(String[] args) {String s1,s2,s3;s1="Hola";s2="Mundo";s1.concat("¿?"); // Inutil: s1 no varías3=s1.concat(s2);System.out.println(s3.toUpperCase());

}}

PLE> java EjStringHOLAMUNDOPLE> _

Page 27: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

27

Tarea...Tarea...

Buscar información sobre las operaciones (métodos) que puede realizar un String.

http://java.sun.com/j2se/1.5.0/docs/api/

Page 28: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

28

Tipos primitivos y referenciasTipos primitivos y referenciasTipos primitivos disponibles para definir variables

– Tamaños fijos, no dependientes de la arquitectura– ¿Es adecuado tener tipos primitivos en un lenguaje OO?– Hay clases de envoltura: Byte, Integer, Float, etc.

Enteros– byte (8 bits), short (16 bits), int (32 bits), long (64 bits)– Con signo, no es evitable (unsigned)

Reales– float (32 bit), double (64 bit)

Otros– char (16 bit – carácter Unicode, conjunto básico)– boolean (lógico, true/false)

Referencias a objetos– Referencias, pero no direcciones de memoria (no son punteros tipo C)– No se puede operar con ellos, su valor no es significativo como en C– Tras declararlas tienen valor nulo, se les debe asignar algún objeto o array

Page 29: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

29

Modificadores de accesoModificadores de accesoÁmbitos:

Atributos, variables miembro (objeto/clase)Variables locales (bloque, no necesariamente al principio)Parámetros formales (método/constructor)

Modificadores:final – Constantes, no se pueden modificar tras inicializarlas

– Aplicable a métodos, para impedir su modificación, en subclases

static – Variables/métodos de clase– Valor compartido por todos los objetos de la clase– Accesibles a través del nombre de la clase. Ej: MiClase.nObjetos– Accesibles desde antes de crear ningún objeto– Se pueden inicializar con un bloque static { ... } de la clase

private/protected/public – Control de acceso– private – acceso sólo desde la clase– protected – acceso desde la clase y descendientes– Si no se especifica, se permite acceso desde el mismo paquete

Page 30: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

30

Expresiones y operadores (I)Expresiones y operadores (I)Aritméticos

Unarios: +, -, ++, -- (prefijos y sufijos)Binarios: +, -, *, /, %A nivel de bit:

– >>, <<, >>> (sin signo), &, | , ^ (O exclusivo), ~ (complemento)

Relacionales>, >=, <, <=, ==, !=

Condicionales!, &&, ||&, | (Y, O sin cortocircuito)^ (O exclusivo)

Asignación=, +=, -=, *=, /=, %=&=, |=, ^=, <<=, >>=, >>>=

Page 31: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

31

Expresiones y operadores (II)Expresiones y operadores (II)Concatenación de cadenas: +Operador condicional ternario: ?:Paréntesis: ()

Prioridad de operadoresDeclaración y paso de parámetrosConversión de tipos

Delimitadores de sentencia: ;Llaves: {}

Delimitador de bloques de códigoInicialización de tablas

Declaración y acceso a tablas: []Creación de objetos: newAcceso a miembros: .

Page 32: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

32

Estructuras de controlEstructuras de controlAlternativas:

if () {} else if () {} else {}switch () {case x: default: }

Repetitivas:Condición de entrada: while () {}Condición de salida: do {} while ();Iteración sobre rangos de valores: for (;;) {}Iteración sobre colecciones: for (:) {}

– Evita el uso de iteradores

Rupturas: break, continue, returnRupturas de estructuras anidadas mediante etiquetas (etiqueta:)

Captura de excepciones:Ruptura de secuencia provocado por errores o interrupcionestry {} catch () {} finally {}

Page 33: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

33

Ejercicios IEjercicios IEscribir una clase Ticket con un método tirar() que nos devuelva números enteros en secuencia en cada llamada: 1, 2, 3, 4,... Para usarlo se escribirá una segunda clase ClienteTicket ejecutable, donde resida el main(), que hará entre 5 y 10 tiradas (aleatorio entre 5 y 10, empleando Math.random()), reiniciará el ticket y hará otro lote de 5-10 tiradas.

Page 34: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

34

Ejercicios IIEjercicios IIEscribir un programa que nos muestre los argumentos pasados al programa numerados. Añadir a la clase anterior un método que ordene las cadenas antes de mostrarlas. Se propone emplear el método de selección del mínimo e ir trasvasando las cadenas entre dos ArrayList.

ArrayList se puede usar para objetos de cualquier tipo. Por eso será necesario convertir el objeto recuperado a (String) antes de poder acceder a métodos de cadena de texto. Más adelante mejoraremos este aspecto.ArrayList proporciona métodos de acceso, entre los que podemos señalar:

– size(): Tamaño de la lista– add(): Agregar objeto– get(): Recupera un objeto– remove(): Retira un objeto

Existen otras colecciones: Vector, LinkedList, TreeSet, etc.

Page 35: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

35

Clases en Java (I)Clases en Java (I)Diseño:

Declaración: public class EjemploUT10 {}Atributos: Variables que representan estado

– Tipos primitivos o referencia a objetos de otras clases– De cada objeto: variables de instancia– Del conjunto de la clase: variables de clase (static)– Probablemente privados

Métodos get y set (poner y consultar) para acceder a ellos

Métodos: Código que implementa capacidades– Sobrecarga

Mismo identificador, diferentes en numero y tipo de parámetros– Inicialización de objetos: constructores

Inicialmente disponemos automáticamente de un constructor elementalvacío y sin parámetros

– Inicialización de variables de clase: bloques static– Métodos de utilidad

Instanciación de objetos: new EjemploUT10 ()

Page 36: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

36

Clases en Java (II)Clases en Java (II)import java.util.ArrayList;public class EjUT10 {

private static int n;private static ArrayList<EjUT10> lista;private String descripcion;static {

n = 0;lista = new ArrayList<EjUT10>();new EjUT10();new EjUT10();

}EjUT10() {

descripcion = String.format("UT10 #%d", n++);lista.add(this);

}EjUT10(String nombre) {

descripcion = nombre;lista.add(this);

}public String toString() { return descripcion; }public static ArrayList consultarLista() { return lista; }public static void main(String[] args) {

new EjUT10("El tercero, creado en main()");for (Object o : EjUT10.consultarLista()) { System.out.println(o); }

}}

(1) Se ejecuta el bloque static de la clase

(2) Inicializamos un ArrayList de objetos

(3) Creamos un par de instancias

(4) Constructor sin argumentos empleado en (3)

(5) En main, creamos el 3º

(6) Constructor con argumentos empleado en (5)

(7) Método de consulta, static, para acceder a la lista (8) Texto de toString

Page 37: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

37

Repasando conceptos... (IV)Repasando conceptos... (IV)

Clases de envoltura: Byte, Integer,...

Bloque static

Constructor

Sobrecarga

this / super

Page 38: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

38

Herencia: subclasesHerencia: subclasesJerarquía de funcionalidad

A partir de clases más generales podemos ir añadiendo o concretando funcionalidades.

– FiguraGeométrica → Figura2D → Rectángulo → Cuadrado– Persona → Empleado → Directivo

Declaración: class Hijo extends PadreJava no soporta herencia múltiple

– Puede provocar conflictos de duplicidad.

Acceso directo a métodos heredados– Condicionado por los modificadores de acceso (private)

Podemos sobrescribir métodosAl sobreescribir se ocultan los métodos heredados

– super referencia a la clase padre en caso de ocultación– this referencia al propio objeto

Habitual el paso de parámetros con el mismo nombre del atributo: this.x = x;

Page 39: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

39

Herencia: polimorfismoHerencia: polimorfismoUna referencia de una clase puede apuntar a objetos de clases derivadas.

Sólo permitirá acceder a métodos y propiedades de la clase con que se declaró.En caso de que los métodos originales estén sobrescritos se utilizan las versiones más avanzadas, las del objeto real (ligadura dinámica).public abstract class A {

public String toString() { return "A"; }}public class A1 extends A {

public String toString() { return "A1";}}public class EjPoli {

public static void main(String[] args) {A a = new A1();System.out.println(a.toString());

}}

PLE> java EjPoliA1PLE> _a es un objeto A1, y

por ello es también A

a es A, pero accedemosal método sobrescrito

Podemos omitir lallamada a toString()

Page 40: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

40

Herencia: interfaces - abstractHerencia: interfaces - abstractElementos heredables incompletos

No permiten instanciación directaPermiten declaración de referencias

Clases/métodos abstractos: abstractMétodos de obligada cumplimentación en clases hijasClase abstracta por definición o por tener métodos abstractos

Interfaces: Definiciones de métodos públicos y constantesMétodos sin implementaciones

– Public y abstract de forma implícita

Declaraciones de constantes finalPuede heredar otras interfaces con extendsPermite herencia múltiple

– no código → no conflicto– Las clases derivadas se definen con implements en vez de extends

Page 41: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

41

PaquetesPaquetesLas clases se organizan en paquetes

Sistema jerárquico universalIdentificación paralela a los nombres de dominio de Internet

– java.util– cesbur.dai.ple

Permite la duplicidad de nombres de clases, etc.Estructura de subdirectorios paralela

Búsqueda en directorios a partir de CLASSPATHBúsqueda en ficheros comprimidos zip/jar a partir de CLASSPATH

Identificación al comienzo del fichero fuente de la clase– package cesbur.dai.ple;

Necesidad de localizar los paquetes a utilizar– import java.util.*; o import java.util.ArrayList;– Evitando importaciones: java.util.ArrayList lista;– java.lang no requiere importaciones

Page 42: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

42

Ejercicios III: HerenciaEjercicios III: HerenciaCompletar el diagrama de clases UML correspondiente a una agenda y escribir las clases e interfaces indicadas. Escribir una clase cliente que permita simplemente comprobar la funcionalidad de la agenda. Más adelante se verán mecanismos de entrada/salida que nos permitirán mejorar ese cliente.

Generar el diagrama con alguna herramienta como JUDE y probar la capacidad de generación automática de código (exportar Java).

Page 43: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

43

Ejercicios IV: HerenciaEjercicios IV: HerenciaCrear una clase Vector3D que para manipular vectores en tres dimensiones. La clase debe implementar los métodos públicos detallados en el diagrama UML; la implementación y los atributos privados serán determinados por el programador.

Crear la clase derivada Vector2D para vectores en el plano z=0

x

y

z

θ

φ

r

Page 44: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

44

GenericidadGenericidadProblema: Clases que actúan de contenedores

colecciones, listas, etc.Funcionalidad común aplicable a tipos diversos¿Cómo gestionar la diversidad de tipos?

Opción 0: Referencias genéricas a objetos ObjectNecesitamos adaptaciones (casting) continuamenteControl de tipos muy debilitado → Errores en tiempo de ejecución

Solución: Genericidad, parametrización de tiposIndicamos al contenedor, como parámetro, el tipo deseadoA partir de JDK 5.0.Incorporado en las clases antiguas de la API de JavaAplicable a nuevas clases creadas por el programador

Page 45: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

45

Genericidad (II)Genericidad (II)Declaraciones: Identificador para el tipo-parámetro

En mayúsculas, E y G habitualmente– Parámetro formal: class Grupo<E>– Parámetro actual: Grupo<AlumnosFP> g531b = new Grupo<AlumnosFP>()

Genericidad restringida: se puede acotar los tipos permitidos– class Grupo<E extends Alumno>– Podemos disponer de los métodos de la clase base (Alumno)

En las definiciones de la clase el identificador se usa como tipo– int introducir (E nuevoElemento)– E sacar (int posicion)

Con genericidad restringida podemos acceder a miembros– E tmpElemento = new E(); tmpElemento.metodoDeAlumno();

Declaración de la clase

Declaración e instanciación de objeto

Page 46: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

46

Genericidad (III)Genericidad (III)public class Pareja<E extends Integer> {

private E elemA, elemB;Pareja() {}Pareja(E elemento1, E elemento2) {

this.elemA = elemento1;this.elemB = elemento2;

}public E consultarA() {return elemA;}public E consultarB() {return elemB;}public void ponerA(E elemento) {elemA = elemento;}public void ponerB(E elemento) {elemB = elemento;}public String toString() {

return String.format("(%d, %d)", elemA, elemB);}

}

Page 47: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

47

Ejercicios II-bEjercicios II-bEscribir un programa que nos muestre los argumentos pasados al programa numerados. Añadir a la clase anterior un método que ordene las cadenas antes de mostrarlas. Se propone emplear el método de selección del mínimo e ir trasvasando las cadenas entre dos ArrayList.

Revisar el ejercicio anterior empleando correctamente la genericidad de la clase ArrayList y evitando todas las conversiones superfluas.

Page 48: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

48

ExcepcionesExcepcionesHerramienta de paso de información entre métodos

Evitan reutilizar el valor devuelto con valores “especiales” de errorPermiten “reintentos” (Ojo: mejor “abortar” que “colgar”)

Objetos “lanzables” (derivan de Throwable)Se pueden lanzar o pasar: throw

throw new PLEException(“Ejemplo de excepción”);– El método “lanzador” debe informar en la declaración

EjemploPLE() throws PLEException

Se pueden capturar: estructuras try/catch/finally– Tras la captura se pueden relanzar o encapsular en una nueva

throw new PLEException(otraExcepcion)

Jerarquía ampliable por herenciaThrowable/Error (fatales, de sistema) y Throwable/Exception

– RuntimeException: Finalización de programa, no exigen poner throwstry/catch permite captura múltiple, selectiva, basada en herencia

Page 49: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

49

Excepciones (II)Excepciones (II)public class División {

public static void main(String[] args) {División ej = new División();ej.tablaDividir(17, 2, 1); // Divide -2, -1, 0, 1, 2ej.tablaDividir(17, 3, 2); // Divide -3, -1, 1, 3

}private void tablaDividir(int n, int borde, int salto) {

int i=0, cociente;// try {for (i = -borde; i <= borde; i += salto) {

cociente = n / i;System.out.printf("%d/%d = %d\n", n, i, cociente);

}// } catch (ArithmeticException e) {// System.err.println("No válido -> " + e);// } finally {// System.err.printf("--- Fin: i=%d ---\n", i);// }

}}

Al dividir por cerointerrumpe el programa

Podemos capturar el errory salir de forma más “elegante”

Page 50: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

50

Excepciones (III)Excepciones (III)public class División {

public static void main(String[] args) {División ej = new División();ej.tablaDividir(17, 2, 1);ej.tablaDividir(17, 3, 2);

}private void tablaDividir(int n, int borde, int salto) {

int i=0, cociente;for (i = -borde; i <= borde; i += salto) {

cociente = dividir(n, i);System.out.printf("%d/%d = %d\n", n, i, cociente);

}}private int dividir(int n, int d) throws PLEException {

if (d == 0) throw new PLEException("División x cero");return n / d;

}}

Error de compilación: Excepción no manejada Opción a) Añadir throws Opción b) Añadir try/catch

b0) “Repetir” el mismo error ¡¡¡OJO!!!b1) “Evitar” el errorb2) “Propagar” o “encadenar” excepción

Nos anticipamos al error ylanzamos una excepción propia

Page 51: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

51

Excepciones (IV)Excepciones (IV)package cesbur.ple.dai;public class PLEException extends Exception {

public PLEException() {super();

}public PLEException(String message) {

super(message);}public PLEException(String message, Throwable cause) {

super(message, cause);}public PLEException(Throwable cause) {

super(cause);}

}

Las excepciones no suelen llevar códigoNos preocupa sólo la jerarquía para capturarlas

Éste es el constructor que nos permite el“encadenamiento” de una excepción dentro de otra

Page 52: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

52

Entrada: ScannerEntrada: ScannerLa clase Scanner permite capturar valores

Desde teclado (System.in), ficheros (File), cadenas (String), etcMétodos nextXXX() que devuelven el siguiente elemento leído

Actúa como un iterador (interfaz Iterator)hasNext(), hasNextByte(), hasNextInt(), hasNextFloat(),...nextLine(), nextByte(), nextInt(), nextFloat(),... Excepciones:

– InputMismatchException: tipo incorrecto– NoSuchElementException: entrada agotada– IllegalStateException: Scanner cerrado

Page 53: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

53

Entrada: Scanner (II)Entrada: Scanner (II)package cesbur.dai.ple;import java.util.*;public class División2 {

public static void main(String[] args) {int n;Scanner teclado = new Scanner(System.in);while (true) {

try {n = teclado.nextByte();System.out.printf("%d/%d = %d\n", 33, n, 33/n);

} catch (InputMismatchException e) {teclado.nextLine();System.err.println("Número entero, porfa...");

}}

}} Introduciendo un cero sí da error; pero si nos

“despistamos” con el catch, se puede “colgar”: catch (exception e)

Page 54: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

54

ArchivosArchivosFlujos de entrada/salida básicos para acceso a archivos

– InputStreamReader (ej: FileReader)– OutputStreamWriter (ej: FileWriter)

Métodos read() y write() elementales– FileInputStream, FileOutputStream para acceso binario (bytes)

Más funciones en los filtros (flujos sobre otros flujos)BufferedReader, BufferedWriter

File: Objetos para identificar ficheros y directoriosUsado por constructores de Scanner y PrintStreamCreación automática de los flujos de bajo nivel necesarios

Page 55: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

55

Archivos (II)Archivos (II)package cesbur.dai.ple;import java.io.*;public class CreaArchivo {

public static void main(String[] args) {File f = new File("EjArchivosJava.dat");if (!f.exists()) {

try {PrintStream out = new PrintStream(f);for (int i = 0; i < 10; i++) {

out.printf("-- %02d --\n", i);}out.close();

} catch (java.io.IOException e) {throw new RuntimeException(e);

}} else {

throw new RuntimeException("Archivo ya existe");}

}}

Page 56: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

56

Archivos (III)Archivos (III)package cesbur.dai.ple;import java.util.*;import java.io.*;public class LeeArchivo {

public static void main(String[] args) {File f = new File("EjArchivosJava.dat");if (f.exists()) {

try {Scanner in = new Scanner(f);for (int i = 0; i < 10; i++) {

System.out.println(in.nextLine());}in.close();

} catch (java.io.IOException e) {throw new RuntimeException(e);

}} else {

throw new RuntimeException("Archivo no existe");}

}}

Page 57: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

57

Ejercicios V: ExcepcionesEjercicios V: ExcepcionesDiseñar una clase Bingo, en el paquete cesbur.dai.ple, con los siguientes métodos públicos:

sacarBola(): Devuelve un valor entero no repetido dentro del rango (rango establecido por el constructor).ultimaBola(): El valor de la última bola sacada.haSalidoBola(): Que nos informe si un valor, una bola ha salido ya.haAcabado(): Si el bombo está ya vacío o quedan bolas.consultarNumBolas(): Cuántas bolas quedan en el bombo.toString(): Cadena de texto con las bolas sacadas, en orden de salida.

Además se producirán diversas excepciones, derivadas de BingoException:

BingoRangoException: Cuando los valores proporcionados al constructor o a haSalidoBola() estén fuera de rango.BingoOperacionException: Si llamamos a sacarBola() con el bombo vacío o a ultimaBola() antes de la primera extraccion.

Page 58: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

58

Ejercicios III-b: AgendaEjercicios III-b: AgendaEscribir una clase cliente para la Agenda del ejercicio III que permita agregar, listar y borrar contactos.

Page 59: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

59ProgramaciónProgramaciónorientada a eventosorientada a eventos

Paradigma de programaciónNo existe una secuencia de ejecución principio → finPorciones de código que se ejecutan individualmente

– Cambios de estado de la aplicación o ventana

Desencadenantes: eventos– Provocados por el usuario, por el sistema o por el propio programa

Modelo de programación esencial en entornos gráficosGUI: Interfaz gráfica de usuarioCampo de operación compartido con POO / programación visual

– Componentes gráficos – Objetos – gestión de eventos

Diferentes componentes producen distintos eventosBotones, casillas, menús, cuadros de texto, listas desplegables, etc.A cada evento se le puede asociar un código

– Sustituye o complementa el comportamiento predeterminado por el sistema

A través de un (objeto) gestor/delegado/oyente

Page 60: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

60

Ejemplos de eventosEjemplos de eventosMovimiento del ratón, llegada/salida del ratón de un componentePulsación/liberación de botón de ratónPulsación de botón (botón del entorno)Selección de menúCambio de foco, activación del componenteCreación/liberación de componente/ventanaActivación/desactivación de casillas de opciónAvance/retroceso en casilla de textoCambio de contenido/textoAlertas de reloj programadasActivación de servicios en el sistema...

Page 61: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

61Ejercicios VI:Ejercicios VI:Interfaz para Ticket (descripción)Interfaz para Ticket (descripción)

De forma guiada, realizar un cliente gráfico para la clase Ticket.Lo métodos sacar() y reset() serán invocados pulsando un botón

Entorno de desarrollo visual que autogenere clases y códigoJava + Componentes Swing + Eclipse + Visual Editor

– Portable a otros entornos de desarrollo: Netbeans

Acceso simplificado a las características de los componentesClases de interfaz para integrar con nuestras clases de procesoFinalmente se editan manualmente métodos asociados a cada evento

J-área de texto

J-botones

J-paneles:contenedores para

colocación, margenes,bordes, etc.)

Page 62: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

62Ejercicios VI:Ejercicios VI:Interfaz para Ticket (diseño)Interfaz para Ticket (diseño)

Nuevo Proyecto: Proyecto Java (Nombre: UT10 - Eventos)Nueva Clase: Clase Visual Java

Nombre: VentanaEdit (paquete cesbur.dai.ple)Tipo: Swing/Aplicación

JPanelExterior:Disposición: Centro, BorderLayout con espacio 10 (Vertical Gap)Borde vacío, con márgenes 10,10,10,10

JPanelBotones:Disposición: Sur, GridLayout con espacio horizontal 10

– JBotónAceptar (Aceptar, izquierda) y JBotónCancelar (Cancelar, derecha)

JPanelBorde:Borde con título: UT10 Eventos

– JPanelPrincipal:Disposición: BorderLayout con espacio vertical 10Borde vacío, con márgenes 10,10,10,10

– JTexto (centro)– JBotónAvanzar (sur)

Mnemónicos (atajos de teclado)

Swing/Contenedores/JPanel

Swing/Componentes/JButton

Swing/Componentes/JTextArea

Page 63: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

63Ejercicios VI:Ejercicios VI:Interfaz para Ticket (eventos)Interfaz para Ticket (eventos)

Agregar a la clase visual un objeto Ticket– Añadir atributo como referencia a Ticket– Crear un Ticket. Se puede hacer (entre otros) en el constructor

Pulsación del JBotónAceptar– Salida del programa: System.exit(0);

Pulsación del JBotónAvanzar– Obtener un valor del Ticket con sacar()– Colocarlo como texto de JTexto con setText()

Pulsación del JBotónCancelar– Poner el Ticket a 0 con reset()

Experimentación: A partir de la aplicación básica se pueden hacer variaciones o añadir otros componentes

– Propuesta: Sumadora, calculadora, recogiendo valores con getText()

Page 64: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

64

Referencias I (POO)Referencias I (POO) Java. Manual de Referencia. [SCHLDT]

Patrick Naughton y Herbert SchildtMcGraw-Hill, 1977

Programación en Java 2. Serie Schaum. [SCHM]Jesús Sánchez Allende y otrosMcGraw-Hill, 2005

Tutorial de UML – Modelo de clases. [TUML]Patricio Salinas C. <[email protected]>http://www.dcc.uchile.cl/~psalinas/uml/modelo.html

Wikipedia [WIKI]Fundación Wikimedia, con licencia GFDL (GNU Free Documentation License)http://es.wikipedia.org / http://en.wikipedia.org

Page 65: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

65

Referencias II (JDK)Referencias II (JDK) Java Tutorial [JTUT]

Sun Microsystemshttp://java.sun.com/docs/books/tutorial

API de Java. [JAPI]Sun Microsystemshttp://java.sun.com/reference/api

The Java Language Specification [JLNG]Sun Microsystemshttp://java.sun.com/docs/books/jls/

Duke, la mascota [DUKE]http://mlv.lolipop.jp/mascots/duke

Page 66: Ple Ut10

ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006

66

Licencia de usoLicencia de uso

Este material está disponible bajo una Licencia Creative Commons,

http://creativecommons.org/licenses/by-nc-sa/2.5/es/