Präsentation_WDS224_Programmierung_I_Version_StandDritterVorlesung PDF
Document Details
Uploaded by DecentAmber4217
Duale Hochschule Baden-Württemberg
2025
DHBW Ravensburg
Mario Pfob
Tags
Summary
This is a presentation on programming fundamentals, specifically for the 1st semester of the Data Science & KI program at DHBW Ravensburg, in Germany. The presentation, created on January 16th, 2025, covers topics relevant to programming fundamentals, like organizing and structuring code and introducing important concepts.
Full Transcript
Duale Hochschule Baden-Württemberg Data Science & KI Grundlagen der Programmierung 1. Semester Dozent: Mario Pfob Version: 16. Januar 2025 www.ravensburg.dhbw.de Organisatorisch Kurztest: 20 Punkte, 25 Minuten; 23. Januar Am PC (Moodle) mit Fragen, Aufgaben, usw. Programmentwurf: 80 P...
Duale Hochschule Baden-Württemberg Data Science & KI Grundlagen der Programmierung 1. Semester Dozent: Mario Pfob Version: 16. Januar 2025 www.ravensburg.dhbw.de Organisatorisch Kurztest: 20 Punkte, 25 Minuten; 23. Januar Am PC (Moodle) mit Fragen, Aufgaben, usw. Programmentwurf: 80 Punkte, 60 Minuten; 11. März Am PC (Entwicklungsumgebung) mit Coding-Aufgaben Bücher Learn Java Fundamentals: DHBW-RV Bibliothek Java in a Nutshell: https://www.oreilly.com/library/view/java-in-a/9781098130992/ Grundkurs Programmieren in Java: DHBW-RV Bibliothek 3 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Kennenlernen - Ich Mario, 24 Jahre, Bad Waldsee B.Sc. – Wirtschaftsinformatik (DHBW RV) M.A. – Media and Data-driven Business (DHBW CAS) Lead Analyst, SV Gruppe Hobbies: Klavier, Geige, Oboe, Akkordeon, Kino 4 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Warum Programmieren? Breites Jobspektrum Fördert logisches Denken 5 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Warum Java? Plattformunabhängigkeit Community und umfangreiches Ökosystem Verlässlichkeit und Skalierbarkeit 6 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Warum Java? 7 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Java & Python Werden nebeneinander eingesetzt Java: Stabilität → Software Development Python: Einfachheit → Data Science 8 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Java & Python 9 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Java & Python 10 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Einführung in die Programmierung Aspekte des Programmierens 12 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Aspekte des Programmierens – Quellcode Der Quellcode ist die in einer Programmiersprache geschriebene textuelle Repräsentation eines Pro- gramms. Entwickler nutzen den Quellcode, um Algorithmen und logische Anweisungen zu formulieren, die vom Computer interpretiert und ausgeführt werden. Der Quellcode enthält die gesamte Logik der Anwendung und dient als Basis für die Kompilation oder Interpretation durch das System. Gut strukturierter und verständlicher Quellcode ist essenziell, nicht nur für die aktuelle Entwicklung, sondern auch für zukünftige Wartung und Erweiterung des Programms. Dies erfordert klare Namenskonventionen, konsistente Formatierung und Kommentierung. 13 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Aspekte des Programmierens – Programmierstil Der Programmierstil bezieht sich auf die Art und Weise, wie der Quellcode organisiert und geschrieben wird. Ein guter Programmierstil zielt darauf ab, die Lesbarkeit & Wartbarkeit des Codes zu verbessern. Dazu gehört der sinnvolle Einsatz von Einrückungen, eine klare und konsistente Benennung von Variablen und Funktionen sowie der Verzicht auf unnötige Komplexität. Ein konsistenter Programmierstil hilft dabei, Fehler zu vermeiden und macht es anderen Entwicklern einfacher, den Code zu verstehen und daran weiterzuarbeiten. Der Stil variiert oft je nach Programmiersprache und Entwicklerumgebung, doch existieren allgemeine Richtlinien, die für alle Sprachen gelten. 14 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Aspekte des Programmierens – Coding Conventions Coding Conventions sind standardisierte Regeln für das Schreiben von Quellcode, welche die Lesbarkeit unabhängig vom individuellen Programmierstil verbessern. Sie erleichtern damit die Zusammenarbeit im Team und vereinfachen langfristig die Wartung des Codes Wichtige Aspekte Namenskonventionen: Regeln für die Benennung von Variablen, Klassen, Funktionen und Dateien. Formatierung: Einheitliche Einrückungen, Leerzeilen, Kommentarstile und maximale Zeilenlänge. Programmierlogik: Standardisierter Einsatz von Kontrollstrukturen wie Schleifen & Bedingungen. Java Coding Conventions: https://www.oracle.com/technetwork/java/codeconventions-150003.pdf 15 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Aspekte des Programmierens – Kompilation & Ausführung 16 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Aspekte des Programmierens – Kompilation & Ausführung Ein Programm kann durch Kompilation oder Interpretation ausgeführt werden. Compiler: Übersetzt Quellcode vollständig in Maschinencode oder Bytecode (Java), wodurch das Programm wiederholt ohne erneute Übersetzung ausgeführt werden kann. Interpreter: Übersetzt Quellcode Zeile für Zeile in Maschinencode und führt ihn direkt aus. Wird von Sprachen wie Python genutzt und bietet schnellere Tests, jedoch langsamere Ausführung. VM: Die JVM ist ein Beispiel für eine VM, die plattformunabhängige Ausführung von Bytecode ermöglicht und die WORA-Fähigkeit von Java unterstützt. Deep Dive: A Deep Dive into JVM Start-Up 17 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Aspekte des Programmierens – Kompilation & Ausführung 18 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Aspekte des Programmierens – Testen Testen ist ein Bestandteil der Softwareentwicklung, der sicherstellt, dass Programme erwartungsgemäß funktionieren und Fehler frühzeitig erkannt werden. Kontinuierliches Testen verbessert die Softwarequalität und erhöht die Stabilität. Testarten (Auswahl): Unit-Tests: Überprüfen isolierte einzelne Codeeinheiten wie Methoden oder Funktionen. Integrationstests: Testen das Zusammenspiel verschiedener Systemkomponenten. Systemtests: Validieren das gesamte System hinsichtlich (nicht-)funktionaler Anforderungen. Automatisierung: Frameworks wie JUnit erleichtern das Schreiben & Automatisieren von Tests. 19 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Aspekte des Programmierens – Debugging Debugging bezeichnet die systematische Fehlersuche & -behebung im Quellcode. Entwickler nutzen Debugging-Tools, um Programme schrittweise auszuführen, den Programmablauf zu analysieren und den Zustand von Variablen zu überprüfen. Breakpoints: Ermöglichen das Stoppen der Programmausführung an bestimmten Stellen, um Fehlerquellen gezielt zu untersuchen und Codeprobleme zu verstehen. Ergänzend: Log-Dateien & Fehlermeldungen liefern zusätzliche Hinweise zur Identifikation und Analyse von Fehlern. 20 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Java Runtime Environment 21 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Java Runtime Environment Das JRE bietet die Laufzeitumgebung, die erforderlich ist, um Java-Anwendungen auszuführen. Es umfasst die JVM, Bibliotheken und weitere Ressourcen, die Java plattformunabhängig machen. Kernkomponenten: JVM: Führt Bytecode aus und übersetzt ihn in plattformspezifischen Maschinencode. Class Loader: Lädt Klassen dynamisch während der Laufzeit. Garbage Collector: Automatisiert die Speicherverwaltung, verhindert Speicherlecks. Standardbibliothek: Bietet vorgefertigte Klassen und Methoden für typische Programmieraufgaben. 22 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Java Development Kit Das JDK ist eine Sammlung von Werkzeugen & Bibliotheken für die Entwicklung, Kompilierung und Ausführung von Java-Anwendungen. Es ist die Grundlage für alle Java-IDEs. Zentrale Bestandteile: Java Compiler (javac): Übersetzt Quellcode (.java) in Bytecode (.class) + prüft auf Syntaxfehler. Java Debugger (JDB): Ermöglicht schrittweises Debugging & Überwachung zur Fehlerbehebung. Weitere Tools: z.B. javadoc (Dokumentationserstellung) & javap (Disassemblieren von Bytecode) Versionierung: Seit Java 11 alle 6 Monate. Alle 2 Jahre gibt es eine LTS-Version. Aktuell: JDK 23 Distributionen: Offiziell von Oracle; Open-Source-Alternative: OpenJDK 23 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg IDE 24 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg IDE – Eclipse Download: https://www.eclipse.org/downloads/packages/ 25 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg IDE – Visual Studio Code Download: https://code.visualstudio.com/ Anleitung für Java: https://code.visualstudio.com/docs/languages/java 26 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg IDE – IntelliJ Download: https://www.jetbrains.com/idea/download/ Kostenlose Lizenz: https://www.jetbrains.com/community/education/#students/ 27 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Programmierparadigmen Programmierparadigmen sind grundlegende Ansätze zur Strukturierung und Organisation von Code. Sie beeinflussen die Art und Weise, wie Entwickler Probleme lösen, Software entwerfen und implementieren. 28 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Programmierparadigmen – Imperativ Das imperative Programmieren ist ein Paradigma, das sich darauf konzentriert, wie ein Programm seine Aufgaben ausführt. Es beschreibt die Schritte, die zur Lösung eines Problems erforderlich sind, und legt fest, wie der Programmablauf gesteuert wird. In Java wird imperatives Programmieren häufig in Kombination mit Kontrollstrukturen wie Schleifen und Bedingungen verwendet 29 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Programmierparadigmen – Deklarativ Im deklarativen Programmieren wird beschrieben, was erreicht werden soll, ohne detailliert anzugeben, wie dies geschehen soll. Dieses Paradigma konzentriert sich auf die Verwendung von Ausdrücken und Bedingungen, um das gewünschte Ergebnis zu erzielen. In Java zeigt sich deklaratives Programmieren häufig in der Verwendung von API-Funktionen und Datenbankabfragen (z.B. mit SQL) 30 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Programmierparadigmen – Funktional Funktionales Programmieren fokussiert sich auf die Anwendung und Komposition von Funktionen, wobei Zustandsveränderungen vermieden werden - fördern einen deklarativen Programmierstil. Java: Implementiert durch Lambda- Ausdrücke, höherwertige Funktionen, das Package java.util.function und die Stream-API (z. B. Filtern, Transformieren, Reduzieren von Daten). 31 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Programmierparadigmen – Objektorientiert Das objektorientierte Programmieren ist ein Paradigma, das die Strukturierung von Code um Objekte herum fördert. Objekte sind Instanzen von Klassen, die Daten (Attribute) und Verhalten (Methoden) kapseln. OOP bietet Konzepte wie Vererbung, Polymorphismus und Kapselung, die eine bessere Wiederverwendbarkeit und Wartbarkeit des Codes ermöglichen. 32 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Algorithmusbegriff Definition: Ein Algorithmus ist eine eindeutige, endliche und definierte Folge von Anweisungen zur Lösung eines spezifischen Problems. Algorithmen bilden den Rahmen für die Softwareentwicklung und sind für die Effizienz und damit die Leistungsfähigkeit eines Programms entscheidend. Algorithmen können in verschiedenen Programmierparadigmen umgesetzt werden, um spezifische Aufgaben zu bewältigen. Beispiel - Fibonacci-Algorithmus: Initialisiere die Werte a = 0 und b = 1 Berechne die nächste Zahl: c = a + b Aktualisiere: a = b, b = c Wiederhole Schritte 2 und 3 für die gewünschte Anzahl an Zahlen 33 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Grundlagen der Programmierung boolean kurzTest = true Syntax Beschreibt die Regeln für korrektes Schreiben von Programmen Java → streng typisiert, objektorientiert, fördert Lesbarkeit & Wartbarkeit Statements: Kleinste ausführbare Einheiten in Java, enden mit „;“, z.B. Variablenzuweisungen, Methodenaufrufe oder Kontrollstrukturen. Blöcke: Gruppieren mehrere Anweisungen mit „{}“ und definieren den Gültigkeitsbereich (Scope) von Variablen. 35 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Primitive Datentypen Primitive Datentypen bilden die grundlegenden Bausteine für die Verarbeitung von Daten in Java. Sie sind die einfachsten Datentypen und werden zur Darstellung grundlegender Informationen wie Zahlen, Zeichen und Wahrheitswerte verwendet. Im Gegensatz zu Objekten, sogenannten Referenztypen haben primitive Datentypen keine Methoden und sind nicht veränderbar (wird als immutable bezeichnet). 36 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Primitive Datentypen Datentyp Speichergröße Wertebereich byte 8 Bits -128 bis 127 short 16 Bits -32.768 bis 32.767 int 32 Bits -2.147.483.648 bis 2.147.483.647 long 64 Bits -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 float 32 Bits ca. 1.4E-45 bis 3.4028235E+38 double 64 Bits ca. 4.9E-324 bis 1.7976931348623157E+308 char 16 Bits Unicode-Zeichen (0 bis 65.535) boolean 1 Bit true oder false 37 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Primitive Datentypen – Wrapper Java bietet Mechanismen, die primitive Datentypen automatisch in ihre entsprechenden Wrapper- Klassen zu konvertieren und umgekehrt. Autoboxing: Automatische Umwandlung eines primitiven Typs in sein entsprechendes Wrapper-Objekt. Unboxing: Automatische Umwandlung eines Wrapper-Objekts in seinen primitiven Typ. 38 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Primitive Datentypen – Wrapper J. Friesen: "Wrapper classes convert primitive type- based values into objects that can be stored in container objects, such as objects created from the container types (ArrayList, TreeSet, HashMap, and so on) in Java’s Collections Framework" 39 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Main-Methode Die main-Methode ist der Einstiegspunkt jedes Java-Programms und eine der wichtigsten Komponenten der Sprache. Sie wird von der JVM aufgerufen, um die Ausführung eines Programms zu starten. 40 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Main-Methode – Aufbau Zugriffsmodifizierer `public`: Die Methode ist öffentlich, damit die JVM darauf zugreifen kann. Statische Eigenschaft `static`: Die Methode gehört zur Klasse selbst und nicht zu einer Instanz, da die JVM beim Programmstart keine Objekte erzeugt und die Methode direkt aufrufen muss. Rückgabewert `void`: Zeigt an, dass die main-Methode keinen Wert zurückgibt, sondern lediglich den Programmstartpunkt definiert und anschließend die Kontrolle an die JVM übergibt. Parameter `String[] args`: Das Argument ist ein Array von Zeichenketten, das Befehlszeilenargumente enthält. Können zur Laufzeit genutzt werden, um das Programm-Verhalten dynamisch zu beeinflussen. 41 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Main-Methode – Befehlszeilenargumente java CommandLineExample Se7en 42 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Einschub Command-Line Je nach Betriebssystem, JDK-Version und Verzeichnis-Struktur können sich Command-Line-Befehle für Java unterscheiden. Generell kann jedoch ein Java-Programm, dessen Klasse „Main“ heißt mit java Main aufgerufen werden. Liegt noch keine kompilierte Version vor, kann mit javac Main.java eine solche Datei erzeugt werden, anschließend kann das Programm ausgeführt werden. Sollte das Programm in einem Unterverzeichnis, z.B. „src“ liegen, sehen die Befehle wie folgt aus: javac src/Main.java und java -cp src Main Zur Vereinfachung wird während der Vorlesung auf die Funktionen der IDEs gesetzt. 43 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Erstelle ein Programm, das alle primitiven Datentypen in Java deklariert, initialisiert und deren Werte auf der Konsole ausgibt. 2. Vergleiche die Genauigkeit von float und double durch eine Berechnung, die Rundungsfehler demonstriert. 3. Implementiere die main-Methode eines Programms, das Eingaben über die Befehlszeile entgegennimmt und verarbeitet (z.B. Addition von zwei Zahlen). Verwende dabei gerne die Methode Integer.parseInt() 44 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Operatoren – Arithmetisch Operator Beschreibung + Addition - Subtraktion * Multiplikation / Division % Modulo (Rest) 45 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Operatoren – Relational Operator Beschreibung == Gleichheit != Ungleichheit > Größer als < Kleiner als >= Größer oder gleich Signed Right Shift >>> Unsigned Right Shift Einsatzzwecke u.a. Embedded System, Kryptographie, mathematische Programme *Logische Operatoren → Booleans ; bitweise Operatoren → Binärziffern 48 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Operatoren – Zuweisung Operator Beschreibung = Zuweisung += Addition und Zuweisung -= Subtraktion und Zuweisung *= Multiplikation und Zuweisung /= Division und Zuweisung %= Modulo und Zuweisung 49 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Operatoren – Inkrement & Dekrement Die Inkrement- (++) & Dekrementoperatoren (--) erhöhen oder verringern den Wert einer Variablen um eins. Sie können sowohl vor der Variablen - präfix - als auch danach - postfix- verwendet werden. 50 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Erstelle ein Programm, das zwei Zahlen definiert und die grundlegenden arithmetischen Operationen an diesen Zahlen durchführt. Zeige anschließend, wie Zuweisungsoperatoren verwendet werden. 2. Schreibe ein Programm, das zwei ganzzahlige Variablen definiert und mithilfe von Vergleichsoperatoren überprüft, ob eine der Zahlen größer, kleiner oder gleich der anderen ist. 3. Erstelle ein Programm, das drei boolean-Variablen definiert und mithilfe logischer Operatoren überprüft, ob mindestens zwei der Variablen den Wert true haben. 4. Erstelle ein Programm, das die Verwendung von Inkrement- & Dekrementoperatoren veranschaulicht. *Versuche bei Übung Nr. 2 und 3 ohne Verzweigungen (spätere Lerneinheit) auszukommen. 51 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Operatoren – Instanceof Der instanceof-Operator wird verwendet, um zu überprüfen, ob ein Objekt eine Instanz einer bestimmten Klasse oder eines Interfaces ist. Dies wird u.a. in der objektorientierten Programmierung verwendet, um die Typensicherheit zu gewährleisten. 52 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Verzweigungen If-Else-Verzweigungen sind ein zentrales Element in der Programmierung und ermöglichen die bedingte Ausführung von Code. Abhängig vom Ergebnis einer Bedingung - ob diese wahr (true) oder falsch (false) ist - wird ein bestimmter Programmabschnitt ausgeführt. 53 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Verzweigungen – if-Anweisung Die einfachste Form einer bedingten Verzweigung in Java ist die if-Anweisung. Sie führt einen Code- block nur dann aus, wenn die angegebene Bedingung erfüllt (true) ist. Andernfalls wird der Codeblock übersprungen. 54 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Verzweigungen – if-else-Verzweigung Die if-else-Verzweigung erweitert die if-Anweisung, indem sie eine Alternative bietet, wenn die Bedingung nicht wahr ist. Das bedeutet, dass ein alternativer Codeblock immer ausgeführt wird, wenn die Bedingung falsch ist. 55 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Verzweigungen – if-else-if-Kette Wenn mehrere Bedingungen nacheinander geprüft werden sollen, wird die if-else-if-Kette verwendet. Mit dieser Struktur können verschiedene Bedingungen nacheinander geprüft werden, und der erste Block, dessen Bedingung wahr ist, wird ausgeführt. 56 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Verzweigungen – Verschachtelung If-Else-Verzweigungen können auch verschachtelt werden, indem man if- oder if-else-Blöcke innerhalb anderer if- oder else-Blöcke platziert. Dies ermöglicht komplexere Entscheidungsstrukturen. 57 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg boolean kurzTest = true Verzweigungen – Ternärer Operator Java bietet eine kompakte Möglichkeit, einfache If-Else-Verzweigungen mit dem ternären Operator in einer Zeile auszudrücken. 58 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Implementiere ein Programm, das eine Zahl einliest und mittels eines if-Statements prüft, ob sie positiv, negativ oder null ist, und die entsprechende Meldung ausgibt. 2. Erstelle ein Programm, das Noten in Buchstabenwerte (A, B, C...) umwandelt, basierend auf Punktzahlen mit einer if-else-if-Kette. 3. Schreibe ein Programm, das die Zahlen von 1 - 100 ausgibt + dabei jede fünfte Zahl mit „Fizz“ ersetzt. 4. Implementiere ein Programm, die überprüft, ob eine gegebene Zahl eine Primzahl ist. 5. Schreibe ein Programm mit verschachtelten If-Else-Verzweigungen, das die maximale von drei Zahlen bestimmt. 6. Nutzen den ternären Operator, um zu evaluieren, ob eine Zahl gerade oder ungerade ist. *Aufgabe 3: Das Programm muss nicht alle Zahlen automatisch ausgeben. Die Variable kann hier manuell initialisiert werden. *Aufgabe 4: Wenn noch keine Schleifen-Kenntniss, dann die folgende Methode verwenden: BigInteger num1 = BigInteger.valueOf(13); num1.isProbablePrime(1); 59 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Switch-Statement Die switch-Anweisung ist eine Kontrollstruktur in Java, die es ermöglicht, eine Variable mit mehreren möglichen Werten zu vergleichen und basierend auf dem Wert einen bestimmten Codeblock auszuführen. Sie wird häufig verwendet, wenn mehrere Bedingungen nacheinander geprüft werden müssen und es zu umständlich oder unübersichtlich wäre, viele if-else-if-Anweisungen zu verwenden 60 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Switch-Statement – Syntax Ausdruck: Der Ausdruck, dessen Wert geprüft wird. In Java können dies die folgenden Daten-typen sein: int, short, char, byte (oder deren Wrapper-Typen), String (seit Java 7) oder eine Enumaration. case: Jeder case-Block enthält einen möglichen Wert für den Ausdruck. Wenn der Ausdruck den angegebenen Wert hat, werden die Anweisungen im entsprechenden case-Block ausgeführt. break: Beendet die switch-Anweisung, damit keine Anweisungen in den folgenden case-Blöcken ausgeführt werden. Findet die break-Anweisung nicht statt, werden alle nachfolgenden case-Blöcke ausgeführt - dieses Verhalten nennt man Fallthrough default: Wird ausgeführt, wenn keiner der vorherigen case-Blöcke zutrifft. Der default-Block ist optional 61 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Switch-Statement – Syntax 62 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Schreibe ein Programm, das dem Benutzer ein Menü mit verschiedenen Getränken (z. B. 1 = Wasser, 2 = Kaffee, 3 = Tee, 4 = Limonade) anzeigt. Der Benutzer gibt eine Zahl ein, und das Programm gibt den Namen des gewählten Getränks aus. Falls die Eingabe ungültig ist (z. B. 0 oder eine Zahl außerhalb des Menüs), soll eine Fehlermeldung erscheinen. Nutzer u.a. switch-Statements. 2. Schreibe ein Programm, das eine Schulnote (1 bis 6) einliest und mithilfe eines switch-Statements eine passende Beschreibung ausgibt (z. B. 1 = „Sehr gut“, 2 = „Gut“, 3 = „Befriedigend“ usw.). Für ungültige Eingaben soll eine entsprechende Fehlermeldung ausgegeben werden. 63 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Schleifen Schleifen sind Kontrollstrukturen in der Programmierung, die es ermöglichen, einen Block von Anweisungen wiederholt auszuführen, solange eine bestimmte Bedingung erfüllt ist. Java bietet mehrere Arten von Schleifen, die je nach Bedarf und Anwendungsfall verwendet werden können. 64 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Schleifen – for-Schleife Die for-Schleife wird verwendet, wenn die Anzahl der Wiederholungen bereits im Voraus bekannt ist: Initialisierung: Hier wird eine Zählvariable erstellt und initialisiert. Bedingung: Die Schleife wird so lange wiederholt, wie diese Bedingung wahr ist. Iteration: In jedem Durchlauf wird die Zählvariable aktualisiert 65 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Schleifen – while-Schleife Die while-Schleife wird verwendet, wenn die Anzahl der Wiederholungen nicht im Voraus bekannt ist und die Schleife so lange laufen soll, wie eine bestimmte Bedingung wahr ist 66 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Schleifen – do-while-Schleife Die do-while-Schleife ist ähnlich wie die while-Schleife, führt jedoch den Anweisungsblock mindestens einmal aus, bevor die Bedingung überprüft wird 67 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Schleifen – do-while-Schleife 68 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Schleifen – foreach-Schleife Die erweiterte for-Schleife, for-each-Schleife genannt, ist eine Schleife, die speziell für die Iteration über Arrays & Sammlungen (engl. Collections) in Java entwickelt wurde. Sie ist besonders nützlich, wenn alle Elemente in einer Sammlung durchlaufen werden, ohne einen Index verwenden. 69 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Schleifen – break und continue break: Beendet die Schleife sofort, unabhängig von der Bedingung. continue: Überspringt den aktuellen Durchlauf der Schleife und fährt mit dem nächsten Durchlauf fort. 70 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Schreibe ein Programm, das die einfache for-Schleife verwendet, um die ersten 10 Fibonacci-Zahlen zu berechnen. 2. Erstelle ein Programm, das eine while-Schleife verwendet, um eine Zahl so lange zu halbieren, bis sie kleiner als 1 ist. 3. Implementiere eine do-while-Schleife, um ein Passwort von einem Benutzer abzufragen, bis es korrekt eingegeben wird. 4. Implementiere ein Programm, das die Fakultät einer Zahl mit einer for- & while-Schleife berechnet. 5. Schreiben ein Programm, das die Verwendung von break und continue in Schleifen zeigt, z.B. um Zahlen in einem Bereich zu überspringen. 71 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Datenstrukturen Datenstrukturen sind essenzielle Werkzeuge in der Programmierung, die es ermöglichen, Daten effizient zu speichern, zu organisieren und darauf zuzugreifen. In Java gehören Arrays & ArrayLists zu den grundlegendsten und am häufigsten verwendeten Datenstrukturen. 72 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Datenstrukturen – Arrays Ein Array ist eine Datenstruktur, die eine feste Anzahl von Elementen desselben Typs enthält. Es wird zur Speicherung einer festgelegten Anzahl von Werten verwendet, die über einen Index angesprochen werden können. 73 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Datenstrukturen – ArrayLists Die ArrayList ist eine flexible, dynamische Datenstruktur, die Teil der Java Collections Framework ist. Im Gegensatz zu Arrays kann ihre Größe dynamisch angepasst werden, was sie für Anwendungen geeignet macht, bei denen die Anzahl der zu speichernde Elemente nicht im Voraus bekannt ist. 74 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Erstelle ein Programm, das ein Array mit mindestens 10 ganzzahligen Werten enthält. Verwende eine forEach-Schleife, um die Summe aller Elemente im Array zu berechnen. Gib anschließend den Durchschnitt der Werte auf der Konsole aus. 2. Schreibe ein Programm, das eine ArrayList mit mindestens 15 Zufallszahlen zwischen 1 und 100 generiert. Verwende eine forEach-Schleife, um alle Zahlen in der Liste zu durchlaufen und nur die geraden Zahlen auszugeben. 3. Erstelle ein Programm, das eine ArrayList mit fünf bis zehn Namen enthält. Sortiere die Namen alphabetisch (verwende Collections.sort()) und gib sie mithilfe einer forEach-Schleife aus. Füge vor jedem Namen einen Zähler hinzu (z. B. 1. Anna, 2. Ben, etc.). 75 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Methoden – Prozedur und Funktion In Java sind Methoden grundlegende Bausteine, die es ermöglichen, Code zu strukturieren und wiederverwendbar zu gestalten. Methoden können in zwei Hauptkategorien unterteilt werden: Prozeduren & Funktionen 76 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Methoden – Prozedur Eine Prozedur ist eine Methode, die Aufgaben ausführt, aber keinen Rückgabewert hat. Sie dient dazu, wiederkehrende Operationen wie z.B. Datenmodifikationen oder Ausgaben auf dem Bildschirm zu kapseln. Rückgabetyp `void`: Der Rückgabetyp `void` zeigt an, dass die Prozedur keine Werte zurückgibt, sondern lediglich Aktionen ausführt. Aufbau: Eine Prozedur besteht aus einer Methodensignatur, die den Namen und die Parameter definiert, sowie einem Methodenrumpf, der die auszuführenden Anweisungen enthält. 77 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Methoden – Prozedur 78 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Methoden – Prozedur 79 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Methoden – Funktion Eine Funktion ist eine Methode, die Aufgaben ausführt und einen Wert zurückgibt. Sie wird eingesetzt, wenn eine Berechnung ein Ergebnis erzeugt, das weiterverwendet werden soll. Rückgabewert und `return`: Der Rückgabewert wird in der Methodensignatur durch den Datentyp festgelegt. Funktionen geben mit dem Schlüsselwort `return` den berechneten Wert zurück. Aufbau: Eine Funktion umfasst eine Methodensignatur und einen Methodenrumpf mit Anweisungen, die den gewünschten Wert berechnen. 80 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Methoden – Funktion 81 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Schreiben eine Prozedur, die eine Nachricht auf der Konsole ausgibt, und eine Funktion, die den Durchschnitt von drei Zahlen berechnet. 2. Schreiben eine Methode, die den Umfang eines Kreises berechnet, und definiere den Radius als Parameter. 3. Schreibe eine Prozedur, die alle Zahlen von 1 bis n (Parameter) auf der Konsole ausgibt. Schreibe eine Funktion, die prüft, ob eine gegebene Zahl (Parameter) eine Primzahl ist. Die Funktion soll true zurückgeben, wenn die Zahl eine Primzahl ist, und false, wenn nicht. 82 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Parameter Ein Parameter ist eine Variable, die in der Methodensignatur definiert ist und der Methode einen Wert übergibt, wenn sie aufgerufen wird. Parameter ermöglichen es Methoden, Eingabewerte zu erhalten und basierend auf diesen Werten Operationen durchzuführen. Die Definition von Parametern erfolgt in der Methodensignatur, zwischen dem Methodennamen und den geschweiften Klammern. 83 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Parameter – Call by Value Bei der Übergabe von Wertparametern wird eine Kopie des Wertes an die Methode übergeben. Änderungen am Parameter innerhalb der Methode haben keinen Einfluss auf den ursprünglichen Wert außerhalb der Methode. 84 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Parameter – Call by Reference Bei der Übergabe von Referenzparametern wird die Referenz (der Speicherort) eines Objekts an die Methode übergeben. Änderungen an den Parametern innerhalb der Methode wirken sich auf das ursprüngliche Objekt aus. 85 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Demonstriere anhand eines einfachen Beispiels, wie Parameter in Java sowohl als Wert als auch als Referenz übergeben werden: 1. Erstelle eine Methode, die einen Wert (z.B. eine Zahl) als Parameter entgegennimmt und diesen Wert verändert. Zeige, dass der ursprüngliche Wert in der aufrufenden Methode nicht verändert wird. 2. Erstelle eine zweite Methode, die ein Objekt (z.B. ein Person-Objekt) als Parameter entgegennimmt und ein Attribut des Objekts ändert. Zeige, dass sich das Objekt in der aufrufenden Methode verändert. 86 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Parameter – Varargs Java unterstützt auch die Verwendung von variablen Argumenten, sogenannten Varargs, die es ermöglichen, eine beliebige Anzahl von Argumenten eines bestimmten Typs an eine Methode zu übergeben. Dies ist besonders nützlich, wenn die Anzahl der Eingaben zur Compile-Zeit nicht bekannt ist. 87 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Schreibe eine Methode, die eine beliebige Anzahl von Ganzzahlen als Parameter entgegennimmt und die Summe dieser Zahlen berechnet. Verwende dafür den varargs-Mechanismus in Java. Die Methode soll die berechnete Summe zurückgeben. 2. Erstelle eine weitere Methode, die eine beliebige Anzahl von String-Werten entgegennimmt und diese als eine durch Kommas getrennte Liste auf der Konsole ausgibt. 88 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Objekte und Klassen Referenzdatentypen Ein Referenzdatentyp ist ein Datentyp, der eine Referenz auf ein Objekt im Speicher hält, anstatt den Wert des Objekts selbst zu speichern - im Gegensatz zu primitiven Datentypen. Diese Referenz ermöglicht den Zugriff auf die Attribute und Methoden des Objekts. 90 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Referenzdatentypen – Arten Klassen: Grundlage für die Erstellung von Objekten in Java. Sie definieren die Struktur und das Verhalten von Objekten, einschließlich ihrer Attribute und Methoden. 91 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Referenzdatentypen – Arten Interface: Eine Sammlung von abstrakten Methoden, die von Klassen implementiert werden können. Interfaces fördern die Modularität und ermöglichen polymorphe Programmierung. 92 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Referenzdatentypen – Arten Arrays: Spezielle Objekte, die eine Sammlung von Werten des gleichen Datentyps speichern. In Java sind Arrays selbst Referenzdatentypen, die auf eine Gruppe von Werten verweisen. 93 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Referenzdatentypen – Arten Strings: Eine spezielle Art von Referenzdatentypen, die eine Zeichenfolgenstruktur repräsentieren. 94 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Referenzdatentypen – Nullreferenzen 95 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Klassen Eine Klasse in Java ist ein benutzerdefinierter Datentyp, der eine Sammlung von Attributen und Methoden inne hält, um das Verhalten und die Eigenschaften von Objekten zu beschreiben. Klassen ermöglichen es Entwicklern, Daten und Funktionen logisch zu organisieren und wiederverwendbare Codeeinheiten zu erstellen. 96 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Klassen – Zugriffsmodifikatoren In Java können Zugriffsmodifikatoren verwendet werden, um die Sichtbarkeit von Klassen, Attributen und Methoden zu steuern: public: Die Klasse, das Attribut oder die Methode ist von überall im Programm zugänglich. private: Die Klasse, das Attribut oder die Methode ist nur innerhalb der eigenen Klasse sichtbar. protected: Die Klasse, das Attribut oder die Methode ist innerhalb der eigenen Klasse, in abgeleiteten Klassen und in Klassen im gleichen Paket sichtbar. package-private (kein Modifikator): Die Klasse, das Attribut oder die Methode ist nur innerhalb des gleichen Pakets sichtbar. 97 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Klassen – Zugriffsmodifikatoren 98 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Klassen – Konstruktoren Ein Konstruktor ist eine spezielle Methode, die beim Erstellen eines Objekts einer Klasse aufgerufen wird. Konstruktoren haben denselben Namen wie die Klasse und haben keinen Rückgabewert. Sie werden verwendet, um die Attribute eines Objekts zu initialisieren. Hinweis: Der Vorteil von this liegt in der Lösung von Namenskonflikte zwischen Instanzvariablen & lokalen Variablen/ Parametern - shadowing. this repräsentiert die Referenz auf das aktuelle Objekt. 99 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Klassen – Objekte und Instanziierung Ein Objekt ist eine Instanz einer Klasse, die im Speicher existiert und Zugriff auf die Attribute und Methoden der Klasse hat. Um ein Objekt zu erstellen, d.h. zu instanziieren, verwendet man das Schlüsselwort `new`, gefolgt von einem Aufruf des Konstruktors der Klasse. 100 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Erstelle eine Person-Klasse, die zwei Felder enthält: Name (String) und Alter (int). Schreibe ein Programm, das eine Person-Instanz erstellt und deren Name und Alter ausgibt. 1. Vermeide eine NullPointerException, indem du sicherstellst, dass die Instanz nicht null ist, bevor du auf deren Felder zugreifst. Falls die Instanz null ist, gib eine entsprechende Fehlermeldung aus. 2. Schreibe eine Methode, die einen String als Parameter entgegennimmt und dessen Länge zurückgibt. 1. Verhindere eine NullPointerException, indem du sicherstellst, dass der übergebene String nicht null ist, bevor du dessen Länge berechnest. Falls der String null ist, gebe eine Fehlermeldung aus, die darauf hinweist, dass der String null ist. 101 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen Erstelle eine Klasse: Auto. Verwende in beiden Klassen Konstruktoren und Zugriffmodifikatoren: 1. Erstelle eine Auto-Klasse mit den Attributen Marke, Modell und Baujahr. 2. Implementiere einen Konstruktor, der diese Attribute initialisiert. 3. Implementiere eine öffentliche Methode, die eine Nachricht auf der Konsole ausgibt, um die Werte der Attribute anzuzeigen (z. B. zeigeAutoInfo()). 4. Verwende private Zugriffmodifikatoren für die Felder und stelle sicher, dass sie nicht direkt von außen zugänglich sind, sondern nur über Methoden wie zeigeAutoInfo() verwendet werden. 5. Füge eine geschützte Methode, die den Zustand des Autos beschreibt, z. B. „Das Auto fährt“. Diese Methode sollte nur innerhalb der Klasse und von abgeleiteten Klassen zugänglich sein. 102 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Klassen – Vererbung Vererbung ermöglicht es einer Klasse, die Eigenschaften und Methoden einer anderen Klasse zu erben, was zu einer Hierarchie von Klassen führt. 103 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Zugriff auf übergeordnete Variablen & Methoden Das super-Keyword wird verwendet, um auf die Methoden und Attribute der übergeordneten Klasse zuzugreifen. 104 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Klassenvariablen & -Methoden Das static-Keyword wird verwendet, um Variablen und Methoden als Klassenmitglieder zu deklarieren, die nicht an eine spezifische Instanz einer Klasse gebunden sind. Stattdessen sind sie auf die Klasse selbst bezogen. 105 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Implementiere ein Beispiel für Vererbung, indem eine Klasse Fahrzeug und davon abgeleitete Klassen wie Auto und Motorrad erstellen werden. 2. Erstellen eine Basisklasse und eine abgeleitete Klasse. Zeige, wie mit super auf übergeordnete Variablen und Methoden zugegriffen werden kann. 3. Definiere eine Klasse Fahrzeug mit Unterklassen Auto und Fahrrad. Implementiere unterschiedliche Methoden wie fahren() für jede Klasse. 106 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Getter und Setter Getter & Setter sind spezielle Methoden in Java, die den Zugriff auf private Attribute einer Klasse ermöglichen. Sie fördern die Kapselung, das die direkte Manipulation von Datenfeldern von außen verhindert. Der Zugriff auf die Werte dieser Attribute findet auf kontrollierte Weise statt. Getter: Eine Methode, die den Wert eines privaten Attributs zurückgibt. Er folgt typischerweise der Konvention, den Namen des Attributs mit dem Präfix `get` zu versehen. Setter: Eine Methode, die den Wert eines privaten Attributs festlegt. Er folgt typischerweise der Konvention, den Namen des Attributs mit dem Präfix `set` zu versehen und hat als Parameter den Wert, der zugewiesen werden soll. 107 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Getter und Setter 108 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Erkläre, warum Getter und Setter nützlich sind. Implementiere dazu eine Klasse Konto, die das aktuelle Guthaben speichert. Schreibe Getter- und Setter-Methoden mit Validierungen (z.B. keine negativen Einzahlungen). 2. Implementieren eine Klasse Person mit privaten Attributen wie Name und Alter. Schreibe passende Getter- und Setter-Methoden. Modifiziere die Setter-Methode so, dass sie das Alter auf Werte zwischen 0 und 120 begrenzt. 109 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Enums Ein Enum (kurz für Enumerationen) ist eine spezielle Klasse, die eine Gruppe von konstanten Werten definiert. In Java werden Enums mit dem Schlüsselwort `enum` deklariert, gefolgt von einer Liste der Werte, die durch Kommas getrennt sind. 110 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Definieren ein Enum namens Wochentag und implementieren eine Methode, die je nach Wochentag unterschiedliche Nachrichten ausgibt (z.B. „Wochenende“ oder „Arbeitstag“). 2. Ergänzen das Enum mit Eigenschaften (z.B. Anzahl der Stunden pro Arbeitstag) und demonstriere deren Nutzung. 111 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Abstrakte Klassen Eine abstrakte Klasse wird mit dem Schlüsselwort `abstract` deklariert. Sie kann wie eine normale Klasse Attribute und Methoden definieren, jedoch müssen nicht alle Methoden implementiert sein. Ab-strakte Methoden müssen in den abgeleiteten Klassen überschrieben werden. Zudem kann eine abstrakte Klasse nicht instanziiert werden. 112 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Erstellen eine abstrakte Klasse Form mit Methoden wie berechneFlaeche() und berechneUmfang(). Leite konkrete Klassen wie Kreis und Rechteck ab und implementiere die Methoden. 2. Erstelle eine abstrakte Klasse Tier, die ein Attribut name (String) enthält und eine abstrakte Methode lauteMachen(). Implementiere in der abstrakten Klasse eine Methode zeigeName(), die den Namen des Tieres ausgibt. Erstelle dann eine Klasse Hund, die von der abstrakten Klasse Tier erbt und die Methode lauteMachen() implementiert. Demonstriere in der main-Methode, wie du ein Hund-Objekt erstellst und sowohl die Methode zeigeName() als auch lauteMachen() aufrufst. 113 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Records Records sind ein neuer Datentyp (ab Java 16). Sie bieten eine einfache Möglichkeit, Datenklassen zu erstellen, die nur aus einem Satz von unveränderlichen Attributen bestehen. Records reduzieren die Boilerplate-Codes indem sie automatisch Getter, toString(), equals() und hashCode()-Methoden generieren. Ein Record wird mit dem Schlüsselwort `record` deklariert. 114 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Implementiere ein Record namens Punkt mit den x und y. Zeige wie Records mit equals(), hashCode() und toString() arbeiten. 2. Erstelle einen Record Buch, der die Attribute titel (String), autor (String) und seitenzahl (int) enthält. Implementiere eine Methode beschreibeBuch(), die eine kurze Beschreibung des Buches ausgibt. Demonstriere in der main-Methode, wie du ein Buch-Objekt erstellst und die Methode beschreibeBuch() aufrufst. 115 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Interfaces Ein Interface ist ein abstrakter Datentyp, der eine Sammlung von Definitionen zu Methoden und Konstanten beinhaltet. Die Deklaration findet mit dem Schlüsselwort `interface` statt. Es ist möglich, dass eine Klasse mehrere Interfaces implementiert. Eine Klasse, die ein Interface implementiert, muss alle in diesem Interface deklarierten Methoden implementieren. 116 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen Zeige den Unterschied zwischen abstrakten Klassen und Interfaces anhand eines Beispiels: 1. Erstelle eine abstrakte Klasse Fahrzeug, die ein Attribut marke (String) enthält und eine abstrakte Methode fahre(). Implementiere in der abstrakten Klasse eine Methode zeigeMarke(), die den Wert des Attributs marke ausgibt. Erstelle außerdem ein Interface Energiequelle mit einer abstrakten Methode getEnergie(), die den Energietyp eines Fahrzeugs zurückgibt (z.B. „Benzin“, „Elektrisch“). 2. Implementiere eine Klasse Auto, die sowohl die abstrakte Klasse Fahrzeug erweitert als auch das Interface Energiequelle implementiert. In der Klasse Auto musst du sowohl die Methode fahre() als auch die Methode getEnergie() implementieren. Zeige dann anhand eines Beispiels, wie die Methoden fahre() und getEnergie() aufgerufen werden. Erläutere dabei den Unterschied in der Verwendung von abstrakten Klassen und Interfaces. 117 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Method Overloading Method Overloading bei dem mehrere Methoden in derselben Klasse den gleichen Namen, jedoch unterschiedliche Parameterlisten haben. Dies ermöglichtes Entwicklern, die gleiche Methode für verschiedene Eingabetypen oder -anzahlen zu verwenden. Bei der Methodenüberladung unterscheidet sich die Signatur der Methoden durch eine der folgenden Eigenschaften: Anzahl der Parameter: Die Methoden können eine unterschiedliche Anzahl von Parametern haben. Reihenfolge der Parameter: Die Reihenfolge der Parameter kann unterschiedlich sein, auch wenn die Anzahl und der Typ übereinstimmen. 118 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Method Overloading 119 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Method Overriding Method Overriding ist ein Konzept, bei dem eine abgeleitete Klasse eine Methode einer Basisklasse mit der gleichen Signatur neu implementiert. Diese Funktionalität ermöglicht es einer abgeleiteten Klasse, das Verhalten einer Methode der Basisklasse zu ändern. Das Überschreiben einer Methode wird durch die Annotation `@Override` gekennzeichnet. 120 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Schreibe eine Klasse mit mehreren überladenen Methoden zur Berechnung der Fläche von Kreis, Rechteck und Dreieck. 2. Implementiere eine Klasse Tier mit der Methode gibLaut(). Leite Klassen wie Hund und Katze ab, und überschreibe die Methode. 121 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Unveränderbarkeit `final`wird verwendet, um eine Variable, Methode/ Klasse als unveränderlich zu kennzeichnen - einmal zugewiesene Werte können nicht geändert werden: Finale Variablen: Eine finale Variable kann nur einmal zugewiesen und danach nicht mehr geändert werden. Finale Methoden: Eine finale Methode kann nicht in einer abgeleiteten Klasse überschrieben werden. Finale Klassen: Eine finale Klasse kann nicht erweitert (vererbt) werden. 122 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Erstelle eine Klasse Kreis, die eine finale Variable PI enthält, die den Wert von Pi (3.14159) speichert. In der Klasse soll eine Methode berechneFlaeche() implementiert werden, die den Flächeninhalt eines Kreises berechnet. Die Methode nimmt den Radius als Parameter und berechnet die Fläche mit der finalen PI-Variablen. 2. Erstelle eine Klasse Fahrzeug, die eine Methode fahre() enthält, die mit dem final-Modifikator markiert ist. 3. Erstellen eine unveränderliche Klasse Adresse mit den Attributen Straße, Stadt und PLZ. Stellen sicher, dass die Klasse unveränderlich bleibt. 123 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Kohäsion und Kopplung Kohäsion beschreibt die Beziehung innerhalb einer Klasse und misst, inwieweit die Methoden einer Klasse miteinander verbunden sind und zusammenarbeiten. Gründe für hohe Kohäsion: Einfaches Verständnis: Hohe Kohäsion erleichtert das Verständnis der Funktionalität eines Moduls. Einfache Wartung: Änderungen in einem Modul erfordern keine Änderungen in verwandten Modulen. Einfache Wiederverwendbarkeit: Module können leichter wiederverwendet werden, da sie eine klare und spezifische Funktionalität bieten. 124 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Kohäsion und Kopplung Kopplung beschreibt die Beziehung zwischen Klassen und gibt die Stärke der Abhängigkeiten zwischen Programmeinheiten an. Eine hohe Kopplung bedeutet, dass Einheiten stark voneinander abhängig sind, während eine niedrige Kopplung Unabhängigkeit anzeigt. Gründe für niedrige Kopplung: Reduzierte Auswirkungen: Änderungen in einem Modul haben weniger Auswirkungen auf andere Module. Einfachere Zusammenstellung: Zusammenstellung der Module erfordert weniger Aufwand und Zeit. Erleichterte Wiederverwendbarkeit & Testbarkeit: Module können leichter wiederverwendet und getestet werden, da sie weniger Abhängigkeiten haben. 125 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Kohäsion und Kopplung 126 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Polymorphismus Polymorphismus ermöglicht, dass Objekte oder Methoden unterschiedliche Formen/ Verhaltensweisen annehmen können, abhängig vom Kontext. Dies macht den Code erweiterbar & wiederverwendbar. Arten von Polymorphismus: Coercion: Automatische Umwandlung von Datentypen, um Kompatibilität zu gewährleisten. Overloading: Verwendung desselben Methodennamens/ Operators für verschiedene Aufgaben basierend auf Argumenten/ Datentypen. Parametrischer Polymorphismus: Nutzung von Variablen/ Methoden durch Generics. Subtyp-Polymorphismus: Methodenüberschreibung in Unterklassen, wobei der Typ des Objekts bestimmt, welche Methode ausgeführt wird, auch bei Oberklassen-Referenzen. 127 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Übungen 1. Implementiere ein Beispiel, das Polymorphismus zeigt, mit einer Methode spieleSound(), die je nach Typ eines Instruments (z.B. Gitarre, Klavier) unterschiedliche Sounds abspielt. 2. Erstelle ein Programm, das Polymorphismus nutzt, um ein Array von Fahrzeugen zu verwalten. 128 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Ausblick Ausblick – Anwendungsfelder Datenverarbeitung/ DataScience Webentwicklung Mobile App-Entwicklung Verteilte Systeme & Cloud-Anwendungen 130 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Ausblick – zukünftige Vorlesungen Datenbanken & Persistenz Verteilte Systeme und Netzwerke Fortgeschrittene Programmiertechniken KI & ML 131 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg Feedback Feedback QR-Code? → https://qr.io/ Was anderes? Eigene Website? JS-Ding? 133 16. Januar 2025 Duale Hochschule Baden-Württemberg Ravensburg www.dhbw-ravensburg.de