Teil 2 3. Vorlesung Modul: Programmierung B-PRG Grundlagen der Programmierung II Professur für Datenbanken und Informationssysteme Dr. Karsten Tolle [email protected] 1 Wrapper-Klassen Alle primitive Datentypen haben eine korrespondierende Klasse. Z.B. kapselt die Klasse Integer einen int Wert: int a = 5; Integer intOb = new Integer(a); siehe API: java.lang.Integer 2 Grundlagen der Programmierung II DBIS - SS2011 Vergleich int a=1, b=1; String x=“abc“, y=“abc“; if(a==b) … if(x==y) … 3 Sollte false sein, ist aber nicht immer sicher! if(x.equals(y)) … // besser! Grundlagen der Programmierung II DBIS - SS2011 Bestimmte Schleifen (for) for (double x=0; x !=10; x=x+0.01) { …. } 4 Grundlagen der Programmierung II DBIS - SS2011 Vererbung Syntax Syntax: ZugriffsSpezifikator class NameDerKlasse extends Oberklasse { // erbt automatisch Attribute und // Methoden der Oberklasse } 5 Grundlagen der Programmierung II DBIS - SS2011 Überschreiben von Methoden Wird in einer Unterklasse eine Methode mit gleicher Signatur wie in einer Oberklasse definiert, so wird dies Überschreiben genannt. Oberklasse methodeX() Unterklasse1 ... methodeX() 6 Grundlagen der Programmierung II DBIS - SS2011 Überschreiben von Methoden – Bsp. Fahrzeug kmh: int sitzplaetze: int fahren() plaetze () Omnibus stehplaetze: int plaetze () ... • Die Unterklasse Omnibus erbt alle Attribute und Methoden der Oberklasse Fahrzeug. • Zusätzlich erhält die Unterklasse Omnibus das Attribut stehplaetze. • Die Methode plaetze () der Oberklasse Fahrzeug wird in der Unterklasse Omnibus durch eine „neue Version“ überschrieben. 7 Grundlagen der Programmierung II DBIS - SS2011 this und super super: Ermöglicht den Zugriff auf die Methoden der Oberklasse. this: “Zeigt” auf das aktuelle Objekt. Beispiel: public class Omnibus extends Fahrzeug { int stehplaetze; public int plaetze() { int plaetze = super.plaetze(); //Aufruf der Methode in Fahrzeug return plaetze + this.stehplaetze; } } 8 Grundlagen der Programmierung II DBIS - SS2011 Polymorphy – in Java Polymorphy in Java heißt: Wird für ein Objekt eine Methode aufgerufen, wird in Abhängigkeit des Kontextes die „passende“ Methode ausgeführt. z.B.: meinFahrzeug.plaetze(); 9 Grundlagen der Programmierung II DBIS - SS2011 Polymorphie in der Natur Das Pantherchamäleon Das Chamäleon ändert seine Farbe in Abhängigkeit seiner Stimmung. Ärger 10 Grundlagen der Programmierung II DBIS - SS2011 Polymorphie und „Late Binding“ Bei final-Methoden kann der Compiler „Early Binding“ verwenden! GeoObjekt berechneFlaeche() Kreis Rechteck radius berechneFlaeche() laenge breite berechneFlaeche() • Klasse von geometrischen Formen GeoObjekt • Unterklassen Rechteck und Kreis, jeweils mit einer Methode zur Flächenberechnung berechneFlaeche() • unterschiedliche Berechungsvorschriften • aber gleich benannte Methoden 11 Grundlagen der Programmierung II DBIS - SS2011 Innere Klassen class Haus { String s = "Haus"; public static void main(String[] args) { Haus h1 = new Haus(); Zimmer z1 = h1.new Zimmer(); Zimmer z2 = new Haus().new Zimmer(); // in 1er Zeile } class Zimmer { String s = "Zimmer"; } } 12 Grundlagen der Programmierung II DBIS - SS2011 instanceof Mit instanceof kann die Klassenzugehörigkeit geprüft werden. ... Object o = xyz.get(); if (o instanceof Student) int i = ((Student)o).getAge(); ... Beachte: Ein Objekt ist immer auch Element seiner Oberklassen. 13 Grundlagen der Programmierung II DBIS - SS2011 Übungs-Aufgabe class A{ public void foo(){ System.out.println("A"); } } class B extends A { public void foo(){ System.out.println("B");} public static void main(String[] args){ A aobject = new B(); aobject.foo(); } AUSGABE: B } 14 Grundlagen der Programmierung II DBIS - SS2011 Übungs-Aufgabe class A{ public A(){ super(); System.out.println("A erzeugt");} } public class B extends A{ public B(){ System.out.println("B erzeugt");} } AUSGABE: A erzeugt B erzeugt super() in class A redundant public class Test{ public static void main(String[] args){ A aobject = new B();} } 15 Grundlagen der Programmierung II DBIS - SS2011 Anzahl der Personen in Modernisierungs-Projekten Persons involved (on average during the duration time) 6-10 Persons 19% 4-5 Persons 20% 11-50 Persons 24% above 50 Persons 12% 3 Persons 12% 2 Persons 11% 1 Person 2% *Quelle: MOMOCS Consortium - Modernization Project Evaluation – http://www.viewzone.org/momocs/evaluation.pdf 16 Grundlagen der Programmierung II DBIS - SS2011 Abstract 17 Grundlagen der Programmierung II DBIS - SS2011 Abstrakte Klassen Eine Exemplarmethode heißt abstract, wenn sie keinen Rumpfinhalt hat, d.h. wenn nur Ihr Kopf (Signatur), nicht aber eine Implementation angegeben wird. Der Konstruktor einer abstrakten Klasse kann nicht aufgerufen werden, d.h. es kann kein Exemplar erzeugt werden. Ein Klasse, die mindestens eine abstrakte Methode erbt und diese nicht implementiert, ist zwangsläufig abstrakt. 18 Grundlagen der Programmierung II DBIS - SS2011 Beispiel „Abstract Class“ public abstract class Person { String name; public Person(String name) { this.name = name; } public abstract String getName(); protected void setName(String name) { this.name = name; } } 19 Grundlagen der Programmierung II DBIS - SS2011 Vererbung Die Methoden (Prozeduren/Funktionen) der Elternklasse können beibehalten oder überschrieben werden, müssen aber denselben Rückgabetyp haben. In Java darf eine Klasse nur eine direkte Elternklasse haben Einfachvererbung. 20 Grundlagen der Programmierung II DBIS - SS2011 Mehrfachvererbung (Multiple Inheritance) In manchen objektorientierten Programmiersprachen (C++, Smalltalk usw.) kann eine Klasse mehrere direkte Oberklassen haben (Mehrfachvererbung) gute Modellierung mancher realen Gegebenheiten: 21 Grundlagen der Programmierung II DBIS - SS2011 Schnittstellen (Interfaces) Interfaces enthalten nur die "Signaturen" von Methoden. Statt der Definition des MethodenInhalts zwischen { und } enthalten sie nur ein Semikolon: interface InterfaceName { void methode1(parameterListe) ; } Interfaces enthalten keine Konstruktoren! 22 Grundlagen der Programmierung II DBIS - SS2011 Schnittstellen (Interfaces) Wofür: • Definition der Interaktion zwischen Komponenten • Trennung von Spezifikation und Realisierung • Um wenigstens eine eingeschränkte Mehrfachvererbung darstellen zu können. 23 Grundlagen der Programmierung II DBIS - SS2011 Schnittstellen (Interfaces) Die Klasse, die ein Interface implementiert, muss alle darin skizzierten Methoden enthalten, mit der richtigen Signatur (Typ, Name und Parameterliste): class ClassName implements InterfaceName { ... void methode1 (parameterListe) { ... // Statements; } } … die Klasse kann weitere Methoden, die nicht im Interface enthalten sind besitzen! 24 Grundlagen der Programmierung II DBIS - SS2011 Eine Klasse kann mehrere Schnittstellen implementieren! class ClassName implements Interface1, Interface2 { ... Kombination mit Vererbung möglich: class ClassName implements Interface1, Interface2 extends Class3 { ... 25 Grundlagen der Programmierung II DBIS - SS2011 Vergleich Interface – Abstrakte Klasse Interface == keine Implementierung, alles abstrakt Abstrakte Klasse == kann Implementierung enthalten Abstrakt Klassen, die keine Implementierung enthalten sollten als Interface deklariert werden. … beide können nicht instanziiert werden! 26 Grundlagen der Programmierung II DBIS - SS2011 Datenstrukturen 27 Grundlagen der Programmierung II DBIS - SS2011 Felder (Arrays) Felder werden benötigt, um temporäre Listen von primitiven Typen oder Objekten zu verwalten. z.B.: Eine Liste der Mitarbeiter… Von jedem Typ lassen sich Felder definieren. Deklaration: int[] i; // ein Integer-Feld Mitarbeiter[] m; //Mitarbeiterfeld Instanzierung: i = new int[10]; m = new Mitarbeiter[100]; 28 Grundlagen der Programmierung II DBIS - SS2011 Arrays Zuweisung i[0] = 100; i[1] = 258; ... i[9] = 300; int zahl = i[9]; //zahl = 300 int zahl2 = i[10]; // exception! Numerierung beginnt bei 0! int[] myArray = {1,2}; // alles zusammen 29 Grundlagen der Programmierung II DBIS - SS2011 Arrays • Es gibt vorgefertigte Methoden, um Felder zu kopieren, zu sortieren, auszugeben etc.: Klasse java.util.Arrays • Mehrdimensionale Felder: int[][] i = new int[5][10] /* Matrix */ 30 Grundlagen der Programmierung II DBIS - SS2011 Arrays • Hinweis: auch unregelmäßige Felder sind möglich (z.B. Pyramide) int[][] intFeld = new int[5][]; for (int i=0; i<5; i++) { intFeld[i]= new int[i+1]; } 31 Grundlagen der Programmierung II DBIS - SS2011 Arrays intFeld 0 0 1 0 1 2 0 1 2 3 0 1 2 3 4 0 1 2 3 4 Ansprechbar mit intFeld[3][2] 32 Grundlagen der Programmierung II DBIS - SS2011 Java Collections Framework • Im Package java.util enthalten. • Übersicht: java.sun.com/j2se/1.5.0/docs/guide/collections/index.html Collection List Map Set SortedMap SortedSet Set: Menge ohne Duplikate List: Jedes Element hat einen Index Map: Jedes Element hat einen Schlüssel • Weitere Datenstrukturen: http://commons.apache.org/collections/apidocs/index.html 33 Grundlagen der Programmierung II DBIS - SS2011 Übersicht Collections Framework Quelle: TIJ3 – Bruce Eckel 34 Grundlagen der Programmierung II DBIS - SS2011 Java Collections Framework • Definiert „Collections“ von Objekten, die über einheitliche Schnittstellen manipuliert werden können. • Implementiert Datenstrukturen und Algorithmen. Beispiel: Durchgehen einer ArrayList List list = new ArrayList(); list.add("Hello"); list.add("World"); for (Iterator i = list.iterator(); i.hasNext();){ System.out.println(i.next()); } 35 Grundlagen der Programmierung II DBIS - SS2011 Java 5 - Generics Beispiel: Map (Wörterbuch) Zuordnung von Elementen zu Schlüsseln. Jetzt ist aber der Typ vorgegeben! Map<Integer,String> map = new HashMap<Integer,String>(); map.put(2, "Hello"); … hier muss man die Wrapper-Klassen für primitive Datentypen verwenden! 36 Grundlagen der Programmierung II DBIS - SS2011 Erst ab Java 5 ! for (<Element>:<Kollektion>) Anweisung; ---------------------List <String>list = new ArrayList<String>(); list.add("Hello"); list.add("World"); for (String s : list){ System.out.println(s); } List list = new ArrayList(); list.add("Hello"); list.add("World"); for (Iterator i = list.iterator(); i.hasNext();){ System.out.println(i.next()); } 37 Grundlagen der Programmierung II DBIS - SS2011