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.
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.
| Generation | Merkmale | Sprachen | |
|---|---|---|---|
| Höhere Sprachen | 5: Sprachen der KI | Logik- und Regelbasiert | Lisp, Prolog |
| Höhere Sprachen | 4: Anwendungsbezogene Sprachen | Domänenspezifisch | SQL |
| Höhere Sprachen | 3: Problemorientierte Sprachen | Datenobjekte, Routinen, Kontrollstrukturen | C, C++, C#, Java, JavaScript, Python |
| Niedere Sprachen | 2: Assemblersprachen | Symbolische Befehle | X86-Assembler, MIPS-Assembler, ARM-Assembler |
| Niedere Sprachen | 1: Maschinensprache | Binä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.
| Programmierparadigmen | Kategorie | Fokus | Beispielsprachen |
|---|---|---|---|
| Prozedurale Programmierung | Imperative Programmierung | Routinen 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 steuern | Pascal, C |
| Objektorientierte Programmierung | Imperative Programmierung | Objekte verbinden sowohl Daten als auch Routinen. Zentrale Aspekte sind Datenkapselung, Abstraktion, Vererbung und Polymorphie | C++, Java |
| Funktionale Programmierung | Deklarative Programmierung | Berechnungen werden als die Auswertung mathematischer Funktionen betrachtet. Seiteneffekte (veränderliche Daten und Zustände) werden vermieden | Haskell, Lisp |
| Logische Programmierung | Deklarative Programmierung | Fakten und Regeln werden zur logischen Deduktion verwendet. Es wird festgelegt, was bekannt ist, um daraus abzuleiten, was daraus folgt | Prolog |
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.
- Compilersprachen
- Interpretersprachen
- Just-In-Time Compilersprachen
In Java wird der Interpreter als Java Virtual Machine bezeichnet.