Einführung in die Programmierung mit BlueJ Thema 3 – Methoden und Datenspeicher Dr. Henry Herper – Otto-von-Guericke-Universität Magdeburg - WS 2013/14 Typ-Terminologie in Java Java - Typen primitive - Typen Referenzdatentypen Ordinaltypen array int boolean char 2 float class Datentypen Ganzzahlige Datentypen Datentypen für Gleitkommazahlen 3 Datentypen für Zeichen - Character Java-Implementierung Typ Beschreibung char Word-Zeichen, angeordnet entsprechend des UnicodeZeichensatzes. Die ersten 256 Zeichen entsprechen dem ANSI-Zeichensatz 4 Größe 2 Byte Datentypen für Zeichen - Character Java ermöglicht die Darstellung von Unicode-Zeichen in hexadezimaler Darstellung. Die Unicode-Schreibweise codiert das Zeichen durch \u gefolgt von vier hexadezimalen Ziffern (Position in der Unicode-Tabelle). Beispiel: ‘a‘ entspricht ‘\u0061‘ Escape-Sequenzen: Escape-Sequenz ‘\t‘ ‘\n‘ ‘\‘‘ ‘\“‘ ‘\\‘ 5 Bedeutung Tabulator Zeilenvorschub ‘ “ \ Datentypen für Zeichenketten - String “ zeichenkette “ Zeichenketten werden in Java nicht als Werte eines speziellen einfachen Datentyps, sondern als Objekte eines speziellen Klasse String behandelt. (Schreibweise für String beginnend mit Großbuchstaben beachten!) 6 Datentypen für Wahrheitswerte - boolean Zur Verarbeitung von Wahrheitswerten (z.B. dem Ergebnis von Vergleichen) gibt es den Datentyp boolean. Variablen dieses Datentyps können nur die Wahrheitswerte true oder false annehmen. public void vergleich2() { int a = 3; int b = 5; boolean w , w1; w1 = true; w = a > b; System.out.println(w); System.out.println(w1); } 7 Konstanten Eine Konstante ist eine Sonderform der Variablen, der bei der Deklaration ein Wert zugewiesen wird. Mit dem Schlüsselwort final wird festgelegt, dass diese Variable bei der Abarbeitung des Programms nicht mehr verändert wird. (symbolische Konstante, final-Variable) Konstantendeklaration final 8 datentyp bezeichner = ausdruck ; Deklaration von Methoden Methodendeklaration: sichtbarkeit { rueckgabetyp methodenname methodenrumpf ( parameterliste ) } Sichtbarkeit: Die Sichtbarkeit legt fest, in welchen Bereichen auf die Methode zugegriffen werden kann. Wir verwenden public – Zugriff von außen ist zulässig oder private – der Zugriff ist nur innerhalb des Objektes zulässig. 9 Deklaration von Methoden Methodendeklaration: sichtbarkeit rueckgabetyp { methodenname methodenrumpf ( parameterliste ) } Rückgabetyp: Der Rückgabetyp legt fest, welchen Datentyp das Ergebnis der Methode hat. Das Ergebnis wird über die Rückgabeanweisung return ausgegeben. Methoden, die nur den Datenspeicher lesen und keine Veränderung im vornehmen, werden als sondierende Methoden bezeichnet. Gibt eine Methode keinen Wert zurück, so hat sie den Rückgabetyp void. In diesem Fall ist keine return Anweisung erforderlich. Wird sie verwendet, so führt ihre Abarbeitung zum Abbruch der Methode. 10 Deklaration von Methoden Methodendeklaration: sichtbarkeit rueckgabetyp { methodenname methodenrumpf ( parameterliste ) } Methodenname: Der Methodenname muss ein gültiger Bezeichner sein. Über diesen Namen wird die Funktionalität des Objektes aufgerufen. 11 Deklaration von Methoden Methodendeklaration: sichtbarkeit rueckgabetyp { methodenname methodenrumpf ( parameterliste ) } Parameterliste: Die Parameterliste ist eine Kommaliste von Variablendeklarationen. Die darin deklarierten Variablen werden als formale Parameter bezeichnet. Sie werden beim Aufruf der Methode initialisiert und haben innerhalb der Methode den Status von lokalen Variablen. Werden mehrere Parameter deklariert, so muss für jeden Parameter eine Typenbezeichnung angegeben werden. Die Parameterliste kann leer sein. Die Parameterübergabe erfolgt nach dem Prinzip „Call by Value“. Die beim Aufruf verwendeten Parameter müssen zuweisungsverträglich zu denen in der Parameterliste sein. 12 Deklaration von Methoden Methodendeklaration: sichtbarkeit rueckgabetyp { methodenname methodenrumpf ( parameterliste ) } Methodenrumpf: Der Methodenrumpf beschreibt die Funktionalität einer Methode – den Algorithmus. Wird im Methodenrumpf der Datenspeicher des Objektes verändert, so werden diese Methoden als verändernde Methoden bezeichnet. Sie ändern damit den Zustand eines Objektes. 13 Ausdrücke Ein Ausdruck besteht aus einer Kombination von Operatoren und Operanden. Die einfachste Form eines Ausdrucks ist eine Konstante, eine Variable oder ein Funktionsaufruf. Diese werden auch als Operanden bezeichnet. Durch Operatoren können diese Operanden zu komplexen Ausdrücken zusammengefügt werden. Jeder Ausdruck hat einen definierten Typ und einen Wert. Daher können Ausdrücke wieder als Operanden in Ausdrücken auftreten. Bei den Operatoren werden unäre, binäre und ternäre Operatoren unterschieden. Ein unärer Operator besitzt nur einen Operanden, ein binärer Operator besitzt zwei Operanden und ein ternärer Operator besitzt drei Operanden. Mit Hilfe von arithmetischen Operatoren werden Berechnungen durchgeführt, deren Ergebnis ein Zahlenwert ist. 14 Ausdrücke Ausdrücke bestehen aus Operatoren und Operanden. Ein Ausdruck steht immer für einen Wert. Bei der Abarbeitung der Ausdrücke gelten folgende Regeln: • Ein Operand zwischen zwei Operatoren von unterschiedlichem Rang ist immer an den höherrangigen Operator gebunden. • Ein Operand zwischen zwei gleichrangigen Operatoren ist immer an den Operator gebunden, der links von ihm steht. • Ausdrücke in Klammern werden als einzelner Operand betrachtet und immer als erstes abgearbeitet. • Steht der Operator hinter dem Opernden, so wird dies als PostfixNotation bezeichnet. Der Operator wird ausgeführt, bevor der Operand weiter verwendet wird. (Gilt nur für Inkrement- und Dekrementoperator.) 15 Binäre arithmetische Operatoren Operator + * / % Bedeutung Addition Subtraktion Multiplikation Division Divisionsrest bei ganzzahliger Division Der Datentyp eines Ausdrucks ist von den Datentypen der Operanden abhängig. Sind bei der Division beide Operanden ganzzahlig, so ist das Ergebnis auch ganzzahlig. Ist mindestens einer der Operanden eine Gleitpunktzahl, so ist das Ergebnis der Division auch eine Gleitpunktzahl. 16 Bestimmung des Ergebnistyps 1. Es wird geprüft, ob einer der Operanden vom typ double ist – ist dies der Fall, so ist der Ergebnistyp double. Die Operation wird im Bereich double ausgeführt. 2. Falls nicht, prüft der Compiler, ob einer der Operanden vom Typ float ist – ist dies der Fall, so ist der Ergebnistyp float. Die Operation wird im Bereich float ausgeführt. 3. Falls nicht, prüft der Compiler, ob einer der Operanden vom Typ long ist – ist dies der Fall, so ist der Ergebnistyp long. Die Operation wird im Bereich long ausgeführt. 4. Trat keiner der Fälle 1 – 3 ein, so ist der Ergebnistyp der Operation auf jeden Fall int. Die Operation wird im Bereich int ausgeführt. Wird ein andere Ergebnistyp gewünscht, so muss dies durch Typumwandlung (Voranstellen der Typs) erzwungen werden. 17 Wertzuweisungen Ergibtanweisungen oder Wertzuweisungen sind in Java als einfache oder zusammengesetzte Anweisungen möglich. Eine einfache Zuweisung weist mit Hilfe des Zuweisungsoperators = einer Variablen den Wert eines Ausdrucks zu. Die Variable steht immer links vom Zuweisungsoperator, der zugewiesene Ausdruck immer rechts vom Zuweisungsoperator. Jede Zuweisung ist selbst ein Ausdruck, dessen Wert der zugewiesene Wert ist. Damit besteht die Möglichkeit, eine Wertzuweisung in einem Ausdruck vorzunehmen. Beispiel: sin( X = 3) Es wird zuerst der Wert des Ausdrucks berechnet, und anschließend an die Funktion übergeben. 18 Vorrangregeln /Quelle: RATZ07, Seite 75/ 19 Beispielaufgabe: Ticketautomat Download-Link in den eduComponents 20 Ticketautomat - Instanzvariablen public class TicketMachine { // Preis für ein Ticket an dieser Maschine private int price; // Geldmenge, die bisher eingeworfen wurde private int balance; // Gesamtgeldmenge, in diesem Automat private int total; 21 Ticketautomat durch Interaktion herausfinden, wie der Automat funktioniert Datenspeicher identifizieren: price, total, balance (Instanzvariablen) Welche Datentypen haben die Instanzvariablen? Wie ist der Zugriff auf diese Datentypen geregelt? Wodurch kann der Inhalt dieser Instanzvariablen geändert werden? Wie wird festgelegt, was ein Ticket kostet? 22 Ticketautomat Datenübergabe durch Parameter 23 Ticketautomat Zuweisung des Parameterwertes im Quelltext public TicketMachine(int cost) { price = cost; balance = 0; total = 0; } 24 Sondierende und verändernde Methoden Bezug zu Instanzvariablen sondierenden Methoden geben Inhalt der Instanzvariablen zurück – sorgen also für Lesezugriff auf die in der Regel private deklarierten Variablen verändernde Methoden können den Inhalt von Instanzvariablen ändern Instanzvariablen können nicht direkt geändert werden, immer über Methoden! stellt sicher, dass nur erlaubte Änderungen stattfinden 25 Aufgaben und Kontrollfragen 1. Beschreiben Sie die Methodendeklaration in Java. Gehen Sie dabei auf das Grundkonzept der Parameterübergabe ein. Welche Anforderungen werden an die Datentypen der Parameter gestellt. Wie ordnen sich die Parameter in das Variablenkonzept ein. Erläutern Sie die Funktion der Return-Anweisung. 2. Wie wird ein Methodenaufruf in Java realisiert? 26 Literatur /RATZ07/ Dietmar Ratz, Jens Scheffler, Detlef Seese, Jan Wiesenberger Grundkurs Programmieren in JAVA Bd. 1: Der Einstieg in die Programmierung und Objektorientierung Carl Hanser Verlag München Wien, 2007, ISBN-13: 978-3-446-41268-2 /BARNES09/ David J. Barnes, Michael Kölling Java lernen mit BlueJ Pearson Studium, 2009, ISBN-13: 978-3-86894-001-5 Offizielle BlueJ-Webseite: www.bluej.org Ergänzender Kurs: http://www.u-helmich.de/inf/BlueJ/kurs11/index.html 27