<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://ls14-eini.cs.tu-dortmund.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hauer</id>
		<title>EINI - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://ls14-eini.cs.tu-dortmund.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hauer"/>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php/Spezial:Beitr%C3%A4ge/Hauer"/>
		<updated>2026-05-02T10:20:27Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hardware&amp;diff=2260</id>
		<title>Hardware</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hardware&amp;diff=2260"/>
				<updated>2017-11-14T11:53:01Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit Hardware werden die physikalischen Einzelteile eines Computers bezeichnet. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
* Prozessoren&lt;br /&gt;
* Arbeitsspeicher&lt;br /&gt;
* Massenspeichermedien&lt;br /&gt;
* Eingabegeräte&lt;br /&gt;
* Ausgabegeräte&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hardware&amp;diff=2259</id>
		<title>Hardware</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hardware&amp;diff=2259"/>
				<updated>2017-11-14T11:52:53Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit Hardware werden die physikalischen Einzelteile eines Computers bezeichnet. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
 * Prozessoren&lt;br /&gt;
 * Arbeitsspeicher&lt;br /&gt;
 * Massenspeichermedien&lt;br /&gt;
 * Eingabegeräte&lt;br /&gt;
 * Ausgabegeräte&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hardware&amp;diff=2258</id>
		<title>Hardware</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hardware&amp;diff=2258"/>
				<updated>2017-11-14T11:52:46Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit Hardware werden die physikalischen Einzelteile eines Computers bezeichnet. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
  * Prozessoren&lt;br /&gt;
  * Arbeitsspeicher&lt;br /&gt;
  * Massenspeichermedien&lt;br /&gt;
  * Eingabegeräte&lt;br /&gt;
  * Ausgabegeräte&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hardware&amp;diff=2257</id>
		<title>Hardware</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hardware&amp;diff=2257"/>
				<updated>2017-11-14T11:52:30Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: Die Seite wurde neu angelegt: „Mit Hardware werden die physikalischen Einzelteile eines Computers bezeichnet. Dazu gehören:      * Prozessoren     * Arbeitsspeicher     * Massenspeichermedi…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit Hardware werden die physikalischen Einzelteile eines Computers bezeichnet. Dazu gehören:&lt;br /&gt;
&lt;br /&gt;
    * Prozessoren&lt;br /&gt;
    * Arbeitsspeicher&lt;br /&gt;
    * Massenspeichermedien&lt;br /&gt;
    * Eingabegeräte&lt;br /&gt;
    * Ausgabegeräte&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Software&amp;diff=2256</id>
		<title>Software</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Software&amp;diff=2256"/>
				<updated>2017-11-14T11:48:19Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Software ist ein Sammelbegriff für Programme und dazugehörige Daten, die auf einem Computer ausgeführt werden können.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Software&amp;diff=2255</id>
		<title>Software</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Software&amp;diff=2255"/>
				<updated>2017-11-14T11:46:38Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: Die Seite wurde neu angelegt: „Software ist ein Sammelbegriff für Programme, die auf einem Computer ausgeführt werden können.“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Software ist ein Sammelbegriff für Programme, die auf einem Computer ausgeführt werden können.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Basisvokabular&amp;diff=2216</id>
		<title>Basisvokabular</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Basisvokabular&amp;diff=2216"/>
				<updated>2017-10-24T15:16:51Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Auflistung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auf dieser Seite werden Begriffe erklärt, die häufig in den Artikeln verwendet werden und zum '''Basisvokabular der Informatik''' gehören. Es handelt sich hierbei größtenteils um Begriffe, die keinen eigenen Artikel haben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ergänzungen sind erwünscht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Auflistung=&lt;br /&gt;
&lt;br /&gt;
*'''äquivalent'''=austauschbar; gleichwertig; eindeutig einander zugeordnet. Das Symbol dafür ist &amp;amp;equiv;. In der [[Boolesche Algebra|Booleschen Algebra]] kann man Äquivalenz daran erkennen, dass zwei Aussagen in jeder möglichen Situation (d.h. Belegung der Variablen) den gleichen Wahrheitsgehalt haben. &lt;br /&gt;
&lt;br /&gt;
*'''arbiträr''' = willkürlich&lt;br /&gt;
&lt;br /&gt;
*'''Ausgabe''' = Text, Bild oder Ton, der dem Benutzer durch ein Programm präsentiert wird. Siehe auch: [[Algorithmus#Rückgabe und Ausgabe | Rückgabe und Ausgabe]]&lt;br /&gt;
&lt;br /&gt;
*'''Deklaration''': Bei der Deklaration wird festgelegt, '''was''' etwas ist. Siehe: [[Deklaration]]&lt;br /&gt;
&lt;br /&gt;
*'''endlich''': nicht unendlich, also begrenzt&lt;br /&gt;
&lt;br /&gt;
*'''Implementierung''': Die Implementierung sagt aus, '''wie''' etwas funktioniert. Sie ist sozusagen der '''Inhalt''' von z.B. einer [[Methode]].&lt;br /&gt;
&lt;br /&gt;
*'''Initialisierung''': Bei der Initialisierung wird festgelegt, welchen '''Wert''' etwas zu Beginn hat, z.B. bei [[Variablen]].&lt;br /&gt;
&lt;br /&gt;
*'''Instanziierung''': Die Instanziierung beschreibt das Erstellen eines neuen [[Objekt]]es anhand des von einer [[Klasse]] vorgegebenen Bauplans. Man erstellt also eine Instanz der Klasse.&lt;br /&gt;
&lt;br /&gt;
*'''Interpretation''': Eine Beschreibung, wie ein Datensatz zu verstehen (interpretieren) ist. Zwei [[double]] können z.B. die Koordinaten eines Punktes beschreiben oder die Maße eines Rechtecks.&lt;br /&gt;
&lt;br /&gt;
*'''Iteration''' = Durchlauf, wird vor allem im Zusammenhang mit [[Schleifen]] verwendet.&lt;br /&gt;
&lt;br /&gt;
*'''Konsole''': Ein- und Ausgabegerät, gewöhnlich für Text. Wird heutzutage meistens von der [[IDE]] emuliert anstatt direkt benutzt zu werden, jedoch sind Kommandozeileninterpreter wie Windows' &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt; oder Linux' &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; als Konsole zu verstehen. &lt;br /&gt;
&lt;br /&gt;
*'''Maschine''': Dieser Begriff umfasst alle nichtmenschlichen Rechner.&lt;br /&gt;
&lt;br /&gt;
*'''Modulo''': Modulo ist ein [[Operator]], der den Rest einer Division berechnet.&lt;br /&gt;
&lt;br /&gt;
*'''Rückgabe''' = Ergebnis der Berechnung einer Methode. Siehe: [[Methode#Rückgabe|Rückgabe]]&lt;br /&gt;
&lt;br /&gt;
*'''terminieren''' = beenden; ein Vorgang hört auf zu arbeiten. Siehe auch: [[Terminierung]]&lt;br /&gt;
&lt;br /&gt;
*'''Übergabe''' = Aufrufen einer [[Methode]] mit angegebenen Werten. Werte werden an Methoden übergeben, die diese benutzen, um ein Unterprogramm auszuführen.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Vorzeichenbetragszahlen&amp;diff=2214</id>
		<title>Vorzeichenbetragszahlen</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Vorzeichenbetragszahlen&amp;diff=2214"/>
				<updated>2017-10-24T09:56:59Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Berechnung der Vorzeichenbetragszahlen==&lt;br /&gt;
&lt;br /&gt;
Um eine Dezimalzahl in eine Binärzahl in Vorzeichenbetragsdarstellung zu überführen, muss die Dezimalzahl zunächst in eine Binärzahl umgewandelt werden. Bei der Vorzeichenbetragsdarstellung ist das erste Bit das Vorzeichenbit. Wenn dieses gesetzt ist, dann ist die Binärzahl, die hinter dem ersten Bit steht, negativ, ansonsten ist sie positiv.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel==&lt;br /&gt;
&lt;br /&gt;
'''1101 1001''' : Signifikantestes Bit ist 1, also ist die Zahl negativ. '''101 1001''' in Dezimal ist 1 + 8 + 16 + 64 = 89. Die repräsentierte Zahl ist also die -89.&lt;br /&gt;
&lt;br /&gt;
'''0101 1001''' : Signifikantestes Bit ist 0, also ist die Zahl positiv. '''101 1001''' ist wie oben 89. Die Repräsentierte Zahl ist also die 89.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Vorzeichenbetragszahlen&amp;diff=2213</id>
		<title>Vorzeichenbetragszahlen</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Vorzeichenbetragszahlen&amp;diff=2213"/>
				<updated>2017-10-24T09:56:13Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Berechnung der Vorzeichenbetragszahlen==&lt;br /&gt;
&lt;br /&gt;
Um eine Dezimalzahl in eine Binärzahl in Vorzeichenbetragsdarstellung zu überführen, muss die Dezimalzahl zunächst in eine Binärzahl umgewandelt werden. Bei der Vorzeichenbetragsdarstellung ist das erste Bit das Vorzeichenbit. Wenn dieses gesetzt ist, dann ist die Binärzahl, die hinter dem ersten Bit steht, negativ, ansonsten ist sie positiv.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel==&lt;br /&gt;
&lt;br /&gt;
'''1101 1001''' : Signifikantestes Bit ist 1, also ist die Zahl negativ. '''101 1001''' in Dezimal ist 1 + 8 + 16 + 64 = 89. Die repräsentierte Zahl ist also die -89.&lt;br /&gt;
&lt;br /&gt;
'''0101 1001''' : Signifikantestes Bit ist 0, also ist die Zahl positiv. '''101 1001''' ist wie oben 89. Die Repräsentierte Zahl ist also d ie 89.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Vorzeichenbetragszahlen&amp;diff=2212</id>
		<title>Vorzeichenbetragszahlen</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Vorzeichenbetragszahlen&amp;diff=2212"/>
				<updated>2017-10-24T09:55:35Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Berechnung der Vorzeichenbetragszahlen==&lt;br /&gt;
&lt;br /&gt;
Um eine Dezimalzahl in eine Binärzahl in Vorzeichenbetragsdarstellung zu überführen, muss die Dezimalzahl zunächst in eine Binärzahl umgewandelt werden. Bei der Vorzeichenbetragsdarstellung ist das erste Bit das Vorzeichenbit. Wenn dieses gesetzt ist, dann ist die Binärzahl, die hinter dem ersten Bit steht, negativ, ansonsten ist sie positiv.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel==&lt;br /&gt;
&lt;br /&gt;
1101 1001 : Signifikantestes Bit ist 1, also ist die Zahl negativ. 101 1001 in Dezimal ist 1 + 8 + 16 + 64 = 89. Die repräsentierte Zahl ist also die -89.&lt;br /&gt;
&lt;br /&gt;
0101 1001 : Signifikantestes Bit ist 0, also ist die Zahl positiv. 101 1001 ist wie oben 89. Die Repräsentierte Zahl ist also d ie 89.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Vorzeichenbetragszahlen&amp;diff=2211</id>
		<title>Vorzeichenbetragszahlen</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Vorzeichenbetragszahlen&amp;diff=2211"/>
				<updated>2017-10-24T09:55:27Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Berechnung der Vorzeichenbetragszahlen==&lt;br /&gt;
&lt;br /&gt;
Um eine Dezimalzahl in eine Binärzahl in Vorzeichenbetragsdarstellung zu überführen, muss die Dezimalzahl zunächst in eine Binärzahl umgewandelt werden. Bei der Vorzeichenbetragsdarstellung ist das erste Bit das Vorzeichenbit. Wenn dieses gesetzt ist, dann ist die Binärzahl, die hinter dem ersten Bit steht, negativ, ansonsten ist sie positiv.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel==&lt;br /&gt;
&lt;br /&gt;
1101 1001 : Signifikantestes Bit ist 1, also ist die Zahl negativ. 101 1001 in Dezimal ist 1 + 8 + 16 + 64 = 89. Die repräsentierte Zahl ist also die -89.  &lt;br /&gt;
0101 1001 : Signifikantestes Bit ist 0, also ist die Zahl positiv. 101 1001 ist wie oben 89. Die Repräsentierte Zahl ist also d ie 89.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Vorzeichenbetragszahlen&amp;diff=2210</id>
		<title>Vorzeichenbetragszahlen</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Vorzeichenbetragszahlen&amp;diff=2210"/>
				<updated>2017-10-24T09:55:20Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Berechnung der Vorzeichenbetragszahlen==&lt;br /&gt;
&lt;br /&gt;
Um eine Dezimalzahl in eine Binärzahl in Vorzeichenbetragsdarstellung zu überführen, muss die Dezimalzahl zunächst in eine Binärzahl umgewandelt werden. Bei der Vorzeichenbetragsdarstellung ist das erste Bit das Vorzeichenbit. Wenn dieses gesetzt ist, dann ist die Binärzahl, die hinter dem ersten Bit steht, negativ, ansonsten ist sie positiv.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel==&lt;br /&gt;
&lt;br /&gt;
1101 1001 : Signifikantestes Bit ist 1, also ist die Zahl negativ. 101 1001 in Dezimal ist 1 + 8 + 16 + 64 = 89. Die repräsentierte Zahl ist also die -89.&lt;br /&gt;
0101 1001 : Signifikantestes Bit ist 0, also ist die Zahl positiv. 101 1001 ist wie oben 89. Die Repräsentierte Zahl ist also d ie 89.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Dezimal-_und_Bin%C3%A4rsystem&amp;diff=2209</id>
		<title>Dezimal- und Binärsystem</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Dezimal-_und_Bin%C3%A4rsystem&amp;diff=2209"/>
				<updated>2017-10-24T09:42:24Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Zahlensysteme''' sind Schemata zur Repräsentation von Zahlen. Dieser Artikel beschäftigt sich mit der Umrechnung von natürlichen Zahlen zwischen dem '''Dezimal- und Binärsystem'''.&lt;br /&gt;
&lt;br /&gt;
Zur Darstellung von ganzen Zahlen: siehe [[Zweierkomplement]].&lt;br /&gt;
&lt;br /&gt;
== Zahlensysteme ==&lt;br /&gt;
&lt;br /&gt;
Eine &amp;quot;Zehn&amp;quot; besitzt sowohl im Dezimal-, Binär-, Oktal-, [[Hexadezimalzahlen|Hexadezimal]]- oder römischen&amp;lt;ref&amp;gt;Das Zahlensystem der Römer hat jedoch diverse Eigenschaften, die das intuitive Rechnen kaum möglich machen, weswegen wir dies im weiteren außen vor lassen. '''Kaum''' eine Aussage, die hier getroffen wurde, lässt sich auf dieses Zahlensystem übertragen.&amp;lt;/ref&amp;gt; System den gleichen Wert, wird jedoch unterschiedlich repräsentiert. Diese sind entsprechend &amp;quot;10&amp;quot;, &amp;quot;1010&amp;quot;, &amp;quot;12&amp;quot;, &amp;quot;A&amp;quot; oder &amp;quot;X&amp;quot;. Andere Zahlen besitzen in einem Zahlensystem hingegen keine eindeutige Repräsentation, so z.B. die Zahl &amp;quot;ein Halb&amp;quot;, die sich als Bruch mit &amp;quot;1/2 , 2/4, 100/200, ...&amp;quot; repräsentiert lässt. Oder die Zahl &amp;quot;ein Drittel&amp;quot;, die als Dezimalzahl mit Nachkommastellen gar keine exakte Repräsentation haben kann (0.33333...). Damit Sie ein Verständnis entwickeln können, wie Rechner mit Zahlen umgehen und wo bei dieser Repräsentation Probleme entstehen können, beschäftigen Sie sich die ersten Wochen der Veranstaltung mit dem '''Binärsystem'''.&lt;br /&gt;
&lt;br /&gt;
== Ziffern und Werte ==&lt;br /&gt;
&lt;br /&gt;
===Erklärung===&lt;br /&gt;
&lt;br /&gt;
Genau wie Zahlen im Dezimalsystem besitzen die Ziffern einer Zahl im Binärsystem einen Wert und eine Position innerhalb dieser. Die Position oder '''Stelligkeit''' einer Ziffer gibt den '''Faktor''' an, mit dem die Ziffer multipliziert wird, um ihren Wert in der Zahl zu repräsentieren. Die Ziffern im Dezimalsystem haben den Wert &amp;quot;0&amp;quot; bis &amp;quot;9&amp;quot;, während im Binärsystem nur die Ziffern &amp;quot;0&amp;quot; und &amp;quot;1&amp;quot; existieren. Der Faktor der Stelligkeit einer Ziffer ist in jedem Zahlensystem aus ihrer Position zu berechnen: Die erste Ziffer (ganz rechts) einer Zahl hat den Faktor b^0, wobei b die Anzahl der verschiedenen Ziffernwerte im Zahlensystem repräsentiert und '''Basis''' genannt wird. Die Zweite Ziffer hat den Faktor b^1, die dritte b^2, usw. Für das Binärsystem ist die Basis '''2''', womit die 2er-Potenzen relevant werden.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2er-Potenz!!2^10 !! 2^9 !! 2^8 !! 2^7 !! 2^6 !! 2^5 !! 2^4 !! 2^3 !! 2^2 !! 2^1 !! 2^0&lt;br /&gt;
|-&lt;br /&gt;
| Dezimalwert|| 1024 || 512 || 256 || 128 || 64 || 32 || 16 || 8 || 4 || 2 || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&lt;br /&gt;
Im Dezimalsystem ist die Basis '''10'''. Die Zahl '''734''' hat im Dezimalsystem drei Ziffern. Die 7 hat den Faktor '''10^2 = 100''', die 3 den Faktor '''10^1 = 10''' und die 4 den Faktor '''10^0 = 1'''. Somit lässt sich die Zahl als &amp;quot;Sieben mal Hundert&amp;quot; plus &amp;quot;Drei mal Zehn&amp;quot; plus &amp;quot;Vier mal Eins&amp;quot; interpretieren. Da das Dezimalsystem das übliche Zahlensystem ist, in dem Sie arbeiten, sollte dies nicht näher überraschend sein. Es ist jedoch wichtig, dass den Hintergrund dieser Repräsentation zu verstehen.&lt;br /&gt;
&lt;br /&gt;
Das Binärsystem hat als Basis die '''2'''. Die Zahl '''1001''' im Binärsystem hat vier Ziffern, die linke 1 hat den Faktor '''2^3 = 8''', die linke 0 hat den Faktor '''2^2 = 4''', die rechte 0 hat den Faktor '''2^1 = 2''' und die rechte 1 hat den Faktor '''2^0=1'''. Somit lässt sich die Zahl als &amp;quot;Ein mal Acht&amp;quot; plus &amp;quot;Null mal Vier&amp;quot; plus &amp;quot;Null mal Zwei&amp;quot; plus &amp;quot;Ein mal Eins&amp;quot; interpretieren.&lt;br /&gt;
&lt;br /&gt;
== Umrechnung ==&lt;br /&gt;
&lt;br /&gt;
=== Binär zu Dezimal ===&lt;br /&gt;
Umgerechnet aus dem Binärsystem in das Dezimalsystem ist die Zahl '''1001''' also '''1*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 1*8 + 0*4 + 0*2 + 1*1 = 8+1 = 9'''. Da die Repräsentation der Faktoren selbst im Dezimalsystem liegt, sollte dies nicht weiter kompliziert sein.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2er-Potenz!! 2^3 !! 2^2 !! 2^1 !! 2^0&lt;br /&gt;
|-&lt;br /&gt;
! Dezimalwert!!  8 !! 4 !! 2 !! 1&lt;br /&gt;
|-&lt;br /&gt;
| Binärzahl  || 1 || 0 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| Dezimalzahl ||colspan=&amp;quot;4&amp;quot;|8+1 = 9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dezimal zu Binär ===&lt;br /&gt;
Die Umrechnung vom Dezimalsystem in das Binärsystem basiert auf der gleichen Idee wie die obrige Repräsentation der Zahl '''734'''. Man wählt zur Repräsentation zuerst den größten Faktor, der kleiner ist als die Zahl selbst und gibt der Ziffer an der Position ganz links den entsprechenden Wert. Der größte Faktor im Dezimalsystem, der in die '''734''' hinein passt, ist die '''100=10^2''' und diese passt '''7''' mal in die '''734''' hinein. Also hat die Ziffer ganz links die Stelligkeit '''3''' und den Wert '''7'''. Wir führen den Prozess mit dem Rest '''34''' durch, um den Rest der Zahl zu repräsentieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beispiel ====&lt;br /&gt;
&lt;br /&gt;
Um diese Umrechnung im Binärsystem durchzuführen, geht man genau so vor, nur mit anderen Faktoren. Der größte Faktor im Binärsystem, der in die '''734''' hinein passt, ist der Faktor '''512=2^9'''. Dieser passt genau ein Mal in die Zahl hinein, also hat die Ziffer ganz links in der Repräsentation im Binärsystem den Wert '''1''' und die Stelligkeit '''10'''. Der Rest, der noch nicht repräsentiert ist, hat den Wert '''734 - 512 = 222'''. Wir setzen das Schema fort:&lt;br /&gt;
&lt;br /&gt;
* Der Faktor '''256=10^8''' passt 0 mal in den Rest hinein, die Ziffer an Position 9 hat also den Wert 0.&lt;br /&gt;
&lt;br /&gt;
* Der Faktor '''128=2^7''' passt 1 mal in den Rest hinein, die Ziffer an Position 8 hat also den Wert 1. Der Rest ist '''222 - 128 = 94'''.&lt;br /&gt;
&lt;br /&gt;
* Der Faktor '''64=2^6''' passt 1 mal in den Rest hinein, die Ziffer an Position 7 hat also den Wert 1. Der Rest ist '''94 - 64 = 30'''.&lt;br /&gt;
&lt;br /&gt;
* Der Faktor '''32=2^5''' passt 0 mal in den Rest hinein, die Ziffer an Position 6 hat also den Wert 0.&lt;br /&gt;
&lt;br /&gt;
* Der Faktor '''16=2^4''' passt 1 mal in den Rest hinein, die Ziffer an Position 5 hat also den Wert 1. Der Rest ist '''30 - 16 = 14'''.&lt;br /&gt;
&lt;br /&gt;
* Der Faktor '''8=2^3''' passt 1 mal in den Rest hinein, die Ziffer an Position 4 hat also den Wert 1. Der Rest ist '''14 - 8 = 6'''.&lt;br /&gt;
&lt;br /&gt;
* Der Faktor '''4=2^2''' passt 1 mal in den Rest hinein, die Ziffer an Position 3 hat also den Wert 1. Der Rest ist '''6 - 4 = 2'''.&lt;br /&gt;
&lt;br /&gt;
* Der Faktor '''2=2^1''' passt 1 mal in den Rest hinein, die Ziffer an Position 2 hat also den Wert 1. Der Rest ist '''2 - 2 = 0'''.&lt;br /&gt;
&lt;br /&gt;
* Der Faktor '''1=2^0''' passt 0 mal in den Rest hinein, die Ziffer an Position 1 hat also den Wert 0. Damit sind wir fertig.&lt;br /&gt;
&lt;br /&gt;
Die Zahl '''734''', repräsentiert im Binärsystem, ist also 10 Ziffern groß und lautet '''1011011110'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Alternative Umrechnung====&lt;br /&gt;
Man dividiert die Dezimalzahl, die man umrechnen will, mittels Ganzzahldivision durch 2. Den Rest notiert man sich. Das Ergebnis der Division wird solange wieder dividiert, bis das Ergebnis 0 ergibt.&lt;br /&gt;
&lt;br /&gt;
* '''734''' durch 2 ist 367 mit dem Rest '''0'''&lt;br /&gt;
* '''367''' durch 2 ist 183 mit dem Rest '''1'''&lt;br /&gt;
* '''183''' durch 2 ist 091 mit dem Rest '''1'''&lt;br /&gt;
* '''091''' durch 2 ist 045 mit dem Rest '''1'''&lt;br /&gt;
* '''045''' durch 2 ist 022 mit dem Rest '''1'''&lt;br /&gt;
* '''022''' durch 2 ist 011 mit dem Rest '''0'''&lt;br /&gt;
* '''011''' durch 2 ist 005 mit dem Rest '''1'''&lt;br /&gt;
* '''005''' durch 2 ist 002 mit dem Rest '''1'''&lt;br /&gt;
* '''002''' durch 2 ist 001 mit dem Rest '''0'''&lt;br /&gt;
* '''001''' durch 2 ist 000 mit dem Rest '''1'''&lt;br /&gt;
&lt;br /&gt;
Nun werden die Reste von unten nach oben gelesen, sodass es die Binärzahl '''1011011110''' ergibt.&lt;br /&gt;
&lt;br /&gt;
== Fußnoten ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Basisvokabular&amp;diff=2208</id>
		<title>Basisvokabular</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Basisvokabular&amp;diff=2208"/>
				<updated>2017-10-24T09:41:14Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Auflistung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auf dieser Seite werden Begriffe erklärt, die häufig in den Artikeln verwendet werden und zum '''Basisvokabular der Informatik''' gehören. Es handelt sich hierbei größtenteils um Begriffe, die keinen eigenen Artikel haben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ergänzungen sind erwünscht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Auflistung=&lt;br /&gt;
&lt;br /&gt;
*'''äquivalent'''=austauschbar; gleichwertig; eindeutig einander zugeordnet. Das Symbol dafür ist &amp;amp;equiv;. In der [[Boolesche Algebra|Booleschen Algebra]] kann man Äquivalenz daran erkennen, dass zwei Aussagen in jeder möglichen Situation (d.h. Belegung der Variablen) den gleichen Wahrheitsgehalt haben. &lt;br /&gt;
&lt;br /&gt;
*'''arbiträr''' = willkürlich&lt;br /&gt;
&lt;br /&gt;
*'''Ausgabe''' = Text, Bild oder Ton, der dem Benutzer durch ein Programm präsentiert wird. Siehe auch: [[Algorithmus#Rückgabe und Ausgabe | Rückgabe und Ausgabe]]&lt;br /&gt;
&lt;br /&gt;
*'''Deklaration''': Bei der Deklaration wird festgelegt, '''was''' etwas ist. Siehe: [[Deklaration]]&lt;br /&gt;
&lt;br /&gt;
*'''endlich''': nicht unendlich, also begrenzt&lt;br /&gt;
&lt;br /&gt;
*'''Implementierung''': Die Implementierung sagt aus, '''wie''' etwas funktioniert. Sie ist sozusagen der '''Inhalt''' von z.B. einer [[Methode]].&lt;br /&gt;
&lt;br /&gt;
*'''Initialisierung''': Bei der Initialisierung wird festgelegt, welchen '''Wert''' etwas zu Beginn hat, z.B. bei [[Variablen]].&lt;br /&gt;
&lt;br /&gt;
*'''Instanziierung''': Die Instanziierung beschreibt das Erstellen eines neuen [[Objekt]]es anhand des von einer [[Klasse]] vorgegebenen Bauplans. Man erstellt also eine Instanz der Klasse.&lt;br /&gt;
&lt;br /&gt;
*'''Interpretation''': Eine Beschreibung, wie ein Datensatz zu verstehen (interpretieren) ist. Zwei [[double]] können z.B. die Koordinaten eines Punktes beschreiben oder die Maße eines Rechtecks.&lt;br /&gt;
&lt;br /&gt;
*'''Iteration''' = Durchlauf, wird vor allem im Zusammenhang mit [[Schleifen]] verwendet.&lt;br /&gt;
&lt;br /&gt;
*'''Konsole''': Ein- und Ausgabegerät, gewöhnlich für Text. Wird heutzutage meistens von der [[IDE]] emuliert anstatt direkt benutzt zu werden, jedoch sind Komandozeileninterpreter wie Windows' &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt; oder Linux' &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; als Konsole zu verstehen. &lt;br /&gt;
&lt;br /&gt;
*'''Maschine''': Dieser Begriff umfasst alle nichtmenschlichen Rechner.&lt;br /&gt;
&lt;br /&gt;
*'''Modulo''': Modulo ist ein [[Operator]], der den Rest einer Division berechnet.&lt;br /&gt;
&lt;br /&gt;
*'''Rückgabe''' = Ergebnis der Berechnung einer Methode. Siehe: [[Methode#Rückgabe|Rückgabe]]&lt;br /&gt;
&lt;br /&gt;
*'''terminieren''' = beenden; ein Vorgang hört auf zu arbeiten. Siehe auch: [[Terminierung]]&lt;br /&gt;
&lt;br /&gt;
*'''Übergabe''' = Aufrufen einer [[Methode]] mit angegebenen Werten. Werte werden an Methoden übergeben, die diese benutzen, um ein Unterprogramm auszuführen.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Basisvokabular&amp;diff=2207</id>
		<title>Basisvokabular</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Basisvokabular&amp;diff=2207"/>
				<updated>2017-10-24T09:40:56Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Auflistung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auf dieser Seite werden Begriffe erklärt, die häufig in den Artikeln verwendet werden und zum '''Basisvokabular der Informatik''' gehören. Es handelt sich hierbei größtenteils um Begriffe, die keinen eigenen Artikel haben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ergänzungen sind erwünscht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Auflistung=&lt;br /&gt;
&lt;br /&gt;
*'''äquivalent'''=austauschbar; gleichwertig; eindeutig einander zugeordnet. Das Symbol dafür ist &amp;amp;equiv;. In der [[Boolesche Algebra|Booleschen Algebra]] kann man Äquivalenz daran erkennen, dass zwei Aussagen in jeder möglichen Situation (d.h. Belegung der Variablen) den gleichen Wahrheitsgehalt haben. &lt;br /&gt;
&lt;br /&gt;
*'''arbiträr''' = willkürlich&lt;br /&gt;
&lt;br /&gt;
*'''Ausgabe''' = Text, Bild oder Ton, der dem Benutzer durch ein Programm präsentiert wird. Siehe auch: [[Algorithmus#Rückgabe und Ausgabe | Rückgabe und Ausgabe]]&lt;br /&gt;
&lt;br /&gt;
*'''Deklaration''': Bei der Deklaration wird festgelegt, '''was''' etwas ist. Siehe: [[Deklaration]]&lt;br /&gt;
&lt;br /&gt;
*'''endlich''': nicht unendlich, also begrenzt&lt;br /&gt;
&lt;br /&gt;
*'''Implementierung''': Die Implementierung sagt aus, '''wie''' etwas funktioniert. Sie ist sozusagen der '''Inhalt''' von z.B. einer [[Methode]].&lt;br /&gt;
&lt;br /&gt;
*'''Initialisierung''': Bei der Initialisierung wird festgelegt, welchen '''Wert''' etwas zu Beginn hat, z.B. bei [[Variablen]].&lt;br /&gt;
&lt;br /&gt;
*'''Instanziierung''': Die Instanziierung beschreibt das Erstellen eines neuen [[Objekt]]es anhand des von einer [[Klasse]] vorgegebenen Bauplans. Man erstellt also eine Instanz der Klasse.&lt;br /&gt;
&lt;br /&gt;
*'''Interpretation''': Eine Beschreibung, wie ein Datensatz zu verstehen (interpretieren) ist. Zwei [[double]] können z.B. die Koordinaten eines Punktes beschreiben oder die Maße eines Rechtecks.&lt;br /&gt;
&lt;br /&gt;
*'''Iteration''' = Durchlauf, wird vor allem im Zusammenhang mit [[Schleifen]] verwendet.&lt;br /&gt;
&lt;br /&gt;
*'''Konsole''': Ein- und Ausgabegerät, gewöhnlich für Text. Wird heutzutage meistens von der [[IDE]] emuliert anstatt direkt benutzt zu werden, jedoch sind Komandozeileninterpreter wie Windows &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt; oder Linux &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; als Konsole zu verstehen. &lt;br /&gt;
&lt;br /&gt;
*'''Maschine''': Dieser Begriff umfasst alle nichtmenschlichen Rechner.&lt;br /&gt;
&lt;br /&gt;
*'''Modulo''': Modulo ist ein [[Operator]], der den Rest einer Division berechnet.&lt;br /&gt;
&lt;br /&gt;
*'''Rückgabe''' = Ergebnis der Berechnung einer Methode. Siehe: [[Methode#Rückgabe|Rückgabe]]&lt;br /&gt;
&lt;br /&gt;
*'''terminieren''' = beenden; ein Vorgang hört auf zu arbeiten. Siehe auch: [[Terminierung]]&lt;br /&gt;
&lt;br /&gt;
*'''Übergabe''' = Aufrufen einer [[Methode]] mit angegebenen Werten. Werte werden an Methoden übergeben, die diese benutzen, um ein Unterprogramm auszuführen.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Basisvokabular&amp;diff=2206</id>
		<title>Basisvokabular</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Basisvokabular&amp;diff=2206"/>
				<updated>2017-10-24T09:40:22Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auf dieser Seite werden Begriffe erklärt, die häufig in den Artikeln verwendet werden und zum '''Basisvokabular der Informatik''' gehören. Es handelt sich hierbei größtenteils um Begriffe, die keinen eigenen Artikel haben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ergänzungen sind erwünscht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Auflistung=&lt;br /&gt;
&lt;br /&gt;
*'''äquivalent'''=austauschbar; gleichwertig; eindeutig einander zugeordnet. Das Symbol dafür ist &amp;amp;equiv;. In der [[Boolesche Algebra|Booleschen Algebra]] kann man Äquivalenz daran erkennen, dass zwei Aussagen in jeder möglichen Situation (d.h. Belegung der Variablen) den gleichen Wahrheitsgehalt haben. &lt;br /&gt;
&lt;br /&gt;
*'''arbiträr''' = willkürlich&lt;br /&gt;
&lt;br /&gt;
*'''Ausgabe''' = Text, Bild oder Ton, der dem Benutzer durch ein Programm präsentiert wird. Siehe auch: [[Algorithmus#Rückgabe und Ausgabe | Rückgabe und Ausgabe]]&lt;br /&gt;
&lt;br /&gt;
*'''Deklaration''': Bei der Deklaration wird festgelegt, '''was''' etwas ist. Siehe: [[Deklaration]]&lt;br /&gt;
&lt;br /&gt;
*'''endlich''': nicht unendlich, also begrenzt&lt;br /&gt;
&lt;br /&gt;
*'''Implementierung''': Die Implementierung sagt aus, '''wie''' etwas funktioniert. Sie ist sozusagen der '''Inhalt''' von z.B. einer [[Methode]].&lt;br /&gt;
&lt;br /&gt;
*'''Initialisierung''': Bei der Initialisierung wird festgelegt, welchen '''Wert''' etwas zu Beginn hat, z.B. bei [[Variablen]].&lt;br /&gt;
&lt;br /&gt;
*'''Instanziierung''': Die Instanziierung beschreibt das Erstellen eines neuen [[Objekt]]es anhand des von einer [[Klasse]] vorgegebenen Bauplans. Man erstellt also eine Instanz der Klasse.&lt;br /&gt;
&lt;br /&gt;
*'''Interpretation''': Eine Beschreibung, wie ein Datensatz zu verstehen (interpretieren) ist. Zwei [[double]] können z.B. die Koordinaten eines Punktes beschreiben oder die Maße eines Rechtecks.&lt;br /&gt;
&lt;br /&gt;
*'''Iteration''' = Durchlauf, wird vor allem im Zusammenhang mit [[Schleifen]] verwendet.&lt;br /&gt;
&lt;br /&gt;
*'''Konsole''': Ein- und Ausgabegerät, gewöhnlich für Text. Wird heutzutage meistens von der [[IDE]] emuliert anstatt direkt benutzt zu werden, jedoch sind Komandozeileninterpreter wie Windows ``cmd`` oder Linux ``bash`` als Konsole zu verstehen. &lt;br /&gt;
&lt;br /&gt;
*'''Maschine''': Dieser Begriff umfasst alle nichtmenschlichen Rechner.&lt;br /&gt;
&lt;br /&gt;
*'''Modulo''': Modulo ist ein [[Operator]], der den Rest einer Division berechnet.&lt;br /&gt;
&lt;br /&gt;
*'''Rückgabe''' = Ergebnis der Berechnung einer Methode. Siehe: [[Methode#Rückgabe|Rückgabe]]&lt;br /&gt;
&lt;br /&gt;
*'''terminieren''' = beenden; ein Vorgang hört auf zu arbeiten. Siehe auch: [[Terminierung]]&lt;br /&gt;
&lt;br /&gt;
*'''Übergabe''' = Aufrufen einer [[Methode]] mit angegebenen Werten. Werte werden an Methoden übergeben, die diese benutzen, um ein Unterprogramm auszuführen.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Syntax_und_Semantik&amp;diff=2026</id>
		<title>Syntax und Semantik</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Syntax_und_Semantik&amp;diff=2026"/>
				<updated>2017-02-17T23:33:57Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Semantik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Begriffe '''Syntax''' und '''Semantik''' bezeichnen in unserer Veranstaltung des Zusammenhang zwischen dem notierten [[Quellcode]] und dem daraus resultierenden Verhalten des [[Programm]]s.&lt;br /&gt;
&lt;br /&gt;
=Syntax=&lt;br /&gt;
&lt;br /&gt;
'''Syntax''' bezeichnet die Struktur oder '''Grammatik''' des Programms. Die erste Herausforderung beim Lernen einer neuen [[Programmiersprache]] ist es, '''syntaktisch korrekte''' Programme zu formulieren. Zu einer Programmiersprache gehören viele Funktionalitäten. Für die Veranstaltung und das grundlegende Verständnis der Syntax ist jedoch nur die Basis relevant.&lt;br /&gt;
&lt;br /&gt;
=Semantik=&lt;br /&gt;
&lt;br /&gt;
'''Semantik''' meint die '''Bedeutung''' oder Ausführung eines Programms. Es ist einfacher, ein syntaktisch korrektes Programm zu schreiben, als eines, das exakt das macht, was man möchte. Dazu muss man verstanden haben, welche syntaktischen Elemente eines Programms welchen Effekt auf den Programmzustand haben. Dann kann man aus den verschiedenen syntaktischen Elementen die gewünschte Semantik zusammensetzen.&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Techniken, um die '''Semantik''' eines Programms zu beschreiben:&lt;br /&gt;
&lt;br /&gt;
Bei der '''operationalen Semantik''' wird ein Programm in [[Elementaroperationen]] und Programmzustände unterteilt. Dann wird schrittweise beschrieben, welche Auswirkungen die Elementaroperationen auf den Zustand haben und in welcher Situation welche Elementaroperation ausgeführt wird. Es geht also um die Beziehung zwischen Operation und Zustand. Diese Technik wird zum Beispiel für das Herstellen von [[Compiler]]n verwendet.&lt;br /&gt;
&lt;br /&gt;
Bei der '''denotationalen Semantik''' werden mathematische Funktionen verwendet. Der Fokus liegt darauf, wie eine Eingabe einen Zustand verändert. Diese Semantik eignet sich besonders gut dazu, um herauszufinden, ob ein Programm wirklich genau das tut, was es machen soll.&lt;br /&gt;
&lt;br /&gt;
Bei der '''verbalen Semantik''' wird ein Programm, wie der Name schon sagt, verbal beschrieben. Dabei sollten die einzelnen Konzepte und Funktionalitäten einer Programmiersprache möglichst präzise erklärt werden. Diese Art der Beschreibung eignet sich vor allem dafür, den Umgang mit einer Programmiersprache zu lernen.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Eine syntaktisch korrekt formulierte [[Funktion]] wäre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void foo(){&lt;br /&gt;
    int bar = 10;&lt;br /&gt;
    System.out.println(&amp;quot;bar: &amp;quot;+bar);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ob eine Funktion, die ausschließlich den Text &amp;quot;bar: 10&amp;quot; ausgibt (Semantik), nützlich ist, ist jedoch eine andere Frage.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Variable&amp;diff=2006</id>
		<title>Variable</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Variable&amp;diff=2006"/>
				<updated>2017-02-03T15:45:34Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Erläuterung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine '''Variable''' repräsentiert einen Bereich im Speicher des Rechners, um Zugang zu diesem Speicher zu erhalten und diesen manipulieren zu können.&lt;br /&gt;
&lt;br /&gt;
Variablen werden in den meisten [[Streng getypte Programmiersprachen|streng getypten]] Programmiersprachen mit einem [[Datentyp]] und einem [[Identifikator|Namen]] versehen.&lt;br /&gt;
&lt;br /&gt;
= Variablen in Java =&lt;br /&gt;
&lt;br /&gt;
In Java gibt es zwei Formen von Variablen: Variablen mit [[Primitiver Datentyp|primitivem Datentyp]] und Variablen mit [[Objekt|Objektdatentyp]].&lt;br /&gt;
&lt;br /&gt;
Variablen mit '''primitivem Datentyp''' repräsentieren einen direkten Zugriff auf einen Speicherbereich der Größe des primitiven Datentyps. Diese Variablen werden als Parameter in einem Methodenaufruf ausschließlich über [[Call by Value]] übergeben. Das heißt, der Speicherbereich selbst wird nicht an den Methodenaufruf übergeben, sondern dessen Inhalt.&lt;br /&gt;
&lt;br /&gt;
Variablen mit einem '''Objektdatentyp''' repräsentieren eine Referenz auf ein Objekt, also lediglich einen virtuellen Zeiger auf einen Speicherbereich. Wird eine Funktion mit einem Objekt als Parameter aufgerufen, wird entsprechend nur die Referenz auf das Objekt als Parameter übergeben. Das bedeutet wiederum, dass Änderungen an einem Objekt von jedem Ort im Programmcode Einfluss auf das Objekt selbst haben. Diese Funktionalität wird [[Call by Reference]] genannt.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Kategorisierung von Variablen findet anhand ihrer '''Verwendung''' statt:&lt;br /&gt;
&lt;br /&gt;
#Variablen können als '''lokale Variable''' in einem Funktions-/Methodenaufruf verwendet werden.&lt;br /&gt;
#Variablen können als '''Attribut''' eines Objektes verwendet werden.&lt;br /&gt;
#Variablen können als '''statisches Klassenattribut''' verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Variablen müssen in Java vor ihrer Verwendung '''deklariert''' werden. Bevor der Wert einer Variablen verwendet werden kann, muss sie zudem durch eine [[Zuweisung]] '''initialisiert''' werden.&lt;br /&gt;
&lt;br /&gt;
= Deklaration =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Durch die '''Deklaration''' einer Variablen wird der Bedarf an Speicher in einem [[Programm]] signalisiert und dieser reserviert. Um eine Variable zu deklarieren, muss zuerst der Typ angegeben werden. Danach wird die Variable benannt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Typ Variablenname;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Deklaration]]&lt;br /&gt;
&lt;br /&gt;
==Beispiel ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Einfache Deklaration&amp;quot;&amp;gt;int number;&amp;lt;/source&amp;gt;&lt;br /&gt;
Dies deklariert eine Variable vom [[Datentyp|Typ]] &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; mit dem Namen &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;. Entsprechend werden 32 Bit Speicher reserviert. Diese stehen nun über den Namen der Variablen zur Verfügung und werden stets als eine vorzeichenbehaftete Ganzzahl interpretiert.&lt;br /&gt;
&lt;br /&gt;
= Initialisierung =&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
Bevor man den '''Wert''' einer Variablen verwenden kann, muss sie zuerst irgendwo im Programm mit einem Wert '''initialisiert''' werden. Dies geschieht durch eine [[Zuweisung]]. Einer Variablen kann bereits bei der Deklaration ein Wert zugewiesen werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Typ Variablenname = Initialwert;&lt;br /&gt;
&lt;br /&gt;
Variablenname = Initialwert;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Java&amp;quot; title=&amp;quot;Deklaration mit Initialisierung&amp;quot;&amp;gt;&lt;br /&gt;
double value = 5.0;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dies deklariert eine Variable vom Typ &amp;lt;code&amp;gt;double&amp;lt;/code&amp;gt; mit dem Namen &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;. Sie wird mit dem Wert &amp;lt;code&amp;gt;5.0&amp;lt;/code&amp;gt; initialisiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;Java&amp;quot; title=&amp;quot;Initialisierung nach Deklaration&amp;quot;&amp;gt;&lt;br /&gt;
int number;&lt;br /&gt;
[...]&lt;br /&gt;
number = 42;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dies deklariert erneut eine Variable vom Typ &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; mit dem Namen &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;. Sie wird erst in der nächsten Zeile mit dem Wert &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt; initialisiert. Zwischen Deklaration und Initialisierung darf beliebiger anderer Code ausgeführt werden, solange dieser die Variable &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt; dabei nicht verwendet.&lt;br /&gt;
&lt;br /&gt;
Wird eine primitive Variable als Attribut verwendet, so wird sie bei [[Instanziierung]] des [[Objekt | Objektes]] mit 0 initialisiert. Trifft dies auf eine Objektvariable zu, wird diese als [[null]] initialisiert. Dieses Verhalten kann man durch den [[Konstruktor]] oder durch Angabe eines Standardwertes bei der Deklaration als Attribut verändern.&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
== Lokale Variable ==&lt;br /&gt;
&lt;br /&gt;
===Erläuterung===&lt;br /&gt;
&lt;br /&gt;
Eine Variable wird '''lokal''' genannt, wenn sie innerhalb einer [[Methode]] deklariert wird. Dies gilt auch für die [[Methode#Parameter|Parametervariablen]] einer Methode.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
    int value = 3;&lt;br /&gt;
    int iterations = 5;&lt;br /&gt;
    for(int i = 0; i &amp;lt; iterations; i++){&lt;br /&gt;
        value += value;&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(value);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel sind die Variablen &amp;lt;code&amp;gt;args&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;iterations&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; lokale Variablen. Sie existieren ausschließlich im Aufruf von &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; und können nur hier verändert oder verwendet werden.&lt;br /&gt;
&lt;br /&gt;
== Attributvariable ==&lt;br /&gt;
&lt;br /&gt;
===Erläuterung===&lt;br /&gt;
&lt;br /&gt;
Eine Variable wird '''Attribut''' genannt, wenn sie innerhalb einer [[Klasse]] deklariert wird.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Cuboid {&lt;br /&gt;
    private double width;&lt;br /&gt;
    private double height;&lt;br /&gt;
    private double length;&lt;br /&gt;
    [...]&lt;br /&gt;
    public void setWidth(double w){&lt;br /&gt;
        this.width = w;&lt;br /&gt;
    }&lt;br /&gt;
    [...]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel sind die Variablen &amp;lt;code&amp;gt;width&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;height&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;length&amp;lt;/code&amp;gt; Attributvariablen. Die Variable &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; ist hingegen eine lokale Variable der Methode &amp;lt;code&amp;gt;setWidth&amp;lt;/code&amp;gt;. Die Attributvariablen existieren für jede Objektinstanz der Klasse einmal und sind unabhängig von den Werten der Attributvariablen anderer Objekte der gleichen Klasse.&lt;br /&gt;
&lt;br /&gt;
Attribute können auch einen Wert bei der Deklaration zugewiesen bekommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Sphere {&lt;br /&gt;
    private double radius = 1;&lt;br /&gt;
    [...]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute eines Objektes werden dann bei der Instanziierung mit diesem Wert instanziiert. Die Attribute haben ihren so definierten initialen Wert bereits vor dem Aufruf der Programmroutine des [[Konstruktor]]s.&lt;br /&gt;
&lt;br /&gt;
== Statische Klassenvariable ==&lt;br /&gt;
&lt;br /&gt;
===Erläuterung===&lt;br /&gt;
&lt;br /&gt;
Eine Variable wird '''Klassenvariable''' oder '''Klassenattribut''' genannt, wenn sie innerhalb einer Klasse [[static|statisch]] deklariert wird. &lt;br /&gt;
&lt;br /&gt;
Eine statische Klassenvariable wird für die Klasse angelegt und ist daher innerhalb der gesamten Klasse sichtbar. Ihr Wert wird nicht für jede Instanz der Klasse vermerkt, sondern für die Klasse selbst. Deshalb sind veränderbare, das heißt nicht als [[final]] deklarierte, Klassenvariablen ein häufiger Grund für unerwünschte [[Nebeneffekt|Nebeneffekte]] und ungerne gesehen.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Sphere {&lt;br /&gt;
&lt;br /&gt;
    public static final double PI = 3.1415;&lt;br /&gt;
&lt;br /&gt;
    [...]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Zuweisung =&lt;br /&gt;
Eine '''Zuweisung''' ist eine spezielle Form der [[Anweisung]]. Sie weist dem Speicher, der durch eine Variable repräsentiert wird, einen neuen Wert zu.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: [[Zuweisung]]&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Datei:Venn_or.png&amp;diff=1853</id>
		<title>Datei:Venn or.png</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Datei:Venn_or.png&amp;diff=1853"/>
				<updated>2016-10-27T13:22:26Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hauptseite&amp;diff=1850</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hauptseite&amp;diff=1850"/>
				<updated>2016-10-21T21:22:25Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=mainpage_topbox&amp;gt;&lt;br /&gt;
&amp;lt;div id=mainpage_title&amp;gt;&lt;br /&gt;
&amp;lt;span&amp;gt;Willkommen im&amp;lt;/span&amp;gt; EINI-Wiki&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=mainpage_title_text&amp;gt;&lt;br /&gt;
Eine Wiki zur Veranstaltung &amp;quot;Einführung in die Informatik für Logistiker, Wirtschaftsmathematiker und -ingenieure&amp;quot; der TU Dortmund&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;border: solid 1px #AAA; width:100%; margin-top: 0.5em; margin-right: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box_head&amp;quot;&amp;gt;&lt;br /&gt;
Übersicht&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box_content&amp;quot; style=&amp;quot;margin:0 ; padding: 0;&amp;quot;&amp;gt;&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=100%&lt;br /&gt;
 |+ Themenübersicht&lt;br /&gt;
 ! Thema !! Vorlesung !! Inhalt&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | Rechensysteme &amp;amp; Datendarstellung&lt;br /&gt;
 | Vorlesung 1 (Kapitel 0)&lt;br /&gt;
 | Einführung und Organisation &lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 2 (Kapitel 1)&lt;br /&gt;
 | [[Dezimal- und Binärsystem|Dezimal- und Binärzahlen]], Darstellung von Zahlen, Darstellung von Zeichen, Darstellung logischer Werte, Umrechnung, Rechensysteme&lt;br /&gt;
 |-&lt;br /&gt;
 | Spezifikation - Algorithmus - Syntax &amp;amp; Semantik&lt;br /&gt;
 | Vorlesung 3 (Kapitel 2)&lt;br /&gt;
 | Entwurf, Spezifikation, [[Algorithmus]], [[Syntax und Semantik]]&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;3&amp;quot; | Kern imperativer Programmiersprachen&lt;br /&gt;
 | Vorlesung 4 (Kapitel 3.1)&lt;br /&gt;
 | [[Variable | Variablen]], [[Zuweisung|Zuweisungen]], [[Datentyp|primitive Datentypen]], [[Operator|Operatoren]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 5 (Kapitel 3.2)&lt;br /&gt;
 | [[Kontrollstrukturen]]: [[Sequenz|Sequenzen]], [[Block|Blöcke]], [[Fallunterscheidung]], [[Schleife|Schleifen]]: [[while]], [[do-while]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 6 (Kapitel 3.3)&lt;br /&gt;
 | [[Schleifen]]: [[for]], continue, break&lt;br /&gt;
 |-&lt;br /&gt;
 | Funktion - Prozedur - Methode - Rekursion&lt;br /&gt;
 | Vorlesung 7 (Kapitel 4)&lt;br /&gt;
 | [[Unterprogramm|Unterprogramme]], [[Funktion|Funktionen]], [[Funktion|Aufruf]], [[Rekursion]]&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | Arrays - Internes Sortieren - Rekursive Datenstrukturen&lt;br /&gt;
 | Vorlesung 8 (Kapitel 5.1)&lt;br /&gt;
 | [[Array|Arrays]], [[Sortieren|Internes Sortieren]], Rekursive Datenstrukturen ([[Baum|Binär-Baum]], [[Heap]])&lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 9 (Kapitel 5.2)&lt;br /&gt;
 | Abstrakte Datentypen am Bsp. [[Heap]],  Heapsort&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;1&amp;quot; | Objektorientierte Programmierung - Einführung&lt;br /&gt;
 | Vorlesung 10 (Kapitel 6)&lt;br /&gt;
 | Aufbau eines [[Java]]-[[Programm]]s, [[Klasse|Klassen]], [[Objekt|Objekte]], Details zu [[Konstruktor|Konstruktoren]], [[Referenz|Referenzen]], [[Garbage Collector|Garbage Collection]], Übergabe von [[Parameter|Parametern]], [[Attribut|Klassenattribute]]&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | Objektorientierte Programmierung - Vererbung&lt;br /&gt;
 | Vorlesung 11 (Kapitel 7)&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | [[Vererbung]], [[Attribut|Attribute]] &amp;amp; [[Methode|Methoden]]: [[Sichtbarkeit|Zugriffsrechte]], Überschreiben, Abstrakte Klassen/Methoden, Polymorphie&lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 12 (Kapitel 7)&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | Dynamische Datenstrukturen&lt;br /&gt;
 | Vorlesung 13 (Kapitel 8.1)&lt;br /&gt;
 | einfache [[Liste|Listen]], sortierte Liste, Doppelt verkettete Liste &lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 14 (Kapitel 8.2)&lt;br /&gt;
 | [[Baum#Suchbaum | Binärer Suchbaum]], Vollständige Induktion, Operationen in einem binärem Suchbaum, Durchlaufstrategien für einen binären Suchbaum&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=Wichtige Übersichtsseiten=&lt;br /&gt;
&lt;br /&gt;
* Unter [[Basisvokabular]] findet sich eine Liste mit in der Informatik häufig verwendeten Begriffen. Ergänzungen sind erwünscht.&lt;br /&gt;
&lt;br /&gt;
* Unter [[Schlüsselwort]] findet sich eine Liste mit allen Schlüsselwörtern in Java und weiterführenden Links.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;border: solid 1px #AAA; width:50%; margin-top: 0.5em; margin-left: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box_head&amp;quot;&amp;gt;&lt;br /&gt;
Glossar&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box_content&amp;quot;&amp;gt;&lt;br /&gt;
[[Glossar]]&lt;br /&gt;
[[Glossar_(alphabetisch)| Glossar (alphabetisch)]]&lt;br /&gt;
*[[Stack | Abarbeitung von Funktionsaufrufen]]&lt;br /&gt;
*[[Algorithmus]]&lt;br /&gt;
*[[Array]]&lt;br /&gt;
*[[Ausdruck]]&lt;br /&gt;
*[[Bit]]&lt;br /&gt;
*[[Dezimal-_und_Binärsystem | Binärzahlen]]&lt;br /&gt;
*[[Boolesche Algebra]]&lt;br /&gt;
*[[Boolean]]&lt;br /&gt;
*[[Block]]&lt;br /&gt;
*[[Alternative | Bedingte Anweisung]]&lt;br /&gt;
*[[Baum | binärer Baum]]&lt;br /&gt;
*[[Char]]&lt;br /&gt;
*[[call by value]]&lt;br /&gt;
*[[call by reference]]&lt;br /&gt;
*[[Darstellung natürlicher Zahlen]]&lt;br /&gt;
*[[Darstellung ganzer Zahlen]]&lt;br /&gt;
*[[Deklaration]]&lt;br /&gt;
*[[Datentyp]]&lt;br /&gt;
*[[do-while | do-while-Schleife]]&lt;br /&gt;
*[[Datenstruktur]]&lt;br /&gt;
*[[Dynamische Datenstruktur]]&lt;br /&gt;
*[[Ein- und Ausgabe]]&lt;br /&gt;
*[[Elementaroperationen]]&lt;br /&gt;
*[[Einfache Grundoperationen]]&lt;br /&gt;
*[[Festpunktzahlen]]&lt;br /&gt;
*[[Float]]&lt;br /&gt;
*[[for | for-Schleife]]&lt;br /&gt;
*[[Funktion]]&lt;br /&gt;
*[[Gleitpunktzahlen]]&lt;br /&gt;
*[[globale Variablen]]&lt;br /&gt;
*[[Hexadezimalzahlen]]&lt;br /&gt;
*[[Heap]]&lt;br /&gt;
*[[Initialisierung]]&lt;br /&gt;
*[[Integer]]&lt;br /&gt;
*[[Schleife | Iteration]]&lt;br /&gt;
*[[Objekt | Instanz]]&lt;br /&gt;
*[[Java]]&lt;br /&gt;
*[[Kurzformen]]&lt;br /&gt;
*[[Kontrollstruktur]]&lt;br /&gt;
*[[Klasse]]&lt;br /&gt;
*[[Liste | lineare Liste]]&lt;br /&gt;
*[[Methode]]&lt;br /&gt;
*[[main | main-Methode]]&lt;br /&gt;
*[[new | new-Operator]]&lt;br /&gt;
*[[null]]&lt;br /&gt;
*[[Objektorientierte Programmierung]]&lt;br /&gt;
*[[Operation]]&lt;br /&gt;
*[[Objekt]]&lt;br /&gt;
*[[Programmierung]]&lt;br /&gt;
*[[Primitive Datentypen]]&lt;br /&gt;
*[[Operatoren#Priotitäten von Operatoren | Priotitäten von Operatoren]]&lt;br /&gt;
*[[Parameter]]&lt;br /&gt;
*[[public]]&lt;br /&gt;
*[[private]]&lt;br /&gt;
*[[protected]]&lt;br /&gt;
*[[Punkt-Operator]]&lt;br /&gt;
*[[Rechensysteme]]&lt;br /&gt;
*[[Rückgabewert]]&lt;br /&gt;
*[[Rekursive Funktion]]&lt;br /&gt;
*[[Referenzen]]&lt;br /&gt;
*[[Syntax]]&lt;br /&gt;
*[[Semantik]]&lt;br /&gt;
*[[Sortieren]]&lt;br /&gt;
*[[Suchen]]&lt;br /&gt;
*[[Syntaxdiagramm]]&lt;br /&gt;
*[[switch]]&lt;br /&gt;
*[[Schleife]]&lt;br /&gt;
*[[static]]&lt;br /&gt;
*[[Schlüsselwörter]]&lt;br /&gt;
*[[Teile und herrsche]]&lt;br /&gt;
*[[Terminierung]]&lt;br /&gt;
*[[this]]&lt;br /&gt;
*[[Variable]]&lt;br /&gt;
*[[Vererbung]]&lt;br /&gt;
*[[while | while-Schleife]]&lt;br /&gt;
*[[Zweierkomplement]]&lt;br /&gt;
*[[Zuweisung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Betriebssystem&amp;diff=1842</id>
		<title>Betriebssystem</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Betriebssystem&amp;diff=1842"/>
				<updated>2016-10-07T19:31:04Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: Die Seite wurde neu angelegt: „Ein '''Betriebssystem''' ist ein Stück Software, welches für die Verwaltung eines Rechners geschrieben wurde.  Die genaue Funkionsweise oder Implementierung…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein '''Betriebssystem''' ist ein Stück Software, welches für die Verwaltung eines Rechners geschrieben wurde.&lt;br /&gt;
&lt;br /&gt;
Die genaue Funkionsweise oder Implementierung eines Betriebssystems ist '''nicht''' Teil der Veranstaltung.&lt;br /&gt;
&lt;br /&gt;
Ein Betriebssystem übernimmt verschiedene verwaltende Aufgaben an einem Rechner vor, wie das Ansteuern von Geräten, die Kommunikation mit anderen Rechnern in einem Netzwerk und im speziellen das Planen von Prozessen.&lt;br /&gt;
&lt;br /&gt;
Diese Aufgaben sind meistens sehr Komplex und besitzen viele Fehlerquellen und Stolperfallen bei der Entwicklung, wodurch meist auf bereits funktionierende und bekannte Systeme gesetzt wird. Betriebssysteme stellen zudem vereinfachte Schnittstellen zur Kommunikation mit an den Rechner angeschlossenen Geräten bereit, wie Maus, Tastatur, Bildschirm, Netzwerkkarten etc. . Dies geschieht zumeist in der Form von Standardbibliotheken in der Programmiersprache, in der das Betriebssystem implementiert ist.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Value&amp;diff=1835</id>
		<title>Call by Value</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Value&amp;diff=1835"/>
				<updated>2016-09-26T17:00:40Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Call by Value''' bezeichnet die Übergabe von [[Parameter]]n von [[Primitiver Datentyp|primitiven Datentypen]]. &lt;br /&gt;
&lt;br /&gt;
Bei [[Variablen]] mit [[Objekt|Objektdatentyp]] wird hingegen der [[Call by Reference]] verwendet.&lt;br /&gt;
&lt;br /&gt;
Der  '''Call by Value''' funktioniert folgendermaßen: Beim Aufruf einer [[Methode]] wird der '''Wert''' einer Variablen zuerst aufgelöst und dann direkt an die aufgerufene Methode übergeben. Es wird also eine '''Kopie des Wertes''' der Variablen übergeben. &lt;br /&gt;
&lt;br /&gt;
Da die '''Parameter''' einer Funktion [[Variable#Lokale Variable|lokal]] sind, sind diese unabhängig von denen, die beim Aufruf der Methode verwendet wurden. Innerhalb einer aufgerufenen Methode haben Änderungen an den [[Parametervariable|Parametervariablen]] demnach '''keinen Einfluss''' auf die Werte der übergebenen Variablen.&lt;br /&gt;
&lt;br /&gt;
= Problematik =&lt;br /&gt;
&lt;br /&gt;
Ein mangelndes Verständnis der '''Call by Value'''-Funktionalität von Methodenaufrufen führt häufig zu dem Fehler, dass ein Programmierer eine Funktion, die eine Berechnung durchführt, formuliert und erwartet, dass die übergebene Variable durch den Aufruf ihren Wert ändert.&lt;br /&gt;
&lt;br /&gt;
Da jedoch durch '''Call by Value''' nur der Wert der Variablen, und nicht eine Referenz auf den Speicher der Variablen übergeben wird, hat diese Berechnung keinen Einfluss auf die Variable der aufrufenden Funktion. Dieser Fehler kann meistens dadurch behoben werden, dass der Wert der Variablen durch die Rückgabe der aufgerufenen Funktion ersetzt wird und die aufgerufene Funktion das Ergebnis ihrer Berechnung ''explizit'' zurück gibt (siehe Beispiel, unterer Code).&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Immer wenn eine Methode aufgerufen wird, werden übergebene Variablen zuerst aufgelöst und dann der resultierende Wert übergeben. Nehmen wir als Beispiel folgende zwei [[static | statische]] Methoden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
    int i = 5;&lt;br /&gt;
    callee(i);&lt;br /&gt;
    System.out.println(i);&lt;br /&gt;
}&lt;br /&gt;
public static void callee(int a){&lt;br /&gt;
    a = a + 5;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der unerfahrene Programmierer, der diesen Code schreiben mag, wird hier denken, die Ausgabe des Programmes sei '''10'''. Tatsächlich ist sie jedoch '''5'''.&lt;br /&gt;
&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;caller()&amp;lt;/code&amp;gt; deklariert eine [[int]]-Variable &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; mit dem Wert 5. Beim Aufruf von &amp;lt;code&amp;gt;callee(int a)&amp;lt;/code&amp;gt; wird die übergebene Variable &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; nun zuerst zum Wert 5 aufgelöst. Dann wird die Funktion &amp;lt;code&amp;gt;callee(int a)&amp;lt;/code&amp;gt; mit dem Wert 5 aufgerufen. Der Aufruf &amp;lt;code&amp;gt;callee(i)&amp;lt;/code&amp;gt; ist also in diesem Falle nicht zu unterscheiden von einem Aufruf &amp;lt;code&amp;gt;callee(5)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Eine Funktion, die primitive Daten als Parameter erwartet, kann mit konstanten Werten wie &amp;lt;code&amp;gt;callee(5)&amp;lt;/code&amp;gt; aufgerufen werden. Deshalb kann in diesem Fall ein Aufruf mit 5 keinen Einfluss auf die 5 haben, da der Ausdruck &amp;quot;5&amp;quot; konstant ist.&lt;br /&gt;
&lt;br /&gt;
Was tatsächlich passiert, ist, dass beim Aufruf einer Funktion ein neuer [[Stack#Stackframe | Stackframe]] für diesen Aufruf auf den [[Stack]] gelegt wird und die lokalen Parametervariablen innerhalb dieses Stackframes mit den übergebenen Werten initialisiert werden.&lt;br /&gt;
&lt;br /&gt;
Möchte man im Beispiel oben den Wert der Variablen &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;  außerhalb der Funktion ändern, so wird man enttäuscht. Dies ist in [[Java]] mit primitiven Daten nicht möglich. Man benötigt eine Funktion mit einer [[Rückgabe]], das heißt die Funktion muss eine Eingabe erhalten, etwas berechnen und das Ergebnis der Berechnung ''explizit'' zurück geben. Der zurückgegebene Wert muss dann der Variablen als neuer Wert zugewiesen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
    int i = 5;&lt;br /&gt;
    i = callee(i);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static int callee(int a){&lt;br /&gt;
    return a + 5;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Methode&amp;diff=1832</id>
		<title>Methode</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Methode&amp;diff=1832"/>
				<updated>2016-09-26T16:56:51Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Parameter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine '''Methode''' definiert ein (Teil-)Programm.&lt;br /&gt;
&lt;br /&gt;
=Unterscheidung Methode und Funktion=&lt;br /&gt;
&lt;br /&gt;
Üblicherweise wird eine Methode von einer '''Funktion''' unterschieden: Eine Methode wird auf einem [[Objekt]] ausgeführt, eine Funktion wird nach Belieben aufgerufen. Bei der Deklaration unterscheidet man zwischen Methode und Funktion nur durch den [[Modifikator]] [[static]]. &lt;br /&gt;
&lt;br /&gt;
Eine Funktion wird im '''statischen Kontext''' der [[Klasse]] ausgeführt und hat daher nur Zugriff auf Klassenattribute und lokale Variablen, während eine Methode zusätzlich Zugriff auf Attribute der '''Objektinstanz''' hat.&lt;br /&gt;
&lt;br /&gt;
= Syntaxdiagramm =&lt;br /&gt;
&lt;br /&gt;
[[Datei:method_declaration.png]]&lt;br /&gt;
&lt;br /&gt;
= Deklaration =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Eine (statische) Methode wird innerhalb des Klassenrumpfes mit Angabe der [[Modifikator]]en (''visibility'' und ''functional modifier''), des [[Datentyp|Rückgabetyps]] (''primitive type'' oder ''identifier'') und des Namens (''identifier'') deklariert. Darauf folgen in runden Klammern die Parameter. Danach kommt der eigentliche Rumpf der Methode innerhalb von geschweiften Klammern in Form eines [[Block | Blocks]]. &lt;br /&gt;
&lt;br /&gt;
Wird der Modifikator [[abstract]] verwendet, so wird nur die [[Signatur]] der Methode, nicht aber ihr Rumpf angegeben. Die Deklaration wird mit einem Semikolon abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Beispiel 1&amp;quot;&amp;gt;&lt;br /&gt;
private static int foo(int bar){&lt;br /&gt;
    // ... //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist eine [[privat]]e, [[statisch]]e Methode, die einen [[int]] berechnet, [[foo]] heißt und einen '''int''' namens [[bar]] als Parameter erwartet. Die Methode benötigt eine Implementierung, die hier aber nicht weiter relevant ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Beispiel 2&amp;quot;&amp;gt;&lt;br /&gt;
public abstract double bar(double foo);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist eine [[öffentlich]]e, [[abstrakt]]e Methode, die einen [[double]] berechnet, '''bar''' heißt und einen '''double''' namens '''foo''' als Parameter erwartet. Dem Methodenkopf folgt keine Implementierung, da sie als abstrakt deklariert ist und von einer [[Vererbung | erbenden Klasse]] implementiert werden soll.&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Die '''Parameter''' einer Methode sind [[Variable]]n, deren Werte beim '''Aufruf''' der Methode festgelegt werden. Ein '''Parameter''' ist daher immer mit einem Wert initialisiert. Methoden haben nur Zugriff auf Variablen, die für sie sichtbar sind: Dies sind zu Beginn des Aufrufs nur die '''Parameter''' der Methode und gegebenenfalls Attribute des Objektes, auf dem die Methode aufgerufen wurde. Die Parameter der Methode gehören daher zu den [[Variable#Lokale Variable|lokalen Variablen]] der Methode. Die Übergabe von '''Parametern''' geschieht per [[Call by Value]] bei [[primitiver Datentyp | primitiven Datentypen]] und per [[Call by Reference]] bei Objekten.&lt;br /&gt;
&lt;br /&gt;
= Organisation =&lt;br /&gt;
&lt;br /&gt;
Funktionen und Methoden werden hauptsächlich deklariert, um den Quellcode zu strukturieren. Es bietet sich immer an, häufig verwendete Codefragmente als eigene Funktion auszulagern.&lt;br /&gt;
&lt;br /&gt;
Die Funktionalität eines Objektes sollte durch seine verfügbaren Methoden repräsentiert werden. Diese Funktionalitäten sollten relativ einfach formulierbar sein (frei nach dem Motto &amp;quot;Do one thing, and do it well!&amp;quot;&amp;lt;ref&amp;gt;Unix Philosophy&amp;lt;/ref&amp;gt;). Meistens beinhalten diese insbesondere die Fähigkeit, Attribute des Objektes zu manipulieren oder in Abhängigkeit von diesen spezielle Aufgaben zu erfüllen.&lt;br /&gt;
&lt;br /&gt;
= Statisch vs. nicht statisch =&lt;br /&gt;
&lt;br /&gt;
Ein [[Java]]-Programm beginnt immer in der [[main]]-Methode im '''statischen''' Kontext. Das heißt die Ausführung des Programms findet nicht innerhalb einer Instanz eines [[Objekt|Objektes]] statt.&lt;br /&gt;
&lt;br /&gt;
Wird auf einem Objekt eine Methode ausgeführt, wechselt das Programm in einen '''nicht statischen''' Kontext, in dem die Ausführung des Programms abhängig vom Zustand des Objektes ist, auf dem die Methode ausgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Innerhalb einer Klasse selbst können aus einem statischen Kontext heraus keine nicht-statischen Methoden aufgerufen oder nicht-statische Attribute manipuliert werden; es ist kein Objekt vorhanden, dass dies machen könnte. Möchte man es trotzdem tun, so muss man aus dem statischen Kontext heraus eine Objektinstanz erstellen und auf dem erstellen Objekt die gewünschte Methode aufrufen. In den meisten Fällen ergibt das jedoch für den Ablauf des Programms keinen Sinn.&lt;br /&gt;
&lt;br /&gt;
In der '''Praxis''' möchte man in der [[Objektorientierte Programmierung|'''objektorientierten Programmierung''']] den Ablauf eines Programms so schnell wie möglich in einen an ein Objekt gebundenen, nicht-statischen Kontext überführen und, außer in Spezialfällen&amp;lt;ref&amp;gt;Verwendung von hilfreichen Funktionen, die keinen Objektzustand benötigen und keinen neuen erzeugen, wie z.B. mathematische Funktionen wie &amp;lt;code&amp;gt;cos&amp;lt;/code&amp;gt;. Diese berechnen meist eine einfache Funktion und geben einen Wert zurück, ohne den Zustand des Programmes in irgendeiner Weise zu beeinflussen.&amp;lt;/ref&amp;gt;, in diesem verbleiben.&lt;br /&gt;
&lt;br /&gt;
= Rückgabe =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Der von einer Methode berechnete Wert wird als ihr '''zurückgegebener Wert''' bezeichnet. Der Programmfluss kehrt sozusagen nach dem Aufruf der Methode mit ihrem Wert in die Programmzeile zurück, in der sie aufgerufen wurde.&lt;br /&gt;
&lt;br /&gt;
Im Quellcode wird das '''Ergebnis''' der Berechnung mit dem [[Schlüsselwort]] '''return''' (engl. ''zurückgeben/zurückkehren'') gekennzeichnet. Hinter dem Schlüsselwort wird der Term notiert, der das Ergebnis beschreiben soll.&lt;br /&gt;
&lt;br /&gt;
Egal auf welche Art und Weise eine Methode terminiert, als letzte Anweisung muss ein Wert zurückgegeben werden. Das heißt, die letzte Anweisung muss immer ein '''return''' sein. Ansonsten ist die Methode unvollständig und wird vom Compiler nicht akzeptiert.&lt;br /&gt;
&lt;br /&gt;
Die einzige Ausnahme hierzu sind Methoden mit dem '''Rückgabetyp''' [[void]]. Sie werden auch häufig als '''Prozeduren''' bezeichnet. Prozeduren berechnen keine Ergebnisse und müssen daher auch keine Werte zurückgeben. Mit einem einzelnen '''return''' als Anweisung kann die Ausführung der Prozedur jedoch vor Erreichen der letzten Anweisung beendet werden und zum Aufrufer zurückkehren.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Methode mit diesem Rückgabetyp ist die [[main]]-Methode. &lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Normale Rückgabe&amp;quot;&amp;gt;&lt;br /&gt;
public int average(int x, int y){&lt;br /&gt;
    return (x + y) / 2; // Gibt das Ergebnis zurück.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Vorzeitiger Abbruch&amp;quot;&amp;gt;&lt;br /&gt;
public void printIfPositive(int x){&lt;br /&gt;
    if(x &amp;lt; 0) return; // Bricht die Ausführung der Prozedur vorzeitig ab, wenn x kleiner 0 ist.&lt;br /&gt;
    System.out.println(x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Negativbeispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Soll zwei Zahlen miteinander dividieren,&lt;br /&gt;
 * solange der Nenner y ungleich 0 ist.&lt;br /&gt;
 */&lt;br /&gt;
public double div(int x, int y){&lt;br /&gt;
    if(y != 0) return (double) x / (double) y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier liegt ein Syntaxfehler vor, da die Methode für den Fall ''y ist 0'' keinen Wert zurückgibt.&lt;br /&gt;
&lt;br /&gt;
= Fußnoten =&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Methode&amp;diff=1830</id>
		<title>Methode</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Methode&amp;diff=1830"/>
				<updated>2016-09-26T16:37:23Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Parameter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine '''Methode''' definiert ein (Teil-)Programm.&lt;br /&gt;
&lt;br /&gt;
=Unterscheidung Methode und Funktion=&lt;br /&gt;
&lt;br /&gt;
Üblicherweise wird eine Methode von einer '''Funktion''' unterschieden: Eine Methode wird auf einem [[Objekt]] ausgeführt, eine Funktion wird nach Belieben aufgerufen. Bei der Deklaration unterscheidet man zwischen Methode und Funktion nur durch den [[Modifikator]] [[static]]. &lt;br /&gt;
&lt;br /&gt;
Eine Funktion wird im '''statischen Kontext''' der [[Klasse]] ausgeführt und hat daher nur Zugriff auf Klassenattribute und lokale Variablen, während eine Methode zusätzlich Zugriff auf Attribute der '''Objektinstanz''' hat.&lt;br /&gt;
&lt;br /&gt;
= Syntaxdiagramm =&lt;br /&gt;
&lt;br /&gt;
[[Datei:method_declaration.png]]&lt;br /&gt;
&lt;br /&gt;
= Deklaration =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Eine (statische) Methode wird innerhalb des Klassenrumpfes mit Angabe der [[Modifikator]]en (''visibility'' und ''functional modifier''), des [[Datentyp|Rückgabetyps]] (''primitive type'' oder ''identifier'') und des Namens (''identifier'') deklariert. Darauf folgen in runden Klammern die Parameter. Danach kommt der eigentliche Rumpf der Methode innerhalb von geschweiften Klammern in Form eines [[Block | Blocks]]. &lt;br /&gt;
&lt;br /&gt;
Wird der Modifikator [[abstract]] verwendet, so wird nur die [[Signatur]] der Methode, nicht aber ihr Rumpf angegeben. Die Deklaration wird mit einem Semikolon abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Beispiel 1&amp;quot;&amp;gt;&lt;br /&gt;
private static int foo(int bar){&lt;br /&gt;
    // ... //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist eine [[privat]]e, [[statisch]]e Methode, die einen [[int]] berechnet, [[foo]] heißt und einen '''int''' namens [[bar]] als Parameter erwartet. Die Methode benötigt eine Implementierung, die hier aber nicht weiter relevant ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Beispiel 2&amp;quot;&amp;gt;&lt;br /&gt;
public abstract double bar(double foo);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist eine [[öffentlich]]e, [[abstrakt]]e Methode, die einen [[double]] berechnet, '''bar''' heißt und einen '''double''' namens '''foo''' als Parameter erwartet. Dem Methodenkopf folgt keine Implementierung, da sie als abstrakt deklariert ist und von einer [[Vererbung | erbenden Klasse]] implementiert werden soll.&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Die '''Parameter''' einer Methode sind [[Variable]]n, deren Werte beim '''Aufruf''' der Methode festgelegt werden. Ein '''Parameter''' ist daher immer mit einem Wert initialisiert. Methoden haben nur Zugriff auf Variablen, die für sie sichtbar sind: Dies sind zu Beginn des Aufrufs nur die Parameter der Methode und gegebenenfalls Attribute des Objektes, auf dem die Methode aufgerufen wurde. Die Parameter der Methode gehören daher zu den lokalen Variablen der Methode. Die Übergabe von '''Parametern''' geschieht per [[Call by Value]] bei [[primitiver Datentyp | primitiven Datentypen]] und per [[Call by Reference]] bei Objekten.&lt;br /&gt;
&lt;br /&gt;
= Organisation =&lt;br /&gt;
&lt;br /&gt;
Funktionen und Methoden werden hauptsächlich deklariert, um den Quellcode zu strukturieren. Es bietet sich immer an, häufig verwendete Codefragmente als eigene Funktion auszulagern.&lt;br /&gt;
&lt;br /&gt;
Die Funktionalität eines Objektes sollte durch seine verfügbaren Methoden repräsentiert werden. Diese Funktionalitäten sollten relativ einfach formulierbar sein (frei nach dem Motto &amp;quot;Do one thing, and do it well!&amp;quot;&amp;lt;ref&amp;gt;Unix Philosophy&amp;lt;/ref&amp;gt;). Meistens beinhalten diese insbesondere die Fähigkeit, Attribute des Objektes zu manipulieren oder in Abhängigkeit von diesen spezielle Aufgaben zu erfüllen.&lt;br /&gt;
&lt;br /&gt;
= Statisch vs. nicht statisch =&lt;br /&gt;
&lt;br /&gt;
Ein [[Java]]-Programm beginnt immer in der [[main]]-Methode im '''statischen''' Kontext. Das heißt die Ausführung des Programms findet nicht innerhalb einer Instanz eines [[Objekt|Objektes]] statt.&lt;br /&gt;
&lt;br /&gt;
Wird auf einem Objekt eine Methode ausgeführt, wechselt das Programm in einen '''nicht statischen''' Kontext, in dem die Ausführung des Programms abhängig vom Zustand des Objektes ist, auf dem die Methode ausgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Innerhalb einer Klasse selbst können aus einem statischen Kontext heraus keine nicht-statischen Methoden aufgerufen oder nicht-statische Attribute manipuliert werden; es ist kein Objekt vorhanden, dass dies machen könnte. Möchte man es trotzdem tun, so muss man aus dem statischen Kontext heraus eine Objektinstanz erstellen und auf dem erstellen Objekt die gewünschte Methode aufrufen. In den meisten Fällen ergibt das jedoch für den Ablauf des Programms keinen Sinn.&lt;br /&gt;
&lt;br /&gt;
In der '''Praxis''' möchte man in der [[Objektorientierte Programmierung|'''objektorientierten Programmierung''']] den Ablauf eines Programms so schnell wie möglich in einen an ein Objekt gebundenen, nicht-statischen Kontext überführen und, außer in Spezialfällen&amp;lt;ref&amp;gt;Verwendung von hilfreichen Funktionen, die keinen Objektzustand benötigen und keinen neuen erzeugen, wie z.B. mathematische Funktionen wie &amp;lt;code&amp;gt;cos&amp;lt;/code&amp;gt;. Diese berechnen meist eine einfache Funktion und geben einen Wert zurück, ohne den Zustand des Programmes in irgendeiner Weise zu beeinflussen.&amp;lt;/ref&amp;gt;, in diesem verbleiben.&lt;br /&gt;
&lt;br /&gt;
= Rückgabe =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Der von einer Methode berechnete Wert wird als ihr '''zurückgegebener Wert''' bezeichnet. Der Programmfluss kehrt sozusagen nach dem Aufruf der Methode mit ihrem Wert in die Programmzeile zurück, in der sie aufgerufen wurde.&lt;br /&gt;
&lt;br /&gt;
Im Quellcode wird das '''Ergebnis''' der Berechnung mit dem [[Schlüsselwort]] '''return''' (engl. ''zurückgeben/zurückkehren'') gekennzeichnet. Hinter dem Schlüsselwort wird der Term notiert, der das Ergebnis beschreiben soll.&lt;br /&gt;
&lt;br /&gt;
Egal auf welche Art und Weise eine Methode terminiert, als letzte Anweisung muss ein Wert zurückgegeben werden. Das heißt, die letzte Anweisung muss immer ein '''return''' sein. Ansonsten ist die Methode unvollständig und wird vom Compiler nicht akzeptiert.&lt;br /&gt;
&lt;br /&gt;
Die einzige Ausnahme hierzu sind Methoden mit dem '''Rückgabetyp''' [[void]]. Sie werden auch häufig als '''Prozeduren''' bezeichnet. Prozeduren berechnen keine Ergebnisse und müssen daher auch keine Werte zurückgeben. Mit einem einzelnen '''return''' als Anweisung kann die Ausführung der Prozedur jedoch vor Erreichen der letzten Anweisung beendet werden und zum Aufrufer zurückkehren.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Methode mit diesem Rückgabetyp ist die [[main]]-Methode. &lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Normale Rückgabe&amp;quot;&amp;gt;&lt;br /&gt;
public int average(int x, int y){&lt;br /&gt;
    return (x + y) / 2; // Gibt das Ergebnis zurück.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Vorzeitiger Abbruch&amp;quot;&amp;gt;&lt;br /&gt;
public void printIfPositive(int x){&lt;br /&gt;
    if(x &amp;lt; 0) return; // Bricht die Ausführung der Prozedur vorzeitig ab, wenn x kleiner 0 ist.&lt;br /&gt;
    System.out.println(x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Negativbeispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Soll zwei Zahlen miteinander dividieren,&lt;br /&gt;
 * solange der Nenner y ungleich 0 ist.&lt;br /&gt;
 */&lt;br /&gt;
public double div(int x, int y){&lt;br /&gt;
    if(y != 0) return (double) x / (double) y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier liegt ein Syntaxfehler vor, da die Methode für den Fall ''y ist 0'' keinen Wert zurückgibt.&lt;br /&gt;
&lt;br /&gt;
= Fußnoten =&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1829</id>
		<title>Call by Reference</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1829"/>
				<updated>2016-09-26T16:30:56Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter '''Call by Reference''' versteht man das Übergeben von [[Referenz|Objektreferenzen]] an [[Methoden]].&lt;br /&gt;
&lt;br /&gt;
Eine [[Variable]] mit einem [[Objekt|Objektdatentyp]] speichert nicht das Objekt selbst, sondern nur eine '''Referenz''' auf dieses Objekt. Wird also eine '''Objektvariable''' an eine Methode übergeben, wird nur eine '''Kopie der Referenz''' auf ein Objekt übergeben, nicht jedoch eine Kopie des Objektes selbst. Dadurch haben anschließende Änderungen an [[Attribut|Attributen]] des Objektes in der aufgerufenen Methode Einfluss auf die Attribute des Objektes außerhalb der Methode.&lt;br /&gt;
&lt;br /&gt;
Alle Variablen, die dieselbe '''Referenz''' besitzen, erfahren dadurch die Änderungen an dem Objekt hinter der Referenz. Dies steht im Kontrast zu Variablen mit [[Primitiver Datentyp|primitivem Datentyp]]. Ihr Wert wird immer direkt übergeben und nicht die Referenz auf den Speicherbereich, in dem der Wert zu finden ist (siehe [[Call by Value]]).&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl mit dem Attribut &amp;quot;value&amp;quot; speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x.value: &amp;quot;+x.value); //Gibt aus: &amp;quot;x.value: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x.value: &amp;quot;+x.value); //Gibt aus: &amp;quot;x.value: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.value = 3; //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel deklarieren wir eine Variable mit dem Namen &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, welche eine Referenz auf ein &amp;lt;code&amp;gt;NumberStorage&amp;lt;/code&amp;gt; Objekt speichert. Diese Variable wird mit einer Referenz auf ein neues Objekt initialisiert. Der gespeicherte Wert ist 5. Der anschließende Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; (Zeile 4) hat nun Einfluss auf das übergebene Objekt: Es wird die Referenz auf das erzeugte Objekt, welches momentan in &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; gespeichert ist, übergeben. Die Änderung des Wertes dieses Objektes in &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; hat dadurch auch Einfluss auf die Variable &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, da die Variablen &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; (momentan) auf das gleiche Objekt verweisen. Entsprechend ist der Wert des Objektes hinter &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; nach Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; nun '''3''' anstatt '''5''', anders als bei [[Call by Value]]. Das öffentliche zugänglichmachen des &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;-Attributes ist dabei zugegebenermaßen schlechter Stil.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Negativbeispiel&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.value = 3; //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
   a = new NumberStorage(8); //Erzeugt ein neues Objekt und überschreibt die lokale Referenz&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird noch ein mal verdeutlicht, dass Variablen mit Objektdatentyp nur Referenzen auf Objekte speichern. Eine Änderung der von &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; gespeicherten Referenz in &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; hat daher wie bei [[Call by Value]] keinen Einfluss auf die aufrufende Funktion &amp;lt;code&amp;gt;caller&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1828</id>
		<title>Call by Reference</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1828"/>
				<updated>2016-09-26T16:30:43Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter '''Call by Reference''' versteht man das Übergeben von [[Referenz|Objektreferenzen]] an [[Methoden]].&lt;br /&gt;
&lt;br /&gt;
Eine [[Variable]] mit einem [[Objekt|Objektdatentyp]] speichert nicht das Objekt selbst, sondern nur eine '''Referenz''' auf dieses Objekt. Wird also eine '''Objektvariable''' an eine Methode übergeben, wird nur eine '''Kopie der Referenz''' auf ein Objekt übergeben, nicht jedoch eine Kopie des Objektes selbst. Dadurch haben anschließende Änderungen an [[Attribut|Attributen]] des Objektes in der aufgerufenen Methode Einfluss auf die Attribute des Objektes außerhalb der Methode.&lt;br /&gt;
&lt;br /&gt;
Alle Variablen, die dieselbe '''Referenz''' besitzen, erfahren dadurch die Änderungen an dem Objekt hinter der Referenz. Dies steht im Kontrast zu Variablen mit [[Primitiver Datentyp|primitivem Datentyp]]. Ihr Wert wird immer direkt übergeben und nicht die Referenz auf den Speicherbereich, in dem der Wert zu finden ist (siehe [[Call by Value]]).&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl mit dem Attribut &amp;quot;value&amp;quot; speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x.value: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x.value: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.value = 3; //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel deklarieren wir eine Variable mit dem Namen &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, welche eine Referenz auf ein &amp;lt;code&amp;gt;NumberStorage&amp;lt;/code&amp;gt; Objekt speichert. Diese Variable wird mit einer Referenz auf ein neues Objekt initialisiert. Der gespeicherte Wert ist 5. Der anschließende Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; (Zeile 4) hat nun Einfluss auf das übergebene Objekt: Es wird die Referenz auf das erzeugte Objekt, welches momentan in &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; gespeichert ist, übergeben. Die Änderung des Wertes dieses Objektes in &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; hat dadurch auch Einfluss auf die Variable &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, da die Variablen &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; (momentan) auf das gleiche Objekt verweisen. Entsprechend ist der Wert des Objektes hinter &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; nach Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; nun '''3''' anstatt '''5''', anders als bei [[Call by Value]]. Das öffentliche zugänglichmachen des &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;-Attributes ist dabei zugegebenermaßen schlechter Stil.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Negativbeispiel&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.value = 3; //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
   a = new NumberStorage(8); //Erzeugt ein neues Objekt und überschreibt die lokale Referenz&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird noch ein mal verdeutlicht, dass Variablen mit Objektdatentyp nur Referenzen auf Objekte speichern. Eine Änderung der von &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; gespeicherten Referenz in &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; hat daher wie bei [[Call by Value]] keinen Einfluss auf die aufrufende Funktion &amp;lt;code&amp;gt;caller&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1827</id>
		<title>Call by Reference</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1827"/>
				<updated>2016-09-26T16:30:22Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter '''Call by Reference''' versteht man das Übergeben von [[Referenz|Objektreferenzen]] an [[Methoden]].&lt;br /&gt;
&lt;br /&gt;
Eine [[Variable]] mit einem [[Objekt|Objektdatentyp]] speichert nicht das Objekt selbst, sondern nur eine '''Referenz''' auf dieses Objekt. Wird also eine '''Objektvariable''' an eine Methode übergeben, wird nur eine '''Kopie der Referenz''' auf ein Objekt übergeben, nicht jedoch eine Kopie des Objektes selbst. Dadurch haben anschließende Änderungen an [[Attribut|Attributen]] des Objektes in der aufgerufenen Methode Einfluss auf die Attribute des Objektes außerhalb der Methode.&lt;br /&gt;
&lt;br /&gt;
Alle Variablen, die dieselbe '''Referenz''' besitzen, erfahren dadurch die Änderungen an dem Objekt hinter der Referenz. Dies steht im Kontrast zu Variablen mit [[Primitiver Datentyp|primitivem Datentyp]]. Ihr Wert wird immer direkt übergeben und nicht die Referenz auf den Speicherbereich, in dem der Wert zu finden ist (siehe [[Call by Value]]).&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl mit dem Attribut &amp;quot;value&amp;quot; speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.value = 3; //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel deklarieren wir eine Variable mit dem Namen &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, welche eine Referenz auf ein &amp;lt;code&amp;gt;NumberStorage&amp;lt;/code&amp;gt; Objekt speichert. Diese Variable wird mit einer Referenz auf ein neues Objekt initialisiert. Der gespeicherte Wert ist 5. Der anschließende Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; (Zeile 4) hat nun Einfluss auf das übergebene Objekt: Es wird die Referenz auf das erzeugte Objekt, welches momentan in &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; gespeichert ist, übergeben. Die Änderung des Wertes dieses Objektes in &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; hat dadurch auch Einfluss auf die Variable &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, da die Variablen &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; (momentan) auf das gleiche Objekt verweisen. Entsprechend ist der Wert des Objektes hinter &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; nach Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; nun '''3''' anstatt '''5''', anders als bei [[Call by Value]]. Das öffentliche zugänglichmachen des &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;-Attributes ist dabei zugegebenermaßen schlechter Stil.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Negativbeispiel&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.value = 3; //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
   a = new NumberStorage(8); //Erzeugt ein neues Objekt und überschreibt die lokale Referenz&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird noch ein mal verdeutlicht, dass Variablen mit Objektdatentyp nur Referenzen auf Objekte speichern. Eine Änderung der von &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; gespeicherten Referenz in &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; hat daher wie bei [[Call by Value]] keinen Einfluss auf die aufrufende Funktion &amp;lt;code&amp;gt;caller&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1826</id>
		<title>Call by Reference</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1826"/>
				<updated>2016-09-26T16:25:25Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter '''Call by Reference''' versteht man das Übergeben von [[Referenz|Objektreferenzen]] an [[Methoden]].&lt;br /&gt;
&lt;br /&gt;
Eine [[Variable]] mit einem [[Objekt|Objektdatentyp]] speichert nicht das Objekt selbst, sondern nur eine '''Referenz''' auf dieses Objekt. Wird also eine '''Objektvariable''' an eine Methode übergeben, wird nur eine '''Kopie der Referenz''' auf ein Objekt übergeben, nicht jedoch eine Kopie des Objektes selbst. Dadurch haben anschließende Änderungen an [[Attribut|Attributen]] des Objektes in der aufgerufenen Methode Einfluss auf die Attribute des Objektes außerhalb der Methode.&lt;br /&gt;
&lt;br /&gt;
Alle Variablen, die dieselbe '''Referenz''' besitzen, erfahren dadurch die Änderungen an dem Objekt hinter der Referenz. Dies steht im Kontrast zu Variablen mit [[Primitiver Datentyp|primitivem Datentyp]]. Ihr Wert wird immer direkt übergeben und nicht die Referenz auf den Speicherbereich, in dem der Wert zu finden ist (siehe [[Call by Value]]).&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.value = 3; //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel deklarieren wir eine Variable mit dem Namen &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, welche eine Referenz auf ein &amp;lt;code&amp;gt;NumberStorage&amp;lt;/code&amp;gt; Objekt speichert. Diese Variable wird mit einer Referenz auf ein neues Objekt initialisiert. Der gespeicherte Wert ist 5. Der anschließende Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; (Zeile 4) hat nun Einfluss auf das übergebene Objekt: Es wird die Referenz auf das erzeugte Objekt, welches momentan in &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; gespeichert ist, übergeben. Die Änderung des Wertes dieses Objektes in &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; hat dadurch auch Einfluss auf die Variable &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, da die Variablen &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; (momentan) auf das gleiche Objekt verweisen. Entsprechend ist der Wert des Objektes hinter &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; nach Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; nun '''3''' anstatt '''5''', anders als bei [[Call by Value]]. Das öffentliche zugänglichmachen des &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;-Attributes ist dabei zugegebenermaßen schlechter Stil.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Negativbeispiel&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.value = 3; //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
   a = new NumberStorage(8); //Erzeugt ein neues Objekt und überschreibt die lokale Referenz&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird noch ein mal verdeutlicht, dass Variablen mit Objektdatentyp nur Referenzen auf Objekte speichern. Eine Änderung der von &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; gespeicherten Referenz in &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; hat daher wie bei [[Call by Value]] keinen Einfluss auf die aufrufende Funktion &amp;lt;code&amp;gt;caller&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1825</id>
		<title>Call by Reference</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1825"/>
				<updated>2016-09-26T16:22:52Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter '''Call by Reference''' versteht man das Übergeben von [[Referenz|Objektreferenzen]] an [[Methoden]].&lt;br /&gt;
&lt;br /&gt;
Eine [[Variable]] mit einem [[Objekt|Objektdatentyp]] speichert nicht das Objekt selbst, sondern nur eine '''Referenz''' auf dieses Objekt. Wird also eine '''Objektvariable''' an eine Methode übergeben, wird nur eine '''Kopie der Referenz''' auf ein Objekt übergeben, nicht jedoch eine Kopie des Objektes selbst. Dadurch haben anschließende Änderungen an [[Attribut|Attributen]] des Objektes in der aufgerufenen Methode Einfluss auf die Attribute des Objektes außerhalb der Methode.&lt;br /&gt;
&lt;br /&gt;
Alle Variablen, die dieselbe '''Referenz''' besitzen, erfahren dadurch die Änderungen an dem Objekt hinter der Referenz. Dies steht im Kontrast zu Variablen mit [[Primitiver Datentyp|primitivem Datentyp]]. Ihr Wert wird immer direkt übergeben und nicht die Referenz auf den Speicherbereich, in dem der Wert zu finden ist (siehe [[Call by Value]]).&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.value); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.value = 3; //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel deklarieren wir eine Variable mit dem Namen &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, welche eine Referenz auf ein &amp;lt;code&amp;gt;NumberStorage&amp;lt;/code&amp;gt; Objekt speichert. Diese Variable wird mit einer Referenz auf ein neues Objekt initialisiert. Der gespeicherte Wert ist 5. Der anschließende Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; (Zeile 4) hat nun Einfluss auf das übergebene Objekt: Es wird die Referenz auf das erzeugte Objekt, welches momentan in &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; gespeichert ist, übergeben. Die Änderung des Wertes dieses Objektes in &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; hat dadurch auch Einfluss auf die Variable &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, da die Variablen &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; (momentan) auf das gleiche Objekt verweisen. Entsprechend ist der Wert des Objektes hinter &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; nach Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; nun '''3''' anstatt '''5''', anders als bei [[Call by Value]]. Das öffentliche zugänglichmachen des &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;-Attributes ist dabei zugegebenermaßen schlechter Stil.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.getValue()); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.getValue()); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.setValue(3); //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
   a = new NumberStorage(8); //Erzeugt ein neues Objekt und überschreibt die lokale Referenz&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wurde der Code des oberen Beispiels um eine Zeile im &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; erweitert. Dies soll zeigen, dass die Variablen die Referenzen auf die Objekte als Wert besitzen. In &amp;lt;code&amp;gt;caller&amp;lt;/code&amp;gt; wird das neue Objekt (x) erstellt. Der Aufruf an &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; Übergibt die Referenz auf dieses neue Objekt an die aufgerufene Funktion weiter. In &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; wird der Wert des Objektes hinter der übergebenen Referenz (a) nun geändert. Anschließend wird der Variablen, die nur eine Referenz speichert, eine neue Referenz zugewiesen, indem ein neues Objekt erstellt wird. Hier wird nun nicht wie in der Zeile vorher das übergebene Objekt manipuliert, sondern die Referenz auf dieses Objekt wird durch die Zuweisung überschrieben und hat wie mit Variablen bei [[Call by Value]] keinen Einfluss auf die aufrufende Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1823</id>
		<title>Call by Reference</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1823"/>
				<updated>2016-09-26T16:11:08Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter '''Call by Reference''' versteht man das Übergeben von [[Referenz|Objektreferenzen]] an [[Methoden]].&lt;br /&gt;
&lt;br /&gt;
Eine [[Variable]] mit einem [[Objekt|Objektdatentyp]] speichert nicht das Objekt selbst, sondern nur eine '''Referenz''' auf dieses Objekt. Wird also eine '''Objektvariable''' an eine Methode übergeben, wird nur eine '''Kopie der Referenz''' auf ein Objekt übergeben, nicht jedoch eine Kopie des Objektes selbst. Dadurch haben anschließende Änderungen an [[Attribut|Attributen]] des Objektes in der aufgerufenen Methode Einfluss auf die Attribute des Objektes außerhalb der Methode.&lt;br /&gt;
&lt;br /&gt;
Alle Variablen, die dieselbe '''Referenz''' besitzen, erfahren dadurch die Änderungen an dem Objekt hinter der Referenz. Dies steht im Kontrast zu Variablen mit [[Primitiver Datentyp|primitivem Datentyp]]. Ihr Wert wird immer direkt übergeben und nicht die Referenz auf den Speicherbereich, in dem der Wert zu finden ist (siehe [[Call by Value]]).&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.getValue()); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.getValue()); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.setValue(3); //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel hat der Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; Einfluss auf das übergebene Objekt außerhalb des eigendlichen Aufrufes, da das Objekt hinter der übergebenen Referenz geändert wird, und keine Kopie des übergebenen Objektes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.getValue()); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.getValue()); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.setValue(3); //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
   a = new NumberStorage(8); //Erzeugt ein neues Objekt und überschreibt die lokale Referenz&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wurde der Code des oberen Beispiels um eine Zeile im &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; erweitert. Dies soll zeigen, dass die Variablen die Referenzen auf die Objekte als Wert besitzen. In &amp;lt;code&amp;gt;caller&amp;lt;/code&amp;gt; wird das neue Objekt (x) erstellt. Der Aufruf an &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; Übergibt die Referenz auf dieses neue Objekt an die aufgerufene Funktion weiter. In &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; wird der Wert des Objektes hinter der übergebenen Referenz (a) nun geändert. Anschließend wird der Variablen, die nur eine Referenz speichert, eine neue Referenz zugewiesen, indem ein neues Objekt erstellt wird. Hier wird nun nicht wie in der Zeile vorher das übergebene Objekt manipuliert, sondern die Referenz auf dieses Objekt wird durch die Zuweisung überschrieben und hat wie mit Variablen bei [[Call by Value]] keinen Einfluss auf die aufrufende Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1822</id>
		<title>Call by Reference</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1822"/>
				<updated>2016-09-26T16:04:34Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter '''Call by Reference''' versteht man das Übergeben von [[Referenz|Objektreferenzen]] an [[Methoden]].&lt;br /&gt;
&lt;br /&gt;
Eine [[Variable]] mit einem [[Objekt|Objektdatentyp]] speichert nicht das Objekt selbst, sondern nur eine '''Referenz''' auf dieses Objekt. Wird also eine '''Objektvariable''' an eine Methode übergeben, wird nur eine '''Kopie der Referenz''' auf ein Objekt übergeben, nicht jedoch eine Kopie des Objektes selbst. Dadurch haben anschließende Änderungen an [[Attribut|Attributen]] des Objektes in der aufgerufenen Methode Einfluss auf die Attribute des Objektes außerhalb der Methode.&lt;br /&gt;
&lt;br /&gt;
Alle Variablen, die dieselbe '''Referenz''' besitzen, erfahren dadurch die Änderungen an dem Objekt hinter der Referenz. Dies steht im Kontrast zu Variablen mit [[Primitiver Datentyp|primitivem Datentyp]]. Ihr Wert wird immer direkt übergeben und nicht die Referenz auf den Speicherbereich, in dem der Wert zu finden ist (siehe [[Call by Value]]).&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.getValue()); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee (Call by Reference)&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.getValue()); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.setValue(3); //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel hat der Aufruf der Funktion &amp;lt;code&amp;gt;callee&amp;lt;/code&amp;gt; Einfluss auf das übergebene Objekt außerhalb des eigendlichen Aufrufes, da das Objekt hinter der übergebenen Referenz geändert wird, und keine Kopie des übergebenen Objektes.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1821</id>
		<title>Call by Reference</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Call_by_Reference&amp;diff=1821"/>
				<updated>2016-09-26T16:02:34Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter '''Call by Reference''' versteht man das Übergeben von [[Referenz|Objektreferenzen]] an [[Methoden]].&lt;br /&gt;
&lt;br /&gt;
Eine [[Variable]] mit einem [[Objekt|Objektdatentyp]] speichert nicht das Objekt selbst, sondern nur eine '''Referenz''' auf dieses Objekt. Wird also eine '''Objektvariable''' an eine Methode übergeben, wird nur eine '''Kopie der Referenz''' auf ein Objekt übergeben, nicht jedoch eine Kopie des Objektes selbst. Dadurch haben anschließende Änderungen an [[Attribut|Attributen]] des Objektes in der aufgerufenen Methode Einfluss auf die Attribute des Objektes außerhalb der Methode.&lt;br /&gt;
&lt;br /&gt;
Alle Variablen, die dieselbe '''Referenz''' besitzen, erfahren dadurch die Änderungen an dem Objekt hinter der Referenz. Dies steht im Kontrast zu Variablen mit [[Primitiver Datentyp|primitivem Datentyp]]. Ihr Wert wird immer direkt übergeben und nicht die Referenz auf den Speicherbereich, in dem der Wert zu finden ist (siehe [[Call by Value]]).&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public static void caller(){&lt;br /&gt;
   NumberStorage x = new NumberStorage(5); //Arbiträres Objekt, das eine Zahl speichert.&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.getValue()); //Gibt aus: &amp;quot;x: 5&amp;quot;&lt;br /&gt;
   callee(x); //Übergibt die Referenz von x and callee&lt;br /&gt;
   System.out.println(&amp;quot;x: &amp;quot;+x.getValue()); //Gibt aus: &amp;quot;x: 3&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void callee(NumberStorage a){&lt;br /&gt;
   a.setValue(3); //Setzt den Wert des übergebenen Objektes auf 3&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Methode&amp;diff=1820</id>
		<title>Methode</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Methode&amp;diff=1820"/>
				<updated>2016-09-26T15:56:22Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Parameter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine '''Methode''' definiert ein (Teil-)Programm.&lt;br /&gt;
&lt;br /&gt;
=Unterscheidung Methode und Funktion=&lt;br /&gt;
&lt;br /&gt;
Üblicherweise wird eine Methode von einer '''Funktion''' unterschieden: Eine Methode wird auf einem [[Objekt]] ausgeführt, eine Funktion wird nach Belieben aufgerufen. Bei der Deklaration unterscheidet man zwischen Methode und Funktion nur durch den [[Modifikator]] [[static]]. &lt;br /&gt;
&lt;br /&gt;
Eine Funktion wird im '''statischen Kontext''' der [[Klasse]] ausgeführt und hat daher nur Zugriff auf Klassenattribute und lokale Variablen, während eine Methode zusätzlich Zugriff auf Attribute der '''Objektinstanz''' hat.&lt;br /&gt;
&lt;br /&gt;
= Syntaxdiagramm =&lt;br /&gt;
&lt;br /&gt;
[[Datei:method_declaration.png]]&lt;br /&gt;
&lt;br /&gt;
= Deklaration =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Eine (statische) Methode wird innerhalb des Klassenrumpfes mit Angabe der [[Modifikator]]en (''visibility'' und ''functional modifier''), des [[Datentyp|Rückgabetyps]] (''primitive type'' oder ''identifier'') und des Namens (''identifier'') deklariert. Darauf folgen in runden Klammern die Parameter. Danach kommt der eigentliche Rumpf der Methode innerhalb von geschweiften Klammern in Form eines [[Block | Blocks]]. &lt;br /&gt;
&lt;br /&gt;
Wird der Modifikator [[abstract]] verwendet, so wird nur die [[Signatur]] der Methode, nicht aber ihr Rumpf angegeben. Die Deklaration wird mit einem Semikolon abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Beispiel 1&amp;quot;&amp;gt;&lt;br /&gt;
private static int foo(int bar){&lt;br /&gt;
    // ... //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist eine [[privat]]e, [[statisch]]e Methode, die einen [[int]] berechnet, [[foo]] heißt und einen '''int''' namens [[bar]] als Parameter erwartet. Die Methode benötigt eine Implementierung, die hier aber nicht weiter relevant ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Beispiel 2&amp;quot;&amp;gt;&lt;br /&gt;
public abstract double bar(double foo);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist eine [[öffentlich]]e, [[abstrakt]]e Methode, die einen [[double]] berechnet, '''bar''' heißt und einen '''double''' namens '''foo''' als Parameter erwartet. Dem Methodenkopf folgt keine Implementierung, da sie als abstrakt deklariert ist und von einer [[Vererbung | erbenden Klasse]] implementiert werden soll.&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Die '''Parameter''' einer Methode sind [[Variable]]n, deren Wert beim '''Aufruf''' der Methode festgelegt werden. Ein '''Parameter''' ist daher immer mit einem Wert initialisiert. Die Übergabe von '''Parametern''' geschieht per [[Call by Value]] bei [[primitiver Datentyp | primitiven Datentypen]], per [[Call by Reference]] bei Objekten.&lt;br /&gt;
&lt;br /&gt;
= Organisation =&lt;br /&gt;
&lt;br /&gt;
Funktionen und Methoden werden hauptsächlich deklariert, um den Quellcode zu strukturieren. Es bietet sich immer an, häufig verwendete Codefragmente als eigene Funktion auszulagern.&lt;br /&gt;
&lt;br /&gt;
Die Funktionalität eines Objektes sollte durch seine verfügbaren Methoden repräsentiert werden. Diese Funktionalitäten sollten relativ einfach formulierbar sein (frei nach dem Motto &amp;quot;Do one thing, and do it well!&amp;quot;&amp;lt;ref&amp;gt;Unix Philosophy&amp;lt;/ref&amp;gt;). Meistens beinhalten diese insbesondere die Fähigkeit, Attribute des Objektes zu manipulieren oder in Abhängigkeit von diesen spezielle Aufgaben zu erfüllen.&lt;br /&gt;
&lt;br /&gt;
= Statisch vs. nicht statisch =&lt;br /&gt;
&lt;br /&gt;
Ein [[Java]]-Programm beginnt immer in der [[main]]-Methode im '''statischen''' Kontext. Das heißt die Ausführung des Programms findet nicht innerhalb einer Instanz eines [[Objekt|Objektes]] statt.&lt;br /&gt;
&lt;br /&gt;
Wird auf einem Objekt eine Methode ausgeführt, wechselt das Programm in einen '''nicht statischen''' Kontext, in dem die Ausführung des Programms abhängig vom Zustand des Objektes ist, auf dem die Methode ausgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Innerhalb einer Klasse selbst können aus einem statischen Kontext heraus keine nicht-statischen Methoden aufgerufen oder nicht-statische Attribute manipuliert werden; es ist kein Objekt vorhanden, dass dies machen könnte. Möchte man es trotzdem tun, so muss man aus dem statischen Kontext heraus eine Objektinstanz erstellen und auf dem erstellen Objekt die gewünschte Methode aufrufen. In den meisten Fällen ergibt das jedoch für den Ablauf des Programms keinen Sinn.&lt;br /&gt;
&lt;br /&gt;
In der '''Praxis''' möchte man in der [[Objektorientierte Programmierung|'''objektorientierten Programmierung''']] den Ablauf eines Programms so schnell wie möglich in einen an ein Objekt gebundenen, nicht-statischen Kontext überführen und, außer in Spezialfällen&amp;lt;ref&amp;gt;Verwendung von hilfreichen Funktionen, die keinen Objektzustand benötigen und keinen neuen erzeugen, wie z.B. mathematische Funktionen wie &amp;lt;code&amp;gt;cos&amp;lt;/code&amp;gt;. Diese berechnen meist eine einfache Funktion und geben einen Wert zurück, ohne den Zustand des Programmes in irgendeiner Weise zu beeinflussen.&amp;lt;/ref&amp;gt;, in diesem verbleiben.&lt;br /&gt;
&lt;br /&gt;
= Rückgabe =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Der von einer Methode berechnete Wert wird als ihr '''zurückgegebener Wert''' bezeichnet. Der Programmfluss kehrt sozusagen nach dem Aufruf der Methode mit ihrem Wert in die Programmzeile zurück, in der sie aufgerufen wurde.&lt;br /&gt;
&lt;br /&gt;
Im Quellcode wird das '''Ergebnis''' der Berechnung mit dem [[Schlüsselwort]] '''return''' (engl. ''zurückgeben/zurückkehren'') gekennzeichnet. Hinter dem Schlüsselwort wird der Term notiert, der das Ergebnis beschreiben soll.&lt;br /&gt;
&lt;br /&gt;
Egal auf welche Art und Weise eine Methode terminiert, als letzte Anweisung muss ein Wert zurückgegeben werden. Das heißt, die letzte Anweisung muss immer ein '''return''' sein. Ansonsten ist die Methode unvollständig und wird vom Compiler nicht akzeptiert.&lt;br /&gt;
&lt;br /&gt;
Die einzige Ausnahme hierzu sind Methoden mit dem '''Rückgabetyp''' [[void]]. Sie werden auch häufig als '''Prozeduren''' bezeichnet. Prozeduren berechnen keine Ergebnisse und müssen daher auch keine Werte zurückgeben. Mit einem einzelnen '''return''' als Anweisung kann die Ausführung der Prozedur jedoch vor Erreichen der letzten Anweisung beendet werden und zum Aufrufer zurückkehren.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Methode mit diesem Rückgabetyp ist die [[main]]-Methode. &lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Normale Rückgabe&amp;quot;&amp;gt;&lt;br /&gt;
public int average(int x, int y){&lt;br /&gt;
    return (x + y) / 2; // Gibt das Ergebnis zurück.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Vorzeitiger Abbruch&amp;quot;&amp;gt;&lt;br /&gt;
public void printIfPositive(int x){&lt;br /&gt;
    if(x &amp;lt; 0) return; // Bricht die Ausführung der Prozedur vorzeitig ab, wenn x kleiner 0 ist.&lt;br /&gt;
    System.out.println(x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Negativbeispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Soll zwei Zahlen miteinander dividieren,&lt;br /&gt;
 * solange der Nenner y ungleich 0 ist.&lt;br /&gt;
 */&lt;br /&gt;
public double div(int x, int y){&lt;br /&gt;
    if(y != 0) return (double) x / (double) y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier liegt ein Syntaxfehler vor, da die Methode für den Fall ''y ist 0'' keinen Wert zurückgibt.&lt;br /&gt;
&lt;br /&gt;
= Fußnoten =&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Methode&amp;diff=1819</id>
		<title>Methode</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Methode&amp;diff=1819"/>
				<updated>2016-09-26T15:56:02Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Parameter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine '''Methode''' definiert ein (Teil-)Programm.&lt;br /&gt;
&lt;br /&gt;
=Unterscheidung Methode und Funktion=&lt;br /&gt;
&lt;br /&gt;
Üblicherweise wird eine Methode von einer '''Funktion''' unterschieden: Eine Methode wird auf einem [[Objekt]] ausgeführt, eine Funktion wird nach Belieben aufgerufen. Bei der Deklaration unterscheidet man zwischen Methode und Funktion nur durch den [[Modifikator]] [[static]]. &lt;br /&gt;
&lt;br /&gt;
Eine Funktion wird im '''statischen Kontext''' der [[Klasse]] ausgeführt und hat daher nur Zugriff auf Klassenattribute und lokale Variablen, während eine Methode zusätzlich Zugriff auf Attribute der '''Objektinstanz''' hat.&lt;br /&gt;
&lt;br /&gt;
= Syntaxdiagramm =&lt;br /&gt;
&lt;br /&gt;
[[Datei:method_declaration.png]]&lt;br /&gt;
&lt;br /&gt;
= Deklaration =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Eine (statische) Methode wird innerhalb des Klassenrumpfes mit Angabe der [[Modifikator]]en (''visibility'' und ''functional modifier''), des [[Datentyp|Rückgabetyps]] (''primitive type'' oder ''identifier'') und des Namens (''identifier'') deklariert. Darauf folgen in runden Klammern die Parameter. Danach kommt der eigentliche Rumpf der Methode innerhalb von geschweiften Klammern in Form eines [[Block | Blocks]]. &lt;br /&gt;
&lt;br /&gt;
Wird der Modifikator [[abstract]] verwendet, so wird nur die [[Signatur]] der Methode, nicht aber ihr Rumpf angegeben. Die Deklaration wird mit einem Semikolon abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Beispiel 1&amp;quot;&amp;gt;&lt;br /&gt;
private static int foo(int bar){&lt;br /&gt;
    // ... //&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist eine [[privat]]e, [[statisch]]e Methode, die einen [[int]] berechnet, [[foo]] heißt und einen '''int''' namens [[bar]] als Parameter erwartet. Die Methode benötigt eine Implementierung, die hier aber nicht weiter relevant ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Beispiel 2&amp;quot;&amp;gt;&lt;br /&gt;
public abstract double bar(double foo);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist eine [[öffentlich]]e, [[abstrakt]]e Methode, die einen [[double]] berechnet, '''bar''' heißt und einen '''double''' namens '''foo''' als Parameter erwartet. Dem Methodenkopf folgt keine Implementierung, da sie als abstrakt deklariert ist und von einer [[Vererbung | erbenden Klasse]] implementiert werden soll.&lt;br /&gt;
&lt;br /&gt;
= Parameter =&lt;br /&gt;
&lt;br /&gt;
Die '''Parameter''' einer Methode sind [[Variable]]n, deren Wert beim '''Aufruf''' der Methode festgelegt werden. Ein '''Parameter''' ist daher immer mit einem Wert initialisiert. Die Übergabe von '''Parametern''' geschieht per [[Call by Value]] bei [[primitiven Datentypen]], per [[Call by Reference]] bei Objekten.&lt;br /&gt;
&lt;br /&gt;
= Organisation =&lt;br /&gt;
&lt;br /&gt;
Funktionen und Methoden werden hauptsächlich deklariert, um den Quellcode zu strukturieren. Es bietet sich immer an, häufig verwendete Codefragmente als eigene Funktion auszulagern.&lt;br /&gt;
&lt;br /&gt;
Die Funktionalität eines Objektes sollte durch seine verfügbaren Methoden repräsentiert werden. Diese Funktionalitäten sollten relativ einfach formulierbar sein (frei nach dem Motto &amp;quot;Do one thing, and do it well!&amp;quot;&amp;lt;ref&amp;gt;Unix Philosophy&amp;lt;/ref&amp;gt;). Meistens beinhalten diese insbesondere die Fähigkeit, Attribute des Objektes zu manipulieren oder in Abhängigkeit von diesen spezielle Aufgaben zu erfüllen.&lt;br /&gt;
&lt;br /&gt;
= Statisch vs. nicht statisch =&lt;br /&gt;
&lt;br /&gt;
Ein [[Java]]-Programm beginnt immer in der [[main]]-Methode im '''statischen''' Kontext. Das heißt die Ausführung des Programms findet nicht innerhalb einer Instanz eines [[Objekt|Objektes]] statt.&lt;br /&gt;
&lt;br /&gt;
Wird auf einem Objekt eine Methode ausgeführt, wechselt das Programm in einen '''nicht statischen''' Kontext, in dem die Ausführung des Programms abhängig vom Zustand des Objektes ist, auf dem die Methode ausgeführt wird. &lt;br /&gt;
&lt;br /&gt;
Innerhalb einer Klasse selbst können aus einem statischen Kontext heraus keine nicht-statischen Methoden aufgerufen oder nicht-statische Attribute manipuliert werden; es ist kein Objekt vorhanden, dass dies machen könnte. Möchte man es trotzdem tun, so muss man aus dem statischen Kontext heraus eine Objektinstanz erstellen und auf dem erstellen Objekt die gewünschte Methode aufrufen. In den meisten Fällen ergibt das jedoch für den Ablauf des Programms keinen Sinn.&lt;br /&gt;
&lt;br /&gt;
In der '''Praxis''' möchte man in der [[Objektorientierte Programmierung|'''objektorientierten Programmierung''']] den Ablauf eines Programms so schnell wie möglich in einen an ein Objekt gebundenen, nicht-statischen Kontext überführen und, außer in Spezialfällen&amp;lt;ref&amp;gt;Verwendung von hilfreichen Funktionen, die keinen Objektzustand benötigen und keinen neuen erzeugen, wie z.B. mathematische Funktionen wie &amp;lt;code&amp;gt;cos&amp;lt;/code&amp;gt;. Diese berechnen meist eine einfache Funktion und geben einen Wert zurück, ohne den Zustand des Programmes in irgendeiner Weise zu beeinflussen.&amp;lt;/ref&amp;gt;, in diesem verbleiben.&lt;br /&gt;
&lt;br /&gt;
= Rückgabe =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Der von einer Methode berechnete Wert wird als ihr '''zurückgegebener Wert''' bezeichnet. Der Programmfluss kehrt sozusagen nach dem Aufruf der Methode mit ihrem Wert in die Programmzeile zurück, in der sie aufgerufen wurde.&lt;br /&gt;
&lt;br /&gt;
Im Quellcode wird das '''Ergebnis''' der Berechnung mit dem [[Schlüsselwort]] '''return''' (engl. ''zurückgeben/zurückkehren'') gekennzeichnet. Hinter dem Schlüsselwort wird der Term notiert, der das Ergebnis beschreiben soll.&lt;br /&gt;
&lt;br /&gt;
Egal auf welche Art und Weise eine Methode terminiert, als letzte Anweisung muss ein Wert zurückgegeben werden. Das heißt, die letzte Anweisung muss immer ein '''return''' sein. Ansonsten ist die Methode unvollständig und wird vom Compiler nicht akzeptiert.&lt;br /&gt;
&lt;br /&gt;
Die einzige Ausnahme hierzu sind Methoden mit dem '''Rückgabetyp''' [[void]]. Sie werden auch häufig als '''Prozeduren''' bezeichnet. Prozeduren berechnen keine Ergebnisse und müssen daher auch keine Werte zurückgeben. Mit einem einzelnen '''return''' als Anweisung kann die Ausführung der Prozedur jedoch vor Erreichen der letzten Anweisung beendet werden und zum Aufrufer zurückkehren.&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für eine Methode mit diesem Rückgabetyp ist die [[main]]-Methode. &lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Normale Rückgabe&amp;quot;&amp;gt;&lt;br /&gt;
public int average(int x, int y){&lt;br /&gt;
    return (x + y) / 2; // Gibt das Ergebnis zurück.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Vorzeitiger Abbruch&amp;quot;&amp;gt;&lt;br /&gt;
public void printIfPositive(int x){&lt;br /&gt;
    if(x &amp;lt; 0) return; // Bricht die Ausführung der Prozedur vorzeitig ab, wenn x kleiner 0 ist.&lt;br /&gt;
    System.out.println(x);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Negativbeispiel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Soll zwei Zahlen miteinander dividieren,&lt;br /&gt;
 * solange der Nenner y ungleich 0 ist.&lt;br /&gt;
 */&lt;br /&gt;
public double div(int x, int y){&lt;br /&gt;
    if(y != 0) return (double) x / (double) y;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Hier liegt ein Syntaxfehler vor, da die Methode für den Fall ''y ist 0'' keinen Wert zurückgibt.&lt;br /&gt;
&lt;br /&gt;
= Fußnoten =&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Basisvokabular&amp;diff=1818</id>
		<title>Basisvokabular</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Basisvokabular&amp;diff=1818"/>
				<updated>2016-09-26T15:54:56Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Auflistung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auf dieser Seite werden Begriffe erklärt, die häufig in den Artikeln verwendet werden und zum '''Basisvokabular der Informatik''' gehören. Es handelt sich hierbei größtenteils um Begriffe, die keinen eigenen Artikel haben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ergänzungen sind erwünscht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Auflistung=&lt;br /&gt;
&lt;br /&gt;
*'''äquivalent'''=austauschbar; gleichwertig; eindeutig einander zugeordnet. Das Symbol dafür ist &amp;amp;equiv;. In der [[Boolesche Algebra|Booleschen Algebra]] kann man Äquivalenz daran erkennen, dass zwei Aussagen in jeder möglichen Situation (d.h. Belegung der Variablen) den gleichen Wahrheitsgehalt haben. &lt;br /&gt;
&lt;br /&gt;
*'''arbiträr''' = willkürlich&lt;br /&gt;
&lt;br /&gt;
*'''Ausgabe''' = Text, Bild oder Ton, der dem Benutzer durch ein Programm präsentiert wird. Siehe auch: [[Algorithmus#Rückgabe und Ausgabe | Rückgabe und Ausgabe]]&lt;br /&gt;
&lt;br /&gt;
*'''Deklaration''': Bei der Deklaration wird festgelegt, '''was''' etwas ist. Siehe: [[Deklaration]]&lt;br /&gt;
&lt;br /&gt;
*'''Implementierung''': Die Implementierung sagt aus, '''wie''' etwas funktioniert. Sie ist sozusagen der '''Inhalt''' von z.B. einer [[Methode]].&lt;br /&gt;
&lt;br /&gt;
*'''Initialisierung''': Bei der Initialisierung wird festgelegt, welchen '''Wert''' etwas zu Beginn hat, z.B. bei [[Variablen]].&lt;br /&gt;
&lt;br /&gt;
*'''Instanziierung''': Die Instanziierung beschreibt das Erstellen eines neuen [[Objekt]]es anhand des von einer [[Klasse]] vorgegebenen Bauplans. Man erstellt also eine Instanz der Klasse.&lt;br /&gt;
&lt;br /&gt;
*'''Iteration''' = Durchlauf, wird vor allem im Zusammenhang mit [[Schleifen]] verwendet.&lt;br /&gt;
&lt;br /&gt;
*'''Maschine''': Dieser Begriff umfasst alle nichtmenschlichen Rechner.&lt;br /&gt;
&lt;br /&gt;
*'''Modulo''': Modulo ist ein [[Operator]], der den Rest einer Division berechnet.&lt;br /&gt;
&lt;br /&gt;
*'''Rückgabe''' = Ergebnis der Berechnung einer Methode. Siehe: [[Methode#Rückgabe|Rückgabe]]&lt;br /&gt;
&lt;br /&gt;
*'''terminieren''' = beenden; ein Vorgang hört auf zu arbeiten&lt;br /&gt;
&lt;br /&gt;
*'''Übergabe''' = Aufrufen einer Methode mit angegebenen Werten. Werte werden an Methoden übergeben, die diese benutzen um ein Unterprogramm auszuführen.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Glossar_(vorlesungsorientiert)&amp;diff=1786</id>
		<title>Glossar (vorlesungsorientiert)</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Glossar_(vorlesungsorientiert)&amp;diff=1786"/>
				<updated>2016-09-08T15:02:15Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* 0. Kapitel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Glossar (alphabetisch)]]&lt;br /&gt;
&lt;br /&gt;
=Glossar (vorlesungsorientiert)=&lt;br /&gt;
&lt;br /&gt;
==0. Kapitel==&lt;br /&gt;
*[[Informatik]]&lt;br /&gt;
* [[Algorithmus]]&lt;br /&gt;
* [[Problemklasse]]&lt;br /&gt;
* [[Einzelproblem]]&lt;br /&gt;
* Verifikation (bzgl. dieser Klassen)&lt;br /&gt;
* [[Programmierung]]&lt;br /&gt;
* [[Effizienz]]&lt;br /&gt;
* Zeitkomplexität&lt;br /&gt;
* Raumkomplexität&lt;br /&gt;
* Entwurfsmethodik&lt;br /&gt;
* [[Syntax_und_Semantik | Syntax]]&lt;br /&gt;
* [[Syntax_und_Semantik | Semantik]]&lt;br /&gt;
* [https://de.wikipedia.org/wiki/Computer Computer]&lt;br /&gt;
* [https://de.wikipedia.org/wiki/Rechner Rechner]&lt;br /&gt;
* [[Java]]&lt;br /&gt;
* [[Sortieren]]&lt;br /&gt;
* [[Suchen]]&lt;br /&gt;
* [[Numerik]]&lt;br /&gt;
* [[Imperative Programmierung]]&lt;br /&gt;
* [[Objektorientierte Programmierung]]&lt;br /&gt;
&lt;br /&gt;
==1. Kapitel==&lt;br /&gt;
*Rechensysteme&lt;br /&gt;
* [[Hardware]]&lt;br /&gt;
* [[Software]]&lt;br /&gt;
* [[Prozessor | CPU/Prozessor]]&lt;br /&gt;
* [[Speicher]]&lt;br /&gt;
* [[Eingabe/Ausgabe | E-/A-Medien / I-/O-Medien]]&lt;br /&gt;
* [[Virtuelle Maschine]]&lt;br /&gt;
* [[Teile und herrsche]]&lt;br /&gt;
* [[Betriebssytem]]&lt;br /&gt;
* Kommunikationsprotokoll&lt;br /&gt;
* Informationsverarbeitung&lt;br /&gt;
* Datenverarbeitung&lt;br /&gt;
* Repräsentation (von Daten)&lt;br /&gt;
* Interpretation&lt;br /&gt;
* Abstraktion&lt;br /&gt;
* [[Bit]]&lt;br /&gt;
* [[Bit | Nibble]]&lt;br /&gt;
* [[Bit | Byte]]&lt;br /&gt;
* [[Bitfolge]]&lt;br /&gt;
* [[Dezimal-_und_Bin%C3%A4rsystem | Binärzahlen]]&lt;br /&gt;
* Hexadezimalzahlen&lt;br /&gt;
* Texte (Darstellung)&lt;br /&gt;
* ASCII&lt;br /&gt;
* Unicode&lt;br /&gt;
* Quelltext/-code&lt;br /&gt;
* [[Compiler]]&lt;br /&gt;
* [[Maschinensprache]]&lt;br /&gt;
* Rastergrafik&lt;br /&gt;
* Vektorgrafik&lt;br /&gt;
* [[Bool'sche Algebra]]&lt;br /&gt;
* Darstellung natürlicher Zahlen&lt;br /&gt;
* Umrechnungsverfahren&lt;br /&gt;
* Darstellung ganzer Zahlen&lt;br /&gt;
* [[Vorzeichenbetragszahlen]]&lt;br /&gt;
* [[Zweierkomplement]]&lt;br /&gt;
* Standardformate&lt;br /&gt;
* Festpunktzahlen&lt;br /&gt;
* Gleitpunktzahlen&lt;br /&gt;
&lt;br /&gt;
==2. Kapitel==&lt;br /&gt;
*Spezifikation&lt;br /&gt;
* [[Programm]]&lt;br /&gt;
*Vorgehensweise (Erstellung eines Programms)&lt;br /&gt;
*Problembeschreibung&lt;br /&gt;
*Vorbedignung&lt;br /&gt;
*Nachbedingung&lt;br /&gt;
* [[Algorithmus]] (Definition)&lt;br /&gt;
* [[Relation]]&lt;br /&gt;
*Kreuzprodukt&lt;br /&gt;
*Ein- und Ausgabe&lt;br /&gt;
* [[Elementaroperationen]]&lt;br /&gt;
*Terminierung&lt;br /&gt;
* [[Determinismus]]&lt;br /&gt;
*Determiniertheit&lt;br /&gt;
*Pseudocode&lt;br /&gt;
*Allgemeinheit&lt;br /&gt;
*Robustheit&lt;br /&gt;
*Einfache Grundoperationen&lt;br /&gt;
*Sequentieller Algorithmus&lt;br /&gt;
*Nebenläufiger Algorithmus&lt;br /&gt;
*Parallele Ausführung&lt;br /&gt;
*ggt nach Euklid&lt;br /&gt;
* [[Programmiersprache]] / algorithmische Sprache&lt;br /&gt;
* [[Programm]]&lt;br /&gt;
* [[Programmieren]]&lt;br /&gt;
*Programmierparadigma&lt;br /&gt;
* [[Imperative Programmierung]]&lt;br /&gt;
* [[Funktionale Programmierung]]&lt;br /&gt;
* [[Logische Programmierung]]&lt;br /&gt;
* [[Objektorientierte Programmierung]]&lt;br /&gt;
* [[Syntaxdiagramm]]&lt;br /&gt;
*operationale Semantik&lt;br /&gt;
*denotationale Semantik&lt;br /&gt;
*verbale Semantik&lt;br /&gt;
&lt;br /&gt;
==3.1. Kapitel==&lt;br /&gt;
* [[Variable]]&lt;br /&gt;
*Deklaration&lt;br /&gt;
* [[Datentyp]]&lt;br /&gt;
*Initialisierung&lt;br /&gt;
* [[Integer]]&lt;br /&gt;
* [[Byte]] (Javadatentyp)&lt;br /&gt;
* [[Long]]&lt;br /&gt;
* [[Short]]&lt;br /&gt;
* [[Float]]&lt;br /&gt;
* [[Double]]&lt;br /&gt;
* [[Ausdruck]]&lt;br /&gt;
* [[Rückgabe]]&lt;br /&gt;
* [[Methode]]&lt;br /&gt;
* [[Zuweisung]]&lt;br /&gt;
*Wert&lt;br /&gt;
* [[Operator | Kurzformen]] (+=)&lt;br /&gt;
*Hilfsvariale&lt;br /&gt;
* [[Primitive Datentypen]]&lt;br /&gt;
*konstruierter, komplexer Datentyp&lt;br /&gt;
* [[Speicheraddresse]]&lt;br /&gt;
*Bedeutung Gleichzeichen&lt;br /&gt;
* [[Operator | Operation]]&lt;br /&gt;
* [[Boolean]]&lt;br /&gt;
*[[Operator#Priotitäten von Operatoren | Priotitäten von Operatoren ]]&lt;br /&gt;
* [[Char]]&lt;br /&gt;
*Konstante&lt;br /&gt;
*Steuerzeichen&lt;br /&gt;
* [[String]]&lt;br /&gt;
* [[new | new-Operator]]&lt;br /&gt;
*Streng getypte Sprache&lt;br /&gt;
*Typkomplexität&lt;br /&gt;
*Implizite Typanpassung&lt;br /&gt;
&lt;br /&gt;
==3.2. Kapitel==&lt;br /&gt;
* [[Kontrollstruktur]]&lt;br /&gt;
* [[Sequenz]]&lt;br /&gt;
* [[Block]]&lt;br /&gt;
* [[Bedingte Anweisung]]&lt;br /&gt;
* [[Bedinung]]&lt;br /&gt;
* [[Fallunterscheidung | switch]]&lt;br /&gt;
* [[Schleife | Iteration]]&lt;br /&gt;
* [[Schleife]]&lt;br /&gt;
* [[while | while-Schleife]]&lt;br /&gt;
* [[do | do-while-Schleife]]&lt;br /&gt;
* [[for | for-Schleife]]&lt;br /&gt;
&lt;br /&gt;
==3.3. Kaptiel==&lt;br /&gt;
*die 3 Teile/Struktur einer Schleife&lt;br /&gt;
* [[Schleife#Laufvariable | Laufvariable]]&lt;br /&gt;
* [[Schleife | continue]]&lt;br /&gt;
* [[Schleife | break]]&lt;br /&gt;
&lt;br /&gt;
==4. Kapitel==&lt;br /&gt;
* [[Unterprogramm]]&lt;br /&gt;
* [[Funktion]]&lt;br /&gt;
* [[Prozedur]]&lt;br /&gt;
* [[Rückgabewert]]&lt;br /&gt;
* [[Parameter]]&lt;br /&gt;
* prozedurale (funkt.) Abstraktion&lt;br /&gt;
* [[main | Main-Methode]]&lt;br /&gt;
* [[public]]&lt;br /&gt;
* [[static]]&lt;br /&gt;
* top-down Entwurf&lt;br /&gt;
* [[globale Variablen]]&lt;br /&gt;
* Kommunikation über Parameter&lt;br /&gt;
* Variablenparameter&lt;br /&gt;
* Werteparameter&lt;br /&gt;
* [[call by value]]&lt;br /&gt;
* [[lokale Variable | funktionslokal]]&lt;br /&gt;
* [[call by reference]]&lt;br /&gt;
* [[Stack | Abarbeitung von Funktionsaufrufen]]&lt;br /&gt;
* Verwaltungsinformation&lt;br /&gt;
* [[Programmcode]]&lt;br /&gt;
* [[Heap]]&lt;br /&gt;
* [[Stack]]&lt;br /&gt;
* [[Rekursion | Rekursive Funktion]]&lt;br /&gt;
* Terminierungsbedingung&lt;br /&gt;
* Türme von Hanoi&lt;br /&gt;
&lt;br /&gt;
==5. Kapitel==&lt;br /&gt;
* [[Array]]&lt;br /&gt;
* [[Datenstruktur]]&lt;br /&gt;
* Vektor / Matrix&lt;br /&gt;
* Dimensierung&lt;br /&gt;
* Zuweisung (Array)&lt;br /&gt;
* [[Sortieralgorithmen]]&lt;br /&gt;
* Internes Sortieren&lt;br /&gt;
* Aufwand&lt;br /&gt;
* [[O-Notation]]&lt;br /&gt;
* externes Sortieren&lt;br /&gt;
* Einfügen&lt;br /&gt;
* Verschmelzen&lt;br /&gt;
* [[Heapsort]]&lt;br /&gt;
* [[binärer Baum]]&lt;br /&gt;
* Heapify&lt;br /&gt;
&lt;br /&gt;
==6. Kapitel==&lt;br /&gt;
* [[Klasse]]&lt;br /&gt;
* [[Objekt]]&lt;br /&gt;
* [[Objekt | Instanz]]&lt;br /&gt;
* [[Vererbung]]&lt;br /&gt;
* [[Interface]]&lt;br /&gt;
* [[Programm | Java-Programm]]&lt;br /&gt;
* -&amp;gt;Rumpf&lt;br /&gt;
* -&amp;gt;Kopf&lt;br /&gt;
* Klassendefinition&lt;br /&gt;
* Methodendefinition&lt;br /&gt;
* [[Attribut]]&lt;br /&gt;
* [[Methode]]&lt;br /&gt;
* -&amp;gt;Deklaration&lt;br /&gt;
* -&amp;gt;Definition&lt;br /&gt;
* -&amp;gt;Aufruf&lt;br /&gt;
* [[private]]&lt;br /&gt;
* [[public]]&lt;br /&gt;
* [[main]]&lt;br /&gt;
* [[Testklasse]]&lt;br /&gt;
* [[Konstruktor]]&lt;br /&gt;
* [[Referenzen]]&lt;br /&gt;
* Parameterübergabe&lt;br /&gt;
* [[Attribut | Klassenatribute/-methoden]]&lt;br /&gt;
* [[Überladen]] von Methoden&lt;br /&gt;
* [[this]]&lt;br /&gt;
* [[Überdecken]] von Attributen&lt;br /&gt;
&lt;br /&gt;
==7. Kapitel==&lt;br /&gt;
* [[Vererbung]]&lt;br /&gt;
* [[Superklasse]]&lt;br /&gt;
* [[Subklasse]]&lt;br /&gt;
* Abstraktion&lt;br /&gt;
* Spezialisierung&lt;br /&gt;
* [[extends]]&lt;br /&gt;
* [[protected]]&lt;br /&gt;
* [[final]]&lt;br /&gt;
* [[abstrakte Methode]]&lt;br /&gt;
* [[abstrakte Klasse]]&lt;br /&gt;
* [[Polymorphie]]&lt;br /&gt;
* Vererbungshierarchie&lt;br /&gt;
&lt;br /&gt;
==8. Kapitel==&lt;br /&gt;
*Dynamische Datenstruktur&lt;br /&gt;
*Liste&lt;br /&gt;
*lineare Liste&lt;br /&gt;
*doppeltverkettete Liste&lt;br /&gt;
*Bäume&lt;br /&gt;
*binärer Suchbaum&lt;br /&gt;
*Graph&lt;br /&gt;
*ungerichtete Graphen&lt;br /&gt;
*gerichtete Graphen&lt;br /&gt;
*Stack&lt;br /&gt;
*Schlangen (queue)&lt;br /&gt;
*Mengen&lt;br /&gt;
*null&lt;br /&gt;
*Wurzel&lt;br /&gt;
*Knoten&lt;br /&gt;
*Blatt&lt;br /&gt;
*Punkt-Operator&lt;br /&gt;
*Vollständige Induktion&lt;br /&gt;
*balancierter Baum&lt;br /&gt;
*AVL-Baum&lt;br /&gt;
*Tiefendurchlauf&lt;br /&gt;
*preorder&lt;br /&gt;
*inorder&lt;br /&gt;
*postorder&lt;br /&gt;
*Breitendurchlauf&lt;br /&gt;
&lt;br /&gt;
==weitere Begriffe==&lt;br /&gt;
[[Schlüsselwörter]]&lt;br /&gt;
&lt;br /&gt;
==fehlende Begriffe==&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Boolesche_Algebra&amp;diff=1783</id>
		<title>Boolesche Algebra</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Boolesche_Algebra&amp;diff=1783"/>
				<updated>2016-09-07T19:35:53Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Disjunktion (OR) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die '''boolesche Algebra''' ist eine algebraische Struktur und beschreibt die Operationen '''UND''', '''ODER''' und '''NICHT''', die auf logische Aussagen angewendet werden können. Die Kenntnis dieser Struktur ist hilfreich für den Umgang mit dem [[Datentyp]] [[boolean]].&lt;br /&gt;
&lt;br /&gt;
==Die booleschen Operatoren==&lt;br /&gt;
&lt;br /&gt;
===Konjunktion (AND)===&lt;br /&gt;
&lt;br /&gt;
Die '''Konjunktion''' ist eine der grundlegenden logischen Verknüpfungen der Aussagenlogik. Die Konjunktion zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn ''A'' '''und''' ''B'' (sowohl als auch) wahr sind. Das mathematische Symbol ist '''&amp;amp;and;'''. In [[Java]] wird das '''AND''' durch '''&amp;amp;&amp;amp;''' repräsentiert.&lt;br /&gt;
[[Datei:venn_and.png|right]]&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;and; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''false''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Disjunktion (OR)===&lt;br /&gt;
&lt;br /&gt;
Die '''Disjunktion''' ist eine der grundlegenden logischen Verknüpfungen der Aussagenlogik. Die Disjunktion zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn mindestens eine der Aussagen ''A'' '''oder''' ''B'' wahr ist. Das mathematische Symbol ist '''&amp;amp;or;'''. In [[Java]] wird das '''OR''' durch '''||''' repräsentiert.&lt;br /&gt;
&lt;br /&gt;
[[Datei:venn_or.png|right]]&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;or; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''true''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
===Negation (NOT)===&lt;br /&gt;
&lt;br /&gt;
Die '''Negation''' ist eine wichtige Operation in der Aussagenlogik. Die Negation einer Aussage ''A'' führt zur ihrer Verneinung. Das heißt aus einer wahren Aussage wird eine falsche Aussage und umgekehrt. Das mathematische Symbol ist '''&amp;amp;not;'''. In [[Java]] wird das '''NOT''' durch '''!''' repräsentiert.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! &amp;amp;not;A&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' || ''false''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Kontravalenz (XOR)===&lt;br /&gt;
&lt;br /&gt;
Die '''Kontravalenz''' ist eine erweiterte logische Verknüpfung in der Aussagenlogik. Die Kontravalenz zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn '''entweder''' ''A'' '''oder''' ''B'', aber nicht beide wahr sind. Das mathematische Symbol ist '''⊕'''. In [[Java]] wird das '''XOR''' durch '''^''' repräsentiert.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A ⊕ B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''true''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''false''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
===Implikation===&lt;br /&gt;
&lt;br /&gt;
Die '''Implikation''' ist eine erweiterte logische Verknüpfung in der Aussagenlogik. Die Implikation zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn ''A'' falsch oder ''B'' wahr ist. Das mathematische Symbol ist '''&amp;amp;rArr;'''. Die Implikation ist semantisch äquivalent zu &amp;amp;not;A &amp;amp;or; B. In [[Java]] gibt es keinen Implikationsoperator. &lt;br /&gt;
&lt;br /&gt;
Eine Implikation wird im Deutschen meistens durch &amp;quot;'''wenn''' ''A'', '''dann''' ''B''&amp;quot; ausgedrückt. Es handelt sich hierbei um eine einfache Folgerung. Aus einer falschen Ausgangsaussage '''A''' lässt sich alles folgern, daher kann die Gesamtaussage nicht falsch werden. &lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;rArr; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''true''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
===Äquivalenz (XNOR)===&lt;br /&gt;
&lt;br /&gt;
Die '''Äquivalenz''' ist eine erweiterte logische Verknüpfung in der Aussagenlogik. Die Äquivalenz zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn ''A'' und ''B'' wahr oder ''A'' und ''B'' falsch sind. Das mathematische Symbol ist '''&amp;amp;hArr;'''. Die Äquivalenz ist semantisch äquivalent zu A &amp;amp;and; B &amp;amp;or; &amp;amp;not;A &amp;amp;and; &amp;amp;not;B. In [[Java]] gibt es keinen Operator hierfür. &lt;br /&gt;
&lt;br /&gt;
Die Äquivalenz wird im Deutschen meistens durch &amp;quot;'''genau dann''' ''A'', '''wenn''' ''B''&amp;quot; ausgedrückt. &amp;quot;Genau&amp;quot; heißt immer und nur unter dieser Bedingung. '''A''' gilt genau dann, wenn '''B''' gilt. '''A''' und '''B''' sind äquivalent, also austauschbar. Das heißt die vorherige Aussage gilt auch anders herum: '''B''' gilt genau dann, wenn '''A''' gilt.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;hArr; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''false''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
==Peano-Axiome (erweitertes Wissen)==&lt;br /&gt;
&lt;br /&gt;
===Kommutativgesetze===&lt;br /&gt;
&lt;br /&gt;
(1) ''A'' &amp;amp;and; ''B'' &amp;amp;equiv; ''B'' &amp;amp;and; ''A''&lt;br /&gt;
&lt;br /&gt;
(1') ''A'' &amp;amp;or; ''B'' &amp;amp;equiv; ''B'' &amp;amp;or; ''A''&lt;br /&gt;
&lt;br /&gt;
Das Vertauschen der Argumente ''A'' und ''B'' ist hier möglich, ohne dass sich das Ergebnis der Operation ändert.&lt;br /&gt;
&lt;br /&gt;
===Assoziativgesetze===&lt;br /&gt;
&lt;br /&gt;
(2) (''A'' &amp;amp;and; ''B'') &amp;amp;and; ''C'' &amp;amp;equiv; ''A'' &amp;amp;and; (''B'' &amp;amp;and; ''C'')&lt;br /&gt;
&lt;br /&gt;
(2') (''A'' &amp;amp;or; ''B'') &amp;amp;or; ''C'' &amp;amp;equiv; ''A'' &amp;amp;or; (''B'' &amp;amp;or; ''C'')&lt;br /&gt;
&lt;br /&gt;
Die Klammerung der oben durchgeführten Operationen hat keinen Einfluss auf das Ergebnis.&lt;br /&gt;
&lt;br /&gt;
===Idempotenzgesetze===&lt;br /&gt;
&lt;br /&gt;
(3) ''A'' &amp;amp;and; ''A'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
(3') ''A'' &amp;amp;or; ''A'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaften des Arguments ''A'' bleiben bestehen, auch wenn dieses mit sich selbst verknüpft wird.&lt;br /&gt;
&lt;br /&gt;
===Distributivgesetze===&lt;br /&gt;
&lt;br /&gt;
(4) ''A'' &amp;amp;and; (''B'' &amp;amp;or; ''C'') &amp;amp;equiv; (''A'' &amp;amp;and; ''B'') &amp;amp;or; (''A'' &amp;amp;and; ''C'')&lt;br /&gt;
&lt;br /&gt;
(4') ''A'' &amp;amp;or; (''B'' &amp;amp;and; ''C'') &amp;amp;equiv; (''A'' &amp;amp;or; ''B'') &amp;amp;and; (''A'' &amp;amp;or; ''C'')&lt;br /&gt;
&lt;br /&gt;
Auswirkung des Auflösens von Klammern um Verknüpfungen von Operationen; ähnlich dem &amp;quot;Ausmultiplizieren&amp;quot; in der Schulmathematik.&lt;br /&gt;
&lt;br /&gt;
===Neutralitätsgesetze===&lt;br /&gt;
&lt;br /&gt;
(5) ''A'' &amp;amp;and; ''true'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
(5') ''A'' &amp;amp;or; ''false'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
Der Wert des Argumentes ''A'' wird durch die oben ausgeführten Operationen nicht verändert.&lt;br /&gt;
&lt;br /&gt;
===Extremalgesetze===&lt;br /&gt;
&lt;br /&gt;
(6) ''A'' &amp;amp;and; ''false'' &amp;amp;equiv; ''false''&lt;br /&gt;
&lt;br /&gt;
(6') ''A'' &amp;amp;or; ''true'' &amp;amp;equiv; ''true''&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis der oben beschriebenen Operationen ist unabhängig vom Wert des Arguments ''A''.&lt;br /&gt;
&lt;br /&gt;
===Doppelnegationsgesetz===&lt;br /&gt;
&lt;br /&gt;
(7) &amp;amp;not;(&amp;amp;not;''A'') &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Doppelte Verneinung&amp;quot;: Der Wert von ''A'' wird durch zweimaliges Ausführen des &amp;amp;not; -Operators nicht beeinflusst.&lt;br /&gt;
&lt;br /&gt;
===De Morgansche Gesetze===&lt;br /&gt;
&lt;br /&gt;
(8) &amp;amp;not;(''A'' &amp;amp;and; ''B'') &amp;amp;equiv; &amp;amp;not;''A'' &amp;amp;or; &amp;amp;not;''B''&lt;br /&gt;
&lt;br /&gt;
(8') &amp;amp;not;(''A'' &amp;amp;or; ''B'') &amp;amp;equiv; &amp;amp;not;''A'' &amp;amp;and; &amp;amp;not;''B''&lt;br /&gt;
&lt;br /&gt;
Alltagsbeispiele:&lt;br /&gt;
&lt;br /&gt;
(8) Peter hat sich einen Tee zubereitet, in dem nicht Zitronensaft und Zucker enthalten sind.&lt;br /&gt;
Beschreibe die Boolesche Variable '''A''' den Zustand, dass Zucker im Tee ist und '''B''' den Zustand, dass sich Zitronensaft im Tee befindet. Dann lautet die Antwort auf die Frage, ob Peters Tee Zucker und Zitronensaft (beides auf einmal) beinhaltet (also '''A''' = '''true''' und '''B''' = '''true''':&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;(''A'' &amp;amp;and; ''B'') = &amp;amp;not;(''true'' &amp;amp;and; ''true'') = &amp;amp;not;''true'' =''false''.  In Peters Tee ist kein Zitronensaft und Zucker.&lt;br /&gt;
&lt;br /&gt;
Diese Aussage ist äquivalent zu der Aussage &amp;quot;In Peters Tee ist kein Zitronensaft oder kein Zucker&amp;quot; (also mindestens eins von beiden ist nicht enthalten). Das heißt bei gleicher Belegung der Variablen erhält man das gleiche Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;''A'' &amp;amp;or; &amp;amp;not;''B'' = &amp;amp;not;''true'' &amp;amp;or; &amp;amp;not;''true'' = ''false'' &amp;amp;or; ''false'' = false. &lt;br /&gt;
&lt;br /&gt;
Damit die jeweilige Aussage wahr ist, muss mindestens eine der beiden Zutaten nicht in Peters Tee enthalten sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(8') Petras Kaffee enthält nicht Milch oder Zucker. Die Variable '''A''' beschreibe den Zustand, dass der Kaffee Milch enthält und '''B''', dass Zucker enthalten ist. Die Antwort auf die Frage, ob der Kaffee Milch aber keinen Zucker enthält (also '''A''' = '''true''' und '''B''' = '''false''') lautet dementsprechend:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;(''A'' &amp;amp;or; ''B'') =&amp;amp;not;(''true'' &amp;amp;or; ''false'') = &amp;amp;not;''true'' = ''false''. In Petras Kaffee ist weder Milch noch Zucker.&lt;br /&gt;
&lt;br /&gt;
Diese Aussage ist äquivalent zu &amp;quot;Petras Kaffee enthält keine Milch und keinen Zucker.&amp;quot; Das heißt bei gleicher Belegung der Variablen kommt das gleiche Ergebnis heraus:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;''A'' &amp;amp;and; &amp;amp;not;''B'' = &amp;amp;not;''true'' &amp;amp;and; &amp;amp;not;''false'' = ''false'' &amp;amp;and; ''true'' = ''false''.&lt;br /&gt;
&lt;br /&gt;
===Komplementärgesetze===&lt;br /&gt;
&lt;br /&gt;
(9) ''A'' &amp;amp;and; &amp;amp;not;''A'' &amp;amp;equiv; ''false''&lt;br /&gt;
&lt;br /&gt;
(9') ''A'' &amp;amp;or; &amp;amp;not;''A'' &amp;amp;equiv; ''true''&lt;br /&gt;
&lt;br /&gt;
Es können nicht gleichzeitig ''A'' und die Negation von ''A'' gelten: Beispielsweise kann der Himmel nicht gleichzeitig blau und nicht-blau sein (9).&lt;br /&gt;
Allerdings ist der Himmel entweder blau oder nicht-blau gefärbt (9').&lt;br /&gt;
&lt;br /&gt;
===Dualitätsgesetze===&lt;br /&gt;
&lt;br /&gt;
(10) &amp;amp;not;false &amp;amp;equiv; true&lt;br /&gt;
&lt;br /&gt;
(10') &amp;amp;not;true &amp;amp;equiv; false&lt;br /&gt;
&lt;br /&gt;
Der Wert '''true''' ist das Komplement zu '''false'''. Ist eine Aussage nicht-wahr, so ist sie falsch. Umgekehrt gilt für eine nicht-falsche Aussage, dass sie wahr sein muss.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Boolesche_Algebra&amp;diff=1782</id>
		<title>Boolesche Algebra</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Boolesche_Algebra&amp;diff=1782"/>
				<updated>2016-09-07T19:35:45Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Disjunktion (OR) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die '''boolesche Algebra''' ist eine algebraische Struktur und beschreibt die Operationen '''UND''', '''ODER''' und '''NICHT''', die auf logische Aussagen angewendet werden können. Die Kenntnis dieser Struktur ist hilfreich für den Umgang mit dem [[Datentyp]] [[boolean]].&lt;br /&gt;
&lt;br /&gt;
==Die booleschen Operatoren==&lt;br /&gt;
&lt;br /&gt;
===Konjunktion (AND)===&lt;br /&gt;
&lt;br /&gt;
Die '''Konjunktion''' ist eine der grundlegenden logischen Verknüpfungen der Aussagenlogik. Die Konjunktion zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn ''A'' '''und''' ''B'' (sowohl als auch) wahr sind. Das mathematische Symbol ist '''&amp;amp;and;'''. In [[Java]] wird das '''AND''' durch '''&amp;amp;&amp;amp;''' repräsentiert.&lt;br /&gt;
[[Datei:venn_and.png|right]]&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;and; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''false''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Disjunktion (OR)===&lt;br /&gt;
&lt;br /&gt;
Die '''Disjunktion''' ist eine der grundlegenden logischen Verknüpfungen der Aussagenlogik. Die Disjunktion zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn mindestens eine der Aussagen ''A'' '''oder''' ''B'' wahr ist. Das mathematische Symbol ist '''&amp;amp;or;'''. In [[Java]] wird das '''OR''' durch '''||''' repräsentiert.&lt;br /&gt;
&lt;br /&gt;
[[Datei:venn_or.png]]&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;or; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''true''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
===Negation (NOT)===&lt;br /&gt;
&lt;br /&gt;
Die '''Negation''' ist eine wichtige Operation in der Aussagenlogik. Die Negation einer Aussage ''A'' führt zur ihrer Verneinung. Das heißt aus einer wahren Aussage wird eine falsche Aussage und umgekehrt. Das mathematische Symbol ist '''&amp;amp;not;'''. In [[Java]] wird das '''NOT''' durch '''!''' repräsentiert.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! &amp;amp;not;A&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' || ''false''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Kontravalenz (XOR)===&lt;br /&gt;
&lt;br /&gt;
Die '''Kontravalenz''' ist eine erweiterte logische Verknüpfung in der Aussagenlogik. Die Kontravalenz zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn '''entweder''' ''A'' '''oder''' ''B'', aber nicht beide wahr sind. Das mathematische Symbol ist '''⊕'''. In [[Java]] wird das '''XOR''' durch '''^''' repräsentiert.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A ⊕ B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''true''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''false''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
===Implikation===&lt;br /&gt;
&lt;br /&gt;
Die '''Implikation''' ist eine erweiterte logische Verknüpfung in der Aussagenlogik. Die Implikation zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn ''A'' falsch oder ''B'' wahr ist. Das mathematische Symbol ist '''&amp;amp;rArr;'''. Die Implikation ist semantisch äquivalent zu &amp;amp;not;A &amp;amp;or; B. In [[Java]] gibt es keinen Implikationsoperator. &lt;br /&gt;
&lt;br /&gt;
Eine Implikation wird im Deutschen meistens durch &amp;quot;'''wenn''' ''A'', '''dann''' ''B''&amp;quot; ausgedrückt. Es handelt sich hierbei um eine einfache Folgerung. Aus einer falschen Ausgangsaussage '''A''' lässt sich alles folgern, daher kann die Gesamtaussage nicht falsch werden. &lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;rArr; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''true''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
===Äquivalenz (XNOR)===&lt;br /&gt;
&lt;br /&gt;
Die '''Äquivalenz''' ist eine erweiterte logische Verknüpfung in der Aussagenlogik. Die Äquivalenz zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn ''A'' und ''B'' wahr oder ''A'' und ''B'' falsch sind. Das mathematische Symbol ist '''&amp;amp;hArr;'''. Die Äquivalenz ist semantisch äquivalent zu A &amp;amp;and; B &amp;amp;or; &amp;amp;not;A &amp;amp;and; &amp;amp;not;B. In [[Java]] gibt es keinen Operator hierfür. &lt;br /&gt;
&lt;br /&gt;
Die Äquivalenz wird im Deutschen meistens durch &amp;quot;'''genau dann''' ''A'', '''wenn''' ''B''&amp;quot; ausgedrückt. &amp;quot;Genau&amp;quot; heißt immer und nur unter dieser Bedingung. '''A''' gilt genau dann, wenn '''B''' gilt. '''A''' und '''B''' sind äquivalent, also austauschbar. Das heißt die vorherige Aussage gilt auch anders herum: '''B''' gilt genau dann, wenn '''A''' gilt.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;hArr; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''false''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
==Peano-Axiome (erweitertes Wissen)==&lt;br /&gt;
&lt;br /&gt;
===Kommutativgesetze===&lt;br /&gt;
&lt;br /&gt;
(1) ''A'' &amp;amp;and; ''B'' &amp;amp;equiv; ''B'' &amp;amp;and; ''A''&lt;br /&gt;
&lt;br /&gt;
(1') ''A'' &amp;amp;or; ''B'' &amp;amp;equiv; ''B'' &amp;amp;or; ''A''&lt;br /&gt;
&lt;br /&gt;
Das Vertauschen der Argumente ''A'' und ''B'' ist hier möglich, ohne dass sich das Ergebnis der Operation ändert.&lt;br /&gt;
&lt;br /&gt;
===Assoziativgesetze===&lt;br /&gt;
&lt;br /&gt;
(2) (''A'' &amp;amp;and; ''B'') &amp;amp;and; ''C'' &amp;amp;equiv; ''A'' &amp;amp;and; (''B'' &amp;amp;and; ''C'')&lt;br /&gt;
&lt;br /&gt;
(2') (''A'' &amp;amp;or; ''B'') &amp;amp;or; ''C'' &amp;amp;equiv; ''A'' &amp;amp;or; (''B'' &amp;amp;or; ''C'')&lt;br /&gt;
&lt;br /&gt;
Die Klammerung der oben durchgeführten Operationen hat keinen Einfluss auf das Ergebnis.&lt;br /&gt;
&lt;br /&gt;
===Idempotenzgesetze===&lt;br /&gt;
&lt;br /&gt;
(3) ''A'' &amp;amp;and; ''A'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
(3') ''A'' &amp;amp;or; ''A'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaften des Arguments ''A'' bleiben bestehen, auch wenn dieses mit sich selbst verknüpft wird.&lt;br /&gt;
&lt;br /&gt;
===Distributivgesetze===&lt;br /&gt;
&lt;br /&gt;
(4) ''A'' &amp;amp;and; (''B'' &amp;amp;or; ''C'') &amp;amp;equiv; (''A'' &amp;amp;and; ''B'') &amp;amp;or; (''A'' &amp;amp;and; ''C'')&lt;br /&gt;
&lt;br /&gt;
(4') ''A'' &amp;amp;or; (''B'' &amp;amp;and; ''C'') &amp;amp;equiv; (''A'' &amp;amp;or; ''B'') &amp;amp;and; (''A'' &amp;amp;or; ''C'')&lt;br /&gt;
&lt;br /&gt;
Auswirkung des Auflösens von Klammern um Verknüpfungen von Operationen; ähnlich dem &amp;quot;Ausmultiplizieren&amp;quot; in der Schulmathematik.&lt;br /&gt;
&lt;br /&gt;
===Neutralitätsgesetze===&lt;br /&gt;
&lt;br /&gt;
(5) ''A'' &amp;amp;and; ''true'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
(5') ''A'' &amp;amp;or; ''false'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
Der Wert des Argumentes ''A'' wird durch die oben ausgeführten Operationen nicht verändert.&lt;br /&gt;
&lt;br /&gt;
===Extremalgesetze===&lt;br /&gt;
&lt;br /&gt;
(6) ''A'' &amp;amp;and; ''false'' &amp;amp;equiv; ''false''&lt;br /&gt;
&lt;br /&gt;
(6') ''A'' &amp;amp;or; ''true'' &amp;amp;equiv; ''true''&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis der oben beschriebenen Operationen ist unabhängig vom Wert des Arguments ''A''.&lt;br /&gt;
&lt;br /&gt;
===Doppelnegationsgesetz===&lt;br /&gt;
&lt;br /&gt;
(7) &amp;amp;not;(&amp;amp;not;''A'') &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Doppelte Verneinung&amp;quot;: Der Wert von ''A'' wird durch zweimaliges Ausführen des &amp;amp;not; -Operators nicht beeinflusst.&lt;br /&gt;
&lt;br /&gt;
===De Morgansche Gesetze===&lt;br /&gt;
&lt;br /&gt;
(8) &amp;amp;not;(''A'' &amp;amp;and; ''B'') &amp;amp;equiv; &amp;amp;not;''A'' &amp;amp;or; &amp;amp;not;''B''&lt;br /&gt;
&lt;br /&gt;
(8') &amp;amp;not;(''A'' &amp;amp;or; ''B'') &amp;amp;equiv; &amp;amp;not;''A'' &amp;amp;and; &amp;amp;not;''B''&lt;br /&gt;
&lt;br /&gt;
Alltagsbeispiele:&lt;br /&gt;
&lt;br /&gt;
(8) Peter hat sich einen Tee zubereitet, in dem nicht Zitronensaft und Zucker enthalten sind.&lt;br /&gt;
Beschreibe die Boolesche Variable '''A''' den Zustand, dass Zucker im Tee ist und '''B''' den Zustand, dass sich Zitronensaft im Tee befindet. Dann lautet die Antwort auf die Frage, ob Peters Tee Zucker und Zitronensaft (beides auf einmal) beinhaltet (also '''A''' = '''true''' und '''B''' = '''true''':&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;(''A'' &amp;amp;and; ''B'') = &amp;amp;not;(''true'' &amp;amp;and; ''true'') = &amp;amp;not;''true'' =''false''.  In Peters Tee ist kein Zitronensaft und Zucker.&lt;br /&gt;
&lt;br /&gt;
Diese Aussage ist äquivalent zu der Aussage &amp;quot;In Peters Tee ist kein Zitronensaft oder kein Zucker&amp;quot; (also mindestens eins von beiden ist nicht enthalten). Das heißt bei gleicher Belegung der Variablen erhält man das gleiche Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;''A'' &amp;amp;or; &amp;amp;not;''B'' = &amp;amp;not;''true'' &amp;amp;or; &amp;amp;not;''true'' = ''false'' &amp;amp;or; ''false'' = false. &lt;br /&gt;
&lt;br /&gt;
Damit die jeweilige Aussage wahr ist, muss mindestens eine der beiden Zutaten nicht in Peters Tee enthalten sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(8') Petras Kaffee enthält nicht Milch oder Zucker. Die Variable '''A''' beschreibe den Zustand, dass der Kaffee Milch enthält und '''B''', dass Zucker enthalten ist. Die Antwort auf die Frage, ob der Kaffee Milch aber keinen Zucker enthält (also '''A''' = '''true''' und '''B''' = '''false''') lautet dementsprechend:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;(''A'' &amp;amp;or; ''B'') =&amp;amp;not;(''true'' &amp;amp;or; ''false'') = &amp;amp;not;''true'' = ''false''. In Petras Kaffee ist weder Milch noch Zucker.&lt;br /&gt;
&lt;br /&gt;
Diese Aussage ist äquivalent zu &amp;quot;Petras Kaffee enthält keine Milch und keinen Zucker.&amp;quot; Das heißt bei gleicher Belegung der Variablen kommt das gleiche Ergebnis heraus:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;''A'' &amp;amp;and; &amp;amp;not;''B'' = &amp;amp;not;''true'' &amp;amp;and; &amp;amp;not;''false'' = ''false'' &amp;amp;and; ''true'' = ''false''.&lt;br /&gt;
&lt;br /&gt;
===Komplementärgesetze===&lt;br /&gt;
&lt;br /&gt;
(9) ''A'' &amp;amp;and; &amp;amp;not;''A'' &amp;amp;equiv; ''false''&lt;br /&gt;
&lt;br /&gt;
(9') ''A'' &amp;amp;or; &amp;amp;not;''A'' &amp;amp;equiv; ''true''&lt;br /&gt;
&lt;br /&gt;
Es können nicht gleichzeitig ''A'' und die Negation von ''A'' gelten: Beispielsweise kann der Himmel nicht gleichzeitig blau und nicht-blau sein (9).&lt;br /&gt;
Allerdings ist der Himmel entweder blau oder nicht-blau gefärbt (9').&lt;br /&gt;
&lt;br /&gt;
===Dualitätsgesetze===&lt;br /&gt;
&lt;br /&gt;
(10) &amp;amp;not;false &amp;amp;equiv; true&lt;br /&gt;
&lt;br /&gt;
(10') &amp;amp;not;true &amp;amp;equiv; false&lt;br /&gt;
&lt;br /&gt;
Der Wert '''true''' ist das Komplement zu '''false'''. Ist eine Aussage nicht-wahr, so ist sie falsch. Umgekehrt gilt für eine nicht-falsche Aussage, dass sie wahr sein muss.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Boolesche_Algebra&amp;diff=1781</id>
		<title>Boolesche Algebra</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Boolesche_Algebra&amp;diff=1781"/>
				<updated>2016-09-07T19:35:08Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Disjunktion (OR) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die '''boolesche Algebra''' ist eine algebraische Struktur und beschreibt die Operationen '''UND''', '''ODER''' und '''NICHT''', die auf logische Aussagen angewendet werden können. Die Kenntnis dieser Struktur ist hilfreich für den Umgang mit dem [[Datentyp]] [[boolean]].&lt;br /&gt;
&lt;br /&gt;
==Die booleschen Operatoren==&lt;br /&gt;
&lt;br /&gt;
===Konjunktion (AND)===&lt;br /&gt;
&lt;br /&gt;
Die '''Konjunktion''' ist eine der grundlegenden logischen Verknüpfungen der Aussagenlogik. Die Konjunktion zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn ''A'' '''und''' ''B'' (sowohl als auch) wahr sind. Das mathematische Symbol ist '''&amp;amp;and;'''. In [[Java]] wird das '''AND''' durch '''&amp;amp;&amp;amp;''' repräsentiert.&lt;br /&gt;
[[Datei:venn_and.png|right]]&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;and; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''false''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Disjunktion (OR)===&lt;br /&gt;
&lt;br /&gt;
Die '''Disjunktion''' ist eine der grundlegenden logischen Verknüpfungen der Aussagenlogik. Die Disjunktion zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn mindestens eine der Aussagen ''A'' '''oder''' ''B'' wahr ist. Das mathematische Symbol ist '''&amp;amp;or;'''. In [[Java]] wird das '''OR''' durch '''||''' repräsentiert.&lt;br /&gt;
&lt;br /&gt;
[[Datei:OR_VENN.jpg]]&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;or; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''true''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
===Negation (NOT)===&lt;br /&gt;
&lt;br /&gt;
Die '''Negation''' ist eine wichtige Operation in der Aussagenlogik. Die Negation einer Aussage ''A'' führt zur ihrer Verneinung. Das heißt aus einer wahren Aussage wird eine falsche Aussage und umgekehrt. Das mathematische Symbol ist '''&amp;amp;not;'''. In [[Java]] wird das '''NOT''' durch '''!''' repräsentiert.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! &amp;amp;not;A&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' || ''false''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Kontravalenz (XOR)===&lt;br /&gt;
&lt;br /&gt;
Die '''Kontravalenz''' ist eine erweiterte logische Verknüpfung in der Aussagenlogik. Die Kontravalenz zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn '''entweder''' ''A'' '''oder''' ''B'', aber nicht beide wahr sind. Das mathematische Symbol ist '''⊕'''. In [[Java]] wird das '''XOR''' durch '''^''' repräsentiert.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A ⊕ B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''true''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''false''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
===Implikation===&lt;br /&gt;
&lt;br /&gt;
Die '''Implikation''' ist eine erweiterte logische Verknüpfung in der Aussagenlogik. Die Implikation zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn ''A'' falsch oder ''B'' wahr ist. Das mathematische Symbol ist '''&amp;amp;rArr;'''. Die Implikation ist semantisch äquivalent zu &amp;amp;not;A &amp;amp;or; B. In [[Java]] gibt es keinen Implikationsoperator. &lt;br /&gt;
&lt;br /&gt;
Eine Implikation wird im Deutschen meistens durch &amp;quot;'''wenn''' ''A'', '''dann''' ''B''&amp;quot; ausgedrückt. Es handelt sich hierbei um eine einfache Folgerung. Aus einer falschen Ausgangsaussage '''A''' lässt sich alles folgern, daher kann die Gesamtaussage nicht falsch werden. &lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;rArr; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''true''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
===Äquivalenz (XNOR)===&lt;br /&gt;
&lt;br /&gt;
Die '''Äquivalenz''' ist eine erweiterte logische Verknüpfung in der Aussagenlogik. Die Äquivalenz zweier Aussagen ''A'' und ''B'' ist genau dann wahr, wenn ''A'' und ''B'' wahr oder ''A'' und ''B'' falsch sind. Das mathematische Symbol ist '''&amp;amp;hArr;'''. Die Äquivalenz ist semantisch äquivalent zu A &amp;amp;and; B &amp;amp;or; &amp;amp;not;A &amp;amp;and; &amp;amp;not;B. In [[Java]] gibt es keinen Operator hierfür. &lt;br /&gt;
&lt;br /&gt;
Die Äquivalenz wird im Deutschen meistens durch &amp;quot;'''genau dann''' ''A'', '''wenn''' ''B''&amp;quot; ausgedrückt. &amp;quot;Genau&amp;quot; heißt immer und nur unter dieser Bedingung. '''A''' gilt genau dann, wenn '''B''' gilt. '''A''' und '''B''' sind äquivalent, also austauschbar. Das heißt die vorherige Aussage gilt auch anders herum: '''B''' gilt genau dann, wenn '''A''' gilt.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=50% align=&amp;quot;center&amp;quot;&lt;br /&gt;
! A !! B !! A &amp;amp;hArr; B&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''false'' || ''true''&lt;br /&gt;
|-&lt;br /&gt;
| ''false'' || ''true'' || ''false''&lt;br /&gt;
|- &lt;br /&gt;
| ''true'' || ''false'' ||''false''&lt;br /&gt;
|-&lt;br /&gt;
| ''true'' ||''true'' || ''true''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''Venn-Diagramm?''&lt;br /&gt;
&lt;br /&gt;
==Peano-Axiome (erweitertes Wissen)==&lt;br /&gt;
&lt;br /&gt;
===Kommutativgesetze===&lt;br /&gt;
&lt;br /&gt;
(1) ''A'' &amp;amp;and; ''B'' &amp;amp;equiv; ''B'' &amp;amp;and; ''A''&lt;br /&gt;
&lt;br /&gt;
(1') ''A'' &amp;amp;or; ''B'' &amp;amp;equiv; ''B'' &amp;amp;or; ''A''&lt;br /&gt;
&lt;br /&gt;
Das Vertauschen der Argumente ''A'' und ''B'' ist hier möglich, ohne dass sich das Ergebnis der Operation ändert.&lt;br /&gt;
&lt;br /&gt;
===Assoziativgesetze===&lt;br /&gt;
&lt;br /&gt;
(2) (''A'' &amp;amp;and; ''B'') &amp;amp;and; ''C'' &amp;amp;equiv; ''A'' &amp;amp;and; (''B'' &amp;amp;and; ''C'')&lt;br /&gt;
&lt;br /&gt;
(2') (''A'' &amp;amp;or; ''B'') &amp;amp;or; ''C'' &amp;amp;equiv; ''A'' &amp;amp;or; (''B'' &amp;amp;or; ''C'')&lt;br /&gt;
&lt;br /&gt;
Die Klammerung der oben durchgeführten Operationen hat keinen Einfluss auf das Ergebnis.&lt;br /&gt;
&lt;br /&gt;
===Idempotenzgesetze===&lt;br /&gt;
&lt;br /&gt;
(3) ''A'' &amp;amp;and; ''A'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
(3') ''A'' &amp;amp;or; ''A'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaften des Arguments ''A'' bleiben bestehen, auch wenn dieses mit sich selbst verknüpft wird.&lt;br /&gt;
&lt;br /&gt;
===Distributivgesetze===&lt;br /&gt;
&lt;br /&gt;
(4) ''A'' &amp;amp;and; (''B'' &amp;amp;or; ''C'') &amp;amp;equiv; (''A'' &amp;amp;and; ''B'') &amp;amp;or; (''A'' &amp;amp;and; ''C'')&lt;br /&gt;
&lt;br /&gt;
(4') ''A'' &amp;amp;or; (''B'' &amp;amp;and; ''C'') &amp;amp;equiv; (''A'' &amp;amp;or; ''B'') &amp;amp;and; (''A'' &amp;amp;or; ''C'')&lt;br /&gt;
&lt;br /&gt;
Auswirkung des Auflösens von Klammern um Verknüpfungen von Operationen; ähnlich dem &amp;quot;Ausmultiplizieren&amp;quot; in der Schulmathematik.&lt;br /&gt;
&lt;br /&gt;
===Neutralitätsgesetze===&lt;br /&gt;
&lt;br /&gt;
(5) ''A'' &amp;amp;and; ''true'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
(5') ''A'' &amp;amp;or; ''false'' &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
Der Wert des Argumentes ''A'' wird durch die oben ausgeführten Operationen nicht verändert.&lt;br /&gt;
&lt;br /&gt;
===Extremalgesetze===&lt;br /&gt;
&lt;br /&gt;
(6) ''A'' &amp;amp;and; ''false'' &amp;amp;equiv; ''false''&lt;br /&gt;
&lt;br /&gt;
(6') ''A'' &amp;amp;or; ''true'' &amp;amp;equiv; ''true''&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis der oben beschriebenen Operationen ist unabhängig vom Wert des Arguments ''A''.&lt;br /&gt;
&lt;br /&gt;
===Doppelnegationsgesetz===&lt;br /&gt;
&lt;br /&gt;
(7) &amp;amp;not;(&amp;amp;not;''A'') &amp;amp;equiv; ''A''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Doppelte Verneinung&amp;quot;: Der Wert von ''A'' wird durch zweimaliges Ausführen des &amp;amp;not; -Operators nicht beeinflusst.&lt;br /&gt;
&lt;br /&gt;
===De Morgansche Gesetze===&lt;br /&gt;
&lt;br /&gt;
(8) &amp;amp;not;(''A'' &amp;amp;and; ''B'') &amp;amp;equiv; &amp;amp;not;''A'' &amp;amp;or; &amp;amp;not;''B''&lt;br /&gt;
&lt;br /&gt;
(8') &amp;amp;not;(''A'' &amp;amp;or; ''B'') &amp;amp;equiv; &amp;amp;not;''A'' &amp;amp;and; &amp;amp;not;''B''&lt;br /&gt;
&lt;br /&gt;
Alltagsbeispiele:&lt;br /&gt;
&lt;br /&gt;
(8) Peter hat sich einen Tee zubereitet, in dem nicht Zitronensaft und Zucker enthalten sind.&lt;br /&gt;
Beschreibe die Boolesche Variable '''A''' den Zustand, dass Zucker im Tee ist und '''B''' den Zustand, dass sich Zitronensaft im Tee befindet. Dann lautet die Antwort auf die Frage, ob Peters Tee Zucker und Zitronensaft (beides auf einmal) beinhaltet (also '''A''' = '''true''' und '''B''' = '''true''':&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;(''A'' &amp;amp;and; ''B'') = &amp;amp;not;(''true'' &amp;amp;and; ''true'') = &amp;amp;not;''true'' =''false''.  In Peters Tee ist kein Zitronensaft und Zucker.&lt;br /&gt;
&lt;br /&gt;
Diese Aussage ist äquivalent zu der Aussage &amp;quot;In Peters Tee ist kein Zitronensaft oder kein Zucker&amp;quot; (also mindestens eins von beiden ist nicht enthalten). Das heißt bei gleicher Belegung der Variablen erhält man das gleiche Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;''A'' &amp;amp;or; &amp;amp;not;''B'' = &amp;amp;not;''true'' &amp;amp;or; &amp;amp;not;''true'' = ''false'' &amp;amp;or; ''false'' = false. &lt;br /&gt;
&lt;br /&gt;
Damit die jeweilige Aussage wahr ist, muss mindestens eine der beiden Zutaten nicht in Peters Tee enthalten sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(8') Petras Kaffee enthält nicht Milch oder Zucker. Die Variable '''A''' beschreibe den Zustand, dass der Kaffee Milch enthält und '''B''', dass Zucker enthalten ist. Die Antwort auf die Frage, ob der Kaffee Milch aber keinen Zucker enthält (also '''A''' = '''true''' und '''B''' = '''false''') lautet dementsprechend:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;(''A'' &amp;amp;or; ''B'') =&amp;amp;not;(''true'' &amp;amp;or; ''false'') = &amp;amp;not;''true'' = ''false''. In Petras Kaffee ist weder Milch noch Zucker.&lt;br /&gt;
&lt;br /&gt;
Diese Aussage ist äquivalent zu &amp;quot;Petras Kaffee enthält keine Milch und keinen Zucker.&amp;quot; Das heißt bei gleicher Belegung der Variablen kommt das gleiche Ergebnis heraus:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;not;''A'' &amp;amp;and; &amp;amp;not;''B'' = &amp;amp;not;''true'' &amp;amp;and; &amp;amp;not;''false'' = ''false'' &amp;amp;and; ''true'' = ''false''.&lt;br /&gt;
&lt;br /&gt;
===Komplementärgesetze===&lt;br /&gt;
&lt;br /&gt;
(9) ''A'' &amp;amp;and; &amp;amp;not;''A'' &amp;amp;equiv; ''false''&lt;br /&gt;
&lt;br /&gt;
(9') ''A'' &amp;amp;or; &amp;amp;not;''A'' &amp;amp;equiv; ''true''&lt;br /&gt;
&lt;br /&gt;
Es können nicht gleichzeitig ''A'' und die Negation von ''A'' gelten: Beispielsweise kann der Himmel nicht gleichzeitig blau und nicht-blau sein (9).&lt;br /&gt;
Allerdings ist der Himmel entweder blau oder nicht-blau gefärbt (9').&lt;br /&gt;
&lt;br /&gt;
===Dualitätsgesetze===&lt;br /&gt;
&lt;br /&gt;
(10) &amp;amp;not;false &amp;amp;equiv; true&lt;br /&gt;
&lt;br /&gt;
(10') &amp;amp;not;true &amp;amp;equiv; false&lt;br /&gt;
&lt;br /&gt;
Der Wert '''true''' ist das Komplement zu '''false'''. Ist eine Aussage nicht-wahr, so ist sie falsch. Umgekehrt gilt für eine nicht-falsche Aussage, dass sie wahr sein muss.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Pseudocode&amp;diff=1702</id>
		<title>Pseudocode</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Pseudocode&amp;diff=1702"/>
				<updated>2016-08-12T20:36:22Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: Die Seite wurde neu angelegt: „'''Pseudocode''' nennt man die umgangssprachiche Formulierung von Algorithmen. Es ist eine willkürliche Art und Weise, angelehnt an die Syntax imperativer Pro…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Pseudocode''' nennt man die umgangssprachiche Formulierung von Algorithmen. Es ist eine willkürliche Art und Weise, angelehnt an die Syntax imperativer Programmiersprachen wie C oder Java, eine Folge von Anweisungen zu formulieren. Er wird verwendet um komplexere Algorithmen einfach niederschreiben und erklären zu können.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Mittelwert einer Zahlenfolge berechnen:&lt;br /&gt;
   Eingabe: Array von Zahlen&lt;br /&gt;
   Ausgabe: Mittelwert&lt;br /&gt;
   Algorithmus:&lt;br /&gt;
   Für jede Zahl der Zahlenfolge:&lt;br /&gt;
       Summe = Summe + Zahl&lt;br /&gt;
   Gebe zurück: Summe / Anzahl der Zahlen&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Eclipse&amp;diff=1701</id>
		<title>Eclipse</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Eclipse&amp;diff=1701"/>
				<updated>2016-08-12T19:02:51Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: Die Seite wurde neu angelegt: „'''Eclipse''' ist eine frei verfügbare IDE zur Entwicklung von Java Programmen.  = Download =  Das Programm ist auf der Webseite der [http://www.eclipse.o…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Eclipse''' ist eine frei verfügbare [[IDE]] zur Entwicklung von Java Programmen.&lt;br /&gt;
&lt;br /&gt;
= Download =&lt;br /&gt;
&lt;br /&gt;
Das Programm ist auf der Webseite der [http://www.eclipse.org Eclipse Foundation] verfügbar.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
Es gibt sowohl einen auf der Webseite verfügbaren Insterllationsassistenten als auch herunterladbare Archive. Eclipse selbst muss in der Regel nicht installiert werden, sondern kann einfach in ein beliebiges Verzeichnis im Dateisysstem entpackt und gestartet werden. Vorraussetzung dafür ist nur eine bereits installierte JVM.&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
== Arbeitsverzeichnis ==&lt;br /&gt;
&lt;br /&gt;
Beim ersten Start fragt Eclipse den Benutzer über die Angabe eines sogenannten &amp;quot;workspace&amp;quot;s. Dies ist das Verzeichnis, in welchem die Projekte und Java-Quelldateien gespeichert werden sollen.&lt;br /&gt;
&lt;br /&gt;
== Willkommensbildschirm ==&lt;br /&gt;
&lt;br /&gt;
Nach der Wahl des &amp;quot;workspace&amp;quot;s wird beim ersten Start vermutlich ein Willkommensbildschirm Sie begrüßen. Sie können diesen ganz einfach durch einen Klick auf den Button &amp;quot;Go to Workspace&amp;quot; verlassen.&lt;br /&gt;
&lt;br /&gt;
== Arbeitsoberfläche ==&lt;br /&gt;
&lt;br /&gt;
Die Arbeitsoberfläche von Eclipse ähnelt der vieler anderer Büroanwendungen. Sie bietet im oberen Bereich eine Werkzeugleiste für häufig verwendete Funktionen. Im Zentrum der Arbeitsoberfläche befindet sich der Bereich zum editieren von Dateien während am linken Rand eine Baumdarstellung der verwendeten Projekte zu finden ist.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Interpreter&amp;diff=1664</id>
		<title>Interpreter</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Interpreter&amp;diff=1664"/>
				<updated>2016-07-28T13:39:38Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein '''Interpreter''' ist ein Programm, welches ein anderes Programm ausführen kann. Dies klingt erstmal sehr redundant, hat jedoch folgenden Hintergrund:&lt;br /&gt;
&lt;br /&gt;
Für gewöhnlich wird ein menschenlesbares Programm von einem [[Compiler]] in ein von einer Maschine ausführbares Programm übersetzt. Dies limitiert die Ausführung des Programmes jedoch anschließend auf die Maschine, für die sie übersetzt wurde. Dies versucht man mit einem '''Interpreter''' zu umgehen. Ein '''Interpreter''' kann ein speziell für ihn geschriebenes Programm einlesen und die im Programm enthaltenen Befehle ausführen. Er dient quasi als Schnittstelle zwischen dem Programm und der eigentlichen Maschine. Dies nennt man dann auch ''ein Programm interpretieren''. Nun muss nur noch der Interpreter selbst auf verschiedene Maschinen ausgeliefert werden und alle für diesen Interpreter geschriebene Programme können auf jeder Maschine ausgeführt werden, für die ein passender Interpreter existiert.&lt;br /&gt;
&lt;br /&gt;
Die Sprache, die ein Interpreter interpretiert, ist meistens direkt die menschenlesbare Quellsprache. Dies hat jedoch meistens zur Folge, dass ein Interpreter sehr langsam läuft und unter umständen große Sicherheitslücken aufweist, da ein Programm in der Quellsprache zu interpretieren meist involviert, den gesamten Quelltext und all seine Abhängigkeiten gleichzeitig analysieren zu müssen, als sich auf sehr einfache Maschineninstruktionen verlassen zu können.&lt;br /&gt;
&lt;br /&gt;
Dieses Problem versuchen sogenannte '''Bytecodeinterpreter''', wie z.B. die [[JVM]], zu umgehen, indem sie nicht den Code der Quellsprache direkt interpretieren, sondern eine Zwischensprache interpretieren, die wesentlich effizienter und sicherer auszuführen ist und zuerst aus dem Quellcode der Quellsprache generiert werden muss. Dies reduziert jedoch nicht die portabilität des Programmes, da man das ein mal übersetzte Programm immernoch auf allen Maschinen ausführen kann, auf denen der passende Interpreter installiert ist.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Interpreter&amp;diff=1663</id>
		<title>Interpreter</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Interpreter&amp;diff=1663"/>
				<updated>2016-07-28T13:38:35Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein '''Interpreter''' ist ein Programm, welches ein anderes Programm ausführen kann. Dies klingt erstmal sehr redundant, hat jedoch folgenden Hintergrund:&lt;br /&gt;
&lt;br /&gt;
Für gewöhnlich wird ein menschenlesbares Programm von einem [[Compiler]] in ein von einer Maschine ausführbares Programm übersetzt. Dies limitiert die Ausführung des Programmes jedoch anschließend auf die Maschine, für die sie übersetzt wurde. Dies versucht man mit einem '''Interpreter''' zu umgehen. Ein '''Interpreter''' kann ein für ihn entwickelten Sprache geschriebenes Programm einlesen und die im Programm enthaltenen Befehle ausführen. Dies nennt man dann auch ''ein Programm interpretieren''. Nun muss nur noch der Interpreter selbst auf verschiedene Maschinen ausgeliefert werden und alle für diesen Interpreter geschriebene Programme können auf jeder Maschine ausgeführt werden, für die ein passender Interpreter existiert.&lt;br /&gt;
&lt;br /&gt;
Die Sprache, die ein Interpreter interpretiert, ist meistens direkt die menschenlesbare Quellsprache. Dies hat jedoch meistens zur Folge, dass ein Interpreter sehr langsam läuft und unter umständen große Sicherheitslücken aufweist, da ein Programm in der Quellsprache zu interpretieren meist involviert, den gesamten Quelltext und all seine Abhängigkeiten gleichzeitig analysieren zu müssen, als sich auf sehr einfache Maschineninstruktionen verlassen zu können.&lt;br /&gt;
&lt;br /&gt;
Dieses Problem versuchen sogenannte '''Bytecodeinterpreter''', wie z.B. die [[JVM]], zu umgehen, indem sie nicht den Code der Quellsprache direkt interpretieren, sondern eine Zwischensprache interpretieren, die wesentlich effizienter und sicherer auszuführen ist und zuerst aus dem Quellcode der Quellsprache generiert werden muss. Dies reduziert jedoch nicht die portabilität des Programmes, da man das ein mal übersetzte Programm immernoch auf allen Maschinen ausführen kann, auf denen der passende Interpreter installiert ist.&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Terminierung&amp;diff=1619</id>
		<title>Terminierung</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Terminierung&amp;diff=1619"/>
				<updated>2016-07-24T00:41:19Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: Die Seite wurde neu angelegt: „Unter '''Terminierung''' versteht man das Beenden eines Ablaufs. Dies kann der Ablauf eines Programmes sein, oder ''nur'' der Ablauf einer Funktion bzw. …“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter '''Terminierung''' versteht man das Beenden eines Ablaufs. Dies kann der Ablauf eines Programmes sein, oder ''nur'' der Ablauf einer [[Funktion]] bzw. [[Methode]].&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Rechensysteme&amp;diff=1618</id>
		<title>Rechensysteme</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Rechensysteme&amp;diff=1618"/>
				<updated>2016-07-23T17:44:19Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: Die Seite wurde neu angelegt: „Ein '''Rechensystem''' ist, wie der Name schon sagt, ein System zum rechnen. Dies kann sich sowohl auf das Zahlenystem (Dezimal- oder Binärsystem) beziehen, i…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein '''Rechensystem''' ist, wie der Name schon sagt, ein System zum rechnen. Dies kann sich sowohl auf das Zahlenystem (Dezimal- oder Binärsystem) beziehen, in welchem gerechnet wird, als auch ein System, wie z.B. eine Maschine, bezeichnen, welche Berechnungen durchführt.&lt;br /&gt;
&lt;br /&gt;
= Beispiele =&lt;br /&gt;
&lt;br /&gt;
== Rechnen im Dezimalsystem ==&lt;br /&gt;
&lt;br /&gt;
== Rechnen im Binärsystem ==&lt;br /&gt;
&lt;br /&gt;
== Schaltsysteme im Rechner ==&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hauptseite&amp;diff=1617</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Hauptseite&amp;diff=1617"/>
				<updated>2016-07-23T13:57:03Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=mainpage_topbox&amp;gt;&lt;br /&gt;
&amp;lt;div id=mainpage_title&amp;gt;&lt;br /&gt;
&amp;lt;span&amp;gt;Willkommen im&amp;lt;/span&amp;gt; EINI-Wiki&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=mainpage_title_text&amp;gt;&lt;br /&gt;
Eine Wiki zur Veranstaltung &amp;quot;Einführung in die Informatik für Logistiker, Wirtschaftsmathematiker und -ingenieure&amp;quot; der TU-Dortmund&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;border: solid 1px #AAA; width:100%; margin-top: 0.5em; margin-right: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box_head&amp;quot;&amp;gt;&lt;br /&gt;
Übersicht&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box_content&amp;quot; style=&amp;quot;margin:0 ; padding: 0;&amp;quot;&amp;gt;&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; width=100%&lt;br /&gt;
 |+ Themenübersicht&lt;br /&gt;
 ! Thema !! Vorlesung !! Inhalt&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | Rechensysteme &amp;amp; Datendarstellung&lt;br /&gt;
 | Vorlesung 1 (Kapitel 0)&lt;br /&gt;
 | Einführung und Organisation &lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 2 (Kapitel 1)&lt;br /&gt;
 | Dezimal- und Binärzahlen, Darstellung von Zahlen, Darstellung von Zeichen, Darstellung logischer Werte, Umrechnung, Rechensysteme&lt;br /&gt;
 |-&lt;br /&gt;
 | Spezifikation - Algorithmus - Syntax &amp;amp; Semantik&lt;br /&gt;
 | Vorlesung 3 (Kapitel 2)&lt;br /&gt;
 | Entwurf, Spezifikation, [[Algorithmus]], [[Syntax und Semantik]]&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;3&amp;quot; | Kern imperativer Programmiersprachen&lt;br /&gt;
 | Vorlesung 4 (Kapitel 3.1)&lt;br /&gt;
 | [[Variable | Variablen]], [[Zuweisung|Zuweisungen]], [[Datentyp|primitive Datentypen]], [[Operator|Operatoren]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 5 (Kapitel 3.2)&lt;br /&gt;
 | [[Kontrollstrukturen]]: [[Sequenz|Sequenzen]], [[Block|Blöcke]], [[Fallunterscheidung]], [[Schleife|Schleifen]]: [[while]], [[do-while]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 6 (Kapitel 3.3)&lt;br /&gt;
 | Schleifen: [[for]], [[continue]], [[break]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Funktion - Prozedur - Methode - Rekursion&lt;br /&gt;
 | Vorlesung 7 (Kapitel 4)&lt;br /&gt;
 | [[Unterprogramm|Unterprogramme]], [[Funktion|Funktionen]], [[Funktion|Aufruf]], [[Rekursion]]&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | Arrays - Internes Sortieren - Rekursive Datenstrukturen&lt;br /&gt;
 | Vorlesung 8 (Kapitel 5.1)&lt;br /&gt;
 | [[Array|Arrays]], [[Sortieren|Internes Sortieren]], Rekursive Datenstrukturen ([[Baum|Binär-Baum]], [[Heap]])&lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 9 (Kapitel 5.2)&lt;br /&gt;
 | Abstrakte Datentypen am Bsp. [[Heap]],  Heapsort&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;1&amp;quot; | Objektorientierte Programmierung - Einführung&lt;br /&gt;
 | Vorlesung 10 (Kapitel 6)&lt;br /&gt;
 | Aufbau eines Java-Programms, [[Klasse|Klassen]], [[Objekt|Objekte]], Details zu [[Konstruktor|Konstruktoren]], [[Referenz|Referenzen]], [[Garbage Collector|Garbage Collection]], Übergabe von [[Parameter|Parametern]], [[Attribut|Klassenattribute]]&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | Objektorientierte Programmierung - Vererbung&lt;br /&gt;
 | Vorlesung 11 (Kapitel 7)&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | [[Vererbung]], [[Attribut|Attribute]] &amp;amp; [[Methode|Methoden]]: [[Sichtbarkeit|Zugriffsrechte]], Überschreiben, Abstrakte Klassen/Methoden, Polymorphie&lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 12 (Kapitel 7)&lt;br /&gt;
 |-&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | Dynamische Datenstrukturen&lt;br /&gt;
 | Vorlesung 13 (Kapitel 8.1)&lt;br /&gt;
 | einfache [[Liste|Listen]], sortierte Liste, Doppelt verkettete Liste &lt;br /&gt;
 |-&lt;br /&gt;
 | Vorlesung 14 (Kapitel 8.2)&lt;br /&gt;
 | Binärer Suchbaum, Vollständige Induktion, Operationen in einem binärem Suchbaum, Durchlaufstrategien für einen binären Suchbaum&lt;br /&gt;
 |}&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;border: solid 1px #AAA; width:50%; margin-top: 0.5em; margin-left: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box_head&amp;quot;&amp;gt;&lt;br /&gt;
Glossar&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;box_content&amp;quot;&amp;gt;&lt;br /&gt;
[[Glossar]]&lt;br /&gt;
[[Glossar_(alphabetisch)| Glossar (alphabetisch)]]&lt;br /&gt;
*[[Stack | Abarbeitung von Funktionsaufrufen]]&lt;br /&gt;
*[[Algorithmus]]&lt;br /&gt;
*[[Array]]&lt;br /&gt;
*[[Ausdruck]]&lt;br /&gt;
*[[Bit]]&lt;br /&gt;
*[[Dezimal-_und_Binärsystem | Binärzahlen]]&lt;br /&gt;
*[[Boolesche Algebra]]&lt;br /&gt;
*[[Boolean]]&lt;br /&gt;
*[[Block]]&lt;br /&gt;
*[[Alternative | Bedingte Anweisung]]&lt;br /&gt;
*[[Baum | binärer Baum]]&lt;br /&gt;
*[[Char]]&lt;br /&gt;
*[[call by value]]&lt;br /&gt;
*[[call by reference]]&lt;br /&gt;
*[[Darstellung natürlicher Zahlen]]&lt;br /&gt;
*[[Darstellung ganzer Zahlen]]&lt;br /&gt;
*[[Deklaration]]&lt;br /&gt;
*[[Datentyp]]&lt;br /&gt;
*[[do-while | do-while-Schleife]]&lt;br /&gt;
*[[Datenstruktur]]&lt;br /&gt;
*[[Dynamische Datenstruktur]]&lt;br /&gt;
*[[Ein- und Ausgabe]]&lt;br /&gt;
*[[Elementaroperationen]]&lt;br /&gt;
*[[Einfache Grundoperationen]]&lt;br /&gt;
*[[Festpunktzahlen]]&lt;br /&gt;
*[[Float]]&lt;br /&gt;
*[[for | for-Schleife]]&lt;br /&gt;
*[[Funktion]]&lt;br /&gt;
*[[Gleitpunktzahlen]]&lt;br /&gt;
*[[globale Variablen]]&lt;br /&gt;
*[[Hexadezimalzahlen]]&lt;br /&gt;
*[[Heap]]&lt;br /&gt;
*[[Initialisierung]]&lt;br /&gt;
*[[Integer]]&lt;br /&gt;
*[[Schleife | Iteration]]&lt;br /&gt;
*[[Objekt | Instanz]]&lt;br /&gt;
*[[Java]]&lt;br /&gt;
*[[Kurzformen]]&lt;br /&gt;
*[[Kontrollstruktur]]&lt;br /&gt;
*[[Klasse]]&lt;br /&gt;
*[[Liste | lineare Liste]]&lt;br /&gt;
*[[Methode]]&lt;br /&gt;
*[[main | main-Methode]]&lt;br /&gt;
*[[new | new-Operator]]&lt;br /&gt;
*[[null]]&lt;br /&gt;
*[[Objektorientierte Programmierung]]&lt;br /&gt;
*[[Operation]]&lt;br /&gt;
*[[Objekt]]&lt;br /&gt;
*[[Programmierung]]&lt;br /&gt;
*[[Primitive Datentypen]]&lt;br /&gt;
*[[Operatoren#Priotitäten von Operatoren | Priotitäten von Operatoren]]&lt;br /&gt;
*[[Parameter]]&lt;br /&gt;
*[[public]]&lt;br /&gt;
*[[private]]&lt;br /&gt;
*[[protected]]&lt;br /&gt;
*[[Punkt-Operator]]&lt;br /&gt;
*[[Rechensysteme]]&lt;br /&gt;
*[[Rückgabewert]]&lt;br /&gt;
*[[Rekursive Funktion]]&lt;br /&gt;
*[[Referenzen]]&lt;br /&gt;
*[[Syntax]]&lt;br /&gt;
*[[Semantik]]&lt;br /&gt;
*[[Sortieren]]&lt;br /&gt;
*[[Suchen]]&lt;br /&gt;
*[[Syntaxdiagramm]]&lt;br /&gt;
*[[switch]]&lt;br /&gt;
*[[Schleife]]&lt;br /&gt;
*[[static]]&lt;br /&gt;
*[[Schlüsselwörter]]&lt;br /&gt;
*[[Teile und herrsche]]&lt;br /&gt;
*[[Terminierung]]&lt;br /&gt;
*[[this]]&lt;br /&gt;
*[[Variable]]&lt;br /&gt;
*[[Vererbung]]&lt;br /&gt;
*[[while | while-Schleife]]&lt;br /&gt;
*[[Zweierkomplement]]&lt;br /&gt;
*[[Zuweisung]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Glossar]]&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Deklaration&amp;diff=1616</id>
		<title>Deklaration</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Deklaration&amp;diff=1616"/>
				<updated>2016-07-11T19:42:22Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Deklaration einer Variablen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter '''Deklaration''' versteht man das Ankündigen von benötigtem Speicher im Quellcode. &lt;br /&gt;
&lt;br /&gt;
[[Variablen]] müssen vor ihrer Verwendung '''deklariert''' werden. Wie viel Speicher für die entsprechende Variable benötigt wird, hängt von ihrem [[Datentyp]] ab.&lt;br /&gt;
&lt;br /&gt;
Auch Datentypen, in [[Java]] durch [[Klassen]] repräsentiert, müssen durch ihre Definition deklariert werden. Primitive Datentypen sind davon ausgenommen. Alle Datentypen aus der Java-Standard[[bibliothek]] &amp;quot;java.lang&amp;quot; sind vordefiniert.&lt;br /&gt;
&lt;br /&gt;
[[Methoden]] und Funktionen der jeweiligen Klasse müssen vor ihrer Verwendung zumindest über ihre [[Signatur]] deklariert werden. Dadurch soll erkannt werden, ob der Aufruf korrekt ist, auch wenn ihr Inhalt (Implementierung) noch unbekannt ist. &lt;br /&gt;
&lt;br /&gt;
= Deklaration von Klassen =&lt;br /&gt;
&lt;br /&gt;
siehe: [[Klasse]]&lt;br /&gt;
&lt;br /&gt;
Eine einfache Klassendeklaration findet in einer .java-Datei mit dem gleichen Namen statt und sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Classname {&lt;br /&gt;
    //Definition der Klasse&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deklaration von Methoden =&lt;br /&gt;
&lt;br /&gt;
siehe: [[Methode]]&lt;br /&gt;
&lt;br /&gt;
Zur Deklaration einer Methode bzw. Funktion gehört zuerst nur ihre Signatur. Da jedoch nur in [[abstract|abstrakten]] Klassen auf eine Implementierung verzichtet werden kann, reicht dies in gewöhnlichen Klassen nicht aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public ReturnType methodName(Parameter variable, OtherParameter otherVariable) {&lt;br /&gt;
    //Implementierung der Methode&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Deklaration einer Variablen =&lt;br /&gt;
&lt;br /&gt;
siehe: [[Variable]]&lt;br /&gt;
&lt;br /&gt;
Vor Verwendung einer Variablen muss diese durch Angabe ihres Datentyps deklariert werden. Der Datentyp einer Variablen kann sich innerhalb ihres [[Block]]es nicht ändern. Eine Variable ist nur in dem Block sichtbar, in dem sie deklariert wurde.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
//Umgebender Block&lt;br /&gt;
{&lt;br /&gt;
    VariableType variableName;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Codekonventionen&amp;diff=1552</id>
		<title>Codekonventionen</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Codekonventionen&amp;diff=1552"/>
				<updated>2016-07-09T00:01:31Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Konventionen für Einrückung und geschweifte Klammern in Java */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine '''Codekonvention''' ist eine Übereinkunft unter Programmierern, beim Schreiben ihrer [[Programm]]e einen gewissen Stil einzuhalten. Über die Jahre hinweg haben sich in fast allen [[Programmiersprachen]] eine oder mehrere solcher '''Standards''' gebildet.&lt;br /&gt;
&lt;br /&gt;
= Verständlichkeit eines Algorithmus =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Merkmal eines [[Algorithmus]] ist, dass ein menschlicher Leser ihn verstehen kann, obwohl er nicht in umgangssprachlicher Form vorliegt.&lt;br /&gt;
&lt;br /&gt;
==Beispiel==&lt;br /&gt;
&lt;br /&gt;
Als Beispiel sei folgender Algorithmus gegeben, der zwei Zahlen miteinander multipliziert, ohne explizit einen [[Operator|Multiplikationsoperator]] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
1. In '''[[Pseudocode]]''' sieht das ganze so aus:&lt;br /&gt;
&lt;br /&gt;
 Eingabe: Zwei ganze Zahlen a und b&lt;br /&gt;
 Ausgabe: Produkt aus a und b&lt;br /&gt;
 Vorgehensweise:&lt;br /&gt;
     Initialisiere das Ergebnis mit 0&lt;br /&gt;
     Addiere a mal b auf das Ergebnis&lt;br /&gt;
     Gebe das Ergebnis zurück&lt;br /&gt;
&lt;br /&gt;
2. Beispiel für eine '''schwer verständliche''' Formulierung des Algorithmus:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
  public static int berechnen2(int a, int b){int erg=0;for(int i=0;i&amp;lt;a;i++){erg+=b;}return erg;}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Das gleiche Beispiel, '''lesbarer''' und mit Syntaxhighlighting:&lt;br /&gt;
  &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public static int berechnen(int a, int b)&lt;br /&gt;
  {&lt;br /&gt;
    int erg = 0;&lt;br /&gt;
    for(int i = 0; i&amp;lt;a ; i++)&lt;br /&gt;
    {&lt;br /&gt;
        erg += b;&lt;br /&gt;
    }&lt;br /&gt;
    return erg;&lt;br /&gt;
  }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beide Programme führen dasselbe aus. Beide berechnen das Produkt von ''a'' und ''b'', ohne eine Multiplikation durchzuführen. Sie addieren ''b'' ''a''-mal auf eine Ergebnisvariablen &amp;lt;code&amp;gt;erg&amp;lt;/code&amp;gt; auf. Diese [[Variable]] wird zum Schluss zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Genaueres zur Funktionsweise des Algorithmus: siehe [[Schleife]]&lt;br /&gt;
&lt;br /&gt;
= Bezeichner und Leerzeichen =&lt;br /&gt;
&lt;br /&gt;
Da in [[Programmiersprachen]] der Text maschinell analysiert werden muss, um später vom [[Compiler]] übersetzt werden zu können, gilt es ''immer'' folgendes zu beachten: &lt;br /&gt;
&lt;br /&gt;
Eine Zeichenkette, die als '''Bezeichner''' für ein Programmelement genutzt wird, darf '''keine Leerzeichen''' (engl. ''whitespaces'') beinhalten. &lt;br /&gt;
&lt;br /&gt;
Mit Leerzeichen versehen werden Beginn und Ende des Bezeichners uneindeutig [[Deklaration|deklariert]]. Daher ist dies in fast allen Programmiersprachen verboten. Um trotzdem einen Bezeichner aus mehr als einem Wort bestehen zu lassen, verwenden Programmierer verschiedene Formen der '''Notation''', die im Folgenden erklärt werden.&lt;br /&gt;
&lt;br /&gt;
= Notationsbegriffe =&lt;br /&gt;
&lt;br /&gt;
Im Zusammenhang mit '''Codekonventionen''' haben sich verschiedene Begriffe etabliert:&lt;br /&gt;
&lt;br /&gt;
'''Lower-Case''' (''engl.'' für &amp;quot;Kleinbuchstaben&amp;quot;): Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während alle Buchstaben klein geschrieben werden. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;nanosecondsinsecond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;valueineuro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positionx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positiony&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Upper-Case'''(''engl.'' für &amp;quot;Großbuchstaben&amp;quot;): Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während alle Buchstaben groß geschrieben werden. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;NANOSECONDSINSECOND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VALUEINEURO&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;POSITIONX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;POSITIONY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Camel-Case''': Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während jeder Anfangsbuchstabe eines Wortes groß geschrieben wird. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;NanosecondsInSecond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ValueInEuro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PositionX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PositionY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mixed-Camel-Case''': Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während jeder Anfangsbuchstabe eines Wortes groß geschrieben wird, bis auf der erste. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;nanosecondsInSecond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;valueInEuro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positionX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positionY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Underscored''': Wörter in Bezeichnern werden durch einen Unterstrich '''_''' voneinander getrennt. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;nanoseconds_in_sekunde&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;value_in_euro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;position_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;position_Y&amp;lt;/code&amp;gt;. &lt;br /&gt;
Underscored kann in Kombination mit anderen Begriffen verwendet werden. Die ersten beiden Beispiele sind in der in C für Variablen verwendeten lower-case-underscored Schreibweise gehalten.&lt;br /&gt;
&lt;br /&gt;
=Konventionen in Java=&lt;br /&gt;
&lt;br /&gt;
Folgende Konventionen sind beim Programmieren von [[Java]] zwingend einzuhalten:&lt;br /&gt;
&lt;br /&gt;
== Konventionen für Bezeichner in Java ==&lt;br /&gt;
&lt;br /&gt;
1. '''Paketnamen''' werden im '''Lower-Case''' notiert und haben die Form einer &amp;quot;umgekehrten URL&amp;quot;. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;de.tu-do.eini.blatt01&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.apache&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;com.jogamp.opengl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;myproject.directory&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. [[Klasse|'''Klassennamen''']] werden im '''Camel-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MeinProgramm&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AbstractSingletonFactoryBean&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. [[Variable|'''Variablen- und Attributsnamen''']] werden im '''Mixed-Camel-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;result&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;processRunning&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. [[Methode|'''Methodennamen''']] werden im ''''Mixed-Camel-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;calculate(int x, int y)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;doSomething()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cleanupAtShutdown(String message)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Klassenweite '''Konstanten'' werden im '''Underscored-Upper-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;PI&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NANOSECONDS_IN_SECOND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ARRAY_SIZE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alles was einen '''Wert''' besitzt, kann so schnell durch den '''Kleinbuchstaben''' am Anfang erkannt werden kann, während von Typen mit Großbuchstaben unterschieden werden kann. Konstanten fallen schnell ins Auge.&lt;br /&gt;
&lt;br /&gt;
Bei '''Paketnamen''' kann durch die Form der Notation bei Großprojekten insbesondere erkannt werden, in welcher Sprache das Projekt dokumentiert ist (Ländercode der &amp;quot;URL&amp;quot;). Für das Anlegen von Klassen zu den Übungsblättern reicht jedoch etwas wie &amp;lt;code&amp;gt;eini.blatt01&amp;lt;/code&amp;gt; vollkommen aus.&lt;br /&gt;
&lt;br /&gt;
== Konventionen für Einrückung und geschweifte Klammern in Java ==&lt;br /&gt;
&lt;br /&gt;
In Java wird, wie auch in vielen anderen Programmiersprachen, '''blockebenenweise''' eingerückt. Eine Ebene wird dabei meist mit vier Leerzeichen oder einem Tab eingerückt. Das bedeutet, dass die Anzahl an umgebenden [[Block|Blöcken]] die Anzahl an Leerzeichen oder Tabs vor dem Beginn einer Zeile vorgibt. So stehen z.B. die Deklarationen von Attributen und Methoden immer im Block der sie beinhaltenden Klasse und werden deswegen um eine Ebene eingerückt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
    private int x,y,z; //Umgeben vom Block der Klasse: Einrückung um eine Ebene.&lt;br /&gt;
    &lt;br /&gt;
    private int calculateVolume(){&lt;br /&gt;
        /* Berechnung umgeben vom Block der Klasse und der Methode: Einrückung um zwei Ebenen. */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ob Sie die öffnenden Klammern eines Blockes in die Zeile des ihn öffnenden Ausdruckes schreiben (wie im vorherigen Beispiel), oder die öffnende Klammer in die gleiche Ebene wie der den Block öffnende Ausdruck in einer einzelnen Zeile notieren (wie im lesbareren Beispiel unter Verständlichkeit eines Algorithmus) ist Ihnen überlassen. Sie sollten dabei aber auf jeden Fall konstant bleiben.&lt;br /&gt;
&lt;br /&gt;
= Beispiele =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Korrekte Vorgabe&amp;quot;&amp;gt;&lt;br /&gt;
public class Classname {&lt;br /&gt;
    private int variable;&lt;br /&gt;
    private int another;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Keine Einrückung&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
private int x,y,z;&lt;br /&gt;
private int calculateVolume(){&lt;br /&gt;
/* Berechnung */&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Klammern und Text geclustered&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
    private int x,y,z;&lt;br /&gt;
    private int calculateVolume(){&lt;br /&gt;
        /* Berechnung */&lt;br /&gt;
    }}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Einrückung falsch formatiert, stimmt nicht mit Ebene überein&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
    private     int x,y,z;&lt;br /&gt;
    &lt;br /&gt;
        private int calculateVolume(){&lt;br /&gt;
        /* Berechnung */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Uneinheitlich geklammert&amp;quot;&amp;gt;&lt;br /&gt;
public class Calculator {&lt;br /&gt;
    private int calculate(int x, int y){&lt;br /&gt;
        for(int i = 0; i &amp;lt; y; i++)&lt;br /&gt;
        {&lt;br /&gt;
            /* Berechung */&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Alternative Klammerung&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube&lt;br /&gt;
{&lt;br /&gt;
    private int x,y,z;&lt;br /&gt;
    &lt;br /&gt;
    private int calculateVolume()&lt;br /&gt;
    {&lt;br /&gt;
        /* Berechnung */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Codekonventionen&amp;diff=1550</id>
		<title>Codekonventionen</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Codekonventionen&amp;diff=1550"/>
				<updated>2016-07-08T22:03:23Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: /* Konventionen für Einrückung und geschweifte Klammern in Java */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine '''Codekonvention''' ist eine Übereinkunft unter Programmierern, beim Schreiben ihrer [[Programm]]e einen gewissen Stil einzuhalten. Über die Jahre hinweg haben sich in fast allen [[Programmiersprachen]] eine oder mehrere solcher '''Standards''' gebildet.&lt;br /&gt;
&lt;br /&gt;
= Verständlichkeit eines Algorithmus =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Merkmal eines [[Algorithmus]] ist, dass ein menschlicher Leser ihn verstehen kann, obwohl er nicht in umgangssprachlicher Form vorliegt.&lt;br /&gt;
&lt;br /&gt;
==Beispiel==&lt;br /&gt;
&lt;br /&gt;
Als Beispiel sei folgender Algorithmus gegeben, der zwei Zahlen miteinander multipliziert, ohne explizit einen [[Operator|Multiplikationsoperator]] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
1. In '''[[Pseudocode]]''' sieht das ganze so aus:&lt;br /&gt;
&lt;br /&gt;
 Eingabe: Zwei ganze Zahlen a und b&lt;br /&gt;
 Ausgabe: Produkt aus a und b&lt;br /&gt;
 Vorgehensweise:&lt;br /&gt;
     Initialisiere das Ergebnis mit 0&lt;br /&gt;
     Addiere a mal b auf das Ergebnis&lt;br /&gt;
     Gebe das Ergebnis zurück&lt;br /&gt;
&lt;br /&gt;
2. Beispiel für eine '''schwer verständliche''' Formulierung des Algorithmus:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
  public static int berechnen2(int a, int b){int erg=0;for(int i=0;i&amp;lt;a;i++){erg+=b;}return erg;}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Das gleiche Beispiel, '''lesbarer''' und mit Syntaxhighlighting:&lt;br /&gt;
  &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public static int berechnen(int a, int b)&lt;br /&gt;
  {&lt;br /&gt;
    int erg = 0;&lt;br /&gt;
    for(int i = 0; i&amp;lt;a ; i++)&lt;br /&gt;
    {&lt;br /&gt;
        erg += b;&lt;br /&gt;
    }&lt;br /&gt;
    return erg;&lt;br /&gt;
  }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beide Programme führen dasselbe aus. Beide berechnen das Produkt von ''a'' und ''b'', ohne eine Multiplikation durchzuführen. Sie addieren ''b'' ''a''-mal auf eine Ergebnisvariablen &amp;lt;code&amp;gt;erg&amp;lt;/code&amp;gt; auf. Diese [[Variable]] wird zum Schluss zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Genaueres zur Funktionsweise des Algorithmus: siehe [[Schleife]]&lt;br /&gt;
&lt;br /&gt;
= Bezeichner und Leerzeichen =&lt;br /&gt;
&lt;br /&gt;
Da in [[Programmiersprachen]] der Text maschinell analysiert werden muss, um später vom [[Compiler]] übersetzt werden zu können, gilt es ''immer'' folgendes zu beachten: &lt;br /&gt;
&lt;br /&gt;
Eine Zeichenkette, die als '''Bezeichner''' für ein Programmelement genutzt wird, darf '''keine Leerzeichen''' (engl. ''whitespaces'') beinhalten. &lt;br /&gt;
&lt;br /&gt;
Mit Leerzeichen versehen werden Beginn und Ende des Bezeichners uneindeutig [[Deklaration|deklariert]]. Daher ist dies in fast allen Programmiersprachen verboten. Um trotzdem einen Bezeichner aus mehr als einem Wort bestehen zu lassen, verwenden Programmierer verschiedene Formen der '''Notation''', die im Folgenden erklärt werden.&lt;br /&gt;
&lt;br /&gt;
= Notationsbegriffe =&lt;br /&gt;
&lt;br /&gt;
Im Zusammenhang mit '''Codekonventionen''' haben sich verschiedene Begriffe etabliert:&lt;br /&gt;
&lt;br /&gt;
'''Lower-Case''' (''engl.'' für &amp;quot;Kleinbuchstaben&amp;quot;): Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während alle Buchstaben klein geschrieben werden. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;nanosecondsinsecond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;valueineuro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positionx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positiony&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Upper-Case'''(''engl.'' für &amp;quot;Großbuchstaben&amp;quot;): Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während alle Buchstaben groß geschrieben werden. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;NANOSECONDSINSECOND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VALUEINEURO&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;POSITIONX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;POSITIONY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Camel-Case''': Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während jeder Anfangsbuchstabe eines Wortes groß geschrieben wird. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;NanosecondsInSecond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ValueInEuro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PositionX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PositionY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mixed-Camel-Case''': Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während jeder Anfangsbuchstabe eines Wortes groß geschrieben wird, bis auf der erste. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;nanosecondsInSecond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;valueInEuro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positionX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positionY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Underscored''': Wörter in Bezeichnern werden durch einen Unterstrich '''_''' voneinander getrennt. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;nanoseconds_in_sekunde&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;value_in_euro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;position_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;position_Y&amp;lt;/code&amp;gt;. &lt;br /&gt;
Underscored kann in Kombination mit anderen Begriffen verwendet werden. Die ersten beiden Beispiele sind in der in C für Variablen verwendeten lower-case-underscored Schreibweise gehalten.&lt;br /&gt;
&lt;br /&gt;
=Konventionen in Java=&lt;br /&gt;
&lt;br /&gt;
Folgende Konventionen sind beim Programmieren von [[Java]] zwingend einzuhalten:&lt;br /&gt;
&lt;br /&gt;
== Konventionen für Bezeichner in Java ==&lt;br /&gt;
&lt;br /&gt;
1. '''Paketnamen''' werden im '''Lower-Case''' notiert und haben die Form einer &amp;quot;umgekehrten URL&amp;quot;. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;de.tu-do.eini.blatt01&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.apache&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;com.jogamp.opengl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;myproject.directory&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. [[Klasse|'''Klassennamen''']] werden im '''Camel-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MeinProgramm&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AbstractSingletonFactoryBean&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. [[Variable|'''Variablen- und Attributsnamen''']] werden im '''Mixed-Camel-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;result&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;processRunning&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. [[Methode|'''Methodennamen''']] werden im ''''Mixed-Camel-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;calculate(int x, int y)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;doSomething()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cleanupAtShutdown(String message)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Klassenweite '''Konstanten'' werden im '''Underscored-Upper-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;PI&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NANOSECONDS_IN_SECOND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ARRAY_SIZE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alles was einen '''Wert''' besitzt, kann so schnell durch den '''Kleinbuchstaben''' am Anfang erkannt werden kann, während von Typen mit Großbuchstaben unterschieden werden kann. Konstanten fallen schnell ins Auge.&lt;br /&gt;
&lt;br /&gt;
Bei '''Paketnamen''' kann durch die Form der Notation bei Großprojekten insbesondere erkannt werden, in welcher Sprache das Projekt dokumentiert ist (Ländercode der &amp;quot;URL&amp;quot;). Für das Anlegen von Klassen zu den Übungsblättern reicht jedoch etwas wie &amp;lt;code&amp;gt;eini.blatt01&amp;lt;/code&amp;gt; vollkommen aus.&lt;br /&gt;
&lt;br /&gt;
== Konventionen für Einrückung und geschweifte Klammern in Java ==&lt;br /&gt;
&lt;br /&gt;
In Java wird, wie auch in vielen anderen Programmiersprachen, '''blockebenenweise''' eingerückt. Eine Ebene wird dabei meist mit vier Leerzeichen oder einem Tab eingerückt. Das bedeutet, dass die Anzahl an umgebenden [[Block|Blöcken]] von geschweiften Klammern die Anzahl an Leerzeichen oder Tabs vor dem Beginn einer Zeile vorgibt. So stehen z.B. die Deklarationen von Attributen und Methoden immer im Block der sie beinhaltenden Klasse und werden deswegen um eine Ebene eingerückt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
    private int x,y,z; //Umgeben vom Block der Klasse: Einrückung um eine Ebene.&lt;br /&gt;
    &lt;br /&gt;
    private int calculateVolume(){&lt;br /&gt;
        /* Berechnung umgeben vom Block der Klasse und der Methode: Einrückung um zwei Ebenen. */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ob Sie die öffnenden Klammern eines Blockes in die Zeile des ihn öffnenden Ausdruckes schreiben (wie im vorherigen Beispiel), oder die öffnende Klammer in die gleiche Ebene wie der den Block öffnende Ausdruck in einer einzelnen Zeile notieren (wie im lesbareren Beispiel unter Verständlichkeit eines Algorithmus) ist Ihnen überlassen. Sie sollten dabei aber auf jeden Fall konstant bleiben.&lt;br /&gt;
&lt;br /&gt;
= Beispiele =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Korrekte Vorgabe&amp;quot;&amp;gt;&lt;br /&gt;
public class Classname {&lt;br /&gt;
    private int variable;&lt;br /&gt;
    private int another;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Keine Einrückung&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
private int x,y,z;&lt;br /&gt;
private int calculateVolume(){&lt;br /&gt;
/* Berechnung */&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Klammern und Text geclustered&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
    private int x,y,z;&lt;br /&gt;
    private int calculateVolume(){&lt;br /&gt;
        /* Berechnung */&lt;br /&gt;
    }}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Einrückung falsch formatiert, stimmt nicht mit Ebene überein&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
    private     int x,y,z;&lt;br /&gt;
    &lt;br /&gt;
        private int calculateVolume(){&lt;br /&gt;
        /* Berechnung */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Uneinheitlich geklammert&amp;quot;&amp;gt;&lt;br /&gt;
public class Calculator {&lt;br /&gt;
    private int calculate(int x, int y){&lt;br /&gt;
        for(int i = 0; i &amp;lt; y; i++)&lt;br /&gt;
        {&lt;br /&gt;
            /* Berechung */&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Alternative Klammerung&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube&lt;br /&gt;
{&lt;br /&gt;
    private int x,y,z;&lt;br /&gt;
    &lt;br /&gt;
    private int calculateVolume()&lt;br /&gt;
    {&lt;br /&gt;
        /* Berechnung */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	<entry>
		<id>https://ls14-eini.cs.tu-dortmund.de/index.php?title=Codekonventionen&amp;diff=1549</id>
		<title>Codekonventionen</title>
		<link rel="alternate" type="text/html" href="https://ls14-eini.cs.tu-dortmund.de/index.php?title=Codekonventionen&amp;diff=1549"/>
				<updated>2016-07-08T21:57:13Z</updated>
		
		<summary type="html">&lt;p&gt;Hauer: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine '''Codekonvention''' ist eine Übereinkunft unter Programmierern, beim Schreiben ihrer [[Programm]]e einen gewissen Stil einzuhalten. Über die Jahre hinweg haben sich in fast allen [[Programmiersprachen]] eine oder mehrere solcher '''Standards''' gebildet.&lt;br /&gt;
&lt;br /&gt;
= Verständlichkeit eines Algorithmus =&lt;br /&gt;
&lt;br /&gt;
==Erläuterung==&lt;br /&gt;
&lt;br /&gt;
Ein wichtiges Merkmal eines [[Algorithmus]] ist, dass ein menschlicher Leser ihn verstehen kann, obwohl er nicht in umgangssprachlicher Form vorliegt.&lt;br /&gt;
&lt;br /&gt;
==Beispiel==&lt;br /&gt;
&lt;br /&gt;
Als Beispiel sei folgender Algorithmus gegeben, der zwei Zahlen miteinander multipliziert, ohne explizit einen [[Operator|Multiplikationsoperator]] zu verwenden.&lt;br /&gt;
&lt;br /&gt;
1. In '''[[Pseudocode]]''' sieht das ganze so aus:&lt;br /&gt;
&lt;br /&gt;
 Eingabe: Zwei ganze Zahlen a und b&lt;br /&gt;
 Ausgabe: Produkt aus a und b&lt;br /&gt;
 Vorgehensweise:&lt;br /&gt;
     Initialisiere das Ergebnis mit 0&lt;br /&gt;
     Addiere a mal b auf das Ergebnis&lt;br /&gt;
     Gebe das Ergebnis zurück&lt;br /&gt;
&lt;br /&gt;
2. Beispiel für eine '''schwer verständliche''' Formulierung des Algorithmus:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;source&amp;gt;&lt;br /&gt;
  public static int berechnen2(int a, int b){int erg=0;for(int i=0;i&amp;lt;a;i++){erg+=b;}return erg;}&lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Das gleiche Beispiel, '''lesbarer''' und mit Syntaxhighlighting:&lt;br /&gt;
  &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public static int berechnen(int a, int b)&lt;br /&gt;
  {&lt;br /&gt;
    int erg = 0;&lt;br /&gt;
    for(int i = 0; i&amp;lt;a ; i++)&lt;br /&gt;
    {&lt;br /&gt;
        erg += b;&lt;br /&gt;
    }&lt;br /&gt;
    return erg;&lt;br /&gt;
  }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beide Programme führen dasselbe aus. Beide berechnen das Produkt von ''a'' und ''b'', ohne eine Multiplikation durchzuführen. Sie addieren ''b'' ''a''-mal auf eine Ergebnisvariablen &amp;lt;code&amp;gt;erg&amp;lt;/code&amp;gt; auf. Diese [[Variable]] wird zum Schluss zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Genaueres zur Funktionsweise des Algorithmus: siehe [[Schleife]]&lt;br /&gt;
&lt;br /&gt;
= Bezeichner und Leerzeichen =&lt;br /&gt;
&lt;br /&gt;
Da in [[Programmiersprachen]] der Text maschinell analysiert werden muss, um später vom [[Compiler]] übersetzt werden zu können, gilt es ''immer'' folgendes zu beachten: &lt;br /&gt;
&lt;br /&gt;
Eine Zeichenkette, die als '''Bezeichner''' für ein Programmelement genutzt wird, darf '''keine Leerzeichen''' (engl. ''whitespaces'') beinhalten. &lt;br /&gt;
&lt;br /&gt;
Mit Leerzeichen versehen werden Beginn und Ende des Bezeichners uneindeutig [[Deklaration|deklariert]]. Daher ist dies in fast allen Programmiersprachen verboten. Um trotzdem einen Bezeichner aus mehr als einem Wort bestehen zu lassen, verwenden Programmierer verschiedene Formen der '''Notation''', die im Folgenden erklärt werden.&lt;br /&gt;
&lt;br /&gt;
= Notationsbegriffe =&lt;br /&gt;
&lt;br /&gt;
Im Zusammenhang mit '''Codekonventionen''' haben sich verschiedene Begriffe etabliert:&lt;br /&gt;
&lt;br /&gt;
'''Lower-Case''' (''engl.'' für &amp;quot;Kleinbuchstaben&amp;quot;): Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während alle Buchstaben klein geschrieben werden. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;nanosecondsinsecond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;valueineuro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positionx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positiony&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Upper-Case'''(''engl.'' für &amp;quot;Großbuchstaben&amp;quot;): Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während alle Buchstaben groß geschrieben werden. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;NANOSECONDSINSECOND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VALUEINEURO&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;POSITIONX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;POSITIONY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Camel-Case''': Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während jeder Anfangsbuchstabe eines Wortes groß geschrieben wird. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;NanosecondsInSecond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ValueInEuro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PositionX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PositionY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Mixed-Camel-Case''': Bezeichner werden als eine zusammenhängende Zeichenkette hintereinander geschrieben, während jeder Anfangsbuchstabe eines Wortes groß geschrieben wird, bis auf der erste. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;nanosecondsInSecond&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;valueInEuro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positionX&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;positionY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Underscored''': Wörter in Bezeichnern werden durch einen Unterstrich '''_''' voneinander getrennt. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;nanoseconds_in_sekunde&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;value_in_euro&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;position_X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;position_Y&amp;lt;/code&amp;gt;. &lt;br /&gt;
Underscored kann in Kombination mit anderen Begriffen verwendet werden. Die ersten beiden Beispiele sind in der in C für Variablen verwendeten lower-case-underscored Schreibweise gehalten.&lt;br /&gt;
&lt;br /&gt;
=Konventionen in Java=&lt;br /&gt;
&lt;br /&gt;
Folgende Konventionen sind beim Programmieren von [[Java]] zwingend einzuhalten:&lt;br /&gt;
&lt;br /&gt;
== Konventionen für Bezeichner in Java ==&lt;br /&gt;
&lt;br /&gt;
1. '''Paketnamen''' werden im '''Lower-Case''' notiert und haben die Form einer &amp;quot;umgekehrten URL&amp;quot;. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;de.tu-do.eini.blatt01&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;org.apache&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;com.jogamp.opengl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;myproject.directory&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. [[Klasse|'''Klassennamen''']] werden im '''Camel-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MeinProgramm&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AbstractSingletonFactoryBean&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. [[Variable|'''Variablen- und Attributsnamen''']] werden im '''Mixed-Camel-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;result&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;processRunning&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. [[Methode|'''Methodennamen''']] werden im ''''Mixed-Camel-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;calculate(int x, int y)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;doSomething()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cleanupAtShutdown(String message)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Klassenweite '''Konstanten'' werden im '''Underscored-Upper-Case''' notiert. &lt;br /&gt;
*z.B.: &amp;lt;code&amp;gt;PI&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NANOSECONDS_IN_SECOND&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ARRAY_SIZE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alles was einen '''Wert''' besitzt, kann so schnell durch den '''Kleinbuchstaben''' am Anfang erkannt werden kann, während von Typen mit Großbuchstaben unterschieden werden kann. Konstanten fallen schnell ins Auge.&lt;br /&gt;
&lt;br /&gt;
Bei '''Paketnamen''' kann durch die Form der Notation bei Großprojekten insbesondere erkannt werden, in welcher Sprache das Projekt dokumentiert ist (Ländercode der &amp;quot;URL&amp;quot;). Für das Anlegen von Klassen zu den Übungsblättern reicht jedoch etwas wie &amp;lt;code&amp;gt;eini.blatt01&amp;lt;/code&amp;gt; vollkommen aus.&lt;br /&gt;
&lt;br /&gt;
== Konventionen für Einrückung und geschweifte Klammern in Java ==&lt;br /&gt;
&lt;br /&gt;
In Java wird, wie auch in vielen anderen Programmiersprachen, '''blockebenenweise''' eingerückt. Das bedeutet, dass die Anzahl an umgebenden [[Block|Blöcken]] von geschweiften Klammern die Anzahl an Leerzeichen oder Tabs vor dem Beginn einer Zeile angibt. So stehen z.B. die Deklarationen von Attributen und Methoden immer im Block der sie beinhaltenden Klasse und werden deswegen um eine Ebene eingerückt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
    private int x,y,z;&lt;br /&gt;
    &lt;br /&gt;
    private int calculateVolume(){&lt;br /&gt;
        /* Berechnung */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ob Sie die öffnenden Klammern eines Blockes in die Zeile des ihn öffnenden Ausdruckes schreiben (wie im vorherigen Beispiel), oder die öffnende Klammer in die gleiche Ebene wie der den Block öffnende Ausdruck in einer einzelnen Zeile notieren (wie im lesbareren Beispiel unter Verständlichkeit eines Algorithmus) ist Ihnen überlassen. Sie sollten dabei aber auf jeden Fall konstant bleiben.&lt;br /&gt;
&lt;br /&gt;
= Beispiele =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Korrekte Vorgabe&amp;quot;&amp;gt;&lt;br /&gt;
public class Classname {&lt;br /&gt;
    private int variable;&lt;br /&gt;
    private int another;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Keine Einrückung&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
private int x,y,z;&lt;br /&gt;
private int calculateVolume(){&lt;br /&gt;
/* Berechnung */&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Klammern und Text geclustered&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
    private int x,y,z;&lt;br /&gt;
    private int calculateVolume(){&lt;br /&gt;
        /* Berechnung */&lt;br /&gt;
    }}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Einrückung falsch formatiert, stimmt nicht mit Ebene überein&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube {&lt;br /&gt;
    private     int x,y,z;&lt;br /&gt;
    &lt;br /&gt;
        private int calculateVolume(){&lt;br /&gt;
        /* Berechnung */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Schlecht: Uneinheitlich geklammert&amp;quot;&amp;gt;&lt;br /&gt;
public class Calculator {&lt;br /&gt;
    private int calculate(int x, int y){&lt;br /&gt;
        for(int i = 0; i &amp;lt; y; i++)&lt;br /&gt;
        {&lt;br /&gt;
            /* Berechung */&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot; title=&amp;quot;Alternative Klammerung&amp;quot;&amp;gt;&lt;br /&gt;
public class Cube&lt;br /&gt;
{&lt;br /&gt;
    private int x,y,z;&lt;br /&gt;
    &lt;br /&gt;
    private int calculateVolume()&lt;br /&gt;
    {&lt;br /&gt;
        /* Berechnung */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hauer</name></author>	</entry>

	</feed>