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.