Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker...

22
Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014

Transcript of Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker...

Page 1: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

Institut für Programmierungund Reaktive Systeme

Java 6

Markus Reschke

13.10.2014

Page 2: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

OOP

Objekte = Verhalten (durch Methoden) + Daten (durch Attribute)

Klassen = Bauplane fur Objekte

Kapselung von Programmteilen

Einfacheres Andern von Programmen

Wiederverwendung von Programmteilen

Markus Reschke | Java 6 | 2Institut für Programmierung

und Reaktive Systeme

Page 3: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Klassen in Java

1 ZugriffsBeschraenker class KlassenName {

2 // Attribute

3 // Methoden

4 }

Eine Klasse mit public-Zugriffsbeschranker pro .java-Datei

Page 4: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Attribute in Java

Attribute beschreiben die Daten, die jedes Objekt speichert

Klasse gibt an, welche Attribute Objekte dieser Klasse haben

Jedes Objekt verfugt uber eine eigene Kopie dieser Attribute

Anderungen an den Attributen eines Objektes wirken sich nur aufdieses Objekt aus

Attribute sollen fast immer private sein.

Werden fast wie lokale Variablen definiert.

1 ZugriffsBeschraenker class KlassenName {

2 T attributsName;

3 T attributsName = Initialisierungswert.

4 // Methoden

5 }

Page 5: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Methoden

Methoden sind die Aktionen, die mit einem Objekt ausgefuhrtwerden konnen

Statische Methoden kennen wir schon

Unterschied zu statischen Methoden: Sie arbeiten auf einzelneObjekte

1 ZugriffsBeschraenker class KlassenName {

2 // Attribute

3 Zugriffsbeschraenker Rueckgabetyp name(T1 Paramter1 ,...) {

4 // Anweisungen

5 }

6 }

Page 6: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Zugriffsbeschranker

Zugriffsbeschranker erlauben es, Elemente von Klassen vor dem Zugriffvon außen versteckt. Dies erschwert unsachgemaße Verwendung vonObjekten und erleichtert Kapselung.

Beschranker Klasse Paket Unterklassen Rest

public Y Y Y Y

protected Y Y Y N

keine Angabe Y Y N N

private Y N N NNormalerweise reichen public und private.

Markus Reschke | Java 6 | 6Institut für Programmierung

und Reaktive Systeme

Page 7: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Beispiel: Counter

1 public class Counter {

2 private int count;

3

4 public void increase () {

5 count ++;

6 }

7

8 public int getCount () {

9 return count;

10 }

11

12 public void reset() {

13 count = 0;

14 }

15 }

Page 8: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Erzeugen von Objekten

Wir konnen nun selber Klassen erstellen, wie werden diese nunverwendet?

new erzeugt neue Objekte auf dem Heap.

Syntax: new Klassenname(Konstruktorparameter)

new gibt eine Referenz auf das neue Objekt zuruck

obj, Counter,

Stack

Counter {count, int, 1description, String,

}

Heap

String {...

}

1 Counter c = new Counter ();

Page 9: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

null

Nullreferenz

Variable von Referenztyp zeigt auf nichts

Standardwert von Attributen mit Referenzdatentyp

1 Counter c = null;

Page 10: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Der . Operator

Wir konnen jetzt neue Objekte erzeugen.

Wie benutzt man nun ein Objekt?

Der .-Operator kann auf eine Referenz angewendet werden, um aufdie Attribute und Methoden des referenzierten Objekteszuzugreifen.

Voraussetzung ist, dass der Zugriff erlaubt ist (Beschranker)

Syntax: referenz.element

1 Counter c = new Counter ();

2 c.increase ();

3 c.increase ();

4 c.reset();

Markus Reschke | Java 6 | 10Institut für Programmierung

und Reaktive Systeme

Page 11: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Konstruktoren

Oft mussen beim Erzeugen von Objekten Attribute initialisiertwerden

Vom Benutzer der Klasse zu verlangen, dass er die Attribute selbernach dem Erzeugen setzt, kann zu Fehlern fuhren

Konstruktoren sind Methoden, die beim Erzeugen des Objektesaufgerufen werden.

Kein Ruckgabetyp, Gleicher Name wie Klasse

Falls keiner selber definiert: Default Konstruktor ohne ParameterKlassenname() wird automatisch erzeugt

Konstruktoren werden nicht vererbt

Page 12: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Beispiel: Counter1 public class Counter {

2 private int count;

3

4 public Counter () {

5 this (1);

6 }

7

8 public Counter(int start) {

9 count = start;

10 }

11

12 public void increase () {

13 count ++;

14 }

15

16 public int getCount () {

17 return count;

18 }

19

20 public void reset() {

21 count = 0;

22 }

23 }

Page 13: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Verdecken von Attributen und this

Lokale Variablen und Methodenparameter konnen Attributeverdecken

Zugriff auf lokale Variable anstatt aufs Attribut

this ist eine Referenz auf das aktuelle Objekt.

Kann benutzt werden, um trotz des Verdeckens auf das Attributzuzugreifen.

Markus Reschke | Java 6 | 13Institut für Programmierung

und Reaktive Systeme

Page 14: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Was Passiert?

1 public class Counter {

2 private int count = 100;

3

4 public void nichtVerdeckt () {

5 System.out.println(count);

6 }

7

8 public void verdeckt () {

9 int count = 0;

10 System.out.println(count);

11 }

12

13 public void verdecktParam(int count) {

14 System.out.println(count);

15 }

16

17 public void verdecktThis () {

18 int count = 0;

19 System.out.println(this.count);

20 }

21 }

Page 15: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

static

static markiert Elemente von Klassen als statisch

Wird normalerweise hinter dem Zugriffsbeschranker angegeben

Fur statische Attribute existiert nur eine einzige Kopie, die von allenObjektinstanzen dieser Klasse geteilt wird.

Statische Methoden konnen ohne Objektinstanz genutzt werden,durfen aber auch nur auf statische Elemente der Klasse zugreifen

Nicht-statische Attribute existieren ja nur fur Objektinstanzen,statische Methodenaufrufe operieren auf keinem Objekt

Zugriff mit Klassenname.Element

Markus Reschke | Java 6 | 15Institut für Programmierung

und Reaktive Systeme

Page 16: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Was Passiert?

1 public class Statisch {

2 public int a = 0;

3 public static int b = 1;

4

5 public static void main(String [] args) {

6 Statisch n1 = new Statisch ();

7 n1.a = 1;

8 Statisch n2 = new Statisch ();

9 n2.a = 2;

10 System.out.println(n1.a);

11 System.out.println(n2.a);

12 n1.b = 5;

13 System.out.println(n1.b);

14 System.out.println(n2.b);

15 System.out.println(Statisch.b);

16 }

17 }

Page 17: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Uberladen von Methoden

Mehrere Methoden in einer Klasse konnen den selben Namen haben

Mussen sich in der Parameterliste unterscheiden (durch andereTypen, andere Anzahl von Parametern oder beidem)

Ruckgabetyp wird nicht zur Unterscheidung herangezogen

Auswahl der passenden Methode geschieht zur Kompilierzeit

Markus Reschke | Java 6 | 17Institut für Programmierung

und Reaktive Systeme

Page 18: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Was Passiert?

1 public class Overload {

2

3 public void foo(Object a) {

4 System.out.println("Das war ein Object");

5 }

6

7 public void foo(String a) {

8 System.out.println("Das war ein String");

9 }

10

11 public static void main(String [] args) {

12 Overload o = new Overload ();

13 Object obj = new String("Foobar");

14 o.foo(obj);

15 String str = new String("Foobar");

16 o.foo(str);

17 }

18

19 }

Page 19: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

final

final vor Attributen und lokalen Variablen verhindert das Andern derer Werte

Fur Referenttypen heißt dies: Es kann nicht geandert werden, worauf dieReferenz zeigt.

Das referenzierte Objekt ansich ist jedoch noch veranderbar.

final vor Klassen: Von der Klasse kann nicht geerbt werden

final vor Methoden: Kein Uberschreiben moglich

1 import java.util .*;

2 public class Fin {

3 public static final List <String > l = new ArrayList <String >();

4 public static final int ANSWER = 42;

5

6 public static void main(String [] args) {

7 System.out.println(l);

8 //Geht nicht , da l final ist

9 //l = new ArrayList <String >();

10 //Das referenzierte Objekt selbst kann geaendert werden

11 l.add("Test");

12 System.out.println(l);

13 }

14 }

Page 20: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Demo: Flexiblere Arrays

Live in der VorlesungDemo: Ein Listenimplementierung mit Arrays in Java

Markus Reschke | Java 6 | 20Institut für Programmierung

und Reaktive Systeme

Page 21: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Demo: Binarer Suchbaum

Live in der VorlesungDemo: Ein binarer Suchbaum in Java

Markus Reschke | Java 6 | 21Institut für Programmierung

und Reaktive Systeme

Page 22: Java 6 - ips.tu-braunschweig.de · 5} 6} OOP mit Java Zugri sbeschr anker Zugri sbeschr anker erlauben es, Elemente von Klassen vor dem Zugri von auˇen versteckt. Dies erschwert

OOP mit Java

Uberblick und Ausblick

Klassen

Attribute

Methoden

Modifier

null

Datenstrukturen

Montag: Vererbung und Interfaces

Markus Reschke | Java 6 | 22Institut für Programmierung

und Reaktive Systeme