ich war hier: ProzProg7ProzedurenFunktionen

Version [22696]

Dies ist eine alte Version von ProzProg7ProzedurenFunktionen erstellt von RonnyGertler am 2013-03-28 18:17:28.

 

 (image: http://wdb.fh-sm.de/uploads/QualipaktLehre/BMBF_Logo_klein.jpg)

Prozedurale Programmierung - Kapitel 7 - Prozeduren und Funktionen


Inhalte von Dr. E. Nadobnyh


Ein Unterprogramm ist ein Teil eines Programms, welches:
1) einen Namen besitzt,
2) gestartet bzw. aufgerufen werden kann.

Synonyme: Funktion, Prozedur, Subroutine, Routine, benannter Block.

Unterprogramme dienen einer strukturierten Programmierung. Einige Ziele:

a) Zerlegung eines komplexen Gesamtproblems in Teilprobleme,
b) Wiederverwendung des Codes,
c)Lesbarkeit des Codes.

Programme bestehen typischerweise aus vielen kleinen und nicht aus wenigen großen Unterprogrammen.


Ablauf


 (image: http://ife.erdaxo.de/uploads/ProzProg7ProzedurenFunktionen/pp45.gif)

Der Ablauf eines Unterprogramms erfolgt in drei Schritten:

(1) Aufruf und Sprung zum Unterprogramm.
(2) Ausführung des Unterprogramms.
(3) Rückkehr zur Anweisung nach dem Aufruf.

Achtung: Begriffsverwirrung bei Ablauf vs. Aufruf!


Aufbau eines Unterprogramms


Bei der Definition wird ein Kopf und ein Rumpf festgelegt:

 (image: http://ife.erdaxo.de/uploads/ProzProg7ProzedurenFunktionen/pp46.gif)

Der Kopf beschreibt alle Informationen, die zum Aufruf notwendig sind. Der Rumpf ist ein Block, der beim Aufruf ausgeführt wird.

Durch die Definition wird Speicherplatz belegt (für bestimmte Variablen und den Code). Unterprogrammen dürfen nur außerhalb jedes Blocks definiert werden.


Klassifikation


 (image: http://ife.erdaxo.de/uploads/ProzProg7ProzedurenFunktionen/pp47.gif)

In der Sprache C/C++ werden Unterprogramme als Funktionen und Prozeduren als „void Funktionen“ bezeichnet.


Prozeduren


Eine Prozedur ist ein Unterprogramm, welches keinen Rückgabewert zurückliefert. Der Aufruf einer Prozedur ist deswegen eine Anweisung. Eine Prozedur hat kein resulttype. In C/C++ wird der resulttype der Prozedur mit dem fiktiven leeren Datentyp void spezifiziert.

Beispiel:

 (image: http://ife.erdaxo.de/uploads/ProzProg7ProzedurenFunktionen/pp48.gif)


⇒ Demo 1. Prozedur


Funktionen


Eine Funktion ist ein Unterprogramm, welches ein Funktionsergebnis (Rückgabe, Resultat) zurückliefert.

Der Aufruf einer Funktion ist deswegen ein Ausdruck. Der Aufruf wird durch das Funktionsergebnis ersetzt.

In C/C++ wird das Funktionsergebnis mittels der Anweisung return explizit zurückgegeben. Dabei wird das Unterprogramm sofort verlassen.

Beispiel:

 (image: http://ife.erdaxo.de/uploads/ProzProg7ProzedurenFunktionen/pp49.gif)


7.2. Datenaustausch zwischen Funktionen
Aufrufende und aufgerufene Funktionen müssen untereinander Daten austauschen können. Funktionen können Daten als Operanden erhalten und können Daten als Ergebnisse zurückliefern.

Es gibt verschiedene Mechanismen für den Datenaustausch (Datentransfer) zwischen Funktionen.

Austausch-Mechanismen könnte nach der Art von Schnittstellen und nach der Datenflussrichtung klassifiziert werden.

Es gibt drei Schnittstellen für den Datenaustausch zwischen Funktionen:

1) über globale Variablen,
2) über Parameter,
3) über das Funktionsergebnis.


Datenflussrichtung


 (image: http://ife.erdaxo.de/uploads/ProzProg7ProzedurenFunktionen/pp50.gif)

1. Der Datenfluss geht in beide Richtungen. Dabei können Operanden und Ergebnisse ausgetauscht werden.

2. Der Datenfluss geht nur in eine Funktion hinein. Dabei kann eine Funktion ein Operand übernehmen.

3. Der Datenfluss geht nur aus einer Funktion heraus. Dabei kann eine Funktion ein Ergebnis zurückliefern.

Analogie: Drehkreuz


Klassifizierung von Austausch-Mechanismen


Datenflussrichtung
Schnittstelle
In die Funktion hinein Aus der Funktion heraus In beide Richtungen
Globale Variablen kein kein über globale Variablen
Parameter call-by-value kein call-by- reference
call-by-reference auf const per Zeiger
Funktionsergebnis kein per Wert kein
per Referenz
per Zeiger


In dieser Klassifikation sind 8 Austausch-Mechanismen vorgestellt.


Gültigkeitsbereiche


1. Mit Blöcken werden Gültigkeitsbereiche geschaffen.

2. Funktionen sind benannte Blöcke und mit ihnen werden auch Gültigkeitsbereiche geschaffen.

3. Der umfassende Gültigkeitsbereich wird als globaler Gültigkeitsbereich bezeichnet.

4. Funktionen dürfen nur außerhalb jedes Blocks, d.h. global definiert werden.

5. Funktionen können nicht in andere Funktionen geschachtelt werden. Sie können aber unbenannte Blöcke enthalten.

6. Unbenannte Blöcke dürfen nur in einer Funktion enthalten sein. Sie können aber ineinander geschachtelt werden.


Datenaustausch über globale Variablen


1. Variablen werden als lokal/global bezeichnet, wenn sie innerhalb/außerhalb eines Blocks definiert sind.

2. In geschachtelten Blöcken haben innere/äußere Blöcke die inneren/äußeren lokalen Variablen.

3. Innere Blöcke haben den Zugriff auf die Variablen der äußeren Blöcke. Mehrere innere Blöcke können die äußeren Variablen gemeinsam für den Datenaustausch verwenden.

4. Die globalen Variablen sind äußere Variablen für die globalen Funktionen und können als gemeinsame Variablen für den Datenaustausch verwendet werden.

Beispiel:

int a;
void f(){ cout<<a;  }  
int main() { a=5;   f();  return 0;}  


⇒ Demo 2. globale


5. Namen, die lokal vereinbart wurden, sind außerhalb der Funktion unbekannt. Somit können verschiedene Funktionen Variablen gleichen Namens verwenden, ohne dass ein Konflikt entsteht.

6. Globale Variablen werden durch lokale Variablen gleichen Namens überdeckt. Bei Verlassen des inneren Blocks ist die äußere Variable wieder sichtbar.

Eine globale Variable besitzt zwar eine Lebensdauer, die vom Programmbegin bis zum Programmende reicht, der Gültigkeitsbereich kann hingegen "Löcher" haben.

7. Nachteil von globalen Variablen: Jede Funktion hat eine Zugriffsmöglichkeit auf mehrere (alle) globale Variablen. Es besteht die Gefahr unbeabsichtigter Veränderungen globaler Werte.

⇒ Demo 3. Überdeckung















CategoryProzProg
Diese Seite wurde noch nicht kommentiert.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki