Welche Programmierparadigmen gibt es?
Programmiersprachen können je nachdem, wie Programme in der jeweiligen Sprache entwickelt werden sollen, in verschiedene Kategorien eingeteilt werden. Einen solchen fundamentalen Programmierstil bezeichnet man auch als Programmierparadigma. Die wichtigsten Paradigmen sind strukturierte, imperative, deklarative und objektorientierte Programmierung.
Strukturierte Programmierung
Strukturierte Programmiersprachen entstanden in den 1970er Jahren, als Softwareprogramme immer komplexer wurden und die Kosten für Software die von Hardware überstiegen - die sogenannte Softwarekrise. Sie erlauben es, ein Programm in Unterprogramme zu zerteilen und besitzen die Kontrollstrukturen Sequenz, Verzweigung und Wiederholung.
Imperative Programmierung
Imperative Programmierung legt fest, dass Programme aus einer Folge von Anweisungen bestehen. Die Anweisungen, die dafür zur Verfügung stehen, sind wie gewohnt Sequenz, Verzweigung und Wiederholung, aber auch Sprünge und Subroutinen.
Bei der imperativen Programmierung handelt sich um das älteste Programmierparadigma. Die beliebtesten modernen Programmiersprachen, wie Java, C++, C# oder Visual Basic, unterstützen dementsprechend die imperative oder prozedurale Programmierung.
Deklarative Programmierung
Bei deklarativer Programmierung beschreibt der Entwickler, welche Anforderungen die Ausgabe oder das Ergebnis eines Programms erfüllen muss. Der Erzeugung der Ergebnisse selbst wird nicht durch die Anweisungen festgelegt, sondern durch den Interpreter anhand dieser Anforderungen entschieden. Ein Beispiel für deklarative Programmiersprachen sind Haskell, Lisp, Prolog und die Datenbanksprache SQL.
Objektorientierte Programmierung
Objektorientierte Programmierung (OOP) kapselt Daten und Befehle anhand von Objekten, um die Komplexität der Software zu verringern. Die drei grundlegenden Paradigmen der OOP sind Polymorphismus (ein Bezeichner kann je nach Kontext unterschiedliche Datentypen haben), Datenkapselung (das Verbergen von Implementierungsdetails und das Bereitstellen einer einheitlichen Schnittstelle) und Vererbung (Ableitung von Klassen, die Methoden und Attribute einer Basisklasse übernehmen).