Re: Otra vez la herencia múltiple

Medardo Rodriguez med.swl en gmail.com
Mar Jul 29 17:09:03 CEST 2008


2008/7/29 Antonio Beamud Montero <antonio.beamud en gmail.com>:
> No entiendo por que es un disparate conceptual. Una clase puede tener
> métodos no implementados y a su vez definir carácteristicas que deben
> cumplir las clases que heredan de esta, como invariantes,
> precondiciones, postcondiciones, etc...

Creo que este correo es OFFTOPIC porque ésta es una lista de Python,
no de teoría de programación, pero no me parece correcto negarme a
responder. Mis disculpas de cualquier forma.

Tengo mis problemas al comunicarme sobre programación porque, aunque
programo mucho, mi formación es muy académica (teórica).
Veo la programación en el contexto de la Teoría (Ingeniería) del
Conocimiento. Los seres humanos percibimos (interpretamos) el mundo
que nos rodea y no sólo nos representamos el conocimiento como
abstracciones de nuestra conciencia, sino también a través de modelos
formales. Uno de las categorías de estos modelos formales es la de los
programas de computadoras (nuestra profesión). Por tanto, todos los
modelos que no se expresen en estructuras de nuestro razonamiento, son
incorrectos (disparatados), al menos no son el modelo canónico.

En uno de los correos de esta lista alguien dijo que en Python se
pueden hasta lograr clases abstractas. Claro que sé a que se refiere,
pero todas las clases son abstractas por definición; son precisamente
las abstracciones de los modelos formales OO.
Que hayan clases más abstractas que otras es sólo un problema
cuantitativo, nunca cualitativo, y las menos abstractas siguen estando
en esa misma cualidad.

Un método sin implementación es un concepto extensivo, y sólo pueden
ser parte de la definición de un protocolo de comunicación (tipo). En
todos los lenguajes se definen tipos al mismo nivel de la declaración
de las clases, pero esto es un problema histórico y de respetar lo que
ha sido la práctica más común. Pero no quiere decir que sea lo
correcto.

En mis experiencias con lenguajes de programación que permiten
definiciones formales de tipos, mis modelos que no tienen dependencias
de bibliotecas ajenas, no tienen definiciones públicas en sus clases,
no uso la palabra virtual y menos abstract.

Las clases siempre expresan contenido concreto. Los métodos sin
implementación deben ir en los tipos o interfaces que esa es su
naturaliza. Las clases son extensivas sólo nominalmente y por tanto,
en este plano importa sólo la taxonomía que crea la herencia entre
clases. Todo lo demás en ellas es intensivo.


Saludos
_______________________________________________
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