Browse Source

Vorlesung 31.10.2023 hinzugefuegt

remotes/origin/HEAD
fdai7777 1 year ago
parent
commit
568072464a
  1. 97
      Lerntagebuch.md

97
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. - Informatiker sind eher Handwerker als Künstler, da sie ein Produkt für praktischen Gebrauch erschaffen, anstatt zur Bewunderung.
- Eigenschaften eines Informaikers: - Eigenschaften eines Informaikers:
- Vorgehen nach erlernten Prinzipien - Vorgehen nach erlernten Prinzipien
- Lebenslanges Lernen - Lebenslanges Lernen
- Clean Code - 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. 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:** **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. 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
Loading…
Cancel
Save