1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
|
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100008.html;106,k100010.html;107,k100012.html;108,k100013.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100008.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100010.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100012.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100013.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">Kapitel 1 - Was ist Java?
</table>
<hr>
<!-- Section -->
<a name="sectlevel2id001003"></a>
<h2>1.3 Bewertung </h2>
<hr>
<ul>
<li><a href="k100011.html#sectlevel2id001003">1.3 Bewertung</a>
<ul>
<li><a href="k100011.html#sectlevel3id001003001">1.3.1 Einige weitverbreitete Missverständnisse ...</a>
<ul>
<li><a href="k100011.html#sectlevel4id001003001001">These 1: Java == JavaScript</a>
<li><a href="k100011.html#sectlevel4id001003001002">These 2: Java ist einfach zu erlernen</a>
<li><a href="k100011.html#sectlevel4id001003001003">These 3: Java ist portabel</a>
<li><a href="k100011.html#sectlevel4id001003001004">These 4: Java-Programme sind langsam</a>
<li><a href="k100011.html#sectlevel4id001003001005">These 5: Java ist nicht für ernsthafte Anwendungen geeignet</a>
</ul>
<li><a href="k100011.html#sectlevel3id001003002">1.3.2 Ausblick</a>
</ul>
</ul>
<hr>
<!-- Section -->
<a name="sectlevel3id001003001"></a>
<h3>1.3.1 Einige weitverbreitete Missverständnisse ... </h3>
<p>
Wie bereits im Vorwort erwähnt, wollen wir uns der Java-Euphorie
gerne anschließen, sie aber nicht vollkommen kritiklos übernehmen.
In diesem Abschnitt soll der Versuch unternommen werden, eine kurze
Bewertung zu geben und einige der häufigsten Missverständnisse
auszuräumen. Wir wollen dabei zunächst zu einigen Thesen
Stellung nehmen, die immer wieder artikuliert werden und häufig
zu überzogenen oder falschen Annahmen über das Wesen von
Java führen.
<!-- Section -->
<a name="sectlevel4id001003001001"></a>
<h4>These 1: Java == JavaScript </h4>
<p>
JavaScript ist eine von Netscape entwickelte Script-Sprache zur Erweiterung
von HTML-Seiten. Sie ist syntaktisch an Java angelehnt, bietet aber
bei weitem nicht so viele Features. Sie wird nicht in Bytecode kompiliert,
sondern vom Browser interpretiert und erlaubt weder die Konstruktion
von Applets noch von eigenständigen Applikationen. Als Script-Sprache
ist sie vorwiegend für einfache Manipulationen am Layout und
der Interaktionsfähigkeit von HTML-Seiten gedacht.
<!-- Section -->
<a name="sectlevel4id001003001002"></a>
<h4>These 2: Java ist einfach zu erlernen </h4>
<p>
Diese gern wiederholte These aus der Sprachbeschreibung ist nur bedingt
richtig. Java ist eine objektorientierte Programmiersprache mit fortschrittlichen
Eigenschaften und muss wie eine solche erlernt werden. Sie ist einfacher
zu beherrschen als C oder C++, und es gibt weniger Raum für »Anfängerfehler«.
Auch die Klassenbibliothek ist leichter zu verwenden, denn sie wurde
neu entworfen und kommt ohne die Altlasten nicht-objektorientierter
Vorgänger daher. Die Kompatibilitätsanforderungen von mittlerweile
sechs JDK-Folgeversionen (1.1-1.4, 5.0 und 6.0) merkt man ihr aber
durchaus an. Vor allem wegen des großen Umfangs der Klassenbibliotheken
erfordert der Umgang mit Java ein nicht zu unterschätzendes Maß
an Einarbeitungszeit, bevor man als Entwickler zu produktiven Ergebnissen
kommt.
<!-- Section -->
<a name="sectlevel4id001003001003"></a>
<h4>These 3: Java ist portabel </h4>
<p>
Die Quellcode-Portabilität von Java-Programmen ist auf der reinen
Sprachebene etwas höher als die von C- oder C++-Programmen. Das
ist hauptsächlich dem Verzicht auf explizite Pointer sowie maschinennahe
Datentypen und Operatoren zu verdanken. Auch die genaue Spezifikation
der elementaren Datentypen trägt zu dieser Tatsache bei.
<p>
Bezieht man dagegen die riesige Klassenbibliothek mit ihren auf allen
Plattformen standardmäßig vorhandenen Funktionen in die
Betrachtung ein, fallen C und C++ im Portabilitätsvergleich weit
zurück. Funktionalitäten wie <i>Datenbankzugriffe</i>, <i>Netzwerkprogrammierung</i>,
<i>Multithreading</i>, <i>Serialisierung</i>, <i>Grafikprogrammierung</i>
und viele andere mehr sind in Java bereits in der Standardversion
enthalten und stehen auf allen Plattformen in praktisch identischer
Weise zur Verfügung.
<p>
Ein weiterer Portabilitätsvorteil von Java besteht zudem darin,
dass die kompilierten Programme <i>binärkompatibel</i> sind.
Ein einmal übersetztes Programm wird auf jeder Plattform laufen,
die eine Java-VM und die erforderliche Laufzeitumgebung zur Verfügung
stellt. Ein Rekompilieren, wie es bei C- oder C++-Programmen erforderlich
ist, benötigen Java-Programme daher nicht.
<!-- Section -->
<a name="sectlevel4id001003001004"></a>
<h4>These 4: Java-Programme sind langsam </h4>
<p>
Da Java-Programme in Bytecode übersetzt werden, der nicht direkt
vom Prozessor ausgeführt werden kann, muss ein Interpreter diese
Aufgabe übernehmen. Dadurch können CPU-lastige Java-Programme
um den Faktor 10 bis 20 langsamer sein als vergleichbare C/C++-Programme.
<p>
Dieses Argument wird auch heute noch gern von der C-/C++-Fraktion
angeführt. In der Praxis relativiert es sich durch mehrere Faktoren.
Einerseits sind nur wenige Programme ausgesprochen CPU-intensiv. Die
meisten interaktiven Programme verbringen nämlich einen Großteil
ihrer Zeit damit, auf Eingaben des Benutzers oder langsame Datenbank-
oder Festplattenzugriffe zu warten. Zudem wurde das Laufzeitverhalten
von Java-Programmen durch die Entwicklung von Just-In-Time-Compilern
(JIT-Compiler), Native-Code-Compilern oder Java-Prozessoren in den
letzten Jahren stetig verbessert und nähert sich zunehmend dem
von kompiliertem C/C++-Code an. Die seit dem JDK 1.3 zum Umfang des
JDK gehörenden HotSpot-Compiler analysieren zur Laufzeit des
Programms den interpretierten Bytecode und übersetzen besonders
rechenintensive Teile in direkt ausführbaren Maschinencode.
<p>
Das Performance-Problem kann daher als temporäres Problem angesehen
werden - falls es für den speziellen Typ Anwendung überhaupt
noch existiert. Viele Beobachter gehen heute davon aus, dass Java-Programme
in den meisten praktisch relevanten Situationen mit derselben Geschwindigkeit
laufen wie kompilierte C/C++-Programme, und Benchmarks bestätigen
diese Ergebnisse bereits. Auch die anfänglichen Performance-Probleme
der Swing-Oberflächen wurden mit dem JDK 1.3 und seinen Nachfolgeversionen
weitgehend unschädlich gemacht. Auch der nach wie vor anhaltende
Fortschritt bei der Hardware-Entwicklung hat seinen Beitrag geleistet.
Während die ersten Java-Versuche meist auf PCs der Kategorie
Pentium-I mit 75 MHz und 8 MByte RAM abliefen, haben die aktuellen
CPUs die 3GHz-Marke überschritten, und 512 MB Hauptspeicher zählen
zum guten Ton.
<p>
Dennoch kann der unachtsame Entwickler in Java leicht zu einer schlechten
Gesamtperformance beitragen. Wer die abstrakten Designmöglichkeiten
von Strings, Readern oder Writern, Collection-Klassen und vielen anderen
Bestandteilen der Klassenbibliothek bedenkenlos verwendet, kann das
Laufzeitverhalten seines Programms stark beeinträchtigen. Schon
mit der Kenntnis einiger Details über den Aufbau wichtiger JDK-Klassen
lassen sich die vorhandenen Bibliotheken weit effizienter nutzen,
und die Performance der Programme steigt an. In <a href="k100312.html#kapiteltuning">Kapitel 50</a>
gehen wir auf einige dieser Details ein und zeigen, wie man Java-Programme
schreibt, deren Performance für viele Anwendungen adäquat
ist.
<!-- Section -->
<a name="sectlevel4id001003001005"></a>
<h4>These 5: Java ist nicht für ernsthafte Anwendungen geeignet
</h4>
<p>
Diese Behauptung resultiert vor allem aus drei Beobachtungen. Zum
einen hatten viele der zunächst in Java entwickelten Anwendungen
Spielzeug- oder Demo-Charakter. Meist als Applet realisiert, hatten
sie lediglich die Aufgabe, eine Homepage zu verschönern oder
die Java-Kentnisse ihrer Entwickler im zweckfreien Raum zu demonstrieren.
Echten Nutzwert boten dagegen nur wenige. Und größere Applikationen,
die komplett in Java geschrieben wurden, waren zunächst kaum
auf dem Markt. Dies hat sich mittlerweile vollständig geändert.
Es gibt tausende von ausgewachsenen Java-Applikationen aus allen nur
erdenklichen Anwendungsgebieten.
<p>
Zweitens war das Look-and-Feel von Java-Programmen nicht ausgereift.
Tatsächlich bildet das AWT nur einen geringen Anteil der in den
jeweiligen plattformspezifischen Fenstersystemen verfügbaren
Möglichkeiten ab. Die wenigen Dialogelemente stehen allerdings
portabel zur Verfügung. Mit Hilfe des Swing-Toolsets kann dieses
Problem als gelöst angesehen werden. Swing bietet einen umfassenden
Satz komplexer Dialogelemente und stellt ihn plattformübergreifend
zur Verfügung. Dabei ist es möglich, das Look-and-Feel der
jeweiligen Anwendung zur Laufzeit umzustellen und so dem Geschmack
und den Kenntnissen des jeweiligen Benutzers anzupassen.
<p>
Die dritte Beobachtung besagt, dass Java voller Fehler steckt. Während
dies weniger für die Sprache selbst, ihre Werkzeuge oder die
elementaren Eigenschaften der Klassenbibliothek galt, konnten die
frühen Grafikbibliotheken ein gewisses Maß an Fehlerhaftigkeit
nicht verhehlen. Zwar gibt es nach wie vor Fehler im JDK (alle bekannten
Bugs sind in der als <a name="ixa100139"><i>Bug Parade</i></a> bezeichneten
Fehlerdatenbank gespeichert), doch sind diese in aller Regel nicht
so schwerwiegend, dass nicht ein Workaround gefunden werden könnte.
Zudem stecken die Fehler meist in den Klassenbibliotheken. Der Compiler
und die virtuelle Maschine, auf der die ausführbaren Programme
laufen, können für die meisten Anwendungen als hinreichend
stabil angesehen werden. Auch hier gibt es Ausnahmen, insbesondere
bei JDK-Portierungen auf weniger gebräuchliche Betriebssysteme.
Auf den meisten Systemen ist das JDK in der täglichen Praxis
jedoch ein ausgesprochen stabiles, zuverlässiges und mittlerweile
auch sehr performantes Entwicklungswerkzeug.
<!-- Section -->
<a name="sectlevel3id001003002"></a>
<h3>1.3.2 Ausblick </h3>
<p>
Wenn man das Anwenderinteresse zugrunde legt, ist Java die mit Abstand
erfolgreichste Programmiersprache der letzten Jahre. Wie oben gezeigt,
hat die Sprache in den wenigen Jahren seit Ausgabe der Version 1.0
eine immense Verbreitung erfahren. Java war Anlaß für Tausende
von Büchern und Zeitschriftenartikeln, und es gibt auch einige
Zeitschriften, die sich ausschließlich mit Java beschäftigen.
Zudem entstanden eine Reihe von stark frequentierten <a name="ixa100140">Newsgroups</a>,
die das Interesse an Java deutlich machen. Alle größeren
Softwarehersteller unterstützen die Sprache und haben konkrete
Produkte realisiert. In den meisten einschlägigen Stellenanzeigen
werden Java-Kenntnisse verlangt.
<p>
Zeitgleich zur Diskussion um die Eignung Javas als Entwicklungswerkzeug
für grafische Oberflächen hat sich ein Wandel auf der Serverseite
vollzogen. Mit dem <a name="ixa100141"><i>Servlet-API</i></a> und
den <a name="ixa100142"><i>Java Server Pages</i></a> haben sich beispielsweise
im Bereich der Generierung dynamischer Webseiten Techniken etabliert,
die dem traditionellen CGI-Scripting Konkurrenz machen. Daneben setzen
große Softwarehersteller auf mehrschichtige Client-Server-Architekturen
mit Java-Unterstützung (Oracle Financials, Star Office) oder
statten ihre Datenbank- oder Web-Server mit Java-Fähigkeiten
aus (Oracle 8, Lotus Domino, SUN Java Web Server, Apache jserv). In
vielen Unternehmen gibt es bereits verteilte Anwendungen, die auf
die plattformübergreifenden Fähigkeiten und die Binärkompatibilität
von Java-Anwendungen setzen.
<p>
Auch auf der Client-Seite ist seit einiger Zeit ein Trend zu Java
zu beobachten. So gibt es »kleine« Java-Anwendungen, die
auf dem Palm Pilot, dem Psion 5 oder in Mobiltelefonen laufen. Aber
auch komplexe Standalone-Programme wie - beispielsweise aus dem Bereich
der Entwicklungswerkzeuge - IntelliJ IDEA, JBuilder, NetBeans (Forte)
oder OptimizeIt werden mittlerweile in Java entwickelt. Viele Unternehmen
setzen Java ein, um die Produktivität bei der Entwicklung grafischer
Oberflächen zu erhöhen, oder verbinden in Java geschriebene
Frontends mit den vorhandenen batchorientierten Applikations- und
Datenbankservern. Nicht selten führt der Umstieg von C/C++ auf
Java zu drastischen Effizienzsteigerungen bei der Entwicklung und
Portierung komplexer Anwendungssysteme.
<p>
Neben der plattformübergreifenden Portabilität von Bytecode
und grafischer Oberfläche bietet Java Dinge wie Datenbankanbindung,
Multithreading oder Netzwerkprogrammierung ohne architektonische Brüche.
Mit der »Pflicht«, objektorientiert zu programmieren (im
Gegensatz zu C++ gibt es in Java keine <i>legitimierte</i> Möglichkeit,
rein prozedurale Programme zu schreiben), muss der Entwickler einen
weiteren Schritt in der Evolution seiner eigenen Fähigkeiten
vollziehen. Applets, Servlets und der Austausch von Bytecode zwischen
Anwendungen wurde erst mit Java salonfähig. Mit weltweit mehreren
Millionen Java-Entwicklern ist die kritische Masse zur Etablierung
dieser neuen Techniken erreicht.
<p>
Natürlich kann heute niemand sagen, ob Java auch langfristig
erfolgreich sein und als Programmiersprache auch in zehn oder zwanzig
Jahren eine Rolle spielen wird. Das derzeitige und nach mittlerweile
fast 10 Jahren immer noch anhaltende Entwicklerinteresse spricht allerdings
sehr dafür. Programmiersprachen und -methoden werden nicht von
heute auf morgen ausgewechselt, denn Paradigmenwechsel brauchen ihre
Zeit. Vorhandener, mit viel Aufwand erstellter Quellcode wird nicht
einfach weggeworfen. Auch 20 Jahre alte COBOL-, RPG- und FORTRAN-Programme
werden heute noch gewartet, denn Investitionen in Hard-, Soft- und
Brainware sind nicht von heute auf morgen austauschbar. Java hat seinen
Zenit noch nicht erreicht, und <i>neuer</i> Code auf Basis von Java
wird in nach wie vor zunehmendem Maße entwickelt. So kann die
Prognose gewagt werden, dass Java auch im Jahre 2010 und darüber
hinaus nennenswerte Bedeutung haben wird. Wer also auf Erfahrungen
in Java-Programmierung zurückgreifen kann, hat möglicherweise
den entscheidenden Vorteil im Wettbewerb mit der Konkurrenz.
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100008.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100010.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100012.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100013.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">© 1998, 2007 Guido Krüger & Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>
|