OOP mit JAVA Objektorientierte Programmierung Einführung.

47
OOP mit JAVA Objektorientierte Programmierung Einführung

Transcript of OOP mit JAVA Objektorientierte Programmierung Einführung.

Page 1: OOP mit JAVA Objektorientierte Programmierung Einführung.

OOP mit JAVA

Objektorientierte ProgrammierungEinführung

Page 2: OOP mit JAVA Objektorientierte Programmierung Einführung.

1. Objekte und Klassen

• Java-Objekte modellieren Objekte eines Anwendungsbereichs

• Objekte können kategorisiert werden• Eine Klasse beschreibt alle Objekte einer

Kategorie bzw. eine bestimmte Art von Objekten• Objekte werden durch Klassen erzeugt

new Klassenname();• Objekte repräsentieren individuelle Instanzen

einer Klasse

Page 3: OOP mit JAVA Objektorientierte Programmierung Einführung.

1. Objekte und Klassen• Eine Klasse, viele gleichartige Instanzen (Objekte)• Objekte haben einen Zustand, der durch Werte in

Datenfeldern (Variablen, Attribute) festgehalten wird• Die Menge der momentanen Werte aller Attribute, die ein

Objekt definieren, wird auch als Zustand des Objekts bezeichnet.

• Methoden:– können den Zustand eines Objektes verändern, wenn sie

aufgerufen werden– werden in der Klasse eines Objekts definiert– Alle Instanzen einer Klasse haben die gleichen Methoden– Aber, die Methoden werden an konkreten Instanzen

aufgerufen, so dass ganz klar ist welches Objekt seinen Zustand ändern soll.

Page 4: OOP mit JAVA Objektorientierte Programmierung Einführung.

1. Objekte und Klassen• Methoden können Informationen über ein Objekt durch ein Ergebniswert

zurückliefern:Bsp.:String gibName(){…} //Liefert Ergebniswert vom Typ String zurück; vor der Methode steht der Datentyp des Rückgabewerts

void nameAendern(String neuerName){…}//Schlüsselwort void kennzeichnet eine Methode ohne Rückgabewert

void groesseAendern(int neueHoehe, int neueBreite){…}//Methode mit zwei Parametern (Übergabewerte)

Page 5: OOP mit JAVA Objektorientierte Programmierung Einführung.

1. Objekte und Klassen

• Objekte können miteinander kommunizieren, in dem sie gegenseitig ihre Methoden aufrufen.

• Objekte können als Parameter an andere Objekte übergeben werden

• Wenn eine Methode ein Objekt als Übergabeparameter erwartet, wird der Name des Objekts als Parametertyp in der Signatur angegeben:

void trageStudentEin(Student neuerStudent){…}

Page 6: OOP mit JAVA Objektorientierte Programmierung Einführung.

2. Klassendefinitionenpublic class Ticketautomat {

//Datenfelder(Instanzvariablen, Attribute, Variablen) speichern die//Daten, die das Objekt benutzt

//Konstruktoren, erlauben es, neu erzeugte Objekte in//einen vernünftigen Anfangszustand zu versetzen (Initialisierung)

//Methoden implementieren das Verhalten der Objekte

}

Page 7: OOP mit JAVA Objektorientierte Programmierung Einführung.

2.1 Variablenarten

A. Parameter innerhalb eines Konstruktors oder einer Methode

B. Datenfeld außerhalb eines Konstruktors oder einer Methode deklariert

formaler Parameter aktueller Parameter, Zustandswert

steht einem Objekt nur im Rumpf des Konstruktors oder der Methode zur Verfügung

steht in der Klasse zur Verfügung und kann von Konstruktoren und Methoden dieser Klasse benutzt werden

nach außen hin nicht sichtbar in der Klasse sichtbar und verwendbar

Lebensdauer auf Dauer der Ausführungszeit des Konstruktors oder der Methode beschränkt

Lebensdauer auf Dauer der Objektexistenz beschränkt

Page 8: OOP mit JAVA Objektorientierte Programmierung Einführung.

2.2 Zuweisungen

• Speichern den Wert auf der rechten Seite eines Zuweisungsoperators in der Variablen, die auf der linken Seite genannt ist:

preis=ticketpreis;

• Rechte Seite ist ein Ausdruck• Regel:

Typ des Ausdrucks muss zum Typ der Variablen passen.

Page 9: OOP mit JAVA Objektorientierte Programmierung Einführung.

2.3 Methoden• Sondierende Methoden: liefern Informationen über den Zustand eines Objektes

(gib-Methoden, get)

private int preis;public int gibPreis() {

return preis; }

• Verändernde Methoden: ändern den Zustand (set-Methoden)

public void setzePreis(int zahl) { preis=zahl;

}oder

public void setzePreis(int preis) { this.preis=preis; }

Page 10: OOP mit JAVA Objektorientierte Programmierung Einführung.

2.4 Entscheidungen treffen

Eine bedingte Anweisung führt eine von zwei Aktionen aus, abhängig vom Ergebnis der Prüfung

if ( führe eine Prüfung durch, die true oder false liefert) {auzuführende Anweisungen, falls die Prüfung true geliefert hat}

else {auzuführende Anweisungen, falls die Prüfung false geliefert hat}

Page 11: OOP mit JAVA Objektorientierte Programmierung Einführung.

2.5 Lokale Variablen – dritte Variablenart

• wird innerhalb einer Methode oder eines Konstruktors deklariert und benutzt, also im Rumpf

• müssen explizit initialisiert werden, d.h. sie werden nicht automatisch mit einem Standardwert initialisiert

• sind häufig temporäre Speicherplätze, die die Erfüllung der Aufgabe einer Methode/Konstruktors unterstützen.

• nur innerhalb der Methode zugreifbar, sichtbar• werden bei Methodenaufruf angelegt und sind auf Lebensdauer der

Methodenausführung beschränkt, werden nach Methodenausführung entfernt .(Garbage Collection=autom. Speicherbereinigung bei JAVA)

• Achtung: Eine lokale Variable mit dem gleichen Namen wie ein Datenfeld verhindert, dass innerhalb der definierenden Methode auf das Datenfeld zugegriffen wird. (später this)

Page 12: OOP mit JAVA Objektorientierte Programmierung Einführung.

2.5 Lokale Variablen – dritte Variablenart

public int wechselgeldAuszahlen(){

int wechselgeld;wechselgeld = bisherGezahlt;bisherGezahlt=0;return wechselgeld;

}

Zeichenkette zusammensetzen:System.out.println(''# '' + preis + '' Cent. '');

Page 13: OOP mit JAVA Objektorientierte Programmierung Einführung.

Ü: Welcher Datentyp sollte für folgende Werte verwendet werden?

0 "hallo " 101-1 true "33" 3.1415

intStringintintbooleanStringdouble

Page 14: OOP mit JAVA Objektorientierte Programmierung Einführung.

Ü: Heizungsaufgabe

Page 15: OOP mit JAVA Objektorientierte Programmierung Einführung.

3. Objektinteraktion

• Abstraktion• Modularisierung• Objekterzeugung• Objektdiagramme• Methodenaufrufe• Debugger

Page 16: OOP mit JAVA Objektorientierte Programmierung Einführung.

Abstraktion und Modularisierung

Teile und herrscheAufgaben werden in Teilaufgaben, diese wieder in

Unterteilaufgaben etc., bis die einzelnen Aufgaben klein genug für eine übersichtliche Lösung sind.

Abstraktion ist die Fähigkeit, Details von Bestandteilen zu ignorieren, um den Fokus der Betrachtung auf eine höhere Ebene lenken zu können.

Modularisierung ist der Prozess der Zerlegung eines Ganzen in wohl definierte Teile, die getrennt erstellt und untersucht werden können und die in wohl definierter Weise interagieren

Page 17: OOP mit JAVA Objektorientierte Programmierung Einführung.

Beispiel: Digitaluhr

1. Klasse für zweiziffrige Anzeigen entwickeln.2. Weitere Klasse, die gesamte Uhrenanzeige aus zwei

Objekten der Klasse aus 1. zusammensetzt.

Objektdiagramm Klassendiagramm

Page 18: OOP mit JAVA Objektorientierte Programmierung Einführung.

Implementierung der Uhrenanzeige

• Klassen definieren Typen.• Ein Klassenname kann als Typname in einer

Variablendeklaration verwendet werden.• Variablen, die als Typ eine Klasse haben,

können Objekte dieser Klasse halten.

public class Uhrenanzeige{ private Nummernanzeige stunden; private Nummernanzeige minuten;

}

Page 19: OOP mit JAVA Objektorientierte Programmierung Einführung.

Objektdiagramm vs. Klassendiagramm

• Ein Objektdiagramm zeigt die Objekte und ihre Beziehungen zu einem bestimmten Zeitpunkt während der Ausführung einer Anwendung. Es präsentiert eine dynamische Sicht auf ein Programm. Wenn eine Variable ein Objekt enthält, dann ist dieses Objekt nicht direkt in der Variablen selbst abgelegt, sondern die Variable enthält lediglich eine Referenz auf ein Objekt. Das Objekt, das referenziert wird, ist außerhalb des Objekts gespeichert, das die Referenz hält.

Page 20: OOP mit JAVA Objektorientierte Programmierung Einführung.

Klassendiagramm vs. Objektdiagramm

• Ein Klassendiagramm zeigt die Klassen einer Anwendung und die Beziehungen zwischen diesen Klassen. Es liefert Informationen über den Quelltext. Es präsentiert eine statische Sicht auf ein Programm.

Page 21: OOP mit JAVA Objektorientierte Programmierung Einführung.

Primitive Datentypen

• Primitive Datentypen haben keine Methoden.

Page 22: OOP mit JAVA Objektorientierte Programmierung Einführung.

Logische Operatoren

• Boolesche OperatorenNeben der Negation (!), können die Operatoren– UND & – ODER | – exklusives ODER ^

auch auf Ausdrücke vom Datentyp boolean angewandt werden.

Page 23: OOP mit JAVA Objektorientierte Programmierung Einführung.

Logische Operatoren• "Short-Circuit" Operatoren: && und ||

Die Operatoren && und || stellen eine Sonderform der logischen UND und ODER Operationen auf boolesche Werte dar:

Wie Sie aus der Wahrheitstabelle für die UND Operation entnehmen können, kann hier ein Ausdruck nur wahr sein, wenn beide Operanden den Wert true haben. Diesen Sachverhalt macht sich der && Operator zu Nutze. Liefert hier der erste Operand den Wert false, so kann das Ergebnis nur noch false sein. Deswegen wird der zweite Operand gar nicht erst ausgewertet, was zu einer besseren Performance führen kann. Die "Short-Circuit"-Operatoren sind vor allem dann nützlich, wenn die erste Abfrage einen Fehlerfall in der zweiten Abfrage verhindert: Im folgenden Beispiel würde beim Überprüfen von ((t != 0) && ((27 / t) < 3)) falls t = 0 ist bei der Auswertung von (27 / t) < 3 ein Fehlerfall eintreten, da ein int nicht durch 0 geteilt werden darf.

Page 24: OOP mit JAVA Objektorientierte Programmierung Einführung.

Logische Operatoren• Bedingungsoperator: ? :

Der Bedingungsoperator hat folgende Syntax:a ? y : z;

Hierbei muss der Ausdruck vor dem Fragezeichen (hier: a) immer vom Typ boolean sein. Liefert er den Wert true, so wird der Ausdruck zwischen dem Fragezeichen und dem Doppelpunkt (hier: y) ausgewertet, liefert er false, so wird der Ausdruck nach dem Doppelpunkt (hier: z) ausgewertet.

Möchte man y bzw. z einer Variablen zuweisen, so müssen sie vom gleichen Typ sein oder eine implizite Typumwandlung muss möglich sein.

Page 25: OOP mit JAVA Objektorientierte Programmierung Einführung.

Logische Operatoren• Bitweise OperatorenNeben der bitweisen Inversion (~) gibt es noch folgende bitweise Operatoren:UND & ODER | exklusives ODER ^

Bei UND Operationen ergibt nur 1 & 1 eine 1, alle anderen Kombinationen ergeben 0.

Bei ODER Operationen ergibt nur 0 | 0 eine 0, alle anderen Kombinationen ergeben 1.

Bei exklusiven ODER Operationen ergeben 1 ^ 0 und 0 ^ 1 eine 1, die anderen beiden Kombinationen ergeben 0.

Page 26: OOP mit JAVA Objektorientierte Programmierung Einführung.

Übung: Logische Operatoren

• S.98, 99• Welche der folgenden Aussagen liefern true?

! (4<5)! false(2>2) || ((4 == 4) && ( 1< 0))(2>2) || (4 == 4) && ( 1< 0)( 34 != 33) && ! false

Page 27: OOP mit JAVA Objektorientierte Programmierung Einführung.

Verkettung von Zeichenketten

• Zeichenkette zusammensetzen:

• System.out.println(''# '' + preis + '' Cent. '');

Page 28: OOP mit JAVA Objektorientierte Programmierung Einführung.

Der Modulo-Operator

• Wert = (Wert + 1) % limit;

• Berechnet den ganzzahligen Rest der Division:

7 % 3 = 1, da 7:3= 2 Rest 17 % 5 = 2, da 7:5= 1 Rest 236 % 3 = 0, da 36 : 3 = 12 Rest 0

Page 29: OOP mit JAVA Objektorientierte Programmierung Einführung.

Objekte erzeugen Objekte

• Objekterzeugung:Objekte können andere Objekte mit dem new-Operator erzeugen.

• private Nummernanzeige Stunden = new Nummernanzeige(24);• private Nummernanzeige Minuten = new Nummernanzeige(60);

• Der new-Operator macht 2 Dinge:1. Er erzeugt ein neues Objekt der angegebenen Klasse.2. Er führt den Konstruktor der Klasse aus.

Page 30: OOP mit JAVA Objektorientierte Programmierung Einführung.

Objekte erzeugen Objekte

• Eine Klasse kann mehr als einen Konstruktor oder mehr als eine Methode mit dem gleichen Namen enthalten, solange jede von ihnen einen unterschiedlichen Satz von Parametertypen definiert.

• Dies wird allgemein als Überladen eines Konstruktors oder einer Methode bezeichnet.

Page 31: OOP mit JAVA Objektorientierte Programmierung Einführung.

Methodenaufrufe

• Interner Methodenaufruf: Methoden können andere Methoden der eigenen Klasse als Teil ihrer Implementierung aufrufen. Methodenname(Parameterliste)Wenn ein Methodenaufruf erfolgt, dann wird die passende Methode ausgeführt und anschließend kehrt die Ausführung zur Aufrufstelle zurück und wird bei der nächsten Anweisung nach dem Aufruf fortgesetzt.

• Externer Methodenaufruf: Methoden können Methoden von anderen Objekten über die Punkt-Notation aufrufen.Objektname.Methodenname(Parameterliste)

Page 32: OOP mit JAVA Objektorientierte Programmierung Einführung.

Das Schlüsselwort this• Wird benutzt, wenn ein Name (Variable) überladen ist. • Wie viele Variablen existieren, während der Konstruktor ausgeführt wird?• 3 Datenfelder + 3 Parameter = 6 Variablen• In JAVA wird immer die Definition des nächsten umschließenden Blocks

verwendet.• Mit this.text können wir auf ein Datenfeld namens text im aktuellen

Objekt zugreifen, dass weiter entfernt definiert wird, als der Parameter.• Warum tun wir das, obwohl wir das Problem mit der Wahl anderer

Parameternamen leicht umgehen könnten?• Manchmal gibt es einen Namen, der die Bedeutung einer Variablen

perfekt beschreibt.• Andere Programmierer nutzen das Schlüsselwort this.

Page 33: OOP mit JAVA Objektorientierte Programmierung Einführung.

Der Debugger

1. Haltepunkte im Quelltext setzen mit BlueJ (vor die Zeile STOP-Symbol, auf Zeilennummer klicken)

2. Eine Methode aufrufen, die den Haltepunkt enthält.

Page 34: OOP mit JAVA Objektorientierte Programmierung Einführung.

4. Objektsammlungen

• S. 123 ff• Sammlungen• Schleifen• Iteratoren• Arrays

Page 35: OOP mit JAVA Objektorientierte Programmierung Einführung.

Sammlungen• Sammlungsobjekte sind Objekte, die eine beliebige

Anzahl anderer Objekte enthalten können.• Beispiel Notizbuch

(Quelltext in Tausch-Schule)ArrayList-Objekt aus einem Package importieren:

import java.util.ArrayList;oderimport java.util.*;

Page 36: OOP mit JAVA Objektorientierte Programmierung Einführung.

private ArrayList<Personen> mitglieder;

private ArrayList<Ticketautomat> meineAutomaten;

Vordefinierte Methoden: add, size, get

Schreibe eine Methode entferneNotiz, die Mithilfe der vordefinierten remove-Methode eine bestimmte Notiz anhand ihrer Nummer entfernt.

Schreibe eine Methode alleNotizenAusgeben, die alle Notizen mit ihren aktuellen Indexnummern auflistet.

Sammlungen

Page 37: OOP mit JAVA Objektorientierte Programmierung Einführung.

Schleifenkonstrukte

• Eine Schleife kann benutzt werden, um einen Block von Anweisungen wiederholt ausführen zu lassen, ohne dass die Anweisungen mahrfach in den Quelltext geschrieben werden müssen.1. for-each-Schleife2. while-Schleife3. for-Schleife

Page 38: OOP mit JAVA Objektorientierte Programmierung Einführung.

1. Die for-each-Schleife: “verbesserte“

for (Elementtyp element : sammlung) {Schleifenrumpf;

}

Für jedes element in sammlung tue, was im Schleifenrumpf steht.

Schleifenkonstrukte

Page 39: OOP mit JAVA Objektorientierte Programmierung Einführung.

2. Die while-Schleife:

while (Schleifenbedingung) {Schleifenrumpf;

}

Wenn die Auswertung der Schleifenbedingung den boolesche Wert true liefert, wird der Schleifenrumpf ausgeführt und nach dessen Durchlauf die Schleifenbedingung erneut geprüft.

Schleifenkonstrukte

Page 40: OOP mit JAVA Objektorientierte Programmierung Einführung.

3. Die for-Schleife: („alte“)

for (Initialisierung; Bedingung; Aktion nach Rumpf) {Schleifenrumpf; //Anweisungen, die wiederholt werden sollen.

}

Bsp.: for (int i=1; i<=10; i++){System.out.println(i*i);}

Schleifenkonstrukte

Page 41: OOP mit JAVA Objektorientierte Programmierung Einführung.

Übungen: Schleifenkonstrukte

• Schreiben Sie eine Schleife in einer Methode test , die alle Vielfachen von 5 zwischen 10 und 95 ausgibt.

• Schreiben Sie eine Schleife in einer Methode fibonacci , die die ersten 20 Fibonacci Zahlen ausgibt. 1 1 2 3 5 8 13 21 34 …!

• Schreiben Sie eine while-Schleife in einer Methode fak, welche die Fakultät einer übergebenen natürlichen Zahl ausgibt!

Page 42: OOP mit JAVA Objektorientierte Programmierung Einführung.

Sammlung mit fester Größe - Array

• private String[] namen;• namen = new String[24];• String[5]=''Kraus'';

Page 43: OOP mit JAVA Objektorientierte Programmierung Einführung.

Klassenvariablen-statische Variablen

• private static int mehrwertsteuer=19;Von einer Klassenvariablen existiert immer nur eine Kopie,

unabhäng von der Anzahl der erzeugten Instanzen.

• private final int GRAVITATION = 9;Konstanten sind Variablen, deren Werte sich nicht verändern sollen.

Sie werden mit GROSSBUCHSTABEN gekennzeichnet und müssen sofort bei ihrer Deklaration initialisiert werden.

• Private static final int GROESSE = 10;Klassenkonstanten sind konstante Datenfelder einer Klasse.

Page 44: OOP mit JAVA Objektorientierte Programmierung Einführung.

Klassenentwurf

• Kopplung und Kohäsion

• Der Begriff Kopplung beschreibt den Grad der Abhängigkeiten zwischen Klassen. Wir streben für ein System eine möglichst lose Kopplung an, also ein System, in dem jede Klasse weitgehend unabhängig ist und mit anderen Klassen nur über möglichst schmale, wohldefinierte Schnittstellen kommuniziert.

Page 45: OOP mit JAVA Objektorientierte Programmierung Einführung.

Klassenentwurf

• Der Begriff Kohäsion beschreibt, wie gut eine Programmiereinheit eine logische Aufgabe oder Einheit abbildet. In einem System mit hoher Kohäsion ist jede Programmeinheit(eine Methode, eine Klasse, ein Modul) verantwortlich für genau eine wohldefinierte Aufgabe oder Einheit. Eín guter Klassenentwurf weist einen hohen Grad an Kohäsion auf.

Page 46: OOP mit JAVA Objektorientierte Programmierung Einführung.

Klassenentwurf

• Kapselung reduziert Kopplungen• Die Richtlinie der Kapselung (Informationen

über die Implementierung verbergen) besagt, dass nur Informationen über das WAS einer Klasse (was sie leistet) nach außen sichtbar sein sollten, nicht aber das WIE (ihre Realisierung).

• Vorteil: Wenn keiner anderen Klasse bekannt ist, wie wir unsere Implementierung vornehmen, dann können wir die Implementierung ändern, ohne das andere Klassen beeinträchtigt werden.

Page 47: OOP mit JAVA Objektorientierte Programmierung Einführung.

Klassenentwurf

• Wir können diese Trennung zwischen dem WAS und WIE erzwingen, in dem wir Datenfelder privat deklarieren und sondierende Methoden für den Zugriff auf sie definieren (get- und set-Methoden).

• Entwurf nach Zuständigkeiten (S. 263)