Einführung in die Informatik Objekte

Ähnliche Dokumente
Einführung in die Informatik Objekte

Einführung in die Informatik Definition von Klassen

Einführung in die Informatik Definition von Klassen

Repetitorium Informatik (Java)

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Einstieg in die Informatik mit Java

Einführung in die Informatik. Processing Numbers. Motivation. Primitive Datentypen. Operatoren versus Methoden

Einführung in die Informatik Jumping into Java

Der Datentyp String. Stringvariable und -vergleiche

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Einführung in die Informatik

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Java: Eine kurze Einführung an Beispielen

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

3 Objektorientierte Konzepte in Java

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

1 Hashing und die Klasse String

Aufgabenblatt 1: - Präsenzübung für die Übungen Do Mi Ausgabe Mi

3. Anweisungen und Kontrollstrukturen

JAVA - Methoden

Java Einführung Methoden in Klassen

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die Programmierung 1

JAVA - Methoden - Rekursion

Elementare Konzepte von

Algorithmen und Programmierung II

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Einführung in die Informatik Files and Streams

Kapitel 3. Programmierkurs. Arten von Anweisungen. 3.1 Was sind Anweisungen?

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Programmiertechnik Klassenmethoden

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen

Programmierkurs C/C++

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

1 Abstrakte Klassen, finale Klassen und Interfaces

Einführung in die Informatik Jumping into Java

Java Einführung Methoden. Kapitel 6

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Tag 4 Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Algorithmen und Datenstrukturen 06

Überblick. 5. Objekt und Klasse, Elementfunktionen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

ÜBUNGS-BLOCK 1 LÖSUNGEN

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Überschreiben von Methoden

Einstieg in die Informatik mit Java

Objektorientierung (OO)

Java Cheatsheet. Mehrzeiliger Kommentar (beginnt mit /* und endet mit */)

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

Klassen mit Instanzmethoden

Aufgabe 1 (12 Punkte)

Objektorientierte Programmierung

01 Einführung in PHP. Einführung in PHP 1/13 PHP in Aktion

Java Einführung Objekt-Datentypen und Strings. Kapitel 8 und 9

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Java Vererbung. Inhalt

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

1. Der Einstieg in Java. Was heißt Programmieren?

Vorlesung Informatik II

5.4 Klassen und Objekte

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen

Einstieg in die Informatik mit Java

2.5 Primitive Datentypen

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Java Einführung Klassendefinitionen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

PIWIN 1 Übung Blatt 5

Einstieg in die Informatik mit Java

Wiederholung. Jedes Objekt hat seinen eigenen Zustand/seine eigenen Variablen (gilt auch für mehrere Objekte, die zur gleichen Klasse gehören).

Java Einführung Programmcode

Die Programmiersprache C Eine Einführung

Funktionen in JavaScript

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

Überblick. Peer Kröger (LMU München) Einführung in die Programmierung WS 14/ / 295

Die einfachsten Anweisungen

Einführung in die Programmierung

Semestralklausur Einführung in die Programmierung, WS 2005/06, Seite 1/6 Name, Vorname, Matrikelnummer: Gruppe A

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Elementare Datentypen in C++

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

Klausur Fachprüfung Wirtschaftsinformatik. Name:

Überladen von Operatoren

Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:

Java-Programmierung mit NetBeans

Klassen und Objekte. Objekte einer Klasse bilden

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Transkript:

Einführung in die Informatik Objekte Referenzen, Methoden, Klassen, Variablen, Objekte Wolfram Burgard 3.1

Referenzen Eine Referenz in Java ist jede Phrase, die sich auf ein Objekt bezieht. Referenzen werden verwendet, um dem entsprechenden Objekt eine Nachricht zu schicken. Streng genommen ist System.out kein Objekt sondern nur eine Referenz. Bezeichnung: Das System.out-Objekt 3.2

Ausführen von Nachrichten Java-Statements werden in der Reihenfolge ausgeführt, in der sie im Programm stehen. Wenn eine Nachricht an ein Objekt (den Empfänger) geschickt wird, wird der Code des Senders unterbrochen, bis der Empfänger die Nachricht erhalten hat. Der Empfänger führt die durch die Nachricht spezifizierte Methode aus. Dies nennen wir Aufrufen einer Methode. Wenn der Empfänger die Ausführung seines Codes beendet hat, kehrt die Ausführung zum Code des Senders zurück. 3.3

Die String-Klasse Die Klasse String ist eine vordefinierte Klasse. Sie modelliert Folgen von Zeichen (Characters). Zu den zulässigen Zeichen gehören Buchstaben, Ziffern, Interpunktionssymbole, Leerzeichen und andere, spezielle Symbole. In Java werden alle Folgen von Zeichen, die in Hochkommata eingeschlossen sind, als Referenzen auf Zeichenketten interpretiert. "Hello" Referenz referenziert Eine Instanz von String Objekt modelliert Hello durch das Objekt modellierte Zeichenkette 3.4

Die String-Methode touppercase Eine Methode, die von der String-Klasse zur Verfügung gestellt wird, ist touppercase, welche keine Argumente hat. Um eine Nachricht an die String-Klasse zu senden, verwenden wir die übliche Notation: Anwendungsbeispiel: Referenz.Methodenname (Argumente ) "ibm".touppercase() Der Empfänger der touppercase-nachricht ist das String-Objekt, welches durch "ibm" referenziert wird. "ibm" Referenz referenziert Empfänger-Objekt eine Instanz von String, die die Zeichenkette "ibm" modelliert touppercase () Nachricht 3.5

Effekte von String-Methoden Eine Methode der Klasse String ändert nie den Wert des Empfängers. Stattdessen liefert sie als Ergebnis eine Referenz auf ein neues Objekt, an welchem die entsprechenden Änderungen vorgenommen wurden. Beispiel: "ibm".touppercase() sendet nicht nur die touppercase-nachricht an das "ibm"-objekt. Der Ausdruck liefert auch eine Referenz auf ein neues "IBM"-Objekt. Wir sagen: Der Return-Wert von "ibm".touppercase() ist eine Referenz. 3.6

Beispiel Da die println-methode der Klasse PrintStream eine Referenz auf ein String-Objekt verlangt, können wir schreiben: System.out.println("ibm".toUpperCase()); Referenz String Objekt, das ibm modelliert "ibm".touppercase( ) Referenz String Objekt, das IBM modelliert neu erzeugtes Objekt 3.7

Methoden, Argumente und Return-Werte Klasse Methode Return-Wert Argumente PrintStream println kein kein PrintStream println kein PrintStream print kein String touppercase Referenz auf ein String-Objekt Referenz auf ein String-Objekt Referenz auf ein String-Objekt kein Signatur einer Methode: Bezeichnung der Methode plus Beschreibung seiner Argumente Prototyp einer Methode: Signatur + Beschreibung des Return-Wertes 3.8

Methoden ohne Return-Wert Viele Methoden liefern eine Referenz auf ein Objekt zurück. Das gilt insbesondere für Methoden, die ein Ergebnis liefern, wie z.b. die String-Methode touppercase(), die eine Referenz auf ein String-Objekt liefert. Aber welchen Typ sollen Methoden wie println() haben, die kein Ergebnis liefern? Wir sagen: Methoden ohne Ergebnis haben den Typ void. 3.9

Referenz-Variablen Eine Variable ist ein Bezeichner, dem ein Wert zugewiesen werden kann, wie z.b. sei x=5. Sie wird Variable genannt, weil sie zu verschiedenen Zeitpunkten verschiedene Werte annehmen kann. Eine Referenz-Variable ist eine Variable, deren Wert eine Referenz ist. Angenommen line ist eine String-Referenz-Variable auf ein String- Objekt, welches folgende Zeichenkette repräsentiert: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Folgende Anweisungen geben zwei Zeilen von x-en aus: System.out.println(line); System.out.println(line); Möglich ist natürlich auch: System.out.println(line.toUpperCase()); 3.10

Deklaration von Referenz-Variablen und Wertzuweisungen Um in Java eine Referenz-Variable zu deklarieren, geben wir die Klasse und den Bezeichner an und schließen mit einem Semikolon ab: String PrintStream output; greeting; // Referenz auf einen Begrüßungs-String // Referenz auf dasselbe PrintStream- // Objekt wie System.out Um einer Variable einen Wert zu geben, verwenden wir eine so genannte Wertzuweisung: Beispiele: output = System.out; greeting = "Hello"; Variable = Wert; Wir können jetzt schreiben: output.println(greeting.touppercase()); 3.11

Effekt einer Wertzuweisung an eine Referenz-Variable Nach greeting = "Hello"; referenzieren "Hello" und greeting dasselbe Objekt. "Hello" Referenz referenziert greeting eine Instanz von String Objekt Hello durch das Objekt Modellierte Zeichenkette Referenzvariable 3.12

Wertzuweisung versus Gleichheit Betrachte t = "Springtime"; t = "Wintertime"; Eine Wertzuweisung ordnet einer Variablen den Wert auf der rechten Seite des Statements zu. Der bisherige Wert der Variablen geht verloren. Nach der ersten Zuweisung ist der Wert von t die Referenz auf das durch "Springtime" referenzierte String-Objekt. Nach der zweiten Zuweisung ist der Wert von t die Referenz auf das "Wintertime"-Objekt. Wir sagen: Eine Wertzuweisung ist imperativ. Variablen enthalten immer nur den letzten, ihnen zugewiesenen Wert. 3.13

Rollen von Variablen Je nachdem, wo Variablen auftreten, können sie 1. Informationen speichern oder 2. den in ihnen gespeicherten Wert repräsentieren. Beispiele: String s, t; s = "Springtime"; t = s; Die erste Zuweisung speichert in s die Referenz auf das "Springtime"-Objekt (Fall 1). Die zweite Zuweisung bewirkt, dass t und s dasselbe Objekt referenzieren (Fall 1 für t und Fall 2 für s). 3.14

Mehrere Referenzen auf dasselbe Objekt String s, t; s = "ACM"; t = s; "ACM" String-Konstante referenziert s referenziert referenziert t "ACM" Referenzvariable Referenzvariable 3.15

Unabhängigkeit von Variablen String s; String t; s = "Inventory"; t = s; Nach der Anweisung t = s referenziert t dasselbe Objekt wie s. Wenn wir anschließend s einen neuen Wert zuweisen, z.b. mit s = "payroll", ändert das den Wert für t nicht. Durch t = s wird lediglich der Wert von s in t kopiert. Eine Wertzuweisung realisiert keine permanente Gleichheit. Variablen sind unabhängig voneinander, d.h. ihre Werte können unabhängig voneinander geändert werden. 3.16

Reihenfolge von Statements (erneut) (1) String greeting; String biggreeting; greeting = "Hello, World"; biggreeting = greeting.touppercase(); System.out.println(greeting); System.out.println(bigGreeting); Ausgabe Hello, World HELLO, WORLD 3.17

Reihenfolge von Statements (erneut) (2) Alternativ dazu hätten wir auch die folgende Reihenfolge verwenden können: String greeting; greeting = "Hello, World"; System.out.println(greeting); String biggreeting; biggreeting = greeting.touppercase(); System.out.println(bigGreeting); Deklarationen können an jeder Stelle auftauchen, vorausgesetzt sie gehen jedem anderen Vorkommen der deklarierten Variablen voraus. Deklarationen können auch so genannte Initialisierungen enthalten: String greeting = "Hello, World"; 3.18

Methoden, Argumente und Return-Werte Methode Return-Wert Argumente touppercase String-Objekt-Referenz keine tolowercase String-Objekt-Referenz keine length eine Zahl keine trim String-Objekt-Referenz keine concat String-Objekt-Referenz String-Objekt-Referenz substring String-Objekt-Referenz eine Zahl substring String-Objekt-Referenz zwei Zahlen 3.19

Eigenschaften dieser Methoden length gibt die Anzahl der Zeichen des Empfängerobjektes zurück. "Hello".length() ist der Wert 5. trim liefert eine Referenz auf ein String-Objekt, welches sich durch das Argument dadurch unterscheidet, dass führende oder nachfolgende Leeroder Tabulatorzeichen fehlen. " Hello ".trim() ist eine Referenz auf ein Objekt, das "Hello" repräsentiert. concat liefert eine Referenz auf ein String-Objekt, welches sich durch das Anhängen des Argumentes an das Empfängerobjekt ergibt. "ham".concat("burger") ist eine Referenz auf ein Object, welches "hamburger" repräsentiert. 3.20

Wirkung der Methode concat String s, t, u; s = "ham"; t = "burger"; u = s.concat(t); s erreicht concat (t) Nachricht Referenz ham Empfängerobjekt referenziert hamburger neu erzeugtes Objekt u Referenz burger ein Argument String-Objekt 3.21

Die Varianten der Methode substring substring erzeugt eine Referenz auf eine Teilsequenz der Zeichenkette des Empfängerobjekts. In Java startet die Nummerierung bei 0. Die Variante mit einem Argument gibt eine Referenz auf den Teilstring zurück, der an der durch den Wert des Argumentes spezifizierten Position beginnt. Die Version mit zwei Argumenten gibt eine Referenz auf den Teilstring, der an der durch den Wert des ersten Argumentes gegebenen Position beginnt und unmittelbar vor der durch das zweite Argument gegebenen Position endet. 3.22

Funktion der Methode substring mit einem Argument String s, t; s = "hamburger"; t = s.substring(3); h a m b u r g e r Vierter Buchstabe 0 1 2 3 4 5 6 7 8 Erster Buchstabe Substring beginnend an Position 3 h a m b u r g e r 0 1 2 3 4 5 6 7 8 h a m b u r g e r 0 1 2 3 4 5 6 7 8 3.23

Funktion der Methode substring mit einem Argument String s, t; s = "hamburger"; t = s.substring(3); s substring(3) Referenz referenziert erreicht Nachricht erzeugt hamburger Empfängerobjekt burger neu erzeugtes Objekt referenziert Referenz t 3.24

Funktion der Methode substring mit zwei Argumenten String s, t; s = "hamburger"; t = s.substring(3,7); "hamburger".substring(3,7) hamburger, von 3 bis 7 Substring endet hier Substring beginnt hier h a m b u r g e r 0 1 2 3 4 5 6 7 8 3.25

Beispiel: Finden des mittleren Zeichens einer Zeichenkette String word = "antidisestablishmentarianism"; Zur Berechnung der mittleren Position des Wortes verwenden wir word.length()/2 Das mittlere Zeichen berechnen wir dann mit: word.substring(word.length()/2, word.length()/2 + 1); 3.26

Das komplette Programm class Program2 { public static void main(string[] arg) { String word = "antidisestablishmentarianism"; String middle; middle = word.substring(word.length()/2, word.length()/2 + 1); System.out.println(middle); } } Ausgabe des Programms: s 3.27

Überladung/Overloading Die String-Klasse hat zwei Methoden mit Namen substring. Beide Methoden haben verschiedene Signaturen, denn sie unterscheiden sich in den Argumenten, die sie benötigen und bieten unterschiedliche Funktionalitäten. Methoden mit gleichem Namen und unterschiedlichen Signaturen heißen überladen bzw. overloaded. 3.28

Kaskadieren von Methodenaufrufen String s1 = "ham", s2 = "bur", s3 = "ger", s4; Um eine Referenz auf die Verkettung der drei durch s1, s2, und s3 referenzierten String-Objekte zu erzeugen, müssten wir schreiben: s4 = s1.concat(s2); s4 = s4.concat(s3); Dies geht jedoch einfacher mit s4 = s1.concat(s2).concat(s3); 1. Die Message concat(s2) wird an s1 gesendet. 2. Die Message concat(s3) wird an das Ergebnisobjekt gesendet. 3. Die Referenz auf das dadurch erzeugte String-Objekt wird s4 zugewiesen. 3.29

Funktion kaskadierter Nachrichten String firstinit = "J", middleinit = "F", lastinit = "K"; System.out.println(firstInit.concat(middleInit).concat(lastInit)); firstinit referenziert Das "J" Objekt empfängt eine concat Nachricht, erzeugt das "JF" Objekt und liefert eine Referenz darauf zurück Das "JF" Objekt empfängt eine concat Nachricht, erzeugt das "JFK" Objekt und liefert eine Referenz darauf zurück J JF concat(middleinit) Nachricht referenziert Eine concat Nachricht wird an das "J" Objekt gesendet concat(lastinit) Nachricht Eine concat referenziert Nachricht wird an das "JF" Objekt gesendet F K JFK 3.30

Schachteln von Methodenaufrufen / Komposition Alternativ zu Kaskaden wie in s4 = s1.concat(s2).concat(s3); können wir Methodenaufrufe auch schachteln, was einer Komposition entspricht: s4 = s1.concat(s2.concat(s3)); Auswertung des Ausdrucks auf der rechten Seite: 1. Die Message concat(s3) wird an s2 gesendet. 2. An das s1-objekt wird eine concat-nachricht geschickt, die als Argument eine Referenz auf das in Schritt 1 erzeugte Ergebnisobjekt hat. 3. Die Referenz auf das dadurch erzeugte String-Objekt wird schließlich s4 zugewiesen. 3.31

Wirkung der Komposition String firstinit = "J", middleinit = "F", lastinit = K"; System.out.println(firstInit.concat(middleInit.concat(lastInit))); F K FK referenziert referenziert middleinit.concat(lastinit) referenziert firstinit.concat( ) referenziert JFK referenziert J 3.32

Weitere Eigenschaften von String-Objekten String-Objekte können nicht verändert werden. Alle Funktionen liefern als Return-Wert neue Objekte. Der leere String "" hat die Länge 0, d.h. "".length() liefert 0. 3.33

Erzeugen von Objekten Jede Klasse hat wenigstens eine Methode zum Erzeugen von Objekten. Solche Methoden heißen Konstruktoren. Der Name eines Konstruktors stimmt stets mit dem der Klasse überein. Wie andere Methoden auch, können Konstruktoren Argumente haben. Da wir mit Konstruktoren neue Objekte erzeugen wollen, können wir sie an kein Objekt senden. In Java verwenden wir das Schlüsselwort new, um einen Konstruktor aufzurufen: new String("hello world") Dies erzeugt ein String-Objekt und sendet ihm die Nachricht String("hello world"). 3.34

Die Operation new Das Schlüsselwort new bezeichnet eine Operation, die einen Wert zurückgibt. Der Return-Wert einer new-operation ist die Referenz auf das neu erzeugte Objekt. Wir nennen new einen Operator. 3.35

Sichern neu erzeugter Objekte Der new-operator liefert uns eine Referenz auf ein neues Objekt. Um dieses Objekt im Programm verwenden zu können, müssen wir die Referenz in einer Referenzvariablen sichern. Beispiel: String s, t, upper, lower; s = new String("Hello"); t = new String(); // identisch mit "" upper = s.touppercase(); lower = s.tolowercase(); System.out.println(s); 3.36

Zusammenfassung (1) Das Verhalten von Objekten wird durch Methoden spezifiziert. Die Signatur einer Methode besteht aus dem Namen der Methode sowie der Anzahl und den Typen der Argumente. Der Prototyp einer Methode ist die Signatur zusammen mit dem Return-Wert. Wird eine Nachricht an ein Objekt gesendet, wird der Code des Aufrufers unterbrochen bis die Methode ausgeführt worden ist. Einige Methode haben Return-Werte. Wenn eine Methode keinen Return-Wert hat, ist der Return-Typ void. Variablen können Werte zugeordnet werden. 3.37

Zusammenfassung (2) Verschiedene Variablen sind unabhängig voneinander. Jede Variable hat zu einem Zeitpunkt nur einen Wert. Wertzuweisungen sind destruktiv, d.h. sie löschen den vorhergehenden Wert der Variablen. Referenzwerte, die von Methoden zurückgegeben werden, können Variablen zugewiesen werden. Return-Werte können aber auch Empfänger neuer Nachrichten sein. Dies heißt Kaskadierung. Return-Werte können auch als Argumente verwendet werden. Dieser Prozess heißt Komposition. 3.38

Zusammenfassung (3) Neue Objekte einer Klasse können mit dem new-operator erzeugt werden. Zusammen mit dem new-operator verwenden wir den Konstruktor, der den gleichen Bezeichner hat wie die Klasse selbst. 3.39