Introducción a la Programación en Java Introducción Ángel Lucas González Martínez Jaime Ramírez DLSIIS. Facultad de Informática Universidad Politécnica de Madrid 1 Contenidos Introducción a la Programación OO Tipos de Desarrollo Orientado al Proceso Orientado a Objetos Qué es un Objeto? Separación entre Interfaz e Implementación Introducción a la plataforma Java 2
Tipos de desarrollos Desarrollo orientado al proceso: Análisis: Descomposición en subtareas (topdown): Problema: "Preparar un café con leche" 1. Hacer café. 1.1. Preparar la cafetera. 1.2. Encender la cafetera. 2. Calentar la leche. 3. Mezclar el café con la leche en una taza. 4. Echar el azúcar en la taza. 3 Tipos de desarrollos Desarrollo orientado al proceso (cont.): Diseño: La solución se formula en términos de subprogramas organizados jerárquicamente. Cada subprograma resuelve una subtarea. 4
Tipos de desarrollos Enunciado de problema: El problema consiste en gestionar las peticiones de préstamos de libros que llegan a una biblioteca. El proceso a seguir consiste en leer esta petición, consultar si está disponible dicho libro en la biblioteca, en cuyo caso se tratará la petición generando un informe de préstamo que se guardará hasta la posterior devolución del libro. En caso de que el libro no esté disponible en la biblioteca o esté prestado a otra persona, se rechazará esta petición. 5 Ejemplo de diseño orientado al proceso Tipos de desarrollos 6
Tipos de desarrollos Crítica al desarrollo orientado al proceso: Demasiada distancia entre los datos y los procesos Complica la comprensión de las soluciones. Eleva el coste de los cambios que afectan a la abstracción de datos. 7 Tipos de desarrollos Desarrollo orientado al objeto: Descomposición en objetos especializados en ciertas operaciones (declaradas en su interfaz). Cada objeto encapsula: sus atributos (datos). la implementación de las operaciones que sabe hacer. Los objetos se comunican mediante mensajes. Resolución por colaboración. 8
Tipos de desarrollos Ejemplo de diseño O.O. :Stock 1: Ok := pedir(libro) 2: Ok :=Verificar_Situación (libro) :GestorPréstamos : Encargado 3: Registrar_Préstamo(libro) :Préstamos 9 Tipos de desarrollos Ventajas del desarrollo orientado al objeto: Los cambios están más localizados. Se facilita más la reutilización y la extensión del código. Se evita más la duplicidad de código gracias a la herencia. Resulta más natural (?). 10
Qué es un objeto? Un objeto representa una entidad, ya sea física o conceptual, relevante para comprender el dominio del problema o para formular la solución. Entidad física: coche, persona,.. Entidad conceptual: buffer, árbol binario, 11 Los objetos son abstracciones Toda abstracción es una simplificación que representa ciertas características relevantes y olvida otras. Dependiendo del observador de un coche: un vendedor: modelo, precio, color... un mecánico: tipo de motor, transmisión, suspensión.. un ingeniero:... 12
Características de los objetos Estado: Viene determinado por los valores de sus atributos. Comportamiento: Define cómo reacciona un objeto a peticiones de otros objetos. Viene dado como una serie de servicios que el objeto proporciona a otros. 13 Cómo se define un objeto? Una clase es una familia de objetos que comparten características comunes: Su estado está determinado por los mismos atributos. Saben realizar las mismas operaciones (también llamados métodos). Un objeto es una instancia de una clase. Las clases deberán incluir al menos un método constructor. 14
Las clases y los objetos están en todas partes Vehículo Animal Platero:Animal Punto Figura (1,3) (2,2) (2,1) (5,2.5) 15 Métodos y Mensajes Métodos: definen el comportamiento de un objeto. Punto x,y: float trasladar(a,b) distancia(pto) Estado Comportamiento Invocación de métodos: paso de mensajes. trasladar(1,-1) X=2 Y=2 P1:Punto 16
Separación entre Interfaz e Implementación También llamado Principio de Ocultación de la Información. En una aplicación se debe separar lo que es más probable que cambie en el futuro (implementación) de lo que se considera más estable (interfaz), con el fin de proteger lo más posible al resto de la aplicación de futuros cambios La interfaz: Define la visión del objeto desde fuera: operaciones públicas o servicios (y sus parámetros). Cabeceras de las operaciones A modo de documentación, se debe indicar QUÉ hacen las operaciones públicas sin entrar en el CÓMO -> Contratos definidos mediante PREs y POSTs 17 Separación entre Interfaz e Implementación La encapsulación es una técnica que permite ocultar los detalles de implementación. En Ada: se declaran tipos privados y ciertos subprogramas en los paquetes En POO: se declaran como privadas ciertas operaciones y todos los atributos en las clases. La encapsulación proporciona dos tipos de protección: Protección en t. de ejecución: protege el estado interno del objeto de ser corrompido por accesos de otros objetos. Protección en t. de diseño: protege al código de otros objetos de cambios en la implementación. 18
Un poco de historia de Java Empezó a desarrollarse a finales de 1990 en Sun con el nombre de Oak. Los padres fueron J. Gosling, M. Sheridan y P. Naughton. Se buscaba un lenguaje ind. de la plataforma para productos electrónicos. Se simplificó C++ eliminando ciertos elementos problemáticos o prescindibles: punteros, liberación explícita de memoria, herencia múltiple de clases, sobrecarga de operadores, genéricos, structs, tipos enumerados, etc. Se añadieron elementos nuevos que se consideraron esenciales a la POO: interfaces 19 Un poco de historia de Java Sun Microsystems, Inc. en 1995 termina la primera versión En cada evolución se introducen nuevas funcionalidades 1 J2SE 1.2 JSE 1.6 JDK 1.0 JDK 1.1 Java 2 J2EE 1.2... Java 6 JEE 1.6 J2ME 1.3 JME 1.6 (1) http://es.wikipedia.org/wiki/lenguaje_de_programaci%c3%b3n_java#historia 20
Qué es Java? Java Lenguaje de programación Plataforma POO Robusto Seguro Desarrollo Ejecución (VM) Compilador Generador de Documentación Linux Windows... API GUI API Red... API Criptografía 21 Qué es Java? El lenguaje Java es compilado e interpretado Prog. Java Prog.java javac Prog.class bytecode Prog.class bytecode Intérprete JRE (java) JIT 01001010...01 Ejecutable 22
Qué es Java? Java proporciona independencia de HW y SO Programa Java API Java Máquina virtual Java SO 1 SO n Ordenador Ejecución menos eficiente 23 Qué es Java? Recolector de Basura Otros lenguajes como Ada, C++ requieren que el programador libere la memoria dinámica que previamente solicitó (new). En cambio, Java dispone de un recolector de basura capaz de: detectar cuando un bloque de memoria deja de ser usado, y liberar la memoria que ocupa No existen los memory leaks y los dangling pointers Ralentiza la ejecución 24
Tipos de Aplicaciones Según la interfaz que ofrecen al usuario Aplicaciones de consola Aplicaciones gráficas: basadas en AWT o SWING Aplicaciones para navegadores de Internet: Applets Según su finalidad Aplicaciones de acceso a bases de datos Aplicaciones independientes/cliente Aplicaciones servidoras: servlets y JSP 25 Plataforma J2SE 26
Principales Partes de la Plataforma Máquina Virtual. java: Intérprete de bytecode y JIT* Herramientas para el desarrollo (http://java.sun.com/): javac: Compilador javadoc: Generador de documentación jdb: depurador en línea de comandos appletviewer: visor de applets jar: Empaqueta class en ficheros jar etc. 27 Principales Partes de la Plataforma API: librerías o paquetes precompilados que puede utilizar el programador. Utilidades varias: matemáticas, clases contenedoras, manejo de fechas, etc. Swing(javax.swing) o AWT (java.awt): para GUIs Red (java.net) JDBC: para acceso a Bases de Datos. Java 2D: tratamiento de imágenes. Manejo de XML. etc. 28
Entornos de Desarrollo Incorporan un editor, un compilador, un depurador y otras herramientas. A veces permiten la creación interactiva de GUIs. Libre distribución: Eclipse, NetBeans, bluej,.. Comerciales: CodeWarrior, WebSphere Studio IBM Site Developer, Borland JBuilder,.. 29