diff --git a/Lerntagebuch.md b/Lerntagebuch.md index a3a578e..c7722cf 100644 --- a/Lerntagebuch.md +++ b/Lerntagebuch.md @@ -1,21 +1,24 @@ # Lerntagebuch von Bertrand Goune ## Vorlesung vom 2023.10.26 ## Hausaufgabe zur SU01 (24.10.2023) -### Lernziel & Erkenntnis +### Lernziel - Einführung / Organisatorisches - Programmieren als Handwerk oder Kunstwerk - Kennenlernen von Gitlabs und Git basics +### Erkenntnis +Im Rahmen unseres Projekts werden wir die Historie mithilfe des Versionskontrollsystems Git zurückverfolgen, da es eine hohe Sicherheit bietet, die Historie zu verfolgen, ohne dass die alte Datei nach einer Änderung verloren geht. + ### Wiederholung Ein Programmierer sollte sowohl als Künstler als auch als Handwerker angesehen werden. Da er seine Fachwissen, seine Prinzipien, Methode und Richtlinien als Werkzeuge anwendet, um sein Ziel zu erreichen. Seine geistige Freiheit, neue anwendbare Algorithmen zu finden, um Bedürfnisse zu lösen, versetzt ihn ebenfalls in die Position eines Künstlers. -Im Rahmen unseres Projekts werden wir die Historie mithilfe des Versionskontrollsystems Git zurückverfolgen, da es eine hohe Sicherheit bietet, die Historie zu verfolgen, ohne dass die alte Datei nach einer Änderung verloren geht. +> ## -## Hausaufgabe zur SU02(31.10.2023) -### Lernziel +> ## **Hausaufgabe zur SU02(31.10.2023)** +### **A) Lernziel** - Imperative Programmierung - Deklarative Programmierung - Prozedurale Programmierung @@ -25,7 +28,6 @@ Im Rahmen unseres Projekts werden wir die Historie mithilfe des Versionskontroll - typenlose programmiersprachen - Prinzipen der Programmierung -### Erkenntnis #### **1) Imperative Programmierung** ##### Definition Die imperative Programmierung ist ein Programmierparadigma, das sich auf die Beschreibung von Schritten oder Anweisungen konzentriert, die ausgeführt werden sollen, um eine Aufgabe zu erledigen. Im Wesentlichen wird der Computer als eine Abfolge von Anweisungen angesehen, die in einer festgelegten Reihenfolge ausgeführt werden, um ein gewünschtes Ergebnis zu erzielen. @@ -117,13 +119,10 @@ Diese Regeln schreiben vor, welche Art von Daten in Variablen gespeichert werden - ***Dynamisch typisierte Sprachen:*** Hier erfolgt die Überprüfung der Datentypen zur Laufzeit, während das Programm ausgeführt wird. Entwickler müssen in der Regel keine expliziten Datentypen für Variablen angeben, und die Datentypen können sich zur Laufzeit ändern. -**b) Beispiel und Vorteile** - -Beispiele für ***statisch typisierte Programmiersprachen sind C, Java und C++,*** +**b) Beispiel** + C, Java und C++, -während Beispiele für ***dynamisch typisierte Programmiersprachen Python, JavaScript und Ruby*** sind. -Typisierte Programmiersprachen bieten den Vorteil, dass sie dazu beitragen, Fehler frühzeitig im Entwicklungsprozess zu erkennen und die Robustheit und Zuverlässigkeit von Software zu verbessern. #### **7) typenlose Programmiersprachen** **a) Resumé** @@ -137,7 +136,7 @@ Im Wesentlichen erlauben sie mehr Flexibilität bei der Verwendung von Variablen Beispiele für typenlose ***Programmiersprachen sind JavaScript und PHP***. Während sie in einigen Fällen bequem und flexibel sind, erfordert die Verwendung typenloser Sprachen oft sorgfältige Prüfung und Validierung, um unerwartete Probleme aufgrund von Datentypkonvertierungen oder Inkompatibilitäten zu vermeiden. #### **8) Prinzipien der Programmierung** -##### **A) SOLID** +##### **| SOLID** - **S**eparations of Concern = *Eine Klasse sollte nur eine einzige Verantwortung haben. Das bedeutet, dass sie nur für eine bestimmte Aufgabe oder Funktion zuständig sein sollte. Wenn eine Klasse zu viele Verantwortlichkeiten hat, wird der Code schwerer wartbar und erweiterbar.* - **O**pen/ Closed principle = *Softwareeinheiten (Klassen, Module, usw.) sollten offen für Erweiterung, aber geschlossen für Modifikation sein. Das bedeutet, dass Sie neuen Code hinzufügen können, um die Funktionalität zu erweitern, ohne den bestehenden Code ändern zu müssen.* @@ -148,7 +147,7 @@ Beispiele für typenlose ***Programmiersprachen sind JavaScript und PHP***. Wäh - **D**ependency Inversion Principle = *Abhängigkeiten zwischen Modulen oder Klassen solletn so gestaltet sein , dass höherstufige Module nicht von niedrigerstufigen Modulen abhängen, sondern beide von abstrakten Schnittstellen oder Abstraktionen abhängen. Dies fördert die Entkopplung und Flexibilität im Code.* -##### **B) STUPID** +##### **|| STUPID** - **S**ingleton = *Das Prinzip behauptet, dass das Verwenden von Singleton-Objekten, bei denen es nur eine Instanz einer Klasse gibt, oft zu starren und schwer testbaren Designs führen kann. Singleton wird oft als Anti-Pattern angesehen, wenn es missbräuchlich verwendet wird.* - **T**ight Coupling = *Dies bezieht sich auf eine enge Kopplung zwischen Klassen, bei der Änderungen in einer Klasse zu weitreichenden Auswirkungen auf andere Klassen führen. Eine zu starke Kopplung kann die Wartbarkeit des Codes erschweren.* @@ -160,15 +159,21 @@ Beispiele für typenlose ***Programmiersprachen sind JavaScript und PHP***. Wäh - **I**ndescriptive Naming = *Aussagekräftige Bezeichnungen für Variablen, Methoden und Klassen sind wichtig, um den Code verständlicher und wartbarer zu machen. Wenn Bezeichnungen unspezifisch oder unverständlich sind, wird der Code schwer zu verstehen* - **D**uplication. +### **B) Erkenntnis** -### Wiederholung - -Zusammenfassend sind die ***SOLID-Prinzipien*** Leitlinien für eine gute Softwarearchitektur, während das ***STUPID-Prinzip*** eine humorvolle Art ist, auf schlechte Praktiken hinzuweisen. +für unsere Gruppearbeit ist sind die ***SOLID-Prinzipien*** gut geeignet. es sind Leitlinien für eine gute Softwarearchitektur während das ***STUPID-Prinzip*** eine humorvolle Art ist, auf schlechte Praktiken hinzuweisen. Entwickler sollten die SOLID-Prinzipien beachten, um robuste und wartbare Software zu erstellen, und gleichzeitig die im STUPID-Prinzip genannten Probleme vermeiden. -## Hausaufgabe zur SU03 (07.11.2023) -### Lernziel +### **C) Wiederholung** +Eine typisierte Programmiersprache ist eine Programmiersprache, die strenge Regeln für die Verwendung von Datentypen in Programmen festlegt. + +Typisierten Programmiersprachen müssen Variablen einen spezifischen Datentyp haben, und es werden Überprüfungen durchgeführt, um sicherzustellen, dass Datentypen korrekt verwendet werden. + +## + +> ## **Hausaufgabe zur SU03 (07.11.2023)** +### **A) Lernziel** - **1) Entwurfsmuster** - **Erzeugungsmuster:** es sind Entwurfsmuster in der Softwareentwicklung, die sich auf die Instanziierung von Objekten konzentrieren. @@ -182,11 +187,6 @@ Entwickler sollten die SOLID-Prinzipien beachten, um robuste und wartbare Softwa Ihr Hauptziel besteht darin, die Kommunikation und Zusammenarbeit zwischen Objekten so zu gestalten, dass sie flexibel, erweiterbar und wartbar sind. - Beispiele für Verhaltensmuster sind: - * ***Das Beobachter-Muster***, das eine Abhängigkeit zwischen Objekten etabliert und sie bei Änderungen benachrichtigt. - * ***Das Strategie-Muster***, das Algorithmen in austauschbaren Strategien kapselt. - * ***Das Befehlsmuster***, das Befehle als Objekte behandelt, um Aktionen zu parametrisieren und zu verwalten. - - **2) Intergrated Development Entvironment** @@ -194,12 +194,21 @@ Eine Integrated Development Environment (IDE) ist eine Software-Suite, die versc Eine IDE bietet normalerweise einen Texteditor zum Schreiben von Code, einen Compiler oder Interpreter zum Ausführen des Codes, Debugging-Tools zur Fehlerbehebung, und oft auch Funktionen für Versionskontrolle, Build-Automatisierung, und andere unterstützende Tools. -### Erkenntnis +### **B) Erkenntnis** ***Die Entwursmuster*** sind bewährte Lösungen für häufig auftretende Probleme, und ihre Anwendung in unseren Projektarbeit kann dazu beitragen, den Code besser zu strukturieren, die Wartbarkeit zu verbessern und die Flexibilität zu erhöhen. -Es ist wichtig zu beachten, dass Entwurfsmuster Werkzeuge sind, keine fertigen Lösungen, und ihre Anwendung erfordert ein Verständnis der spezifischen Anforderungen des Projekts ***was IDE betrifft***,Ihre Hauptziele sind Effizienz und Produktivität bei der Softwareentwicklung und Projektarbeit zu fördern, indem sie Entwicklern eine zentrale Umgebung für alle Entwicklungsaktivitäten bietet. Dies umfasst das Schreiben, Testen, Debuggen und Bereitstellen von Code. Bsp: Visual Studio -### Wiederholung + + +### **C) Wiederholung** + +Eine Eingentschaft von Erzeugungsmuster ist ***Singleton-Muster:*** er gewährleistet, dass eine Klasse nur eine einzige Instanz hat und bietet einen globalen Zugriffspunkt darauf. + +***Adapter-Muster*** ist ein Strukturmuster, die ermöglicht die Zusammenarbeit zwischen Schnittstellen, die ansonsten nicht kompatibel sind. + +Ein Beispiel für Verhaltensmuster ist ***Das Beobachter-Muster***, das eine Abhängigkeit zwischen Objekten etabliert und sie bei Änderungen benachrichtigt. + +