Aprendiendo a pensar en Objetos (III)

En el último artículo vimos como se definían los objetos correspondientes a los datos del Cliente, el Artículo y la Forma de Pago. Ahora veremos como definir los objetos Linea de Factura, Linea de IVA y Linea de Vencimiento.

Objeto Linea de Factura

Objeto Linea de Factura

Objeto linea de IVA

Objeto linea de IVA

Objeto Linea de Vencimiento

Objeto Linea de Vencimiento

Estos tres objetos definen cada uno a una única línea, para poder usarlos en la aplicación debemos contar con algún mecanismo que nos permita tener agrupados varios en forma de lista, cada lenguaje de programación dispone de su propio mecanismo, generalmente un array. En la librería complements para Harbour contamos con mecanismos para manejar listas de objetos, además de otras muchas cosas.

Al mirar detenidamente el objeto Linea de Venta podréis echar en falta que no están definidos los datos de Precio e IVA, aunque si lo pensáis con atención veréis que si están, dentro del Objeto Artículo. Pero… ¿y si hay necesidad de modificarlos? Ante todo, recordemos que estamos trabajando con Objetos, por lo que el Objeto Artículo puede ser modificado sin que se altere el valor original que haya almacenado en la base de datos.

¿Por qué hay métodos para el cálculo del importe de la linea de venta o de la cuota de IVA? Una de las ventajas de trabajar con Objetos es que podemos invocar a los métodos que necesitemos para que realicen un cálculo y nos lo devuelva de forma inmediata, así ahorraremos código para realizar los cálculos y nuestro Objeto funcionará de forma inteligente.

¿Dónde se calculan los datos de las lineas de IVA y de los vencimientos? Si nos fijamos en la estructura del Objeto Factura, veremos que tiene un método que se llama “Cálculo del Total Factura”; desde este método recorreremos todas las líneas de la lista de Objetos Linea de Factura y realizaremos los cálculos correspondientes, generando, cada vez que se invoque, las correspondientes lineas de IVA y de Vencimientos.

Ya hemos diseñado nuestro Modelo de Datos pensando completamente en Objetos, para nada hemos hablado de estructuras de tablas ni nos importa como estarán los datos almacenados en la base de datos. Es posible que esta forma de plantear y resolver un problema de programación sea difícil de ver, ya que, al estar acostumbrados a trabajar a partir de tablas, no paramos de pensar como van a guardarse los datos. Insisto: no debe importarnos lo más mínimo como serán (o son) las tablas de la base de datos; para programar usando POO hay que pensar en objetos.

Ahora toca depurar el modelo antes de construir las Clases. Os animo a hacerlo y, ya os aviso, he cometido un pequeño error que me gustaría descubráis. Dejadme un comentario con la respuesta y luego desvelo el misterio.

Anuncios

2 comentarios

  1. José Alfonso,

    Me encantan tus posts de modelado de datos.

    Yo he encontrado dos issues:
    1) La factura tiene un objeto forma de pago pero no es necesario porque el cliente ya lo incorpora.
    2) Puede faltar en la clase factura un par de métodos generadores/regeneradores de objetos linea de iva y línea de vencimientos. Así que para solucionarlo, a la clase factura le pondría dos métodos: :GeneraLineasIva() y :GeneraLineasVencimiento(), que podrian ser invocadas durante la edicion de la factura, cuando se modificara algún dato que les afectara, si es necesario visualizar su contenido durante la edicion, o bien al finalizar la edicion de la factura, si no es necesario visualizar su contenido durante la edicion.

    A ver si alguno de estos son el ‘gazapo oculto” y me llevo el ‘premio’ 😉
    El amigo.

    PD. Sería interesante para los que no usamos Xailer que el desarrollo de este tema lo pudieras hacer usando código Harbour puro. Si no es posible no pasa nada, no está mal aprender cosas nuevas.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: