Hola,
Se me ocurren algunas ventajas de usar componentes creados en tiempo de ejecución. Primeramente digamos qué es un componente. Un componente, o lo que conocemos aquí como tal, no es sino otra clase más, otro objeto más (cuando sea instanciado), con la particularidad de que el mismo puede configurarse utilizando, por ejemplo, el Inspector de Objetos de Delphi. Es decir, un componente se diferencia de una clase cualquiera en la capacidad del primero para integrarse en un entorno de desarrollo.
Refiero lo dicho (que puede resultar una obviedad) por no olvidar que un componente es una clase, ni más ni menos, otra clase más que podemos utilizar no solamente "desde el diseñador", sino en cualquier otro momento en que sea necesaria y oportuna su utilización. Pero, bueno, lo que hasta ahora he dicho no es ninguna ventaja y he dicho ya que se me ocurren algunas.
Los componentes, aun los no visuales ocupan. Ocupan un espacio en el formulario en que se añaden (sí, me refiero también a los "no visuales") y más allá ocupan nuestra atención. Quiere decirse que en parte hay que estar pendientes del componente, para asegurar que la configuración del mismo sea la correcta. A mí me está sucediendo en un programa que traigo entre manos que a veces se me olvida conectar un componente con otro. Por ejemplo, quito un componente que estaba conectado a otros. Pego este componente de nuevo (he hecho algunos cambios en la interfaz) y se me olvida conectar el componente en cuestión.
Puede verse cómo un componente "no visual" además de ocupar un espacio (aunque mínimo) ocupa la atención, parte la perspectiva, no sé si me explico. Ahora imaginemos el mismo componente usado en el código, como una clase más, entre el resto de la codificación necesaria, esto es, precisa, para llevar a cabo la tarea que se supone hay que llevar a cabo. El componente (en este caso ya una clase más, puesto que no lo tratamos desde el Inspector de Objetos) está donde tiene que estar, se crea donde tiene que hacerlo, se destruye o no cuando sea necesario y se configura allí mismo, donde es menester su ayuda: no hay que mirar a otro lado, todo está ahí donde tiene que estar.
Pero, en fin. Lo dicho no puede valer como ventaja del uso de un componente como una clase, sin pasar por el Inspector de Objetos, por entendernos. Y cuando lo fuera sería una ventaja, y he dicho ya que veo varias ventajas. El aprovechamiento en cierto modo del "polimorfismo" es una cosa más a tener en cuenta. Se me ocurren unos componentes que he conocido hace unos días y que se dedican al cifrado y descifrado de archivos, cadenas, etc.
Estos componentes (son un par de docenas, al menos) se dividen en dos grupos: "Hashes" y "Algoritmos". Todos los de algoritmos (de cifrado) se representan por componentes no visuales y todos los "Hashes" lo mismo. Si uno quisiera hacer un cifrador/descifrador utilizando todos los algoritmos disponibles y todos los "Hashes" podría optar por situar en un formulario todos los componentes "Hashes" y todos los algoritmos disponibles. Esto puede hacerse, pero también puede hacerse de otro modo.
Puesto que todos los algoritmos descienden de un mismo componente (ya no es tal, es una simple clase, que sirve, como digo, de base a todos los componentes "algoritmos") y todos los "Hashes" descienden también de una clase base, mediante un "case .. of" y el "polimorfismo" podremos hacer lo que pretendemos sin haber puesto un solo componente sobre el formulario. Nos hemos librado de espacio, pero yo creo que no solo de espacio nos hemos librado.
No voy a decir más nada porque creo que otra vez me estoy metiendo en camisas de once varas. Habrá a quien se le ocurran más ventajas, pero, tendré que dejar al menos el pabellón de los componentes alto, me explicaré. No he leído ni en un libro ni en dos (y no he leído muchos) que el desarrollo de programas mediante el uso de componentes, que creo empezó con Visual Basic (Delphi fue una "Visual Basic Killer", tengo entenido también) ha revolucionado, de algún modo, la forma en que se crean programas, ni más ni menos.
O sea que, aunque se encuentren ventajas del uso de componentes como clases (como al fin y al cabo, insisto, es lo que son) también se encontrarán ventajas en el uso de los diseñadores, asistentes, inspectores de objetos y demás herramientas útiles como no puede dudarse. O sea, al César lo que es del César, vamos.
Y no digo más, que luego todo se sabe.
