//De <Guía del desarrollador de Delphi 5>
1.2 ¿Qué es Delfos?
A menudo hacemos preguntas como: "¿Qué hace que Delphi sea tan bueno?" y "¿Por qué prefiero Delphi a otras herramientas de programación?" A lo largo de los años, hemos encontrado dos respuestas, una larga y otra corta, a preguntas como estas. La respuesta corta es: eficiencia. Para crear aplicaciones para Windows, utilizar Delphi es la forma más sencilla que podemos encontrar. Por supuesto, algunas personas (jefes y futuros clientes) no están satisfechas con esta respuesta. Por lo tanto, debemos presentar nuestra respuesta detallada, que ilustra la combinación de factores que hacen que Delphi sea tan efectivo. Resumimos los factores que determinan la eficiencia de una herramienta de desarrollo de software en los siguientes cinco puntos:
• Rendimiento del entorno de desarrollo visual.
• La velocidad del compilador y la eficiencia del código compilado.
• Las capacidades de los lenguajes de programación y su complejidad.
• Flexibilidad y escalabilidad de la estructura de la base de datos.
• Extensiones de framework para patrones de diseño y uso.
Aunque hay muchos otros factores que deben incluirse, como configuración, documentación, soporte de terceros, etc., hemos descubierto que esta es la forma más precisa y sencilla de explicar a la gente por qué elegimos Delphi. Por supuesto, los cinco puntos anteriores también pueden incluir algunos factores subjetivos, pero la clave es: ¿qué tan eficiente se puede ser al utilizar una herramienta específica para el desarrollo? Como se muestra en la Figura 1-1, el desempeño de varios aspectos de una herramienta se evalúa y cuantifica (entre 1 y 5) y se marca en cada eje de la Figura 1-1. Finalmente, se puede obtener un pentágono. Cuanto mayor sea el área del pentágono, más eficaz será esta herramienta.
No es necesario que te diga qué respuestas obtuvimos usando este método: ¡lo descubrirás por ti mismo una vez que lo pruebes! Echemos un vistazo más de cerca al desempeño de Delphi en estas áreas y compárelos con otras herramientas de desarrollo de Windows.
1.2.1 Entorno de desarrollo visual
Un entorno de desarrollo visual suele dividirse en tres componentes: editor, depurador y diseñador de formularios. Como la mayoría de las herramientas RAD (desarrollo rápido de aplicaciones) modernas, estas tres partes funcionan juntas. Mientras trabaja en el diseñador de formularios, Delphi genera automáticamente código detrás de escena para los controles que está manipulando en el formulario. También puede agregar código usted mismo en el editor para definir el comportamiento de la aplicación y también puede depurar el programa estableciendo puntos de interrupción y puntos de monitoreo en el mismo editor.
En general, el editor de Delphi es similar a los editores de otras herramientas, pero su tecnología Code Insight ahorra mucho trabajo de entrada. Esta tecnología se basa en información del compilador, en lugar de bibliotecas de tipos como Visual Basic, por lo que tiene una gama más amplia de aplicaciones. Aunque el editor de Delphi también tiene muchas buenas opciones de configuración, creo que el editor de Visual Studio tiene más espacio para la configuración. En la versión 5, la función de depuración de Delphi finalmente alcanzó al depurador de Visual Studio, con muchas características avanzadas, como depuración remota, asociación de procesos, depuración de paquetes y DLL, monitoreo local automático y ventanas de CPU. Delphi también admite la colocación y acoplamiento aleatorio de ventanas mientras depura y guarda este estado como configuración de escritorio de un comando. Como resultado, el IDE de Delphi ha logrado un buen soporte para funciones de depuración.
Como se ve a menudo en algunos entornos integrados (como VB y algunas herramientas Java), la ventaja de un depurador muy completo es que cuando se depura la aplicación, puede modificar su código, cambiando así su comportamiento. Desafortunadamente, Delphi no admite esta funcionalidad porque es demasiado compleja de implementar cuando se compila en código nativo.
Para las herramientas RAD (como Delphi, Visual Basic, C++Builder y PowerBilder, etc.), el diseñador de formularios es una característica única. Algunos de los entornos de desarrollo más clásicos, como VC++ y BC++, proporcionan editores conversacionales, pero no integran el diseñador de formularios en el proceso de desarrollo. Como puede verse en el cuadro de eficiencia de la Figura 1-1, la ausencia de un diseñador de formularios reducirá la eficiencia general de la herramienta de desarrollo. En los últimos años, Delphi y Visual Basic han estado compitiendo ferozmente para mejorar la funcionalidad del diseñador de formularios. Cada una de sus nuevas versiones tiene mejores características que la anterior. Lo que hace que el diseñador de formularios de Delphi sea único es que Delphi está construido sobre un verdadero marco orientado a objetos. De esta manera, los cambios que realice en la clase base se propagarán a todas las clases derivadas. Una de las tecnologías clave involucradas aquí es VFI (herencia de formas visuales), que es herencia de formas visuales. La tecnología VFI le permite heredar dinámicamente desde cualquier otro formulario en el proyecto actual o biblioteca de objetos. Siempre que cambia el formulario base, el formulario derivado se actualiza inmediatamente. Esta importante característica se explica en detalle en el Capítulo 4, "Marco y diseño de la aplicación".
1.2.2 Velocidad del compilador y eficiencia del código compilado
Un compilador rápido le permite desarrollar software paso a paso, modificando frecuentemente el código fuente, recompilando, probando, modificando nuevamente, compilando nuevamente, probando nuevamente ... formando un ciclo de desarrollo tan bueno. Si la velocidad de compilación es muy lenta, los desarrolladores tendrán que modificar el código en lotes, realizando múltiples cambios antes de cada compilación para adaptarse a un proceso de bucle ineficiente. Mejora la eficiencia de ejecución, ahorra tiempo de ejecución y genera códigos binarios más cortos. Su superioridad es evidente.
Quizás la característica más famosa del compilador Pascal es su velocidad, y Delphi se basa en este compilador. De hecho, puede ser el compilador de código nativo de lenguaje de alto nivel más rápido para Windows. Los compiladores de C++ que solían ser lentos han logrado grandes avances en los últimos años, agregando enlaces y varias estrategias de almacenamiento en caché, especialmente en Visual C++ y C++Builder. Pero aun así, el compilador de C++ sigue siendo varias veces más lento que el de Delphi.
¿La velocidad de compilación es necesariamente proporcional a la eficiencia de ejecución? Por supuesto que no. Delphi y C++Builder comparten el mismo compilador, por lo que el código generado es equivalente al producido por un buen compilador de C++. Según los últimos estándares de evaluación fiables, Visual C++ se considera en muchas ocasiones el más eficiente en términos de velocidad de compilación y longitud del código generado, gracias a algunas medidas de optimización extremadamente potentes. Si bien estas pequeñas ventajas son difíciles de notar en el desarrollo de aplicaciones típicas, pueden entrar en juego si se escribe código computacional complejo.
La tecnología de compilación de Visual Basic es un poco especial. Durante el desarrollo, VB opera de manera integrada y tiene bastante capacidad de respuesta. Este compilador es más lento y el código ejecutable generado es mucho menos eficiente que las herramientas Delphi y C++.
Java es otro lenguaje interesante. Los últimos lenguajes de herramientas basados en Java, JB uilder y Visual J++, afirman que su velocidad de compilación puede igualar
Es comparable a Delphi, pero la eficiencia de ejecución del código generado no es satisfactoria porque Java es un lenguaje integrado. Aunque Jave está progresando constantemente, su velocidad de ejecución todavía está muy por detrás de Delphi y C++ en la mayoría de las situaciones.
1.2.3 Funcionalidad y complejidad de los lenguajes de programación
La funcionalidad y complejidad de un lenguaje dependen de quien lo mira y son objeto de mucho debate. Lo que es simple para una persona puede ser difícil para esa persona; lo que puede ser de funcionalidad limitada para una persona puede ser perfecto para otra. Por lo tanto, los siguientes puntos se basan únicamente en la experiencia y comprensión personal del autor.
El ensamblador es fundamentalmente el lenguaje más poderoso. Puedes hacer casi cualquier cosa con él. Sin embargo, incluso desarrollar la aplicación más sencilla en el ámbito del montaje es muy difícil y puede no conducir a nada. No sólo eso, sino que a veces es simplemente imposible mantener un fragmento de código ensamblador en un entorno de desarrollo grupal durante un período de tiempo prolongado. A medida que el código pasa de una persona a otra y a la siguiente, las ideas e intenciones del diseño se vuelven cada vez más confusas, hasta que el código parece un libro caído del cielo. Como resultado, calificamos el ensamblaje como muy bajo, ya que es potente pero demasiado complejo para casi todos los desarrolladores.
C++ es otro lenguaje extremadamente poderoso. Con la ayuda de sus características potenciales (como macros de preprocesador, plantillas, carga de operadores, etc.), casi puedes diseñar tu propio lenguaje usando C++. Siempre que utilice correctamente sus ricas opciones funcionales, podrá desarrollar código conciso, intuitivo y fácil de mantener. El problema, sin embargo, es que muchos desarrolladores abusan de estas funciones, lo que fácilmente puede provocar errores importantes. De hecho, es más fácil escribir código C++ incorrecto que escribir código C++ bueno. Porque el lenguaje en sí no avanzará en la dirección de un buen diseño, eso depende de los desarrolladores.
Object Pascal y Java nos parecen muy similares porque comprenden bien el equilibrio entre complejidad y funcionalidad. Todos adoptan el enfoque de limitar su funcionalidad disponible para mejorar el diseño lógico del desarrollador. Por ejemplo, ambos evitan el concepto de herencia múltiple totalmente orientado a objetos, pero del que se abusa fácilmente, y en su lugar implementan una única clase que realiza la funcionalidad de múltiples interfaces. Ninguno de los dos admite una carga de operador hermosa pero peligrosa. Ambos tienen algunas características poderosas, como manejo de excepciones, información de tipo de tiempo de ejecución (RT TI) y memoria de vida de cadena autoadministrada. Al mismo tiempo, ninguno de los idiomas está escrito por un consejo editorial dedicado, sino que proviene de individuos o grupos dentro de una sola organización que comparten una comprensión común del idioma.
Visual Basic se diseñó originalmente para facilitar a los principiantes comenzar y progresar más rápido (de ahí el nombre). Pero como lenguaje, VB tiene que aprender constantemente de sus fortalezas y debilidades, lo que lo hace cada vez más complejo en los últimos años. Para ocultar estos detalles a los desarrolladores, VB aún conserva algunos asistentes para crear proyectos complejos.
1.2.4 Flexibilidad y escalabilidad de la estructura de la base de datos.
Debido a que Borland carece de un esquema de base de datos, Delphi conserva lo que consideramos la estructura de base de datos más flexible de todas las herramientas. BDE es muy potente para la mayoría de aplicaciones basadas en plataformas de bases de datos locales, cliente/servidor y ODBC. Si no está satisfecho con esto, puede evitar el uso de BDE en favor de los nuevos componentes nativos de ADO. Si no tiene ADO instalado, puede crear sus propias clases de acceso a datos o comprar una solución de acceso a datos de terceros. Además, MIDAS facilita la implementación del acceso de varios niveles a las fuentes de datos. Las herramientas de Microsoft (ODBC, OLE DB u otras) lógicamente tienden a soportar las soluciones de acceso a datos y bases de datos propias de Microsoft.
1.2.5 Extensiones del marco para patrones de diseño y uso
Esta es una característica importante que a menudo otras herramientas de diseño de software pasan por alto. VCL es el componente más importante de Delphi. La capacidad de manipular componentes en tiempo de diseño, crear componentes y utilizar tecnología OO (orientada a objetos) para heredar el comportamiento de otros componentes son factores clave que determinan la eficiencia de Delphi. En muchos casos, los componentes VCL se escriben utilizando un enfoque de diseño OO fijo. En comparación, otros marcos basados en componentes suelen ser demasiado rígidos o complejos. Por ejemplo, los controles Active X tienen las mismas capacidades en tiempo de diseño que los controles VCL, pero no se pueden heredar para crear una nueva clase con comportamientos diferentes. Los marcos de clases tradicionales, como OWL y MFC, requieren que usted tenga mucho conocimiento de la estructura interna y, sin el soporte en tiempo de diseño de las herramientas RAD, su funcionalidad se verá inhibida. Una herramienta que puede rivalizar con la funcionalidad de VCL en el futuro es WFC (Windows Foundation Classes) de Visual J++, que es la Windows Foundation Class. Pero como la demanda de Sun Microsystems por cuestiones de Java aún está pendiente, el futuro de Visual J++ no está claro.