Programmier Paradigmen
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Veränderung (letzte Änderung)
(keine anderen Diffs, Normalansicht)
Hinzugefügt: 8a9
[ Diese Seite befindet sich erst im Aufbau; ich versuche ein Refactoring -- hl]
Folgende Begriffe werden als ProgrammierParadigmen angesehen und als Attribute für ProgrammierSprachen verwendet:
- prozedural
- imperativ
- algorithmisch
- objektorientiert
- objektbasiert
- funktional
- applikativ
- algebraisch
- logisch
- prädikativ
- deklarativ
Ziele:
- Die Klärung der Begriffe
- Die Schaffung eines allgemein akzeptierten Ordnungssystems für die Paradigmen.
Auf dieser Seite soll nun eine eher konservative Lehrmeinung zum Thema widergegeben werden. Diese wird dann aber [nach und nach] eine entsprechende Differenzierung und Vertiefung erfahren.
D.h. der Beitrag hier soll lediglich der Aufhänger für eine weitergehende Diskussion und auch weiterführenden ja vielleicht sogar divergierenden Darstellungen sein.
Seiten für Detailfragen und Diskussionen:
| Vorbemerkungen / Überlegungen |  |
Es ist wichtig, zwischen
zu unterscheiden.
Unter ProgrammierParadigmen versteht man primär abstrakte Konzepte, die nur mehr oder weniger direkt (bzw. unmittelbar) von real existierenden ProgrammierSprachen "realisiert" werden.
Eine Programmiersprache kann einem Paradigma zugeordnet werden, wenn
- die entsprechende Sprachmittel zur Verfügung stellt
- die ProgrammierSprache dazu ermuntert, in dem ProgrammierStil zu programmieren, der dem entsprechenden Paradigma zugeordnet ist
Man spricht dann bei dieser Sprache von einem Vertreter dieses Paradigmas. Dabei ist es ohne weiteres möglich, dass eine Sprache mehrerer Paradigmen zugerechnet wird (werden muss, werden kann).
| Begriffe |  |
InArbeit
| Ordnungssystem |  |
Das ist eine gängige "Zusammenfassung":
- imperativ ("prozedural-imperativ")
- deklarativ
- funktional ("applikativ")
- logisch/prädikativ
- objektorientiert
| Klassifikation |  |
| In medias res |  |
Im folgenden möchte ich als eine kurze Einstimmung in das Thema eine Auswertung der Informationen, die man auf von FOLDOC findet, vornehmen:
Facts
1.) "procedural language" wird (dort) mit "imperative language" gleichgesetzt!
2.) "imperative language" (bzw. "procedural language") wird als Gegenbegriff zu "declarative language" aufgefasst.
- "Imperative (or procedural) languages specify explicit sequences of steps to follow to produce a result, while declarative languages..."
3.) Als typische "prozedurale Sprachen" werden angesehen: Basic, Pascal, C, Modula-2.
4.) Unter "declarative language" werden subsumiert: "logic programming language" bzw. "relational language" und "functional language".
- "The most common examples of declarative languages are logic programming languages such as Prolog and functional languages like Haskell."
4a) Über "relationale Sprachen" heißt es: "Relational languages specify output in terms of some property and some arguments. For example, if Tom has two brothers, Dick and Harry, a relational language will respond to the query "Who is Tom's brother?" with either Dick or Harry. Notice that unlike functional languages, relational languages do not require a unique output for each predicate/argument pair. Prolog is the best known relational language."
- Bemerkung: Offenbar ist mit "relational" hier das gemeint, was im Deutschen mit "prädikativ" wiedergegeben wird. Diese Ansicht wird auch gestützt durch einen Link auf FOLDOC, der zu einem Text führt, in dem es heißt: "Predicates (or relations)..." usw.
4b) Als typische funktionale Sprachen werden angesehen: Clean, FP, Haskell, Hope, LML, Miranda and SML. Weiters heißt es: "Many other languages such as Lisp have a subset which is purely functional but also contain non-functional constructs."
5.) "applicative language" wird kurzerhand mit "functional language" gleichgesetzt (!). Weiters heißt es dazu: "Sometimes used loosely for any declarative language though logic programming languages are declarative but not applicative."
6.) OOP wir kurz erklärt ohne Bezugnahme auf die oben beschriebenen "Paradigmen".
Conclusion
Daraus ergibt sich nun folgenden BILD:
Die Sprachen können unterschieden werden in:
- - prozedural-imperative und
- - deklarative Sprachen.
Die deklarativen Sprachen wiederum sind untergliedert, in
- - logisch/prädikative Sprachen
- - funktionale ("applikative") Sprachen
Davon unabhängig gibt es auch noch die Objektorientierung...
Wir erhalten also das Ergebnis, dass sich auf FOLDOC praktisch dieselbe Meinung wiederfindet, wie sie auch hier von mir im Rahmen der ProgrammierParadigmen/Begriffe vertreten wurde.
Dies belegt zumindest die "praktische Relevanz" einer derartigen Einteilung.
Jedoch hat die Diskussion auch gezeigt, dass diese Darstellung ZU EINFACH ist, und differenziert werden muss.
| Erste Schlussfolgerungen |  |
Aus all dem ergibt sich für mich folgendes Bild:
Die Unterscheidung in "prozedural" (oder auch "imperativ") und "deklarativ" ist üblich und wird auch häufig angetroffen im Netz (und natürlich auch sonstigen "Literatur"). "Deklarativ" wird zudem noch [mindestens] unterteilt in "logisch" und "funktional".
Wenn von Paradigmen die Rede ist, findet sich aber häufig auch noch OO als eigenes "Paradigma"...
Bsp.: "...look at xxx for examples of scheme doing OO, logic programming, and functional programming..." - bekanntlich ist ermöglicht Scheme in mehreren Stilen zu programmieren: so heißt es in der "Selbst-Charakterisierung" zu der SpracheScheme: "A wide variety of programming paradigms, including imperative, functional, and message passing styles, find convenient expression in Scheme." (Bem.: "Message passing" ist charakteristisch für OO...)
[ To be continued ]
| Diskussion |  |
Siehe /Diskussion
| Fragen |  |
Wie fügt sich AspektOrientierteProgrammierung in das Bild?
Wohin gehört SQL?
- SQL ist deklarativ: Es wird vorgegeben, was gesucht wird, nicht wie gesucht werden soll.
KategorieProgrammierSprachenKonzepte
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 22. März 2006 14:19 (diff))