Explicación Tfi4
Audio version created with Paper2Audio.
Listen on Paper2Audio
Explicación Tfi4
Contexto adicional
Este documento se enmarca dentro del campo de la programación orientada a objetos (POO), un paradigma fundamental en el desarrollo de software moderno. La POO se centra en la idea de "objetos" que contienen datos (atributos) y código (métodos) para manipular esos datos. Las clases, como `Producto` y `Venta` presentadas aquí, son los planos para crear estos objetos. La encapsulación, un principio clave de la POO, se demuestra al agrupar los datos y los métodos que operan sobre ellos dentro de una misma unidad (la clase), y al controlar el acceso a los datos mediante métodos como `getters` y `setters`. Esto ayuda a proteger la integridad de los datos, como se ve en la validación del precio y el stock del producto, o la longitud del DNI del cliente. El manejo de excepciones, mediante el uso de `raise` y `try/except`, es otra práctica esencial en la POO para gestionar errores de forma controlada, evitando que el programa se detenga abruptamente y permitiendo una recuperación o notificación adecuada, como se aplica al validar los datos de los clientes y productos. La librería `datetime` para la gestión de fechas y horas es una herramienta común en muchas aplicaciones, desde sistemas de punto de venta hasta aplicaciones de gestión de proyectos, asegurando que las transacciones se registren con precisión temporal. El diseño de estas clases sienta las bases para construir sistemas más complejos y robustos, como sistemas de gestión de inventario o plataformas de comercio electrónico, donde la correcta administración de productos, ventas y clientes es crucial para el éxito operativo.
:
Table summary: La definición de la clase Producto en Python, que implementa encapsulamiento para gestionar el precio y el stock. El precio se valida para que sea mayor a cero y se redondea a dos decimales, mientras que el stock no puede ser negativo. La clase incluye métodos para reducir el stock, actualizar métricas de ventas mediante la cantidad y el monto vendido, y un método especial para representar el producto indicando si está DISPONIBLE o AGOTADO según su stock.
2 Definitions
Definition 1: excepción: Un evento imprevisto que ocurre durante la ejecución de un programa y que interrumpe el flujo normal de las instrucciones. Se puede 'atrapar' para manejar el error de forma controlada.
Definition 2: setter: Un método especial en programación que se utiliza para asignar o modificar el valor de una propiedad (variable) de un objeto. A menudo incluye validaciones para asegurar que el valor sea correcto.
raise es la palabra clave para lanzar (generar) una excepción manualmente. Cuando se ejecuta, el flujo normal se interrumpe y la excepción "sube" hasta que alguien la atrape con un try/except. Si nadie la atrapa, el programa se detiene con un mensaje de error. En este sistema, las excepciones de los setters son atrapadas en los métodos de registro del SistemaVentas.
2.3 — Método reducir stock
Reduce el stock del producto. Antes de reducir, verifica que haya suficiente stock. Al usar self.stock -= cantidad, internamente se llama al setter, que también valida que el resultado no sea negativo (doble protección).
2.4 — Método actualizar_metricas venta
Este método centraliza toda la lógica que debe ocurrir cuando se vende un producto:
1. Llama a reducir guion bajo stock paréntesis cantidad paréntesis para disminuir el inventario
2. Incrementa cantidad vendida con la cantidad vendida
3. Incrementa monto vendido con el subtotal de la venta
2 Definitions
Definition 1: getter: Un método especial en programación que se utiliza para obtener o leer el valor de una propiedad (variable) de un objeto.
Definition 2: objeto: En programación orientada a objetos, una 'cosa' o entidad que tiene propiedades (datos) y métodos (acciones) asociados. Por ejemplo, un cliente puede ser un objeto con propiedades como nombre y DNI, y métodos como 'actualizar_metricas venta'.
• Encapsulación del DNI: Al igual que con el precio, el DNI tiene un getter y setter. El setter valida que el DNI tenga exactamente 8 días numéricos. Esto proporciona seguridad a nivel de objeto: no importa desde dónde se intente asignar un DNI, siempre se validará.
Definition
diseño defensivo: Una estrategia de programación que anticipa posibles errores o usos incorrectos y añade protecciones para que el programa siga funcionando de forma segura, incluso en situaciones inesperadas.
• Validación redundante: Ya tenemos la función leer dni() que valida la entrada. ¿Por qué validar de nuevo en el setter? Porque en buen práctica de diseño defensivo. Si en el futuro alguien crea un Cliente directamente (sin pasar por el menú), la clase sigue protección del DNI.
• Método __str _: Proporciona una representación legible: "12345678 - Juan Pérez".
Operador not en la condición if not (len(valor) == 8 and valor.isdigit():
El not invierte el resultado. La condición es True cuando el DNI es inválido (no tiene 8 dígitos o no son todos numéricos). Si inválido, se lanza el error.
Table summary: Definición de la clase Venta en Python, la cual gestiona la información de una transacción. El constructor inicializa el número de operación, el cliente y utiliza la librería datetime para asignar automáticamente la fecha y hora actuales. La clase incluye el método agregar_detalle para añadir objetos de tipo DetalleVenta a una lista, el método calcular_total que suma los subtotales de dichos detalles, y un método especial para representar la venta como una cadena de texto que muestra el número de operación, fecha, hora, nombre del cliente y el monto total en soles.
Ha llegado al final del documento.