**Sich mit Organisation und Lernplan vertraut zu machen
**Wer ist ein Programmierer? Künstler oder Handwerker?
**Wo liegen Unterschiede zwischen Laien und Profi?
**Folgen der Nichtbeachtung der Prinzipien kennenlernen.
**Werte kennenzulernen an denen man Clean Code erkennen kann.
**Tugenden kennenzulernen, die zu Clean Code gehören.
**Einen GitLab account einzurichten und einen neuen Projekt erstellen.
**Sich mit git vertraut zu machen.
Sich mit Organisation und Lernplan vertraut zu machen
Wer ist ein Programmierer? Künstler oder Handwerker?
Wo liegen Unterschiede zwischen Laien und Profi?
Folgen der Nichtbeachtung der Prinzipien kennenlernen.
Werte kennenzulernen an denen man Clean Code erkennen kann.
Tugenden kennenzulernen, die zu Clean Code gehören.
Einen GitLab account einzurichten und einen neuen Projekt erstellen.
Sich mit git vertraut zu machen.
### Erkenntnis
### Erkenntnis
*Ich habe erfahren, was mich im Laufe des Semesters erwartet und welche Anforderungen ich erfüllen müsste um erfolgreich den Kurs zu bestehen. Ich habe die Prinzipien kennengelernt, die einem Programmieren helfen erfolgreich und effektiv zu sein und die Folgen der Nichtbeachtung dieser Prinzipien.
*Beim Praktikum habe ich gelernt, wie man einen account beim GitLab erstellt und mithilfe von Terminal und git-Befehlen ein neues Repository erstellt.
Ich habe erfahren, was mich im Laufe des Semesters erwartet und welche Anforderungen ich erfüllen müsste um erfolgreich den Kurs zu bestehen. Ich habe die Prinzipien kennengelernt, die einem Programmierer helfen erfolgreich und effektiv zu sein und die Folgen der Nichtbeachtung dieser Prinzipien.
### Wiederholung
Beim Praktikum habe ich gelernt, wie man einen account beim GitLab erstellt und mithilfe von Terminal und git-Befehlen ein neues Repository erstellt.
*Diese Woche gab es keine Wiederholung, da wir zum ersten Mal Unterricht hatten.
### Wiederholung
### Kritik
Diese Woche gab es keine Wiederholung, da wir zum ersten Mal Unterricht hatten.
*Es gibt keine Kritik
### Kritik
### Mitteilung an die Dozierenden
Es gibt keine Kritik
*Es gibt keine Mitteilung an die Dozierenden
### Mitteilung an die Dozierenden
Es gibt keine Mitteilung an die Dozierenden
## SU 02 (31.10.2021)
## SU 02 (31.10.2021)
### Lernziel
*Mein Lernziel für diese Woche bestand aus:
### Lernziel
#### Mein Lernziel für diese Woche bestand aus:
#### Programmierparadigmen:
**Programmierparadigmen:
***Imperative Programmierung:
##### Imperative Programmierung:
Programm besteht aus der Reihe der Anweisungen, die vorgeben in welcher Reihenfolge was vom PC getan werden soll.
Programm besteht aus der Reihe der Anweisungen, die vorgeben in welcher Reihenfolge was vom PC getan werden soll.
Sehr hardwernah
Sehr hardwernah
Programm ist gut nachvollziehbar
Programm ist gut nachvollziehbar
***Deklarative Programmiersprachen:
##### Deklarative Programmiersprachen:
Die Beschreibung des Problems steht im Vordergrund
Die Beschreibung des Problems steht im Vordergrund
z.B Haskell, List, Prolog, XAML (SQL...)
z.B Haskell, List, Prolog, XAML (SQL...)
Vorteil: die sind kürzer, als imperative Sprachen
Vorteil: die sind kürzer, als imperative Sprachen
mathematische Beweise lassen sich leichten durchführen
mathematische Beweise lassen sich leichten durchführen
Es gibt keine Nebenwirkungen aufgrund der Transparenz
Es gibt keine Nebenwirkungen aufgrund der Transparenz
***Prozedurale Programmierung:
##### Prozedurale Programmierung:
Weiterentwicklung der imperativen Sprachen
Weiterentwicklung der imperativen Sprachen
aufeinander folgende Befehle mit Zelregung des Algorythmus. Diese Zerlegung heisst Funktionen
aufeinander folgende Befehle mit Zelregung des Algorythmus. Diese Zerlegung heisst Funktionen
Aufrufen von Unterprogrammen und das Durchleiten von Werten und die Rückgabe von Werten
Aufrufen von Unterprogrammen und das Durchleiten von Werten und die Rückgabe von Werten
@ -55,7 +59,8 @@
Es gibt immer ein Zentraler Einstiegspunkt in einem Programm
Es gibt immer ein Zentraler Einstiegspunkt in einem Programm
Fehlerzustände werden über spezielle Rückgabewerte kommuniziert
Fehlerzustände werden über spezielle Rückgabewerte kommuniziert
Beispiele: Cobol, C...
Beispiele: Cobol, C...
***Objektorientierte Programmierung:
##### Objektorientierte Programmierung:
Es ist eine Technik, welche Objekte, Klassen und Vererbung unterstützt
Es ist eine Technik, welche Objekte, Klassen und Vererbung unterstützt
Merkmale:
Merkmale:
@ -65,7 +70,8 @@
Vorteil: Das Programm ist besser struckturiert durch einteilen auf klassen (die kannn man unabhängig entwickeln und mitenander kommunizieren)
Vorteil: Das Programm ist besser struckturiert durch einteilen auf klassen (die kannn man unabhängig entwickeln und mitenander kommunizieren)
Wiederverwendbarkeit von Programmteilen
Wiederverwendbarkeit von Programmteilen
bessere Testbarkeit (Unittests - kleinere Teile unabhängig von Rest des Programms testen)
bessere Testbarkeit (Unittests - kleinere Teile unabhängig von Rest des Programms testen)
***Funktionale Programmierung:
##### Funktionale Programmierung:
Erweiterung der deklaratieven Programmierung
Erweiterung der deklaratieven Programmierung
ineinander verschachtelete Funktionsaufrufe
ineinander verschachtelete Funktionsaufrufe
Funktionen sind den anderen Datenobjekten gleichberechtigt
Funktionen sind den anderen Datenobjekten gleichberechtigt
@ -76,52 +82,158 @@
Generierung neuer Funktionen zur Laufzeit
Generierung neuer Funktionen zur Laufzeit
geignet für nebenläufige Prozesse
geignet für nebenläufige Prozesse
Randbedingung: nur für Berechnungen
Randbedingung: nur für Berechnungen
***typisierte Programmiersprachen:
##### typisierte Programmiersprachen:
jede Wariable, Parameter und Rückgabewerte haben einen vordefinirten Typ. Die festlegung ist implizit oder explizit
jede Wariable, Parameter und Rückgabewerte haben einen vordefinirten Typ. Die festlegung ist implizit oder explizit
C, C++, Java, go, C#, Python, Haskell, TypeScript
C, C++, Java, go, C#, Python, Haskell, TypeScript
Vorteile: fail fast
Vorteile: fail fast
Vervollständigung durch IDE
Vervollständigung durch IDE
Nachteile: Typen müssen zum Programmierzeitpunkt bekannt sein
Nachteile: Typen müssen zum Programmierzeitpunkt bekannt sein
nachtägliche Änderungen können bestehenden Code brechen
nachtägliche Änderungen können bestehenden Code brechen
***Typenlose Programmiersprachen:
##### Typenlose Programmiersprachen:
jede Wariable, Parameter und Rückgabewerte werden nicht festgelegt
jede Wariable, Parameter und Rückgabewerte werden nicht festgelegt
Beispiele: JS, Assemler x86
Beispiele: JS, Assemler x86
Vorteile: nur faktische Kompatibilität
Vorteile: nur faktische Kompatibilität
implizite Konvertierung
implizite Konvertierung
Nachteile: Typenfehler treten erst zum Laufzeit auf
Nachteile: Typenfehler treten erst zum Laufzeit auf
**Prinzipien der Programmierung:
***SOLID und STUPID
### Prinzipien der Programmierung:
SOLID und STU
KISS Keep it Simle and S
FCoH Favor Composition over Inheritance
SLA Single Layer of Abstra
YAGNI You Ain't Gonna Ne
IOC Inversion of Co
DI Dependency Injection
### Erkenntnis
Ich habe mehrere Programmiersprachen unter die Lupe genommen und deren Merkmale,Aufgaben- und Anwendungsfelder, sowie Nach- und Vorteile kennengelernt. Durch die Anwendung der Programmierprinzipien lernt man einen lesbaren, effizienten Code zu schreiben, der auch in der Zukunft leicht zu bearbeiten sein soll.
### Wiederholung
Ich habe den Umgang mit git wiederholt.
### Kritik
Es gibt keine Kritik
### Mitteilung an die Dozierenden
Struckturierte Betrachtung der Programmiersprachen und Programmierprinzipien finden Sie im Ordner "Programmierparadigmen.md"
## SU_03
### Lernziele:
Wir haben die Kenntnisse der Markup Sprache als Voraussetzung definiert.
Bücherempfehlung
Entwurfmuster: beispielhabe Lösungsanzätze
ursprünglich aus der Architektur
mit der Verbreitung der OOP adaptiert
### Vorteile:
erprobte Lösungen für Wiederkehrende Aufgaben
Vor- und Nachteile sind bekannt
erleichtern die Kommunikation (funktioniert so gut wie nie. Durch DP haben selben Kontext)
hohe Einstiegshürde (Lernaufwand und es dauert eine Weile)
im Code schwer identifizierbar
### Wo helfen die DP:
Makro-Design (auf Architekturebene), (Grobentwurf).ModulebeneArchitekt, Team
Mikro-Design (wie die Codebestandteile zueinander stehen)
### 3 verschiedene Kategorien:
#### Erzeugungsmuster: Erbauer (builder)
Fabrkimethode (factory method)
Abstrakte Fabrik (abctract factory)
Eizelstück (singleton)
Multiton
#### Strukturmuster: Adapter
retrofit interface pattern
Die Brücke
Dekorierer
Fassade
Fliegengewicht
#### Verhaltensmuster: Accumulator
Beobachter
Iterator
Kommando
Nullobjekt
Strategie
### IDE Intergrated Development Environment
Geschichte
alle die an einem Projekt beteiligt sind müssen gleiche Patameter für Compiler haben
Folgende Parameter, die zutreffen: Syntax highlighting
Syntax Vervollständigung
Navigation
Debuging etc.
### Einteilung: Sprache
Plattform
### Beispiele: Eclipse, VS Code ...
### Einfache und komplexe Refactorings (eine oder mehrere Dateien)
### Debugging: Beobachtung des Programms während der Laufzeit (Reihenfolge der Prozeduren und Werte der Tabelle)
***KISS Keep it Simle and Stupid
### Praktik: Wir haben die Übung mit dem Debugger durchgeführt
***FCoH Favor Composition over Inheritance
### Erkenntnis
***SLA Single Layer of Abstraction
Wir haben die Vor- und Nachteile der IDE kennengelernt. Ihre Einsatzmöglichkeiten und auch die Möglichkeit den Code zu debuggen.
***YAGNI You Ain't Gonna Need It
### Wiederholung
***IOC Inversion of Control
keine
***DI Dependency Injection
### Kritik
### Erkenntnis
keine
*Ich habe mehrere Programmiersprachen unter die Lupe genommen und deren Merkmale,Aufgaben- und Anwendungsfelder, sowie Nach- und Vorteile kennengelernt. Durch die Anwendung der Programmierprinzipien lernt man einen lesbaren, effizienten Code zu schreiben, der auch in der Zukunft leicht zu bearbeiten sein soll.
### Mitteilung an die Dozierenden
### Wiederholung
keine
*Ich habe den Umgang mit git wiederholt.
### Kritik
## SU_04
*Es gibt keine Kritik
### Lernziele
### Mitteilung an die Dozierenden
### Erkenntnis
*Struckturierte Betrachtung der Programmiersprachen und Programmierprinzipien finden Sie im Ordner "Programmierparadigmen.md"