You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.6 KiB

Programmierparadigmen

Um was geht es?

In dieser Datei werde ich den Programmiersprachen Java, C, Python, go, JavaScript und TypeScript die Programmierparadigmen Imperative Programmierung, Declarative Programmierung, Prozedurale Programmierung, Objektorientierte Programmierung, Funktionale Programmierung sowie inwieweit die Programmiersprachen typisiert bzw. nicht-typisiert sind zuordnen und diese Programmierparadigmen kurz erklären. Außerdem werde ich die Programmierprinzipien KISS, FCoH, SLA, YAGNI, IOC und DI beschreiben.

Programmierparadigmen - kurz erklärt

Imperative Programmierung

  • Programm ist Folge von Anweisungen
  • oft hardwarenah, nicht nur auf Programmiersprachen bezihebar (z.B. Koch-Rezepte)
  • Beispiel: Strukturierter Text

Declarative Programmierung

  • Problembeschreibung steht im Vordergrund, nicht Lösungsweg
  • oft kürzer
  • Beispiel: SQL (im weiteren Sinne), Lisp

Prozedurale Programmierung

  • wie Imperative Programmierung, nur in Unterteile Zerlegbar (z.B. Funktionen)
  • Vorgänger OOP
  • Beispiel: Pascal

Objektorientierte Programmierung

  • Realität wird abstrahiert im Programm abgebildet
  • bessere Strukurierung, bessere Testbarkeit
  • Beispiel: C#, Java

Funktionale Programmierung

  • Verfeinerung Declarative Programmierung
  • Funktionen erzeugen (Abstraktion) und anwenden (Applikation), nur für Berechnungen geeignet
  • Beispiel: Lisp

typisierte Programmiersprachen

  • Festlegung von Typen für Variablen, Rückgabe- und Übergabeparameter
  • kann implizit oder explizit erfolgen
  • Beispiel: C

typenlose Programmiersprachen

  • keine Festlegung von Typen für Variablen, Rückgabe- und Übergabeparameter
  • Beispiel: JavaScript

Programmiersprachen und Programmparadigmen

Java

  • imperativ, prozedural, objektorientiert, typisiert
  • Objektorientierte Hochsprache, Programme werden nicht für Betriebssystem, sondern für die Java-VM kompiliert --> man kann Java installieren, man kann Java-Programme ausführen

C

  • imperativ, prozedural, typisiert
  • ältere, aber teilweise immer noch aktuelle Hochsprache; entwickelt für hardwarenahe Programmierung (für eine Hochsprache)

Python

  • imperativ, prozedural, objektorientiert, typisiert
  • neuere Hochsprache, Option zur Objektorientierung, gut einsetzbar für Datenwissenschaft, KI und web

go

  • imperativ, prozedural, typisiert
  • neuere Hochsprache, wird für Online-Services wie Cloud-Lösungen und Messenging verwendet

JavaScript

  • imperativ, prozedural, nicht-typisiert
  • ältere Hochsprache, Anwendung im web, wird clientseitig ausgeführt

TypeScript

  • imperativ, prozedural, objektorientiert, typisiert
  • Erweiterung von JavaScript, zusätzlich Typisierung und Objektorientierung

Programmierprinzipien

KISS

  • kurz für Keep It Simple (and) Stupid
  • einfacher Code sollte das Ziel sein, um Verständlichkeit zu erhöhen
  • dazu kann es hilfreich sein, sich die Anforderungen zu vergegenwärtigen

FCoH

  • kurz für Favor Composition over Inheritance (Komposition an Stelle von Vererbung)
  • man sollte Klassen eher in eine Teil-Ganzes-Beziehung als in einer Oberklasse-Unterklasse Beziehung darstellen
  • findet Anwendung, um Klassen stärker zu entkoppeln und dynamischer zu gestalten
  • dabei können Klassen bspw. Methoden aufrufen, die Methoden in dynamischen Klassenobjekten ausfrufen können statt die Methoden einer Elternklasse

SLA

  • kurz für Single Layer of Abstraction
  • bedeutet, dass in jedem Codeabschnitt auf dem gleichen Abstraktionslevel gearbeitet werden soll
  • praxisnäher: eine Codeeinheit hat genau eine Aufgabe, und beispielsweise nichts mit Ausgaben oder genauer Fehlerbehandlung zu tun wenn etwas berechnet wird

YAGNI

  • kurz für You Ain’t Gonna Need It
  • bedeutet einfach nur, dass nichts implementiert werden soll, was nicht in den Anforderungen steht
  • klingt einfach umsetzbar, wird aber leicht im Überschwung vergessen (zumindest bei mir als Testobjekt)
  • ein vermutlich guter Tipp ist das Erinnern an noch zu erledingende Dinge und das Zeitfenster

IOC

  • kurz für Inversion of Control
  • eine Sonderform ist DI - Dependency Injection
  • bedeutet, dass der Verlauf des Programmes von der Stelle aus gesteuert werden sollte, die auch dafür zuständig ist
  • diese Stelle kann dann Konfigurationen, Abhängigkeiten oder Argumente zur Steuerung übergeben
  • dadurch wird der Code dynamischer

DI

  • kurz für Dependency Injection
  • bedeutet einfach nur, dass Codeteile dynamischer gestaltet werden können, wenn ihnen Abhängigkeiten übergeben werden
  • falls diese Codeteile die Abhängigkeiten selbst in Form von beispielsweise Objekten erzeugen, wird der Code undynamischer, abhängiger und schlechter testbar