Diskussion:Imperative Programmierung

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 6. Dezember 2011 um 11:42 Uhr durch VÖRBY (Diskussion | Beiträge) (Fortsetzung Dez 2012: Zwischenantwort, Referenzen folgen). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Erste Kommentare

Ich bin absolut überzeugt, dass weder C noch Pascal imperative Programmiersprachen sind und entferne sie aus dem Artikel. Sollte es Argumente dagegen geben, lasse ich mir an dieser Stelle gern überzeugen ;) --Jon Kowal 18:07, 5. Okt 2005 (CEST)

Wie leichtsinnig... Aber man kann sich ja auch 'mal irren: [4], um nur einen zu nennen. Ansonsten hilft auch hier Google ungemein weiter. --Frank. 18:22, 5. Okt 2005 (CEST)

Befehle -> Anweisungen

Befehle sind die Arbeitsschritte eines Prozessors. Die meisten imperativen Programmiersprachen arbeiten nicht auf der Ebene von Befehlen, sondern von Anweisungen. Deswegen nannte man sie eine Weile "hoehere Programmiersprachen", bis das ein Pleonasmus wurde.

(Auch imperative Programmiersprachen haben uebrigens Deklarationen.)

Aufgrund dessen nehme ich die Sprache C wieder bei den Beispielen auf. --Freak 1.5 14:44, 26. Sep 2006 (CEST)

Erledigt; im Artikel wird nun einheitlich der Begriff 'Anweisung' verwendet. --Gms 20:31, 29. Mär. 2009 (CEST)Beantworten

Imperative Programmierung versus Prozedurale Programmierung

Meiner Meinung nach ist prozedurale Programmierung ein Spezialfall der imperativen Programmierung und nicht mit dieser identisch. Ich wollte aber die letzte Änderung von R.K.A.L. auch nicht einfach revertieren und bitte um eine Stellungnahme. Auf jeden Fall fehlt dem Artikel mindestens ein Einzelnachweis für die konkrete Definition des Begriffs. --jpp ?! 21:52, 11. Mai 2007 (CEST)Beantworten

Die Begriffe werden häufig synonym verwendet (vgl. auch http://en.wikipedia.org/wiki/Imperative_programming) aber bei differenzierter Betrachtung würde ich die Prozedurale Programmierung als einen charakteristischen Aspekt der Imperativen Programmierung auffassen. --R.K.A.L. 23:32, 11. Mai 2007 (CEST)Beantworten
Also ist beides nicht synonym. Dann baue ich mal wieder den Verweis auf den anderen Artikel ein. --jpp ?! 14:12, 12. Mai 2007 (CEST)Beantworten
ok--R.K.A.L. 14:56, 12. Mai 2007 (CEST)Beantworten

Fortsetzung Dez 2012

Dieser Disk-Beitrag geht zurück auf die 'Mega-Diskussion' unter Prozedurale Programmierung, die bereits zum zweiten Mal erfolglos, weil ohne Konsens, abgebrochen wurde. Dabei wurde aus meiner Sicht folgender Status erreicht:

  • Der Begriff 'prozedurale Programmierung' wird in den Medien mit zwei verschiedenen Bedeutungen behandelt.
  • Eine davon (= programmieren mit Prozeduren; in der Disk. pP1 genannt) wird im gleichnamigen Artikel von Wikipedia beschrieben.
  • Die andere, umfassendere Definition (pP2) gilt nach verschiedenen Quellen als Synonym für 'imperative Programmierung' .
  • Die Merkmale dieser pP2-Bedeutung sind bisher aber weder im Artikel iP noch in pP umfassend beschrieben und nicht mit Quellen belegt.

Deshalb sollte 'iP' um die entsprechenden Angaben ergänzt werden. In beiden Artikeln sollte darauf hingewiesen werden, dass dieser Ausdruck 'prozedural' jeweils auch im anderen Sinn gebraucht wird.

Demnach wäre pP (nach der pP2-Interpretation) doch wieder Synonym zu iP - im Gegensatz zu den obigen Feststellungen - in denen ja nicht definiert wurde, was man darunter versteht. Leider ist die Quellenlage sehr heterogen. Da kann man in WP nichts anderes tun, als explizit auf solche Unterschiede hinzuweisen.

Ich stelle deshalb zunächst und unter der Annahme, dass der 'Synonym'-Sachverhalt zutrifft, temporär HIER den neuen Text ein, der auf den genannten Referenzen basiert.

Kommentarabschnitt aktualisiert: --VÖRBY 11:41, 5. Dez. 2011 (CET)Beantworten

Neuer Text

(Einrückungen etc. bei Übernahme in den Artikel entsprechend anpassen)

EINLEITUNG:

Imperative Programmierung ist ein Programmierparadigma. Danach „besteht ein [Quell-] Programm aus einer Folge von Befehlen, die vorgeben, in welcher Reihenfolge was vom Computer getan werden soll “[1].

Die imperative Programmierung ist das bekannteste Programmierparadigma. Diese Vorgehensweise war, bedingt durch den Sprachumfang früher Programmiersprachen, ehemals die klassische Art des Programmierens und wird heute noch praktiziert. Sie liegt zum Beispiel dem Entwurf von ALGOL, Fortran, Pascal, ADA, PL/I, C und allen Assemblersprachen zugrunde (nach [1]).

Das dem imperativen Paradigma zugrunde liegende abstrakte Ausführungsmodell ist nah verwandt mit der Ausführung von Maschinencode auf einem konkreten Computer, der die vorherrschende Von-Neumann-Architektur implementiert. Es existieren beispielsweise bedingte und unbedingte Sprunganweisungen. Der Status des Rechners setzt sich aus dem Arbeitsspeicherinhalt und dem Zustand von Systemvariablen (z. B. Register, Befehlszähler ...) zusammen.

Abweichende Bezeichnungen: In der Literatur wird diese Vorgehensweise zum Teil auch 'imperativ/prozedural', 'algoritrhmisch' oder 'prozedural' genannt. Der Ausdruck 'prozedurale Programmierung' wird jedoch zum Teil auch mit einer abweichenden Bedeutung benutzt, nämlich (siehe Prozedurale Programmierung) als Programmieren unter Verwendung von Prozeduren (was in [1] auch 'strukturiertes, prozedurales Programmieren' genannt wird).

DETAILS (Merkmale)

Die besonderen Merkmale dieser Art des Programmierens sind (nach [2] und [3]):

  • Im Quellcode wird festgelegt, was in welcher Reihenfolge und wie zu tun ist: „First do this and next do that“[2] = schrittweises 'Fortschreiten' der Befehle; „viewed as sequence of things to be done“[3] = dargestellt als Folge von Anweisungen).
  • Der Entwickler verwendet Kontrollstrukturen (z. B. Sequenz, Schleife, Verzweigung) zur Steuerung der Befehlsausführung.

Ebenfalls als tpyisch für diese Art des imperativen/prozeduralen Programmierens, aber nicht ausschließlich dort angewendet, gelten die nachfolgenden Merkmale (nach [2], [3]):

  • Die Aufgabenstellung wird im Wesentlichen durch Bilden von Prozeduren, Funktionen oder Subroutinen implementiert (Konzept der Abstraktion. Dabei entsteht eine Hierarchie von Funktionen, die in ihrer Gruppierung nach beliebigen logischen Prinzipien gebildet werden kann. Der Startpunkt des Programms liegt in der Hauptprozedur - von der aus die Teilfunktionen aufgerufen werden. Bestimmte Befehle unterstützen das Durchleiten und die Rückgabe von Parameterwerten.
  • Datenwerte werden als benannte Variablen definiert und über ihre Namen angesprochen" [2], sie werden von den Funktionen verändert und transformiert, Zugriff ist grundsätzlich von allen Anweisungen des Programms aus möglich[3].
  • Diesen Variablen sind Datentypen zugeordnet, die jeweils nur bestimmte Instruktionen erlauben.
  • Der Quelltext wird durch Compilierung und Einbindung zusätzlicher Funktionskomponenten (sprach- und/oder aufgabenspezifisch) zum ausführbaren Programm.

ABGRENZUNG:

Als Gegensatz zur imperativen Programmierung wird das Paradigma Deklarative Programmierung verstanden. Darin wird beschrieben, was das Programm erarbeiten/berechnen soll, aber nicht wie.

Wesentliche Unterschiede bestehen zum Beispiel auch zur objektorientierten Programmierung, wo die Anweisungen und der Code nach Objekten zusammengefasst sind. Das Prinzip der Datenkapselung (Information Hiding) wird in imperativen Sprachen oft dadurch umgesetzt, dass Prozeduren, die eine logische Einheit bilden, in Modulen oder Paketen zusammengefasst werden. Bei der ereignisorientieren Programmierung wird die Reihenfolge der Verarbeitung vom Eintritt gewisser (externer) Ereignisse gesteuert.

Einige imperative Programmiersprachen wie z. B. C++ und Java bieten neben imperativen/prozeduralen Merkmalen auch zusätzliche Sprachmittel, um andere Prinzipien wie z. B. die objektorientierte Programmierung zu unterstützen.

Bei der physischen Ausführung von Computerprogrammen (im Prozessor) werden die einzelnen Befehle (= Maschinenbefehle) immer, unabhängig vom praktizierten Paradigma, 'Befehl für Befehl' ausgeführt. In nicht vollständig imperativ/prozedural entwickelten Anwendungen sind dabei einzelne Programmteile übergeordneten Komponenten der Systemsoftware unterstellt, die die codierten Anweisungen zum Beispiel in Maschinenbefehle umwandelt (etwa bei SQL-Kommandos das DBMS) oder den Code abhängig vom Eintritt bestimmter Ereignisse (gesteuert vom Eventhandler) ausführt. Die Paradigma-Zuordnung gilt insofern jeweils nur für den Quelltext von Programmen.

Referenzen (ebenfalls temporär):

  1. a b c Grundkurs IT-Berufe (Vieweg-Verlag) Böhm/Jungkunz [1]
  2. a b c d JAVA AND OBJECT-ORIENTED PROGRAMMING PARADIGM [2]
  3. a b c d Programming Paradigms and Methodology[3]

Diskussion darüber

Abweichende Bezeichnungen: In der Literatur wird diese Vorgehensweise zum Teil auch 'imperativ/prozedural', 'algoritrhmisch' oder 'prozedural' genannt Wo wird die imperative Vorgehensweise prozedural genannt? (in [1] und [2])
Ebenfalls als tpyisch für diese Art des imperativen/prozeduralen Programmierens, aber nicht ausschließlich dort angewendet, gelten die nachfolgenden Merkmale... Quatsch, wenn es dir bei prozeduraler Programmierung nicht gelingt willst du es hier probieren? Was imperativ bedeutet ist glasklar belegt; du musst es halt mal irgendwann akzeptieren. was passt da nicht? alles geht auf die genannten Quellen zurück.
Wesentliche Unterschiede bestehen zum Beispiel auch zur objektorientierten Programmierung, wo die Anweisungen und der Code nach Objekten zusammengefasst sind. Quatsch. Ein Programm welches auf Benutzereingabe wartet soll auf einmal nicht imperativ sein. Da verwechselst du wieder Stapelverarbeitung und Dialogverarbeitung. Auch hier rate ich dir mal die Literatur richtig zu lesen. was hat das mit Benutzereingabe zu tun? Das Merkmal (Daten/Funktionen) hast doch auch du für OOP hervorgehoben. Außerdem: Dies ist keine 'Gegenteil-Aussage' mehr.
Als Gegensatz zur imperativen Programmierung wird das Paradigma Deklarative Programmierung verstanden. Darin wird beschrieben, was das Programm erarbeiten/berechnen soll, aber nicht wie. Wesentliche Unterschiede bestehen zum Beispiel auch zur objektorientierten Programmierung, wo die Anweisungen und der Code nach Objekten zusammengefasst sind Da merkt man dass es schon mal logisch nicht stimmt. Es gibt entweder imperativ oder deklarativ; auf der Stufe gibt es nichts anderes. Das sind elementarste Grundlagen der Informatik. deklarativ: 'entweder/oder' bedeutet in Deutsch dasselbe wie 'Gegensatz'.
... oder den Code abhängig vom Eintritt bestimmter Ereignisse (gesteuert vom Eventhandler) ausführt. Die Paradigma-Zuordnung gilt insofern jeweils nur für den Quelltext von Programmen.. Ist es wirklich dein ernst? Das ist ja was fürs Humorarchiv. was soll da nicht mein Ernst sein? Es geht um 'Programmieren' - und da ist der Quellcode das Subjekt, für den das Paradigma (bzw. mehrere) gilt.
Du wechselst munter die Ebenen, Programmierung und Software, verwechselst ereignisorientierte Progammierung mit Dialogverarbeitung, verwechselst imperative und objektorientierte Programmierung, mischst noch kräftig prozedurale Programmierung darunter und schüttelst kräftig alles um dass es einem schlecht wird. Auf diesem Niveau kann man nicht diskutieren. Wenn du diesen Artikel in diese private Theorie-Richtung änderst, werde ich ihn revertieren. --Avron 20:43, 5. Dez. 2011 (CET)Beantworten

Danke gleichfalls: Ich habe Antworten zu deinen Anmerkungen oben small eingesetzt und werde in meinem Text noch weitere Quellenreferenzen anlegen. Wenn du was nicht akzeptierst, musst du schon sagen, welche Aussage (aus welcher Quelle) du für nicht korrekt hältst.

Ich denke, dass du es bist, der bestimmte Dinge nur 'eindimensional' sieht, d.h.: Du berücksichtigst nicht, dass ein Paradigma einfach nur ein Stil ist, der sich durch bestimmte Merkmale auszeichnet, dass diese Merkmale und damit der Stil von mehreren Sprachen unterstützt werden können - und vor allem, dass die einzelne Programmiersprache und Entwicklungsumgebung damit mehreren Paradigmen entsprechen kann (weil eben deren Merkmale unterstützt werden). Und genau deshalb kann ein Programm auch mehreren Paradigmen gleichzeitig entsprechen. Wir sollten hier nicht Sprachen beschreiben, sondern nur jeweils das Paradigma. Dass in der Literatur diesbezüglich auch Ausdrücke und ihre Inhalte unterschiedlich oder synonym gebraucht werden, müssen wir auch akzeptieren - und nicht auf einem Standpunkt beharren, sondern sachlich darauf hinweisen. --VÖRBY 10:42, 6. Dez. 2011 (CET)Beantworten

Verständlichkeit des Artikels

Der Artikel ist verständlich, aber ihm fehlt die Anschaulichkeit. Es wäre gut, wenn jemand an einem Beispiel verdeutlichen könnte, was imperativ in Bezug auf eine Programmiersprache heißt. --Jan Mathys 18:21, 17. Dez. 2008 (CET)Beantworten

Erledigt; ich habe ein Beispiel ergaenzt. --Gms 20:32, 29. Mär. 2009 (CEST)Beantworten

Änderung an der Geschichte

Plankalkül ist die älteste hohe Programmiersprache und nicht Fortran !! Fortran ist die älteste "NOCH IM GEBRAUCH" befindliche hohe Programmiersprache, nicht die Älteste ! (nicht signierter Beitrag von 84.175.199.252 (Diskussion) 15:23, 21. Sep. 2010 (CEST)) Beantworten

Etymologie

Der erste Bestandteil des Lemmas leitet sich vermutlich vom lateinischen imperare ab, was „befehlen“, „beherrschen“, „gebieten“, „herrschen“ bedeuten kann. Ich bin mir nicht sicher, habe auch keine mögliche Quelle. Allerdings könnte ein plumpes „befehlen“ richtig sein, schließlich ist die programmiererische Anweisung eine Art von Befehl. Die erklärende, etymologische Angabe wirkt ergänzend und hilft oft beim raschen Verständnis. Könnte man also mal andenken. -- Gohnarch 23:43, 9. Mär. 2011 (CET)Beantworten

  1. Referenzfehler: Ungültiges <ref>-Tag; kein Text angegeben für Einzelnachweis mit dem Namen PD.
  2. Referenzfehler: Ungültiges <ref>-Tag; kein Text angegeben für Einzelnachweis mit dem Namen PPM.