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.