Re: [Python-es] Un problema de herencia múltiple.
Pavel Muñoz
minibota en gmail.com
Mar Ene 15 00:20:13 CET 2008
ok... ya lei tu explicacion, entiendo el problema.... ahora dame tiempo de
revisar tu codigo
2008/1/14 José Miguel Sánchez Alés <aussiliar en online.fr>:
> (Redirecciono a la lista de nuevo)
>
> El Mon, 14 de Jan de 2008, a las 03:46:45PM -0600, Pavel Muñoz dijo:
>
> > Podiras decirnos un poco mas directamente, cual es el objetivo de todo
> > esto?... pregunto esto porque me parece que deberiamos hacer un pequeno
> > rediseno de tus clases y quiero saber que es exactamente lo que esperas
> que
> > hagan.
>
> Por supuesto lo explico mejor e, incluso, os dejo el enlace[1] al módulo
> por
> si lo queréis ver/aprovechar.
>
> El módulo pretende calcular hipotecas, en concreto, cada cuota mensual y
> cada deuda (es decir, el dinero que aún queda por pagar al banco).
>
> Existen varios tipos de hipotecas (de cuotas constantes, de
> amortizaciones constantes, de cuota con crecimiento geométrico, etc.).
> Deduje las fórmulas hipotecarias de cada tipo y llegué a la conclusión
> de que deuda y cuota se podían reducir a una misma fórmula para todos
> los tipos, que dependían de dos parámetros que llamé K__ y Z__,
> característicos de cada tipo de hipoteca.
>
> Así pues definí las siguientes clases:
>
> * PatronHipoteca (que es la clase A de mi post) y que implementa los
> métodos cuota y deuda comunes para todas las hipotecas.
>
> * SistemaFrances (cuotas constantes), QuotaCreGeo y QuotaCreAri cuya
> clase antecesora es PatronHipoteca y que definen los parámetros K__ y
> Z__. Estas clases son las B de mi anterior post y que yo reduje a dos
> porque como verás más adelante el sistema francés no me da problemas.
>
> * SistemaAleman (amortizaciones constantes), que me di cuenta viendo
> las fórmulas que me habían salido que era un caso particular de
> QuotaCreA. Así pues SistemaAlemán hereda de QuotaCreAri.
>
> Hasta aquí todo bien. Estos son los tipos teóricos de hipotecas. El
> problema es la práctica bancaria.
>
> Los bancos no usan los tipos teóricos puros. Y me explico. Por ejemplo,
> QuotaCreGeo implementa una hipoteca con cuotas de crecimiento
> geométrico, es decir, si el primer mes la cuota es Q, el segundo es a*Q,
> el tercero a^2*Q y así sucesivamente. Sin embargo, los bancos no hacen
> eso. Los bancos mantienen durante un año (doce mensualidades) constante
> la cuota mensual Q. A continuación, multiplican por la razón "a" y
> vuelven a mantener durante un año la cuota mensual a*Q y así
> sucesivamente. Lo mismo es aplicable a la QuotaCreAri con la salvedad de
> que el crecimiento es aritmético y no geométrico.
>
> El caso es que matemáticamente puedo resolver esto fácilmente: calculo
> cuotas y deudas anuales, no mensuales, con los tipos teóricos de
> hipoteca que ya he implementado y luego fracciono las cuotas (que no
> consiste simplemente en dividir la cuota entre 12, dicho sea de paso).
> Este "fraccionamiento" de la cuota es independiente de cuál sea la ley
> de crecimiento de las cuotas (el tipo de hipoteca en otras palabras);
> siempre se hace de la misma forma.
>
> Sabiendo esto definí las siguientes clases:
>
> * QuotaMixta que es la clase que se encarga del fraccionamiento, digamos
> que de pasar las cuotas y deudas anuales calculadas con las clases del
> nivel B a cuotas y deudas mensuales. Es la clase que yo denominé C.
>
> * AmorCte, QuotaCte, QuotaCre, QuotaCreA y AmorCteAn son las clases que
> implementan los tipos "prácticos" de hipotecas de los cuales:
> - AmorCte hace amortizaciones constantes mensuales, así que no hay que
> hacer ningún fraccionamiento de la cuota y se basa directamente en
> SistemaAleman.
> - QuotaCte implementa la hipoteca de cuotas constantes. Podría hacer
> uso de QuotaMixta, pero no es necesario ya que da lo mismo hacer
> constante la cuota anual y luego hacer un fraccionamiento para
> calcular las cuotas mensuales, que directamente hacer constantes las
> cuotas mensuales. Así que se basa en SistemaFrances y tampoco da
> problemas.
> - QuotaCre, QuotaCreA y AmorCteAn son los equivalentes reales a
> QuotaCreGeo, QuotaCreAri y SistemaAleman, respectivamente. Así pues
> necesitan hacer uso de los métodos de fraccionamiento de QuotaMixta.
> Estas son mi nivel D, en el que como ves algunas hacen uso del nivel C
> (QuotaMixta).
>
> Así que me queda el siguiente esquema:
>
> cuota cuota
> QuotaCre,... <---------- QuoMixta <------- QuotaCreGeo,... +
> PatronHipoteca
> Nivel D mensual Nivel C anual Nivel B + Nivel A
>
> Es decir, el cálculo de la cuota anual se hace en el nivel B (y A), y el
> cálculo de la cuota mensual se hace, sabiendo la anual, en el nivel C.
>
> Problema: que dependiendo de cuál sea la clase del nivel D, tendré que
> escoger una u otra clase del nivel B.
>
> Presupuesto que he seguido para la implementación:
>
> - Que la implementación de un nivel más bajo no dependa de la
> implementación de un nivel más alto.
> - Que las clases del nivel D y B tengan la misma API (ya que al fin y
> al cabo, implementan hipotecas, excepto por el hecho de que las del
> nivel D tienen dos parámetros más de inicialización.
>
> Y ya no sé explicarme mejor.
>
> Muchas gracias por tu tiempo.
>
> [1]http://sio2.free.fr/hipoteca.py
>
> --
> Hay dos sistemas de conseguir la felicidad: uno, hacerse
> el idiota; otro, serlo.
> --- Enrique Jardiel Poncela. --
> Si Dióxido de Silicio | Debian GNU/Linux
> / \ (SiO2) | José Miguel Sánchez Alés
> O O Mineral de Cuarzo | sio2sio2 en gmail.com | URL #257033
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
Más información sobre la lista de distribución Python-es