Programmiersprache Java Objektorientierte Programmierung II

Größe: px
Ab Seite anzeigen:

Download "Programmiersprache Java Objektorientierte Programmierung II"

Transkript

1 Programmiersprache Java Objektorientierte Programmierung II Peter Becker FH Bonn-Rhein-Sieg Fachbereich Informatik Vorlesung Sommersemester 2008

2 Allgemeines zur Vorlesung Vorbemerkungen Homepage zur Vorlesung: pbecke2m/progjava/ Die Vorlesung wird folienbasiert gehalten. Die Folien zur Vorlesung (Skript) stehen auf der Homepage vor der Vorlesung zur Verfügung. Format: PDF, ein- und vierseitig Empfehlung: Bringen Sie die ausgedruckten Folien mit in die Vorlesung und versehen Sie diese dort mit schriftlichen Bemerkungen. Benutzen Sie zum Drucken bitte die vierseitige Version des Skriptes. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 1

3 Organisation Vorbemerkungen Vorlesung V2, Dienstag 11:30 13:00 Uhr Bitte beachten Sie die Gruppeneinteilung für die Übungen! Für die Übungen benutzen wir Linux! Die wichtigsten Dinge für diese Veranstaltung: 1. Üben! 2. Üben! 3. Üben! Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 2

4 Voraussetzungen und Lernziele Vorbemerkungen Voraussetzungen: Beherrschung des Stoffes Einführung in die Programmierung bzw. Objektorientierte Programmierung I insbesondere: algorithmische Elemente, abstrakte Datentypen, Rekursion, Java Grundlagen (einfache Datentypen, Kontrollstrukturen, Arrays) Lernziele: Programmieren lernen Kennen der Konzepte der objektorientierten Programmierung Kennen der Sprachkonzepte von Java Selbständig Programme in Java zu anwendungsorientierten Problemstellungen entwicklen können Beherrschung einer objektorientierten Programmiersprache Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 3

5 Prüfung Vorbemerkungen Modulzuordnung: Computer Science: GPS, 2. Semester Business Information Systems: GINF, 2. Semester Schriftliche Prüfung in Form einer zweistündigen Klausur Art der Klausur: Wissensfragen und Programmierung (auf Papier) Hilfsmittel: keine 7 Credits keine weiteren Zulassungsvoraussetzungen? Bonuspunkte? Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 4

6 Inhalt Vorbemerkungen 1. Referenzdatentypen, Felder 2. Benutzung von Klassen 3. Konstruktion von Klassen 4. Vererbung 5. Abstrakte Klassen 6. Ausnahmebehandlung (Exceptions) 7. Schnittstellen 8. parametrisierbare Klassen (Generics) 9. Pakete 10. Java Klassenbibliotheken 11. Threads Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 5

7 Literatur Vorbemerkungen D. Ratz, J. Scheffler, D. Seese Grundkurs Programmieren in Java Band 1: Der Einstieg in Programmierung und Objektorientierung Hanser 2004 Standardwerk für diese Veranstaltung Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 6

8 Vorbemerkungen J. Goll, C. Weiß, F. Müller Java als erste Programmiersprache Teuber 2001 Früheres Standardwerk für diese Veranstaltung Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 7

9 C. Ullenboom Java ist auch eine Insel Galileo Press 2005 Vorbemerkungen Sehr umfangreich Behandelt weiterführende Themen (z.b. Datenbank- und Netzwerkprogrammierung, XML, Grafische Oberflächen). Geht weit über die Inhalte dieser Veranstaltung hinaus. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 8

10 Vorbemerkungen Oliver Böhm Java Software Engineering unter Linux SuSE Press 2002 Vermittelt keine Grundlagen, enthält dafür alles, was man zur professionellen Softwareentwicklung mit Java unter Linux benötigt. Ein Buch für das gesamte Studium. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 9

11 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen können. In Java gibt es prinzipiell zwei Arten von Referenzdatentypen: Felder und Klassen. In diesem Kapitel lernen wir den Umgang mit Feldern und die Benutzung der Klassen String und StringBuffer. Die Nutzung von Klassen ist Thema des nächsten Kapitels. Die Definition eigener Klassen ist Thema des übernächsten Kapitels. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 10

12 1. Felder und Strings Eigenschaften von Referenzdatentypen Referenz- vs. einfache Datentypen einfacher Datentyp: Eine Speicherzelle, die mit einer Variablen assoziiert ist, enthält den Wert der Variablen (direkter Zugriff). Referenztyp: Eine Speicherzelle, die mit einer Variablen assoziiert ist, enthält eine Referenz (Verweis, Zeiger) auf eine andere Speicherzelle, die den Wert enthält (indirekter Zugriff). symbolische Adresse b r Adresse im Speicher Inhalt Typ int Referenz Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 11

13 1. Felder und Strings Eigenschaften von Referenzdatentypen Im Unterschied zum einfachen Datentyp wird der Wert 124 der Variablen r nicht als numerischer Wert interpretiert, sondern als Adresse für eine andere Speicherzelle. Dort findet sich der eigentliche Wert bzw. unser eigentliches Objekt. Mit der Literalkonstanten null repräsentieren wir eine Referenz, die auf nichts (in das Nirgendwo) verweist. Wenn die Variable r von einem Referenztyp ist, dann sind r = null;... if ( r == null )... gültige Anweisungen. Grafische Notation für Variablen: b 4711 r Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 12

14 1. Felder und Strings Einfache Datentypen Rückblick: Einfache Datentypen (1) Ganzzahlige Datentypen long int short byte Repräsentation: Zweierkomplement Gleitkommatypen double float Repräsentation: 32 bzw. 64 Bit im IEEE 754 Standard char Repräsentation: als vorzeichenloser 16-Bit Integerwert boolean Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 13

15 1. Felder und Strings Einfache Datentypen Rückblick: Einfache Datentypen (2) Zu einem einfachen Datentyp gehört sein Wertebereich, sein lexikalischer Bereich (Literale) und die zur Verfügung stehenden Operationen. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 14

16 1. Felder und Strings Einfache Datentypen Einfache Datentypen: Implizite und explizite Typumwandlung Wir wollen die Addition L durchführen. Der Plus-Operator ist aber nur für Werte des gleichen Typs definiert. Was tun? Der Java-Compiler erkennt, daß der Datentyp zur linken Zahl einen Wertebereich hat, der den der rechten Zahl umfasst. So wird die 807 vom Compiler in eine automatisch long-zahl umgewandelt. implizite Typkonvertierung (implicite typecast) Implizite Typkonvertierungen treten immer dann auf, wenn ein kleinerer Zahlenbereich in einen größeren Zahlenbereich abgebildet wird. byte short int long char int float double Ganzzahlige Datentypen können auch implizit in Gleitkommatypen umgewandelt werden, obwohl dabei Rundungsfehler auftreten können. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 15

17 1. Felder und Strings Einfache Datentypen Die folgende Anweisung dagegen liefert einen Fehler beim Compilieren: int i = 3.0; Grund: 3.0 ist eine double-zahl. Bei einer Umwandlung nach int geht eventuell Information verloren. Stattdessen könnten wir eine explizite Typkonvertierung (explicite Typecast) durchführen. Hierzu schreibt man den Zieldatentyp in Klammern vor die entsprechende Zahl oder Ausdruck. (int) 3.14 Hier würde der Compiler die Nachkommastellen abschneiden. Eine Umwandlung von boolean in einen anderen Datentyp ist nicht möglich. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 16

18 1. Felder und Strings Eindimensionale Felder Felder Felder (Arrays) gestatten es, mehrere Variablen durch einen gemeinsamen Namen anzusprechen und lediglich durch einen Index zu unterscheiden. Alle diese indizierten Variablen haben dabei den gleichen Typ (Komponententyp, Basistyp). Die Variablen selbst werden als Komponenten des Feldes bezeichnet. Der Index zum Ansprechen der Komponenten ist vom Typ int. Hierbei sind nur nichtnegative Werte erlaubt. Wir können uns vorstellen, daß die Komponenten eines Feldes aufeinanderfolgend im Speicher des Rechners abgelegt sind. Der Index für eine Komponente ergibt sich dabei aus der Position innerhalb des Feldes, von Null aufwärts gezählt. Beispiel: Repräsentation eines Vektors des IR n : Feld mit double als Komponententyp Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 17

19 1. Felder und Strings Eindimensionale Felder Deklaration von Feldern Syntax: Komponententyp[] Variablenname; Beispiele: int[] zahlenfolge; double[] vektor; Die eckigen Klammern machen deutlich, daß die Variable ein Feld referenziert, mit dem Typ links von [] als Komponententyp. Als Komponententyp sind nicht nur einfache Datentypen, sondern auch Referenztypen erlaubt. String[] wortliste; Insbesondere sind auch Feldtypen als Komponententyp erlaubt (hierzu später mehr). Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 18

20 1. Felder und Strings Eindimensionale Felder Erzeugung von Feldern Die Deklaration einer Feld-Variablen erzeugt kein Feld! Nach der Deklaration existiert eine Variable, die eine Referenz auf ein Feld als Wert aufnehmen, kann. Das eigentliche Feld existiert aber noch nicht. Syntax zur Erzeugung von Feldern: Variablenname = new Komponententyp [ Feldlänge ]; Beispiele: zahlenfolge = new int[20]; vektor = new double[3]; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 19

21 1. Felder und Strings Eindimensionale Felder Deklaration und Erzeugung können auch zusammen erfolgen. Beispiele: int[] zahlenfolge = new int[20]; double[] vektor = new double[3]; Bitte beachten Sie: Die Größe eines Feldes ist nicht Bestandteil des Typs. Sie wird erst bei der Erzeugung des Feldes festgelegt. Die Feldlänge kann durch einen Ausdruck angegeben werden. Einer Feld-Variable können jederzeit andere Felder gleichen Typs zugewiesen werden. double[] vektor = new double[3]; double[] vektor2 = new double[7]; vektor = new double[3]; vektor = new double[5]; vektor = vektor2; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 20

22 1. Felder und Strings Eindimensionale Felder Komponentenzugriff und -initialisierung double[] vektor = new double[3]; Welchen Wert haben die Feldkomponenten nach der Erzeugung? Dies ist für jeden möglichen Komponententyp festgelegt: ganzzahlige Typen: 0 char: \0 double bzw. float: 0.0 bzw. 0.0f boolean: false Referenztyp: null Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 21

23 1. Felder und Strings Eindimensionale Felder Syntax für die Wertzuweisung an eine Komponente: Variablenname[Index] = Wert; Beispiel: vektor[0] = 1.0; vektor[1] = 2.0; vektor[2] = -1.0; Index muß ein Ausdruck sein, der einen int-wert liefert. Der Wert für Index muß zwischen 0 und Feldlänge-1 liegen. Wert kann natürlich ein beliebiger Ausdruck passend zum Komponententyp sein. int[] quadratfolge = new int[100]; for (int i=0 ; i<100 ; i++ ) quadratfolge[i] = i*i; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 22

24 1. Felder und Strings Eindimensionale Felder Syntax für den Zugriff auf den Wert einer Komponente (als Ausdruck): Variablenname[Index] Beispiel: double summe = 0.0; for (int i=0 ; i<3 ; i++ ) { System.out.println( "vektor[" + i + "] = " + vektor[i] ); summe = summe + vektor[i] * vektor[i]; System.out.println("Laenge des Vektors: " + Math.sqrt( summe )); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 23

25 1. Felder und Strings Eindimensionale Felder Statt Erzeugung mit new und anschließender Initialisierung durch Wertzuweisungen ist auch eine verkürzte Schreibweise möglich. Beispiele: int[] lottozahlen = { 6, 11, 19, 21, 30, 40 ; double[] vektor = { 1.0, 2.0, -1.0 ; String[] wortliste = { "ganz", "viele", "Wörter" ; Die geklammerten Ausdrücke heißen Feld-Initialisierer (array initializer). Nur Literale oder Konstanten dürfen als Wert in einem Feld-Initialisierer auftreten. Diese Schreibweise ist nur in Verbindung mit einer Deklaration erlaubt, nicht für eine gewöhnliche Zuweisung. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 24

26 1. Felder und Strings Eindimensionale Felder Ermittlung der Länge von Feldern Bei der Erstellung eines Feldes wird dessen Länge in einem zusätzlichem Element vom Typ int abgespeichert. Auf dieses Element kann mit Variablenname.length zugegriffen werden. Beispiel: double[] vektor = { 1.0, 2.0, -1.0 ; for (int i=0 ; i<vektor.length ; i++ ) System.out.println( "vektor[" + i + "] = " + vektor[i] ); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 25

27 1. Felder und Strings Eindimensionale Felder Kopieren und Vergleichen von Referenzen double[] v = { 1.0, 3.0, 5.0, 10.0 ; double[] q = v; for ( int i=0 ; i<q.length ; i++ ) q[i] = q[i]*q[i]; for ( int i=0 ; i<q.length ; i++ ) System.out.println( "Das Quadrat von " + v[i] + " ist " + q[i] ); Was wird ausgegeben und warum? Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 26

28 1. Felder und Strings Eindimensionale Felder Die Zuweisung q = v; führt zu einer sogenannten Referenzkopie. Es wird keine Kopie des Feldes angelegt, sondern q erhält die Referenz, die in v hinterlegt ist. Wirkung: q und v verweisen auf das gleiche Feld. v q Für die Herstellung einer echten Kopie haben wir die folgenden Möglichkeiten: 1. Wir benutzen eine Schleife: double[] v2 = new double[ v.length ]; for ( int i=0 ; i<v.length ; i++ ) v2[i] = v[i]; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 27

29 1. Felder und Strings Eindimensionale Felder 2. Nutzung der Methode System.arraycopy: System.arraycopy( Quelle, QuelleStartIndex, Ziel, ZielStartIndex, Anzahl ); Hierbei ist: Quelle: Feld, von dem kopiert werden soll QuelleStartIndex: Index, ab der Quelle übertragen werden soll Ziel: Feld, in das kopiert werden soll ZielStartIndex: Index, ab dem die Eintragungen erfolgen sollen Anzahl: Anzahl der zu kopierenden Komponenten 3. Nutzung der vordefinierten Methode clone. Hierzu später mehr. Alle diese Möglichkeiten legen eine sogenannte flache Kopie an. D.h. für die Komponenten selbst wird die übliche Zuweisung durchgeführt. Dies kann problematisch sein, wenn der Komponententyp selbst eine Referenzdatentyp ist (Referenzkopie). Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 28

30 1. Felder und Strings Eindimensionale Felder int[] feld1 = { 1, 2, 3 ; int[] feld2 = { 1, 2, 3 ; Der Ausdruck feld1 == feld2 liefert false! Begründung: Bei Referenzdatentypen bedeutet == nicht, daß die Inhalte der referenzierten Felder (oder Objekte) verglichen werden. Stattdessen wird geprüft, ob die Referenzen die gleiche Speicherstelle adressieren. feld feld Wie vergleicht man dann die Inhalte von Feldern? Ausprogrammieren Achtung: Der Komponententyp kann wieder ein Referenztyp sein! Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 29

31 1. Felder und Strings Mehrdimensionale Felder Mehrdimensionale Felder Mehrdimensionale Felder sind vom Prinzip her leicht zu definieren: Der Komponententyp ist selbst ein Feld. Beispiele: double[][] matrix; int[][] folgevonfolgen; String[][] listevonstringlisten; Sollen alle inneren Felder die gleiche Länge aufweisen, können wir wiederum den new-operator in einfacher Weise verwenden: matrix = new double[3][4]; folgevonfolgen = new int[3][50]; listevonstringlisten = new String[5][30]; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 30

32 1. Felder und Strings Mehrdimensionale Felder Beispiele für innere und äußere Feldlängen: matrix.length liefert 3. matrix[0].length liefert 4. matrix[2].length liefert ebenfalls 4. Die inneren Felder können eine unterschiedliche Länge aufweisen. int[][] folgevonfolgen = new int[3][]; for ( int i=0 ; i<folgevonfolgen.length ; i++ ) folgevonfolgen[i] = new int[10*(i+1)]; folgevonfolgen.length liefert 3. folgevonfolgen[0].length liefert 10. folgevonfolgen[2].length liefert 30. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 31

33 1. Felder und Strings Datentypen für Strings Der Datentyp String Zeichenketten können in Java mit dem Referenzdatentyp String dargestellt werden. Zeichenketten vom Typ String haben die folgenden wesentlichen Eigenschaften: Die Länge eines Strings steht mit seiner Erzeugung fest und kann nachträglich nicht geändert werden. Der Inhalt des Strings kann nicht geändert werden. Ein String ist eigentlich ein Objekt der Klasse java.lang.string. Für die Erzeugung kann die Literaldarstellung oder der new-operator verwendet werden. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 32

34 1. Felder und Strings Datentypen für Strings Varianten zur Erzeugung von String-Objekten: String s1 = "abc"; String s2 = new String( "abc" ); char[] data = { a, b, c ; String s3 = new String( data ); byte[] b = { 97, 98, 99 ; String s4 = new String( b ); String s5 = new String( s4 ); Was liefert s1 == s2 oder s5 == s4? Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 33

35 1. Felder und Strings Datentypen für Strings Die Klasse String beinhaltet Methoden zum Zugriff auf einzelne Zeichen der Zeichenkette, charat(int index) Vergleich von Zeichenketten, compareto(string vergleichsstring) und equals(string vergleichsstring) Suchen von Teil-Zeichenketten, indexof(string teilstring) Herausgreifen von Teil-Zeichenketten und substring(int von) und substring(int von, int bis) Wandeln von Groß- in Kleinbuchstaben (und umgekehrt). tolowercase() und touppercase() Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 34

36 1. Felder und Strings Datentypen für Strings String s1 = "Weihnachten"; String s2 = "Weihnachten"; String s3 = "WEIHNACHTEN"; System.out.println(s1.charAt(4) ); // Ausgabe: n System.out.println(s1.compareTo(s2) ); // Ausgabe: 0 System.out.println(s1.compareTo(s3) ); // Ausgabe: 1 System.out.println(s1.equals(s2) ); // Ausgabe: true System.out.println(s1.indexOf("ach")); // Ausgabe: 5 System.out.println(s1.substring(3)); // Ausgabe: hnachten System.out.println(s1.substring(3,7)); // Ausgabe: hnac System.out.println(s1.toUpperCase()); // Ausgabe:WEIHNACHTEN Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 35

37 1. Felder und Strings Datentypen für Strings Der Datentyp StringBuffer Die Klasse StringBuffer erlaubt es uns, mit veränderbaren Zeichenketten- Objekten zu arbeiten. Wir können beispielsweise zusätzliche Zeichen hinzufügen oder entfernen, ohne das jeweils ein neues Objekt erzeugt wird. Während String str = ""; for (int i=1; i<=500 ; i++ ) str = str + "x"; insgesamt 500 neue String-Objekte erzeugt, wird in den Zeilen StringBuffer buf = new StringBuffer(); for (int i=1; i<=500 ; i++ ) buf.append("x"); nur ein einziges StringBuffer-Objekt erzeugt und verwendet. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 36

38 1. Felder und Strings Datentypen für Strings Vorteil: effizienter Nachteil: komplexere Programmierung Konstruktoren von StringBuffer: public StringBuffer() public StringBuffer(String s) Einige Methoden: Aktuelle Länge: length() Etwas an die aktuelle Zeichenkette anhängen: verschiedene Varianten von append, z.b. StringBuffer append(int i) Einfügen an einer bestimmten Stelle: verschiedene Varianten von insert, z.b. StringBuffer insert(int offset, int i) Teilstring löschen: StringBuffer delete(int von, int bis) Genaueres erfahren Sie in der API-Dokumentation. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 37

39 2. Unterprogramme und Methoden Methoden 2. Unterprogramme und Methoden Durch Methoden wird ausführbarer Code unter einem Namen zusammengefasst. Dieser Code kann unter Verwendung von sogenannten Parametern formuliert sein, denen später beim Aufruf der Methode Werte übergeben werden. Methoden sind ein Bestandteil von Klassen. Wir befassen uns hier mit einem Spezialfall (Klassenmethoden)! Später noch: Methoden in Verbindung mit Objekten Beispiel: mehrfache Auswertung der Funktion f(x, n) = x 2n + n 2 nx Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 38

40 2. Unterprogramme und Methoden Methoden Deklaration von (Klassen-)Methoden Syntax: public static Rückgabetyp Methodenname ( Parameterliste ) { Anweisungen Rückgabetyp Datentyp des Ergebnisses, das die Methode zurückliefern soll. Soll die Methode keinen Wert zurückliefern, verwenden wir hier void. Methodenname Bezeichner als Name für die Methode. Parameterliste Eine Kommaliste von Variablendeklarationen. Die darin aufgeführten Variablen heißen formale Parameter. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 39

41 2. Unterprogramme und Methoden Methoden Parameterübergabe und -rückgabe Der Methodenkopf für die Berechnung von f(x, n) = x 2n + n 2 nx könnte lauten: public static double f(double x, int n) Für die Ergebnisrückgabe an die aufrufende Umgebung steht die return- Anweisung zur Verfügung. Durch return ergebnis; wird die Ausführung der Methode beendet und der Wert des Ausdrucks ergebnis als Resultat zurückgegeben. Hat eine Methode den Rückgabetyp void, so reicht return; Ein solches return als letze Anweisung kann auch entfallen. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 40

42 2. Unterprogramme und Methoden Methoden Eine Methode darf mehrere return-anweisungen enthalten. Für Methoden, die nicht den Rückgabetyp void haben, muß aber sichergestellt sein, daß vor Beendigung der Methode eine return-anweisung ausgeführt wird. Beispielmethode komplett: public static double f(double x, int n) { double produkt = 1.0; for (int i=0; i<2*n ; i++) produkt = produkt * x; return produkt + n*n - n*x; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 41

43 2. Unterprogramme und Methoden Methoden Aufruf von Methoden Syntax: Methodenname( Parameterliste ) Ein Methodenaufruf ist ein elementarer Ausdruck. Parameterliste ist eine Kommaliste von Ausdrücken (aktuelle Parameter). Die Werte der Ausdrücke werden über die formalen Parameter aus der Methodendeklaration an die Methode übergeben. Nach dem Aufruf wird jeweils der entsprechende Rückgabewert für den ursprünglichen Methodenaufruf eingesetzt und mit diesem Wert weitergearbeitet. double y = f(x,n); double z = f(y,3) + 3*x; In Java erfolgt die Parameterübergabe stets als Wertparameter (call by value). Es wird stets eine Kopie des Wertes einer Variablen an die Methode übergeben, der Wert der Variablen bleibt unverändert. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 42

44 2. Unterprogramme und Methoden Methoden Wertparameter Wertparameter ermöglichen die Übergabe von Variablenwerten, aber nicht deren Änderung. Was wird ausgegeben? public static void methode(int a) { a++; public static void main(string[] args) { int a = 1; methode(a); System.out.println(a); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 43

45 2. Unterprogramme und Methoden Methoden Referenzparameter Referenzparameter ermöglichen nicht nur die Übergabe von Variablenwerten, sondern auch deren Änderung. Referenzparameter gibt es z.b. in den folgenden Programmiersprachen: Pascal, Modula-2, C++ Durch die Benutzung von Zeigern (Referenzen) kann ein den Referenzparametern ähnliches Verhalten simulieren. Aber Vorsicht: Auch die Referenzen sind nur Wertparameter in Java! Konsequenz: Nur die referenzierten Inhalte können geändert werden, nicht die Referenz selber! Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 44

46 2. Unterprogramme und Methoden Methoden Referenzparameter (2) Was wird ausgegeben? public static void methode(int[] a) { a[0]++; public static void main(string[] args) { int[] a = { 1 ; methode(a); System.out.println(a[0]); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 45

47 2. Unterprogramme und Methoden Methoden Referenzparameter (3) Was wird ausgegeben? public static void methode(int[] a) { a = new int[] { 2 ; public static void main(string[] args) { int[] a = { 1 ; methode(a); System.out.println(a[0]); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 46

48 2. Unterprogramme und Methoden Methoden Überladen von Methoden In Java darf es auch innerhalb einer Klasse mehrere Methoden mit dem gleichen Namen geben, d.h. Methoden können überladen werden: public static int max(int x, int y) { return (x>y)? x : y; public static double max(double x, double y) { return (x>y)? x : y; Java unterscheidet Methoden gleichen Namens anhand der Zahl der Parameter, anhand des Typs Typs der Parameter und anhand der Position der Parameter. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 47

49 2. Unterprogramme und Methoden Methoden Sichtbarkeit und Verdecken von Variablen Manchmal möchte man eine Variable deklarieren, die in mehr als einer Methode (einer Klasse) bekannt ist. Wir erreichen dies, indem wir die Variable ausserhalb aller Methoden, aber innerhalb einer Klasse definieren und static davor schreiben. public class MeineKlasse { static String s = "Klassenvariable"; public static void meinemethode1() { System.out.println(s); public static void meinemethode2() { System.out.println(s); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 48

50 2. Unterprogramme und Methoden Methoden Solch eine Variable heißt Klassenvariable. Java erlaubt es aber auch, daß Klassenvariablen und lokale Variablen bzw. Klassenvariablen und formale Parameter den gleichen Namen tragen. Wenn dies so ist, welche Variable wird dann genommen? Grundregel für die Sichtbarkeit bzw. das Verdecken: Innerhalb von Methoden verdecken lokale Variablen und formale Parameter die Klassenvariablen gleichen Namens. Klassenvariablen können trotzdem angesprochen werden. Hierzu stellt man den Klassennamen vor den Variablennamen: Klassenname.Variablenname Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 49

51 2. Unterprogramme und Methoden Methoden public class VerdeckenTest { static int a=1, b=2, c=3; static int m(int a) { int b=20; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); return 100; public static void main(string[] args) { int a=1000; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("m(c) = " + m(c)); Ausgabe: a = 1000 b = 2 a = 3 b = 20 c = 3 m(c) = 100 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 50

52 2. Unterprogramme und Methoden Methoden Rekursive Methoden Rekursion ist in Java erlaubt, d.h. Methoden dürfen sich selbst aufrufen! Beispiel: Methode zur Berechnung der Fibonacci-Zahlen F i : F 0 = 0, F 1 = 1, F n = F n 1 + F n 2 für n 2 static int fibonacci(int n) { if ( n == 0 ) return 0; if ( n == 1 ) return 1; return fibonacci(n-1) + fibonacci(n-2); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 51

53 2. Unterprogramme und Methoden Methoden Die Methode main Die Hauptmethode main ist nach dem gleichen Schema wie jede andere Methode aufgebaut. public static void main(string[] args) Der Inhalt von args ergibt sich durch die Argumente, die beim Aufruf des Programms angegeben werden. Beim Aufruf von > java MeineKlasse Argument1... ArgumentN gilt für args in main von MeineKlasse: args.length hat den Wert N args[0] hat den Wert Argument1 als String args[args.length-1] hat den Wert ArgumentN als String Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 52

54 3. Klassen Klassen als strukturierter Datentyp 3. Klassen Wir werden schrittweise unser Verständnis über Klassen erweitern: Klassen als strukturierte Datentypen Klassen als Konzept zur Kapselung Instanzmethoden Konstruktoren statische Komponenten von Klassen Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 53

55 3. Klassen Klassen als strukturierter Datentyp Was sind Klassen? selbst definierter Datentyp (Referenzdatentyp) Modellierung neuer Strukturen Sammlung von Variablen verschiedener Typen Beispiel: Adresse Eine Adresse soll als Ganzes repräsentiert werden können. Teile des Ganzen haben unterschiedliche Datentypen. Eine Klasse fasst die Komponentenvariablen zusammen. Darstellung: UML-Klassendiagramm Adresse name: strasse: hausnummer: postleitzahl: wohnort: mail: kommentar: String String int int String String String Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 54

56 3. Klassen Klassen als strukturierter Datentyp Erläuterungen und Terminologie: Die Komponentenvariablen heißen hier Instanzvariablen. Eine Klasse kann als Bauplan für Objekte verstanden werden. Eine konkrete Realisierung einer Klasse K bezeichnen wir als Instanz der Klasse K bzw. als Objekt der Klasse K. Jedes Objekt verfügt über eine separate Version der Instanzvariablen. Komponentenvariablen, die in der Deklaration mit static versehen sind, sind dagegen Klassenvariablen (siehe voriges Kapitel). Klassenvariablen beschreiben üblicherweise eine Eigenschaft der Klasse, nicht eines einzelnen Objektes (später mehr). Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 55

57 3. Klassen Klassen als strukturierter Datentyp radius = 1.0 farbe = blau Kreis a radius farbe radius = 0.5 farbe = grün Kreis b class Kreis radius = 1.3 farbe = rot Kreis c Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 56

58 3. Klassen Klassen als strukturierter Datentyp Deklaration von Klassen Syntax zur Deklaration von Klassen (vorläufig): public class Klassenname { Variablendeklaration... Variablendeklaration Beispiel: public class Adresse { String name; String strasse; int hausnummer; int postleitzahl; String wohnort; String mail; String kommentar; 1. Wir schreiben die Deklaration der Klasse Adresse in die Datei Adresse.java. 2. Wir compilieren Adresse.java. Damit entsteht Adresse.class. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 57

59 3. Klassen Klassen als strukturierter Datentyp 3. Nun steht uns der neue Datentyp Adresse zur Verfügung. Eine Variablendeklaration der Form: Adresse a; ist nun möglich. Mit Klassen sind stets Referenzdatentypen verbunden. Also steht uns nach Adresse a; noch kein Objekt der Klasse Adresse zur Verfügung. a Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 58

60 3. Klassen Klassen als strukturierter Datentyp Instanziierung von Objekten Instanzen einer Klasse erzeugen wir mit dem new-operator: Variablenname = new Klassenname(); Man bezeichnet dies als Instanziierung. Beispiel: Adresse a; a = new Adresse(); Natürlich ist es auch möglich, Variablendeklaration und Instanziierung in einer Anweisung zu formulieren: Adresse a = new Adresse(); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 59

61 3. Klassen Klassen als strukturierter Datentyp Initialisierung von Instanzvariablen Instanzvariablen werden (automatisch) initialisiert wie Komponenten von Feldern. a name strasse hausnummer 0 Hier: postleitzahl 0 postleitzahl, hausnummer: 0 wohnort und alle anderen Komponeten: null, da Referenzdatentypen. mail kommentar Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 60

62 3. Klassen Klassen als strukturierter Datentyp Zugriff auf Instanzvariablen Zugriff auf Komponenten eines Objekts: Variablenname.Komponentenname Beispiele: Adresse a = new Adresse(); a.wohnort = "Musterhausen"; a.postleitzahl = 47111; System.out.println( "PLZ: " + a.postleitzahl ); System.out.println( "Ort: " + a.wohnort ); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 61

63 3. Klassen Klassen als strukturierter Datentyp Objekte und Referenzen Adresse a; Adresse b; a name a = new Adresse(); b = a; b strasse hausnummer 0 Klassen definieren Referenzdatentypen. postleitzahl 0 Konsequenz: Eine Zuweisung sorgt nicht dafür, dass ein Objekt kopiert wird. wohnort mail Analog zu Feldern: Nur die Referenz wird kopiert! kommentar Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 62

64 3. Klassen Klassen als strukturierter Datentyp Felder von Objekten Natürlich können wir auch Felder deklarieren, die als Komponententyp eine Klasse haben. Adresse[] adressen = new Adresse[20]; Der obige Aufruf erzeugt nur das Feld für die Referenzen auf Instanzen von Adresse, nicht die Objekte selbst. Die Feldkomponenten sind mit null initialisiert (siehe rechts). Erzeugung der Objekte: for (int i=0 ; i<20 ; i++) adressen[i] = new Adresse(); adressen adressen[0] adressen[1] adressen[2] adressen[17] adressen[18] adressen[19] Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 63

65 3. Klassen Prinzipien der objektorientierten Programmierung Prinzipien der objektorientierten Programmierung Objekte waren bisher nichts weiter als schlichte Datenspeicher, Klassen die Baupläne dieser Datenspeicher. In der objektorientierten Programmierung wird diese Sicht erweitert. Objekte sind hier mehr als reine Datenspeicher, sie haben insbesondere: einen Zustand und weisen ein bestimmtes Verhalten auf. Eine Klasse beschreibt die möglichen Zustände und das Verhalten der zugehörigen Instanzen. Sie ist eine abstrakte Beschreibung der Objekte (Instanzen). Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 64

66 3. Klassen Prinzipien der objektorientierten Programmierung Klassen als Modelle In der Softwareentwicklung transferieren wir die Problemwelt auf den Computer, indem wir ein Modell der Problemwelt erstellen. Klassen sind wesentliche Bestandteile dieses Modells. Jede Klasse ist ein Modell für eine Gruppe gleichartiger Objekte der Problemwelt. Durch die Instanziierung von Klassen erhalten wir Objekte. Diese Objekte stellen auf dem Rechner das Äquivalent zu Gegenständen, Eigenschaften oder Personen unserer Problemwelt dar. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 65

67 3. Klassen Prinzipien der objektorientierten Programmierung Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 66

68 3. Klassen Prinzipien der objektorientierten Programmierung Vorteile des objektorientierten Ansatzes Ein Entwurf wird in unabhängige Komponenten (Klassen/Objekte) unterteilt, die zusammen das Gesamtsystem bilden. Wie die Einzelteile eines Modellbaukastens werden diese Objekte zu einer Gesamtheit zusammengefügt. Vorteile: 1. Durch die Aufteilung in (kleine) unabhängige Komponenten wird die Komplexität verringert. 2. Die einzelnen Komponenten können unabhängig entwickelt und getestet werden. 3. Der Anbau weiterer Komponenten ist ohne besondere Probleme möglich. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 67

69 3. Klassen Prinzipien der objektorientierten Programmierung Grundpfeiler der objektorientierten Programmierung Generalisierung Vererbung Kapselung Polymorphismus Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 68

70 3. Klassen Prinzipien der objektorientierten Programmierung Kapselung Grundidee der Kapselung: Vgl. Hinweis auf der Rückseite eines Fernsehgeräts: Gerät steht unter Spannung und darf nur vom Fachmann geöffnet werden! 1. Das Öffnen des Geräts ist für Unbefugte nicht ungefährlich. Wollen Sie sich von einem Fernsehmechaniker am Blinddarm operieren lassen? 2. Normale Benutzer sollten nicht wissen müssen, wie der Fernseher intern funktioniert. Hierzu dienen die Bedienelemente als Schnittstelle zur Außenwelt. In der objektorientierten Programmierung: 1. Der interne Aufbau einer Klasse bleibt verborgen (Data Hiding). Zur Benutzung der Klasse reichen Kenntnisse über deren Schnittstelle. 2. Der interne Aufbau einer Klasse kann geändert werden, ohne dass dies Auswirkungen auf andere Teile der Software hat. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 69

71 3. Klassen Zugriffsrechte Vom Referenzdatentyp zur Objektorientierung Wir beginnen mit einer einfachen Klasse: /** Diese Klasse repräsentiert Studierende */ public class Student { Student name: nummer: String int /** Der Name des/der Studierenden */ String name; /** Matrikelnummer */ int nummer; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 70

72 3. Klassen Zugriffsrechte Ist das Grundprinzip der Kapselung erfüllt? Haben wir die interne Struktur der Klasse Student von der Schnittstelle nach außen getrennt? Könnten wir die Instanzvariablen einfach verändern, ohne hiermit Probleme zu verursachen? Nein! Wie können wir dies ändern? Anpassung der Zugriffsrechte für die Instanzvariablen. Deklaration von Zugriffsmethoden. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 71

73 3. Klassen Zugriffsrechte Zugriffsrechte Data Hiding: Wir wollen unsere Instanzvariablen vor der Außenwelt verstecken. Bisher kann auch von anderen Klassen aus auf die Instanzvariablen von Student zugegriffen werden. Dies wollen wir verhindern! Hierzu schränken wir die Zugriffsrechte auf die Variablen ein. Zugriffsrecht wird private, d.h. nur innerhalb von Student ist ein Zugriff auf die Instanzvariablen möglich. Student -name: -nummer: String int public class Student { private String name; private int nummer; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 72

74 3. Klassen Zugriffsrechte Die Klasse AndereKlasse enthalte folgende Anweisungen: Student studi = new Student(); studi.name = "Karla Karlsson"; studi.nummer = 4711; Wenn wir versuchen, AndereKlasse zu übersetzen, erhalten wir einen Fehler der Form: Variable name in class Student not accessible from class AndereKlasse. Das heißt, die Zugriffe werden verweigert. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 73

75 3. Klassen Instanzmethoden Instanzmethoden Wie können wir Daten aus Objekten auslesen oder zuweisen, wenn wir hierzu nicht berechtigt sind? Wir erweitern die Klasse um Instanzmethoden. Instanzmethoden sind beim Aufruf stets an ein Objekt gebunden, d.h. wir rufen eine Instanzmethode auf einem Objekt auf. Innerhalb der Instanzmethode haben wir Zugriff auf alle Instanzvariablen. Methoden haben ihre eigenen Zugriffsrechte. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 74

76 3. Klassen Instanzmethoden Syntax der Deklaration von öffentlichen Instanzmethoden: public Rückgabetyp Methodenname ( Parameterliste ) { Anweisungen Beispiele: public String getname() { return name; public int getnummer() { return nummer; public void setname( String name ) { this.name = name; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 75

77 3. Klassen Instanzmethoden public void setnummer( int n ) { nummer = n; Darstellung als Klassendiagramm: Student -name: -nummer: +getname() +getnummer() +setname(string) +setnummer(int) String int String int void void Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 76

78 3. Klassen Instanzmethoden Was ist this? Das Schlüsselwort this liefert innerhalb einer Instanzmethode immer eine Referenz auf das Objekt selbst, d.h. auf das Objekt, auf dem die Methode aufgerufen wurde. Das Schlüsselwort this wird insbesondere dann benötigt, wenn Instanzvariablen durch Namenskonflikte verdeckt werden. Beispiel: Die Methode setname. Der formale Parameter name verdeckt die Instanzvariable name. name nummer this 4711 "Karla Karlsson" Mittels this.name können wir die Instanzvariable ansprechen. Der Compiler denkt ein wenig mit. Liegen keine Namenskonflikte vor, ist die Angabe von this nicht notwendig. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 77

79 3. Klassen Instanzmethoden Instanzmethoden als erweiterte Funktionalität Wir wollen die Menge der gültigen Matrikelnummern einschränken: Eine Matrikelnummer sei dann gültig, wenn sie fünf Stellen sowie keine führenden Nullen hat und ungerade ist. Hierfür definieren wir eine Methode validatenummer: public boolean validatenummer() { return (nummer >= && nummer <= && nummer % 2!= 0); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 78

80 3. Klassen Instanzmethoden Wir können nun unsere Methode setnummer so ändern, dass nur noch gültige Matrikelnummern akzeptiert werden. public void setnummer(int n) { int altenummer = nummer; nummer = n; if (!validatenummer()) nummer = altenummer; Bemerkungen: höhere Funktionalität ohne Datenkapselung nicht möglich keine Änderung an der Schnittstelle der Klasse Student Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 79

81 3. Klassen Instanzmethoden Beispiel: Ausgabe von Objekten auf der Konsole: public String tostring() { return name + " (" + nummer + ")"; Nutzung: Student studi = new Student(); studi.setname("karla Karlsson"); studi.setnummer(12345); System.out.println(studi.toString()); Prinzipiell reicht sogar die Anweisung: System.out.println(studi); Grund: Jedes Objekt verfügt automatisch über eine Methode tostring, die für die Ausgabe genutzt wird. Wir haben hier tostring überschrieben. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 80

82 3. Klassen Statische Komponenten einer Klasse Klassenvariablen Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit aller Studentenobjekte. Eigenschaften einer Klasse als Ganzes werden durch Klassenvariablen repräsentiert. Syntax für eine private Klassenvariable: private static Datentyp Variablenname = Initialwert; Beispiel: private static int studzaehler = 0; Das Schlüsselwort static macht eine Variable zur Klassenvariable. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 81

83 3. Klassen Statische Komponenten einer Klasse Wenn die Zugriffsrechte nicht dagegen sprechen, erfolgt der Zugriff auf eine Klassenvariable durch: Klassenname.Variablenname Beispiel: Wäre studzaehler öffentlich, könnte man den Zählerwert wie folgt ausgeben: System.out.println(Student.studZaehler); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 82

84 3. Klassen Statische Komponenten einer Klasse Klassenmethoden Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode: public static int getzaehler() { return studzaehler; Nutzung der Klassenmethode: System.out.println(Student.getZaehler()); Eine Klassenmethode ist eine Methode, die der Klasse als Ganzes zugeordnet ist. In Klassenmethoden ist kein Zugriff auf Instanzvariablen möglich. Nutzung allgemein: Klassenname.Methodenname( aktuelle Parameter ) Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 83

85 3. Klassen Statische Komponenten einer Klasse Wie können wir dafür sorgen, dass bei der Erzeugung von Objekten der Studentenzähler korrekt erhöht wird? Eine (noch nicht optimale) Möglichkeit: Wir verpacken die Erzeugung in einer Klassenmethode: public static Student createstudent() { studzaehler = studzaehler + 1; return new Student(); Nutzung: Student studi = Student.createStudent(); System.out.println(Student.getZaehler()); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 84

86 3. Klassen Statische Komponenten einer Klasse Warum nicht optimal? Bei älteren Programmen, die new verwenden, wird der Zähler nicht erhöht. Wie können wir dies abstellen? Verwendung eines sogenannten Konstruktors (siehe folgendes Thema). Klassenmethoden und Klassenvariablen werden in Klassendiagrammen durch Unterstreichung gekennzeichnet. Student -name: -nummer: -studzaehler: +getname() +getnummer() +setname(string) +setnummer(int) +validatenummer() +tostring() +getzaehler() +createstudent() String int int String int void void boolean String int Student Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 85

87 3. Klassen Statische Komponenten einer Klasse Vereinbarung von Konstanten Die Vereinbarung von Konstanten erfolgt innerhalb einer Klassendefinition. Konstanten sind Klassenvariablen. Durch das Schlüsselwort final wird die nachträgliche Änderung des Variablenwerts verboten. Syntax für die Deklaration öffentlicher Konstanten: public static final Datentyp Variablenname = Initialwert; Beispiel: Definition von Konstanten für Studienfächer: public static final int MATHEMATIK STUDIUM = 1; public static final int INFORMATIK STUDIUM = 2; public static final int BIOLOGIE STUDIUM = 3;... Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 86

88 3. Klassen Statische Komponenten einer Klasse Der Zugriff erfolgt wie bei Klassenvariablen: Klassenname.Variablenname Es hat sich die Schreibweise durchgesetzt, dass Konstantennamen ausschließlich aus Großbuchstaben und Unterstrichen bestehen. Teilwörter werden durch einen Unterstrich getrennt (siehe Java Code Conventions). Die Zuweisung an eine als Konstante vereinbarte Variable führt zu einem Fehler bei der Übersetzung. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 87

89 3. Klassen Konstruktor Konstruktor Mit Konstruktoren können wir Einfluss auf die Erzeugung eines Objektes nehmen. Konstruktoren erlauben es, den Anfangszustand von Objekten zu parametrisieren. Der Aufruf des/der Konstruktoren erfolgt implizit bei Anwendung von new. Syntax für einen öffentlichen Konstruktor: public Klassenname( Parameterliste ) { Anweisungen Ein Konstruktor heißt immer so wie die Klasse. In der Parameterliste werden Argumente vereinbart. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 88

90 3. Klassen Konstruktor Der einfachste Konstruktor für Student lautet: public Student() { Allgemein ist dies der Standard-Konstruktor. Er wird automatisch angelegt, wenn kein Konstruktor definiert wurde (aber nur genau für diesen Fall). Wir sollten im Konstruktor dafür sorgen, dass automatisch der Zähler für die Studentenobjekte erhöht wird. public Student() { studzaehler = studzaehler + 1; Damit ist die Klassenmethode createstudent überflüssig. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 89

91 3. Klassen Konstruktor Überladen von Konstruktoren Wie Methoden können auch Konstruktoren überladen werden. D.h., es darf mehrere Konstruktoren zu einer Klasse geben. Diese müssen sich aber in ihrer Signatur unterscheiden. Weiterer möglicher Konstruktor für Student: public Student(String name, int nummer) { studzaehler = studzaehler + 1; this.name = name; this.nummer = nummer; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 90

92 3. Klassen Konstruktor Innerhalb eines Konstruktors darf als erste Anweisung ein anderer Konstruktor aufgerufen werden. Dies erfolgt durch das Schlüsselwort this in Verbindung mit aktuellen Parametern. Beispiel: public Student(String name, int nummer) { this(); this.name = name; this.nummer = nummer; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 91

93 3. Klassen Statische Komponenten einer Klasse Der statische Initialisierer Ein Konstruktor ermöglicht uns eine objektbezogene Initialisierung. Gibt es auch eine klassenbezogene Initialisierung? Ja, mit Hilfe des statischen Initialisierers. Syntax: static { Anweisungen Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 92

94 3. Klassen Statische Komponenten einer Klasse Ein statischer Initialisierer einer Klasse wird ausgeführt, wenn die Klasse geladen wird. Eine Klasse wird vom Class Loader der virtuellen Maschinene geladen, wenn sie das erste mal benötigt wird. Eine Klasse kann mehrere statische Initialisierer haben. Für die Anweisungen gelten die Einschränkungen eines statischen Kontextes: Nur Zugriff auf statische Komponenten einer Klasse. Zugriff auf alle (auch private) Teile einer Klasse. Weitere Einschränkung: Statische Initialisierer haben nur Zugriff auf statische Komponenten, die im Programmcode vor ihnen definiert wurden. Beispiel zum statischen Initialisierer. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 93

95 3. Klassen Beispiele Nutzen der Kapselung Wenn wir Programmlogik in einem Objekt kapseln, dann können wir 1. diese Logik mehrmals zur gleichen Zeit einsetzen, Beispiel: gleichzeitig mehrere unabhängige Objekte 2. in unterschiedlichen Zusammenhängen nutzen und Beispiel: Programm zum Zählen von Zeilen, Wörtern und Zeichen 3. komplexere Objekte aus einfacheren Objekten zusammensetzen. Beispiel: Die Klassen TorZaehler und Spielstand Leichtere Wiederverwendbarkeit Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 94

96 3. Klassen Beispiele Weitere Beispiele: Klausuraufgabe Skyline Entwerfen Sie eine Klasse zur Ermittlung der Skyline, die von einer Menge von Gebäuden erzeugt wird Gebäude Skyline Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 95

97 3. Klassen Beispiele Die Skyline reicht in der Breite von 0 bis B. Jedes Gebäude wird beschreiben durch ein Tripel (l, h, r) mit 0 l < r B. Hierbei ist l der linke Rand, r der rechte Rand und h die Höhe des Gebäudes. Die oben angegebene Skyline wird beispielsweise durch B = 15 und die Gebäude (3, 3, 10), (6, 6, 12), (11, 4, 14) erzeugt. Die Klasse soll die folgenden Methoden aufweisen: Ermittlung der Breite B der Skyline. Einfügen eines Gebäudes (l, h, r) in die Skyline. Ermittlung der Höhe der Skyline an der Stelle i. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 96

98 3. Klassen Beispiele Klausuraufgabe TextSpeicher Definieren Sie eine Klasse für die Speicherung von Texten. Ein Objekt Ihrer Klasse soll bis zu 15 Texte speichern können. Jedem Text ist dabei eine Position im Speicher zugeordnet. Für die Verwaltung der Texte sollen die folgenden Methoden zur Verfügung stehen: Löschen eines Textes Der Text an Position i wird aus dem Speicher entfernt. Alle Texte mit einer Position größer als i rücken um eine Position nach vorne. Speichern eines Textes Der Text wird an der ersten freien Position gespeichert. Ist der Textspeicher voll, so wird der an der ersten Position gespeicherte Text gelöscht und der neue Text wird als letzter Text im Speicher abgelegt. Rückgabe des Textes an Position i Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 97

99 4. Vererbung Grundlagen der Vererbung 4. Vererbung Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor: CD titel: kuenstler: titelanzahl: spielzeit: habich: kommentar: setzekommentar(string) gibkommentar() setzevorhanden(boolean) gibvorhanden() ausgeben() String String int int boolean String void String void boolean void Video titel: regisseur: spielzeit: habich: kommentar: setzekommentar(string) gibkommentar() setzevorhanden(boolean) gibvorhanden() ausgeben() String String int boolean String void String void boolean void Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 98

100 4. Vererbung Grundlagen der Vererbung Wenn wir diese beiden Klassen realisieren, stellen wir fest, dass der Quelltext der Klassen weitgehend identisch ist. siehe Beispiele Nachteile dieses Ansatzes: erhöhter Aufwand der Erstellung bei der Wartung von dupliziertem Code sind Änderungen an mehreren Stellen notwendig Wartung ist fehleranfällig erhöhter Testaufwand erhöhter Aufwand bei der Nutzung der Klassen Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 99

101 4. Vererbung Grundlagen der Vererbung Idee der Vererbung Statt die beiden Klassen CD und Video unabhängig voneinander zu definieren, definieren wir zuerst eine Klasse, die die Gemeinsamkeiten von CD und Video zusammenfasst. Wir wollen diese Klasse Medium nennen. Wir definieren dann anschließend, dass eine CD ein Medium ist und ebenso, dass ein Video ein Medium ist. Schließlich ergänzen wir die Klassen für CD und Video ausschließlich um ihre spezifischen Eigenschaften. Prinzip der Generalisierung Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

102 4. Vererbung Grundlagen der Vererbung Medium titel: String spielzeit: int habich: boolean kommentar: String +void setzekommentar(string) +String gibkommentar() +void setzevorhanden(boolean) +boolean gibvorhanden() +void ausgeben() CD kuenstler: String titelanzahl: int +String gibkuenstler() +int gibtitelanzahl() Video regisseur: String +String gibregisseur() Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

103 4. Vererbung Grundlagen der Vererbung Terminologie Eine Superklasse (Oberklasse) ist eine Klasse, die von anderen Klassen erweitert wird. Eine Subklasse (Unterklasse) ist eine Klasse, die eine andere Klasse erweitert. Man sagt auch, dass die Subklasse von der Superklasse erbt. Vererbung bedeutet, dass die Subklasse alle Datenfelder und Methoden von der Superklasse übernimmt. Es werden keine Konstruktoren vererbt! Klassen, die über eine Vererbungsbeziehung miteinander verknüpft sind, bilden eine Vererbungshierarchie. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

104 4. Vererbung Grundlagen der Vererbung Beispiel: Eine Vererbungshierarchie für graphische Elemente. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

105 4. Vererbung Vererbung in Java Vererbung in Java Syntax: public class Unterklasse extends Oberklasse {... Mit Hilfe von extends wird die Oberklasse zu einer Klasse angegeben. Java unterstützt ausschließlich einfache Vererbung, d.h. wir können höchstens eine Oberklasse angeben. Ohne Verwendung von extends ist implizit die Klasse java.lang.object die Oberklasse. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

106 4. Vererbung Vererbung in Java Definition der Oberklasse Medium: Definition der Unterklassen: public class Medium { private String titel; private int spielzeit; private boolean habich; private String kommentar;... public class CD extends Medium { private String kuenstler; private int titelanzahl;... public class Video extends Medium { private String regisseur;... In den Unterklassen werden zusätzliche Datenfelder und Methoden deklariert. Darüberhinaus verfügt ein Objekt der Unterklasse über alle Datenfelder und Methoden der Oberklasse. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

107 4. Vererbung Vererbung in Java Vererbung und Zugriffsrechte Von einer Unterklasse aus kann man nicht auf die private deklarierten Datenfelder und Methoden der Oberklasse zugreifen. Daher gibt es zusätzlich den Modifikator (Zugriffsrecht) protected. Das Zugriffsrecht protected erlaubt den Zugriff von Unterklassen aus, erlaubt den Zugriff für Klassen des gleichen Pakets und verbietet den Zugriff für alle anderen Klassen. Der Modifikator protected kann nur auf Datenfelder, Konstruktoren und Methoden angewendet werden, nicht auf Klassen. Datenfelder werden üblicherweise nicht als protected deklariert, da dies die Kapselung schwächen würde. Stattdessen definiert man Zugriffsmethoden die protected oder public sind. Typischer Einsatz von protected: Bei Hilfsmethoden, die nach außen verborgen werden sollen, für Unterklassen aber hilfreich sein können. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

108 4. Vererbung Vererbung in Java Der Einsatz von protected ist nur über Paketgrenzen hinweg sinnvoll. protected wird deutlich seltener als public und private eingesetzt. Bevor Sie protected verwenden, sollten Sie kritisch prüfen, ob private nicht auch ausreicht. Man beachte: protected ist weniger restriktiv als die Verwendung keines Modifikators. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

109 4. Vererbung Vererbung in Java Vererbung und Initialisierung Üblicherweise sorgt ein Konstruktor dafür, dass die Datenfelder eines Objekts nach der Erzeugung in einem vernüftigem Zustand sind. Wie ist das nun, wenn die Datenfelder durch Vererbung über verschiedene Klassen verteilt sind? Unter- und Oberklasse bieten Konstruktoren an. Die Unterklasse kümmert sich in ihrem Konstruktor nur um die Datenfelder, die in der Unterklasse definiert sind. Damit auch die Datenfelder der Oberklasse korrekt initialisiert werden, rufen wir den Konstruktor der Oberklasse auf. Der Aufruf des Konstruktors der Oberklasse erfolgt mit dem Schlüsselwort super. Dieser Aufruf muss stets die erste Anweisung in einem Konstruktor der Unterklasse sein! Ansonsten fügt der Compiler den Aufruf eines parameterlosen Konstruktors für die Oberklasse ein. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

110 4. Vererbung Vererbung in Java public class Medium { private String titel; private int spielzeit; private boolean habich; private String kommentar; public Medium(String titel, int spielzeit) { this.title = titel; this.spielzeit = spielzeit; this.habich = false; this.kommentar = "";... Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

111 4. Vererbung Vererbung in Java public class CD extends Medium { private String kuenstler; private int titelanzahl; public CD(String titel, String kuenstler, int stuecke, int spielzeit) { super(title,spielzeit); this.kuenstler = kuenstler; this.titelanahl = stuecke;... Sie sollten den Konstruktor der Oberklasse auch dann explizit aufrufen, wenn der Compiler diesen Aufruf automatisch einfügen würde. Es ist guter Programmierstil. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

112 4. Vererbung Vererbung in Java Vorteile der Vererbung (bis hierher) Vermeidung von Quelltext-Duplizierung Wiederverwendung von Quelltext Einfachere Wartung Erweiterbarkeit Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

113 4. Vererbung Subtyping Subtyping und Ersetzbarkeit Wir wissen: Klassen definieren Datentypen. Wir haben gelernt: Klassen bilden eine Klassenhierarchie. Analog zur Klassenhierarchie entsteht somit auch eine Typhierarchie mit Suptypen (Untertypen) und Supertypen (Obertypen). Der Typ, der durch eine Subklasse definiert wird, ist ein Subtyp des Typs, der durch die Zugeordnete Superklasse definiert wird. Prinzip der Ersetzbarkeit: Objekte von Subtypen können an allen Stellen verwendet werden, an denen ein Supertyp erwartet wird. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

114 4. Vererbung Subtyping Beispiel: Die folgenden Zuweisungen sind zulässig: Medium medium = new Medium(...); Medium cd = new CD(...); Medium video = new Video(...); Eine Variable kann Objekte halten, deren Typ entweder gleich dem deklarierten Typ der Variablen ist oder ein beliebiger Subtyp des deklarierten Typs ist. Bei der Zuweisung wird eine implizite Typumwandlung (Cast) durchgeführt. Umgekehrt gilt dies nicht. Die folgenden Anweisungen sind nicht zulässig: CD cd = new Medium(...); Video video = new CD(...); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

115 4. Vererbung Subtyping Dieses Prinzip der Ersetzbarkeit gilt natürlich auch bei einer Parameterübergabe. public class MedienDatenbank {... public void einfuegen(medium medium) {... Wir können diese Methode sowohl für Videos als auch für CDs verwenden. MedienDatenbank db = new MedienDatenbank(...); Video video = new Video(...); CD cd = new CD(...); db.einfuegen(video); db.einfuegen(cd); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

116 4. Vererbung Subtyping Variablen für Objekte sind in Java polymorphe Variablen. Der Ausdruck polymorph (vielgestaltig) bezieht sich auf die Tatsache, dass eine Variable Objekte verschiedener Typen referenzieren kann. Polymorphie ist einer der Grundpfeiler der Objektorientierung. Polymorphie tritt in objektorientierten Sprachen in unterschiedlichen Zusammenhängen auf. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

117 4. Vererbung Überschreiben von Methoden Überschreiben von Methoden Die Methode ausgeben() in der Klasse Medium können wir folgendermaßen definieren: public void ausgeben() { System.out.print(titel + " (" + spielzeit + "Min)"); if (habich) System.out.println("*"); else System.out.println(); System.out.println(" " + kommentar); Jetzt erzeugen wir eine Instanz der Klasse CD: CD cd = new CD("Beggar\ s Banquet", "Rolling Stones", 10, 41); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

118 4. Vererbung Überschreiben von Methoden Mit weiteren Anweisungen können wir einen Kommentar angeben und das wir im Besitz der CD ist. Die Anweisung cd.ausgeben(); erzeugt dann die Ausgabe Beggar s Banquet (41 Min)* Die letzte Platte der Ur-Stones, ein absolutes Meisterwerk! Problem: Die Ausgabe ist unzureichend. Es werden nur die allgemeinen Informationen angezeigt, die in der Klasse Medium definiert sind. Dedizierte CD-Informationen (Künstler, Titelanzahl) fehlen in der Ausgabe. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

119 4. Vererbung Überschreiben von Methoden Um eine vernüftige Ausgabe für CDs zu erhalten, müssen wir die Methode ausgeben() überschreiben. Eine Subklasse kann die Implementierung einer Methode überschreiben. Dazu deklariert die Subklasse eine Methode mit der gleichen Signatur wie in der Superklasse, implementiert diese jedoch mit einem anderen Rumpf. Bei Aufrufen an Objekte der Unterklasse wird die überschreibende Methode ausgeführt. Ein erster Versuch: public class CD extends Medium {... public void ausgeben() { System.out.println( " " + kuenstler + ", " + titelanzahl + " Titel"); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

120 4. Vererbung Überschreiben von Methoden Die Anweisung cd.ausgeben(); liefert jetzt: Rolling Stones, 10 Titel Jetzt geben wir nur die CD-spezifischen Information aus, es fehlen die allgemeinen Informationen. Auf die Instanzvariablen von Medium haben wir aber innerhalb von CD keinen Zugriff. Sollte man diese protected deklarieren? Nein, u.u. können wir dies auch gar nicht, da wir nicht den Quelltext von Medium besitzen. Stattdessen nutzen wir super, um innerhalb der überschreibenden Methode, die Methode der Oberklasse aufzurufen. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

121 4. Vererbung Überschreiben von Methoden Ein zweiter Versuch: public class CD extends Medium {... public void ausgeben() { System.out.print("CD: " + kuenstler + ": "); super.ausgeben(); System.out.println( " " + titelanzahl + " Titel"); Jetzt liefert die Anweisung cd.ausgeben();: CD: Rolling Stones: Beggar s Banquet (41 Min)* Die letzte Platte der Ur-Stones, ein absolutes Meisterwerk! 10 Titel Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

122 4. Vererbung Überschreiben von Methoden Ein super-aufruf in einer Methode hat immer folgende Form: super.methodenname( Parameterliste ); Der Methodenname muss also explizit genannt werden. Im Gegensatz zu super-aufrufen in Konstruktoren kann der super-aufruf in einer Methode an jeder beliebigen Stelle der Methode erfolgen. Es muss auch kein super-aufruf erfolgen und wenn dieser nicht erfolgt, wird auch nicht automatisch ein solcher Aufruf generiert. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

123 4. Vererbung Überschreiben von Methoden Vererbung und Methodenausführung Medium medium = new CD("Beggar\ s Banquet", "Rolling Stones", 10, 41);... medium.ausgeben(); Welche Methode ausgeben() wird hier ausgeführt? Die der Klasse Medium, weil die Variable medium von diesem Typ ist? statischer Typ der Variablen medium Die der Klasse CD, weil das Objekt, auf dem ausgeben() aufgerufen wird, eine Instanz von CD ist? dynamischer Typ der Variablen medium Entscheidend für die Methodenauswahl ist der dynamische Typ einer Variablen. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

124 4. Vererbung Überschreiben von Methoden Methoden-Polymorphie: Methodenaufrufe in Java sind polymorph. Derselbe Methodenaufruf kann zu unterschiedlichen Zeitpunkten verschiedene Methoden aufrufen. Welche Methode tatsächlich aufgerufen wird, ist abhängig vom dynamischen Typ der Variablen, mit der der Aufruf durchgeführt wird. Weiteres Beispiel: Wir gehen davon aus, daß die Klassen CD und Video die Methode ausgeben() aus Medium überschreiben. Dann wird für i==0 die Methode ausgeben() von CD aufgerufen und für i==1 die Methode ausgeben() von Video. Medium m; Medium m1 = new CD(...); Medium m2 = new Video(...); for (int i=0 ; i<2 ; i++) { if (i==0) m = m1; else m = m2; m.ausgeben(); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

125 4. Vererbung Überschreiben von Methoden Wir wollen die Frage, welche Instanzmethode bei einem Methodenaufruf aufgerufen wird, wird noch etwas genauer betrachten. Methodensuche: Beim Aufruf einer Instanzmethode findet eine sogenannte Methodensuche statt. Ausgehend vom dynamischen Typ der Variablen wird in der Vererbungshierarchie nach einer Methode gesucht, die auf die Signatur des Aufrufs passt. Wenn die Klasse des dynamischen Typs keine solche Methode aufweist, wird in der direkten Oberklasse gesucht, usw. Die Suche endet spätestens in der Klasse Object. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

126 4. Vererbung Die Klasse Object Die Klasse Object Alle Klassen ohne explizit deklarierte Superklasse haben die Klasse Object als Superklasse. Object gehört zum Paket java.lang. Object verfügt über einige vordefinierte Methoden. Diese stehen somit allen Objekten (auch Feldern) zur Verfügung. Es kann sinnvoll sein, diese Methoden in Unterklassen zu überschreiben, d.h. mit einer anderen Implementierung zu versehen. Beispiel: tostring() genaueres zu den Methoden: siehe API-Dokumentation Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

127 4. Vererbung Die Klasse Object Die Methode equals public boolean equals(object vergleichsobjekt) Äquivalenzrelation auf nicht null Objekten. Implementierung in Object: return this == vergleichsobjekt; Überschreiben in Unterklassen: inhaltlicher Vergleich Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

128 4. Vererbung Die Klasse Object Die Methode tostring public String tostring() tostring() wird implizit aufgerufen, wenn eine Objektreferenz als Parameter der Methode println() verwendet wird. MeineKlasse obj = new MeineKlasse(); System.out.println(obj); Die Implementierung in Object liefert einen String der Art: Klassenname@Referenz Hier bietet es sich an, in Unterklassen die Methode tostring zu überschreiben. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

129 4. Vererbung Die Klasse Object Die Methode finalize protected void finalize() Wird vom Garbage Collector auf einem Objekt aufgerufen. Aufruf erfolgt, wenn nicht mehr auf das Objekt zugegriffen werden kann. finalize der Klasse Object macht nichts. Kann in Unterklassen überschrieben werden, um Aufräumarbeiten durchzuführen. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

130 4. Vererbung Die Klasse Object Die Methode hashcode public int hashcode() Liefert einen Hash-Wert, d.h. eine nahezu eindeutige Kennung für ein Objekt. Unterstützung für Hashing (siehe 3. Semester, AlgoDat) Selbes Objekt liefert stets den gleichen Hashwert Objekte, für die equals den Wert true liefert, müssen gleichen Hash-Wert haben. Verschiedene Objekte müssen nicht verschiedene Hash-Werte haben. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

131 4. Vererbung Finale Klassen und finale Methoden Finale Klassen Der Modifier final schützt Klassen vor Vererbung. public final class Klasse {... Wirkung: Von Klasse kann keine Unterklasse abgeleitet werden. Typischerweise sind Klassen, die nur static Definitionen enthalten, final. Beispiel: java.lang.math Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

132 4. Vererbung Finale Klassen und finale Methoden Finale Methoden final vor einer Methode schützt diese Methode vor dem Überschreiben. public final void meinemethode() Finale Methoden verwendet man, wenn man sicherstellen möchte, dass eine Methode nicht verändert wird, z.b. weil Sie kritisch für den Zustand eines Objektes ist. class ChessAlgorithm { static final int WHITE = 0; static final int BLACK = 1;... final int getfirstplayer() { return ChessAlgorithm.WHITE;... Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

133 4. Vererbung Typumwandlungen Sichtbarkeit von Methoden Medium medium = new CD("Beggarś Banquet", "Rolling Stones", 10, 41); System.out.println(medium.gibKuenstler()); Problem: Das erzeugte CD-Objekt hat zwar eine Methode gibkuenstler(), diese ist aber über die Variable medium nicht sichtbar. Compiler liefert Fehler Ursache: Die Variable medium könnte auch Objekte referenzieren, die nicht aus der Klasse CD stammen. Entscheidend für die Sichtbarkeit ist der statische Typ einer Variablen Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

134 4. Vererbung Typumwandlungen Typumwandlungen Kann man aus dem Medium-Objekt wieder ein CD-Objekt machen? Ja, mit einer expliziten Typumwandlung. Medium medium = new CD("Beggarś Banquet", "Rolling Stones", 10, 41);... CD cd = (CD) medium; System.out.println(cd.gibKuenstler()); oder kurz System.out.println( ((CD)medium).gibKuenstler() ); Eine (typischerweise implizite) Typumwandlung von einem Untertyp zu einem Obertyp heißt Upcast. Eine (nur explizit mögliche) Typumwandlung von einem Obertyp zu einem Untertyp heißt Downcast. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

135 4. Vererbung Typumwandlungen Typumwandlung (2) public class OK {... public class UK1 extends OK {... public class UK2 extends OK {... OK a = new UK1(); OK b = new UK2(); UK1 c = (UK1) a; UK2 d = (UK2) b; UK2 e = (UK2) c; UK2 f = (UK2) a; // ok, Upcast // ok, Upcast // ok, Downcast // ok, Downcast // Fehler, erkennt Compiler // Fehler, ClassCastException Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

136 4. Vererbung Typumwandlungen Typumandlung bei Feldern Die Typhierarchie setzt sich auf Felder fort. Wenn OK eine Oberklasse von UK ist, dann ist OK[] ein Obertyp von UK[]. Medium[] medienliste = new CD[20]; medienliste[0] = new CD(...); CD cd = (CD) medienliste[0]; medienliste[1] = new Video(...); // ok, Upcast // ok, Upcast // ok, Downcast // Fehler, ClassCastException Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

137 4. Vererbung Typumwandlungen Der instanceof-operator zweistelliger Operator, der einen boolschen Wert liefert Syntax: Ausdruck instanceof Referenztyp Liefert true, wenn ein Cast von Ausdruck zu Referenztyp möglich ist. Hierdurch kann eine ClassCastException vermieden werden. Auch als Test möglich, um zu prüfen, ob ein Objekt aus einer bestimmten Unterklasse stammt. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

138 4. Vererbung Typumwandlungen Der instanceof-operator (2) Beispiel: MedienDatenbank db = new MedienDatenbank(...); Medium[] medienliste = db.giballemedien(); CD cd; Video video; for (int i=0 ; i<medienliste.length ; i++) if ( medienliste[i] instanceof CD ) { cd = (CD) medienliste[i]; System.out.println(cd.gibKuenstler()); else if ( medienliste[i] instanceof Video ) { video = (Video)medienliste[i]; System.out.println(video.gibRegisseur()); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

139 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel + singe() Amsel Drossel Fink + singe() + singe() + singe() Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

140 5. Abstrakte Klassen Beispiel Beispiel (2) Vorschlag zur Implementierung: public class Vogel { public void singe() { System.out.println( "Vogel singt:..."); public class Amsel extends Vogel { public void singe() { System.out.println( "Amsel singt: uiuiii..."); public class Drossel extends Vogel { public void singe() { System.out.println( "Drossel singt: zwawaaa..."); public class Fink extends Vogel { public void singe() { System.out.println( "Fink singt: zrzrrr..."); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

141 5. Abstrakte Klassen Beispiel Beispiel (3) Probleme des Implementierungsvorschlags: (1) In der Realität gibt es keinen Vogel, der nur ein Vogel ist. Konsequenz: Nur für die Unterklassen sollte eine Instanziierung möglich sein. (2) Ein Programmierer erweitert die Klassenhierarchie um die Klasse Star und vergisst dabei, die Methode singe() zu überschreiben. Dann haben Stare keine Stimme. (3) Wenn (1) erfüllt ist und der Fehler von (2) nicht vorliegt, dann wird die Methode singe() in der Klasse Vogel nie aufgerufen. Wir können Sie aber auch nicht einfach weglassen. Warum nicht? Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

142 5. Abstrakte Klassen Abstrakte Klasse Abstrakte Klasse Problem (1) können wir lösen, indem wir eine Klasse als abstrakt kennzeichnen. Zugehöriges Schlüsselwort: abstract public abstract class Klassenname... {... Von abstrakten Klassen können keine Instanzen erzeugt werden. Konsequenz: Um Objekte erzeugen zu können, muss mindestens eine Unterklasse zur abstrakten Klasse definiert werden, die nicht mehr abstrakt ist. Für unser Beispiel: Wenn wir die Klasse Vogel als abstrakt kennzeichnen, können wir nur noch Amseln, Drosseln oder Finken instanziieren. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

143 5. Abstrakte Klassen Abstrakte Klasse Abstrakte Klasse (2) Bemerkungen: Eine abstrakte Klasse kann Unterklasse einer nicht abstrakten Klasse sein. Eine abstrakte Klasse kann weitere abstrakte Klassen als Unterklassen haben. Auch für abstrakte Klassen sollten Konstruktoren definiert werden. Grund: Die Initialisierung von Objekten erfolgt entlang der Klassenhierarchie (siehe Beispiel zu geometrischen Objekten). Eine Klasse kann nicht gleichzeitig final und abstrakt sein. Konsequenz: Der Compiler verbietet die Kombination von abstract und final im Klassenkopf. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

144 5. Abstrakte Klassen Abstrakte Klasse Abstrakte Klasse in UML Im UML-Klassendiagramm werden abstrakte Klassen durch einen kursiven Klassennamen gekennzeichnet. Vogel + singe() Amsel Drossel Fink + singe() + singe() + singe() Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

145 5. Abstrakte Klassen Abstrakte Methoden Abstrakte Methoden Zur Lösung der Probleme (2) und (3) erklären wir die Methode singe() in der Klasse Vogel zu einer abstrakten Methode. Die Definition einer abstrakten Methode besteht aus einer Methodensignatur ohne einen Rumpf. Statt eines Blocks als Rumpf folgt dem Methodenkopf ein Semikolon. Solch eine Methode wird mit dem Schlüsselwort abstract markiert. Damit haben wir Problem (3) gelöst: Wir brauchen keine Dummy-Implementierung mehr für die Methode singe(). Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

146 5. Abstrakte Klassen Abstrakte Methoden Abstrakte Methoden (2) Syntax: Modifikator abstract Datentyp Methodenname(Parameterliste); Beispiel: Abstrakte Klasse mit einer abstrakten Methode: public abstract class Vogel { public abstract void singe(); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

147 5. Abstrakte Klassen Abstrakte Methoden Abstrakte Methoden (3) Die Definition einer abstrakten Methode m in einer Klasse K bedeutet: Für die Klasse K und somit auch für alle Unterklassen U von K ist die Methode m bekannt. K möchte/kann die Methode nicht implementieren. Dies muss in einer Unterklassen U von K erfolgen. Sei U eine (nicht abstrakte) Unterklasse von K. Dann ist folgendes möglich. K k = new U(); k.m(); Die Methodenauswahl basiert auf dem dynamischen Typ von k. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

148 5. Abstrakte Klassen Abstrakte Methoden Abstrakte Methoden in UML Im UML-Klassendiagramm werden abstrakte Methoden durch eine kursive Schreibweise gekennzeichnet. Vogel + singe() Amsel Drossel Fink + singe() + singe() + singe() Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

149 5. Abstrakte Klassen Abstrakte Methoden Zusammenspiel: Abstrakte Klassen und Methoden Abstrakte Klassen dürfen abstrakte Methoden anbieten. Jede Klasse, die mindestens eine (evtl. geerbte) abstrakte Methode hat, ist selbst abstrakt und muss entsprechend deklariert werden. Damit eine Unterklasse einer abstrakten Klasse eine konkrete Klasse werden kann, muss sie Implementierungen für alle geerbten abstrakten Methoden anbieten. Andernfalls ist die Unterklasse selbst abstrakt und muss als solche gekennzeichnet werden. Damit haben wir Problem (2) gelöst: Wenn der Programmierer der Klasse Star vergessen sollte, die Methode singe() zu überschreiben, meldet der Compiler einen Fehler. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

150 5. Abstrakte Klassen Abstrakte Methoden Wann setzt man abstrakte Klassen ein? Zur Repräsentation einer Generalisierung verschiedener Klassen, die Eigenschaften der gleichen Art haben, die in den Unterklassen aber unterschiedlich berechnet werden müssen. Für die Berechnung der Eigenschaften sehen wir in der Generalisierung jeweils eine abstrakte Methode vor, um deutlich zu machen, dass Objekte dieser Klasse (und der Unterklasse) diese Eigenschaften haben. Die jeweilige Art und Weise der Berechnung wird aber erst in den Unterklassen festgelegt. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

151 5. Abstrakte Klassen Weitere Beispiele Beispiel: Roboter mit spezialisiertem Verhalten Übungsaufgabe der kommenden Woche. Roboter mit Positionsbestimmung in ganzzahligem Koordinatensystem Steuerungsmöglichkeiten für solche Roboter: Einen Schritt in aktuelle Richtung, Änderung der Richtung durch Drehung um 90 Grad nach links bzw. rechts. In Unterklassen soll für die Roboterklassen ein spezifisches Verhalten festgelegt werden: Sie erhalten einen Auftrag. Zugehörige Methode: bewegedich() Torkelnder Roboter: Ziellos, zufällige Schritte und Drehungen Wächter: Geht ein vorgegebenes Rechteck ab. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

152 5. Abstrakte Klassen Weitere Beispiele Beispiel: Roboter mit spezialisiertem Verhalten (2) Roboter int gibx() int giby() void macheschritt() void drehelinks() void dreherechts() void bewegedich() TorkelnderRoboter WächterRoboter void bewegedich() void bewegedich() Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

153 5. Abstrakte Klassen Weitere Beispiele Beispiel: Geometrische Objekte und deren Eigenschaft Fläche GeoObjekt double x double y double gibx() double giby() void verschiebe(double,double) double berechneflaeche() Rechteck double breite double hoehe double berechneflaeche() Kreis double radius double berechneflaeche() Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

154 5. Abstrakte Klassen Weitere Beispiele Beispiel: Geometrische Objekte und deren Eigenschaft Fläche (2) public abstract class GeoObjekt { private double x; private double y; public GeoObjekt(double x, double y) { this.x = x; this.y = y;... public abstract double berechneflaeche(); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

155 5. Abstrakte Klassen Weitere Beispiele Beispiel: Geometrische Objekte und deren Eigenschaft Fläche (2) public class Rechteck extends GeoObjekt { private double hoehe; private double breite; public Rechteck(double x, double y, double hoehe, double breite) { super(x,y); this.hoehe = hoehe; this.breite = breite; public double berechneflaeche() { return this.hoehe*this.breite; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

156 5. Abstrakte Klassen Weitere Beispiele Beispiel: Geometrische Objekte und deren Eigenschaft Fläche (3) public class Kreis extends GeoObjekt { private double radius; public Kreis(double x, double y, double radius) { super(x,y); this.radius = radius; public double berechneflaeche() { return Math.PI * this.radius * this.radius; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

157 6. Exceptions Prinzipien von Exceptions 6. Exceptions Hintergrund: Programmieren auf der Basis von Verträgen Methodenaufruf Kundenklasse Verpflichtung zur Einhaltung der Vorbedingung Methodendefinition Vorbedingung Invarianten Lieferantenklasse Verpflichtung zur Einhaltung der Nachbedingung Ausnahme: Lieferantenklasse kann ihren Vertrag nicht erfüllen. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

158 6. Exceptions Prinzipien von Exceptions Beispiel: public static void main(string[] args) { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); System.out.println(a + "/" + b + "=" + (a/b)); java ExceptionTest ArrayIndexOutOfBoundsException java ExceptionTest 4 0 ArithmeticException java Exception 4 a NumberFormatException Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

159 6. Exceptions Prinzipien von Exceptions Exception Eine Exception ist ein Objekt, das Informationen über einen Programmfehler enthält. Eine Exception wird ausgelöst, um zu signalisieren, daß ein Fehler aufgetreten ist. Vorteile von Exceptions: Für einen Klienten/Kunden ist es (fast) unmöglich, eine aufgetretene Exception zu ignorieren und einfach weiterzuarbeiten. Wenn der Kunde die Exception nicht behandelt, dann wird die laufende Anwendung beendet. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

160 6. Exceptions Prinzipien von Exceptions Die Klasse java.lang.exception Exceptions sind Instanzen der Klasse java.lang.exception bzw. einer Unterklasse von java.lang.exception. java.lang.exception definiert die folgenden Methoden: getmessage(): Rückgabe der Fehlermeldung printstacktrace(): Erzeugt die Ausgabe, die wir auf der Konsole sehen. Klassenname Fehlermeldung java.lang.arithmeticexception: / by zero at ExceptionTest.main(ExectionTest.java:8) Ort des Auftretens Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

161 6. Exceptions Prinzipien von Exceptions Exception-Klassen Eine Exception ist immer eine Instanz aus einer speziellen Vererbungshierarchie. Wir können selbst neue Exception- Typen definieren, indem wir Subklassen dieser Hierarchie erzeugen. Subklassen von java.lang.error sind für Fehler des Laufzeitsystems vorgesehen. Für neue Exceptions erzeugen wir Subklassen von java.lang.exception. Das Paket java.lang stellt bereits eine Reihe von vordefinierten Subklassen bereit. Error Throwable GeprüfteException Exception RuntimeException UngeprüfteException Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

162 6. Exceptions Prinzipien von Exceptions Arten von Exceptions Java unterscheidet zwischen geprüften und ungeprüften Exceptions. RuntimeException und alle Subklassen der Klasse RuntimeException definieren ungeprüfte Exceptions. Alle anderen Subklassen von Exception definieren geprüfte Exceptions Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

163 6. Exceptions Prinzipien von Exceptions Ungeprüfte Exceptions Dies sind Exceptions, bei deren Verwendung der Compiler keine zusätzlichen Überprüfungen vornimmt. Genauer: Der Compiler prüft nicht, ob sich der Klient um diese Exceptions kümmert. Ungeprüfte Exceptions sind für Fälle gedacht, die normalerweise nicht auftreten sollten, z.b. ausgelöst durch Programmfehler. Beispiele: ArrayIndexOutOfBoundsException NullPointerException NumberFormatException Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

164 6. Exceptions Prinzipien von Exceptions Geprüfte Exceptions Geprüfte Exceptions sind Exception-Typen, bei deren Verwendung der Compiler zusätzliche Überprüfungen durchführt und einfordert. Ein Klient muß sich um geprüfte Exceptions kümmern. Geprüfte Exceptions sind für die Fälle gedacht, bei denen ein Klient damit rechnen sollte, daß eine Operation fehlschlagen kann. Hier sollte der Klient gezwungen werden, sich um den Fehler zu kümmern. Beispiele: java.io.ioexception, java.io.filenotfoundexception Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

165 6. Exceptions Prinzipien von Exceptions Faustregeln Verwende ungeprüfte Exceptions in Situationen, die zu einem Programmabbruch führen sollten.... bei Fehlern, die vermeidbar gewesen wären. Verwende geprüfte Exceptions bei Fehlern, die vom Klienten behandelt werden können.... für Fälle, die außerhalb des Einflusses des Programmierers liegen. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

166 6. Exceptions Behandlung von Exceptions Auswirkungen einer Exception Wenn eine Exception ausgelöst wird, wird die Ausführung der auslösenden Methode sofort beendet. In diesem Fall muß kein Wert von der Methode zurückgeliefert werden, auch wenn die Methode nicht als void deklariert wurde. Die Anweisung, die die auslösende Methode aufgerufen hat, konnte nicht korrekt abgearbeitet werden. Es besteht die Möglichkeit, solche Exceptions zu fangen. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

167 6. Exceptions Behandlung von Exceptions Kontrollfluß bei Exceptions Klasse obj = new Klasse(); try {... obj.method();... catch ( MeineException e ) { /* spez. F.-Behandlung */ catch ( Exception e ) { /* allg. F.-Behandlung */ finally { /* Aufräumarbeiten */ public class Klasse { public void method() throws MeineException {... /* Fehlererkennung */ throw new MeineException("...");... Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

168 6. Exceptions Behandlung von Exceptions Die Konstrukte try, catch, finally, throw und throws try Definiert einen Block, innerhalb dessen Exceptions auftreten können. catch Definiert einen Block, der die Fehlerbehandlung für eine Ausnahme durchführt. finally Definiert einen Block, der Aufräumarbeiten durchführt. throw Erzeugt eine Ausnahme. throws Deklariert eine Ausnahme für eine Methode. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

169 6. Exceptions Behandlung von Exceptions Geprüfte Exceptions: throws Der Compiler fordert, daß eine Methode, die eine geprüfte Exception auslösen (oder weiterreichen) kann, dies im Methodenkopf angibt. Syntaxbeispiel: public void speichereindatei(string dateiname) throws IOException Die Angabe von ungeprüften Exception-Typen ist erlaubt aber nicht erforderlich. Hinter throws können durch Komma getrennt auch mehrere Exception-Typen angegeben werden. public void kopieredatei(string quelldatei, String zieldatei) throws FileNotFoundException, IOException Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

170 6. Exceptions Behandlung von Exceptions Exception-Handler Ein Exception-Handler ist ein Programmabschnitt, der Anweisungen schützt, in denen eine Exception auftreten könnte. Der Exception-Handler definiert Anweisungen zur Meldung oder zum Wiederaufsetzen nach einer aufgetretenen Exception. Syntax: try { geschützte Anweisungen catch (ExceptionTyp e) { Anweisungen für die Behandlung finally { Anweisungen für alle Fälle Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

171 6. Exceptions Behandlung von Exceptions Zwang zur Behandlung von Exceptions Eine Anweisung innerhalb der Methode caller ruft eine Methode method auf, die eine Exception E auslösen kann. Dann muss für caller folgendes gelten: Entweder in caller wird E durch einen Exception-Handler behandelt oder caller macht mittels throws deutlich, daß die Exception E weitergereicht wird. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

172 6. Exceptions Behandlung von Exceptions Propagierung von Exceptions Eine ausgelöste Exception wird entlang der Aufrufhierarchie propagiert, bis ein geeigneter Exception-Handler gefunden wurde. Ein Exception-Handler ist geeignet, wenn er eine catch-klausel hat, deren Exception-Typ gleich E ist oder ein Obertyp davon. Die catch-klauseln werden daraufhin in der Reihenfolge geprüft, wie sie im Quelltext angegeben sind. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

173 6. Exceptions Behandlung von Exceptions Auswahl des catch-blocks Die erste passende catch-klausel wird genommen! falsch: try {... catch (Exception e) {... catch (SpezielleException se) {... richtig: try {... catch (SpezielleException se) {... catch (Exception e) {... Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

174 6. Exceptions Behandlung von Exceptions Aufräumen mit finally Nach einer oder mehreren catch-klauseln kann optional eine finally-klausel folgen. Die Anweisungen im Block zu finally werden immer ausgeführt: Wenn keine Exception ausgelöst wurde, wenn eine Exception ausgelöst und durch eine catch-klausel behandelt wird und auch wenn eine Exception ausgelöst wird, für die keine passende catch-klausel vorhanden ist. Typische Anwendung: Freigabe von Ressourcen unabhängig vom Auftreten eines Fehlers. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

175 6. Exceptions Behandlung von Exceptions Auslösen von Exceptions: throw Exceptions werden mit Hilfe der throw-klausel ausgelöst. Hinter throw gibt man ein Exception-Objekt an. Typischerweise erzeugt man hierzu ein neues Exception-Objekt mittels new. Als Konstruktorparameter ist eine Fehlermeldung zulässig. Beispiel: throw new Exception("Parameterwert ungueltig!"); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

176 6. Exceptions Exceptions und Vererbung Maßgeschneiderte Exceptions public class MyException extends Exception {... public MyException() { super(); public MyException(String msg) { super( msg );... Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

177 6. Exceptions Exceptions und Vererbung Exceptions und Vererbung Klasse public void method() throws IOException; Exception Unterklasse public void method() throws IOException, OtherException; IOException OtherException Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

178 6. Exceptions Exceptions und Vererbung Exceptions und Vererbung (2) Durch die throws-klausel werden Exceptions Bestandteil des Vertrages zwischen Klient und Lieferant. Sie regeln, was im Falle einer Vertragsverletzung passiert. Prinzip der Ersetzbarkeit: Spezialisierte Methoden dürfen keine neuen Exceptions definieren. Konsequenz: Das Design der vorangegangenen Folie ist in Java nicht erlaubt! Korrekte Lösung: method() der Unterklasse darf nur IOException auslösen. Und wenn method() der Unterklasse andere Methoden benutzt, die andere Exceptions als IOException auslösen können? Dann muss method() der Unterklasse diese Exceptions fangen und auf IOException umsetzen. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

179 6. Exceptions Assertions Assertions Seit Java 1.4 gibt es in Java das Konzept der Zusicherung (assertion). Eine Zusicherung ist ein Ausdruck, mit dem Einschränkungen definiert werden, welche die erlaubten Zustände oder das Verhalten von Objekten betreffen. Zusicherungen gehören eigentlich zur Spezifikation bzw. Modellierung. Zusicherungen im Quelltext prüfen, ob die Spezifikation verletzt ist (Korrektheit). Verletzte Zusicherungen lösen in Java ein Objekt vom Typ AssertionError aus (Untertyp von Error). Eine verletzte Zusicherung heißt: Das Programm bzw. die Klasse erfüllt nicht die geforderte Spezifikation. Man beachte: Error statt Exception! Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

180 6. Exceptions Assertions Zusicherungen im Quelltext Die Überprüfung erfolgt mit dem Schlüsselwort assert: assert boolscher-ausdruck; Liefert der boolesche Ausdruck den Wert true, wird das Programm fortgesetzt. Ansonsten wird ein AssertionError ausgelöst. Optional kann für eine Assertion ein Fehlertext angegeben werden: assert boolscher-ausdruck : String-Ausdruck; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

181 6. Exceptions Assertions Zusicherungen compilieren und aktivieren Sie benötigen eine Java-Version 1.4. Damit Kompatibilität zu älteren Versionen gewahrt ist, müssen Assertions für den Compiler durch die Option -source aktiviert werden: javac -source 1.4 Klasse.java Assertions sind auch in der virtuellen Maschine standardmäßig nicht aktiviert. Mit Hilfe der Option -ea werden die Assertions aktiviert. java -ea Klasse Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

182 7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen für die Methoden definiert. Wir können Schnittstellen anschaulich zunächst als rein abstrakte Klassen auffassen, d.h. alle Methoden dieser Klasse sind abstrakt. Was bringt uns das? Vollständige Trennung von Spezifikation und Implementierung Verschiedene Implementierungen der gleichen Spezifikation Austauschbarkeit Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

183 7. Schnittstellen Grundlagen zu Schnittstellen Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts Spezifikation einheitliche Signatur vereinbartes Verhalten Datenabstraktion Trennung von Verhalten und Implementierung Verstecken der Implementierung Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS

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

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen

Mehr

1. Referenzdatentypen: Felder und Strings

1. Referenzdatentypen: Felder und Strings 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen

Mehr

2. Unterprogramme und Methoden

2. Unterprogramme und Methoden 2. Unterprogramme und Methoden Durch Methoden wird ausführbarer Code unter einem Namen zusammengefasst. Dieser Code kann unter Verwendung von sogenannten Parametern formuliert sein, denen später beim Aufruf

Mehr

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen Klassenvariablen Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit aller Studentenobjekte.

Mehr

Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode:

Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode: Klassenvariablen Klassenmethoden Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

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

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E

Mehr

5. Abstrakte Klassen

5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg,

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22 Kapitel 19 Vererbung, UML Seite 1 von 22 Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Javakurs 2013 Objektorientierung

Javakurs 2013 Objektorientierung Javakurs 2013 Objektorientierung Objektorientierte Programmierung I Armelle Vérité 7 März 2013 Technische Universität Berlin This work is licensed under the Creative Commons Attribution-ShareAlike 3.0

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

Mehr

Übungsblatt 3: Algorithmen in Java & Grammatiken

Übungsblatt 3: Algorithmen in Java & Grammatiken Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Programmieren Tutorium

Programmieren Tutorium Programmieren Tutorium Tom Schildhauer Tutorium 12 Universität Karlsruhe (TH) Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by Tom Schildhauer,

Mehr

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007 Fachhochschule Bonn-Rhein-Sieg University of Applied Sciences Fachbereich Informatik Prof. Dr. Peter Becker Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

Software Engineering Interaktionsdiagramme

Software Engineering Interaktionsdiagramme Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)

Mehr

Java Einführung Methoden in Klassen

Java Einführung Methoden in Klassen Java Einführung Methoden in Klassen Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2 Universität Osnabrück 1 3 - Objektorientierte Programmierung in Java Zur Erinnerung: Aufteilung der Schichten GUI Vorlesung 17: 3-Schichten-Architektur 2 Fachkonzept Fachkonzept - Datenhaltung Datenhaltung

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ Objektorientierte Programmierung Objektorientierte Programmierung Eine Einführung mit BlueJ stellt die Daten, ihre Struktur und ihre Beziehungen zueinander in den Vordergrund. Weniger im Blickpunkt: die

Mehr

IT-Basics 2. DI Gerhard Fließ

IT-Basics 2. DI Gerhard Fließ IT-Basics 2 DI Gerhard Fließ Wer bin ich? DI Gerhard Fließ Telematik Studium an der TU Graz Softwareentwickler XiTrust www.xitrust.com www.tugraz.at Worum geht es? Objektorientierte Programmierung Konzepte

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Programmiertechnik Klassenvariablen & Instantiierung

Programmiertechnik Klassenvariablen & Instantiierung Programmiertechnik Klassenvariablen & Instantiierung Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1 Klassenvariablen Zur Erinnerung: Klassen bestehen aus Variablen und Methoden; beide zusammen

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten Matrikelnummer: Punkte: Testklausur 1 zur Vorlesung Modellierung und Programmierung I Dr. Monika Meiler Zeit: 60 Minuten Bemerkungen: Jedes Blatt ist mit der Matrikelnummer zu versehen. Jede Aufgabe ist

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek Programmieren I Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2008/2009 1 / 22 2 / 22 Strategie zum Entwurf von Klassen Beispiele Objektorientierte Sichtweise: Mit welchen Objekten habe ich es

Mehr

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 5 Referenzdatentypen - Felder... 5-2 5.1 Eindimensionale Felder - Vektoren... 5-3 5.1.1 Vereinbarung... 5-3 5.1.2 Referenzen sind keine Felder... 5-4 5.1.3 Kopieren eindimensionaler Felder... 5-6

Mehr

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Sichtbarkeit & statische Methoden Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Nicht sichtbare Methoden Wollen Eltern bestimmte Methoden vor den

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Binärdarstellung von Fliesskommazahlen

Binärdarstellung von Fliesskommazahlen Binärdarstellung von Fliesskommazahlen 1. IEEE 754 Gleitkommazahl im Single-Format So sind in Gleitkommazahlen im IEEE 754-Standard aufgebaut: 31 30 24 23 0 S E E E E E E E E M M M M M M M M M M M M M

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Name, Vorname Matrikelnummer Probeklausur zur Vorlesung Einführung in die Programmierung WS 2008/09 Dauer: 2 Stunden Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt und

Mehr

Innere Klassen in Java

Innere Klassen in Java Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" wird

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

FHZ. K20 Arrays. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

FHZ. K20 Arrays. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt Inhalt 1. Einführung 2. Array-Komponenten von elementaren Datentypen 3. Array-Komponenten sind Objekte 4. Array als Parameter 5. Kopieren von Arrays 6. Beispiel 7. Vector versus Array Folie 1 Lernziele

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern 1 Einleitung Lernziele Symbolleiste für den Schnellzugriff anpassen Notizenseiten drucken eine Präsentation abwärtskompatibel speichern eine Präsentation auf CD oder USB-Stick speichern Lerndauer 4 Minuten

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3. Hello World Javakurs 2014, 1. Vorlesung Sebastian Schuck basierend auf der Vorlage von Arne Kappen wiki.freitagsrunde.org 3. März 2014 This work is licensed under the Creative Commons Attribution-ShareAlike

Mehr

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Klassendiagramme Ein Klassendiagramm dient in der objektorientierten Softwareentwicklung zur Darstellung von Klassen und den Beziehungen,

Mehr

Übung 9 - Lösungsvorschlag

Übung 9 - Lösungsvorschlag Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe

Mehr

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017 Informatik 1 für Nebenfachstudierende Grundmodul Java Methoden Kai-Steffen Hielscher Folienversion: 1. Februar 2017 Informatik 7 Rechnernetze und Kommunikationssysteme Inhaltsübersicht Kapitel 3 - Java

Mehr

Software Engineering Klassendiagramme Einführung

Software Engineering Klassendiagramme Einführung Software Engineering Klassendiagramme Einführung Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Aufgabe Erstellen Sie eine Klasse Person in Java. Jede Person verfügt

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API). Paketdeklaration Paketdeklaration package Bezeichner ; Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API). Ein

Mehr

5.5.8 Öffentliche und private Eigenschaften

5.5.8 Öffentliche und private Eigenschaften 5.5.8 Öffentliche und private Eigenschaften Schnittstellen vs. Implementierungen: Schnittstelle einer Klasse beschreibt, was eine Klasse leistet und wie sie benutzt werden kann, ohne dass ihre Implementierung

Mehr

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte

Mehr

Bedienung von BlueJ. Klassenanzeige

Bedienung von BlueJ. Klassenanzeige Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

Java Virtual Machine (JVM) Bytecode

Java Virtual Machine (JVM) Bytecode Java Virtual Machine (JVM) durch Java-Interpreter (java) realisiert abstrakte Maschine = Softwareschicht zwischen Anwendung und Betriebssystem verantwortlich für Laden von Klassen, Ausführen des Bytecodes,

Mehr

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Was sind Berechtigungen? Unter Berechtigungen werden ganz allgemein die Zugriffsrechte auf Dateien und Verzeichnisse (Ordner) verstanden.

Mehr

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7 Java 7 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Dezember 2011 JAV7 5 Java 7 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Berechnungen in Access Teil I

Berechnungen in Access Teil I in Access Teil I Viele Daten müssen in eine Datenbank nicht eingetragen werden, weil sie sich aus anderen Daten berechnen lassen. Zum Beispiel lässt sich die Mehrwertsteuer oder der Bruttopreis in einer

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

Mehr

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage .htaccess HOWTO zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage Stand: 21.06.2015 Inhaltsverzeichnis 1. Vorwort...3 2. Verwendung...4 2.1 Allgemeines...4 2.1 Das Aussehen der.htaccess

Mehr

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem Fachbericht zum Thema: Anforderungen an ein Datenbanksystem von André Franken 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 1 2 Einführung 2 2.1 Gründe für den Einsatz von DB-Systemen 2 2.2 Definition: Datenbank

Mehr

Institut für Telematik Universität zu Lübeck. Programmieren. Kapitel 0: Organisatorisches. Wintersemester 2008/2009. Prof. Dr.

Institut für Telematik Universität zu Lübeck. Programmieren. Kapitel 0: Organisatorisches. Wintersemester 2008/2009. Prof. Dr. Institut für Telematik Universität zu Lübeck Programmieren Kapitel 0: Organisatorisches Wintersemester 2008/2009 Prof. Dr. Christian Werner 1-2 Überblick Ziele Inhaltsüberblick Ablauf der Veranstaltung

Mehr

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords 4.0 Proinformatik III Objektorientierte Programmierung Michael Kölling University of Kent Canterbury, UK Selbstbestimmtes Lernen Vorlesung Tutorium Übungen Buch Web-Seite Üben, üben, üben! Format Vorlesung:

Mehr

Gesicherte Prozeduren

Gesicherte Prozeduren Gesicherte Prozeduren Wenn eine Anwendung auf einer Client-Maschine läuft, wird normalerweise jede SQL-Anweisung einzeln vom Client an den Server gesandt, und jedes Ergebnistupel wird einzeln zurückgeliefert.

Mehr

Diplomvorprüfung in Datenverarbeitung EBS Sommersemester 2002

Diplomvorprüfung in Datenverarbeitung EBS Sommersemester 2002 Diplomvorprüfung in Datenverarbeitung EBS Sommersemester 2002 Prüfungsaufgaben zu den Vorlesungen Datenverarbeitung im ersten und im zweiten Semester Aufgabensteller: Gleißner Die Lösungen sind auf das

Mehr

BEISPIELKLAUSUR Softwareentwicklung:

BEISPIELKLAUSUR Softwareentwicklung: Prof. Dr. Andreas Fink Institut für Informatik Fakultät für Wirtschafts- und Sozialwissenschaften Helmut-Schmidt-Universität / Universität der Bundeswehr Hamburg BEISPIELKLAUSUR Softwareentwicklung: Objektorientierte

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

1 Mathematische Grundlagen

1 Mathematische Grundlagen Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.

Mehr

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg. Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 Klausurteilnehmer Name: Matrikelnummer: Wichtige Hinweise Es sind keinerlei Hilfsmittel zugelassen auch keine Taschenrechner! Die Klausur dauert

Mehr