Ple Ut10
-
Upload
david-martin -
Category
Technology
-
view
2.850 -
download
8
description
Transcript of 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
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
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
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
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
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
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)
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.
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
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
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
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)
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
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
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:”
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
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
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
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
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!
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”...
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
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
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
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
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> _
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/
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
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
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=, +=, -=, *=, /=, %=&=, |=, ^=, <<=, >>=, >>>=
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: .
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 {}
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.
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.
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 ()
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
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
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;
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()
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
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
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).
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
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
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
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);}
}
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.
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
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”
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
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
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
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)
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
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");}
}}
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");}
}}
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.
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.
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
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...
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.)
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
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()
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
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
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/