//Aus <Delphi 5 Developer's Guide>
1.2 Was ist Delphi?
Wir stellen oft Fragen wie: „Was macht Delphi so gut?“ und „Warum bevorzuge ich Delphi gegenüber anderen Programmiertools?“ Im Laufe der Jahre haben wir auf Fragen wie diese zwei Antworten gefunden, eine lange und eine kurze. Die kurze Antwort lautet: Effizienz. Zum Erstellen von Windows-Anwendungen ist die Verwendung von Delphi die einfachste Möglichkeit, die wir finden können. Natürlich sind einige Leute (Chefs und zukünftige Kunden) mit dieser Antwort nicht zufrieden. Deshalb müssen wir unsere ausführliche Antwort präsentieren, die die Kombination von Faktoren veranschaulicht, die Delphi so effektiv machen. Wir fassen die Faktoren, die die Effizienz eines Softwareentwicklungstools bestimmen, in den folgenden fünf Punkten zusammen:
• Leistung der visuellen Entwicklungsumgebung.
• Die Geschwindigkeit des Compilers und die Effizienz des kompilierten Codes.
• Die Fähigkeiten von Programmiersprachen und ihre Komplexität.
• Flexibilität und Skalierbarkeit der Datenbankstruktur.
• Framework-Erweiterungen für Design- und Nutzungsmuster.
Obwohl viele andere Faktoren einbezogen werden sollten, wie z. B. Konfiguration, Dokumentation, Support von Drittanbietern usw., haben wir festgestellt, dass dies die genaueste und einfachste Möglichkeit ist, den Leuten zu erklären, warum wir uns für Delphi entschieden haben. Natürlich können die oben genannten fünf Punkte auch einige subjektive Faktoren beinhalten, aber der Schlüssel ist: Wie effizient können Sie sein, wenn Sie ein bestimmtes Tool für die Entwicklung verwenden? Wie in Abbildung 1-1 dargestellt, werden alle Aspekte der Leistung eines Werkzeugs bewertet und quantifiziert (zwischen 1 und 5) und auf jeder Achse von Abbildung 1-1 markiert. Schließlich kann ein Fünfeck erhalten werden. Je größer die Fläche des Fünfecks ist, desto effizienter ist dieses Werkzeug.
Sie müssen Ihnen nicht sagen, welche Antworten wir mit dieser Methode erhalten haben – Sie werden es selbst herausfinden, wenn Sie es ausprobieren! Schauen wir uns die Leistung von Delphi in diesen Bereichen genauer an und vergleichen sie mit anderen Windows-Entwicklungstools.
1.2.1 Visuelle Entwicklungsumgebung
Eine visuelle Entwicklungsumgebung ist normalerweise in drei Komponenten unterteilt: Editor, Debugger und Formulardesigner. Wie die meisten modernen RAD-Tools (Rapid Application Development) arbeiten diese drei Teile zusammen. Während Sie im Formular-Designer arbeiten, generiert Delphi hinter den Kulissen automatisch Code für die Steuerelemente, die Sie im Formular bearbeiten. Sie können im Editor auch selbst Code hinzufügen, um das Verhalten der Anwendung zu definieren, und Sie können das Programm auch debuggen, indem Sie Haltepunkte und Überwachungspunkte im selben Editor festlegen.
Im Allgemeinen ähnelt der Editor von Delphi den Editoren anderer Tools, die Code Insight-Technologie erspart jedoch viel Eingabearbeit. Diese Technologie basiert auf Compiler-Informationen und nicht auf Typbibliotheken wie Visual Basic und bietet daher ein breiteres Anwendungsspektrum. Obwohl der Editor von Delphi auch viele gute Konfigurationsoptionen bietet, denke ich, dass der Editor von Visual Studio mehr Raum für die Konfiguration bietet. In Version 5 hat die Debugger-Funktion von Delphi endlich den Debugger von Visual Studio eingeholt und verfügt über viele erweiterte Funktionen wie Remote-Debugging, Prozesszuordnung, DLL- und Paket-Debugging, automatische lokale Überwachung und CPU-Fenster. Delphi unterstützt auch das zufällige Platzieren und Andocken von Fenstern während des Debuggens und das Speichern dieses Status als Desktop-Einstellung eines Befehls. Dadurch hat die IDE von Delphi eine gute Unterstützung für Debugging-Funktionen erreicht.
Wie oft in einigen integrierten Umgebungen (wie VB und einigen Java-Tools) zu sehen ist, besteht der Vorteil eines sehr vollständigen Debuggers darin, dass er beim Debuggen der Anwendung ihren Code ändern und dadurch ihr Verhalten ändern kann. Leider wird diese Funktionalität von Delphi nicht unterstützt, da die Implementierung beim Kompilieren in nativen Code zu komplex ist.
Für RAD-Tools (wie Delphi, Visual Basic, C++Builder und PowerBilder usw.) ist der Formulardesigner eine einzigartige Funktion. Einige der klassischeren Entwicklungsumgebungen wie VC++ und BC++ bieten Konversationseditoren, integrieren den Formulardesigner jedoch nicht in den Entwicklungsprozess. Wie aus dem Effizienzdiagramm in Abbildung 1-1 ersichtlich ist, verringert das Fehlen eines Formulardesigners die Gesamteffizienz des Entwicklungstools. In den letzten Jahren standen Delphi und Visual Basic in einem harten Wettbewerb um die Verbesserung der Funktionalität des Formulardesigners. Jede ihrer neuen Versionen verfügt über bessere Funktionen als die letzte. Das Besondere am Formulardesigner von Delphi ist, dass Delphi auf einem echten objektorientierten Framework basiert. Auf diese Weise werden Änderungen, die Sie an der Basisklasse vornehmen, an alle abgeleiteten Klassen weitergegeben. Eine der Schlüsseltechnologien hierbei ist VFI (Visual Form Inheritance), also die Vererbung visueller Formen. Mit der VFI-Technologie können Sie dynamisch von jedem anderen Formular im aktuellen Projekt oder in der Objektbibliothek erben. Wenn sich das Basisformular ändert, wird das abgeleitete Formular sofort aktualisiert. Diese wichtige Funktion wird in Kapitel 4, „Anwendungs-Framework und -Design“, ausführlich erläutert.
1.2.2 Compilergeschwindigkeit und Effizienz des kompilierten Codes
Mit einem schnellen Compiler können Sie Software Schritt für Schritt entwickeln, indem Sie den Quellcode häufig ändern, neu kompilieren, testen, erneut modifizieren, erneut kompilieren, erneut testen ... und so einen so guten Entwicklungszyklus bilden. Wenn die Kompilierungsgeschwindigkeit sehr langsam ist, müssen Entwickler den Code stapelweise ändern und vor jeder Kompilierung mehrere Änderungen vornehmen, um ihn an einen ineffizienten Schleifenprozess anzupassen. Es verbessert die Laufeffizienz, spart Laufzeit und generiert kürzere Binärcodes. Seine Überlegenheit liegt auf der Hand.
Das vielleicht bekannteste Merkmal des Pascal-Compilers ist seine Geschwindigkeit, und Delphi basiert auf diesem Compiler. Tatsächlich handelt es sich möglicherweise um den schnellsten Hochsprachen-Native-Code-Compiler für Windows. C++-Compiler, die früher langsam waren, haben in den letzten Jahren große Fortschritte gemacht und Linking und verschiedene Caching-Strategien hinzugefügt, insbesondere in Visual C++ und C++Builder. Aber trotzdem ist der C++-Compiler immer noch um ein Vielfaches langsamer als der von Delphi.
Ist die Kompilierungsgeschwindigkeit notwendigerweise proportional zur Laufeffizienz? Natürlich nicht. Delphi und C++Builder nutzen dasselbe Compiler-Backend, sodass der generierte Code dem entspricht, der von einem guten C++-Compiler erstellt wird. Gemäß den neuesten zuverlässigen Bewertungsstandards gilt Visual C++ dank einiger äußerst leistungsstarker Optimierungsmaßnahmen häufig als das effizienteste Programm in Bezug auf Kompilierungsgeschwindigkeit und generierte Codelänge. Während diese kleinen Vorteile bei der typischen Anwendungsentwicklung kaum zu erkennen sind, können sie beim Schreiben von komplexem Rechencode zum Tragen kommen.
Die Kompilierungstechnologie von Visual Basic ist etwas Besonderes. Während der Entwicklung arbeitet VB integriert und reagiert sehr schnell. Dieser Compiler ist langsamer und der generierte ausführbare Code ist weitaus weniger effizient als Delphi- und C++-Tools.
Java ist eine weitere interessante Sprache. Die neuesten Java-basierten Toolsprachen JB uilder und Visual J++ behaupten, dass ihre Kompilierungsgeschwindigkeit mithalten kann
Es ist mit Delphi vergleichbar, aber die Ausführungseffizienz des generierten Codes ist nicht zufriedenstellend, da Java eine integrierte Sprache ist. Obwohl Jave stetige Fortschritte macht, liegt seine Laufgeschwindigkeit in den meisten Situationen immer noch weit hinter Delphi und C++ zurück.
1.2.3 Funktionalität und Komplexität von Programmiersprachen
Die Funktionalität und Komplexität einer Sprache liegen im Auge des Betrachters und sind Gegenstand vieler Debatten. Was für den einen einfach ist, kann für den anderen schwierig sein; was für den einen von begrenzter Funktionalität ist, kann für den anderen perfekt sein. Daher basieren die folgenden Punkte nur auf der persönlichen Erfahrung und dem Verständnis des Autors.
Assembly ist im Grunde die mächtigste Sprache. Man kann damit fast alles machen. Allerdings ist die Entwicklung selbst der einfachsten Anwendung in der Montage sehr schwierig und führt möglicherweise zu nichts. Darüber hinaus ist es manchmal einfach unmöglich, einen Teil des Assemblercodes über einen längeren Zeitraum in einer Gruppenentwicklungsumgebung aufzubewahren. Während der Code von einer Person zur nächsten und dann zur nächsten Person weitergegeben wird, werden die Designideen und -absichten immer unklarer, bis der Code wie ein Buch vom Himmel aussieht. Daher bewerten wir die Assembly als sehr niedrig, da sie zwar leistungsstark, aber für fast alle Entwickler zu komplex ist.
C++ ist eine weitere äußerst leistungsfähige Sprache. Mithilfe seiner potenziellen Funktionen (z. B. Präprozessormakros, Vorlagen, Laden von Operatoren usw.) können Sie mit C++ fast Ihre eigene Sprache entwerfen. Solange Sie die umfangreichen Funktionsoptionen richtig nutzen, können Sie prägnanten, intuitiven und leicht zu wartenden Code entwickeln. Das Problem besteht jedoch darin, dass viele Entwickler diese Funktionen missbrauchen, was leicht zu schwerwiegenden Fehlern führen kann. Tatsächlich ist es einfacher, schlechten C++-Code zu schreiben als guten C++-Code. Denn die Sprache selbst wird sich nicht in Richtung gutes Design bewegen – das liegt an den Entwicklern.
Object Pascal und Java fühlen sich für uns sehr ähnlich, weil sie die Balance zwischen Komplexität und Funktionalität sehr gut verstehen. Sie alle verfolgen den Ansatz, ihre verfügbare Funktionalität einzuschränken, um das logische Design des Entwicklers zu verbessern. Beide vermeiden beispielsweise das vollständig objektorientierte, aber leicht missbrauchte Konzept der Mehrfachvererbung und implementieren stattdessen eine einzelne Klasse, die die Funktionalität mehrerer Schnittstellen ausführt. Beides unterstützt keine schöne, aber gefährliche Bedienerbelastung. Beide verfügen über einige leistungsstarke Funktionen, wie z. B. Ausnahmebehandlung, Laufzeittypinformationen (RT TI) und selbstverwalteten String-Lebensdauerspeicher. Gleichzeitig wird keine der beiden Sprachen von einem speziellen Redaktionsgremium verfasst, sondern stammt von Einzelpersonen oder Gruppen innerhalb einer einzelnen Organisation, die ein gemeinsames Verständnis der Sprache haben.
Visual Basic wurde ursprünglich entwickelt, um Anfängern den Einstieg zu erleichtern und schneller Fortschritte zu machen (daher der Name). Aber als Sprache muss VB ständig aus seinen Stärken lernen und seine Schwächen ausgleichen, was es in den letzten Jahren immer komplexer gemacht hat. Um diese Details vor Entwicklern zu verbergen, behält VB weiterhin einige Assistenten zum Erstellen komplexer Projekte bei.
1.2.4 Flexibilität und Skalierbarkeit der Datenbankstruktur
Da Borland über kein Datenbankschema verfügt, behält Delphi die unserer Meinung nach flexibelste Datenbankstruktur aller Tools bei. BDE ist für die meisten Anwendungen, die auf lokalen, Client/Server- und ODBC-Datenbankplattformen basieren, sehr leistungsstark. Wenn Sie damit nicht zufrieden sind, können Sie auf die Verwendung von BDE zugunsten der neuen nativen ADO-Komponenten verzichten. Wenn Sie ADO nicht installiert haben, können Sie Ihre eigenen Datenzugriffsklassen erstellen oder eine Datenzugriffslösung eines Drittanbieters erwerben. Darüber hinaus erleichtert MIDAS die Implementierung eines mehrstufigen Zugriffs auf Datenquellen. Die Tools von Microsoft (ODBC, OLE DB oder andere) unterstützen logischerweise tendenziell Microsofts eigene Datenbank- und Datenzugriffslösungen.
1.2.5 Framework-Erweiterungen für Design- und Nutzungsmuster
Dies ist eine wichtige Funktion, die von anderen Software-Design-Tools oft übersehen wird. VCL ist die wichtigste Komponente von Delphi. Die Fähigkeit, Komponenten zur Entwurfszeit zu manipulieren, Komponenten zu erstellen und OO-Technologie (objektorientierte Technologie) zu verwenden, um das Verhalten anderer Komponenten zu übernehmen, sind Schlüsselfaktoren, die die Effizienz von Delphi bestimmen. In vielen Fällen werden VCL-Komponenten mit einem festen OO-Designansatz geschrieben. Im Vergleich dazu sind andere komponentenbasierte Frameworks oft zu starr oder komplex. Beispielsweise verfügen Active Herkömmliche Klassenframeworks wie OWL und MFC erfordern umfassende Kenntnisse der internen Struktur, und ohne Entwurfszeitunterstützung durch RAD-Tools ist ihre Funktionalität eingeschränkt. Ein Tool, das in Zukunft mit der Funktionalität von VCL mithalten kann, ist WFC (Windows Foundation Classes) von Visual J++, die Windows Foundation Class. Doch da die Klage von Sun Microsystems wegen Java-Problemen noch anhängig ist, ist die Zukunft von Visual J++ unklar.