Tema 6: Programación de Componentes de Acceso a Datos
Introducción a la Programación Orientada a Componentes
- Definición de Programación Orientada a Componentes: También denominada "basada en componentes", esta rama de la ingeniería del software se centra en la disgregación de sistemas ya constituidos en componentes, ya sean de tipo funcional o lógico.
- Interfaces: La comunicación entre estos componentes se realiza a través de interfaces perfectamente definidas.
- Responsabilidades del Componente:
* Encargado de diversas tareas, incluyendo la presentación de datos.
* Interacción con el usuario mediante la interfaz gráfica.
* La responsabilidad específica sobre lo mostrado en pantalla varía según su estado y los valores de sus atributos.
* Ejemplo: Renderizado de elementos visuales (botones, campos de texto) basado en la lógica de negocio y datos procesados.
- DAO (Data Access Object): Objeto de acceso a datos que actúa como componente de software proporcionando una interfaz entre una aplicación y distintos contenedores de datos (bases de datos o ficheros).
Concepto y Características de los Componentes
- Definición de Componente: Parte de una aplicación formada por un grupo de dependencias e interfaces con el fin de añadir funcionalidad a un software concreto.
* Es un módulo ejecutado de forma independiente como complemento de una aplicación.
* Aporta funcionalidad e interacción completamente definidas.
* Se puede añadir sin alterar otros componentes y es sustituible por otro de funcionalidad similar.
- Ejemplos de Componentes:
* Plugin: Complemento de software cuya finalidad es que un programa ejecute alguna funcionalidad que, sin él, no podría realizar.
* Extensión de navegador: Proporciona características complementarias de forma independiente e interactúa con el navegador.
- Características Fundamentales:
* Unidad de software con interfaz perfectamente definida.
* Distribuido en un paquete instalable y único que engloba todo lo necesario para su actividad.
* Posee poca o ninguna dependencia de otros componentes o librerías.
* Posibilidad de ser implantado y desarrollado en cualquier lenguaje de programación (aunque se enfocan en la Orientación a Objetos).
* Producto comercial de gran calidad, generalmente de fabricantes especializados (aunque existen gratuitos).
* Simplificación de la instalación, configuración e integración para que el código fuente adicional necesario sea mínimo.
Propiedades y Tipos en Java Beans
- Definición de Propiedad: Atributo de una clase con un conjunto de atributos y sus propios métodos de acceso para permitir la modificación del aspecto o comportamiento de la aplicación.
- Métodos de Acceso:
* Getter: Posibilita el acceso a la información de una propiedad concreta.
* Setter: Se ocupa de modificar el valor de la propiedad.
- Tipos de Propiedades:
* Propiedades simples: Representan un único valor y poseen un getter y un setter sin cambiar el valor.
* Propiedades indexadas: Representan una lista de valores.
* Pueden devolver la lista completa o un valor específico mediante un índice.
* Deben contar con métodos para lectura/escritura de todos los elementos (tipo array) y de un valor individual pasado por parámetro.
* Propiedades compartidas: Ambas condiciones se encuentran en el paquete
java-beans:
1. La clase bean debe incluir los métodos addPropertyChangeListener() y removePropertyChangeListener().
2. Al cambiar el valor, el bean remite un evento PropertyChangeEvent que recibe un objeto de tipo PropertyChangeListener.
* Propiedades restringidas: Capaces de restringir sucesos.
* Antes de cambiar, se consulta al listener.
* Si un listener veta el cambio, el atributo no cambia su valor.
* Tipos de listeners: El que veta el evento y el que captura el evento para notificar el cambio. - Definición de Suceso: Cambio producido durante una ejecución.
Atributos en Java: Naturaleza y Uso
- Definición de Atributo: Característica o propiedad específica de un objeto o entidad. Identifican cada objeto otorgándole individualidad.
- Diferencia entre Atributo y Variable:
* Atributo: Variable asociada a un objeto que define sus propiedades.
* Variable: Espacio de memoria de almacenamiento temporal durante la ejecución.
- Tipos y Declaración: Se declaran dentro de la clase usando la palabra clave
private. Pueden ser int, String, boolean, etc. - Categorías de Atributos de Java (como lenguaje):
* Portabilidad: Ejecución en diversas plataformas sin modificaciones importantes.
* Object-Oriented: Organización basada en objetos y clases para reutilización y modularidad.
* Simplicidad: Sintaxis clara, concisa y fácil de aprender.
* Seguridad: Sistema integrado contra virus; modelo basado en sandbox para entornos controlados.
* Rendimiento: Compilación JIT (Just-In-Time) que convierte el bytecode en código nativo durante la ejecución.
- Características Principales en Java:
* Privados por defecto (acceso mediante métodos de la clase).
* Modificables vía set y obtenidos vía get.
* Valores predeterminados o inicializados por el programador.
* Estáticos: Compartidos entre todas las instancias.
* Final: El valor no puede modificarse tras la asignación.
- Claves para un Buen Uso:
1. Encapsulación: Atributos privados con métodos getter y setter.
2. Nombre descriptivo: Para entender su propósito.
3. Declaración superior: Al inicio de la clase para facilitar lectura.
4. Tipos adecuados: Según la naturaleza del dato.
5. No repetición: Evitar información duplicada.
Gestión de Eventos
- Definición de Evento (o Suceso): Variación producida durante la ejecución de una aplicación. Puede ser cualquier interacción del usuario.
- Patrón de Diseño Observer: Define un escenario con dos elementos:
* Lanzador del evento.
* Receptor o listener (donde se producen los cambios finales).
- Clases Derivadas de EventObject: Utilizadas para enviar datos complementarios:
*
ChangeEvent
* ConnectionEvent
* DropTargetEvent
* Notification
* PropertyChangeEvent
* StatementEvent
* TableModelEvent
Introspección y Reflexión
- Definición de Introspección: Proceso automatizado analizador de los patrones de diseño de un bean para declarar métodos, propiedades y eventos en tiempo de ejecución.
- Definición de Reflexión: Capacidad de un programa para observar y modificar su estructura durante la ejecución.
- Definición de Bean: Clase de Java que sigue los estándares de JavaBeans (posee propiedades, constructores, getters y setters).
- Clases del Paquete
java.lang (Subclases de Object):
* Class: Representa clases e interfaces en ejecución.
* Method: Información sobre métodos públicos.
* Constructor: Información sobre constructores.
* Field: Información sobre atributos. - Métodos de la Clase
Class:
* Class<?> getClass(): Retorna el tipo de clase.
* Method [] getDeclaredMethods(): Array con todos los métodos de la clase.
* Method getMethod(String nombre): Retorna métodos específicos.
* Method [] getMethods(): Array de métodos públicos.
* int getModifiers(): Modificadores de acceso.
* boolean isInstance(Object obj): Determina si un objeto es instancia de la clase.
* Package getPackage(): Paquete de la clase.
* T newInstance(): Crea nueva instancia.
* static Class<?> forName(String nombreClase): Retorna objeto de clase por nombre.
* Field[] getDeclaredFields(): Información de todos los atributos. - Métodos de la Clase
Field:
* boolean getBoolean(Object objeto), char getChar(Object objeto), double getDouble(), float getFloat(), int getInt(), long getLong(): Obtienen contenido de campos estáticos o de instancia con conversión de ampliación si es necesario.
* Class<?> getType(): Identifica la clase del atributo. - Métodos Comunes en
Constructor y Method:
* Type[] getGenericParameterTypes(): Matriz de tipos de parámetros formales.
* Type getGenericReturnType(): Tipo de retorno formal.
* Class<?>[] getParameterTypes(): Matriz de instancias de clase de los parámetros.
Persistencia del Componente y JPA
- Definición de Persistencia: Medio para recuperar datos y almacenarlos en la base de datos.
- JPA (Java Persistence API): Biblioteca de Sun Microsystems y mapeador objeto-relacional (ORM) para administrar datos relacionales en Java.
- Gestión con JPA: Permite asignar, almacenar y recuperar datos entre bases de datos relacionales y objetos Java mediante XML o anotaciones.
- API EntityManager: Facilita CRUD (actualización, obtención, borrado, inserción) sin usar código JDBC o SQL directamente.
- Componentes Clave de Persistencia:
* Persistence.xml: Fichero de configuración en la carpeta
META-INF que conecta la BD con las entidades.
* EntityManagerFactory: Clase para crear instancias de EntityManager. Representa el contexto de persistencia.
* EntityManager: Interfaz gestora de entidades y recursos.
* void clear(): Limpia el contexto.
* void persist(Object entity): Persiste el objeto.
* T merge(T entity): Combina el estado en el contexto actual.
* void remove(Object entity): Elimina la instancia.
* PersistenceContext: Empleado al invocar métodos del EntityManager contra la BD.
* Entity: Objeto que se debe persistir.
* EntityTransaction: Interfaz para gestionar transacciones.
* Query: Realiza consultas.
* int executeUpdate(): Ejecuta update o delete.
* List getResultList(): Devuelve lista de objetos (select).
* Object getSingleResult(): Select que retorna un único resultado.
Herramientas de Desarrollo (IDE)
- Definición de IDE: Entorno de desarrollo integrado que incorpora editor, compilador, consola y depurador.
- Principales IDE para Java:
* Eclipse: El más popular, código abierto (originalmente IBM). Multiplataforma (Windows, Linux, macOS). Soporta C, C++, Java, JSP, Perl, Python, PHP, etc. Destaca por sus plugins y herramientas de debug, pero consume muchos recursos en aplicaciones grandes.
* NetBeans: Código abierto. Permite desarrollo por módulos para reutilizar código. Soporta Java, C/C++, PHP, HTML5. Posee menos plugins.
* IntelliJ IDEA (Jet Brains): Versiones de pago y gratuita. Soporta Java, Rust, Perl, XML, Kotlin (gratis) y PHP, Ruby, etc. (pago). Integración con GIT. Escasez de plugins similar a NetBeans.
Empaquetado de Componentes
- Tipos de Recursos:
* Componente funcional: Ejecutables, imágenes, diseño de interfaces. Se agrupan en bibliotecas dinámicas.
* Instalación y configuración: Imprescindibles para adaptar el componente a la aplicación concreta.
- Archivos JAR: Formato tipo .zip que agrupa las clases compiladas y recursos (imágenes, iconos).
- Archivo manifest.mf: Ubicado en la carpeta
META-INF dentro del JAR. Incluye información del componente y localización de dependencias. - Herramienta Ant: Utilidad basada en XML para automatizar la construcción, compilación y empaquetado; invocada frecuentemente por Eclipse.