Programmiersprachen.tex 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. \chapter{Programmiersprachen}
  2. Im folgenden werden einige Begriffe definiert anhand derer
  3. Programmiersprachen unterschieden werden können.
  4. \section{Paradigmen}
  5. Die grundlegendste Art, wie man Programmiersprachen unterscheiden
  6. kann ist das sog. \enquote{Programmierparadigma}, also die Art wie
  7. man Probleme löst.
  8. \begin{definition}[Imperatives Paradigma]\xindex{Programmierung!imperative}
  9. In der imperativen Programmierung betrachtet man Programme als
  10. eine folge von Anweisungen, die vorgibt auf welche Art etwas
  11. Schritt für Schritt gemacht werden soll.
  12. \end{definition}
  13. \begin{definition}[Prozedurales Paradigma]\xindex{Programmierung!prozedurale}
  14. Die prozeduralen Programmierung ist eine Erweiterung des imperativen
  15. Programmierparadigmas, bei dem man versucht die Probleme in
  16. kleinere Teilprobleme zu zerlegen.
  17. \end{definition}
  18. \begin{definition}[Funktionales Paradigma]\xindex{Programmierung!funktionale}
  19. In der funktionalen Programmierung baut man auf Funktionen und
  20. ggf. Funktionen höherer Ordnung, die eine Aufgabe ohne Nebeneffekte
  21. lösen.
  22. \end{definition}
  23. Haskell ist eine funktionale Programmiersprache, C ist eine
  24. nicht-funktionale Programmiersprache.
  25. Wichtige Vorteile von funktionalen Programmiersprachen sind:
  26. \begin{itemize}
  27. \item Sie sind weitgehend (jedoch nicht vollständig) frei von Seiteneffekten.
  28. \item Der Code ist häufig sehr kompakt und manche Probleme lassen
  29. sich sehr elegant formulieren.
  30. \end{itemize}
  31. \begin{definition}[Logisches Paradigma]\xindex{Programmierung!logische}
  32. In der logischen Programmierung baut man Unifikation.\todo{genauer!}
  33. \end{definition}
  34. \section{Typisierung}
  35. Eine weitere Art, Programmiersprachen zu unterscheiden ist die stärke
  36. ihrer Typisierung.
  37. \begin{definition}[Dynamische Typisierung]\xindex{Typisierung!dynamische}
  38. Bei dynamisch typisierten Sprachen kann eine Variable ihren Typ ändern.
  39. \end{definition}
  40. Beispiele sind Python und PHP.
  41. \begin{definition}[Statische Typisierung]\xindex{Typisierung!statische}
  42. Bei statisch typisierten Sprachen kann eine niemals ihren Typ ändern.
  43. \end{definition}
  44. Beispiele sind C, Haskell und Java.
  45. \section{Kompilierte und interpretierte Sprachen}
  46. Sprachen werden überlicherweise entweder interpretiert oder kompiliert,
  47. obwohl es Programmiersprachen gibt, die beides unterstützen.
  48. C und Java werden kompiliert, Python und TCL interpretiert.
  49. \section{Dies und das}
  50. \begin{definition}[Seiteneffekt]\xindex{Seiteneffekt}\xindex{Nebeneffekt}\xindex{Wirkung}
  51. Seiteneffekte sind Veränderungen des Zustandes.\todo{Das geht besser}
  52. \end{definition}
  53. Manchmal werden Seiteneffekte auch als Nebeneffekt oder Wirkung bezeichnet.
  54. \begin{definition}[Unifikation]\xindex{Unifikation}
  55. \todo[inline]{Was ist das?}
  56. \end{definition}