Curso Fundeweb2 - Basico

Descargar como ppt, pdf o txt
Descargar como ppt, pdf o txt
Está en la página 1de 76

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í:


Nombre
Apellidos - Propiedades simples.
Tiene Dirección - Definen el objeto.
Clase Alumno Teléfono
Dni

Matrículas - Propiedades
Contiene Becas relacionales.
Cursos - Definen las relaciones
del objeto con otros
objetos.
Cambiar
nombre - Funcionalidad que
Puede Cambiar puede hacer el alumno
teléfono con sus datos.
Añadir Curso
Añadir
Titulación
© 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.
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:
Nos indica a qué conjunto de clases pertenece
package action.vehiculos;

Inicio
public class Coche { de la definición de la clase "Coche"
private int puertas;
private String modelo;
private String matricula; Propiedades de la clase coche
private boolean tieneSeguro;

public Coche()Constructor
{ de la clase coche (vacío)
}
Método
public int getPuertas() { para obtener el parámetro "puertas"
return puertas;
}
public void setPuertas(int puertas) {
Método para asignar valor al
this.puertas = puertas; parámetro "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 Instancia de la
public class Coche{ clase
Coche{
private int puertas; puertas = 5;
private int
tipoCombustible; 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

Inicio de
public interface Vehiculo { la definición de la interfaz "Vehiculo"

public boolean tieneSeguro();

public void recorreDistancia(int numKilometros);


Definición de un métodos

public double getCombustibleRestante();

© 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.


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(); Coche seat1 = new Coche();
seat.setGasolina(40); seat.setGasolina(40);
Coche seat2 = seat1; Coche seat2 = new Coche();
seat2.quitaGasolina(20); seat2.setGasolina(40);
seat1.getGasolina(); seat2.quitaGasolina(20);
seat2,getGasolina(); seat1.getGasolina();
seat2,getGasolina();

seat1 seat2 seat1 seat2

Memoria 20 Memoria 40 20

© 2012. Área de las Tecnologías de la Información y las Comunicaciones Aplicadas.


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.

También podría gustarte