summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100011.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100011.html')
-rw-r--r--Master/Reference Architectures and Patterns/hjp5/html/k100011.html331
1 files changed, 331 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100011.html b/Master/Reference Architectures and Patterns/hjp5/html/k100011.html
new file mode 100644
index 0000000..4362f3b
--- /dev/null
+++ b/Master/Reference Architectures and Patterns/hjp5/html/k100011.html
@@ -0,0 +1,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>