Download El lenguaje de programación Java
Document related concepts
no text concepts found
Transcript
Curso de introducción a Fundeweb © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Índice de contenidos • • • • • ¿Qué es Fundeweb? Eclipse como entorno de desarrollo El servidor Weblogic Proceso de desarrollo con Fundeweb El lenguaje de programación Java • • • • • • • Tipos de datos y organización de código Clases e instancias Interfaces, implementaciones y herencia Punteros y referencias Polimorfismo Recolector de basura Tratamiento de excepciones • Buenas prácticas de programación. • Javadoc © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. ¿Qué es Fundeweb? • Framework de desarrollo de aplicaciones J2EE diseñado por MNCS y con inicio en el año 2008. • Facilita el proceso de desarrollo de software. • Abstrae a los programadores de las dependencias de las tecnologías que se usan. • Provee de un conjunto de facilidades que adaptan el desarrollo a las características del Framework. • Abstrae de la base de datos sobre la que se trabaja. • Automatiza las tareas de despliegue de proyectos. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. ¿Qué es Fundeweb? • Automatiza el despliegue en servidores de desarrollo y/o producción. • Provee ayudas para el control de calidad y supervisión de código. • En resumen: • Fundeweb es un framework de desarrollo de aplicaciones que facilita a los programadores la gestión y despliegue de proyectos. • Incorpora un conjunto de tecnologías suficientes para el desarrollo de aplicaciones J2EE. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. ¿Qué tipo de aplicaciones desarrolla? • Aplicaciones J2EE. • Uso del patrón MVC. • Aplicaciones de ServiciosWeb. • • Capa de servicios. Sin interfaz gráfica. • Aplicaciones de EJB. • • Capa de servicios. Sin interfaz gráfica. • Aplicaciones J2EE + ServiciosWeb + EJB • Combinación de anteriores. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Índice de contenidos • • • • • ¿Qué es Fundeweb? Eclipse como entorno de desarrollo El servidor Weblogic Proceso de desarrollo con Fundeweb El lenguaje de programación Java • • • • • • • Tipos de datos y organización de código Clases e instancias Interfaces y herencia Punteros y referencias Polimorfismo Recolector de basura Tratamiento de excepciones • Buenas prácticas de programación. • Javadoc © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Eclipse • IDE de desarrollo de aplicaciones. • Basado en un core y un paquete de extensión o plugins. • Eclipse se puede adaptar mediante la instalación de plugins a diferentes lenguajes de programación. • Concentra toda la funcionalidad necesaria para que los programadores desarrollen sus proyectos. • Contiene un gestor de plugins que permite instalar nuevos o actualizar los existentes. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Eclipse: Plugins • Maven: https://maven.apache.org/ • Permite la gestión de las librerías que requiere el proyecto. • Especifica cuando se deben cargar las librerías: • En Compliación. • En runtime. • En test. • No cargar: existente en el servidor de antemano. • Gestiona la construcción de proyectos. • Requiere tener acceso a un repositorio Maven donde buscar las dependencias del proyecto. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Eclipse: Plugins • Subclipse: • Cliente de Subversion para eclipse. • Permite comparaciones entre ficheros locales y del servidor SVN. • Ayuda a la resolución de conflictos entre ficheros desincronizados. • Visualiza de manera rápida las diferencias entre nuestro contenido local y el del repositorio. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Eclipse: Plugins • Ant: http://ant.apache.org/ • Nos permite ejecutar tareas concretas para manejar nuestros proyectos. • Puede interactuar con todos los componentes de nuestro entorno: • • Código fuente • Servidores • Test Creadas tareas Ant en Fundeweb para automatizar tareas de despliegue y empaquetados de proyectos. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Eclipse: Plugins • TestNG: • Framework de testing para Java. • Basado en Junit (realización de pruebas unitarias). • Permite paso de parámetros. • Nos permite comprobar que nuestro código hace lo que debe. • Permite Cubrir todo tipo de pruebas: • Unitarias. • Funcionales. • End-to-end. • Integración. • Etc… © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Eclipse: Plugins • CheckStyle: • Permite chequear si el código programado tiene defectos de forma. • Comprueba: • Que se programa de acuerdo a estándares. • Que el código producido sea eficiente. • Que los comentarios sean correctos y adecuados. • Que el código sea legible para otros desarrolladores. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Eclipse: Plugins • FindBugs: • • • Chequea el código generado para prevenir errores en tiempo de ejecución. Para ello hace uso de patrones de error buscando en el código las ocurrencias de los mismos. Algunos ejemplos de comprobaciones: • • • • • Null pointers. Clases no serializables cuando el contexto requiere que se serialicen. Posibles divisiones por cero. Comparaciones entre clases que no sobrescriben equals. Etc… © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Índice de contenidos • • • • • ¿Qué es Fundeweb? Eclipse como entorno de desarrollo El servidor Weblogic Proceso de desarrollo con Fundeweb El lenguaje de programación Java • • • • • • • Tipos de datos y organización de código Clases e instancias Interfaces y herencia Polimorfismo Punteros y referencias Recolector de basura Tratamiento de excepciones • Buenas prácticas de programación. • Javadoc © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Servidor Weblogic • Oracle WebLogic es un servidor de aplicaciones Java EE y HTTP. • Desarrollado originalmente por BEA y comprado posteriormente por ORACLE. • Compatible con cualquier base de datos que se ajuste al estándar JDBC. • Integra un portal web de gestión integral de los diferentes componentes. • Provee plugins para Eclipse para el despliegue de aplicaciones. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Índice de contenidos • • • • • ¿Qué es Fundeweb? Eclipse como entorno de desarrollo El servidor Weblogic Proceso de desarrollo con Fundeweb El lenguaje de programación Java • • • • • • • Tipos de datos y organización de código Clases e instancias Interfaces y herencia Punteros y referencias Polimorfismo Recolector de basura Tratamiento de excepciones • Buenas prácticas de programación. • Javadoc © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Proceso de desarrollo con Fundeweb • Fundeweb como framework J2EE requiere una serie de estructuras para agilizar su uso. • En ATICA hay establecidas metodologías para dirigir el desarrollo de aplicaciones J2EE • Existen herramientas para gestionar el código y mejorar su calidad. • Podemos ver una explicación más detallada en: Estructura J2ee Atica © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Índice de contenidos • • • • • ¿Qué es Fundeweb? Eclipse como entorno de desarrollo El servidor Weblogic Proceso de desarrollo con Fundeweb El lenguaje de programación Java • • • • • • • Tipos de datos y organización de código Clases e instancias Interfaces y herencia Punteros y referencias Polimorfismo Recolector de basura Tratamiento de excepciones • Buenas prácticas de programación. • Javadoc © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Programación Orientada a Objetos • La programación orientada a objetos se basa, como su nombre dice, en el concepto “Objeto” pero ¿qué es un objeto? • • • • Es una “entidad” con significado propio en el sistema que tiene propiedades y es capaz de realizar funcionalidad por sí sola. A la estructura de esa entidad se la conoce como “clase”. Un sistema, a su vez, está compuesto por objetos que interactúan entre sí. Las propiedades de un objeto son los atributos que lo definen. Al estado de un objeto en un instante dado se le suele llamar instancia (aunque a veces se refieren simplemente como objeto). © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Programación Orientada a Objetos • Veamos un ejemplo y modelemos un alumno. • Lo primero es saber qué propiedades tiene un alumno: • Nombre, apellidos, DNI, etc. • Una vez definida las propiedades decidamos qué puede hacer un alumno sobre él mismo: • Cambiar sus datos personales, aumentar su edad, etc. • Tras tener claro qué representa un alumno definimos su relación con otros objetos: • Un alumno tiene una o varias matrículas. • Un alumno tiene una beca. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Programación Orientada a Objetos • El resultado quedaría así: Tiene Nombre Apellidos Dirección Teléfono Dni Contiene Matrículas Becas Cursos Clase Alumno Puede Cambiar nombre Cambiar teléfono Añadir Curso Añadir Titulación © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. - Propiedades simples. - Definen el objeto. - Propiedades relacionales. - Definen las relaciones del objeto con otros objetos. - Funcionalidad que puede hacer el alumno con sus datos. Programación Orientada a Objetos • Ejercicio: Modelar una titulación 1. ¿Qué propiedades simples tiene una titulación? 2. ¿Qué propiedades relacionales tiene? 3. ¿Qué puede hacer una titulación con sus datos? • Para modelar nuestros diagramas utilizaremos • Supongamos que una titulación pertenece a un centro y contiene varias asignaturas. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Programación Orientada a Objetos • Ejercicio: Modelar una titulación • El resultado podría ser similar al siguiente © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Programación Orientada a Objetos • Mediante la definición de clases especificamos las estructuras que gestiona nuestra aplicación. • Una clase es sólo el esquema. Cuando esa clase se concreta en unos datos que representan una entidad pasa a llamarse instancia u objeto. • Basado en el ejemplo anterior: • Alumno es una clase. • El alumno Manuel Pérez con DNI:11223344R es una instancia de la clase alumno. • Las aplicaciones en ejecución manejan instancias. Las clases definen la estructura para crear nuevas instancias. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Programación Orientada a Objetos • No todos los objetos tienen como función representar entidades. • Un objeto puede actuar como: • • • Modelo de datos de una entidad (Alumno) Controlador de la aplicación (gestiona las relaciones entre objetos, lanza acciones, etc.) Intermediario con el usuario (captura los datos introducidos al usuario y lo traduce en objetos del modelo o en acciones del controlador. • Esta estructura se corresponde con parte del patrón MVC (Modelo Vista Controlador) que veremos en la sección de patrones de diseño. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Programación Orientada a Objetos • Así pues la programación orientada a objetos se basa en: • Definición de las estructuras (clases) que implementarán la aplicación. • Definición de las relaciones y funcionalidades de esas estructuras. • En tiempo de ejecución esas estructuras se usarán de plantilla para crear instancias. • Las instancias serán las encargadas de realizar las funcionalidades de la aplicación. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Lenguaje de programación Java • Lenguaje de programación orientado a objetos. • Diseñado para tener las mínimas dependencias con una implementación concreta. • El objetivo es programar para cualquier dispositivo independientemente de su arquitectura. • Las aplicaciones java se ejecutan sobre una máquina virtual (JVM) instalada en cada dispositivo. • Actualmente Java es uno de los lenguajes de programación más extendidos cubriendo el ámbito: Web, móvil y de aplicaciones de escritorio. • Importante: Java es sensible a mayúsculas y minúsculas por lo que no es lo mismo “Hola” que “hola”. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Tipos de datos y organización de código • Java nos permite organizar el código (ficheros) en lo que denomina paquetes. • En cada fichero deberemos poner en la primera línea y de manera obligatoria a qué paquete pertenece. • Esta estructura es simbólica y la decide el desarrollador. • El nombre del paquete ha de coincidir con la ruta en disco de la carpeta que contiene al fichero. Esta ruta será relativa al proyecto. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Tipos de datos y organización de código • Un paquete es una manera de agrupar conceptualmente clases que tienen un comportamiento o filosofía común. • Permiten identificar módulos dentro de una aplicación y agrupar características en un conjunto de paquetes. • Algunas propiedades de Java nos permiten aplicar características sobre un paquete determinado, lo que afecta a todos los ficheros que referencia. • En disco, un paquete es simplemente una carpeta que contiene ficheros (otros paquetes o clases) © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Tipos de datos y organización de código © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Tipos de datos y organización de código • Los tipos de datos primitivos en Java son © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Tipos de datos y organización de código • Los tipos de datos no primitivos, pero que provee Java son © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Tipos de datos y organización de código • Java provee de un tipo de dato especial llamado enumerado. • Este tipo de dato contiene una lista fija de valores, no variable. • Se suele emplear cuando entre conjuntos de datos del mismo tipo iguales queremos representar un subtipo o bien un estado. • Este tipo de dato se da de alta de la siguente manera public enum AuthenticationType { RADIUS, SSO, CARNE, DNI } © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Tipos de datos y organización de código • Java permite que nos podamos crear nuestros propios conjuntos de tipos de datos de manera indefinida. • Es responsabilidad del programador analizar y decidir qué debe ser un tipo de dato y qué no. • Normalmente, los tipos de datos que queramos crear, representarán entidades de nuestra aplicación o bien un registro de base de datos. • Estos “tipos de datos” toman entidad propia en Java llamándose clases. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Tipos de datos y organización de código • Los operadores Java son: • Operadores Aritméticos: • +-*/ • Operadores Incrementales • ++ -- += -= • Operadores Relacionales • > < >= <= != == • Operadores lógicos • && • || • ! • Operador de concatenación de cadenas • + © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Estructuras de control • Iteradores: • For, while, Iterator • For(int i=0;i<10;i++){} • While(condicion){} • Iterator.hasNext(); Iterator.next(); • Sentencias de control: • If(..) {} else{} • Switch(valor){case 0: break; case 1: break; …} © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Clases e instancias • Clases: • Define todas las propiedades concretas de una entidad que queremos modelar. • Agrupa toda la funcionalidad (métodos) que podemos ejecutar sobre esa entidad. • Define relaciones entre entidades diferentes. • Han de tener un método especial llamado "constructor" encargado de inicializar las instancias basadas en la clase. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Clases e instancias • Una variable se define de la siguiente manera: • Ámbito (calificativos) tipoDeDato nombre: private int numero; • El ámbito puede ser: • • public: accesible por cualquier otra clase de la aplicación. • private: sólo accesible dentro de la clase en la que se declara. • protected: accesible por todas las clases que estén en el mismo paquete. Si no se indica ámbito este es el por defecto. Los calificativos (opcionales): • static: se podrá acceder sin necesidad de que la clase esté creada. • final: no se podrá modificar el valor. Se deberán inicializar en su declaración. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Clases e instancias • Un método se define: • Ámbito tipoDeDatoRetorno nombreMetodo(variables){} • • public int suma(int numero1, int numero 2){} El ámbito puede ser: • public: accesible por cualquier otra clase de la aplicación. • private: sólo accesible dentro de la clase en la que se declara. • protected: accesible por todas las clases que estén en el mismo paquete. Si no se indica ámbito este es el por defecto. • Los métodos que no devuelven valor deben tener como tipo de dato de retorno “void”. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Clases e instancias • Un ejemplo: package action.vehiculos; Nos indica a qué conjunto de clases pertenece public class Coche { Inicio de la definición de la clase "Coche" private int puertas; private String modelo; Propiedades de la clase coche private String matricula; private boolean tieneSeguro; public Coche() { Constructor de la clase coche (vacío) } public int getPuertas() { Método para obtener el parámetro "puertas" return puertas; } public void setPuertas(int puertas) { Método para asignar valor al parámetro this.puertas = puertas; "puertas" } Importante: Java es "case sensitive" por lo que no será lo mismo “coche” que “Coche.” © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Clases e instancias • Nomenclartura: • Las clases siempre empiezan por mayúsculas. • Los nombres pueden contener letras y números pero siempre han de empezar por letra y no se recomienda el uso de números. • Los métodos y variables siempre empiezan por minúsculas. • Cuando un nombre contenga varias palabras, no se usan ni espacios ni guiones para separar, se pone la siguiente letra en mayúsculas • • • public void generar_resultado() ¡Incorrecto! public void generarResultado() ¡Correcto! Adaptarnos a los estándares permite que las herramientas de terceros funcionen correctamente sobre nuestro código. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Clases e instancias • Una clase es la definición de una entidad junto con todos sus propiedades y acciones posibles. • Una instancia u objeto es cuando esa definición se transforma en una entidad concreta. Contiene por lo tanto los valores y el estado de una clase en un instante determinado. Ejemplo de clase public class Coche{ private int puertas; private int tipoCombustible; … } Instancia de la clase Coche{ puertas = 5; tipoCombustible=“diesel”; } © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Clases e instancias • Una clase puede contener variables que sean otras clases. • Desde una clase se puede llamar a los métodos de cualquier otra clase, siempre que se tenga una instancia. • Existen objetos especiales, llamados colecciones que forman listas de objetos, permitiendo recorrerlas y almacenar en memoria sus elementos. • Programando definimos las clases. En ejecución se accede a instancias. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Clases e instancias • Ejercicio: Modelar el siguiente diagrama en Java © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Interfaz: • Una interfaz pretende definir un "índice" de métodos que deben implementar las clases que quieran ser consideradas acorde a esa interfaz. • Es una clase especial que sólo contiene una definición de métodos. • Sólo se incluye el encabezado de los métodos, no su contenido. • Una interfaz representa algo más genérico que una clase concreta. • Define el comportamiento que debe tener un objeto que se ajuste a ella. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Implementación: • Se dice que una clase implementa a una interfaz, cuando dicha clase contiene todos los métodos que define la interfaz. • La clase está obligada a cumplir con toda la funcionalidad que expone la interfaz. • Una clase puede implementar más de una interfaz a la vez. • Para indicar que una clase implementa una interfaz se especifica poniendo "implements NombreInterfaz" en el encabezado de la clase. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Resumiendo: • Una interfaz representa un conjunto de funcionalidades. • Los objetos que quieran implementar esa interfaz se comprometen a cumplirla. • Su principal uso es: • Como API de servicios (EJB, ServiciosWeb). Usado para publicar los métodos que tiene. • Asegurar que objetos de diferente tipo tienen un comportamiento común para una determinada funcionalidad. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Veamos un ejemplo: • Tenemos una clase “Decorador” cuya funcionalidad es decorar objetos. Pintar, poner adornos, etc. • Si tenemos objetos diferentes: coches, casas, lienzos. La clase decorador tendría que tener un método diferente para cada uno de ellos. • • public void pintar(Coche miCoche) • public void pintar(Casa miCasa) • public void pintar(Lienzo miLienzo) El objetivo es que Decorador pueda decorar cualquier clase de objeto sin tener que preguntarse de qué objeto se trata. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Veamos un ejemplo: • Para poder tratar los objetos de manera genérica creamos la interfaz “Decorable” y hacemos que los objetos Casa, Coche y Lienzo la implementen. • OJO: Cada uno la implementará “a su manera” pero de cara a la clase Decorador será un único método. • Un objeto que implementa una interfaz, puede identificarse con el nombre de esa interfaz en vez del de la clase real. • • public void pintar(Decorable miObjetoDecorable) Al llamar a este método en cada objeto se llamará a su método “pintar”. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Ejemplo: package action.interfaces; Nos indica a qué conjunto de clases pertenece public interface Vehiculo { Inicio de la definición de la interfaz "Vehiculo" public boolean tieneSeguro(); public void recorreDistancia(int numKilometros); public double getCombustibleRestante(); } © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Definición de un métodos Java: Interfaces, implementaciones y herencia • Herencia: • Cuando una clase hereda de otra, obtiene todas sus propiedades y métodos. • La clase "hija" puede: • Definir nuevas propiedades y métodos propios. • Redefinir los métodos heredados de la clase "padre". • Una clase sólo puede heredar de una única clase padre. Java no posee herencia múltiple como C++ y otros lenguajes. • Cuando una clase hereda de otra se indica poniendo "extends NombrePadre" en el encabezado de la clase hija. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Herencia: • La herencia establece una jerarquía entre clases. • Para detectar si necesitamos herencia basta con preguntarse si una clase “es un (otra clase)”. • Un coche es un vehículo de motor que es un vehículo. • En este ejemplo vemos no sólo la relación entre las clases sino la jerarquía entre ellas. • Cada clase en cada nivel de herencia debe tener unas características propias que no tenga el padre. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Herencia: • • • • • • Llamamos sobrescribir cuando una clase hija quiere modificar el comportamiento de un método de la clase padre. Este comportamiento sólo se aplicará en las instancias de esa clase y sus descendientes. La sobrescritura tiene sentido si la clase hija tiene peculiaridades que hagan que ese método deba ejecutar acciones adicionales. Para sobrescribir utilizaremos el mecanismo de anotaciones que consiste en poner @Override justo encima de la definición del método. El método de la clase hija ha de tener la misma definición que el de la clase padre. En caso de no sobrescribirse un método, se ejecutará el de la clase padre. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Herencia: • Desde una clase hija podemos llamar a los métodos de una clase padre, para ello utilizaremos el comando super() • Ejemplo: super().echarGasolina(); • A diferencia de las interfaces no estamos obligados a implementar todos los métodos de la clase padre (salvo para las clases abstractas). • La herencia requiere de una relación directa entre las clases. Establece por tanto una definición del modelo de datos. • Al igual que las interfaces, permiten acceder a una clase a través de su padre en vez de la propia clase. • public void pintar(Decorable miPadre) © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Ejemplo: • Definimos la clase vehículo como: • Propiedades: tipo, peso, capacidad (personas). • Métodos: recorrerDistancia(). • Definimos dos clases hijas: vehículo motor, vehículo sin motor: • Vehículo motor: • Propiedades: Potencia, consumo. • Métodos: repostar © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Ejemplo: • • Vehículo sin motor: • Propiedades: Método de desplazamiento • Métodos: preparar desplazamiento En este ejemplo tenemos lo siguiente: © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Ejemplo: //Clase padre public class VehiculoMotor { public void repostar(double litros){ } } //Clase hija public class Coche extends VehiculoMotor{ public Coche() { } @Override public void repostar(double litros){ © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. } Java: Interfaces, implementaciones y herencia • Ejercicio: Implementar el diagrama y añadir • Dos clases hijas para vehículo de motor y vehículo sin motor. • Sobreescribir el método “recorrerDistancia” para que según el tipo de vehículo: • Si la distancia a recorrer es mayor de 100km lance repostar. • Antes de empezar el desplazamiento lanzar PrepararDesplazamiento © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Clases abstractas • Cuando tenemos herencia podemos crear lo que se conoce como una clase abstracta. • Una clase abstracta no es más que una clase que tiene algún método sin implementar. • Esto obliga a las clases hijas a implementar ese método. • Para definir una clase abstracta tenemos que: • En la declaración de la clase añadir abstract. • Dejar sólo la declaración del método, añadiendo igualmente abstract. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • El ejemplo anterior dejando repostar como abstracto: //Clase padre public abstract class VehiculoMotor { public abstract void repostar(double litros); } //Clase hija public class Coche extends VehiculoMotor{ public Coche() { } @Override public void repostar(double litros){ } © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Instanciación y polimorfismo • Llamamos polimorfismo a la capacidad de un objeto de ser representado por varias clases o interfaces: • Un coche puede representarse por: • Un vehículo • Un vehículo de motor • Un coche • Llamamos instanciación de un objeto cuando lo recuperamos como una clase o interfaz concreta. • En el caso anterior cuando lo decidimos recuperar como, por ejemplo, un vehículo de motor. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Para recuperar un objeto como una clase o interfaz concreta deberemos hacer lo que se conoce como cast • Un cast es decirle a Java que el objeto que tenemos lo utilice como si fuera el que le estamos indicando. • (ObjetoDestino)miObjeto • Para saber si un objeto puede ser recuperado como una determinada clase haremos uso del la instrucción instanceof. • Esta instrucción pregunta si un determinado objeto puede ser recuperado con el tipo que le estoy indicando. • miObjeto instanceof Clase © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • Si hacemos un cast a una clase con la que no es compatible mi objeto obtendremos una excepción. • Si usamos previamente instanceof nos aseguramos de evitar la excepción • ¿Con qué puedo hacer un cast en un determinado objeto? • Con interfaces que implemente dicho objeto, • Con cualquier clase heredada. if(coche instanceof VehiculoMotor){ VehiculoMotor vm = (VehiculoMotor)coche; } © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Interfaces, implementaciones y herencia • ¿Cuándo debemos heredar y cuando aplicar una interfaz? • El desarrollador decide, pero la referencia es: • Herencia: Cuando entre los objetos hay una relación conceptual. “Un coche es un vehículo”. En este caso se comparten métodos y propiedades. • Interfaz: Cuando tenemos un conjunto de objetos muy diferente, pero que comparten una funcionalidad común y queremos hacer uso de ella sin necesidad de saber qué tipo de objeto es. • Un ejemplo claro es el patrón Observer, que veremos en la sección de patrones en Fundeweb. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Punteros y referencias • Referencias: • • • • • • • Cuando creamos un objeto, Java internamente está creando un puntero a una posición de memoria donde está su valor. La asociación de un puntero con una posición de memoria se llama referencia. Ese puntero es lo que se guarda en nuestra variable. Si asignamos ese objeto creado a otra variable, lo que realmente se está copiando es la referencia, no el valor. Si modificamos un objeto, esa modificación afecta a todas las variables que lo referencien. Si queremos copiarlo, debemos crear un objeto nuevo, copiar los valores y que la nueva variable apunte a él. Mientras que un objeto tenga alguna referencia, no se liberará de memoria su contenido. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Punteros y referencias • Ejemplo Coche seat1 = new Coche(); seat.setGasolina(40); Coche seat2 = new Coche(); seat2.setGasolina(40); seat2.quitaGasolina(20); seat1.getGasolina(); seat2,getGasolina(); Coche seat1 = new Coche(); seat.setGasolina(40); Coche seat2 = seat1; seat2.quitaGasolina(20); seat1.getGasolina(); seat2,getGasolina(); seat1 Memoria seat2 20 seat1 Memoria © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. 40 seat2 20 Java: Recolector de basura • Recolector de basura: • • • • • Es un mecanismo de Java para gestionar de manera automática la memoria. Abstrae a los programadores del proceso de reserva y liberación de memoria. Cuando crea un objeto reserva memoria en función de sus características y la amplia cuando sea necesario. Cuando detecta que un objeto no tiene ninguna referencia (nadie apunta a él) lo elimina liberando la memoria ocupada. Gran parte de los problemas de memoria se producen por acumulación de objetos que ya no se usan, pero existe aún alguna referencia en el código hacia ellos. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Recolector de basura • Recolector de basura: • Los tipos de datos primitivos no generan referencias. • Para eliminar una referencia basta con asignarle a la variable que la contiene el valor null. • En caso de tener problemas de memoria podemos forzar el arranque del recolector de basura. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Tratamiento de excepciones • • • Cuando en nuestro código Java, el compilador nos indica que puede saltar una excepción deberemos hacer uso del bloque try{ … }catch(NombreExcepcion ex){ … } Este bloque nos permite que si se produjera una excepción dentro del código situado en el “try” se nos ejecutará lo indicado dentro del catch. En el bloque catch se nos pasará la excepción lanzada y la información disponible. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Tratamiento de excepciones • También podemos lanzar nuestras propias excepciones para que la clase que llama a nuestro método la maneje. • Para ello debemos: • • • Crear una clase que represente a nuestra excepción y hacer que herede de la clase Java Exception. Añadir en la cabecera de nuestro método la cláusula throws NombreExcepcion. Dentro del código lanzar la excepción de la siguiente manera: throw new NombrExcepcion(“texto que se quiera poner”); © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Índice de contenidos • • • • ¿Qué es Fundeweb? Eclipse como entorno de desarrollo El servidor Weblogic El lenguaje de programación Java • • • • • • • Tipos de datos y organización de código Clases e instancias Interfaces, implementaciones y herencia Punteros y referencias Polimorfismo Recolector de basura Tratamiento de excepciones • Buenas prácticas de programación. • Javadoc © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Buenas prácticas • Las variables se han de crear siempre al principio de la clase o método. • Los métodos get y set siempre deben ir al final. • Nunca usar variables públicas. • Se crean privadas y se implementan sus métodos get y set. • Si varias clases comparten muchas propiedades hacer uso de la herencia. • No usar la salida estándar de consola para mostrar texto. • Definir y usar los logs en su caso. • Respetar los estándares. • Minimizar el uso de estructuras complejas siempre que sea posible. • Comentar los métodos y los trozos de código largos. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Buenas prácticas • Si tenemos una clase con demasiadas líneas de código, revisar si realmente son necesarias ahí o se puede reestructurar. • En los constructores sólo asignar valores, no ejecutar métodos. • Utilizar método “equals” cuando se comparan objetos en vez de “==“. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Índice de contenidos • • • • ¿Qué es Fundeweb? Eclipse como entorno de desarrollo El servidor Weblogic El lenguaje de programación Java • • • • • • • Tipos de datos y organización de código Clases e instancias Interfaces, implementaciones y herencia Punteros y referencias Polimorfismo Recolector de basura Tratamiento de excepciones • Buenas prácticas de programación • Javadoc © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Javadoc • Para introducir comentarios en el código haremos uso de la doble barra // cuando sea una línea. • Cuando sean varias líneas haremos uso de la estructura /* todo el comentario */ • Para generar javadoc de los métodos, nos situaremos en el encabezado del método, escribiremos /** y le daremos al enter para que se nos genere automáticamente el encabezado y podamos completarlo. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas. Java: Javadoc • Es importante generar el Javadoc adecuado pues se mostrará a los que usen nuestros métodos. • Si las clases implementan interfaces el Javadoc debe ir en la interfaz y no en la implementación concreta. • Lo mismo pasa en caso de la herencia con los métodos que se sobreescriben. © 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.