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

Ähnliche Dokumente
Gleitkommazahlen. Die Typen float und double. Page 1. Variablen. Konstanten. Syntax der Gleitkommakonstanten

Java Einführung Methoden. Kapitel 6

Grundlagen der Programmierung Prof. H. Mössenböck. 2. Einfache Programme

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

Implementieren von Klassen

3. Grundanweisungen in Java

Prozeduren vs. Funktionen

2. Unterprogramme und Methoden

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 15/16

Java für Anfänger Teil 4: Anweisungen. Programmierkurs Manfred Jackel

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Vorlesung Programmieren

Methoden und Wrapperklassen

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

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

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

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

Felder (1) Felder (Arrays) speichern viele Datenelemente des gleichen Typs. Auf einzelne Elemente kann über einen Index zugegriffen werden

Grundlagen der Programmierung Prof. H. Mössenböck. 4. Schleifen

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

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]

Vorkurs Informatik WiSe 16/17

Programmierung und Angewandte Mathematik

Einführung in die Programmierung für NF. Zuweisungen, main- Methode und Kommentare

Einführung in die Programmierung für NF. Zuweisungen, main- Methode und Kommentare

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Einstieg in die Informatik mit Java

Grundelemente objektorientierter Sprachen (1)

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

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

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

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

Vorkurs Informatik WiSe 17/18

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

6 Speicherorganisation

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

Einführung in die Programmierung

Wenn... dann... if (condition) statement. if (kontostand < 0) System.out.println("Oops..."); false. condition. true. statement

Einstieg in die Informatik mit Java

Schleifen. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 45

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Grundelemente objektorientierter Sprachen (1)

Einführung in die Programmierung

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Klassenvariablen, Klassenmethoden

Grundelemente objektorientierter Sprachen (1)

Elementare Konzepte von

Programmiertechnik Klassenmethoden

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

JAVA - Methoden

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Java-Applikationen (Java-Programme)

Fakultät IV Elektrotechnik/Informatik

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Thomas Gewering Benjamin Koch Dominik Lüke. (geschachtelte Schleifen)

Erste Java-Programme (Scopes und Rekursion)

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

C++ - Objektorientierte Programmierung Polymorphie

Methoden (fortgeschritten) in C# - 1

Strukturierung von Programmen. Strukturierung von Programmen. Parameterlose Methoden. Blöcke

2 Programmieren in Java I noch ohne Nachbearbeitung

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

Einführung in die Programmierung Wintersemester 2016/17

II.3.1 Rekursive Algorithmen - 1 -

10. Methoden. Methoden. Beispiel Keksrechner. Keksrechner - Zusätzliche Anforderung

Primitive Datentypen, Eingaben, Kontrollstrukturen und Methodendeklaration

Wiederholung - Variablen

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Fragenkatalog ESOP WS 16/17

Herzlich willkommen!

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

6 Speicherorganisation

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Java I Vorlesung Imperatives Programmieren

3.2 Datentypen und Methoden

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Einführung in die Programmierung mit BlueJ

Klausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2008/09

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

JAVA - Methoden - Rekursion

Modellierung und Programmierung 1

Arbeitsblatt zu Methoden

Speicherklassen (1) Lokale Variablen

Programmierung für Mathematik HS11

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

3. Anweisungen und Kontrollstrukturen

Programmiertechnik Übungen zu Klassen & -methoden

Anweisungen zur Ablaufsteuerung

Kapitel 4: Anweisungen und Kontrollstrukturen

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

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

Transkript:

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

Parameterlose Methoden Beispiel: Ausgabe einer Überschrift class Sample { static void printheader() { // Methodenkopf Out.println("Artikelliste"); // Methodenrumpf Out.println("------------"); public static void main (String[] arg) { printheader(); // Aufruf printheader(); Zweck von Methoden Wiederverwendung häufig benutzten Codes Definition benutzerspezifischer Operationen Strukturierung des Programms 2

Wie funktioniert ein Methodenaufruf? static void P() { Q(); static void Q() { R(); static void R() { Namenskonventionen für Methoden Namen sollten mit Verb und Kleinbuchstaben beginnen Beispiele: printheader, findmaximum, traverselist, 3

Parameter Werte, die vom Rufer an die Methode übergeben werden class Sample { static void printmax (int x, int y) { if (x > y) Out.print(x); else Out.print(y); formale Parameter - im Methodenkopf (hier x, y) - sind Variablen der Methode public static void main (String[] arg) { printmax(100, 2 * i); aktuelle Parameter - an der Aufrufstelle (hier 100, 2*i) - können Ausdrücke sein Parameterübergabe Aktuelle Parameter werden den entsprechenen formalen Parametern zugewiesen x = 100; y = 2 * i; aktuelle Parameter müssen mit formalen zuweisungskompatibel sein formale Parameter enthalten Kopien der aktuellen Parameter 4

Funktionen Methoden, die einen Ergebniswert an den Rufer zurückliefern class Sample { static int max (int x, int y) { if (x > y) return x; else return y; public static void main (String[] arg) { int result = 3 * max(100, i + j) + 1; haben Funktionstyp (z.b. int) statt void (= kein Typ) liefern Ergebnis mittels return- Anweisung an den Rufer zurück (x muss zuweisungskompatibel mit int sein) Werden wie Operanden in einem Ausdruck benutzt Funktionen Methoden mit Rückgabewert static int max (int x, int y) { Prozeduren Methoden ohne Rückgabewert static void printmax (int x, int y) { 5

Weiteres Beispiel Ganzzahliger Zweierlogarithmus class Sample { static int log2 (int n) { // assert: n > 0 int res = 0; while (n > 1) {n = n / 2; res++; return res; public static void main (String[] arg) { int x = log2(17); // x == 4 n res 17 0 8 1 4 2 2 3 1 4 6

Return in Prozeduren class ReturnDemo { static void printlog2 (int n) { if (n <= 0) return; // kehrt zum Rufer zurück int res = 0; while (n > 1) {n = n / 2; res++; Out.println(res); public static void main (String[] arg) { int x = In.readInt(); if (!In.done()) return; // beendet das Programm printlog2(x); Funktionen Prozeduren müssen mit return beendet werden können mit return beendet werden 7

Lokale und statische Variablen class C { static int a, b; static void P() { int x, y; Statische Variablen auf Klassenebene mit static deklariert; auch in Methoden dieser Klasse sichtbar Lokale Variablen in einer Methode deklariert (lokal zu dieser Methode; nur dort sichtbar) Reservieren und Freigeben von Speicherplatz Statische Variablen am Programmbeginn angelegt am Programmende wieder freigegeben Lokale Variablen bei jedem Aufruf der Methode neu angelegt am Ende der Methode wieder freigegeben 8

Beispiel: Summe einer Zahlenfolge falsch! class Wrong { richtig! class Correct { static void add (int x) { int sum = 0; sum = sum + x; public static void main(string[] arg) { add(1); add(2); add(3); Out.println("sum = " + sum); static int sum = 0; static void add (int x) { sum = sum + x; public static void main(string[] arg) { add(1); add(2); add(3); Out.println("sum = " + sum); sum ist in main nicht sichtbar sum wird bei jedem Aufruf von add neu angelegt (alter Wert geht verloren) 9

Sichtbarkeitsbereich von Namen Programmstück, in dem auf diesen Namen zugegriffen werden kann (auch Gültigkeitsbereich oder Scope des Namens genannt) class Sample { static void P() { static int x; static int y; static void Q(int z) { int x; x y z x Regeln 1. Ein Name darf in einem Block nicht mehrmals deklariert werden (auch nicht in geschachtelten Anweisungsblöcken). 2. Lokale Namen verdecken Namen, die auf Klassenebene deklariert sind. 3. Der Sichtbarkeitsbereich eines lokalen Namens beginnt bei seiner Deklaration und geht bis zum Ende der Methode. 4. Auf Klassenebene deklarierte Namen sind in allen Methoden der Klasse sichtbar. 10

Beispiel zu Sichtbarkeitsregeln x class Sample { static void P() { Out.println(x); // gibt 0 aus static int x = 0; x y y' public static void main(string[] arg) { Out.println(x); // gibt 0 aus int x = 1; // verdeckt statisches x Out.println(x); // gibt 1 aus P(); if (x > 0) { int x; // Fehler: x ist in main bereits deklariert int y; else { int y; // ok, kein Konflikt mit y im then-zweig for (int i = 0; ) { for (int i = 1; ) { // ok, kein Konflikt mit i aus letzter Schleife 11

Lebensdauer von Variablen class LifenessDemo { static int g; static void A() { int a; static void B() { int b; A(); A(); public static void main(string[] arg) { int m; B(); lokale Variablen (Methodenkeller) m b m a b m b m a' b m b m m statische Var. g g g g g g g g 12

Lokalität Variablen möglichst lokal deklarieren, nicht als statische Variablen. Vorteile Übersichtlichkeit Deklaration und Benutzung nahe beisammen Sicherheit Lokale Variablen können nicht durch andere Methoden zerstört werden Effizienz Zugriff auf lokale Variable ist oft schneller als auf statische Variable 13

Überladen von Methoden Methoden mit gleichem Namen aber verschiedenen Parameterlisten können in derselben Klasse deklariert werden static void write (int i) { static void write (float f) { static void write (int i, int width) { Beim Aufruf wird diejenige Methode gewählt, die am besten zu den aktuellen Parametern passt write(100); write (int i) write(3.14f); write (float f) write(100, 5); write (int i, int width) short s = 17; write(s); write (int i); 14

Beispiele Größter gemeinsamer Teiler nach Euklid static int ggt (int x, int y) { int rest = x % y; while (rest!= 0) { x = y; y = rest; rest = x % y; return y; Kürzen eines Bruchs static void reduce (int z, int n) { int x = ggt(z, n); Out.print(z/x); Out.print("/"); Out.print(n/x); 15

Beispiele Prüfe, ob x eine Primzahl ist static boolean isprime (int x) { if (x == 2) return true; if (x % 2 == 0) return false; int i = 3; while (i * i <= x) { if (x % i == 0) return false; i = i + 2; // i > x und x ist durch keine Zahl // zwischen 2 und i teilbar return true; for (int i = 3; i * i <= x; i += 2) if (x % i == 0) return false; 16

Beispiele Berechne x n static long power (int x, int n) { long res = 1; for (int i = 1; i <= n; i++) res = res * x; return res; Dasselbe effizienter static long power (int x, int n) { long res = 1; while (n > 0) { if (n % 2 == 0) { x = x * x; n = n / 2; // x 2n = (x*x) n else { res = res * x; n--; // x n+1 = x*x n return res; x n res 2 5 4 4 2 16 1 0 1 2 32 17