Kleines Java-Glossar zum Praktikum “Einführung in das Programmieren” Elmar Zander, Philipp Kuhn 15. Mai 2017 Die Erläuterungen in diesem Glossar sind extra einfach gehalten und sollen nur einen schnellen Überblick bieten. Im EIP-Begleittext wird auf alle Begriffe viel detaillierter eingegangen. Anweisung Eine Anweisung Code-Zeile, die vom Computer ausgeführt werden kann (im Gegensatz zu Deklarationen). Anweisungen müssen in Java mit einem Semikolon (;) abgeschlossen werden. Anweisungsblock Ein Anweisungsblock besteht aus mehreren Anweisungen, die hintereinander ausgeführt werden. Anweisungsblöcke werden in Java zwischen geschweiften Klammern (d.h. { und }) eingeschlossen. Arithmetische Operatoren (+, -, *, /) Führen die arithmetischen Operationen der Addition, Subtraktion, Multiplikation und Division aus. Bei der Division ist zu beachten, dass bei Division ganzer Zahlen (int) das Ergebnis auch eine ganze Zahl ist und die Nachkommastellen “wegfallen”, zum Beispiel 7/2==3. Wenn dies nicht gewünscht ist, müssen Fließkommazahlen (double) verwendet werden, 7.0/2==3.5. Array Ein Array (auch Feld genannt) kann viele Variablen des gleichen Typs speichern. Man kann z.B. vom Benutzer eingelesene Werte in einem Array speichern und dieses dann sortieren und wieder ausgeben. Z.B. definiert int[] numbers = new int[7]; ein Array von Ganzzahlen (siehe int) der Länge 7. Mit numbers[2] kann auf das dritte Element des Arrays zugegriffen werden, da die Zählung immer bei Null anfängt. Attribut Attribut ist ein anderer Name für eine Instanzvariable. Bedingte Anweisung Bedingte Anweisungen und Verzweigungen erlauben es, dass das Programm eine Wahrheitsbedingung prüft und je nach dem, ob sie wahr oder falsch, ist unterschiedlich weiter verfährt. Ein Beispiel: if(x<0){ msg="x ist negativ."; } else if(x==0){ msg="x ist Null."; } else { msg="x ist positiv." } Bezeichner Ein Bezeicher, ist ein eindeutiger Name, mit dem z.B. Variablen, Klassen oder Methoden identifiziert werden können. Bezeichner können in Java beliebige Buchstaben, Ziffern oder den Unterstrich (_) enthalten. Sie müssen aber immer mit einem Buchstaben anfangen und dürfen keine Leerzeichen enthalten. boolean Einem boolean-Datentyp kann die Wahrheitswerte true (wahr) oder false (falsch) annehmen. Unter Anderem bei Verzweigungen und Schleifen nützlich. 1 break Wird in Schleifen und switch-Anweisungen benutzt, um (vorzeitig) aus der Schleife bzw. dem Switch zu springen, z.B. wenn ein Fehler aufgetreten ist oder in einer Suchmethode, wenn das gesuchte Element gefunden wurde. case Die case Anweisung wird innerhalb eines switch benutzt und prüft, ob die Variable den gewollten Wert hat. Wenn ja führt das Programm den Code ab dieser Anweisung bis zum Ende des Switches bzw. bis zum nächsten break aus. char Ein char-Datentyp speichert ein einzelnes Zeichen. Zum Beispiel: char lastChar = ’z’;. Strings bestehen aus einer Sequenz von chars aus der die einzelnen Zeichen mit dem [] Operator extrahiert werden können, z.B. String name="Anne"; char initial=name[0];. Die Variable initial hätte jetzt den Wert ’A’ (siehe auch Arrays). class Deklariert eine neue Klasse. Damit diese von überall her benutzt werden kann, muss sie als public deklariert werden, z.B. public class Circle. Neue Objekte der Klasse können mit dem Operator new erzeugt werden. Compiler Ein Compiler übersetzt den Programmcode in eine für den Computer verständliche Sprache, sogenannte Maschinensprache (in Java heißt diese Bytecode). continue Wird in Schleifen benutzt, um den Rest der Schleife zu überspringen und mit der nächsten Iteration vom Anfang der Schleife wieder anzufangen. Datentyp Als Datentyp bezeichnet man die “Art” der gespeicherten Daten, z.B. Ganzzahlen, Fließkommazahlen, Zeichenkette oder komplexe Datenypen wie Klassen default Steht in switch Anweisungen normalerweise am Ende und wird nur ausgeführt, wenn kein anderer case zugetroffen hat. Deklaration Als Deklaration bezeichnet man Code, der dem Compiler nur etwas bekannt macht, aber nicht ausgeführt wird, zum Beispiel eine Variable, eine Methode oder eine Klasse. double Der Datentyp double stellt Fließkommazahlen dar und kann sich bis zu ca. 16 Nachkommastellen “merken”. Zum Beispiel: double pi = 3.14159 oder double electron_mass=9.109e-31, was für 9, 109 · 10−31 steht. Der Name double steht für doppelte Genauigkeit, da es auch Fließkommazahlen mit einfacher Genauigkeit gibt, die heute aber nur noch wenig verwendet werden. do-while Die do-while-Schleife ist der while-Schleife sehr ähnlich, nur dass die Bedingung erst am Ende der Schleife geprüft wird. Der Schleifenrumph wird daher mindestens einmal ausgeführt. else Ist ein Teil einer bedingten Anweisung, der nur dann ausgeführt wird, wenn die vorherige Bedingung nicht erfüllt, also falsch war. Die else-Anweisung ist optional, eine bedingte Anweisung kann also auch nur aus einem if-Teil bestehen. 2 else if Ist ein Teil einer bedingten Anweisung, der dann ausgeführt wird, wenn die vorherige Bedingung falsch wahr und die Bedingung nach dem if wahr ist. extends Das Schlüsselwort extends wird verwendet, um anzuzeigen, dass eine Klasse von einer anderen erbt (siehe Vererbung). Beispiel: public class Employee extends Person. false Logisch falsch, ist ein Wert vom Datentyp boolean. final Wird bei der Deklaration von Variablen benutzt und bedeutet, dass die Variable nach der Initialisierung nicht mehr verändert werden kann. Wird oft verwendet um Konstanten zu definieren, z.B. public static final double SQUARE_ROOT_TWO = 1.414213562 for Die for-Schleife wird benutzt, wenn eine Anweisung oder ein Anweisungsblock eine vorher bestimmte Anzahl von Malen ausgeführt werden soll. Zum Beispiel gibt for(int i=0; i<6; i++) { System.out.println("i="+i); } die Zahlen von 0 bis 5 aus. Innerhalb der Klammern ist die erste Anweisung die Initialisierung, die zu Schleifenbeginn ausgeführt wird, die zweite ist die Bedingung die am Ende jeder Iteration geprüft wird (nur wenn diese wahr ist, wird die Schleife weiter ausgeführt), wobei vorher der letzte Teil ausgeführt wird. Eine for-Schleife kann mit Hilfe der break vorzeitig beendet werden. Funktion Funktionen sind sehr hilfreich, um den Code übersichtlicher zu gestalten. Z.B. kann man Code auslagern, um die Länge der main Methode zu verkürzen oder man lagert ihn aus, um den Code an mehreren Stellen zu verwenden. Der Aufbau wird im Begleitheft näher erläutert. Gleichheit (==) Ist ein Vergleichsoperator, welcher true zurückgibt, wenn die verglichenen Werte gleich sind. Bei Strings und Objekte sollte allerdings die equals-Methode verwendet werden und nicht ==, da letzteres bestimmt, ob es sich um das gleiche Objekt handelt und nicht, ob diese inhaltlich gleich sind. if Das Schlüsselwort if leitet eine bedingte Anweisung ein. Nur wenn die Bedingung in den Klammern stimmt, wird der nachfolgende Anweisungsblock ausgeführt. implements Wird verwendet, um anzuzeigen, dass eine Klasse, alle von einem interface benötigten Methoden bereitstellt. Beispiel: Sei ein Interface für Formen gegeben (interface Shape { public void draw(); }), dann muss eine Klasse für Kreise (class Circle implements Shape) die Methode draw implementieren und dort einen Kreis zeichnen. import Wird am Anfang einer Java-Datei (nach der Package-Deklaration) benutzt, um ein Package zu importieren, d.h. dem Compiler bekannt zu machen. Zum Beispiel importiert import eip.* alle Klassen aus dem Paket eip; import eip.Turtle dagegen importiert nur die TurtleKlasse. Initialisierung Die erstmalige Zuweisung (=) eines Wertes an eine Variable. Beispiel: int a = 10. Instanz Ein anderer Name für ein Objekt. 3 Instanzvariable Eine Instanzvariable, ist eine Variable, die zu einem Objekt einer Klasse gehört. Jedes Objekt der Klasse hat eine eigene “Kopie” dieser Variablen (im Gegensatz zu Klassenvariablen). int Der Datentyp int (Integer) repräsentiert ganze Zahlen. Zum Beispiel: int numStudents = 261;. Achtung bei der Division (siehe auch Arithmetische Operatoren (+, -, *, /)). interface Ein Interface (engl. für Schnittstelle) ist eine Abstraktionsschicht, die dazu dient Klassen, die eine bestimmte Funktionalität benötigen von denen zu entkoppeln, die sie bereitstellen. Im Interface wird definiert, welche Methoden benötigt werden, und jede implementierende Klasse muss alle diese Funktionen definieren (siehe implements). Java Eine 1995 erschienene, von James Gosling (Sun Microsystems) entwickelte Programmiersprache, die viel von den Programmiersprachen C, C++ und SmallTalk geerbt hat. Klasse Eine Klasse ist ein komplexer Datentyp, der Attribute und Methoden besitzen kann. So könnte z.B. eine Klasse Circle das Attribut radius (vom Typ double) und eine Methode draw() enthalten. Ein Klasse an sich kann man sich als eine Art Blaupause vorstellen, aus der erst konkrete Instanzen bzw. Objekte erzeugt werden. (Siehe auch class, Vererbung, Konstruktor, interface, Klassenvariable.) Klassenvariable Eine Klassenvariable, ist eine Variable die zu einer ganzen Klasse gehört. Klassenvariablen werden mit dem Schlüsselwort static deklariert. Alle Objekte einer Klasse “teilen” sich diese Variable (im Gegensatz zu Instanzvariablen). Kommentar Kommentare sind Anmerkungen des Programmierers, die das Programm dokumentieren und es so anderen verständlich machen (sollen). Kommentare werden vom Compiler “überlesen”, können also beliebigen Text enthalten. Es gibt einzeilige Kommentare, die mit // eingeleitet werden und bis zum Ende der Zeile gehen, und mehrzeilige Kommentare, die von /* und */ begrenzt werden Konstruktor Ein Konstruktor ist eine besondere Methode in einer Klasse und wird einmalig aufgerufen, wenn ein neues Objekt der Klasse erstellt wird. Im Konstruktor wird normalerweise die Instanzvariablen initialisiert, d.h. auf ihre Ausgangswerte gesetzt. Logisches Oder (||) Ist ein Operator, welcher true zurück gibt, wenn mindestens eine der beiden verknüpften Bedingungen beide wahr sind. Beispiel: (x<0 || x>1) ist wahr, wenn x negative oder größer eins ist. Wenn die erste Bedingung wahr ist, wird die zweite gar nicht mehr ausgewertet, und wahr zurückgegeben. Logisches Und (&&) Ist ein Operator, welcher true zurück gibt, wenn beide verknüpften Bedingungen beide wahr sind. Beispiel: (x>=0 && x<=1) ist nur wahr, wenn x zwischen 0 und 1 liegt. Wenn die erste Bedingung falsch ist, wird die zweite gar nicht mehr ausgewertet und falsch zurückgegeben. main Die Abarbeitung eines Programms in Java beginnt immer in der Methode main, völlig unabhängig davon was sonst noch für Funktionen vorher kommen. Diese Funktion muss immmer als public static void main(String[] args) deklariert werden. 4 Methode Eine Funktion, die zu einer Instanz einer Klasse gehört und nicht static ist. Modulo (%) Ist der aus der Mathematik bekannte Modulo-Operator (Rest bei ganzzahliger Division). Bsp.: 17 % 3 = 2, da 17=5*3+2. new Das Schlüsselwort new wird benutzt, um aus Klassen neue Objekte zu erzeugen. Bsp: Circle circle1 = new Circle(10); null null bedeutet, dass die Variable momentan auf kein Objekt zeigt, zum Beispiel Circle myCircle = null;. Auf Variablen die auf null zeigen, dürfen keine Funktionen aufgerufen und keine Attribute benutzt werden (d.h. mycircle.draw() wäre im vorigen Beispiel “verboten”). Objekt Objekte sind konkret aus der jeweiligen Klasse erzeugt und reservieren Speicherplatz für die in der Klasse enthaltenen Instanzvariablen. Auf diesen Objekten können Methoden der Klasse aufgerufen werden. Operator Operatoren verknüpfen Werte oder Variablen miteinander. Es gibt (unter Anderem) die arithmetischen Operatoren (+, -, *, /) und die booleschen Operatoren(!,&&,||,...) sowie die Vergleichsoperatoren (==, !=). Package Packages dienen der sinnvollen Gliederung größerer Software-Projekte. Im Praktikum hilfreich, um die Aufgaben zu strukturieren. Der Name des Package muss dem Verzeichnisordner, der die Java-Datei enthält, entsprechen. Parameter Parameter sind die Werte (Variablen), die an Funktionen übergeben werden. Beispiel: wenn die Funktion void drawCircle(double radius) mit drawCircle(10) aufgerufen wird, nimmt der Parameter radius während der Ausführung der Funktion den Wert 10 an. public Ist ein Schlüsselwort für Klassen, Funktionen und Variablen, dass den Compiler anweist, dass auf besagte Klassen, Funktionen und Variablen von überall zugegriffen werden kann. Es gibt auch die Schlüsselwörter private und protected die diesen Zugriff einschränken, die aber i.Allg. nur in größeren Softwareprojekten benötigt und daher in diesem Praktikum nicht behandelt werden. return Wird in Funktionen genutzt, um die Funktion (evtl. vorzeitig) zu beenden und gegebenenfalls einen Wert zurückzugeben. Z.B. in einer Funktion add mit Parameter a und b könnte am Ende return a+b; stehen. In void Funktionen kann durch return die Abarbeitung vorzeitig beendet werden. Rückgabewert Der Rückgabewert ist das Ergebnis der Berechnung in einer Funktion, das an den Aufrufer mittels return zurückgeliefert wird. Schleife Wird genutzt, um Code wiederholt auszuführen. Für viele Dinge nützlich, unter anderem beim durchgehen von Arrays, um repetitiven Code öfter auszuführen. Gibt es in Java als for-, while- und do-while-Schleife. 5 Schlüsselwort Als Schlüsselwörter werden in Java reservierte Wörter wie if, for, class usw. bezeichnet, die für Java eine besondere Bedeutung haben und daher nicht für Klassennamen oder Variablennamen benutzt werden dürfen. Scope Variablen sind nur in einem bestimmten Bereich sichtbar und nur dort kann man auf Sie zugreifen. Dieser Bereich wird als Scope bezeichnet und umfasst den aktuellen Anweisungsblock und Anweisungsblöcke, welche von dem vorher genannten Anweisungsblock umfasst werden. static static bedeutet im Zusammenhang mit Funktionen, dass man kein konkretes Objekt benötigt, um auf die Funktionen zugreifen zu können. Bsp. sind z.B. die main Funktion und die mathematischen Funktionen (Math.sin(1.2) String Strings dienen dazu Zeichenketten zu speichern, z.B. String message = "Bla bla bla.";. Strings können mit + verknüpft werden, z.B. String name="Otto"; String message = "Hallo " + name + "!"; super Durch Verwendung des Schlüsselwortes super können in einer abgeleiteten Klasse (siehe Vererbung) Methode der Basisklasse aufgerufen werden, falls diese in der aktuellen Klasse überschrieben wurden. switch Ein Switch ist eine Art der Verzweigung. Diese wird verwendet, wenn je nach Wert einer Variable oder eines Ausdrucks unterschiedliche Dinge getan werden müssen. Die Werte nach denen verzweigt wird stehen nach case Labeln; falls kein Label mit dem richtigen Wert vorhanden ist wird der Code nach default ausgeführt. Um die Ausführung des Codes nach einem Label abzubrechen kann der Befehl break verwendet werden. this In Methoden einer Klasse referenziert this immer die aktuelle Instanz der Klasse. Hiermit kann wenn nötig z.B. die Instanzvariable this.x von dem Methoden-Parameter x unterschieden werden, wenn bei einen Bezeichner x deklarieren. true Logisch wahr, ist ein Wert vom Datentyp boolean. Typumwandlung Typumwandlungen (engl. type cast) werden benutzt um Datentypen explizit in andere Datentypen umzuwandeln. Ein Beispiel: double b = 5.5; int a = (int) b; Hier wird die Fließkommazahl 5.5 (double) in die Ganzzahl 5 (int) umgewandelt. Ungleich (!=) Ist ein Vergleichsoperator, welcher true zurückgibt, wenn die verglichenen Werte nicht gleich sind, sonst false. Variable Eine Variable kennzeichnet einen Speicherplatz im Computer auf den über einen Namen (den Variablennamen) zugegriffen werden kann. Die Größe des Speicherplatzes und die Art der gespeicherten Daten hängt vom Datentyp der Variable ab. Z.B. deklariert double r=1.5; eine Variable vom Typ double, die 8 Byte im Speicher belegt, auf den über den Name r zugegriffen werden kann. 6 Vererbung Vererbung wird verwendet, um bestehende Klassen zu erweitern. Die erbende Klasse (man sagt auch abgeleitete Klasse) erbt alle Methoden und Attribute der Elternklasse. Zum Beispiel, wenn man viele Klassen hat, die die selben Funktionen und Attribute benötigen, erstellt man eine Oberklasse, welche die Grundfunktionen beinhaltet und lässt die ähnlichen Klassen davon erben. Diese können nun alles, was die Oberklasse auch kann, und man muss nur noch die Unterschiede implementieren. Folglich spart man durch die Vererbung Zeit und vor allem muss man den vererbten Code nur in der Oberklasse ändern und die Unterklassen sind dann auch automatisch angepasst. Verzweigung Siehe bedingte Anweisung. void Eine Funktion, die für den Rückgabewert den Datentyp void (engl. für Leere) hat, liefert keinen Wert zurück sondern führt nur Code aus. Beispiel: public void draw(); zeichnet nur ein Objekt, aber muss keinen Wert zurückgeben (Siehe auch return). while Eine while-Schleife führt einen Anweisungsblock so lange aus, wie eine bestimmte Bedingung erfüllt ist. Ist die Bedingung nicht mehr erfüllt wird die Schleife abgebrochen. Beispiel: int i=1; while(i<1000){ i = i*2; } berechnet alle Zweierpotenzen unter 1000. Ist die Schleifenbedingung schon zu Anfang nicht erfüllt, wird die Schleife gar nicht ausgeführt. Zuweisung (=) Wird genutzt, um Variablen einen Wert zu zuweisen, z.B. x=10. Ein weiteres Beispiel: nach Ausführung von x=x+1 ist die Variable x um eins größer als vor der Ausführung; das Gleichheitszeichen darf hier nicht als mathematische Gleichheit aufgefasst werden (siehe Gleichheit) sonderen als Zuweisung. Zuweisungsverkürzung (+= -= *= /=) Hiermit können Zuweisungen der Form x = x + y auch verkürzt als x += y geschrieben werden. 7