|
|
@ -1,19 +1,22 @@ |
|
|
|
Vorlesung(2.11.2022) |
|
|
|
# Mein Lerntagebuch für Programmiermethoden und -werkzeuge |
|
|
|
|
|
|
|
Lernziele |
|
|
|
## Vorlesung (2.11.2022) |
|
|
|
|
|
|
|
Es gibt viele Arten von programmierParadigmen: |
|
|
|
1. Imperative programmierung erklärt, dass ein Programm aus einer Folge von Anweisungen besteht, die vorgeben, |
|
|
|
### Lernziele |
|
|
|
|
|
|
|
Es gibt viele Arten von programmierParadigmen: |
|
|
|
|
|
|
|
1. Imperative programmierung erklärt, dass ein Programm aus einer Folge von Anweisungen besteht, die vorgeben, |
|
|
|
in welcher Reihenfolge was vom Computer getan werden soll. |
|
|
|
2. Bei Deklarative Programmierung steht die Beschreibung des Problems im Vordergrund. Danach wird der Lösungsweg automatisch ermittelt. |
|
|
|
3. Die prozedurale Programmierung ergänzt das imperative Konzept aufeinander folgender Befehle um den Ansatz, |
|
|
|
3. Die prozedurale Programmierung ergänzt das imperative Konzept aufeinander folgender Befehle um den Ansatz, |
|
|
|
einen Algorithmus in überschaubare Teile zu zerlegen. |
|
|
|
4. Objektorientierte Programmierung, wie der Name beschreibt, bezieht sich auf eine Prorammiersprache(Java :D), |
|
|
|
4. Objektorientierte Programmierung, wie der Name beschreibt, bezieht sich auf eine Prorammiersprache(Java :D), |
|
|
|
welche Objekte, Kalssen und Vererbung unterstützt. |
|
|
|
5. Funktionalen Programmierung ist eine Verfeinerung der deklarative Progammierung, |
|
|
|
bei dem die grundlegenden Ausdrücke die Erzeugung von Funktionen (die Abstraktion) und |
|
|
|
5. Funktionalen Programmierung ist eine Verfeinerung der deklarative Progammierung, |
|
|
|
bei dem die grundlegenden Ausdrücke die Erzeugung von Funktionen (die Abstraktion) und |
|
|
|
die Anwendung von Funktionen (die Applikation) sind. Aber nur für Berechnungen. |
|
|
|
6. Bei typisierten Progammiersprachen wird für Variablen sowie Parameter und Rückgabewerte von Prozeduren festgelegt, |
|
|
|
6. Bei typisierten Progammiersprachen wird für Variablen sowie Parameter und Rückgabewerte von Prozeduren festgelegt, |
|
|
|
von welchem Datentypen sie sind(int oder void und so weiter). |
|
|
|
7. Typenlose Programmiersprachen ist das Gegenteil von typisierte Programmiersprache. |
|
|
|
den Typ von Variablen, Parametern und Rückgabewerten wird nicht festgelegt. |
|
|
@ -34,26 +37,26 @@ STUPID |
|
|
|
- Indescriptive Naming |
|
|
|
- Duplication |
|
|
|
|
|
|
|
Kritik |
|
|
|
### Kritik |
|
|
|
|
|
|
|
Keep It Simple and Stupid(Komplezität soll vermieden werden). |
|
|
|
|
|
|
|
Vorlesung(9.11) |
|
|
|
## Vorlesung (9.11) |
|
|
|
|
|
|
|
Lernziele |
|
|
|
### Lernziele |
|
|
|
|
|
|
|
Entwurfmuster (design patterns) sind bewährte Lösungsschablonen für wiederkehrende Entwurfsprobleme |
|
|
|
sowohl in der Architektur als auch in der Softwarearchitektur und -entwicklung. Sie stellen damit |
|
|
|
eine wiederverwendbare Vorlage zur Problemlösung dar, die in einem bestimmten Zusammenhang einsetzbar ist. |
|
|
|
Sie stammt aus der Architektur mit der Verbreitung von Programmiersprachen adaptiert. |
|
|
|
|
|
|
|
Die Vorteile davon ist: |
|
|
|
Die Vorteile davon ist: |
|
|
|
1. erprobte Lösungen für Wiederkehrende Aufgaben. |
|
|
|
2. Vor- und Nachteile sind bekannt. |
|
|
|
3. Vor- und Nachteile sind bekannt. |
|
|
|
3. die Kommunikation vereinfachen. |
|
|
|
4. eignen sich zur Dokumentation. |
|
|
|
|
|
|
|
Die Nachteile davon ist: |
|
|
|
Die Nachteile davon ist: |
|
|
|
1. hohe Einstiegshürde. |
|
|
|
2. Im Code schwer identifizierbar. |
|
|
|
|
|
|
@ -80,15 +83,94 @@ Typen des Verhaltensmusters: |
|
|
|
5. Nullobjekt. |
|
|
|
6. Strategie. |
|
|
|
|
|
|
|
IDE - Integrated Development Environment ist eine Zielplattform für fast alle Programmierer, |
|
|
|
IDE - Integrated Development Environment ist eine Zielplattform für fast alle Programmierer, |
|
|
|
wo sie da coden kann zB. Eclipse, VS Code, Notepad(lmao). Eine der Automatisierung der IDE ist Code Insight, |
|
|
|
welche seinen Job den Code automatisch komplett zu typen ist zB sysout wird automatisch zu System.out.println() getauscht. |
|
|
|
Andere Automatiesierungen sind safe actions, Code Formatierung für lesbarkeit und natürlich Compilieren. |
|
|
|
Der Unterschied zwischen einfache und komplexe Refactorings ist, eine auf aktuelle Datei beschränkt, andere über mehrere Dateien. |
|
|
|
Andere automatisierte Refactorings sind Umbenennungen, Signaturen von Methoden, Verschieben con Codeteilen und Zusammenfassen |
|
|
|
von Codeteilen. Debugging wird erklärt durch die Beobachtung des Programms während der Laufzeit, um Fehler zu identifizieren |
|
|
|
und zu löschen. |
|
|
|
Andere automatisierte Refactorings sind Umbenennungen, Signaturen von Methoden, Verschieben con Codeteilen und Zusammenfassen |
|
|
|
von Codeteilen. Debugging wird erklärt durch die Beobachtung des Programms während der Laufzeit, um Fehler zu identifizieren |
|
|
|
und zu löschen. |
|
|
|
|
|
|
|
Kritik |
|
|
|
### Kritik |
|
|
|
|
|
|
|
Keine für diese Woche :D. |
|
|
|
|
|
|
|
## Vorlesung (16.11) |
|
|
|
|
|
|
|
### Lernziele |
|
|
|
|
|
|
|
*git* als Source Code Management. |
|
|
|
|
|
|
|
Konzepte von *git*: |
|
|
|
|
|
|
|
1. basiert auf _change sets_, nicht Datei. |
|
|
|
2. *commits* wird von SHA gesichert. |
|
|
|
3. *branches* sind Aufkleber auf commits. |
|
|
|
4. Staging area(siehe Kritik). |
|
|
|
|
|
|
|
Safety creates confidence: |
|
|
|
|
|
|
|
1. permanenter Zugriff auf den letzten Arbeitszustand. |
|
|
|
2. Zugang zu verschiedenen Status (production, develop, feature in progress). |
|
|
|
3. Änderungen im Laufe der Zeit/zwischen Funktionen oder *branches* vergleichen. |
|
|
|
|
|
|
|
Simple methods vs SCM: |
|
|
|
|
|
|
|
|Simple methods | Source Code Management | |
|
|
|
|---------------------------- |------------------------------- | |
|
|
|
|exsessive disk usage |optimised for minimal disk usage| |
|
|
|
|chunky granularity |fine granularity | |
|
|
|
|no ”commit message” |annotated change | |
|
|
|
|hard to navigate / search |easy navigation/search | |
|
|
|
|manual merges |automated merge | |
|
|
|
|copies/archives on net shares|change history as tree | |
|
|
|
|simple local copies | |
|
|
|
|zip archives | |
|
|
|
|no tooling required | |
|
|
|
|easy diff | |
|
|
|
| no technical relationships | |
|
|
|
|
|
|
|
Centralized SCM: |
|
|
|
|
|
|
|
|Pro|Contra| |
|
|
|
|---|---| |
|
|
|
|Jeder *commit* für verfügbar| zentrale Instanz erforderlich| |
|
|
|
|aktueller Editor allen bekannt|*locking* verhindert paralleles Arbeiten| |
|
|
|
|easy backup/restore|*branching* und *merging* sofort sichtbar für alle| |
|
|
|
|unbegrenzte Ressourcen für das Repository|keine Offline-Arbeit| |
|
|
|
|
|
|
|
Distributed SCM: |
|
|
|
|Pro|Contra| |
|
|
|
|---|---| |
|
|
|
|kein zentraler Server nötig|local history out of sync| |
|
|
|
|mehrere *remotes* möglich|kein Schutz gegen gleichzeitige Änderungen| |
|
|
|
|arbeiten ohne (ständigen) Netzzugang| |
|
|
|
|implizite backups| |
|
|
|
|Offline-Arbeit - lokale "Experimente"privat bleiben| |
|
|
|
|
|
|
|
Branching: |
|
|
|
|
|
|
|
1. master/main |
|
|
|
2. develop |
|
|
|
3. release |
|
|
|
4. hotfix |
|
|
|
5. feature |
|
|
|
|
|
|
|
Rebase vs Merge: |
|
|
|
|
|
|
|
|`rebase` wenn|`merge` wenn| |
|
|
|
|---|---| |
|
|
|
|an einem unfertigen *feature* arbeiten, das noch nicht in andere *branches* eingebunden wurde|aktuell _branch develop_ oder *master*| |
|
|
|
|eine saubere Historie ist erwünscht|Die Historie sollte mit der Zeitachse synchron bleiben| |
|
|
|
|dein *branch* hat viele Commits (mit funktionierenden UnitTests)|dein *branch* wurde bereits gemerged| |
|
|
|
|einen "Squash-Commit" vorzubereiten| |
|
|
|
|
|
|
|
### Kritik |
|
|
|
|
|
|
|
Keep commits small and clean for easier problem solving and back tracking. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|