FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Hola Poyo. Como siempre un gusto.
Al menos hasta Delphi 7, el compilador no permite la declaración de constantes de clase. Comparto la opinión de Marcelo. Entiendo que las constantes de clase sirven para encapsular, dentro de una clase, valores fijos que pueden ser resueltos en tiempo de compilación (una manera de definir el concepto constante) y que habrán de ser utilizados principalmente por los métodos de esa clase. Claro, para alguna rutina exterior también podrían ser útiles, pero veo que esperabas que tuvieran el mismo efecto dinámico de los métodos virtuales. No estoy seguro de que eso deba ser así, pues el comportamiento normal de un método es estático, ¿entonces por qué el comportamiento normal de una constante de clase debería ser virtual? Creo que la solución que buscas debería hacerse con métodos clase virtuales. Aunque claro, sería estupendo que el compilador aceptara esta forma alternativa de declarar métodos: (sin mayor implementación de los mismos). De momento, escribir la implementación con Begin y End tampoco significa un gran esfuerzo. Saludos. Al González. Última edición por Al González fecha: 04-02-2009 a las 16:39:17. |
#2
|
||||
|
||||
Muchas gracias Al.
Esta vez dije algo y no me llevo el tirón de orejas o una patadita bien merecido... ¡eso significa que estoy aprendiendo! Cita:
Cita:
Saludos, |
#3
|
|||
|
|||
sería fantástico declarar las funciones así!
lástima... el tema es que, en principio, tengo que hacer muchísisimas clases (más de 40, en un principio) donde cada clase tiene al menos 4 métodos virtuales que tengo que escribir para devolver un simple string... :'( La idea era ahorrarme la declaración y la implementación que involucran las funciones de Clase. Antes de ponerme de ese modo voy a probar un poco con las variables de clase, aunque estas necestan inicialización (ya que no se les puede asignar el valor en la declaración) Gracias por las respuestas! |
#4
|
||||
|
||||
Cita:
La verdad es que yo vería muy natural que las constantes de clase se comportasen como esperaba poyo. El mismo ejemplo que da con ClassName es, en mi opinión, bastante esclarecedor. En alguna ocasión me enfrenté a algo similar, queriendo hacer una jerarquía de clases para encapsular entidades reales como TCliente, TFactura, TProducto, etc., todas ellas descendientes de una clase base TObjetoPersistente. Para saber en qué tabla de la base se debían guardar los datos, cada clase debía inicializar una propiedad TableName en el constructor. Pero, realmente, dicha propiedad es una propiedad de la clase y no de una instancia en particular; así que se antojaba tener dichas constantes de clase. Como comenta Al, se puede hacer uso de funciones de clase virtuales, pero no deja de mosquear el hecho de tener una función que siempre regresa el mismo valor, ¿para qué? En fin, que no aporto nada, pero quería comentar que no se me hace extraña la necesidad del comportamiento que esperaba poyo. // Saludos |
#5
|
||||
|
||||
Vaya, al menos a mí me hace reflexionar lo que comentas. Viéndolo como explicas, quizá no estaría mal que las constantes de clase tuvieran esa capacidad.
|
#6
|
|||
|
|||
Bueno, les cuento que al final lo resolví poniendo variables de clase.
A la clase base le puse un método virtual llamado "initclassvars" y allí las inicializo todas juntas. Ese método lo ejecuto or única vez en la registración de mis classes... De esta manera achiqué CONSIDERABLEMENTE la cantidad de líneas a escribir de unas 1000 a "apenas" alrededor 350. Comparando con lo que hubiese sido lo más lógico: funciones de clase... pero me negaba a escribir taaantas veces lo mismo! Era eso un Bot que escriba por mí. jejejeje Nuevamente. Gracias por ayudarme a despejar mis dudas. -------------------------------------------------------- EDITO: Lo que puse antes fue porque canté victorio de apresurado sin haber hecho las suficientes pruebas!!!! Eso me pasa por neófito! Resulta que una clase que hereda de otra clase un "Class Var", hereda exactamente la misma variable... con la misma posición y todo... o sea, la MISMA variable y no otra de similares características. Es como si fuese una global pero que se accede con la clase como referencia: TClassEjemplo.Variable := 'valor'; o sea que si tenemos:
y yo ejecuto:
Voy a estar cambiando implícitamente el valor de TClassEjemplo.cadena; Para que cada en una nueva clase REALMENTE sea otra "Class Var", es decir con otro puntero en memoria, esta tiene que ser vuelta a declarar (no existe override, simplemente se declara del mismo modo y listo):
Perdón por el apuro. Ahora estoy pensando si agrego líneas de declaración de variables o simplemente pongo una función de clase que devuelva un record con todo junto y se acabó Última edición por poyo fecha: 05-02-2009 a las 20:13:40. Razón: error! grave error! |
#7
|
||||
|
||||
¡Hola Poyo!
Aunque quizá hay mejores soluciones (habría que ver el fondo de esta necesidad ), se me ocurre, por ejemplo, el uso de propiedades con índice y tener un arreglo global con todos los valores posibles de la constante de clase. Desarrollé un ejemplo para ilustrarlo:
Anexo el código en un archivo .zip. Saludos. Al González. |
#8
|
||||
|
||||
Hola poyo,
Me gustaría que nos comentases a que se debe todo. Si en vez de trabajar con ejemplos abstractos nos comentases con mayores detalles sobre tu caso real, tal vez podríamos proponerte alguna otra alternativa o enfoque que puedas considerar. Si, muy cierto es que si ya tienes bastante código no es bueno cambiarlo, pero quizá si nos compartes más del caso podríamos entre todos ver de que otra manera darle la vuelta y sin que tengas que afectar todo el diseño. Saludos, |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
ayuda con variables estáticas !!!!!! | david_uh | Varios | 4 | 25-07-2007 00:49:14 |
Classes | -Galadriel- | Varios | 3 | 06-06-2007 02:06:43 |
Ayudaaa Pilas estaticas | alekandro | OOP | 6 | 26-04-2006 14:04:11 |
Classes o no classes? | tramjauer | OOP | 3 | 19-08-2005 21:36:17 |
Direcciones estáticas o dinámicas | Aprendiendo | Firebird e Interbase | 1 | 02-04-2004 01:07:08 |
|