FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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! |
#2
|
||||
|
||||
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 |
#3
|
||||
|
||||
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.
|
#4
|
|||
|
|||
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! |
#5
|
||||
|
||||
¡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. |
#6
|
||||
|
||||
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, |
#7
|
||||
|
||||
Me gusta el enfoque de Al.
No me imaginaba muchos casos de uso práctico de estos tipos de propiedades... es posible que en este tipo de casos sea de buena utilidad. Y bastante económica por cierto. Saludos, |
#8
|
|||
|
|||
Antes que nada, gracias por las ideas, sugerencias y predisposición.
Les cuento la idea. Quiero implementar una solución a una serie de MUCHISIMOS algoritmos que tengo. Entonces se me ocurrió abstraerlos un poco. Les cuento cómo es la idea: tengo una clase base (abstracta) y, luego, cada implementación es una clase heredada. La clase base brinda lo necesario para su registración (plugineo) y consiguiente utilización, además de información, testeo, benchmark y algo más si se me llegase a ocurrir. La clase base tiene un "resumen" donde las clases herederas, sin ser instanciadas, brindan información para que se pueda elegir cuál de todas se va a usar (instanciar). El "resumen" consiste en: ID, Nombre, Descripción, Autor, Versión, Tipo de Licencia, Texto de la Licencia y podrían haber muchas más cosas. La idea de Las constantes fue lo primero que se me ocurrió, pero no funcionó. Era mi primera vez con las constantes de clase pero no funcionaron de la manera que esperaba. Las Variables de clase tampoco. Hacer una función por cada uno de los elementos del "resumen" es una locura... imagínense que, en un principio tengo como 40 ó 50 clases para hacer y luego seguro que me espera una tanda más. La idea entonces era escribir en cuanto al resumen lo menos posible para poder dedicarme a las implementaciones. Por ahora estoy implementando una solución que, a mi entender, no es muy eficiente que digamos, pero CREO que es funcional:
De esta manera hago sólo una función... y un algoritmo es un derivado de otro y sólo cambia el ID/nombre, sólo sobreescribo esta función y hago lo siguiente:
De esta manera heredo el nombre del autor, licencia, etc. En cuanto adapte el código a esto nuevo les cuento cómo me fué... igual lo tengo bastante verde al asunto. Espero que se haya entendido. |
#9
|
||||
|
||||
Hola poyo,
Muchas gracias por confiar en nosotros. Aquí hay mucha gente que te puede ayudar y que sabe un montón (excepto yo... ) Bueno, déjame ver si comprendo, tienes una serie de datos que debes propagar por la herencia, y por lo que parece esta serie de datos posiblemente no sea estática... sino que tal vez pueda crecer más. Lo digo por que nos dices "y podrían haber muchas más cosas". Digamos que se compone de N "campos". Información que se necesita acceder en tiempo de ejecución, sin depender de la instancia de la clase. A su vez cada clase heredera de esos N campos va a sobreescribir unos M campos. Ahora, una vez sobreescritos en base a esos N datos, mediante algún algoritmo que desconocemos, se toma la decisión de crear una de las X clases herederas. He aquí mis dudas: 1. ¿Ese N va a ser dinámico? O después de un tiempo de análisis quedará fijado. ¿De cuanto será el valor, al menos en un estimado? 2. ¿De esos N datos, cúantos son potencialmente cambiantes en las clases herederas? ¿Se puede estimar ese M? 3. ¿Estos N datos para que se emplearán después? ¿Cálculos y operaciones dentro de la clase instanciada? ¿Le es de utilidad a la clase o sólo son empleados para tomar la decisión de cual crear? 4. ¿Las X clases descienden de esta clase base, o existe dentro de X clases, alguna cantidad Y que ramifique el árbol aún más? Es decir: Y clases descienden de una clase intermedia entre éstas y la clase base? Y si no es molestia, ¿podríamos conocer algo más del ambiente o contexto que estamos analizando? 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 |
|