martes, 18 de junio de 2024

¿Qué es una expresión regular?

Las expresiones regulares, o Regex, son herramientas muy útiles para trabajar con texto. Funcionan como un "filtro" que permite buscar, identificar y manipular cadenas de texto de manera precisa y eficiente.

Por ejemplo, si necesitas encontrar todas las direcciones de correo electrónico en un documento, podrías usar una expresión regular para buscar patrones que coincidan con el formato típico de un correo (como "nombre@dominio.com"). 

Están compuestas por caracteres literales, operadores y metacaracteres, que juntos definen reglas para encontrar patrones específicos. En resumen, las expresiones regulares son ideales para tareas como la validación de datos y la búsqueda de información dentro de un texto.

lunes, 17 de junio de 2024

Ventajas de las Expresiones Regulares en el Procesamiento de Texto

Las expresiones regulares son una herramienta poderosa y versátil en la programación y el procesamiento de texto, ofreciendo múltiples ventajas que mejoran la precisión, flexibilidad, eficiencia y reusabilidad en diversas tareas. 

A continuación, se detallan sus principales beneficios:



domingo, 16 de junio de 2024

¿Por qué usar expresiones regulares?

Las expresiones regulares, también conocidas como Regex, son patrones que permiten buscar y manipular cadenas de texto de manera eficiente. Estas se componen de caracteres y símbolos que definen una estructura específica dentro del texto, y su uso aporta múltiples ventajas en el procesamiento de datos y la gestión de información. Las expresiones regulares son especialmente valiosas para la validación de datos, asegurando que la entrada cumpla con formatos específicos como correos electrónicos o números de teléfono, lo que garantiza la integridad y consistencia de los datos.

Además, las expresiones regulares facilitan la búsqueda y extracción de información relevante dentro de grandes conjuntos de texto, como archivos o páginas web. Permiten localizar patrones específicos y extraer la información asociada, automatizando tareas como la limpieza y el formato de texto. Por ejemplo, pueden eliminar espacios en blanco adicionales o reemplazar todas las ocurrencias de una palabra por otra, mejorando la eficiencia y la precisión del procesamiento de texto.

Por último, las expresiones regulares ofrecen un lenguaje flexible y poderoso para describir patrones complejos de texto, optimizando el rendimiento de las aplicaciones informáticas. Su capacidad para manejar tareas complejas con pocas líneas de código contribuye a la eficiencia y escalabilidad de los sistemas, reduciendo la necesidad de procesamiento manual y mejorando la manipulación de grandes volúmenes de texto de manera rápida y efectiva.




sábado, 15 de junio de 2024

Ejemplo Práctico de Expresiones Regulares

**Código de Producto**: - Requisito: Debe ser alfanumérico y único.


^: Indica el inicio de la cadena de texto.

[a-zA-Z0-9]: Coincide con cualquier letra mayúscula o minúscula (A-Z, a-z) o cualquier número (0-9).

+: Indica que la expresión debe coincidir con uno o más caracteres alfanuméricos.

$: Indica el final de la cadena de texto.



**Nombre del Producto**: - Requisito: Solo letras y espacios.



^: Indica el inicio de la cadena de texto.

[A-Za-zÀ-Öà-ö]: Coincide con cualquier letra mayúscula o minúscula del alfabeto latino, incluyendo letras con acentos.

\s: Coincide con cualquier espacio en blanco, incluyendo tabuladores.

+$: Indica que la expresión debe coincidir con uno o más caracteres (al menos una letra o espacio).



**Descripción del Producto**: - Requisito: Texto libre, longitud máxima de 200 caracteres.



^: Indica el inicio de la cadena de texto.

.{0,200}: Coincide con cualquier carácter (.), permitiendo una cantidad entre 0 y 200 ocurrencias.

$: Indica el final de la cadena de texto.



**Precio Base y Precio de Venta**: - Requisito: Número decimal con dos decimales.



^: Indica el inicio de la cadena.

-: Coincide con un guion opcional, permitiendo números negativos.

\\d+: Coincide con uno o más dígitos (0-9).

\\.: Coincide con el punto decimal.

{1,2}: Indica que después del punto decimal debe haber uno o dos dígitos.

$: Indica el final de la cadena.



**Categoría**: - Requisito: Solo letras.



^: Indica el inicio de la cadena de texto.

[a-zA-Z]: Coincide con cualquier letra mayúscula (A-Z) o minúscula (a-z).

+: Indica que debe haber una o más ocurrencias del patrón anterior.

$: Indica el final de la cadena de texto.



**Cantidad Disponible**: - Requisito: Número entero.


^: Indica el inicio de la cadena.

-: Coincide con un guión opcional, permitiendo números negativos.

[0-9]: Coincide con cualquier dígito del 0 al 9.

+: Indica que la expresión debe coincidir con uno o más dígitos.

$: Indica el final de la cadena.

jueves, 13 de junio de 2024

Caso de estudio – CRUD

 Planteamiento

En la empresa KD-Electronics venden productos electrónicos y desean desarrollar un sistema de gestión de inventario. En el módulo de productos se debe realizar un CRUD, es decir, el registro (create) de nuevos productos en el inventario con su código de producto, nombre, descripción, precio base, precio de venta, categoría y cantidad disponible; así mismo, la actualización (update) de todos los campos, excepto el código del producto; en la parte de eliminación (delete) del producto, no se podrá eliminar físicamente y se debe permitir traer consultas (read) por código de producto.

Desarrollo

Para implementar un sistema de gestión de inventario en Java que permita realizar operaciones CRUD sobre productos, primero crearemos una clase Producto que represente los datos de los productos. Luego, implementaremos un controlador para gestionar las operaciones CRUD y finalmente una vista por consola para interactuar con el sistema.


Clase Producto

Gitub

https://github.com/jdavisanb/Unimin_POO_S6/blob/695e245bd2689ae9b0d8a8848a3c26a1f0628fe6/Clase_Producto


Explicación detallada:

Atributos de la clase:

codigo: El código único que identifica al producto.

nombre: El nombre del producto.

descripcion: Una breve descripción del producto.

precioBase: El precio base del producto.

precioVenta: El precio de venta del producto.

categoria: La categoría a la que pertenece el producto.

cantidadDisponible: La cantidad disponible del producto en el inventario.

 

Constructor:

Producto(String codigo, String nombre, String descripcion, double precioBase, double precioVenta, String categoria, int cantidadDisponible): Este constructor inicializa un nuevo objeto Producto con los valores proporcionados.


Métodos Getters y Setters:

getCodigo(): Devuelve el código del producto.

setNombre(String nombre), setDescripcion(String descripcion), setPrecioBase(double precioBase), setPrecioVenta(double precioVenta), setCategoria(String categoria), setCantidadDisponible(int cantidadDisponible): Estos métodos permiten modificar los atributos del producto excepto el código, ya que este no se puede cambiar una vez asignado.


Método toString():

toString(): Devuelve una representación en forma de cadena de texto del objeto Producto, mostrando todos sus atributos. Esto es útil para mostrar información del producto en la consola.


Clase ProductoController

Github

https://github.com/jdavisanb/Unimin_POO_S6/blob/97f9ee7c2b1310c23d6c05cf8a1422e5ef9c3d72/ProductoController


Explicación detallada:

Atributo inventario:

Map<String, Producto> inventario: Un mapa que almacena los productos utilizando su código como clave. Permite acceso rápido a los productos por su código.


Constructor:

ProductoController(): Inicializa el inventario como un HashMap.

 

Métodos CRUD:

createProducto(String codigo, String nombre, String descripcion, double precioBase, double precioVenta, String categoria, int cantidadDisponible): Crea un nuevo producto y lo agrega al inventario. Imprime un mensaje de confirmación en la consola.

readProducto(String codigo): Busca un producto en el inventario por su código y lo devuelve.

updateProducto(String codigo, String nombre, String descripcion, double precioBase, double precioVenta, String categoria, int cantidadDisponible): Actualiza los atributos de un producto existente (excepto el código). Si el producto no se encuentra, imprime un mensaje en la consola.

deleteProducto(String codigo): Marca un producto como eliminado estableciendo su cantidad disponible a 0. Si el producto no se encuentra, imprime un mensaje en la consola.


Clase Main

Gitub

https://github.com/jdavisanb/Unimin_POO_S6/commit/3e6041c33a477d6b2fe6de6ebbf51537af8c8864

 

Explicación detallada:

Inicialización:

ProductoController controller = new ProductoController(): Crea una instancia del controlador de productos.

Scanner scanner = new Scanner(System.in): Crea una instancia del escáner para leer la entrada del usuario desde la consola.

 

Variables locales:

Variables como codigo, nombre, descripcion, categoria, precioBase, precioVenta, cantidadDisponible se utilizan para almacenar temporalmente la entrada del usuario.


Menú principal:

Se muestra un menú con opciones para crear, leer, actualizar y eliminar productos, así como salir del sistema.

El usuario selecciona una opción, que se lee con scanner.nextInt().

scanner.nextLine() se usa para consumir la nueva línea que queda en el buffer del escáner después de leer un entero.


Switch case para manejar opciones:

Caso 1 (Crear Producto): Se solicitan todos los datos necesarios para crear un nuevo producto. Luego se llama a controller.createProducto(...) para crear y agregar el producto al inventario.

Caso 2 (Leer Producto): Se solicita el código del producto y se llama a controller.readProducto(codigo) para buscar y mostrar el producto.

Caso 3 (Actualizar Producto): Se solicita el código del producto y todos los datos nuevos para actualizar el producto. Luego se llama a controller.updateProducto(...).

Caso 4 (Eliminar Producto): Se solicita el código del producto y se llama a controller.deleteProducto(codigo) para marcar el producto como eliminado.

Caso 5 (Salir): Se imprime un mensaje y se sale del bucle do-while, terminando el programa.

Default: Se maneja cualquier opción no válida mostrando un mensaje de error.


Cierre del escáner:

scanner.close(): Se cierra el escáner al final del programa para liberar recursos.

Reflexión personal

 Esta práctica me dejó una gran enseñanza. Descubrí que existen muchas organizaciones que trabajan incansablemente por mejorar el país, y qu...