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/k100086.html | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100086.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100086.html | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100086.html b/Master/Reference Architectures and Patterns/hjp5/html/k100086.html new file mode 100644 index 0000000..7df5cd3 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100086.html @@ -0,0 +1,305 @@ +<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,k100083.html;106,k100085.html;107,k100087.html;108,k100090.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="k100083.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100085.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100087.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100090.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 13 - Strukturierung von Java-Programmen
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel2id013003"></a>
+<h2>13.3 Der <a name="ixa100816">Entwicklungszyklus</a> </h2>
+<hr>
+<ul>
+<li><a href="k100086.html#sectlevel2id013003">13.3 Der Entwicklungszyklus</a>
+<ul>
+<li><a href="k100086.html#sectlevel3id013003001">13.3.1 Schematische Darstellung</a>
+<li><a href="k100086.html#sectlevel3id013003002">13.3.2 Projektverwaltung</a>
+<ul>
+<li><a href="k100086.html#sectlevel4id013003002001">Getrenntes Kompilieren</a>
+<li><a href="k100086.html#sectlevel4id013003002002">Java und make</a>
+</ul>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id013003001"></a>
+<h3>13.3.1 Schematische Darstellung </h3>
+
+<p>
+Der Turn-around-Zyklus beim Entwickeln von Java-Programmen unterscheidet
+sich in mehrfacher Hinsicht von dem in traditionellen kompilierten
+Programmiersprachen.
+<ul>
+<li>Der Compiler erzeugt keine direkt ausführbaren Programme,
+sondern <font color="#660099">.class</font>-Files<a name="ixa100817"></a>,
+die von einem Java-Interpreter ausgeführt werden. Mittlerweile
+arbeiten bereits mehrere Betriebssystem-Hersteller daran, <font color="#660099">.class</font>-Files
+direkt ausführbar zu machen, und es gibt schon Prozessoren, die
+den Maschinencode in <font color="#660099">.class</font>-Files ohne
+zwischengeschalteten Interpreter verstehen.
+<li>Es gibt keinen expliziten Link-Lauf, denn die verschiedenen <font color="#660099">.class</font>-Files
+werden zur Ausführungszeit gebunden.
+<li>Die <font color="#660099">.class</font>-Files eines einzigen Projekts
+können auf unterschiedlichen Plattformen mit unterschiedlichen
+Compilern erzeugt werden.
+<li>Die <font color="#660099">.class</font>-Files lassen sich auf
+allen Plattformen ausführen, die einen Java-Interpreter besitzen;
+unabhängig davon, wo sie ursprünglich entwickelt wurden.
+</ul>
+
+<p>
+<a href="k100086.html#entwicklungszyklus">Abbildung 13.1</a> zeigt
+den schematischen Ablauf bei der Entwicklung eines Java-Programms,
+das aus den Klassen <font color="#000077"><tt>A</tt></font>, <font color="#000077"><tt>B</tt></font>
+und <font color="#000077"><tt>C</tt></font> besteht.
+<p>
+<a name="entwicklungszyklus"></a>
+<img src="images/EntZyklus1.gif">
+<p>
+
+<p><i>
+Abbildung 13.1: Der Entwicklungszyklus in Java</i></p>
+
+<p>
+Da der Java-<a name="ixa100818">Bytecode</a> plattformunabhängig
+ist, hätten die Klassen <font color="#000077"><tt>A</tt></font>,
+<font color="#000077"><tt>B</tt></font> und <font color="#000077"><tt>C</tt></font>
+aber auch ebensogut von verschiedenen Entwicklern auf drei unterschiedlichen
+Plattformen entwickelt werden können, um später auf einer
+vierten Plattform ausgeführt zu werden. <a href="k100086.html#plattformuebergreifend">Abbildung 13.2</a>
+zeigt dies beispielhaft.
+<p>
+<a name="plattformuebergreifend"></a>
+<img src="images/EntZyklus2.gif">
+<p>
+
+<p><i>
+Abbildung 13.2: Plattformübergreifende Entwicklung in Java</i></p>
+
+
+<!-- Section -->
+<a name="sectlevel3id013003002"></a>
+<h3>13.3.2 <a name="ixa100819">Projektverwaltung</a></h3>
+
+
+<!-- Section -->
+<a name="sectlevel4id013003002001"></a>
+<h4>Getrenntes Kompilieren </h4>
+
+<p>
+Wie die Abbildungen deutlich machen, spielen die <font color="#660099">.class</font>-Files
+<a name="ixa100820"></a><a name="ixa100821"></a> für den Entwicklungsprozess
+und die Portierbarkeit von Java-Programmen eine entscheidende Rolle.
+Jede <font color="#660099">.class</font>-Datei enthält den Bytecode
+für eine übersetzte Klasse. Zusätzlich sind in ihr
+Informationen enthalten, um dynamisches Linken und Late-Bindung zu
+unterstützen und gegebenenfalls Symbole, Zeilennummern und andere
+Informationen für den Debugger zur Verfügung zu stellen.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Eine der Grundregeln bei der Entwicklung von Java-Programmen ist es,
+genau eine Klassendefinition je Quelldatei aufzunehmen. Anders als
+etwa in C++, ist es in Java grundsätzlich nicht möglich,
+die Quellen einer einzigen Klasse auf mehrere Dateien zu verteilen
+(und auf diese Weise <i>weniger</i> als eine Klasse in einer Quelldatei
+zu speichern). Obwohl es - wie wir gleich sehen werden - möglich
+ist, <i>mehr</i> als eine Klasse in einer Quelldatei abzulegen, sollte
+dies in der Regel nicht getan werden. Wenn diese Regeln eingehalten
+werden, ergibt sich eine eindeutige Abbildung zwischen Klassen und
+Quelldateien, die bei der sauberen Strukturierung eines Projektes
+hilft. Durch die Verwendung von Paketen kann eine Verteilung der Quelltexte
+auf verschiedene Verzeichnisse und Unterverzeichnisse erreicht werden.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Wie bereits angedeutet, dürfen tatsächlich auch zwei oder
+mehr Klassen in einer Quelldatei enthalten sein. Voraussetzung dafür
+ist allerdings, dass höchstens eine von ihnen als <a name="ixa100822"><a href="index_p.html#ixb100084"><font color=#000080><tt>public</tt></font></a></a>
+deklariert wurde. Eine solche Vorgehensweise kann beispielsweise bei
+sehr kleinen Projekten, die nur aus ganz wenigen Klassen bestehen,
+sinnvoll sein, um alle Klassen in eine einzige Datei zu bekommen.
+Sie kann auch angewendet werden, wenn kleine Hilfsklassen benötigt
+werden, die nur für eine einzige andere Klasse von Bedeutung
+sind. Der Compiler erzeugt in jedem Fall eine separate <font color="#660099">.class</font>-Datei
+für jede Klasse, die in einer Quelldatei enthalten ist. Wurde
+in einer Quelldatei mehr als eine Klasse <a href="index_p.html#ixb100084"><font color=#000080><tt>public</tt></font></a>
+deklariert, gibt es einen Compiler-Fehler.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Wichtig ist in dem Zusammenhang auch, dass der Name der <a href="index_p.html#ixb100084"><font color=#000080><tt>public</tt></font></a>-Klasse
+und der Name der Quelldatei identisch sein müssen. Dabei muss
+die Groß- und Kleinschreibung eingehalten werden, und auch bei
+Klassennamen, die länger als 8 Zeichen sind, muss der Dateiname
+so lang wie der Klassenname sein. Klassen- und Dateiname unterscheiden
+sich also nur durch die Extension <font color="#660099">.java</font>.
+So befindet sich beispielsweise die Klasse <a href="index_i.html#ixb100170"><font color=#000080><tt>Integer</tt></font></a>
+in einer Datei mit dem Namen <font color="#660099">Integer.java</font>
+und die Klasse <a href="index_i.html#ixb100628"><font color=#000080><tt>InterruptedException</tt></font></a>
+in einer Datei mit dem Namen <font color="#660099">InterruptedException.java</font>.
+Da die Extension einer Java-Quelldatei in jedem Fall <font color="#660099">.java</font>
+(und damit vierstellig) ist, ist eine vernünftige Portierung
+von Java auf Plattformen, die nur 8+3-Dateinamen unterstützen,
+kaum sinnvoll möglich und bisher auch nur ansatzweise gelungen.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF"> Warnung </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Interessanterweise bietet Java volle <a name="ixa100823">Typsicherheit</a>
+auch über die Grenzen von Quelldateien hinweg, ohne dass dazu
+Header-Dateien oder andere Interface-Beschreibungen nötig wären.
+Der Compiler verwendet während der Übersetzung einer Java-Klasse
+die <font color="#660099">.class</font>-Dateien aller eingebundenen
+Klassen und entnimmt diesen die Signatur der aufgerufenen Methoden.
+Die Notwendigkeit zur Bereitstellung von separaten Header-Dateien
+(wie beispielsweise in C++) und das fehlerträchtige Management
+der Abhängigkeiten zwischen ihnen und ihren Quelltexten entfällt
+daher.
+
+<!-- Section -->
+
+<a name="sectlevel4id013003002002"></a>
+<h4>Java und make </h4>
+
+<p>
+Genau aus diesem Grund ist aber auch die Verwendung des <a name="ixa100824"><a href="index_m.html#ixb100630"><font color=#000080><tt>make</tt></font></a></a>-Tools
+zur Verwaltung der Dateiabhängigkeiten in Java-Projekten schwierig.
+Anstelle der klar definierten Abhängigkeit einer Quelldatei von
+einigen Headerdateien besitzt eine Java-Quelle meist eine Vielzahl
+von (teilweise impliziten oder indirekten) Abhängigkeiten zu
+anderen Java-Quellen. Diese korrekt zu pflegen ist nicht einfach,
+und ein <a name="ixa100825"><a href="index_m.html#ixb100631"><font color=#000080><tt>makefile</tt></font></a></a>
+kann leicht unvollständige Abhängigkeitsregeln enthalten.
+Die daraus entstehenden Inkonsistenzen können zu schwer zu lokalisierenden
+Laufzeitfehlern führen.
+
+<p>
+Ein anderes Problem bei der Verwendung von <a href="index_m.html#ixb100630"><font color=#000080><tt>make</tt></font></a>
+ist die Vielzahl der separaten Compiler-Aufrufe. Da der Java-Compiler
+des JDK selbst in Java geschrieben wurde, verursacht jeder Aufruf
+einen erheblichen Overhead durch das erforderliche Starten der virtuellen
+Maschine, der sich bei umfangreichen Projekten in unzumutbaren Wartezeiten
+niederschlägt.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Aus diesen Gründen ist es bei kleineren und mittleren Projekten
+oftmals sinnvoll, auf den Einsatz von <a href="index_m.html#ixb100630"><font color=#000080><tt>make</tt></font></a>
+zu verzichten und die Programme bei Bedarf durch Aufruf von <font color="#000077"><tt>javac
+*.java</tt></font> komplett neu zu kompilieren. Der Aufruf-Overhead
+entsteht in diesem Fall nur einmal, und der Compiler braucht nicht
+wesentlich länger, als wenn lediglich eine einzige Quelle übersetzt
+würde.
+
+<p>
+Eine Alternative zu <a href="index_m.html#ixb100630"><font color=#000080><tt>make</tt></font></a>
+ist das Open-Source-Projekt <a name="ixa100826"><a href="index_a.html#ixb100632"><font color=#000080><tt>ant</tt></font></a></a>,
+ein komplett in Java geschriebenes <a href="index_m.html#ixb100630"><font color=#000080><tt>make</tt></font></a>-Tool
+mit umfangreichen Scripting-Möglichkeiten. <a href="index_a.html#ixb100632"><font color=#000080><tt>ant</tt></font></a>
+kann am ehesten als Kombination aus <a href="index_m.html#ixb100630"><font color=#000080><tt>make</tt></font></a>
+und Kommando-Shell angesehen werden. Basierend auf XML als Steuerungssprache
+bietet es eine Vielzahl von eingebauten Kommandos, die beim Übersetzen
+von Java-Programm und während des gesamten Build-Prozesses nützlich
+sind. Eigene Erweiterungen können in Java geschrieben und nahtlos
+integriert werden. <a href="index_a.html#ixb100632"><font color=#000080><tt>ant</tt></font></a>
+wird als <a name="ixa100827"><i>Jakarta</i></a>-Projekt entwickelt,
+und seine Homepage ist <a href="http://ant.apache.org/">http://ant.apache.org/</a>.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#0099CC">
+<tr>
+<td><font color="#FFFFFF"> Tipp </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+<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="k100083.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100085.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100087.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100090.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>
|
