código escrito · artículos digitales de informática
 
POO para funciones a 16 bits
15.04.2005 :: Jaime Irurzun

Antes de hacer perder el tiempo a nadie leyendo esto, aviso de que es una paranoia bastante seria que me entró hace un par de días en la clase de Estructuras de Datos y Algoritmos. Lo aviso: es un apaño de lo más rebuscado, ineficiente e inútil para esquivar (ni siquiera solucionar) el problema que se encuentran los programadores que aún trabajan con compiladores a 16 bits (posiblemente sólo los nostálgicos de Clipper excesivamente reacios a evolucionar).

El tema es el siguiente: una de las limitaciones de usar Clipper es que los nombres que das a las funciones que escribes no pueden tener más de diez caracteres, por lo que, por ejemplo, funciones como GuardarDatos() y GuardarData() serían consideradas la misma, y nos veríamos obligados a cambiar de nombre a una de las dos. Seguramente no estoy hábil buscando ejemplos, y en este caso la solución pasaría por algo tan sencillo como acotar el verbo Guardar y pasarlo a Guard, o bien sustituirlo directamente por Save. El problema pienso que puede surgir cuando nombramos a las funciones siguiendo patrones que identifican su lugar en la jerarquía del programa. Es algo que yo a veces hago. Si el nivel al que queremos acceder está varias ramas por debajo del nivel raíz, podríamos tener un problema al sobrepasar los diez caracteres:

LibrosImprFicha()
LibrosImprListado()
Bueno, pues la absurda solución que se me ocurrió el otro día fue servirnos de la Programación Orientada a Objetos para conseguir alargar los nombres. La idea consiste en crear clases sin atributos, cuyos métodos pasen a ser las funciones que queremos estirar:
CLASS TLibros
···method New() constructor
···method Gestion()
···method Nuevo()
···method Editar()
···method Buscar()
···method ImprFicha()
···method ImprListado()
···method Salir()
ENDCLASS
De esta forma, las llamadas a las funciones constarán de dos partes: la variable objeto y el nombre del método. Conseguimos así recortar el primer nivel, reservando los diez caracteres para el nombre del método:
Libros:ImprFicha()
Libros:ImprListado()
Ahora el compilador entendería estas dos llamadas como funciones distintas. Vamos, que es el mismo perro con otro collar (o la misma mierda con otro nombre).

comentarios (11) |


Comentarios del artículo
1 · Hermann · 16.04.2005

Paja mental del tamaño de una casa :D

Por suerte yo nunca me he topado con un compilador tan antiguo *toco madera*

2 · Claudex · 16.04.2005

Bueno, en php se utiliza eso para hacer suerte de namespaces, llamando a los métodos de forma estática. Claro, en php5 tiene su utilidad, porque existen las propiedades de clase, pero en el 4 sirve precisamente para lo que tu dices... no es tan rebuscado, después de todo.

3 · Cek · 16.04.2005

Y, ¿estás seguro de que los compiladores Clipper para 16 bits admiten POO?

4 · Jaime Irurzun · 16.04.2005

Hermann,
Me ha gustado lo de la paja mental. Creo que no lo habría definido mejor :P

Claudex,
De verdad que no imaginaba que esta idea pudiera ser útil en algún ámbito... me dejas de piedra.

Cek,
La versión 5.3 de Clipper (no sé si desde la 5.0) incluía varias clases tales como controles GET (para capturar datos por teclado). A pesar de ser un lenguaje imperativo, en sus últimas versiones pasó a ser algo mixto con POO. En cualquier caso, mi costumbre es que cuando hablo de Clipper lo relaciono con Fivewin, la librería gráfica para aplicaciones bajo Windows, que, cómo no, aporta un motor de objetos, y que es el que siempre he usado. Por eso doy por hecho que lo tienen :) Y si no lo tienen, a buscarse otra solución ;)

5 · Cek · 18.04.2005

Interesante, pero ¿la versión 5.3 de Clipper funciona en 16 bits o en 32? :)

6 · Jaime Irurzun · 18.04.2005

Cek,
En 16. Nunca hubo Clipper a 32 ;)
El actual Clipper es xHarbour (proyecto opensource derivado de Harbour). Además de estos está C3, pero en mi opinión el verdadero sucesor es xHarbour. Por cierto que para que no se diga que el xbase está desfasado, Harbour ya ha sido probado con éxito a 64 bits, ahí es nada.

7 · Cek · 25.04.2005

Pues muchas gracias por la info ;)

8 · SkOrPiOn · 27.04.2005

En realidad, no se puede acceder al motor de objetos de Clipper, porque no es público.

Pero tranquilamente puedes utilizar librerías de terceros, y hasta la mismisima Object de Feivewin, que en su tiempo tambien era utilizada en FiveDOS.

Salu2

PD: Jaime, fijate que si te olvidas de poner algun datos en los comentario y le das "enviar", te borra todo lo que escribiste, un bajón :(

9 · Jaime Irurzun · 30.04.2005

Daniel,
Gracias por el aviso, lo que ocurre es que no sé cómo solucionarlo :( Ya me había dado cuenta de que ocurría eso, pero al funcionar la gestión de contenidos bajo Movable Type, todo el tema de validaciones está en PERL y CGI...

10 · Ignacio Ortiz · 05.05.2005

Es más sencillo hacerlo con un simple #translate y además se puede hacer para que sólo opere con Clipper que es el que tiene la limitación

11 · Jaime Irurzun · 05.05.2005

Ignacio,
Ya avisé de que no llegaba ni a los límites de "solución aceptable", simplemente se me ocurrió y me dió por contarlo :)














































Creative Commons - Jaime Irurzun y Aitor Martin