From 568072464aefb5c08228d0dbd5637293362d7ded Mon Sep 17 00:00:00 2001 From: fdai7777 Date: Tue, 31 Oct 2023 18:18:54 +0000 Subject: [PATCH] Vorlesung 31.10.2023 hinzugefuegt --- Lerntagebuch.md | 97 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 92 insertions(+), 5 deletions(-) diff --git a/Lerntagebuch.md b/Lerntagebuch.md index 771016a..d10455f 100644 --- a/Lerntagebuch.md +++ b/Lerntagebuch.md @@ -1,16 +1,103 @@ -# Lerntagebuch +# Lerntagebuch -## Vorlesung vom 24.10.2023 +## Vorlesung vom 24.10.2023 -### Lernziel +### Lernziel - Informatiker sind eher Handwerker als Künstler, da sie ein Produkt für praktischen Gebrauch erschaffen, anstatt zur Bewunderung. - Eigenschaften eines Informaikers: - Vorgehen nach erlernten Prinzipien - Lebenslanges Lernen - Clean Code -### Erkenntnis +### Erkenntnis In der Übung wurden die ersten Schritte mit einem Versionskontrollsystem gemacht. Dies wird sehr nützlich sein, um im Gruppenprojekt gemeinsam zu arbeiten. -### Wiederholung +### Wiederholung **Repository:** Ein Repository ist ein Ort, an dem zentral Dateien im Kontext von Softwareprojekten gespeichert werden. Darin werden alle Änderungen des Projekts protokoliert, sodass immer eine Historie des Projekts einzusehen ist und Änderungen rückgängig gemacht werden können. +## Vorlesung vom 31.10.2023 + +### Lernziel +**Programmierparadigmen** +- Imperative Programmierung + - Folge aus Anweisungen + - Reihenfolge vorgegeben + - für hardwarenahe Programmierung + **Beispiele:** + - Kochrezepte, Checklisten +- Deklarative Programmierung + - beschreibung des Problems steht im Vordergrund + - Lösungsweg wird automatisch ermittelt + **Beispiele:** + - SQL, XSLT, Prolog + **Vorteile:** + - kürzer als imperative Programme + - mathematische beweise sind einfacher + - partiell auswertbar +- Prozedurale Programmierung + - imperativer Algorithmus kann in überschaubare Teile zerlegt werden: + - Unterprogramm, Routine, Prozedur, Funktion + - Verwenden von Parameterwerten und Aufrufen von Unterprogrammen + - sequentielles Abarbeiten von Hierarchien von Funktionen + - Startpunkt in der Hauptprozedur (vgl. "Main" Methode in Java) + - bestimmte Rückgabewerte für Fehler + **Beispiele:** + - COBOL, C, Pascal +- Objektorientierte Programmierung + - Objekte, Klassen und Vererbungen werden unterstützt + - Kapselung von Daten und Funktionen + - Polymorphie + **Beispiele:** + - Smalltalk, C++, Java, Kotlin + **Vorteile** + - bessere Struktur + - Wiederverwendbarkeit von Programmteilen + - bessere Testbarkeit +- Funktionale Programmierung + - grundlegende Ausdrücke sind Erzeugungen und Anwendungen von Funktionen + - ineinander verschachtelt + - Daten fliessen durch das Programm + **Beispiele:** + - Lisp, Scala, (C++, Java, Kotlin nicht das Hauptfeature der Sprachen) + **Vorteile:** + - Berechnungen effizient und übersichtlich + - neue Funktionen können in der Laufzeit generiert werden + - für nebenläufige Prozesse geeignet + - nur Berechnungen +- typisierte Programmiersprachen + - Datentyp von Variablen, Parametern und Rückgabewerten sind festgelegt (implizit oder explizit) + **Beispiele:** + - C, C++, Java, Typescript + **Vorteile** + - Fehler schneller erkennen + - Hilfe durch IDE + **Nachteile:** + - Typen müssen zum Programmmierzeitpunkt bekannt sein + - nachträgliche Änderung an Typen können den Code brechen +- typenlose Programmiersprachen + - Datentyp wird nicht festgelegt + **Beispiele:** + - sh, cmd, JavaScript + **Vorteile:** + - implizite Konvertierung + **Nachteile:** + - Typenfehler treten erst in der Laufzeit auf + +**Prinzipien der Programmierung** +| SOLID | STUPID | +| ------ | ------ | +| **S**eparations of Concern | **S**ingelton | +| **O**pen/Closed Principle | **T**ight Coupling | +| **L**iskov Substitution Principle | **U**ntestability | +| **I**nterface Segration Principle | **P**remature Optimization | +| **D**ependency Inversion Principle | **I**ndescriptive Naming | +| | **D**uplication | + +- **KISS:** Keep It Simple (and) Stupid +- **FCoH:** Favor Composition over Inheritance +- **SLA:** Single Layer of Abstraction +- **YAGNI:** You Ain’t Gonna Need It +- **IOC:** Inversion of Control +- **DI:** Dependency Injection + + +