Zur Auswahl objektorientierter Sprachen (47k PDF)

Werbung
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
Herunterladen