summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100011.html
blob: 4362f3b0a58ccdd01f3e52f7a240ea78ff6669a8 (plain)
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">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100008.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100010.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100012.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100013.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</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&auml;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&uuml;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&auml;ndnisse ... </h3>

<p>
Wie bereits im Vorwort erw&auml;hnt, wollen wir uns der Java-Euphorie
gerne anschlie&szlig;en, sie aber nicht vollkommen kritiklos &uuml;bernehmen.
In diesem Abschnitt soll der Versuch unternommen werden, eine kurze
Bewertung zu geben und einige der h&auml;ufigsten Missverst&auml;ndnisse
auszur&auml;umen. Wir wollen dabei zun&auml;chst zu einigen Thesen
Stellung nehmen, die immer wieder artikuliert werden und h&auml;ufig
zu &uuml;berzogenen oder falschen Annahmen &uuml;ber das Wesen von
Java f&uuml;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&auml;ndigen Applikationen. Als Script-Sprache
ist sie vorwiegend f&uuml;r einfache Manipulationen am Layout und
der Interaktionsf&auml;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&uuml;r &#187;Anf&auml;ngerfehler&#171;.
Auch die Klassenbibliothek ist leichter zu verwenden, denn sie wurde
neu entworfen und kommt ohne die Altlasten nicht-objektorientierter
Vorg&auml;nger daher. Die Kompatibilit&auml;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&szlig;en Umfangs der Klassenbibliotheken
erfordert der Umgang mit Java ein nicht zu untersch&auml;tzendes Ma&szlig;
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&auml;t von Java-Programmen ist auf der reinen
Sprachebene etwas h&ouml;her als die von C- oder C++-Programmen. Das
ist haupts&auml;chlich dem Verzicht auf explizite Pointer sowie maschinennahe
Datentypen und Operatoren zu verdanken. Auch die genaue Spezifikation
der elementaren Datentypen tr&auml;gt zu dieser Tatsache bei. 

<p>
Bezieht man dagegen die riesige Klassenbibliothek mit ihren auf allen
Plattformen standardm&auml;&szlig;ig vorhandenen Funktionen in die
Betrachtung ein, fallen C und C++ im Portabilit&auml;tsvergleich weit
zur&uuml;ck. Funktionalit&auml;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&uuml;gung. 

<p>
Ein weiterer Portabilit&auml;tsvorteil von Java besteht zudem darin,
dass die kompilierten Programme <i>bin&auml;rkompatibel</i> sind.
Ein einmal &uuml;bersetztes Programm wird auf jeder Plattform laufen,
die eine Java-VM und die erforderliche Laufzeitumgebung zur Verf&uuml;gung
stellt. Ein Rekompilieren, wie es bei C- oder C++-Programmen erforderlich
ist, ben&ouml;tigen Java-Programme daher nicht. 

<!-- Section -->

<a name="sectlevel4id001003001004"></a>
<h4>These 4: Java-Programme sind langsam </h4>

<p>
Da Java-Programme in Bytecode &uuml;bersetzt werden, der nicht direkt
vom Prozessor ausgef&uuml;hrt werden kann, muss ein Interpreter diese
Aufgabe &uuml;bernehmen. Dadurch k&ouml;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&uuml;hrt. In der Praxis relativiert es sich durch mehrere Faktoren.
Einerseits sind nur wenige Programme ausgesprochen CPU-intensiv. Die
meisten interaktiven Programme verbringen n&auml;mlich einen Gro&szlig;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&auml;hert sich zunehmend dem
von kompiliertem C/C++-Code an. Die seit dem JDK 1.3 zum Umfang des
JDK geh&ouml;renden HotSpot-Compiler analysieren zur Laufzeit des
Programms den interpretierten Bytecode und &uuml;bersetzen besonders
rechenintensive Teile in direkt ausf&uuml;hrbaren Maschinencode. 

<p>
Das Performance-Problem kann daher als tempor&auml;res Problem angesehen
werden - falls es f&uuml;r den speziellen Typ Anwendung &uuml;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&auml;tigen
diese Ergebnisse bereits. Auch die anf&auml;nglichen Performance-Probleme
der Swing-Oberfl&auml;chen wurden mit dem JDK 1.3 und seinen Nachfolgeversionen
weitgehend unsch&auml;dlich gemacht. Auch der nach wie vor anhaltende
Fortschritt bei der Hardware-Entwicklung hat seinen Beitrag geleistet.
W&auml;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 &uuml;berschritten, und 512 MB Hauptspeicher z&auml;hlen
zum guten Ton. 

<p>
Dennoch kann der unachtsame Entwickler in Java leicht zu einer schlechten
Gesamtperformance beitragen. Wer die abstrakten Designm&ouml;glichkeiten
von Strings, Readern oder Writern, Collection-Klassen und vielen anderen
Bestandteilen der Klassenbibliothek bedenkenlos verwendet, kann das
Laufzeitverhalten seines Programms stark beeintr&auml;chtigen. Schon
mit der Kenntnis einiger Details &uuml;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&uuml;r viele Anwendungen ad&auml;quat
ist. 

<!-- Section -->

<a name="sectlevel4id001003001005"></a>
<h4>These 5: Java ist nicht f&uuml;r ernsthafte Anwendungen geeignet
</h4>

<p>
Diese Behauptung resultiert vor allem aus drei Beobachtungen. Zum
einen hatten viele der zun&auml;chst in Java entwickelten Anwendungen
Spielzeug- oder Demo-Charakter. Meist als Applet realisiert, hatten
sie lediglich die Aufgabe, eine Homepage zu versch&ouml;nern oder
die Java-Kentnisse ihrer Entwickler im zweckfreien Raum zu demonstrieren.
Echten Nutzwert boten dagegen nur wenige. Und gr&ouml;&szlig;ere Applikationen,
die komplett in Java geschrieben wurden, waren zun&auml;chst kaum
auf dem Markt. Dies hat sich mittlerweile vollst&auml;ndig ge&auml;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&auml;chlich bildet das AWT nur einen geringen Anteil der in den
jeweiligen plattformspezifischen Fenstersystemen verf&uuml;gbaren
M&ouml;glichkeiten ab. Die wenigen Dialogelemente stehen allerdings
portabel zur Verf&uuml;gung. Mit Hilfe des Swing-Toolsets kann dieses
Problem als gel&ouml;st angesehen werden. Swing bietet einen umfassenden
Satz komplexer Dialogelemente und stellt ihn plattform&uuml;bergreifend
zur Verf&uuml;gung. Dabei ist es m&ouml;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&auml;hrend
dies weniger f&uuml;r die Sprache selbst, ihre Werkzeuge oder die
elementaren Eigenschaften der Klassenbibliothek galt, konnten die
fr&uuml;hen Grafikbibliotheken ein gewisses Ma&szlig; 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&ouml;nnte.
Zudem stecken die Fehler meist in den Klassenbibliotheken. Der Compiler
und die virtuelle Maschine, auf der die ausf&uuml;hrbaren Programme
laufen, k&ouml;nnen f&uuml;r die meisten Anwendungen als hinreichend
stabil angesehen werden. Auch hier gibt es Ausnahmen, insbesondere
bei JDK-Portierungen auf weniger gebr&auml;uchliche Betriebssysteme.
Auf den meisten Systemen ist das JDK in der t&auml;glichen Praxis
jedoch ein ausgesprochen stabiles, zuverl&auml;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&szlig; f&uuml;r Tausende
von B&uuml;chern und Zeitschriftenartikeln, und es gibt auch einige
Zeitschriften, die sich ausschlie&szlig;lich mit Java besch&auml;ftigen.
Zudem entstanden eine Reihe von stark frequentierten <a name="ixa100140">Newsgroups</a>,
die das Interesse an Java deutlich machen. Alle gr&ouml;&szlig;eren
Softwarehersteller unterst&uuml;tzen die Sprache und haben konkrete
Produkte realisiert. In den meisten einschl&auml;gigen Stellenanzeigen
werden Java-Kenntnisse verlangt. 

<p>
Zeitgleich zur Diskussion um die Eignung Javas als Entwicklungswerkzeug
f&uuml;r grafische Oberfl&auml;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&szlig;e Softwarehersteller auf mehrschichtige Client-Server-Architekturen
mit Java-Unterst&uuml;tzung (Oracle Financials, Star Office) oder
statten ihre Datenbank- oder Web-Server mit Java-F&auml;higkeiten
aus (Oracle 8, Lotus Domino, SUN Java Web Server, Apache jserv). In
vielen Unternehmen gibt es bereits verteilte Anwendungen, die auf
die plattform&uuml;bergreifenden F&auml;higkeiten und die Bin&auml;rkompatibilit&auml;t
von Java-Anwendungen setzen. 

<p>
Auch auf der Client-Seite ist seit einiger Zeit ein Trend zu Java
zu beobachten. So gibt es &#187;kleine&#171; 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&auml;t bei der Entwicklung grafischer
Oberfl&auml;chen zu erh&ouml;hen, oder verbinden in Java geschriebene
Frontends mit den vorhandenen batchorientierten Applikations- und
Datenbankservern. Nicht selten f&uuml;hrt der Umstieg von C/C++ auf
Java zu drastischen Effizienzsteigerungen bei der Entwicklung und
Portierung komplexer Anwendungssysteme. 

<p>
Neben der plattform&uuml;bergreifenden Portabilit&auml;t von Bytecode
und grafischer Oberfl&auml;che bietet Java Dinge wie Datenbankanbindung,
Multithreading oder Netzwerkprogrammierung ohne architektonische Br&uuml;che.
Mit der &#187;Pflicht&#171;, objektorientiert zu programmieren (im
Gegensatz zu C++ gibt es in Java keine <i>legitimierte</i> M&ouml;glichkeit,
rein prozedurale Programme zu schreiben), muss der Entwickler einen
weiteren Schritt in der Evolution seiner eigenen F&auml;higkeiten
vollziehen. Applets, Servlets und der Austausch von Bytecode zwischen
Anwendungen wurde erst mit Java salonf&auml;hig. Mit weltweit mehreren
Millionen Java-Entwicklern ist die kritische Masse zur Etablierung
dieser neuen Techniken erreicht. 

<p>
Nat&uuml;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&uuml;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&szlig;e entwickelt. So kann die
Prognose gewagt werden, dass Java auch im Jahre 2010 und dar&uuml;ber
hinaus nennenswerte Bedeutung haben wird. Wer also auf Erfahrungen
in Java-Programmierung zur&uuml;ckgreifen kann, hat m&ouml;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">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</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">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100010.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100012.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100013.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>