FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
El mejor momento para liberar un objeto
Bueno no sabia que poner de titulo, asi que si algún moderador encuentra uno mejor que explique mi pregunta que lo modifique por favor.
Bueno mi pregunta es que yo tengo un programa que tiene un clase(objeto) que contiene metodos para cifrar texto plano ejemplo : xor, rotn,reverse, rc4 etc. mi pregunta viene a que si que cuando llamo al objeto TCifrado y quiero utilizar sus metodos es necesario que al momento de llamar que cree el objeto y en ese mismo instante despues de utilizarlo libere el objeto o la otra opcion que se me viene a la cabeza es que cree el objeto en el formcreate y libere el objeto al cerrar el form La verdad es algo sin mucho sentido pero imagínense que tenga 20 métodos diferentes y aveces puedo ocupar uno u otro espero sus respuestas saludos... Aqui la clase
esta es la primera forma como explico
esta es la segunda
|
#2
|
||||
|
||||
Hola BDWONG.
Si vas a usar uno o mas de los métodos de la clase varias veces durante la vida del form, considero mas práctico crear la instancia de clase en la creación del form y liberarla con él. Pero si la vas a usar por única vez veo mejor liberarla al momento de no necesitarla mas, independientemente de la cantidad de sus métodos que utilices en ese momento. De todos modos es sólo mi humilde opinión... Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
||||
|
||||
Estas en un lenguaje que no recolecta basura (en contraste con .NET, Java, etc), asi que guiate por:
Crea tan tarde como sea posible y libera tan pronto como sea posible Ahora bien, es importante entender cual es el ciclo de vida de los objetos y como se relaciona eso con el manejo de la memoria y que es lo optimo para un computador. Hay razones para desviarse de la idea general de "crea tarde/libera temprano". Sin embargo, el error de gente novata es preocuparse por la "eficiencia/velocidad", cuando es MUCHO mejor preocuparse por hacer las cosas simples y correctas. Si haces codigo simple y correcto, los compiladores modernos trabajaran de forma optima. A proposito: No tienes que hacer siempre un objeto. Delphi no es Java! Hacer funciones esta muy bien, y de hecho, es la forma MAS natural cuando tienes algo que es ENTRADA -> PROCESO -> SALIDA. Y te ahorras el tener que crear/destruir objetos y todo eso. Delphi es muy versátil. Un montón de cosas se puede simplificar usando funciones/estructuras que reemplazan mucho codigo a punta de clases, y que puede ser mas legible y eficiente.
__________________
El malabarista. |
#4
|
||||
|
||||
Mario,
Cita:
Nelson. |
#5
|
||||
|
||||
Gracias por los consejos la verdad es que hay que veces que uno se mal acostumbra, como dice mamcx Delphi no es java y es cierto yo que vengo de este lenguaje aveces de manera inconsciente cargo conceptos los cuales no se pueden aplicar en todas partes por eso me gusto Delphi ya que no te obliga ha hacer las cosas solo de una forma si no que te da varias.
ecfisa pienso igual que tu XD gracias por su ayuda chicos saludos..... |
#6
|
||||
|
||||
Hola BDWONG.
Yo creo que la respuesta mas directa a la pregunta ¿ Cuál es el mejor momento para liberar un objeto ? es: Cuando ya no precises usarlo. Pero en la práctica hay situaciones en las que no se conocen a priori cuales, ni cuantas veces precisarás llamar a alguno de sus métodos. Si bién podrías crear/destruir el objeto las N-veces que precises usarlo, considero mas práctico y menos propenso a errores (por LOC), unificar la creación y liberación del objeto con la del formulario. Por otro lado, si tu intención es encapsular varios métodos en una clase y esta sólo contiene métodos, nada te impide usarlos sin tener que crear una instancia de la misma, como podría hacerse en el caso de tu ejemplo:
Uso:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 04-12-2014 a las 06:57:06. |
#7
|
||||
|
||||
Cita:
Aquí te doy toda la razón. Además, usando el nombre de la unidad puedes usarlo como si fueran "objetos" aunque realmente no lo sean. Por ejemplo, puedes escribir "sysutils.ExtractFilePath (NombreArchivo)", como si "sysutils" fuera un objeto. |
#8
|
||||
|
||||
Cita:
Cita:
Pero no es bueno generalizar. Como todo, hay malas y buenas implementaciones. P.D: Una idea muy interesante, que sin GC logra el objetivo a nivel mas general http://blog.skylight.io/rust-means-n...lose-a-socket/
__________________
El malabarista. |
#9
|
||||
|
||||
Gracias ecfisa por tu respuesta, yo no sabia que se podían utilizar métodos de una clase si previamente haber creado un objeto, si me di cuenta pero pensé que era error de mi delphi
La verdad que no me siento nada cómodo con esta característica siento que para este ejemplo que estoy haciendo sera mas conveniente utilizar una unit común y corriente porque me da la impresión que crear un clase para jamas instanciar su objeto no seria realmente usar poo, ademas que sentiré que estoy haciendo que un problema relativamente sencillo se convierta en una revoltura de complicaciones. Saludos...... |
#10
|
||||
|
||||
Hola BDWONG
Cita:
En este caso específico como comentas, no aporta beneficios. Mi intención era solo comentarte que si deseabas hacerlo, Delphi también lo permite. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#11
|
||||
|
||||
Hola,
Entonces, que me quede claro, ¿se pueden usar métodos de una clase sin instanciarla y sin que dichos métodos estén declarados como "de clase"? Este Delphi... |
#12
|
||||
|
||||
Se puede pero no se debe...
Este ecfisa... // Saludos |
#13
|
||||
|
||||
Y porque no?
Los class methods se usan regularmente de la forma exacta que se describe, no solo en Delphi sino en todos los lenguajes que soportan esta opcion.
__________________
El malabarista. |
#14
|
||||
|
||||
David,
Cita:
Revisa este código: El código anterior en Delphi 7 sobre Windows 7 Professional x32, ejemplifica el uso del tipo Object y de Métodos de Clase y de Instancia. Nota: El tipo object permite instanciar objetos sin usar el método Create y es muy util para implementaciones de tipos abstractos simples, para desarrollos formales orientados a objetos se debe usar el tipo Class. Revisa esta información: Espero sea útil Nelson. Última edición por nlsgarcia fecha: 05-12-2014 a las 20:33:21. |
#15
|
||||
|
||||
Hola.
Agrego algo a lo expuesto por Nelson. El detalle es, que conviene abstenerse de incluir métodos virtuales cuando se usa el antiguo estilo Pascal de declaración, con las nuevas versiones de Delphi. Eso trae aparejado problemas que ya han sido reportados en QualityCentral: Using old style Objects in D2009 fails Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#16
|
||||
|
||||
Daniel,
Cita:
Revisa este código: Tomado de : QualityCentral-Using old style Objects in D2009 fails El código anterior que falla en Delphi 2009 según se indica en QualityCentral, funciona correctamente en Delphi 2010 y Delphi XE6 sobre Windows x32 y Delphi XE7 sobre Windows 10 Technical Preview x32, al parecer el problema reportado solo aplica a Delphi 2009, no obstante para desarrollos formales orientados a objetos se debe usar el tipo Class. Espero sea útil Nelson. |
#17
|
||||
|
||||
Hola Nelson.
Bién por Embarcadero que lo haya solucionado en las versiones posteriores. Quede la advertencia para aquellos que usan la versión 2009 entonces... Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#18
|
||||
|
||||
No hay razon para decir que es "anormal" usar class methods. La idea de que solo es OO si se usan clases/objetos es solo un subproducto de que desafortunadamente la OO que se hizo popular es la deficiente implementación de C++/Java.
En ausencia de un sistema de modulos, los class methods se pueden usar tal como es usar funciones "simples". No hay razon para crear objetos para solo hacer un procesos que se puede directo con funciones/class-methods.
__________________
El malabarista. |
#19
|
||||
|
||||
Cita:
Cita:
No tenemos nada en contra de los métodos de clase // Saludos |
#20
|
||||
|
||||
De hecho los métodos de clase están bastante difundidos ya en las bibliotecas Delphi nativas y de terceros. Cubren diversas necesidades. Menciono las que ahora vienen a mi memoria:
Un saludo. Al González. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Un momento, ¿no sería mejor comenzar con Python 3.x? | Al González | Python | 4 | 05-04-2011 16:30:43 |
Liberar un objeto Com | marcosl | OOP | 1 | 25-10-2007 00:10:19 |
Liberar el foco de un objeto | Velia | Varios | 4 | 18-11-2005 01:08:08 |
Liberar un objeto | xerkan | Servers | 1 | 28-10-2003 17:29:10 |
|