2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-25 14:28:05 +02:00
LaTeX-examples/documents/Programmierparadigmen/Programmiersprachen.tex

118 lines
4.4 KiB
TeX
Raw Normal View History

2014-02-24 11:44:57 +01:00
%!TEX root = Programmierparadigmen.tex
\chapter{Programmiersprachen}
Im folgenden werden einige Begriffe definiert anhand derer
Programmiersprachen unterschieden werden können.
2014-02-14 09:23:58 +01:00
\begin{definition}\xindex{Programmiersprache}\xindex{Programm}%
Eine \textbf{Programmiersprache} ist eine formale Sprache, die durch eine
Spezifikation definiert wird und mit der Algorithmen beschrieben werden
können. Elemente dieser Sprache heißen \textbf{Programme}.
\end{definition}
Ein Beispiel für eine Sprachspezifikation ist die \textit{Java Language Specification}.\footnote{Zu finden unter \url{http://docs.oracle.com/javase/specs/}} Obwohl es kein guter Stil ist, ist auch
eine Referenzimplementierung eine Form der Spezifikation.
Im Folgenden wird darauf eingegangen, anhand welcher Kriterien man
Programmiersprachen unterscheiden kann.
\section{Abstraktion}
Wie nah an den physikalischen Prozessen im Computer ist die Sprache?
Wie nah ist sie an einer mathematisch / algorithmischen Beschreibung?
\begin{definition}\xindex{Maschinensprache}\xindex{Befehlssatz}%
Eine \textbf{Maschinensprache} beinhaltet ausschließlich Instruktionen, die direkt
von einer CPU ausgeführt werden können. Die Menge dieser Instruktionen
sowie deren Syntax wird \textbf{Befehlssatz} genannt.
\end{definition}
\begin{beispiel}[Maschinensprachen]
\begin{bspenum}
\item \xindex{x86}x86:
\item \xindex{SPARC}SPARC:
\end{bspenum}
\end{beispiel}
\begin{definition}\xindex{Assembler}%
\textbf{Assembler} TODO
\end{definition}
\begin{beispiel}[Assembler]%
TODO
\end{beispiel}
\section{Paradigmen}
Die grundlegendste Art, wie man Programmiersprachen unterscheiden
kann ist das sog. \enquote{Programmierparadigma}, also die Art wie
man Probleme löst.
\begin{definition}[Imperatives Paradigma]\xindex{Programmierung!imperative}
In der imperativen Programmierung betrachtet man Programme als
eine folge von Anweisungen, die vorgibt auf welche Art etwas
Schritt für Schritt gemacht werden soll.
\end{definition}
\begin{definition}[Prozedurales Paradigma]\xindex{Programmierung!prozedurale}
Die prozeduralen Programmierung ist eine Erweiterung des imperativen
Programmierparadigmas, bei dem man versucht die Probleme in
kleinere Teilprobleme zu zerlegen.
\end{definition}
\begin{definition}[Funktionales Paradigma]\xindex{Programmierung!funktionale}
In der funktionalen Programmierung baut man auf Funktionen und
ggf. Funktionen höherer Ordnung, die eine Aufgabe ohne Nebeneffekte
lösen.
\end{definition}
2014-02-01 15:32:13 +01:00
Haskell ist eine funktionale Programmiersprache, C ist eine
nicht-funktionale Programmiersprache.
Wichtige Vorteile von funktionalen Programmiersprachen sind:
\begin{itemize}
\item Sie sind weitgehend (jedoch nicht vollständig) frei von Seiteneffekten.
\item Der Code ist häufig sehr kompakt und manche Probleme lassen
sich sehr elegant formulieren.
\end{itemize}
\begin{definition}[Logisches Paradigma]\xindex{Programmierung!logische}
2014-02-24 11:44:57 +01:00
In der logischen Programmierung baut auf der Unifikation auf.\todo{genauer!}
2014-02-01 15:32:13 +01:00
\end{definition}
\section{Typisierung}
Eine weitere Art, Programmiersprachen zu unterscheiden ist die stärke
ihrer Typisierung.
\begin{definition}[Dynamische Typisierung]\xindex{Typisierung!dynamische}
Bei dynamisch typisierten Sprachen kann eine Variable ihren Typ ändern.
\end{definition}
Beispiele sind Python und PHP.
\begin{definition}[Statische Typisierung]\xindex{Typisierung!statische}
Bei statisch typisierten Sprachen kann eine niemals ihren Typ ändern.
\end{definition}
Beispiele sind C, Haskell und Java.
2014-02-01 15:32:13 +01:00
\section{Kompilierte und interpretierte Sprachen}
Sprachen werden überlicherweise entweder interpretiert oder kompiliert,
obwohl es Programmiersprachen gibt, die beides unterstützen.
C und Java werden kompiliert, Python und TCL interpretiert.
\section{Dies und das}
2014-02-24 11:44:57 +01:00
\begin{definition}[Seiteneffekt]\xindex{Seiteneffekt}\index{Nebeneffekt|see{Seiteneffekt}}\index{Wirkung|see{Seiteneffekt}}%
2014-02-01 15:32:13 +01:00
Seiteneffekte sind Veränderungen des Zustandes.\todo{Das geht besser}
\end{definition}
Manchmal werden Seiteneffekte auch als Nebeneffekt oder Wirkung bezeichnet.
2014-02-24 11:44:57 +01:00
\begin{definition}[Unifikation]\xindex{Unifikation}%
Die Unifikation ist eine Operation in der Logik und dient zur Vereinfachung
prädikatenlogischer Ausdrücke.
\todo[inline]{Das ist keine formale Definition!}
2014-02-01 15:32:13 +01:00
\end{definition}
2014-02-24 11:44:57 +01:00
\begin{beispiel}[Unifikation]
\end{beispiel}