„Prozedur (Programmierung)“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
S.K. (Diskussion | Beiträge) K →Einzelnachweise: -Falsche Interwikis :-( |
Linkvorschlag-Funktion: 2 Links hinzugefügt. |
||
(29 dazwischenliegende Versionen von 21 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
'''Prozedur''' ist ein Begriff aus der [[Programmierung]] von [[Computer]]systemen. Im Allgemeinen versteht man darunter eine Variante zum Begriff „[[Unterprogramm]]“: Die [[Anweisung (Programmierung)|Anweisungen]] einer Prozedur können über ihre Benennung aufgerufen und dadurch [[Wiederverwendbarkeit|mehrfach verwendet]] werden. |
|||
Man unterscheidet eigentlich |
|||
* offene Prozedur ([[Makro]]) |
|||
* geschlossene Prozedur ([[Unterprogramm]]) |
|||
Sowohl in der Theorie als auch in manchen [[Programmiersprache]]n wird unter Prozedur bzw. procedure einschränkend wie auch im Folgenden speziell ein [[Unterprogramm]] verstanden. |
|||
== Terminologie und Details unterschiedlich == |
|||
⚫ | |||
Je nach [[Programmiersprache]] und [[Programmierparadigma]] gibt es Unterschiede in der Definition des Begriffs ''Prozedur'' und zur Abgrenzung zum Begriff der ''Funktion''. |
|||
⚫ | [[Fortran|FORTRAN77]] beispielsweise fasst unter ''procedures'' Funktionen und prozedurale Unterprogramme (''subroutines'') zusammen.<ref>{{Internetquelle |url=http://www.fortran.com/F77_std/rjcnf0001-sh-15.html#sh-15 |titel=FORTRAN77-Standard, Kap. 15 |hrsg=fortran.com |sprache=en |offline=1 |archiv-url=https://web.archive.org/web/20100124143401/http://www.fortran.com/F77_std/rjcnf0001-sh-15.html#sh-15 |archiv-datum=2010-01-24 |archiv-bot= |abruf=2010-09-20}}</ref> |
||
⚫ | Im Allgemeinen kann eine Prozedur [[Parameter (Informatik)|Aufrufparameter]] besitzen und auch die Werte von [[Variable (Programmierung)|Variablen]] ändern. Man unterscheidet hier zwischen lokalen (nur innerhalb der Prozedur gültigen und von außen nicht beeinflussbaren) und globalen (außerhalb der Prozedur deklarierten) Variablen. Das Ändern globaler Variablen innerhalb einer Prozedur kann die Übersichtlichkeit des Programms beeinträchtigen und die Fehlersuche erschweren. |
||
⚫ | In der [[Terminologie]] des C-Standards ist jedwedes Unterprogramm eine Funktion, unabhängig davon, ob ein Wert zurückgeliefert wird.<ref>{{Internetquelle |url=http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf |titel=C99-Standard |hrsg=open-std.org |format=PDF; 3,8 MB |sprache=en |abruf=2010-09-12 |kommentar=nicht-normatives Arbeitsdokument}}</ref> |
||
⚫ | |||
== Terminologie == |
|||
⚫ | |||
⚫ | In der Terminologie des C-Standards ist jedwedes Unterprogramm eine Funktion, unabhängig davon, ob ein Wert zurückgeliefert wird.<ref>{{Internetquelle | |
||
In der [[Objektorientierte Programmierung|objektorientierten Programmierung]] werden beide Konzepte oft unter dem Sammelbegriff [[Methode (Programmierung)|Methode]] zusammengefasst. |
In der [[Objektorientierte Programmierung|objektorientierten Programmierung]] werden beide Konzepte oft unter dem Sammelbegriff [[Methode (Programmierung)|Methode]] zusammengefasst. |
||
⚫ | Nach<ref>{{Internetquelle |url=http://www.gdv.informatik.uni-frankfurt.de/lehre/ws2005/PRG1/Folien/V07-Prozeduren-Funktionen-Methoden.pdf |titel=Prozeduren-Funktionen-Methoden |hrsg=uni-frankfurt.de |format=PDF; 309 kB |abruf=2015-12-01}}</ref><ref>{{Internetquelle |url=http://www.uni-koeln.de/rrzk/kurse/unterlagen/java/javaref/funcs/index.htm |titel=Prozedurale Abstraktion, Funktionen |hrsg=uni-koeln.de |abruf=2010-09-20}}</ref> liefert eine Prozedur im Unterschied zur [[Funktion (Programmierung)|Funktion]] (die genau einen Rückgabewert als ''direktes'' Ergebnis liefert) ihre Ergebnisse nur ''indirekt'' (über interne Variablen oder über [[Referenzparameter]] im rufenden Programm). |
||
== Prozedur als Unterprogramm == |
|||
In der Programmierung tritt immer wieder der Fall auf, dass sich bestimmte Programmabschnitte wiederholen. Statt den Codeabschnitt jedes Mal zu kopieren, legt man ihn nur einmal an, versieht in mit einem Namen und ruft ihn an anderer Stelle über diesen Namen auf. Zur Laufzeit wird dann der betreffende Abschnitt durchlaufen. Einige Programmiersprachen (z. B. [[Pascal (Programmiersprache)|Pascal]]) unterscheiden bei der Deklaration explizit zwischen Funktion (mit Rückgabewert) und Prozedur (ohne Rückgabewert). In anderen Sprachen werden Prozeduren einfach als Funktionen oder Methoden ohne Rückgabewert realisiert. Im Gegensatz zur „reinen“ Funktion, deren einziger Effekt das nebenwirkungsfreie Liefern eines Wertes ist (z. B. Quadratwurzel einer Zahl), sind Prozeduren gerade wegen ihrer [[Wirkung (Informatik)|Nebeneffekte]] interessant, beispielsweise der Änderung von Speicherinhalten oder Ausgabeoperationen. |
|||
⚫ | Im Allgemeinen kann eine Prozedur [[Parameter (Informatik)|Aufrufparameter]] besitzen und auch die Werte von [[Variable (Programmierung)|Variablen]] ändern bzw. dort Ergebnisse abstellen, beispielsweise einen Antwortcode. Man unterscheidet hier zwischen lokalen (nur innerhalb der Prozedur gültigen und von außen nicht beeinflussbaren) und globalen (außerhalb der Prozedur deklarierten) Variablen. Das Ändern globaler Variablen innerhalb einer Prozedur kann die Übersichtlichkeit des Programms beeinträchtigen und die Fehlersuche erschweren. |
||
== Entwicklung == |
|||
In frühen [[Imperative Programmierung|imperativen Programmiersprachen]] (zum Beispiel frühe [[BASIC]]- und [[Fortran|FORTRAN]]-Varianten) gab es nur das Konzept des parameterlosen Unterprogramms, welches über [[Sprunganweisung]]en aufgerufen wurde und ausschließlich über globale Variablen mit dem Hauptprogramm wechselwirken konnte. |
|||
⚫ | |||
Mit dem Aufkommen der [[Strukturierte Programmierung|strukturierten Programmierung]] entwickelte sich das Konzept der Prozedur mit Aufrufparametern, die zunächst überwiegend als [[Referenzparameter]] übergeben wurden (''call-by-reference''), das heißt eine Änderung des Parameters innerhalb der Prozedur ändert den zugehörigen Parameter an der Aufrufstelle der Prozedur. Die Einführung von expliziten Rückgabewerten von Prozeduren (respektive Funktionen) ermöglichte die Berechnung von Resultaten, ohne die Referenzparameter zu verändern. |
|||
''Abweichende Bedeutungen:'' In [[COBOL]] sind Prozeduren lediglich die in der ‚Procedure Division‘ formulierten, durch ‚Paragraphen‘ benennbaren Anweisungen (Befehle), unabhängig davon, ob sie als [[Unterroutine]] verwendet werden oder nicht. Auch in [[PL/I]] bezeichnet man die im Befehlsteil des [[Quelltext]]es enthaltenen – prozedural (= ‚fortschreitend‘) zu verarbeitenden – Anweisungen als „Prozeduren“. |
|||
In einem weiteren Schritt wurden [[Wertparameter]] zur Übergabe an Prozeduren eingeführt (''call-by-value''), um unerwünschte Rückwirkungen auf das Hauptprogramm weiter zu reduzieren. |
|||
Zur Vermeidung von [[Programmfehler]]n wurde in einigen Programmiersprachen wie zum Beispiel [[Pascal (Programmiersprache)|Pascal]] eine [[starke Typisierung]] von Parametern eingeführt: die tatsächlich verwendeten Parameter müssen hierbei relativ streng [[Zuweisungskompatibilität|zuweisungskompatibel]] mit den formal deklarierten Parametern sein. |
|||
In Programmiersprachen wie [[Modula-2]] können Prozedurvariablen aufgerufen oder als Parameter eingesetzt werden. |
|||
Schließlich wurden Prozeduren als objektbezogene ''Methoden'' oder ''Zugriffsfunktionen'' Bestandteil des [[Objektorientierte Programmierung|objektorientierten Paradigmas]], etwa in den Programmiersprachen [[Java (Programmiersprache)|Java]] und [[C++]]. |
|||
== Beispiele == |
== Beispiele == |
||
<!-- Ob die Codebeispiele hier das Wesen einer 'Prozedur' erläutern können??? --> |
|||
Die folgenden Beispiele definieren jeweils eine Prozedur zum Zeichnen einer Linie mit ''anzahl'' Punkten. |
Die folgenden Beispiele definieren jeweils eine Prozedur zum Zeichnen einer Linie mit ''anzahl'' Punkten. |
||
Zeile 39: | Zeile 24: | ||
Beispiel einer Prozedur in [[Pascal (Programmiersprache)|Pascal]]: |
Beispiel einer Prozedur in [[Pascal (Programmiersprache)|Pascal]]: |
||
<syntaxhighlight lang=pascal> |
<syntaxhighlight lang="pascal"> |
||
procedure PunkteZeichnen(anzahl: Integer); |
|||
var |
|||
VAR |
|||
i:Integer; |
i: Integer; |
||
begin |
|||
BEGIN |
|||
for i := 1 to anzahl do |
|||
Write('.'); |
|||
end; |
|||
Write('.'); |
|||
⚫ | |||
END; |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
Beispiel eines Prozeduraufrufs in Pascal: |
Beispiel eines Prozeduraufrufs in Pascal: |
||
<syntaxhighlight lang=pascal> |
<syntaxhighlight lang="pascal"> |
||
PunkteZeichnen(5); |
|||
Punkte_zeichnen(5); |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
=== BASIC === |
=== BASIC === |
||
Realisierung einer Prozedur in einer modernen [[BASIC]]-Variante (Subroutine ohne Rückgabewert): |
Realisierung einer Prozedur in einer modernen [[BASIC]]-Variante (Subroutine ohne Rückgabewert): |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="vbscript"> |
||
public sub PunkteZeichnen(anzahl as Integer) |
|||
for i as Integer = 1 to anzahl |
|||
Debug.print |
Debug.print(".") |
||
next i |
|||
end sub |
|||
End Sub |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
Beispiel eines Methodenaufrufes in Basic: |
Beispiel eines Methodenaufrufes in Basic: |
||
<syntaxhighlight lang= |
<syntaxhighlight lang="vbscript"> |
||
call PunkteZeichnen(5) |
|||
Call Punkte_zeichnen(5) |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
=== C === |
=== C === |
||
Realisierung einer Prozedur in [[C (Programmiersprache)|C]]. Das Schlüsselwort <code>void</code> legt fest, dass die Funktion keinen Rückgabewert liefert: |
Realisierung einer Prozedur in [[C (Programmiersprache)|C]]. Das Schlüsselwort <code>void</code> legt fest, dass die Funktion keinen Rückgabewert liefert: |
||
<syntaxhighlight lang=c> |
<syntaxhighlight lang="c"> |
||
void punkte_zeichnen(int anzahl) { |
|||
for (int i = 0; i < anzahl; |
for (int i = 0; i < anzahl; ++i) |
||
putchar('.'); |
putchar('.'); |
||
} |
|||
} |
|||
} |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
Beispiel eines Funktionsaufrufs in C: |
Beispiel eines Funktionsaufrufs in C: |
||
<syntaxhighlight lang=c> |
<syntaxhighlight lang="c"> |
||
punkte_zeichnen(5); |
|||
Punkte_zeichnen(5); |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
=== Java === |
=== Java === |
||
Realisierung einer Prozedur in [[Java (Programmiersprache)|Java]] (Methode ohne Rückgabewert): |
Realisierung einer Prozedur in [[Java (Programmiersprache)|Java]] (Methode ohne Rückgabewert): |
||
<syntaxhighlight lang=java> |
<syntaxhighlight lang="java"> |
||
public class Beispiel { |
|||
public static void punkteZeichnen(int anzahl) { |
|||
for (int i = 0; i < anzahl; ++i) |
|||
System.out.print ("."); |
System.out.print ("."); |
||
} |
} |
||
} |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
Beispiel eines Methodenaufrufs in Java: |
Beispiel eines Methodenaufrufs in Java: |
||
<syntaxhighlight lang=java> |
<syntaxhighlight lang="java"> |
||
Beispiel.punkteZeichnen(5); |
|||
</syntaxhighlight> |
|||
=== Go === |
|||
Realisierung einer Prozedur in Google [[Go (Programmiersprache)|Go]]: |
|||
<syntaxhighlight lang="go"> |
|||
func punkteZeichnen(anzahl int) { |
|||
for i:=0; i<anzahl; i++ { |
|||
fmt.Print(".") |
|||
⚫ | |||
} |
|||
</syntaxhighlight> |
|||
Beispiel eines Methodenaufrufs in Go: |
|||
<syntaxhighlight lang="go"> |
|||
punkteZeichnen(5) |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||
Zeile 104: | Zeile 101: | ||
[[Kategorie:Unterprogramm]] |
[[Kategorie:Unterprogramm]] |
||
[[Kategorie:Programmiersprachelement]] |
[[Kategorie:Programmiersprachelement]] |
||
[[fr:Procédure (informatique)]] |
Aktuelle Version vom 26. September 2024, 14:26 Uhr
Prozedur ist ein Begriff aus der Programmierung von Computersystemen. Im Allgemeinen versteht man darunter eine Variante zum Begriff „Unterprogramm“: Die Anweisungen einer Prozedur können über ihre Benennung aufgerufen und dadurch mehrfach verwendet werden.
Terminologie und Details unterschiedlich
[Bearbeiten | Quelltext bearbeiten]Je nach Programmiersprache und Programmierparadigma gibt es Unterschiede in der Definition des Begriffs Prozedur und zur Abgrenzung zum Begriff der Funktion.
FORTRAN77 beispielsweise fasst unter procedures Funktionen und prozedurale Unterprogramme (subroutines) zusammen.[1] In der Terminologie des C-Standards ist jedwedes Unterprogramm eine Funktion, unabhängig davon, ob ein Wert zurückgeliefert wird.[2] In der objektorientierten Programmierung werden beide Konzepte oft unter dem Sammelbegriff Methode zusammengefasst.
Nach[3][4] liefert eine Prozedur im Unterschied zur Funktion (die genau einen Rückgabewert als direktes Ergebnis liefert) ihre Ergebnisse nur indirekt (über interne Variablen oder über Referenzparameter im rufenden Programm).
Im Allgemeinen kann eine Prozedur Aufrufparameter besitzen und auch die Werte von Variablen ändern bzw. dort Ergebnisse abstellen, beispielsweise einen Antwortcode. Man unterscheidet hier zwischen lokalen (nur innerhalb der Prozedur gültigen und von außen nicht beeinflussbaren) und globalen (außerhalb der Prozedur deklarierten) Variablen. Das Ändern globaler Variablen innerhalb einer Prozedur kann die Übersichtlichkeit des Programms beeinträchtigen und die Fehlersuche erschweren.
Ebenfalls sprachenabhängig können Prozeduren wie Funktionen in Programmbibliotheken zusammengestellt werden. Hierdurch besteht die Möglichkeit, eine Prozedur aus separaten Programmmodulen oder auch aus anderen Programmen heraus aufzurufen.
Abweichende Bedeutungen: In COBOL sind Prozeduren lediglich die in der ‚Procedure Division‘ formulierten, durch ‚Paragraphen‘ benennbaren Anweisungen (Befehle), unabhängig davon, ob sie als Unterroutine verwendet werden oder nicht. Auch in PL/I bezeichnet man die im Befehlsteil des Quelltextes enthaltenen – prozedural (= ‚fortschreitend‘) zu verarbeitenden – Anweisungen als „Prozeduren“.
Beispiele
[Bearbeiten | Quelltext bearbeiten]Die folgenden Beispiele definieren jeweils eine Prozedur zum Zeichnen einer Linie mit anzahl Punkten.
Pascal
[Bearbeiten | Quelltext bearbeiten]In der Programmiersprache Pascal, die Prozeduren explizit als Sprachelement verwendet, gibt eine Prozedur im Gegensatz zu einer Funktion definitionsgemäß keinen Wert zurück:
Beispiel einer Prozedur in Pascal:
procedure PunkteZeichnen(anzahl: Integer);
var
i: Integer;
begin
for i := 1 to anzahl do
Write('.');
end;
Beispiel eines Prozeduraufrufs in Pascal:
PunkteZeichnen(5);
BASIC
[Bearbeiten | Quelltext bearbeiten]Realisierung einer Prozedur in einer modernen BASIC-Variante (Subroutine ohne Rückgabewert):
public sub PunkteZeichnen(anzahl as Integer)
for i as Integer = 1 to anzahl
Debug.print(".")
next i
end sub
Beispiel eines Methodenaufrufes in Basic:
call PunkteZeichnen(5)
Realisierung einer Prozedur in C. Das Schlüsselwort void
legt fest, dass die Funktion keinen Rückgabewert liefert:
void punkte_zeichnen(int anzahl) {
for (int i = 0; i < anzahl; ++i)
putchar('.');
}
Beispiel eines Funktionsaufrufs in C:
punkte_zeichnen(5);
Java
[Bearbeiten | Quelltext bearbeiten]Realisierung einer Prozedur in Java (Methode ohne Rückgabewert):
public class Beispiel {
public static void punkteZeichnen(int anzahl) {
for (int i = 0; i < anzahl; ++i)
System.out.print (".");
}
}
Beispiel eines Methodenaufrufs in Java:
Beispiel.punkteZeichnen(5);
Realisierung einer Prozedur in Google Go:
func punkteZeichnen(anzahl int) {
for i:=0; i<anzahl; i++ {
fmt.Print(".")
}
}
Beispiel eines Methodenaufrufs in Go:
punkteZeichnen(5)
Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ FORTRAN77-Standard, Kap. 15. fortran.com, archiviert vom (nicht mehr online verfügbar) am 24. Januar 2010; abgerufen am 20. September 2010 (englisch).
- ↑ C99-Standard. (PDF; 3,8 MB) open-std.org, abgerufen am 12. September 2010 (englisch, nicht-normatives Arbeitsdokument).
- ↑ Prozeduren-Funktionen-Methoden. (PDF; 309 kB) uni-frankfurt.de, abgerufen am 1. Dezember 2015.
- ↑ Prozedurale Abstraktion, Funktionen. uni-koeln.de, abgerufen am 20. September 2010.