Unterprogramme. AnPr. Wiederholungen im Code werden vermieden. Programme werden leichter lesbar. Die Entwicklung und der Test werden vereinfacht.

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

Grundproblematik bei Fehlersituationen

Methoden und Wrapperklassen

Prozeduren und Funktionen

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Name Klasse Datum. Um nun mit Variablen arbeiten zu können, müssen nun einige Voraussetzungen erfüllt sein:

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Programmierung und Angewandte Mathematik

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

Java Referenzdatentypen genauer betrachtet

C++ - Objektorientierte Programmierung Konstante und statische Elemente

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

Methoden und Funktionen

pue13 January 28, 2017

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

Repetitorium Informatik (Java)

6. Funktionen, Parameterübergabe

Einstieg in die Informatik mit Java

Grundlagen der Programmierung

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

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

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Grundlagen der Objektorientierten Programmierung - Methoden -

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

2. Programmierung in C

Einstieg in die Informatik mit Java

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

2. Programmierung in C

2. Unterprogramme und Methoden

Grundlagen der Programmierung

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

Einführung in die Programmierung 1

Grundelemente objektorientierter Sprachen (1)

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Grundlagen der OO- Programmierung in C#

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

Tag 7 Repetitorium Informatik (Java)

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

Grundelemente objektorientierter Sprachen (1)

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und

Grundelemente objektorientierter Sprachen (1)

Intuitive Einführung. Informatik B Objektorientierte Programmierung in Java. Vorlesung 01: Objektorientierte Programmierung (Teil 1)

Programmierwerkstatt. Arrays, Pointer und Referenzen

Repetitorium Programmieren I + II

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

Einstieg in die Informatik mit Java

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

Tag 8 Repetitorium Informatik (Java)

Programmieren I. Kapitel 12. Referenzen

Praxis der Programmierung

Fragen zur OOP in Java

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

Klausur in Programmieren

Umsetzungshilfe Java Teil 1

Einführung in die Programmierung II. 5. Zeiger

Programmieren für Wirtschaftswissenschaftler SS 2015

Einstieg in die Informatik mit Java

Implementieren von Klassen

Konzepte der Programmiersprachen

7. Übung Informatik II - Objektorientierte Programmierung

Java Einführung Methoden. Kapitel 6

Umsetzung einer Klassenkarte in einer Programmiersprache

Anregungen zu Übung 2

C++ - Einführung in die Programmiersprache Funktionen. Leibniz Universität IT Services Anja Aue

Softwareentwicklung I (IB) Methoden. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Arrays in C. 1 Grundlagen

Algorithmen und Datenstrukturen I. Blatt 2. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Einführung Pointer. C-Kurs 2013, 2. Vorlesung. Nico Andy

C++ - Objektorientierte Programmierung Vererbung

Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Aufgabenblatt 3

6 Speicherorganisation

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Funktionen in JavaScript

Martin Unold INFORMATIK. Geoinformatik und Vermessung

10.4 Konstante Objekte

Systemnahe Programmierung in C (SPiC)

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

3.2 Datentypen und Methoden

Funktionen in JavaScript

1 pulsierender Speicher

Einführung in die Programmierung Wintersemester 2008/09

Praxis der Programmierung

Programmiertechnik Klassenvariablen & Instantiierung

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Algorithmen und Datenstrukturen 07

2. Programmierung in C

Arrays. Einleitung. Deklarieren einer Array Variablen

Erste Java-Programme (Scopes und Rekursion)

Einführung in Java. Arne Hüffmeier. Angelehnt an Java-Vorkurs der Freitagsrunde. Methoden implementieren. Michelle Liebers, Dennis Hoffmann

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Die Klasse java.lang.object. Thorsten Treffer

6. Zeiger Allgemeines Definition eines Zeigers

Elementare Konzepte von

4.4 Imperative Algorithmen Prozeduren

Einführung in die Programmierung für NF MI. Übung 07

Übungsblatt 1. Java Vorkurs (WS 2017)

8. Referenzen und Zeiger

Transkript:

Name Klasse Datum 1 Allgemeines Programme werden üblicherweise nicht als ein einziger, fortlaufender Programmcode verfasst, sondern mit geeigneten Mitteln unterteilt und somit strukturiert. Die Methodik hierfür, welche von (fast) allen Programmiersprachen unterstützt wird, ist die der Unterprogramme. Unterprogramme werden aus folgenden Gründen geschaffen: Wiederholungen im Code werden vermieden. Programme werden leichter lesbar. Die Entwicklung und der Test werden vereinfacht. 2 Eigenschaften von Unterprogrammen Um die Nutzung von Unterprogrammen so effizient wie möglich zu gestalten, gibt es die Möglichkeit ihnen Eigenschaften zuzuordnen: Parameter: Name: Damit der Aufrufer die Verarbeitung innerhalb des Unterprogramms beeinflussen kann, gibt es die Option entsprechende Parameter an das Unterprogramm zu übergeben. Hierbei ist wichtig, dass die Parameter in typisierten Programmiersprachen auch Datentypen besitzen, beim Aufruf die Daten also mit dem richtigen Datentyp übergeben werden müssen. Um einen Aufruf zu ermöglichen, erhält jedes Unterprogramm einen Namen. Dieser sollte möglichst jedem Programmierer den Sinn und die Funktionsweise des Unterprogramms klar machen. Name und Parameter (Anzahl und Reihenfolge der Datentypen) werden auch die Signatur einer genannt. Diese Signatur ermöglicht es dem Computer beim Aufruf die richtige zu finden. Es können also mehrere Unterprogramme mit dem gleichen Namen existieren, welche sich lediglich durch die Anzahl und Reihenfolge der Parameterdatentypen unterscheiden. Im Rahmen der orientierung würde man hier von Überladung sprechen die ist überladen. Rückgabewert: Zur Übermittlung von eventuellen Unterprogrammergebnissen können Unterprogramme einen einzelnen Rückgabewert an den Aufrufer zurückgeben. In prozeduralen Programmiersprachen nennt man Unterprogramme, welche einen Wert zurückgeben, Funktionen. Solche die keinen Wert zurückgeben heißen Prozeduren. In objektorientierten Programmiersprachen spricht man immer von n. Das liegt im Wesentlichen an der Tatsache, dass n Zugriff auf Instanzvariablen haben doch davon mehr wenn das Thema orientierung angesprochen wird. Da Java eine objektorientierte Programmiersprache ist, sprechen wir ab hier nur noch von n. 3 Aufbau ndeklaration n werden mit dem oben beschriebenen Kopf (also Name, Parameter und Rückgabewert) und dem anschließenden Code, dem Rumpf realisiert. Die Übergabeparameter werden innerhalb der als ganz normale Variablen behandelt, weshalb sie auch im Kopf deklariert werden müssen. Die Zuweisung der Werte erfolgt bei naufruf. Der Code ist keinen weiteren Beschränkungen unterworfen. ANPR_Unterprogramme_v03.docx Seite 1

Beginnen wir zuerst mit der einfachsten Form einer, welche keine Parameter aufweist und keinen Rückgabewert liefert: Wichtig ist hier das Schlüsselwort void (engl. für leerer Raum) in Java, welches indiziert, dass es keinen Rückgabewert gibt. Nach dem nnamen folgt die Parameterliste, welche in diesem Beispiel leer ist die also keine Parameter erwartet. Der Bereich zwischen den beiden geschweiften Klammern nennen wir auch nrumpf. Dies ist der Bereich, der bei Aufruf der ausgeführt wird. Im nächsten Beispiel haben wir eine mit einem Parameter (und wieder ohne Rückgabewert): Die Parameter sind im Prinzip nichts anderes wie Variablen und werden innerhalb des nrumpfes auch wie Variablen behandelt. Sie können gelesen und geschrieben werden. Der Gültigkeitsbereich geht immer bis zur schließenden geschweiften Klammer des nrumpfes. Gibt es irgendwelche Namenskonventionen für die Parameter? Antwort: Die Namen der Parameter unterliegen den gleichen Forderungen wie andere Variablen auch. Rein technisch können sie beliebig benannt werden. Das einzige, was technisch von Interesse ist, sind die Datentypen der Parameter. Diese sind auch beim Aufruf wichtig. 4 Aufruf einer Der eigentliche Aufruf ist nichts Neues für uns. Wir haben bereits diverse n genutzt parseint(), println() etc. Beim Aufruf ist lediglich wichtig, dass wir den nnamen und die dazugehörigen Parameter mit dem richtigen Datentypen verwenden. In unserem Beispiel wertausgabe müssen wir den Namen, gefolgt von einem Stringwert verwenden: Es ist hierbei erst mal unerheblich, ob der Stringwert aus einer Konstanten (wie oben dargestellt) oder aus einer Variablen kommt. Seite 2

Unterprogramme Sind mehrere Parameter im Spiel, so muss lediglich darauf geachtet werden, dass die Datentypen in der richtigen Reihenfolge auftreten: 5 Verhalten der Übergabeparameter Bei der Parameterübergabe ist zu beachten, dass man bei vielen Programmiersprachen die Übergaben by value und by reference unterscheiden muss. Aufrufende Aufgerufende Aufrufende Aufgerufende Referenz ivariable ivariable Speicher Speicher Hallo 1234567 1234567 Call by Reference Call by Value Bei Call by Reference wird die Variable von der aufrufenden nicht übergeben, sondern lediglich eine Referenz auf den Speicherort der Variable. Dies hat zur Konsequenz, dass wenn die aufgerufene den Inhalt der Variable ändert, diese Änderung auch bei der aufrufenden sichtbar ist. Man kann sich dies so vorstellen, als dass eine Person A ein Dokument vorbereitet und auf den Tisch legt diese Person A soll das aufrufende Programm symbolisieren. Das aufgerufene Programm wird von Person B symbolisiert und erhält von Person A lediglich die Information wo das Dokument liegt. Person A teilt Person B also mit Das Dokument liegt auf dem Tisch. Wenn Person B nun Änderungen an dem Dokument vornimmt, so wird diese Änderung an dem Dokument auf dem Tisch vorgenommen und Person A kann diese Änderungen entsprechend sehen. Im Gegensatz dazu wird bei Call by Value eine echte der Variable erstellt, welche der aufgerufenen übergeben wird. Somit sind Änderungen an der Variable in der aufrufenden nicht sichtbar. Man kann sich dies so vorstellen, als dass eine Person A ein Dokument vorbereitet und auf den Tisch legt diese Person A soll wiederum das aufrufende Programm symbolisieren. Das aufgerufene Programm wird wieder von Person B symbolisiert und erhält von Person A nun eine echte des Dokuments (also aus dem rer). Wenn Person B nun Änderungen an dem Dokument (also der ) vornimmt welches sie von Person A erhalten hat, so wird diese Änderung an dem originalen Dokument auf dem Tisch nicht vorgenommen und Person A kann diese Änderungen nicht sehen. Fazit: Bei Call by Reference arbeiten sowohl die aufrufende, als auch die aufgerufene mit der gleichen Variablen. Jede Änderung, welche das aufgerufene Programm an dem Variableninhalt macht, wird automatisch auch von dem aufrufenden Programm gesehen. Bei Call by Value arbeiten beide n mit einer eigenen der Variablen. Eine Änderung durch das aufgerufene Programm wird somit nicht vom aufrufenden Programm gesehen. Seite 3

In Java gibt es keine Wahlmöglichkeit, ob by Value oder by Reference aufgerufen wird folgende Tabelle zeigt das Verhalten (nicht die tatsächliche Umsetzung) der Java Virtual Machine auf: Art des Übergabeparameters: Einfache Datentypen (int, double etc.) Strings e Verhalten: Call by value Call by value Call by reference Ich habe gelesen, dass Java nur Call by Value unterstützt. Irgendwie passt das aber nicht zur obigen Tabelle, weil es würde ja bedeuten, dass das Verhalten für e so nicht möglich wäre?!? Antwort: Es ist absolut richtig, dass Java nur Call by Value unterstützt. Der Trick ist, daß wir in Java zwischen einfachen Datentypen und en unterscheiden. Ein einfacher Datentyp ist ein Platz im Speicher, in dem der tatsächliche Wert steht. Wenn nun ein Parameter ein einfacher Datentyp ist, so wird dieser tatsächlich kopiert und als Value übergeben. Eine variable trägt als einzige Information die ID des es (was vergleichbar mit dem Speicherort oder der Adresse ist). Diese Information wird bei der Übergabe kopiert (also Call by Value ). Der aufgerufene arbeitet nun mit dieser ID weiter, welche aber auf das gleiche zeigt, wie das des Aufrufers. Strings wiederum gelten auch als e, werden aber wenn sie einmal im Speicher sind nicht mehr verändert. Jede Anpassung würde zu einer neuen ID führen. Insofern wirkt das Verhalten von Strings wie einfache Datentypen. Sehen wir uns das Ganze mal im Versuch an. Beginnen wir mit der Übergabe eines einfachen Datentyps, den wir im Unterprogramm verändern und sehen was passiert: Wenn wir den Code ausführen, dann sehen wir auf der Konsole den Wert 0. Dies liegt daran, dass die Variable als Wert übergeben worden ist die Variable ivalue des Unterprogramms ist also eine andere, als die Variable ivalue der main. Insofern wird diese auch nicht durch das Unterprogramm verändert. Aufrufende Adr. 012 Hallo Java Umsetzung Speicher Aufgerufende Adr. 012 Seite 4

Unterprogramme Sehen wir uns den gleichen Code an, bei dem jedoch die Variable als zusammengesetzter Datentyp sprich realisiert wurde. Dazu verwenden wir nun anstatt einer int Variablen ein int Array: Bei der Ausführung dieses Codes sehen wir nun, dass auf der Konsole die 1 steht. Die Variable iavalue in der main- beinhaltet nun lediglich die ID (bzw. Adresse) des s, welche an die increase weitergegeben wird. Dort wird auf genau dieser Adresse der Wert inkrementiert. Die main- liest nun wieder auf der gleichen Adresse den Wert und sieht ihn inkrementiert. Seite 5

6 Rückgabewerte In Java kann es immer nur einen Rückgabewert geben. Es ist nicht möglich, bspw. zwei int Variablen gleichzeitig zurückzugeben. Das wichtigste Schlüsselwort hierbei ist return. Dies ist die Stelle, welche den Rückgabewert festlegt: Es muss vom Programmierer sichergestellt werden, dass die auf jeden Fall ein return Statement verarbeitet. Ist dies nicht der Fall, verweigert das JDK das Compillieren! Weiterhin ist wichtig zu wissen, dass ein return Statement die Verarbeitung des Unterprogramms unterbricht. Alle folgenden Statements werden also nicht mehr ausgeführt. Sehen wir uns nun einen beispielhaften Aufruf an: Wenn die nun aufgerufen wird, erfolgt also zwingend ein return Statement und der Aufrufer erhält den Wert zurückgeliefert. Er kann somit lesend darauf zugreifen (ähnlich wie er eine Variable auslesen würde). Ich muss in meiner nun zwei Werte zurückgeben. Wie kann ich das realisieren? Antwort: Hier gibt es mehrere Möglichkeiten. Zum einen kann man mit Arrays als Rückgabewerte arbeiten, zum anderen könnte man eigene e erzeugen, welche alle notwendigen Informationen tragen (dazu müssen wir aber in die orientierung einsteigen). Die dritte Möglichkeit ist, dass man ein als Übergabeparameter festlegt. Da von diesem ja die Adresse übergeben wird, kann der Aufrufer nach dem Beenden der wieder auf das zugreifen, weshalb man sich den Rückgabedatentyp sparen kann und somit auch die return Anweisung. Das macht den Code zwar nicht unbedingt lesbarer, aber es funktioniert. Die letzte Option ist auch wieder eine Lösung innerhalb der objektorientierten Programmierung indem man mit Instanzvariablen arbeitet. All das wird aber später nochmal beim Thema orientierung behandelt. Seite 6

7 Lizenz Unterprogramme Diese(s) Werk bzw. Inhalt von Maik Aicher (www.codeconcert.de) steht unter einer Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz. Seite 7