javakurs fss 2012 lehrstuhl stuckenschmidt tag 3 - objektorientierung
TRANSCRIPT
![Page 1: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/1.jpg)
Javakurs FSS 2012
Lehrstuhl Stuckenschmidt
Tag 3 - Objektorientierung
![Page 2: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/2.jpg)
Warum Objektorientierung
• Daten und Funktionen möglichst eng koppeln und nach außen kapseln
• Komplexität der Software besser modellieren• Menschen denken objektorientiert• Wiederverwendbarkeit von Softwaremodulen
![Page 3: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/3.jpg)
Objekte
• haben eine Identität• haben einen Zustand• zeigen ein Verhalten
![Page 4: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/4.jpg)
Klassen
• Beschreibung wie ein Objekt aussehen soll• Name der "Top-Level-Klasse" muss gleich dem
Dateinamen sein• Besitzt:– Attribute– Operationen
Beispiel:Klassenname PunktAttribute X- und y-Koordinate
Operationen Position festlegen
![Page 5: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/5.jpg)
Konstruktor
• Ähnlich einer Methode, Unterschiede sind:– Name des Konstruktors muss der Klassenname
sein– Kein Rückgabewert
• Mehrere Konstruktoren für eine Klasse möglich
![Page 6: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/6.jpg)
Konstruktor
class Point { int x; int y;
point () { }
point (int x, int y) { this.x = x; //Zugriff auf die Objektvariable this.y = y; //durch this }}
![Page 7: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/7.jpg)
Objekt erzeugen
• Ausdrückliche Erzeugung mit dem new-Operator
• new-Operator liefert dann eine Referenz auf das Objekt zurück
• Konstruktor wird ausgeführt
Point p;p = new Point();p = new Point(2, 4);
![Page 8: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/8.jpg)
Objektvariablen und -methoden
• In einer Klasse deklarierte Variablen• Zugriff darauf mit "."
![Page 9: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/9.jpg)
Objektvariablen und -methodenclass Point { int x; //Objekvariable int y; //Objektvariable
Point () { }
void setPosition (int x, int y) { this.x = x; this.y = y; }}
Point p = new Point();p.x = 2;p.y = 4;p.setPosition(4, 2);
![Page 10: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/10.jpg)
Referenzen
• null ist die Referenzvariable, die auf kein Objekt zeigt
• Auf ein Objekt kann mehrfach referenziert werden
• Bei Objekten werden nicht die Werte kopiert, sondern die Referenzen
![Page 11: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/11.jpg)
ReferenzenPoint p = null; //p referenziert auf kein ObjektPoint q = new Point(1, 2);p = q; //Kopie der Referenz und nicht des Objekts
System.out.println(p.x); //1q.x = 2;System.out.println(p.x); //2p.y = 3;System.out.println(q.y); //3
![Page 12: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/12.jpg)
Objekte vergleichen
• Zum Vergleich von Objekten wird die equals Methode verwendet
• Bei eigenen Klassen muss die Methode equals überschrieben werden um die Vergleichsfunktionalität einzubauen
• "==" vergleicht die Referenz des ObjektsString s1 = "abc"System.out.println("Vergleich von def mit s1: " + s1.equals("def")); //falseSystem.out.println("Vergleich von abc mit s1: " + s1.equals("abc"));//true
![Page 13: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/13.jpg)
equalsclass Point { public int x; public int y; @Override public boolean equals (Object obj) { Point p; if (obj instanceof Point){ p = (Point) obj; } else { return false; } if (p.x == x && p.y == y) return true; } return false; }}
![Page 14: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/14.jpg)
toString
• toString Methode wird verwendet um ein Objekt als String zu repräsentieren
• Bei eigenen Klassen muss die toString Methode überschrieben werden, wenn man die Funktionalität braucht
Point p = new Point(2, 3);System.out.println(p); //[email protected](p.toString()); //Point@3fbefab0
![Page 15: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/15.jpg)
toString
class Point { @Override public String toString() { String s = "X: " + x + " Y: " + y; return s; }
}
Point p = new Point(2, 3);System.out.println(p); //[email protected](p.toString()); //X: 2 Y: 3
![Page 16: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/16.jpg)
Pakete
• Zum Bündeln von Klassen• Bildet eigenen Namensraum• Können Unterpakete enthalten• Im Dateisystem werden Pakete in
gleichnamigen Ordnern abgelegt
package java;package java.lang;package java.awt;
package meinPaket;
![Page 17: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/17.jpg)
import
• Zugriff auf Klassen aus anderen Paketen• Importieren einzelner Klassen oder ganzer
Pakete möglich• Das Paket java.lang wird automatisch in jeder
Klasse importiert
import java.text.Normalizer;import java.text.*:
![Page 18: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/18.jpg)
Sichtbarkeit
• Kein Schlüsselwort– Komponente ist nur innerhalb des Pakets bekannt
• private– Komponente ist nur innerhalb der Klasse bekannt
• protected– Komponente ist nur innerhalb des Pakts und in
allen abgeleiteten Klassen bekannt• public– Komponente ist überall bekannt
![Page 19: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/19.jpg)
Getter und Setter
• Auf Variablen sollte in der Regel nicht direkt von anderen Klassen zugegriffen werden
• Deshalb sollten die meisten Variablen als private deklariert werden
• Zugriff von außen auf diese Variablen erfolgt über Methoden, sogenannte Getter und Setter
![Page 20: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/20.jpg)
Getter und Setter
public class Point { private int x; private int y;
public int getX() { return x; } public void setX(int i) { x = i; }}
Point p = new Point(2, 3);System.out.println(p.getX()); //2p.setPoint(5);System.out.println(p.getX()); //5
![Page 21: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/21.jpg)
static
• Statische Methoden und Variablen gehören zu einer Klasse und sind nicht an ein Objekt gebunden
• Aufruf durch voranstellen des Klassennamens
• Verwendung von static an den ersten beiden Tagen, weil wir ohne Objekte gearbeitet haben
![Page 22: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/22.jpg)
Klassenvariablen
• werden nur einmal angelegt• können von allen Methoden der Klasse
benutzt werden• Veränderungen in einer Instanz betreffen alle
Instanzen• können als Instanzzähler verwendet werden
![Page 23: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/23.jpg)
Instanzzählerclass Point { public static int counter; public Point() { counter++; }}
Point p1 = new Point();System.out.println(Point.counter); //1Point p2 = new Point();Point p3 = new Point();System.out.println(Point.counter); //3System.out.println(p1.counter); //3System.out.println(p2.counter); //3System.out.println(p3.counter); //3
![Page 24: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/24.jpg)
Klassenmethoden
• Zugriff auf Instanzvariablen nicht möglich• Besitzen keinen this-Zeiger• Prominentes Beispiel sind die Methoden der
Klasse System
![Page 25: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/25.jpg)
Statische Konstruktoren
• Für komplexere Initialisierungen von Klassenvariablen
• Wird nur einmal beim ersten laden der Klasse ausgeführt und nicht beim instanziieren
class Point { static int x; static int y;
static{ x = 2 y = x * 3; }}
![Page 26: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/26.jpg)
Vererbung
• Erfolgt mittels Subklasse extends Superklasse• Alle sichtbaren Eigenschaften werden von der
Superklasse auf die Subklasse übertragen• Mehrfachvererbung ist nicht gültig
public class Subklasse extends Superklasse{}
![Page 27: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/27.jpg)
super
• Mit super kann auf die Oberklasse zugreifen• Überschriebene Methoden der Oberklasse
können mit einem Aufruf auf super ausgeführt werden
![Page 28: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/28.jpg)
super
Public class Subclass extends Superclass{
public Subclass(){super();superMethod(15);
}
@Override public void superMethod(int x){
if(x > 10){super.superMethod(x);
}}
}
![Page 29: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/29.jpg)
Abstrakte Klassen
• Modifizierer abstract wird der Klasse vorangestellt• Nicht instanziierbar• Allgemein gehaltene Oberklassen• Unterscheidung in reine und partielle abstrakte
Klassen– Rein: Die Klasse enthält ausschließlich abstrakte
Methoden– Partiell: Die Klasse ist abstrakt, enthält aber konkrete
Implementierungen
![Page 30: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/30.jpg)
Abstrakte Methoden
• Modifizierer abstract wird der Methode vorangestellt
• Methoden geben lediglich die Signatur der Unterklasse vor
• Können nur in abstrakten Klassen vorkommen
![Page 31: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/31.jpg)
Abstrakte Klassen und Methoden
abstract class Test {
abstract boolean isOdd(int number);
boolean isEven(int number){ if (number%2 == 0) { return true; } else { return false; } }}
abstract class Test {
abstract boolean isOdd(int number);}
![Page 32: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/32.jpg)
Interfaces
• Schnittstellen• Abart der abstrakten Klassen• Enthält Datenelemente und abstrakte
Methoden• Eingesetzt für Mehrfachvererbung, weil
Klassen beliebig viele Interfaces implementieren können
![Page 33: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/33.jpg)
Interfaces
public interface MyInterface extends Interface1 {
public static int x = 4;
public abstract void method();}
public class MyClass extends SuperClass implements MyInterface, AnotherInterface {
@Override public void method() {}
}
![Page 34: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/34.jpg)
Fragen?
![Page 35: Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung](https://reader033.vdocuments.site/reader033/viewer/2022051819/55204d7549795902118ca562/html5/thumbnails/35.jpg)
Vielen Dank für ihre Aufmerksamkeit!