• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Ple Ut10
 

Ple Ut10

on

  • 5,009 views

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

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

Statistics

Views

Total Views
5,009
Views on SlideShare
4,992
Embed Views
17

Actions

Likes
0
Downloads
79
Comments
0

1 Embed 17

http://www.slideshare.net 17

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Ple Ut10 Ple Ut10 Presentation Transcript

    • Programación en Lenguajes Estructurados 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 -
    • 2 Contenidos (I) 1.- Programación Orientada a Objetos – POO: Objetos – POO: Historia – POO: Diseño con UML 2.- Java: Identidad 3.- Java: Herramientas 4.- Instalación JDK – MS Windows – GNU-Linux 5.- Primer programa: Hola Mundo 6.- Arrays 7.- String 8.- Tipos primitivos y referencias 9.- 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) 10.- Operadores 11.- Estructuras de control 12.- Herencia 13.- Polimorfismo 14.- Interfaces 15.- Paquetes 16.- Genericidad 17.- Excepciones 18.- Entrada/Salida 19.- Eventos 20.- Referencias 21.- Licencia ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • Programación 4 Orientada a Objetos Modelo o paradigma de programación Programació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 errores Reutilización de código Facilidad de mantenimiento Reducción de costes globales Gestió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 POO: Objetos Tipo compuesto: abstracción, estructura con datos y operaciones Datos, atributos, variables → Estado Operaciones, 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 ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 6 POO: Historia 1967: Simula '70: Smalltalk 1983: C++ 1985: Eiffel 1995: Java 2001: C# (plataforma .NET) Incorporado en los lenguajes modernos – Perl, PHP, Python ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 7 POO: Diseño con UML (I) Lenguaje Unificado de Modelado (Unified Modelling Language) Herramienta gráfica de diseño para OO Describe diversos tipos de diagramas Los diagramas de clase permiten representar Jerarquía de clases / interfaces Elementos – Atributos, tipos y ámbitos – Métodos y sus parámetros formales – Asociaciones [TUML] ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 8  Actividades Comodín  Esbozar el diagrama UML de clases de una pila de 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) 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: Identidad Lenguaje orientado a objetos de propósito general Popularidad asociada a su uso en Internet Lenguaje interpretado Se emplea una máquina virtual para su ejecución Hay 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 Microsystems Estándar de facto. En 1999 Sun retira la propuesta de estándar ECMA. Origen Diseñ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) 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: Multiplataforma Soportados por Sun: Solaris, MS Windows, GNU/Linux Version 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) 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 Sun Eclipse 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 La máquina virtual javaw para aplicaciones de ventana appletviewer para “miniaplicaciones” en web (applets) javac El compilador de clases javadoc El generador de documentación jdb El depurador de consola javap Un 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) Descarga desde http://java.sun.com J2SE → Descarga completa ~ 50M Instaladores 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) Normalmente se requieren derechos de administrador/root Opciones 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 entorno Opciones para establecer PATH y CLASSPATH en GNU-Linux: Fichero de inicio particular: ~/.profile o ~/.bashrc Fichero global de inicio del sistema: /etc/profile Crear 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) @echo off PATH=c:jdk5.0bin;%PATH% set CLASSPATH=.;c:jdk5.0junitjunit.jar java -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) /etc/profile.d/jdk.sh #!/bin/sh JAVA_HOME=quot;/usr/java/jdk1.5.0_06quot; JUNIT_JAR=quot;/usr/java/junit4.0/junit.jarquot; if [ -d quot;$JAVA_HOMEquot; ]; then PATH=quot;$JAVA_HOME/bin:$PATHquot;; export PATH JAVA_HOME if [ -f quot;$JUNIT_JARquot; ]; then CLASSPATH=quot;.:$JUNIT_JARquot; else CLASSPATH=quot;.quot; 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) 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
    • Programas en Java: 19 el método main (I) ¿Cómo son los programas en Java? Múltiples ficheros .class compilados a bytecodes Aplicación distribuida en directorios, discos o máquinas diversas No hay enlazado de módulos → “recolección” en tiempo de ejecución La 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 clase Modificador 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
    • Programas en Java: 20 el método main (II) A partir de la clase con main() se compila en cascada todo javac ClaseConMain.java A partir de la clase con main() se ejecuta la aplicación java ClaseConMain argumento1 argumento2 ... Recibe como parámetro los argumentos de ejecución Un array o tabla de cadenas String public static void main(String[] args) ¡Hola Mundo! Podemos declarar en cualquier sitio public class HolaMundo { public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.printf(quot;Hola Mundo --> (%d)nquot;, i); } } printf() desde JDK 5.0 Sintaxis estilo C } 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ón El 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) Agrupación sencilla de tipos primitivos u objetos, de tamaño fijo Existen clases para estructuras con mayor funcionalidad: ArrayList Tres 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 → 100 Utilidades 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++){ PLE> java EjArray uno 45 “ochenta y uno” System.out.println(args[i]); uno } 45 ochenta y uno } PLE> _ } 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) /** Sistema de documentación propio: Javadoc * 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]; String: clase para cadenas de texto for (int i = 0; i < lista.length; i++) { lista[i] = String.format(quot;--%02d--quot;, i); } Familia de los printf() y sprintf() de C for (int i = 0; i < lista.length; i++) { System.out.println(lista[i]); PLE> java EjArray2 } --00-- } --01-- } --02-- --03-- --04-- PLE> _ ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 24 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(quot;--%02d--quot;, i); } mostrar(); } Método static sólo puede acceder a métodos y atributos static private static void mostrar() { Nuevo for (PARACADA) for (String s : lista) { que recorre colecciones System.out.println(s); } } private: no es accesible desde métodos fuera de su clase PLE> java EjArray3 --00-- } --01-- --02-- --03-- --04-- PLE> _ ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 25 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 String Clase 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 Unicode public class EjString { public static void main(String[] args) { String s1,s2,s3; s1=quot;Holaquot;; s2=quot;Mundoquot;; s1.concat(quot;¿?quot;); // Inutil: s1 no varía PLE> java EjString s3=s1.concat(s2); HOLAMUNDO PLE> _ System.out.println(s3.toUpperCase()); } } ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 27 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 referencias Tipos 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 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) 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) Concatenación de cadenas: + Operador condicional ternario: ?: Paréntesis: () Prioridad de operadores Declaración y paso de parámetros Conversión de tipos Delimitadores de sentencia: ; Llaves: {} Delimitador de bloques de código Inicialización de tablas Declaración y acceso a tablas: [] Creación de objetos: new Acceso 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 control Alternativas: 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, return Rupturas de estructuras anidadas mediante etiquetas (etiqueta:) Captura de excepciones: Ruptura de secuencia provocado por errores o interrupciones try {} catch () {} finally {} ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 33 Ejercicios I Escribir 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 II Escribir 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) 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 elemental vací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) import java.util.ArrayList; public class EjUT10 { private static int n; private static ArrayList<EjUT10> lista; private String descripcion; (1) Se ejecuta el bloque static de la clase static { n = 0; lista = new ArrayList<EjUT10>(); (2) Inicializamos un ArrayList de objetos new EjUT10(); new EjUT10(); } (3) Creamos un par de instancias EjUT10() { descripcion = String.format(quot;UT10 #%dquot;, n++); lista.add(this); } (4) Constructor sin argumentos empleado en (3) EjUT10(String nombre) { (6) Constructor con argumentos empleado en (5) descripcion = nombre; lista.add(this); } public String toString() { return descripcion; } public static ArrayList consultarLista() { return lista; } public static void main(String[] args) { (5) En main, creamos el 3º new EjUT10(quot;El tercero, creado en main()quot;); for (Object o : EjUT10.consultarLista()) { System.out.println(o); } } } (8) Texto de toString (7) Método de consulta, static, para acceder a la lista ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 37 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: subclases Jerarquí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 Padre Java 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étodos Al 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: polimorfismo Una 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 quot;Aquot;; } } public class A1 extends A { public String toString() { return quot;A1quot;;} PLE> java EjPoli A1 } a es un objeto A1, y PLE> _ por ello es también A public class EjPoli { public static void main(String[] args) { A a = new A1(); System.out.println(a.toString()); } } a es A, pero accedemos Podemos omitir la al método sobrescrito llamada 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 - abstract Elementos heredables incompletos No permiten instanciación directa Permiten declaración de referencias Clases/métodos abstractos: abstract Métodos de obligada cumplimentación en clases hijas Clase abstracta por definición o por tener métodos abstractos Interfaces: Definiciones de métodos públicos y constantes Métodos sin implementaciones – Public y abstract de forma implícita Declaraciones de constantes final Puede heredar otras interfaces con extends Permite 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 Paquetes Las clases se organizan en paquetes Sistema jerárquico universal Identificació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 CLASSPATH Bú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: Herencia Completar 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: Herencia Crear 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. z Crear la clase derivada Vector2D para vectores en el plano z=0 θ r φ y x ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 44 Genericidad Problema: 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 Object Necesitamos adaptaciones (casting) continuamente Control de tipos muy debilitado → Errores en tiempo de ejecución Solución: Genericidad, parametrización de tipos Indicamos al contenedor, como parámetro, el tipo deseado A partir de JDK 5.0. Incorporado en las clases antiguas de la API de Java Aplicable 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) Declaraciones: Identificador para el tipo-parámetro En mayúsculas, E y G habitualmente Declaración de la clase – Parámetro formal: class Grupo<E> Declaración e instanciación de objeto – 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(); ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 46 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(quot;(%d, %d)quot;, 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-b Escribir 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 Excepciones Herramienta de paso de información entre métodos Evitan reutilizar el valor devuelto con valores “especiales” de error Permiten “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 herencia Throwable/Error (fatales, de sistema) y Throwable/Exception – RuntimeException: Finalización de programa, no exigen poner throws try/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) Al dividir por cero interrumpe el programa 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, 2 ej.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(quot;%d/%d = %dnquot;, n, i, cociente); } // } catch (ArithmeticException e) { // System.err.println(quot;No válido -> quot; + e); // } finally { // System.err.printf(quot;--- Fin: i=%d ---nquot;, i); // } } Podemos capturar el error } y 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) public class División { public static void main(String[] args) { División ej = new División(); Error de compilación: Excepción no manejada ej.tablaDividir(17, 2, 1); Opción a) Añadir throws ej.tablaDividir(17, 3, 2); Opción b) Añadir try/catch } b0) “Repetir” el mismo error ¡¡¡OJO!!! b1) “Evitar” el error private void tablaDividir(int b2) “Propagar” o “encadenar” excepción n, int borde, int salto) { int i=0, cociente; for (i = -borde; i <= borde; i += salto) { cociente = dividir(n, i); System.out.printf(quot;%d/%d = %dnquot;, n, i, cociente); } } private int dividir(int n, int d) throws PLEException { if (d == 0) throw new PLEException(quot;División x ceroquot;); return n / d; } Nos anticipamos al error y } lanzamos 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) package cesbur.ple.dai; public class PLEException extends Exception { public PLEException() { super(); Las excepciones no suelen llevar código } Nos preocupa sólo la jerarquía para capturarlas public PLEException(String message) { super(message); } public PLEException(String message, Throwable cause) { super(message, cause); } public PLEException(Throwable cause) { super(cause); } } É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: Scanner La clase Scanner permite capturar valores Desde teclado (System.in), ficheros (File), cadenas (String), etc Mé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) 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(quot;%d/%d = %dnquot;, 33, n, 33/n); } catch (InputMismatchException e) { teclado.nextLine(); System.err.println(quot;Número entero, porfa...quot;); } } } 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 Archivos Flujos 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 directorios Usado por constructores de Scanner y PrintStream Creació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) package cesbur.dai.ple; import java.io.*; public class CreaArchivo { public static void main(String[] args) { File f = new File(quot;EjArchivosJava.datquot;); if (!f.exists()) { try { PrintStream out = new PrintStream(f); for (int i = 0; i < 10; i++) { out.printf(quot;-- %02d --nquot;, i); } out.close(); } catch (java.io.IOException e) { throw new RuntimeException(e); } } else { throw new RuntimeException(quot;Archivo ya existequot;); } } } ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 56 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(quot;EjArchivosJava.datquot;); 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(quot;Archivo no existequot;); } } } ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • 57 Ejercicios V: Excepciones Diseñ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: Agenda Escribir 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
    • Programación 59 orientada a eventos Paradigma de programación No existe una secuencia de ejecución principio → fin Porciones 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áficos GUI: Interfaz gráfica de usuario Campo de operación compartido con POO / programación visual – Componentes gráficos – Objetos – gestión de eventos Diferentes componentes producen distintos eventos Botones, 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 eventos Movimiento del ratón, llegada/salida del ratón de un componente Pulsación/liberación de botón de ratón Pulsación de botón (botón del entorno) Selección de menú Cambio de foco, activación del componente Creación/liberación de componente/ventana Activación/desactivación de casillas de opción Avance/retroceso en casilla de texto Cambio de contenido/texto Alertas de reloj programadas Activació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
    • Ejercicios VI: 61 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ódigo Java + Componentes Swing + Eclipse + Visual Editor – Portable a otros entornos de desarrollo: Netbeans Acceso simplificado a las características de los componentes Clases de interfaz para integrar con nuestras clases de proceso Finalmente se editan manualmente métodos asociados a cada evento J-paneles: contenedores para colocación, margenes, bordes, etc.) J-área de texto J-botones ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • Ejercicios VI: 62 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 Swing/Contenedores/JPanel JPanelExterior: Disposición: Centro, BorderLayout con espacio 10 (Vertical Gap) Borde vacío, con márgenes 10,10,10,10 Swing/Componentes/JButton 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 10 Borde vacío, con márgenes 10,10,10,10 – JTexto (centro) Swing/Componentes/JTextArea – JBotónAvanzar (sur) Mnemónicos (atajos de teclado) ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006
    • Ejercicios VI: 63 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)  Java. Manual de Referencia. [SCHLDT] Patrick Naughton y Herbert Schildt McGraw-Hill, 1977  Programación en Java 2. Serie Schaum. [SCHM] Jesús Sánchez Allende y otros McGraw-Hill, 2005  Tutorial de UML – Modelo de clases. [TUML] Patricio Salinas C. <psalinas@dcc.uchile.cl> 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)  Java Tutorial [JTUT] Sun Microsystems http://java.sun.com/docs/books/tutorial  API de Java. [JAPI] Sun Microsystems http://java.sun.com/reference/api  The Java Language Specification [JLNG] Sun Microsystems http://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 uso Este material está disponible bajo una Licencia Creative Commons, http://creativecommons.org/licenses/by-nc-sa/2.5/es/ ple-ut10a v1.10.odp C.E.F.P. Juan de Colonia - Programación en Lenguajes Estructurados 02/07/2006