Dieser Fachbeitrag ist ein Service der InfraSoft Profis für Ihre professionelle Softwareentwicklung. Zur Auswahl objektorientierter Sprachen Objektorientierte Programmiersprachen sind aus der modernen Softwareentwicklung nicht mehr wegzudenken. Viele Aufgabenstellungen wären ohne den objektorientierten Ansatz gar nicht oder nur mit Mühe zu lösen. Begonnen hat der Siegeszug der objektorientierten Sprachen vor etwa zwei Jahrzehnten mit Smalltalk. Seit damals ist viel Zeit vergangen, und etliche Sprachen sind in dieser Liga entstanden. Manche davon sind bald wieder von der Bildfläche verschwunden, andere haben sich durchgesetzt. Heute dominieren eine Handvoll Sprachen den objektorientierten Ansatz in der Softwareentwicklung. Dabei gehören C++, Java und Visual Basic zu den Wichtigsten. Rund um dieses Thema stellt sich natürlich immer wieder die Frage, welche dieser drei Sprachen ideal wäre. Die Antwort liegt wohl auf der Hand: Die Auswahl der passenden Programmiersprache kann nur im Zusammenhang mit dem jeweiligen Entwicklungsprojekt und dessen Umfeld getroffen werden. Als Anhaltspunkt beschreiben wir hier, in welchem Kontext C++, Java und Visual Basic am Besten eingesetzt werden. Zu jeder Sprache geben wir auch eine Zusammenfassung der Möglichkeiten, die jeweils geboten werden. Der gemeinsame Nenner Allen drei Sprachen gemeinsam ist der objektorientierte Ansatz. Das bedeutet im Wesentlichen, dass mit Hilfe jeder dieser Sprachen ein (eingeschränktes) Modell der Welt geschaffen wird, das diese mit Hilfe von Objekten beschreibt. Reale Objekte der realen Welt (wie z.B. das Objekt "Baum") können durch Analyse und Design in den konzeptionellen Objektraum übertragen werden und dann mit Hilfe von C++, Java oder Visual Basic als Objekte innerhalb eines künstlichen Abbilds der Welt implementiert werden. Genauso können damit Objekte unserer Vorstellung (wie z.B. das Objekt "Geschäftsfall") in eine künstliche Welt übertragen werden - was vor allem bei kommerziellen oder technisch-wissenschaftlichen Anwendungen eine große Rolle spielt. Einer der wesentlichen Vorteile aus der Arbeit mit Objekten besteht darin, dass Objekte Hierarchien mit sich bringen und der Vererbung unterliegen. Alles, was für das Objekt "Baum" einmal definiert wird, muss für ein Objekt "Buche", "Eiche" oder "Birke" nicht mehr festgelegt werden. Auch wenn ein neues Objekt "Lärche" dazukommt, erbt es einfach die Eigenschaften und das Verhalten eines "Baumes". In diesen - hier simplifiziert dargestellten - Möglichkeiten liegt der Grundstein der hohen Effizienz objektorientierter Sprachen. © InfraSoft GmbH – Die PROFIS www.infrasoft.at 1 von 5 C++ C++ wird man wohl immer dann einsetzen, wenn die Performance der Applikation eine Rolle spielt. Einer der Gründe dafür ist, dass man mit C++ freie Hand hat, was die Nutzung des Speicherplatzes betrifft. Auf diese Weise kann viel optimiert und die Applikation so performant wie möglich gestaltet werden. C++ wird auch dann das Werkzeug der Wahl sein, wenn in einem Projekt bereits viel prozeduraler Code vorliegt, der genützt werden soll. Er lässt sich einfach nach C++ portieren und dadurch kann oft viel Zeit gespart werden. Eine weitere Anforderung, die für die Verwendung von C++ spricht, ist die Gestaltung von grafischen User-Interfaces. Viele Standardprodukte (wie z.B. MFC) ermöglichen es, beständig gute Ergebnisse zu erzielen. Unabdingbare Voraussetzung für die effiziente Nutzung von C++ ist der Einsatz von erfahrenen Programmierern. Durch die vielen Möglichkeiten, die C++ offen lässt, kann dieses Werkzeug nur von kompetenten Entwicklern optimal genützt werden. Die wesentlichen Merkmale von C++ sind: • Performanter Code: Obwohl es heute nicht mehr stimmt, dass C++ prinzipiell schneller ist als Java, ist es doch mit C++ leichter, hoch performanten Code zu schreiben. Die Sprache ermöglicht auf Grund ihrer Konstruktion die Beeinflussung des Maschinencodes bis zu sehr kleinen Details - mit Inline Assembler ist man dann ganz auf Maschinenebene. Um das selbe mit Java zu erreichen, wäre die Konstruktion von Native Libraries nötig. Das ist einerseits aufwendig und anderseits werden diese dann ohnehin wieder in C oder C++ geschrieben. Auch leidet C++ sowohl was Geschwindigkeit als auch was Memory Footprint betrifft, nicht unter einem Garbage Collector System. • Templates: C++ hat extensiven Support für Templates und damit für Metaprogrammierung. Von diesem Support wird in der Standard C++ Library häufig Gebrauch gemacht. Generell kann man C++ als DIE Sprache bezeichnen, die Template Metaprogrammierung zu neuen Höhenflügen gebracht hat. Der Vorteil besteht darin, dass generischer und zugleich hochperformanter Code leicht erzeugt werden kann. • C-Kompatibilität: C++ ist größtenteils kompatibel zu C und beinhaltet den größten Teil von C als Subset. Das hat den Vorteil, dass Legacy C Code leicht übernommen werden kann. Das bedeutet auch, dass C-Programmierer es relativ leicht haben, sich in die Welt von C++ einzuarbeiten. Darüber hinaus können jahrzehntelang erprobte Techniken aus dem C Bereich weiterhin gewinnbringend eingesetzt werden. Und, falls nötig, kann man Teile eines Programms in C kodieren, wenn der PerformanceOverhead durch die Objektorientierung nicht erwünscht ist. • ANSI/ISO Standard: Die derzeitige aus dem Jahr 1998 stammende Sprachdefinition ist stabil bis 2003 - danach wird die Sprache möglichst rückwärtskompatibel erweitert, um in eine neue 5-jährige Stabilitätsphase einzutreten. Java und Visual Basic leiden dagegen darunter, dass sie herstellerspezifische Sprachen sind. Bei ihnen liegt es nur beim jeweiligen Hersteller, wann und wie Sprachdefinition und Libraries verändert werden. © InfraSoft GmbH – Die PROFIS www.infrasoft.at 2 von 5 • Vielseitige Vererbung: C++ sieht sowohl "Implementation Inheritance" als auch "Multiple Inheritance" vor. Interfaceorientierte Programmierung kann über pur virtuelle Klassen (alle members sind pure virtual) emuliert werden. Es gibt somit keine Einschränkung bezüglich der vielfältigen Möglichkeiten, die eine Objektorientierte Sprache ausmachen. • Ausgereifte Produkte: Die Sprache hat im Vergleich mit Java und Visual Basic die längste Vergangenheit. Somit hatten die Compiler-, Library-, und Tool-Hersteller schon lange Zeit, Standardkonforme und fehlerfreie Produkte herzustellen. Java und Visual Basic müssen noch mit Kinderkrankheiten kämpfen, die bei C++ längst der Vergangenheit angehören. • Viele Anbieter: Das lange Bestehen von C++ hat noch einen weiteren Vorteil - man kann bei Compilern und Zusatzprodukten unter einer Vielzahl von Herstellern auswählen: Borland C++, Watcom C++, Microsoft Visual C++, gnu gcc, Metroworks usw. sind nur einige Beispiele dafür. Java Java wird man immer dann zum Vorteil einsetzen, wenn man auf eine große Bibliothek zurückgreifen möchte. Die Sprache basiert auf einer umfangreichen Klassenbibliothek, durch die von Haus aus eine Menge Basisfunktionalität zur Verfügung steht. Vor allem dann, wenn Business-Applikationen rasch zu realisieren sind, kommt einem das zu Gute - im Vergleich mit C++ ist bereits vieles fertig, noch bevor man mit der Arbeit begonnen hat. Gewarnt werden muss allerdings vor dem zurzeit noch unausgereiften grafischen User Interface (SWING). Im Großen und Ganzen aber unterstützt Java den Programmierer sehr gut. Durch seine Speicherverwaltung und das konsequente Exception Handling ist es auch relativ nachsichtig. Daher können in einem Java-Projekt auch Programmierer mit nicht ganz so umfangreichen Erfahrungen ihren Beitrag leisten. Die wesentlichen Merkmale von Java sind: • Speicherverwaltung: Der so genannte Garbage Collector ist bei Java für die Verwaltung des Speichers zuständig. Vor allem weniger erfahrene Programmierer profitieren von dieser Funktionalität. Ein Nachteil der automatischen Speicherverwaltung ist, dass die Suche nach Memory Leaks komplizierter ist, da das Programm trotzdem läuft. Da es mit Java nicht möglich ist, ein Memory Ownership Modell zu erstellen, ist meistens auch nicht klar, wann von einem Programm wie viel Memory benötigt wird. • Exception Handling: Java beinhaltet ein konsequentes Exception System. Es stellt sicher, dass die in den Prototypen definierten Spezifikationen für Exceptions genau eingehalten werden. Dadurch kann es in einem Java-Programm nie zu Situationen kommen, in denen eine Exception geworfen wird, mit der das Programm nicht rechnet. In diesem Bereich ist Java C++ eindeutig überlegen. In C++ Programmen sind solche Situationen möglich und führen zur Programmterminierung. © InfraSoft GmbH – Die PROFIS www.infrasoft.at 3 von 5 • Umfangreiche Library: Java verfügt über eine Klassenbibliothek, die keine Wünsche offen lässt. Allein das SDK (Software Development Kit) bringt eine unglaubliche Fülle an Funktionen mit, wie zum Beispiel Bibliotheken für Netzwerkprogrammierung (TCP, HTTP, Verschlüsselung, Security,...). Auch in diesem Bereich ist Java C++ klar überlegen - die Standard Library von C++ kann im Vergleich nicht mithalten. • Betont Objektorientiert: Aufgrund der Struktur von Java ist es schwer, rein prozeduralen (d.h. nicht objektorientierten) Code zu schreiben. Natürlich ist es nicht unmöglich, wie es ebenso nicht unmöglich ist, in prozeduralen Sprachen objektorientiert zu codieren. Dennoch sollte festgehalten werden, dass Java als Programmiersprache die Denkweise der Programmierer stärker in Richtung Objektorientierung lenkt als andere Sprachen. • Einfachvererbung: Java bietet keinen Support für Multiple Implementation Inheritance. Gegenüber anderen objektorientierten Sprachen (wie C++) ist das eine Einschränkung. Da Java aber interfaceorientierte Programmierung unterstützt, kann diese Einschränkung auch umgangen werden. Visual Basic Diese objektorientierte Sprache spielt eigentlich in einer ganz anderen Liga. Bei C++ und Java handelt es sich um Konzepte, die von mehreren Herstellern verfolgt werden. Es gibt viele unterschiedliche Produkte, die auf gemeinsame Standards aufsetzen und so eine Vielfalt und zugleich Stabilität schaffen, die bei Visual Basic nicht zu finden ist. Denn Visual Basic ist eine Sprache, die von einem einzigen Hersteller - Microsoft - angeboten wird. Das bedeutet, dass von Version zu Version relative willkürliche Änderungen und Erweiterungen stattfinden können. Obwohl sich der Hersteller darum bemüht, ist es bei Visual Basic dennoch nicht gewährleistet, dass Source Code aufwärtskompatibel bleibt. Der große Vorteil von Visual Basic ist, dass sich mit dieser Sprache sehr rasch geradezu beeindruckende Ergebnisse erzielen lassen - solange die Anforderungen im Detail nicht zu hoch sind. Visual Basic ist also ideal für nicht allzu anspruchsvolle Business-Applikationen. Manche Programmierer würden daher sogar so weit gehen, Visual Basic als Prototyping-Tool zu kennzeichnen. Die wesentlichen Merkmale zur Abgrenzung von Visual Basic sind: • Vordefinierte Objektklassen: Visual Basic bietet keinen Support zum Definieren eigener Objektklassen und auch keine Möglichkeit, um Implementation Inheritance zu verwirklichen. Das macht die Codierung einfach, auch für unerfahrene Programmierer. Der Nachteil ist, dass damit einige grundlegende Features der Objektorientierten Programmierung komplett fehlen. • COM-Objekte: Es ist mit Visual Basic relativ leicht, eigene COM-Objekte (Objekte auf Betriebssystem-Ebene) zu verwirklichen. Mit C++ und Java ist das noch immer ziemlich aufwendig. © InfraSoft GmbH – Die PROFIS www.infrasoft.at 4 von 5 • Herstellerspezifisch: Visual Basic ist als herstellerspezifische, nicht standardisierte Sprache völlig anders zu beurteilen als C++ und Java. Zwar ist auch Java (noch) nicht standardisiert, aber es verfolgt dennoch eine ähnliche Zielsetzung wie C++, nämlich die Definition einer Sprache zu sein, für die von vielen Herstellern Tools und Compiler geschaffen werden. Visual Basic dagegen ist eine Entwicklungsumgebung aus einer Hand. So ist es zum Beispiel so gut wie unmöglich, einen schon vorhandenen Editor zur Source Code Entwicklung einzusetzen. Ergänzend zu diesem Text steht Ihnen auf der InfraSoft Website ein Glossar zur Verfügung, in dem Sie die meisten der hier verwendeten Begriffe finden. Über das aktuelle Angebot an weiteren, kostenlosen Fachbeiträgen zur Softwareentwicklung informieren Sie sich bitte unter www.infrasoft.at/service. Harald Nowak & Andreas Fandl Wien, im Februar 2002 Die Autoren sind Mitarbeiter der InfraSoft, einem Unternehmen, das auf komplexe Softwareentwicklungen spezialisiert ist. Die Experten der InfraSoft haben langjährige Erfahrungen in der Entwicklung und verfügen über fundierte Kenntnisse in Design, Analyse, Realisierung, Test und Projektmanagement. Für individuelle Beratungen zur Entwicklung von Softwarelösungen und die Bereitstellung von Realisierungsteams wenden Sie sich bitte an [email protected]. © InfraSoft GmbH – Die PROFIS www.infrasoft.at 5 von 5