diff --git a/Lerntagebuch.md b/Lerntagebuch.md index 0256d57..5af204d 100644 --- a/Lerntagebuch.md +++ b/Lerntagebuch.md @@ -16,9 +16,8 @@ Da er seine Fachwissen, seine Prinzipien, Methode und Richtlinien als Werkzeuge Seine geistige Freiheit, neue anwendbare Algorithmen zu finden, um Bedürfnisse zu lösen, versetzt ihn ebenfalls in die Position eines Künstlers. - -## **Hausaufgabe zur SU02(31.10.2023)** -### **A) Lernziel** +## Hausaufgabe zur SU02(31.10.2023) +### A) Lernziel - Imperative Programmierung - Deklarative Programmierung - Prozedurale Programmierung @@ -28,115 +27,15 @@ Seine geistige Freiheit, neue anwendbare Algorithmen zu finden, um Bedürfnisse - typenlose programmiersprachen - Prinzipen der Programmierung -#### **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. -###### Beispiel -Ein Beispiel für imperatives Programmieren in einer alltäglichen Programmiersprache ist C. In imperativen Sprachen liegt der Schwerpunkt darauf, den Computer "Schritt für Schritt" anzuweisen, wie er eine bestimmte Aufgabe erledigen soll -- Koch Rezepte, Prozess-Checklisten - -#### **2) Deklarative Programmmierung** -##### a) Resume -Die deklarative Programmierung ist ein Programmierparadigma, bei dem der Fokus auf der Beschreibung dessen liegt, "was" erreicht werden soll, anstelle von "wie" es erreicht werden soll. -Die deklarative Programmierung legt den Schwerpunkt auf die Spezifikation des gewünschten Ergebnisses, und der Computer bestimmt, wie dieses Ergebnis erreicht wird. - -**b) einige Merkmale** - -***1.Datenorientiert:*** In der deklarativen Programmierung stehen die Daten und ihre Beziehungen im Mittelpunkt. Es werden oft Datenmodelle und Strukturen verwendet, um Beziehungen zwischen verschiedenen Elementen festzulegen. - -***2.Abstraktion:*** Abstraktion ist ein wichtiges Konzept. Es wird vermieden, sich in technischen Einzelheiten zu verlieren, und stattdessen werden abstrakte Modelle und Konzepte verwendet, um Aufgaben zu beschreiben. - -***3.Deklarative Sprachen:*** Die deklarative Programmierung wird oft in speziellen Programmiersprachen oder mit bestimmten Konstrukten in allgemeinen Programmiersprachen umgesetzt. Beispiele hierfür sind SQL (für die Datenbankabfrage), HTML (für die Beschreibung von Webseiten) und Prolog (für logische Programmierung). - -***4.Automatische Optimierung:*** In deklarativen Sprachen kümmert sich der Computer um die Optimierung des Codes, um das gewünschte Ergebnis auf effiziente Weise zu erzielen. Der Programmierer muss sich weniger um die Details der Implementierung kümmern. -##### c) Beispiel und Vorteile -Ein gutes Beispiel für deklaratives Programmieren ist ***SQL (Structured Query Language)***, das für die Abfrage von Datenbanken verwendet wird. In SQL gibt der Entwickler an, welche Daten aus der Datenbank abgefragt werden sollen, und die Datenbank-Engine entscheidet, wie die Daten effizient abgerufen werden. -Die deklarative Programmierung erleichtert oft die Entwicklung und Wartung von Code und fördert die Abstraktion und Modularität. - -#### **3) Prozedurale Programmierung** -**a) Resumé** - -Die prozedurale Programmierung ist ein Programmierparadigma, bei dem der Code in Funktionen oder Prozeduren organisiert ist, die eine Abfolge von Anweisungen enthalten. Im Wesentlichen wird das Programm in Teile aufgeteilt, die bestimmte Aufgaben ausführen, und diese Teile werden sequenziell ausgeführt. - -**b) Merkmale** -- ***Prozeduren:*** In der prozeduralen Programmierung sind Prozeduren oder Funktionen zentral. Diese Prozeduren enthalten eine Gruppe von Anweisungen, die eine bestimmte Aufgabe erledigen. Durch die Verwendung von Prozeduren kann Code wiederverwendet und besser organisiert werden. - -- ***Variablen:*** Die prozedurale Programmierung verwendet oft globale und lokale Variablen, um Daten zu speichern und zwischen Prozeduren auszutauschen. - -- ***Kontrollstrukturen:*** Die prozedurale Programmierung verwendet Kontrollstrukturen wie Schleifen (for, while) und Verzweigungen (if, else), um den Ablauf des Programms zu steuern. - -- ***Sequenzielle Ausführung:*** Die Anweisungen in den Prozeduren werden sequenziell, von oben nach unten, ausgeführt. - -**c) Beispiel und Vorteile** - -Ein bekanntes Beispiel für die prozedurale Programmierung ist ***die Programmiersprache C***. -In der prozeduralen Programmierung wird der Code in gut strukturierte Funktionen oder Prozeduren aufgeteilt, die spezifische Aufgaben erledigen. Dieses Paradigma ist weniger abstrakt und mehr auf die Aufteilung des Codes in logische Abschnitte ausgerichtet, um die Lesbarkeit und Wartbarkeit zu verbessern. - -#### **4) Objektorientierte Programmierung** -**a) Resumé** - -Die objektorientierte Programmierung (OOP) ist ein Programmierparadigma, bei dem der Fokus auf der Modellierung von Daten und der Interaktion zwischen diesen Datenobjekten liegt. Kurz gesagt, dreht sich die OOP um Objekte, die Instanzen von Klassen sind, und diese Objekte haben Eigenschaften (Attribute) und Verhalten (Methoden) - -**b) Merkmale** -- ***Klassen und Objekte:*** In der OOP werden Datenstrukturen in Klassen definiert, die als Baupläne für die Erstellung von Objekten dienen. Objekte sind konkrete Instanzen dieser Klassen und repräsentieren reale oder abstrakte Entitäten. - -- ***Verkapselung:*** OOP fördert die Verkapselung, bei der Daten und die Methoden, die sie verarbeiten, in Objekten zusammengefasst und vor äußeren Einflüssen geschützt werden. Nur bestimmte Methoden können auf die internen Daten eines Objekts zugreifen. - -- ***Vererbung:*** Die Vererbung ermöglicht die Erstellung von neuen Klassen, die Eigenschaften und Verhalten von bestehenden Klassen erben. Dies fördert die Wiederverwendbarkeit von Code und die Organisation von Klassen in Hierarchien. - -- ***Polymorphie:*** Polymorphie ermöglicht es, dass verschiedene Objekte, die von unterschiedlichen Klassen abgeleitet sind, denselben Methodennamen verwenden können, um unterschiedliche Implementierungen für diese Methoden zu haben. Dies erleichtert den flexiblen Umgang mit verschiedenen Objekttypen. - -- ***Nachrichtenbasierter Ansatz:*** In der OOP kommunizieren Objekte miteinander, indem sie Nachrichten senden und empfangen. Dies fördert die Modularität und Flexibilität im Design. - -**c) Beispiel und Vorteile** - -Ein bekanntes Beispiel für OOP ist die ***Programmiersprache Java.*** - -In der objektorientierten Programmierung wird der Code in Klassen organisiert, die Attribute (Daten) und Methoden (Funktionen) enthalten, um Objekte zu erstellen und mit ihnen zu interagieren. OOP erleichtert die Modellierung komplexer Systeme, indem es Konzepte und Entitäten aus der realen Welt in den Code überträgt. - -#### **5) Funktionale Programmierung** -**a) Resumé** - -Die funktionale Programmierung ist ein Programmierparadigma, bei dem der Fokus auf der Verwendung von Funktionen als grundlegender Baustein der Softwareentwicklung liegt. - -**b) Beispeil und Vorteile** - -Ein bekanntes Beispiel für funktionale Programmierung ist ***die Programmiersprache Haskell, C++, Scala.*** - -Die funktionale Programmierung fördert das Schreiben von Code, der leichter zu verstehen, zu testen und zu warten ist, da er weniger komplexe Zustände und Seiteneffekte aufweist. - -Dieses Paradigma ist in Bereichen wie parallelem und nebenläufigem Computing sowie in der Verarbeitung großer Datenmengen besonders nützlich. - -#### **6) typisierte Programmiersprache** -**a) Resumé** - -Eine typisierte Programmiersprache ist eine Programmiersprache, die strenge Regeln für die Verwendung von Datentypen in Programmen festlegt. - -Diese Regeln schreiben vor, welche Art von Daten in Variablen gespeichert werden kann und wie diese Daten verarbeitet werden können. Kurz gesagt, in typisierten Programmiersprachen müssen Variablen einen spezifischen Datentyp haben, und es werden Überprüfungen durchgeführt, um sicherzustellen, dass Datentypen korrekt verwendet werden. - -**b) Merkmale** -- ***Statisch typisierte Sprachen:*** In diesen Sprachen werden Datentypen zur Kompilierungszeit überprüft, bevor das Programm ausgeführt wird. Der Entwickler muss explizit den Datentyp für jede Variable deklarieren, und es werden Fehler gemeldet, wenn Datentypen nicht korrekt verwendet 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** - C, Java und C++, - - - -#### **7) typenlose Programmiersprachen** -**a) Resumé** - -Typenlose Programmiersprachen, auch als dynamische Typisierung oder schwache Typisierung bezeichnet, sind Programmiersprachen, die weniger strenge Anforderungen an die Verwendung von Datentypen in Programmen stellen. - -Im Wesentlichen erlauben sie mehr Flexibilität bei der Verwendung von Variablen und operieren oft ohne strikte Überprüfung der Datentypen zur Kompilierungszeit - -**b) Beispiel und Vorteile** +### B) Erkenntnis +Nützlichkeit den Prinzipien der Programmierung für unsere Gruppearbeit. +der ***SOLID-Prinzip*** ist gut geeignet. da es vermietteln die Leitlinien für eine gute Softwarearchitektur während das ***STUPID-Prinzip*** eine humorvolle Art ist, auf schlechte Praktiken hinzuweisen. -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. +Entwickler sollten die SOLID-Prinzipien beachten, um robuste und wartbare Software zu erstellen, und gleichzeitig die im STUPID-Prinzip genannten Probleme vermeiden. -#### **8) Prinzipien der Programmierung** -##### **| SOLID** +### C) Wiederholung +#### Prinzipien der Programmierung +##### 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.* @@ -147,59 +46,32 @@ 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.* -##### **|| 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.* - -- **U**ntestability = *Wenn Code schwer zu testen ist, wird dies als ein schlechtes Design betrachtet. Testen ist ein wichtiger Bestandteil der Softwareentwicklung, und schlecht getesteter Code kann zu Fehlern und unerwünschtem Verhalten führen.* - -- **P**remature Optimization = *Das vorzeitige Optimieren des Codes, bevor es tatsächlich notwendig ist, kann zu komplexem und schwer verständlichem Code führen. Es wird empfohlen, die Optimierung auf spätere Phasen der Entwicklung zu verschieben, wenn klar ist, welche Teile des Codes tatsächlich verbessert werden müssen.* - -- **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** - -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. - -### **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. - Ihr Hauptzweck besteht darin, die Art und Weise zu steuern, wie Objekte erstellt und zusammengesetzt werden, um sicherzustellen, dass der Prozess flexibel, effizient und unabhängig von der Systemkonfiguration ist. +#### Entwurfsmuster +- Erzeugungsmuster sind Entwurfsmuster in der Softwareentwicklung, die sich auf die Instanziierung von Objekten konzentrieren. + Ihr Hauptzweck besteht darin, die Art und Weise zu steuern, wie Objekte erstellt und zusammengesetzt werden, um sicherzustellen, dass der Prozess flexibel, effizient und unabhängig von der Systemkonfiguration ist. - - **Strukturmuster:** - ES sind Entwurfsmuster in der Softwareentwicklung, die sich auf die Organisation von Klassen und Objekten in größeren Strukturen konzentrieren. Ihr Ziel ist es, die Komposition von Klassen und Objekten so zu gestalten, dass sie flexibel, wiederverwendbar und erweiterbar sind. +- Strukturmuster: + ES sind Entwurfsmuster in der Softwareentwicklung, die sich auf die Organisation von Klassen und Objekten in größeren Strukturen konzentrieren. Ihr Ziel ist es, die Komposition von Klassen und Objekten so zu gestalten, dass sie flexibel, wiederverwendbar und erweiterbar sind. - - **Verhaltensmuster:** - ES sind Entwurfsmuster in der Softwareentwicklung, die sich auf die Definition von Algorithmen und Aufgabenverteilungen zwischen Objekten konzentrieren. +- Verhaltensmuster: + ES sind Entwurfsmuster in der Softwareentwicklung, die sich auf die Definition von Algorithmen und Aufgabenverteilungen zwischen Objekten konzentrieren. - Ihr Hauptziel besteht darin, die Kommunikation und Zusammenarbeit zwischen Objekten so zu gestalten, dass sie flexibel, erweiterbar und wartbar sind. + Ihr Hauptziel besteht darin, die Kommunikation und Zusammenarbeit zwischen Objekten so zu gestalten, dass sie flexibel, erweiterbar und wartbar sind. - -- **2) Intergrated Development Entvironment** +#### Intergrated Development Entvironment Eine Integrated Development Environment (IDE) ist eine Software-Suite, die verschiedene Tools und Funktionen für die Softwareentwicklung in einem einzigen integrierten Paket bereitstellt. 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. ### 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. - - -***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. +- Nutzlichkeit in unserer Gruppearbeit: + - Die Entwursmustersind 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. + - 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 @@ -211,6 +83,7 @@ Eine Eingentschaft von Erzeugungsmuster ist ***Singleton-Muster:*** er gewährle Ein Beispiel für Verhaltensmuster ist das ***Beobachter-Muster***, das eine Abhängigkeit zwischen Objekten etabliert und sie bei Änderungen benachrichtigt. + ## Hausaufgabe zur SU04 (14.11.2023) ### A) Lernziel - Warum Git? @@ -223,7 +96,6 @@ Ein Beispiel für Verhaltensmuster ist das ***Beobachter-Muster***, das eine Abh - Merge oder Rebase? - vorteile und Nachteile. - ### B) Erkenntnis Git ist ein verteiltes Versionskontrollsystem, das die Zusammenarbeit und Verfolgung von Änderungen in Softwareprojekten ermöglicht. @@ -232,12 +104,12 @@ Vorteile für unsere Gruppenarbeit: - Es erlaubt Teams, parallel an einem Code zu arbeiten, Änderungen zu verwalten, Zweige zu erstellen, um neue Funktionen zu entwickeln, und diese dann in den Hauptcode zu integrieren, ohne die Stabilität des Projekts zu beeinträchtigen. ### C) Wiederholung - Warum sollten die Commits klein sein? - Es verbessert die Fähigkeit von Git, Konflikte automatisch zu lösen. - Es verbessert die Fähigkeit, Konflikte manuell zu lösen. - Die Änderungen sind in der Historie leichter zu finden. + ## Hausaufgabe zur SU05 (28.11.2023) ### A) Lernziel #### Kooperation in Source Code Management System (SCM) @@ -296,6 +168,7 @@ Role des Source Code Management Systems: - Zusammenführen parallel geänderter Dateien - ermöglicht parallele Entwicklung verschiedener Features. + ## Hausaufgabe zur SU05 (05.12.2023) ### A) Lernziel #### Kooperation Projekt Management (PM) @@ -337,6 +210,36 @@ Role des Source Code Management Systems: - geringe Konstrukten - Schätzverfahren - Prinzipien + - Schätzung nach Aufwandspunkten (story points) + - keine planbaren Störfaktoren + - automatisiertes Testen und Refactoring immer einrechnen + - Aufgaben im möglichst kleine Teilaufgaben zerlegen + - möglichst spät schätzen + - Schätzverfahren-Beispiele + - Drei Werte Weg: erwartet; minimun; maximum + - Historischer Vergleich: + - eigene Aufgaben + - Aufgaben der kollegen + - ähnliche Komplexität + - ähnliche Punktzahl +- Dokumentation + - Klassisch: Lastenheft, Pflichtenheft, Systembeschreibung + - Agil: User Stories, Ticketsysteme ### B) Erkenntnis +Projektmanagement ist die Kunst, Ressourcen, Zeit und Aufgaben effektiv zu organisieren, um ein bestimmtes Projektziel zu erreichen. Es umfasst Planung, Koordination, Überwachung und Steuerung von Projekten, um sicherzustellen, dass sie termingerecht, im Budgetrahmen und gemäß den Zielen abgeschlossen werden. + +es gibt verschiedene Methoden Projektmanagementzu steuern. Eine beliebte Methode ist SCRUM. +SCRUM ist ein agiles Projektmanagement-Framework +seine Nutzlichkeitfür unsere Gruppearbeit: +- Es betont Flexibilität, Teamarbeit und kontinuierliche Verbesserung. +- Er ermöglicht eine adaptive Planung und fördert die kontinuierliche Anpassung an sich ändernde Anforderungen während des Entwicklungsprozesses. +- Das regelmäßiges Treffen, kurzen und täglichen Besprechungen kann uns helfen, den Fortschritt unser Sprint zu besprechen und Hindernisse zu beseitigen. + ### C) Wiederholung +Projektmanagement-Modelle: Agile Modelle +- fixiert Aufwand und Zeit, statt Umfang +- Menschen und Interaktionen sind wichtiger als Prozesse und Werkzeuge +- Zusammenarbeit mit dem Kunden ist wichtiger als die Vertragsverhandlung. +- Reagieren auf Veränderungen ist ein Bestandteil des Prozesses. +