Zum Hauptinhalt springen

Programmieren

Als ein Teilbereich der Softwareentwicklung umfasst das Programmieren vor allem die Umsetzung eines Softwareentwurfs in Quellcode. Allgemein versteht man unter Programmieren die Umsetzung von Algorithmen in lauffähige Programme.

info

Ein Algorithmus ist eine Handlungsvorschrift zur Lösung eines Problems.

Abstraktionsniveau

Maschinen sind im Vergleich zum menschlichen Gehirn sehr primitive Gebilde. Die Diskrepanz zwischen der menschlichen Denkweise und der Arbeitsweise von Maschinen bezeichnet man als Semantische Lücke. Programmiersprachen ermöglichen es, Problemstellungen der realen Welt abstrahiert und maschinengerecht abzubilden und damit diese Lücke zu verringern. Je höher die Abstraktion einer Programmiersprache ist, desto mehr lässt sich die Semantische Lücke verringern: Maschinenorientierte Sprachen (z.B. x86-Assembler) abstrahieren kaum und sind daher für den Menschen schwerer verständlich, problemorientierte Sprachen (z.B. Java) abstrahieren stark und sind daher deutlich leichter verständlich.

GenerationMerkmaleSprachen
Höhere Sprachen5: Sprachen der KILogik- und RegelbasiertLisp, Prolog
Höhere Sprachen4: Anwendungsbezogene SprachenDomänenspezifischSQL
Höhere Sprachen3: Problemorientierte SprachenDatenobjekte, Routinen, KontrollstrukturenC, C++, C#, Java, JavaScript, Python
Niedere Sprachen2: AssemblersprachenSymbolische BefehleX86-Assembler, MIPS-Assembler, ARM-Assembler
Niedere Sprachen1: MaschinenspracheBinärcode-

Programmierparadigmen

Unter einem Programmierparadigma versteht man die grundlegende Herangehensweise, Probleme mit Hilfe einer Programmiersprache zu lösen. Viele Programmiersprachen unterstützen dabei mehrere Paradigmen gleichzeitig, auch wenn sie oft einem bestimmten Paradigma zugeordnet werden. Generell werden Programmierparadigmen in zwei große Kategorien eingeteilt: Bei imperativen Paradigmen steht die Frage Wie soll das Ergebnis erreicht werden? im Vordergrund, bei deklarativen Paradigmen die Frage Was soll das Ergebnis sein? Imperative Paradigmen legen also Schritt für Schritt fest, wie ein Ergebnis erreicht wird; deklarative Paradigmen beschreiben stattdessen das gewünschte Ergebnis.

ProgrammierparadigmenKategorieFokusBeispielsprachen
Prozedurale ProgrammierungImperative ProgrammierungRoutinen werden in Prozeduren gekapselt. Es gibt eine klare Trennung zwischen Daten und Routinen. Routinen stellen dabei wiederverwendbaren Code dar, der aus verzweigten und sich wiederholenden Folgen von Anweisungen besteht, die den Programmablauf steuernPascal, C
Objektorientierte ProgrammierungImperative ProgrammierungObjekte verbinden sowohl Daten als auch Routinen. Zentrale Aspekte sind Datenkapselung, Abstraktion, Vererbung und PolymorphieC++, Java
Funktionale ProgrammierungDeklarative ProgrammierungBerechnungen werden als die Auswertung mathematischer Funktionen betrachtet. Seiteneffekte (veränderliche Daten und Zustände) werden vermiedenHaskell, Lisp
Logische ProgrammierungDeklarative ProgrammierungFakten und Regeln werden zur logischen Deduktion verwendet. Es wird festgelegt, was bekannt ist, um daraus abzuleiten, was daraus folgtProlog

Programmausführung

Programme können auf einem Computer auf unterschiedliche Arten ausgeführt werden. Bei Compilersprachen wird der Quellcode vor der Ausführung vollständig in eine ausführbare Datei übersetzt. Bei Interpretersprachen wird der Quellcode zur Laufzeit direkt ausgeführt, ohne vorherige Übersetzung. Just-In-Time- Compilersprachen (JIT) kombinieren beide Ansätze: Der Quellcode wird zunächst in einen plattformunabhängigen Bytecode kompiliert, der dann zur Laufzeit ausgeführt wird. Compilersprachen wie C und C++ sind dabei besonders performant, Interpretersprachen wie JavaScript und Python sind plattformunabhängig und JIT-Sprachen wie C# und Java vereinen die Vorteile beider Ansätze.

info

In Java wird der Interpreter als Java Virtual Machine bezeichnet.