Objektorientierte Programmierung Einführung

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
Einführung in die Programmierung Zusammenfassung
Zusammenfassung der Vorwoche
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Objektorientierte Programmierung
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Ein Beispiel in Java.
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Robotik mit LEGO Mindstorms
Imperative Programmierung
Einführung in die Programmierung mit Java
Boolesche Ausdrücke Ist der Rückgabewert eines Ausdrucks vom Typ boolean, so wird dieser als Boolescher Ausdruck bezeichnet (nach dem Mathematiker George.
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Klassen und Objekte
Einführung in die Programmierung Datensammlung
Einführung in die Programmierung Anweisungen und Datentypen
Einführung in die Programmierung Klassendefinition und Objekte
Sitzung 3: Klassen, Objekte, Arrays und Kontrollstrukturen
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Grundkonzepte Java - Klassendefinition
Java programmieren mit JavaKara
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Variablenkonzept Klassisch, in Java Basistyp
Unterprogramme in JAVA
Parameterübergabemechanismen für den Methodenaufruf
EPROG Tutorium #3 Philipp Effenberger
PHP: Operatoren und Kontrollstrukturen
Programmiervorkurs WS 2014/15 Instanzmethoden
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Übersicht Nachtrag zu Ausdrücken
Einführung Blue J. Inhaltsverzeichnis  Definition  Vokabeln.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003 Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger,
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003.
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Grundkurs Informatik 11-13
Implementieren von Klassen
 Präsentation transkript:

Objektorientierte Programmierung Einführung 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

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.

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)

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

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 }

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

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.

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

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 }

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)

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

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

Ü: Heizungsaufgabe

3. Objektinteraktion Abstraktion Modularisierung Objekterzeugung Objektdiagramme Methodenaufrufe Debugger

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

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

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

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.

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.

Primitive Datentypen Primitive Datentypen haben keine Methoden.

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

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.

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.

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.

Übung: Logische Operatoren Welche der folgenden Aussagen liefern true? ! (4<5) ! false (2>2) || ((4 == 4) && ( 1< 0)) (2>2) || (4 == 4) && ( 1< 0) ( 34 != 33) && ! false

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

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

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: Er erzeugt ein neues Objekt der angegebenen Klasse. Er führt den Konstruktor der Klasse aus.

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.

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)

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.

Der Debugger Haltepunkte im Quelltext setzen mit BlueJ (vor die Zeile STOP-Symbol, auf Zeilennummer klicken) Eine Methode aufrufen, die den Haltepunkt enthält.

4. Objektsammlungen S. 123 ff Sammlungen Schleifen Iteratoren Arrays

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.*;

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

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. for-each-Schleife while-Schleife for-Schleife

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

Schleifenkonstrukte 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 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);

Ü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!

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

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.

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.

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.

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.

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)