diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100011.html | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100011.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100011.html | 331 |
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"> 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>
|
