Übungsaufgabe zur Klausur oder Prüfungsvorbereitung
Anspruch: Fortgeschritten
Stichworte sind: HTTP-Requests, Threads, Callbacks, Records, Interfaces
Einleitung
Sind sind Mitarbeiter im Softwareunternehmen "ImmoTopSoft", welches Anwendungen zur Verwaltung von Immobilien entwickelt.
Zur Vorbereitung auf ein neues Projekt, frischen Sie ihr Wissen in asynchroner Programmierung und HTTP-Requests ein wenig auf. Beantworten Sie anschließend einige Fragen.
Aufgabe 1
In der Tabelle sind vier oft verwendete Http-Request-Methoden aufgeführt, ergänzen Sie die fehlenden Einträge in der Tabelle.
| Methode | Verwendung |
|---|---|
| 1? | Zum Abrufen von Ressourcen, darf den Zustand des Servers nicht verändern, cachefähig, Wiederholbarkeit gewünschtz.b. im Web als Verlauf |
| POST | 2? |
| 3? | Zum Ersetzen oder Aktualisieren einer Ressource, nicht cachefähig da dies zu ungewollten Veränderungen führt |
| DELETE | 4? |
1? = GET, 2? = Zum Senden von Daten an den Server, z.b. für Formulare, sollte nicht gecached werden, da Änderung auf dem Server ausgeführt werden können, 3? PUT, 4? = Löschen von spezifischen Resourcen auf dem Server, wird nicht gecached
Aufgabe 2
Erklären Sie, welche Aufgaben Request-Header und Request-Body haben.
Request-Header liefern wichtige Metainformationen für die Anfrage, während der Request-Body die spezifischen Daten enthält, die an den Server gesendet werden.
Im Header stehen dabei verschiedene Headernamen für unterschiedliche Informationen. Zum Beispiel: Content-Type, Cache-Control, Authorization, User-Agent(Browser-Typ) und viele mehr.
Im Body können z.b. Formulardaten oder json verwendet werden.
Aufgabe 3
Es geht um synchrone und asynchrone Methoden.
a) Erklären Sie den Unterschied zwischen synchroner und asynchroner Ausführung von Quellcode. Gehen Sie dabei auf jeweilige Eigenschaften, Schwierigkeiten und Besonderheiten ein.
Bei synchronen Methoden wartet der aufrufende Code, bis die Methode abgeschlossen ist. Dies bedeutet, dass während der Ausführung der Methode keine anderen Aufgaben bearbeitet werden. Durch den linearen Ablauf, ist die Behandlung von Fehlern einfacher, weil eine Reaktion sofort erfolgen kann. Auch sind die Vorgänge und Abläufe einfacher nachzuvollziehen.
Asynchrone Methoden ermöglichen es dem Programm, andere Aufgaben auszuführen, während es auf die Fertigstellung einer Aufgabe wartet. Dies ist besonders nützlich bei Operationen, die Zeit in Anspruch nehmen. Die Anwendung kann auf Ereignisse reagieren oder Daten verwenden, sobald sie verfügbar sind, ohne den Hauptausführungsfluss (Main-Thread) zu blockieren. Die Reaktion auf Ereignisse und Fehler ist komplexer, da die Reaktion oft an einer anderen Stelle im Code erfolgen muss, was die Nachvollziehbarkeit verschlechtert.
b) Nennen Sie 3 Beispiele für Aufgaben, bei denen eine asynchrone Ausführung sinnvoll wäre.
API Anfragen übers Netzwerk, Zugriffe auf das Dateisystem, Downloads, Streams
c) Erklären Sie was Callbacks sind und welche Rolle diese in der asynchronen Programmierung spielen.
Ein Callback ist ein Verweis auf eine Methode, die als Argument an eine andere Funktion übergeben wird. Der Callback wird aufgerufen, nachdem der asynchrone Code abgeschlossen ist, um das Ergebnis oder eine weitere Verarbeitung zu ermöglichen.
d) Sie haben via API, Daten im JSON-Format abgerufen. Erklären Sie mit eigenen Worten, welche Problemstellungen sich nun beim Verarbeiten und Verwenden der Daten in einer Objektorientierten Sprache ergeben.
Das Problem besteht darin, dass die Textdaten der API-Antwort in eine strukturierte Objektform umgewandelt werden müssen, um sie im Programm effektiv zu verarbeiten. Dies erfordert das Mapping der unterschiedlichen Datentypen und -strukturen aus dem JSON-Format in die entsprechenden Klassen. Fehler in diesem Prozess können zu Laufzeitproblemen führen und zusätzliche Wartung erfordern.
Aufgabe 4
Ein Entwickler des Teams hat zur Verwendung von Daten einer API-Antwort ein Record statt einer Klasse genutzt.
a) Erklären Sie was ein Record ist und welche Vorteile und welche Nachteile es gegenüber einer Klasse hat.
Ein Record ist eine einfache Datenklasse, die speziell zur Speicherung von Daten gedacht ist. Die Deklaration ist sehr einfach. Felder und Getter müssen nicht geschrieben werden, sie werden automatisch erstellt. Dies vermeidet Boilerplate Code (immer wieder gleichen einfachen Code). Nachteil ist, dass die Daten unveränderlich sind, auch Vererbung ist nicht möglich.
b) Erstellen Sie ein Record "Address", welches die Daten einer API-Antwort auf die Anfrage einer Adresse speichern soll. (String für die Straße, int für die Hausnummer und int für die Postleitzahl).
public record Address( String street, int number, int postcode){ }
Aufgabe 5
Für die Verwendung als Callback in der Sprache Java soll ein Interface (in diesem Fall s.g. Functional Interface) verwendet werden.
a) Erklären Sie kurz und knapp was ein Interface ist und welchen Nutzen es hat.
Ein Interface ist eine Art Vertrag in der Programmierung, der eine Sammlung von Methodendeklarationen definiert, ohne deren Implementierung bereitzustellen. Das Interface ermöglicht es Klassen, diese Methoden zu implementieren, wodurch sie eine gemeinsame Schnittstelle teilen, ohne dabei die Vererbung zu nutzen.
b) Schreiben Sie ein generisches Interface "Action", welches als Callback mit Übergabe von 3 Parametern dienen kann, in einer beliebigen Sprache.
Beispiel in Java
c) Im Quellcode wird das Interface "Action" in einer Methode verwendet um die Werte einer Anfrage für die Daten einer Adresse zurückzugeben, vervollständigen Sie den Code.
Beispiel in Java
Aufgabe 6
Ein Entwickler erzählt Ihnen, Interfaces sind ein wichtiges Mittel der Abstraktion. Dann stellt er Ihnen einige Fragen.
a) Erklären Sie was Abstraktion bedeutet, nutzen Sie dazu ein eingängiges Beispiel.
Abstraktion bedeutet, dass komplexe Implementierungsdetails und Informationen vor dem Nutzer einer Funktionalität verborgen werden, um die Komplexität im Programm zu verringern. Ein eingängiges Beispiel ist die Verwendung von Frameworks zum Parsen und Mappen von API-Antworten; der Nutzer muss nicht wissen, wie der Interna-Mechanismus des Mappers funktioniert, sondern kann sich einfach auf die Bereitstellung von Daten konzentrieren. Dadurch wird die Benutzerfreundlichkeit erhöht und die Entwicklungszeit verkürzt, da Entwickler sich nicht mit den Details der Implementierung beschäftigen müssen.
b) Sie haben im Internet einen Code-Ausschnitt gefunden, in dem eine abstrakte Klasse mit dem Schlüsselwort "abstract" gebildet wurde. Erklären Sie. was eine abstrakte Klasse von einem Interface unterscheidet.
Eine abstrakte Klasse kann, im Gegensatz zu Interfaces, sowohl Methodendeklarationen als auch konkrete Implementierungen enthalten. Während eine abstrakte Klasse dazu dient, gemeinsame Funktionalitäten und Attribute bereitzustellen, müssen alle abgeleiteten Klassen die abstrakten Methoden implementieren. Interfaces hingegen definieren nur die Methodendeklarationen und erlauben einer Klasse, mehrere Interfaces zu implementieren, was mehr Flexibilität bei der Gestaltung der Klassenhierarchie bietet.
Video Klausurbesprechung
Auf meinem YouTube-Kanal bespreche ich regelmäßig Aufgaben und Übungen, so auch diese hier.