www.wikidata.de-de.nina.az
Ein Programmierparadigma ist ein fundamentaler Programmierstil 1 Der Programmierung liegen je nach Design der einzelnen Programmiersprache verschiedene Prinzipien zugrunde Diese sollen den Entwickler bei der Erstellung von gutem Code unterstutzen in manchen Fallen sogar zu einer bestimmten Herangehensweise bei der Losung von Problemen zwingen 2 Programmierparadigmen unterscheiden sich durch ihre Konzepte fur die Reprasentation von statischen wie beispielsweise Objekte Methoden Variablen Konstanten und dynamischen wie beispielsweise Zuweisungen Kontrollfluss Datenfluss Programmelementen Grundlegend fur den Entwurf von Programmiersprachen sind die Paradigmen der imperativen und der deklarativen Programmierung Beim letzteren sind als wichtige Auspragungen die Paradigmen der funktionalen Programmierung und der logischen Programmierung zu nennen Die verschiedenen Paradigmen sind bezogen auf einzelne Computerprogramme nicht als konkurrierende bzw alternative Programmierstile zu verstehen Vielmehr konnen viele Programmiersprachen mehrere Paradigmen gleichzeitig unterstutzen 3 Beispiel In einer unter MS Access und mit VBA entwickelten Anwendung sind die funktionalen Komponenten ereignis und objektorientiert angelegt Bsp beim Offnen von Formular X Der VBA Code ist strukturiert modular prozedural denn er besteht aus Modulen Makros Prozeduren etc und er ist gleichzeitig imperativ weil er Befehle enthalt die innerhalb der Prozeduren exakt in der codierten Folge ausgefuhrt werden Formulare und Berichte sowie die SQL Aufrufe sind deklarativ weil der Entwickler hier nur das WAS und nicht das WIE festlegt Trotzdem werden Programmiersprachen haufig nach ihrer Grund Charakteristik z B als objektorientierte prozedurale oder deklarative Sprache bezeichnet Die ein Paradigma bestimmenden Merkmale beruhen uberwiegend auf den Eigenschaften der angewendeten Programmiersprachen wie z B bei OOP deklarativ zum Teil aber auch auf dem individuellen Stil der beim Programmieren praktiziert wird z B strukturiert modular Oft kann an den Burgern erster Klasse First Class Citizens FCCs einer Programmiersprache also den Formen von Daten die direkt verwendet werden konnen erkannt werden welchem Paradigma die Sprache gehorcht In Java objektorientiert zum Beispiel sind Objekte FCCs in Lisp ist jedes Stuck Programm FCC in Perl sind es Zeichenketten Arrays und Hashes Neben den Programmierparadigmen gibt es noch eine Reihe weiterer Kriterien fur die Entwicklung einer moglichst fehlerfreien und wartbaren Software wie zum Beispiel Lesbarkeit des Programmcodes Redundanzfreiheit Modularitat und Nebenwirkungsfreiheit Diese sollten unter jedem Paradigma so weit wie moglich eingehalten werden Siehe auch Programmierstil Inhaltsverzeichnis 1 Imperative Programmierung 1 1 Strukturierte Programmierung 1 2 Prozedurale Programmierung 1 3 Modulare Programmierung 1 4 Programmierung mit abstrakten Datentypen 2 Deklarative Programmierparadigmen 2 1 Funktionale Programmierung 2 2 Logische Programmierung 2 3 Constraintprogrammierung 3 Objektorientierte Programmierparadigmen 4 Komponentenorientierte Programmierparadigmen 5 Agentenorientierte Programmierung 6 Aspektorientierte Programmierung 7 Generative Programmierung 8 Generische Programmierung 9 Datenstromorientierte Programmierung 10 Graphersetzung 11 Konkatenative Programmierung 12 Multiparadigmatische Programmierung 13 Weblinks 14 Literatur 15 EinzelnachweiseImperative Programmierung Bearbeiten Hauptartikel Imperative Programmierung Bei der imperativen Programmierung besteht ein Programm Anm d h hier der Quellcode aus einer Folge von Befehlen die vorgeben in welcher Reihenfolge was vom Computer getan werden soll 2 Die Bezeichnung basiert auf lateinisch imperare anordnen befehlen Die meisten Programmiersprachen darunter auch OOP Sprachen wie C Visual Basic C und Java unterstutzen in erster Linie auch die imperative Programmierung 3 Strukturierte Programmierung Bearbeiten Hauptartikel Strukturierte Programmierung Eine Weiterentwicklung imperativer Sprachen markierte der Aufsatz Go To Statement Considered Harmful von Edsger W Dijkstra aus dem Jahr 1968 Darin wird der Verzicht oder zumindest die Einschrankung der absoluten Sprunganweisungen Goto gefordert stattdessen sollen Kontrollstrukturen wie zum Beispiel if then case of while do repeat until verwendet werden Prozedurale Programmierung Bearbeiten Hauptartikel Prozedurale Programmierung Den Ansatz Programme in kleinere Teilaufgaben aufzuspalten bezeichnet man als prozedurale Programmierung Die entstehenden Teilprogramme werden Prozeduren genannt Praktisch alle aktuellen imperativen Programmiersprachen beinhalten den prozeduralen Ansatz Die Entwicklung prozeduraler Programmiersprachen und techniken waren ein wesentlicher Schritt zwischen Assemblersprache und Hochsprachen indem sie Abstraktion und Zerlegung von Algorithmen ermoglichen Modulare Programmierung Bearbeiten Hauptartikel Modulare Programmierung Modulare Programmierung war der erste Versuch der wachsenden Grosse von Softwareprojekten Herr zu werden In der modularen Programmierung wird der prozedurale Ansatz erweitert indem Prozeduren zusammen mit Daten in logischen Einheiten zusammengefasst werden Die Software wird so in grossere funktionale Teilblocke zerlegt die einzeln geplant programmiert und getestet werden konnen Die entstehenden Unterprogramme werden als Module bezeichnet Am Ende konnen die Einzelteile dann logisch miteinander verknupft werden und die Software ist einsatzbereit Die normierte Programmierung beschreibt dabei den Versuch diesen Ablauf zu standardisieren Die erste streng modularisierte Programmiersprache war 1978 Modula 2 Programmierung mit abstrakten Datentypen Bearbeiten Hauptartikel Abstrakter Datentyp Die Programmierung mit abstrakten Datentypen behandelt Daten und Funktionen zur Behandlung dieser Daten als Einheit Deklarative Programmierparadigmen Bearbeiten Hauptartikel Deklarative Programmierung Die Idee einer deklarativen Programmierung ist der historisch jungere Ansatz Im Gegensatz zu imperativen Programmierparadigmen bei denen das Wie im Vordergrund steht fragt man in der deklarativen Programmierung nach dem Was das berechnet werden soll Es wird also nicht mehr der Losungsweg programmiert sondern nur noch angegeben welches Ergebnis gewunscht ist Zu diesem Zweck beruhen deklarative Paradigmen auf mathematischen rechnerunabhangigen Theorien Aufgrund der referenziellen Transparenz gibt es keine Nebeneffekte Programme sind damit teilweise auswertbar und ermoglichen so zum Beispiel die Behandlung unendlicher Datenstrukturen Beweise zum Beispiel Korrektheitsbeweis Beweise uber Programmeigenschaften sind dank mathematischer Basis unter anderem Lambda Kalkul uneingeschrankt durchfuhrbar Architekturunabhangigkeit teilweise geringe Akzeptanz man spricht gern von sogenannten Akademikersprachen Zu den deklarativen Programmiersprachen gehoren funktionale Sprachen unter anderem Lisp ML Miranda Gofer Haskell F Scala logische Sprachen unter anderem Prolog funktional logische Sprachen unter anderem Babel Escher Curry Oz mengen orientierte Abfragesprachen unter anderem SQL Beispiel Quicksort Haskell ist eine typische deklarative Programmiersprache Der Programmierer beschreibt was das Programm mit einer Eingabe macht also wie mit welcher Eingabe umzugehen ist wobei der Berechnungsablauf nicht von Interesse ist Die Berechnungen erfolgen dann durch Wertemanipulation Hauptkontrollstruktur bildet die Rekursion insbesondere aus Effizienzgrunden die Endrekursion quicksort quicksort x xs quicksort n n lt xs n lt x x quicksort n n lt xs n gt x Funktionale Programmierung Bearbeiten Hauptartikel Funktionale Programmierung Die Aufgabenstellung und die bekannten Pramissen werden hier als funktionaler Ausdruck formuliert Das selbststandige Anwenden von Funktionsersetzung und Auswertung seitens des Interpreters oder Compilers losen dann die Aufgabenstellung Das Programm kann als Abbildung der Eingabe auf die Ausgabe aufgefasst werden Logische Programmierung Bearbeiten Hauptartikel Logische Programmierung Die Aufgabenstellung und ihre Pramissen werden als logische Aussagen Regeln formuliert vgl funktionale Programmierung s o Der Interpreter versucht dann die gewunschte Losungsaussage herzuleiten Bei anderen regelbasierten Sprachen wie OPS 5 XSLT oder Prolog werden Regeln gegen eine Datenmenge auf ihre Instanziierbarkeit gepruft Aus allen Regelinstanziierungen wird eine mehrere alle ausgewahlt und die zur Regel gehorenden Anweisungen werden ausgefuhrt Constraintprogrammierung Bearbeiten Hauptartikel Constraintprogrammierung Bei der Constraintprogrammierung werden Constraints definiert Sie wird als naturliche Weiterentwicklung der logischen Programmierung verstanden Logische und Constraintprogrammierung werden typischerweise in Kombination eingesetzt Objektorientierte Programmierparadigmen Bearbeiten Hauptartikel Objektorientierung Klassen sind instanziierbare Module und Grundelemente in der objektorientierten Programmierung Nach dem objektorientierten Programmierparadigma werden Objekte mit Daten und den darauf arbeitenden Routinen zu Einheiten zusammengefasst Im Unterschied dazu werden beim prozeduralen Paradigma die Daten von den die Objekte verarbeitenden Routinen getrennt gehalten Ein Computerprogramm ist realisiert als eine Menge interagierender Objekte Objektorientierte Programmierung lasst sich gut mit der ereignisorientierten Programmierung kombinieren z B bei der Programmierung interaktiver grafischer Benutzeroberflachen Komponentenorientierte Programmierparadigmen BearbeitenMithilfe der komponentenbasierten Entwicklung von Software mit abstrakten und generischen Komponentenmodellen konnen Softwarekomponenten mit streng definierten Schnittstellen erstellt werden Durch die Wiederverwendbarkeit von Software Bausteinen kann der Entwicklungsaufwand und die Fehleranfalligkeit reduziert sowie die Informationssicherheit erhoht werden Durch die vollstandige und strenge Datenkapselung wird ferner die Portabilitat von Daten und Programmen erleichtert Agentenorientierte Programmierung Bearbeiten Hauptartikel Agentenorientierte Programmierung Bei der agentenorientierten Programmierung steht der Begriff des autonomen und planenden Agenten im Vordergrund der selbststandig und in Kooperation mit anderen Agenten Probleme lost Aspektorientierte Programmierung Bearbeiten Hauptartikel Aspektorientierte Programmierung Bei der aspektorientierten Programmierung wird der objektorientierte Begriff der Klasse zum Aspekt erweitert und ermoglicht so orthogonale Programmierung Generative Programmierung Bearbeiten Hauptartikel Generative Programmierung Generative Programmierung ist ein Uberbegriff fur die programmatische Erzeugung von Sourcecode Siehe Buch Generative Programming Krzysztof Czarnecki W Eisenecker Generische Programmierung Bearbeiten Hauptartikel Generische Programmierung In der generischen Programmierung wird versucht die Algorithmen fur mehrere Datentypen verwendbar zu gestalten Datenstromorientierte Programmierung Bearbeiten Hauptartikel Datenstromorientierte Programmierung Es wird von einem kontinuierlichen Datenfluss ausgegangen meist Audio oder Videodaten der oft in Echtzeit verandert und ausgegeben wird Graphersetzung Bearbeiten Hauptartikel Graphersetzungssystem Bei der Graphersetzung werden die Daten in Form von Graphen modelliert und die Berechnungen durch Graphersetzungsregeln spezifiziert durch deren gesteuerte Anwendung ein gegebener Arbeitsgraph Stuck fur Stuck umgeformt wird Konkatenative Programmierung BearbeitenKonkatenative Programmierung zeichnet sich dadurch aus dass Programme durch die einfache Verkettung von Programmier Wortern gebildet werden Diese operieren alle auf derselben Datenstruktur welche weitergereicht wird ohne dass dazu eine weitergehende komplexe Syntax notig ware Das fuhrt dazu dass eine naturlichsprachliche Syntax wie A B C moglich ist fur die in anderen Sprachen beispielsweise C B A x geschrieben werden musste Konkatenative Programmiersprachen sind daher meistens aus Implementierungsgrunden auch stapelbasierte Sprachen wie zum Beispiel Forth Joy Cat und PostScript Im Gegensatz dazu sind applikative Programmiersprachen solche die Funktionen auf Argumente anwenden In diese Kategorie fallen die meisten imperativen und funktionalen Sprachen 4 5 Multiparadigmatische Programmierung BearbeitenMultiparadigmatische Sprachen vereinigen verschiedenen Paradigmen miteinander Beispiele sind F Sharp Lisp OCaml Swift und Wolfram Language Weblinks Bearbeiten nbsp Wiktionary Programmierparadigma Bedeutungserklarungen Wortherkunft Synonyme Ubersetzungen Martin Grabmuller Multiparadigmen Programmiersprachen PDF 461 kB Technische Universitat Berlin abgerufen am 3 April 2013 Literatur BearbeitenJohn C Mitchell Krzysztof Apt Concepts in Programming Languages Cambridge University Press 2010 ISBN 978 0 521 78098 8 Einzelnachweise Bearbeiten Bjarne Stroustrup Conference on History of Programming Languages Evolving a language in and for the real world C 1991 2006 PDF Abgerufen am 20 September 2010 englisch C supports several programming styles or as they are sometimes somewhat pretentiously called programming paradigms a b Andreas M Bohm Bettina Jungkunz Grundkurs IT Berufe Vieweg 2005 ISBN 978 3 528 05913 2 a b Funktionale Programmierung oder imperative Programmierung In MSDN Microsoft abgerufen am 3 April 2013 Concatenative language Concatenative abgerufen am 20 September 2010 englisch Dominikus Herzberg Tim Reichert Concatenative Programming PDF 315 kB 2009 archiviert vom Original am 27 Februar 2012 abgerufen am 20 September 2010 englisch Normdaten Sachbegriff GND 4308224 5 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Programmierparadigma amp oldid 231962407