Einführung in die Programmierung mit Java

Slides:



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

Objektorientierte Programmierung
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003.
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
Zusammenfassung Vorwoche
DVG Klassen und Objekte
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Programmierung im Netz und Internet: Einführung in die Programmiersprache Java Teil I 1 Klassen Objekte von.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Grundkonzepte Java - Klassendefinition
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 Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
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
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Variablenkonzept Klassisch, in Java Basistyp
Parameterübergabemechanismen für den Methodenaufruf
Programmiervorkurs WS 2014/15 Instanzmethoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 8. Vorlesung WS 2002/2003.
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
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.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. D. Dörschlag Einführung in die Programmierung mit Java.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 10. Vorlesung WS 2002/2003.
Einführung in die Programmierung mit Java
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 03/041 Übungsaufgabe Ergänzt die Klasse Dreieck aus der Hausaufgabe um eine Methode,
Objektorientierte Programmierung (OOP)
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Java Programme nur ein bisschen objektorientiert.
C++ FÜR cOMPUTERSPIELENTWICKLER
Konstruktoren.
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Einführung in die Programmierung mit Java
Java-Kurs - 5. Übung Das Paradigma der Objektorientierung (OO)
Einführung in die Programmierung mit Java
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
Implementieren von Klassen
Grundkurs Informatik 11-13
 Präsentation transkript:

Einführung in die Programmierung mit Java 6. Vorlesung WS 2002/2003

Übersicht Besprechung der Übungsaufgabe Referenzvariablen Methoden Deklaration Aufruf Parameterübergabe Rückgabewert Lokale Variablen Konstruktoren G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Hausaufgabe Entwerft analog zur Definition von Rechtecken die Klassendefinitionen für Dreiecke, Ellipsen und Trapeze. Erzeugt mindestens eine Instanz jeder Klasse weist ihnen sinnvolle Werte zu. Hinweis: Die Lösung umfasst mehrere .java-Dateien. In jedem der Dateinamen (und auch Klassennamen) muss Euer Nachname auftauchen (z.B. SchmitzDreieck.java) G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Hausaufgabe: Lösung class Dreieck { //in Datei Dreieck.java double Seite1, Seite2, Seite3; } class Ellipse{ //in Datei Ellipse.java double radius1, radius2; class Trapez{ //in Datei Trapez.java double LangeSeiteUnten, KurzeSeiteOben, Winkel, rechteSeite; //Erzeugen von Instanzen (in der main einer anderen Datei): Dreieck d = new Dreieck(); d.Seite1 = 5.4; d.Seite2 = 6.2; d.Seite3 = 9.3; Ellipse e = new Ellipse(); e.radius1 = 6.5; e.radius2 = 2.1; Trapez t = new Trapez(); t.LangeSeiteUnten = 12.9; t.KurzeSeiteOben = 4.9; t.Winkel = 70.0; t.rechteSeite = 8.2; G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Wdh.: Klassen und Objekte Klassen definieren allgemeine Eigenschaften (z.B. Definition geometrischer Figuren oder den Bauplan für ein Haus) Von einer Klasse können Objekte (Instanzen) erzeugt werden (konkrete Ausprägung einer Klasse, z.B.: Rechteck mit Seitenlängen 10 und 7.5; oder das Beethoven-Haus) G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Referenzvariablen Variablen für einfache Datentypen (Z.B. int, double) Stehen als Platzhalter für Werte Variablen beinhaltet ihren Wert radius 2.7 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Referenzvariablen Variablen für einfache Datentypen (Z.B. int, double) Stehen als Platzhalter für Werte Variablen beinhaltet ihren Wert Referenzvariablen zeigen auf Objekte; sie enthalten nicht selber das Objekt (wie Array-Variablen) Kreis kreis1 = new Kreis(); kreis1.radius = 2.7; radius 2.7 kreis1 ? Instanz von Kreis radius 2.7 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Referenzvariablen Variablen für einfache Datentypen (Z.B. int, double) Stehen als Platzhalter für Werte Variablen beinhaltet ihren Wert Referenzvariablen zeigen auf Objekte; sie enthalten nicht selber das Objekt Referenzvariablen, die auf kein konkretes Objekt verweisen, sollte der Wert null zugewiesen werden (z.B. direkt bei der Deklaration) Beispiel: Kreis kreis2 = null; radius 2.7 kreis1 ? Instanz von Kreis radius 2.7 kreis2 null G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Referenzvariablen - Beispiel Fazit: Zum Kopieren von Objekten oder Erzeugen neuer Objekte reicht es nicht, die Referenzen zu kopieren Zum Vergleich zweier unterschiedlicher Objekte reicht es nicht auf Gleichheit der Referenzen zu prüfen Deklaration zweier Referenzvariablen Beispiel: Kreis kreis1, kreis2; kreis1 = new Kreis(); kreis1.radius = 1.0; kreis2 = kreis1; kreis2.radius = 2.5; Neuer Wert für Instanz, auf die Referenzvariable kreis2 verweist Kopieren der Referenz (nicht des Objekts!!!) Kreis1 hat ebenfalls Radius 2.5 Instantiierung eines Objekts Initialisierung der Variablen Instanz von Kreis radius ? kreis1 ? 2.5 1.0 kreis2 ? G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Methoden Klassen bestehen aus Attributen und Methoden Attribute speichern Werte einer Instanz z.B. Seitenlänge = 3.5 bei einem Rechteck Methoden werden für eine Instanz aufgerufen Methoden führen Berechnungen auf der Instanz aus greifen auf Attributwerte der Instanz zu geben diese z.B. aus berechnen z.B. den Flächeninhalt eines Rechtecks ändern z.B. Attributwerte ..... Methoden realisieren das Prinzip der Kapselung G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Methodendefinition Syntax: class Klassenname { Typ1 Variablenname1; . . . Rückgabetyp Methodenname (Parameterliste) { //Programmcode der Methode } Beispiel: class Rechteck { double breite, hoehe; double flaeche () { double flaecheninhalt = breite * hoehe; return flaecheninhalt; G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Beispiele für Methodendefinitionen class Rechteck { double breite, hoehe; // Attribute // Methode zur Berechnung des Umfangs double umfang () { // keine Parameter; Rückgabetyp double double umfang; // lokale Variable (ex. nur in der Methode) umfang = 2*breite + 2*hoehe; // Berechnung anhand der Attributwerte return umfang; // Rückgabe des berechneten Wertes } //Methode zum Ändern der breite: void aendereBreite(double neueBreite){ breite = neueBreite; // Methode zur Ausgabe des Objekts (als Text) void ausgeben() { // keine Parameter; kein Rückgabewert System.out.println("Dieses Rechteck hat folgende Eigenschaften:"); System.out.print("Breite: " + breite + "Höhe: " + hoehe); System.out.print("Umfang: " + umfang()); //Methodenaufruf! G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Aufruf von Methoden Syntax: // Methode ohne Rückgabewert (void) objektvariable.methode1(Parameterliste); . . . // Methode mit Rückgabewert variable = objektvariable.methode2(Parameterliste); Beispiel: myRechteck.ausgeben(); double flaecheninhalt; flaecheninhalt = myRechteck.flaeche(); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Beispiele für Methodenaufrufe class Rechteck { double breite, hoehe; // Attribute // Methode zur Berechnung des Umfangs double umfang () { // keine Parameter; Rückgabetyp double double umfang; // lokale Variable (ex. nur in der Methode) umfang = 2*breite + 2*hoehe; // Berechnung anhand der Attributwerte return umfang; // Rückgabe des berechneten Wertes } //Methode zum Ändern der breite: void aendereBreite(double neueBreite){ breite = neueBreite; // Methode zur Ausgabe des Objekts (als Text) void ausgeben() { // keine Parameter; kein Rückgabewert System.out.println("Dieses Rechteck hat folgende Eigenschaften:"); System.out.print("Breite: " + breite + "Höhe: " + hoehe); System.out.print("Umfang: " + umfang()); //Methodenaufruf! //Aufruf (dies steht in einer anderen Datei...) Rechteck r = new Rechteck(); r.aendereBreite(5.2); r.ausgeben(); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Methoden mit und ohne Rückgabewert Deklaration: void methode(){ ..... } Aufruf instanz.methode(); Methode muss kein „return“ haben Mit Rückgabewert Deklaration: double methode(){ ... return double_Wert; } Aufruf: double d = instanz.methode() Methode muss „return Wert“ haben; Typ des Wertes = Rückgabetyp Zweck: Liefert Ergebnis nach Außen G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Methoden mit Rückgabewert „return“ beendet Ausführung der Methode Methode mir Rückgabewert darf nie ohne return beendet werden Gegenbeispiel: boolean methode1(){ if(Bedingung1) return true; if(Bedingung2) return false; } Richtig: boolean methode2(){ if(Bedingung3) return true; else return false; } Ende ohne „return“ wenn Bedingung1 falsch und Bedingung2 falsch Ende immer mit „return“ G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Übungsaufgabe Programmiert zwei Methoden der Klasse „Kreis“, die den Flächeninhalt und den Umfang eines Kreises berechnen und zurückgeben. Berechnet den Flächeninhalt und Umfang für eine Instanz und gebt sie aus. Hinweis: Die Zahl pi erhält man durch Math.PI Syntax: class Kreis{ double methode(){ ............. return double_Wert } Aufruf: Kreis k = new Kreis(); double d = k.methode(); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Methoden: Parameter dienen dazu, Werte von Außen in die Methode zu geben Parameter müssen Typ haben (wie Variablen) Beispiel: Methode der Klasse Kreis: void setzeMittelpunkt(double x, double y){ mittelpunktX = x; mittelpunktY = y; } Aufruf (k Referenzvariable für Klasse Kreis): k.setzeMittelpunkt(5.2,4.3); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Methoden: Parameter Parameter in der Methodendeklaration: Paare „Typ Variable“, durch Koma getrennt z.B. void setzeMittelpunkt(double x, double y) x,y: Formale Parameter Parameter werden in Methode verwendet Parameter in Aufruf: konkrete Werte (einer pro Parameter), durch Komma getrennt z.B. k.setzeMittelpunkt(5.2,4.3); aktuelle Parameter Beim Aufruf werden formale durch aktuelle Parameter ersetzt Beispiel: void setzeMittelpunkt(double x , double y ){ mittelpunktX = x ; mittelpunktY = y ; } 5.2 4.3 5.2 4.3 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Abarbeitungsreihenfolge Parameterübergabe: neueBreite = 5.2 Abarbeitungsreihenfolge Start //Aufruf: Rechteck r = new Rechteck(); r.aendereBreite(5.2); r.ausgeben(); void aendereBreite(double neueBreite){ breite = neueBreite;} void ausgeben() { System.out.println("Dieses Rechteck hat folgende Eigenschaften:"); System.out.print("Breite: " + breite + "Höhe: " + hoehe); System.out.print("Umfang: " + umfang());} fertig Rückgabewert: return 12.2 double umfang () { double umfang = 2*breite + 2*hoehe; return umfang;} G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Konstruktoren (I): Motivation Beispiel: Erzeugen eines Dreiecks mit drei Attributen seite1, seite2, seite3 Dreieck d; d = new Dreieck(); d.seite1 = 6.4; d.seite2 = 3.1; d.seite3 = 5.2; Mit Konstruktor: Dreieck d; d = new Dreieck(6.4 , 3.1, 5.2); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Konstruktoren (II) Konstruktoren sind spezielle Methoden Name des Konstruktors = Klassenname Beispiel: Konstruktor für die Klasse Punkt (mit zwei Attributen xKoordinate und yKoordinate) Punkt(double x, double y) { xKoordinate = x; yKoordinate = y; } werden implizit bei der Erzeugung mit new aufgerufen: Punkt p = new Punkt(4.9,8.5); kein Rückgabewert (auch kein void) darf fehlen (dann wird Standardkonstruktor verwendet) Zweck: Initialisierung der Instanz, Zuweisung von Anfangswerten G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Konstruktoren (III) Aufruf: kreis k = new kreis(); Es kann mehrere Konstruktoren geben diese müssen sich hinsichtlich Anzahl und Typ der Parameter unterscheiden Beispiel: class kreis{ double mittelpunktX, mittelpunktY, radius; kreis() { mittelpunktY = 0; mittelpunktY = 0; radius = 1} kreis(double r){ mittelpunktX = 0; mittelpunktY = 0; radius = r} kreis(double r, double x, double y){ mittelpunktX = x; mittelpunktY = y; radius = r} } Aufruf: kreis k = new kreis(56); Aufruf: kreis k = new kreis(56,8,7); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Übungsaufgabe Programmiert drei Konstruktoren der Klasse Ellipse: einen mit keinem Parameter (mit sinnvollen Default-Werten), einen mit einem Parameter (kleinerRadius) und einen mit drei Parametern (mittelpunktX,mittelpunktY,radius). Syntax: class Kreis{ Kreis(int i, double d){ ............. } Aufruf: Kreis k = new Kreis(8,4.3); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Kapselung auf Attribute sollte von Außen nicht direkt zugegriffen werden Zugriff von Außen nur über Methoden Mechanismen, um dies sicherzustellen, kommen später private und protected statt public für Attribute entspricht "-" und "+" in UML-Klassendiagrammen G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Wozu Kapselung? //ohne Kapselung: kreis k = new kreis(); class kreis{ double radius, mittelpunktX, mittelpunktY; boolean setzteRadius(double neuerRadius){ if(neuerRadius > 0){ radius = neuerRadius; return true;} else return false; } //ohne Kapselung: kreis k = new kreis(); k.radius = – 88; // radius negativ! //mit Kapselung kreis k = new kreis(); boolean b = k.setzeRadius(– 88); //radius nie negativ! G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Auf welche Variablen darf in einer Methode zugegriffen werden? auf die Attribute der Instanz, für die Methode aufgerufen wurde auf die formalen Parameter (bei Aufruf durch aktuelle ersetzt) auf lokale Variablen (in Methode deklariert und nur dort existent) Beispiel: (für Klasse Rechteck mit laenge und breite) double volumen(double hoehe){ double v; v = laenge * breite * hoehe; return v; } G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Methoden - Lokale Variablen Variablen, die innerhalb von Methoden deklariert werden, heißen lokale Variablen. Lokale Variablen werden bei jedem Aufruf einer Methode neu angelegt und existieren nur für die Zeitdauer der Abarbeitung der Methode. Im Gegensatz: Die evtl. innerhalb einer Methode erzeugten Objekte bestehen fort über die Methodenabarbeitung hinaus. Aber: sollten alle Referenzen auf neue Objekte entfallen, weil am Ende einer Methode alle lokalen Referenzvariablen Aufhören zu existieren, so werden auch diese Objekte gelöscht (automatische Garbage Collection) G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Methoden - Lokale Variablen - Beispiel Beispiel: void methode1(){ Punkt p = new Punkt(1,5, 6.7); ...... } p ist eine lokale Variable nach Beendigung von methode1 existiert p nicht mehr existiert die Instanz Punkt(1,5, 6.7) zunächst noch wird die Instanz Punkt(1,5, 6.7) gelöscht, wenn keine weitere Referenz darauf existiert wird die Instanz Punkt(1,5, 6.7) nicht gelöscht, wenn eine noch existierende Referenz darauf existiert nichtLokal = p; G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Beispiel: Klasse Punkt class Punkt{ double xKoordinate; //Attribut double yKoordinate; //Attribut Punkt(){ xKoordinate = 0.0; yKoordinate = 0.0;} //Konstruktor Punkt( double x, double y ){ xKoordinate = x; yKoordinate = y;} //Konstruktor double x_Koordinate() {return xKoordinate;} double y_Koordinate() {return yKoordinate;} void verschieben(double deltaX, double deltaY){ xKoordinate = xKoordinate + deltaX; yKoordinate = yKoordinate + deltaY; } double abstand(Punkt p){ double a = Math.sqrt(Math.pow(xKoordinate - p.xKoordinate,2.0) + Math.pow(yKoordinate - p.yKoordinate,2.0)); return a; //a ist lokale Variable, p ein Parameter } G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Beispiel: Benutzung der Klasse Punkt Punkt p1 = new Punkt(6.0,8.0); Punkt p2 = new Punkt(8.0,23.0); p1.verschieben(2,12); double abstand = p1.abstand(p2); System.out.println("Der Abstand zwischen beiden Punkten beträgt " + abstand); G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

Hausaufgabe Definiert eine Klasse für Dreiecke, die in der Ebene eingebettet sind (d.h. alle drei Punkte haben x- und y-Koordinaten). Definiert einen komfortablen Konstruktor (der ein Dreieck in einem Schritt erzeugt) eine Methode zur Berechnung des Umfangs, eine Methode zum Verschieben des Dreiecks und eine Methode zur textuellen Ausgabe. Hinweis: Es bietet sich an, die Klasse Punkt aus der Vorlesung zu verwenden. G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03