Programmiertechnik Klassenmethoden

Ähnliche Dokumente
Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden

2. Unterprogramme und Methoden

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Programmiertechnik Methoden, Teil 2

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden Teil 2

Methoden und Wrapperklassen

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

Einstieg in die Informatik mit Java

Programmierkurs. Manfred Jackel

Einstieg in die Informatik mit Java

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Grundkurs Programmieren in Java

Programmiertechnik Klassenvariablen & Instantiierung

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Programmiertechnik Klassen

Einstieg in die Informatik mit Java

Programmiertechnik Ausnahmen

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Ausnahmen

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1

Java für Anfänger Teil 7: Methoden. Programmierkurs Manfred Jackel

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassen

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Klassenvariablen, Klassenmethoden

Grundkurs Programmieren in Java Band 1: Der Einstieg in Programmierung und Objektorientierung

CS1005 Objektorientierte Programmierung

Programmiertechnik Objektorientierung

Aufgabenblatt 3. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

Grundkurs Programmieren in Java Band 1: Der Einstieg in Programmierung und Objektorientierung

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Grundelemente objektorientierter Sprachen (1)

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Speicher und Adressraum

Programmieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Klassen, Vererbung, Benutzereingabe

Aufgabenblatt 2. Kompetenzstufe 2. Allgemeine Informationen zum Aufgabenblatt:

Grundelemente objektorientierter Sprachen (1)

Programmiertechnik Felder (Arrays)

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Einstieg in die Informatik mit Java

Grundelemente objektorientierter Sprachen (1)

Elementare Konzepte von

Parameterübergabemechanismen für den Methodenaufruf

Einführung in die Programmierung

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung

Variablenarten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

JAVA - Methoden

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

Programmiertechnik Erweiterungen in Java 5

Programmiertechnik Kontrollstrukturen

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2016/17. Vorbereitende Aufgaben

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Programmiertechnik Objektorientierung, Teil 2

Methoden und Funktionen

Grundlagen der Objektorientierten Programmierung - Methoden -

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

pue13 January 28, 2017

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Implementieren von Klassen

Funktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen

Prozeduren in Java. streckeimperativ zur Verfügung. Grundlagen der funktionalen und imperativen Programmierung

Erste Java-Programme (Scopes und Rekursion)

2. Programmierung in C

2. Programmierung in C

Programmiertechnik Übungen zu Klassen & -methoden

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

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

Universität Paderborn Prof. Dr. Heike Wehrheim. Betreutes Arbeiten. Ab diese Woche: freitags, 14 16, E-Pool (während Tutorium Knopf) GPI, WS 07/08

Informatik Funktionen

Java Einführung Methoden. Kapitel 6

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

6 Speicherorganisation

Objektorientierung (OO)

Prüfung Softwareentwicklung I (IB)

Vorlesung Programmieren

JAVA - Methoden - Rekursion

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Kontrollstrukturen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Tagesprogramm. Werte und Typen Methoden und Parameter Ergebnisse und Seiteneffekte.

Umsetzung einer Klassenkarte in einer Programmiersprache

Programmierung und Angewandte Mathematik

Java Referenzdatentypen genauer betrachtet

Programmieren für Wirtschaftswissenschaftler SS 2015

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Delegaten. d. h. eine Tätigkeitsanforderung wird weitergeleitet

Klassen mit Instanzmethoden

6 Speicherorganisation

Transkript:

Programmiertechnik Klassenmethoden Prof. Dr. Oliver Haase Oliver Haase Hochschule Konstanz 1

Motivation Programm zur Berechung von public class Eval1 { public static void main(string[] args) { java.util.scanner scanner = new java.util.scanner(system.in); System.out.print("n:"); int n = scanner.nextint(); System.out.print("x:"); double x = scanner.nextdouble(); double f_x_n = 1.0; for ( int i = 0; i < 2*n; i++ ) { f_x_n *= x; f_x_n += n*n - n*x; System.out.println("f(x,n) = " + f_x_n); Oliver Haase Hochschule Konstanz 2

Motivation Aufgabe: Erweitere das Programm so, dass der Benutzer statt eines Wertes x die Randwerte a, b eines Intervalls [a, b] eingibt und das Programm die folgende Berechnung anstellt: berechne f am linken Randpunkt a des Intervalls; berechne f am rechten Randpunkt b des Intervalls; berechne f am Mittelpunkt des Intervalls; gib den Mittelwert der drei Funktionswerte aus. Oliver Haase Hochschule Konstanz 3

Motivation Erste Lösung: public class Eval2 { public static void main(string[] args) { java.util.scanner scanner = new java.util.scanner(system.in); System.out.print("n:"); int n = scanner.nextint(); System.out.print("a:"); double a = scanner.nextdouble(); System.out.print("b:"); double b = scanner.nextdouble(); double m = (a + b) / 2.0; double f_a_n = 1.0; for ( int i = 0; i < 2*n; i++ ) { f_a_n *= a; Oliver Haase Hochschule Konstanz 4

Motivation f_a_n += n*n - n*a; double f_b_n = 1.0; for ( int i = 0; i < 2*n; i++ ) { f_b_n *= b; f_b_n += n*n - n*b; double f_m_n = 1.0; for ( int i = 0; i < 2*n; i++ ) { f_m_n *= m; f_m_n += n*n - n*m; double mittel = (f_a_n + f_m_n + f_b_n) / 3; System.out.println("Mittelwert: " + mittel); Oliver Haase Hochschule Konstanz 5

Motivation Beobachtung: Programm lang und unübersichtlich hauptsächlich wegen dreimaliger gleicher Berechnung der Funktion f Lösungsidee: gliedere Berechnung von f aus als Routine, Unterprogramm, Funktion, Methode, so dass derselbe Code nicht mehrfach hingeschrieben werden muss. Oliver Haase Hochschule Konstanz 6

Was ist eine Methode? Ein Stück Programmcode, dem ein Namen gegeben wird, unter dem es aufgerufen werden kann. Eine Methode kann Parameter (Argumente) enthalten, die beim Aufruf durch Werte ersetzt werden. Eine Methode kann ein Ergebnis zurückliefern. Ähnlich einer mathematischen Funktion, die einen oder mehrere Werte (Parameter) auf ein Ergebnis abbildet. Es gibt Klassen- und Instanzmethoden. Hier und jetzt werden Klassenmethoden behandelt. Oliver Haase Hochschule Konstanz 7

Was ist eine Klassenmethode? Syntaxregel public static <ErgebnisTyp> <MethodenName>(<FormaleParameter>) { // Methodenrumpf: hier den // Programmcode einfuegen <Ergebnistyp>: Typ des Ergebnisses, z.b. int oder double. Falls Methode kein Ergebnis liefert, dann void. <MethodenName>: Selbstgewählter Methodenname (keine reservierten Wörter!) <FormaleParameter>: Kommaliste von Variablendeklarationen der Form <Typ> <Name> (z.b. int n, double x). Enthält sog. formale Parameter (formale Argumente). Die erste Zeile einer Methode wird Methodenkopf oder Signatur genannt. Oliver Haase Hochschule Konstanz 8

main-methode Beobachtung: Die bereits vielfach verwendete Zeile public static void main(string[] args) { ist der Kopf der main-methode. Die main-methode (Hauptmethode) ist die erste Methode eines Programmes (genauer: einer Klasse), die ausgeführt wird. liefert kein Ergebnis (wem auch?) erhält ein Feld von Strings mit dem Namen args als Parameter. (Dieses Feld kann dazu genutzt werden, dem Programm beim Start Argumente mitzugeben, dazu später mehr.) Oliver Haase Hochschule Konstanz 9

Beispiel-Methode Aufgabe: Programmiere eine Methode für die Funktion f vom Anfang: Oliver Haase Hochschule Konstanz 10

Beispiel-Methode Aufgabe: Programmiere eine Methode für die Funktion f vom Anfang: Methodenkopf: <Rueckgabetyp> : <MethodenName> : <FormaleParameter>: double f double x, int n Oliver Haase Hochschule Konstanz 11

Beispiel-Methode Aufgabe: Programmiere eine Methode für die Funktion f vom Anfang: Methodenkopf: <Rueckgabetyp> : <MethodenName> : <FormaleParameter>: double f double x, int n public static double f(double x, int n) { Oliver Haase Hochschule Konstanz 12

Beispiel-Methode Methodenrumpf: public static double f(double x, int n) { double ergebnis = 1.0; for ( int i = 0; i < 2*n; i++ ) { ergebnis *= x; ergebnis += n*n - n*x; return ergebnis; Oliver Haase Hochschule Konstanz 13

return-anweisung Die Anweisung return ergebnis; beendet die Methode und gibt den Wert der Variablen ergebnis als Methodenergebnis zurück. Der Typ von ergebnis muss zuweisungskompatibel mit dem Rückgabetyp der Methode sein. Hat die Methode den Rückgabetyp void, so steht return; für das sofortige Beenden der Methode. Als letzte Zeile kann diese Anweisung fehlen. Die return-anweisung funktioniert auch für Literale und arithmetische Ausdrücke, z.b. return ergebnis + n*n - n*x; Oliver Haase Hochschule Konstanz 14

return-anweisung Ein Methodenrumpf kann auch mehrere return-anweisungen enthalten: public static int fakultaet(int n) { if ( n == 0 ) { return 1; for ( int i = n -1; i > 0; i-- ) { n = n * i; return n; Oliver Haase Hochschule Konstanz 15

Methodenaufruf Syntaxregel <MethodenName>(<AktuelleParameter>) <MethodenName>: Name der aufzurufenden Methode <Aktuelle Parameter> : Kommaliste von Werten, je einer pro formalem Parameter, mit richtigem Typ, in der richtigen Reihenfolge. Werte können Variablen, Literale oder Ausdücke sein. Methodenaufruf ist ein elementarer Ausdruck; durch ein nachgestelltes Semikolon wird er zur Ausdrucksanweisung. Oliver Haase Hochschule Konstanz 16

Methodenaufruf Methodenaufruf liefert in der Regel ein Ergebnis; Ausnahme: Methode mit Rückgabetyp void. Beispiele für Methodenaufrufe: double y = f(x,n); double z = f(y,3) + 3*x; int fak = fakultaet(4); Nach dem Aufruf wird der Ergebniswert für den Aufruf eingesetzt und damit weitergerechnet. Oliver Haase Hochschule Konstanz 17

Eval die 3. und letzte Variante public class Eval3 { public static double f(double x, int n) { double ergebnis = 1.0; for ( int i = 0; i < 2*n; i++ ) { ergebnis *= x; ergebnis += n*n - n*x; return ergebnis; Oliver Haase Hochschule Konstanz 18

Eval die 3. und letzte Variante public static void main(string[] args) { java.util.scanner scanner = new java.util.scanner(system.in); System.out.print("n: "); int n = scanner.nextint(); System.out.print("a: "); double a = scanner.nextdouble(); System.out.print("b: "); double b = scanner.nextdouble(); double m = (a + b) / 2.0; double f_a_n = f(a, n); double f_b_n = f(b, n); double f_m_n = f(m, n); double mittel = (f_a_n + f_m_n + f_b_n) / 3; System.out.println("Mittelwert: " + mittel); Oliver Haase Hochschule Konstanz 19

Parameterübergabe Bei jedem Methodenaufruf wird: für jeden formalen Parameter eine neuer Speicherplatz angelegt; die Werte der aktuellen Parameter dort hinein kopiert; diese Speicherplätze der Methode zur Verfügung gestellt. Änderungen an Parameterwerten in der Methode haben keinen Effekt auf das Hauptprogramm! Diese Art der Parameterübergabe heißt Werteübergabe (call by value) Oliver Haase Hochschule Konstanz 20

Parameterübergabe Beispiel: Das folgende Programm public class AufrufTest { public static void unterprogramm(int n) { n *= 5; System.out.println("n = " + n); public static void main(string[] args) { int n = 7; System.out.println("n = " + n); unterprogramm(n); System.out.println("n = " + n); erzeugt die Ausgabe: n = 7 n = 35 n = 7 Konsole Oliver Haase Hochschule Konstanz 21

Parameterübergabe Speicherabbild für das Beispielprogramm: n 7 main lokale Variable der Methode main unterprogramm n 7 35 formale Variable nur innerhalb des Unterprogramms bekannt Oliver Haase Hochschule Konstanz 22

Übergabe von Referenzdatentypen geändertes AufrufTest-Programm (Integerfeld statt Integer als Übergabeparameter): public class AufrufTest2 { public static void unterprogramm(int[] n) { n[0] *= 5; System.out.println("n[0] = " + n[0]); public static void main(string[] args) { int n[] = {7; System.out.println("n[0] = " + n[0]); unterprogramm(n); System.out.println("n[0] = " + n[0]); erzeugt die Ausgabe: n = 7 n = 35 n = 35 Konsole??? Oliver Haase Hochschule Konstanz 23

Übergabe von Referenzdatentypen Auch bei Referenzdatentypen (Feldern, Objekten) wird der Wert des aktuellen Parameters kopiert, aber Der Wert eines Referenzdatentyps ist ein Verweis auf das eigentliche Datum. Speicherabbild: Aufrufschachteln (Methodenstack) Freispeicher (Heap) main n 7 35 unterprogramm n Oliver Haase Hochschule Konstanz 24

Überladen von Methoden Maximumsberechnung für Ganzzahlen: public static int max(int x, int y) { return (x > y)? x : y; Maximumsberechnung für Gleitkommazahlen: public static double max(double x, double y) { return (x > y)? x : y; Können beide Methoden denselben Namen haben? Ja, Java unterscheidet anhand der Parameter! "Überladen von Methoden" Oliver Haase Hochschule Konstanz 25

Überladen von Methoden überladene Methoden werden unterschieden anhand der Anzahl der formalen Parameter der Typen der Parameter der Positionen der Parameter weitere Beispiele für Maximumsfunktionen: public static int max(int x) { public static int max(int x, int y, int z) { public static int max(double x, int y) { public static int max(int x, double y) { Oliver Haase Hochschule Konstanz 26

Überladen von Methoden Methoden werden nicht unterschieden nach Namen der Parameter, d.h. die Methode public static int max(int x1, int y1) { kann nicht unterschieden werden (warum?) von public static int max(int x, int y) { Rückgabetyp, d.h. die Methode public static double max(int x, int y) { kann nicht unterschieden werden von public static int max(int x, int y) { Oliver Haase Hochschule Konstanz 27