Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

OOP mit JAVA Objektorientierte Programmierung Einführung.

Ähnliche Präsentationen


Präsentation zum Thema: "OOP mit JAVA Objektorientierte Programmierung Einführung."—  Präsentation transkript:

1 OOP mit JAVA Objektorientierte Programmierung Einführung

2 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

3 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.

4 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)

5 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){ … }

6 2. Klassendefinitionen public 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 }

7 2.1 Variablenarten A. Parameter innerhalb eines Konstruktors oder einer Methode B. Datenfeld außerhalb eines Konstruktors oder einer Methode deklariert formaler Parameteraktueller 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 sichtbarin 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

8 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.

9 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; }

10 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 }

11 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)

12 2.5 Lokale Variablen – dritte Variablenart public int wechselgeldAuszahlen() { int wechselgeld; wechselgeld = bisherGezahlt; bisherGezahlt=0; return wechselgeld; } Zeichenkette zusammensetzen: System.out.println(''# '' + preis + '' Cent. '');

13 Ü: Welcher Datentyp sollte für folgende Werte verwendet werden? 0 "hallo " 101 true "33" int String int boolean String double

14 Ü: Heizungsaufgabe

15 3. Objektinteraktion Abstraktion Modularisierung Objekterzeugung Objektdiagramme Methodenaufrufe Debugger

16 Abstraktion und Modularisierung Teile und herrsche Aufgaben 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

17 Beispiel: Digitaluhr 1.Klasse für zweiziffrige Anzeigen entwickeln.Klasse 2.Weitere Klasse, die gesamte Uhrenanzeige aus zwei Objekten der Klasse aus 1. zusammensetzt.Weitere Klasse Objektdiagramm Klassendiagramm

18 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; }

19 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.

20 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.

21 Primitive Datentypen Primitive Datentypen haben keine Methoden.

22 Logische Operatoren Boolesche Operatoren Neben der Negation (!), können die Operatoren – UND & – ODER | – exklusives ODER ^ auch auf Ausdrücke vom Datentyp boolean angewandt werden.boolean

23 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.

24 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.boolean 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.Variablen

25 Logische Operatoren Bitweise Operatoren Neben 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.

26 Übung: Logische Operatoren S.98, 99 Welche der folgenden Aussagen liefern true? ! (4 2) || ((4 == 4) && ( 1 2) || (4 == 4) && ( 1< 0) ( 34 != 33) && ! false

27 Verkettung von Zeichenketten Zeichenkette zusammensetzen: System.out.println(''# '' + preis + '' Cent. '');

28 Der Modulo-Operator Wert = (Wert + 1) % limit; Berechnet den ganzzahligen Rest der Division: 7 % 3 = 1, da 7:3= 2 Rest 1 7 % 5 = 2, da 7:5= 1 Rest 2 36 % 3 = 0, da 36 : 3 = 12 Rest 0

29 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.

30 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.

31 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)

32 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.

33 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.

34 4. Objektsammlungen S. 123 ff Sammlungen Schleifen Iteratoren Arrays

35 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; oder import java.util.*;

36 private ArrayList mitglieder; private ArrayList 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

37 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-Schleife 2.while-Schleife 3.for-Schleife

38 1. Die for-each-Schleife: “verbesserte“ for (Elementtyp element : sammlung) { Schleifenrumpf; } Für jedes element in sammlung tue, was im Schleifenrumpf steht. Schleifenkonstrukte

39 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

40 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

41 Ü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 …! Schreiben Sie eine while-Schleife in einer Methode fak, welche die Fakultät einer übergebenen natürlichen Zahl ausgibt!

42 Sammlung mit fester Größe - Array private String[] namen; namen = new String[24]; String[5]=''Kraus'';

43 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.

44 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.

45 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.

46 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.

47 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)


Herunterladen ppt "OOP mit JAVA Objektorientierte Programmierung Einführung."

Ähnliche Präsentationen


Google-Anzeigen