width: 900 height: 900 maxScale: 1.5
SE-Tutorium 4 | Mittwoch 16 - 18 Uhr:
anchored to [[191.00_anchor]]
Lernziele:
- Intuition zum Aufbau und Struktur von imperative shell functional core erhalten
- nochmal im Code anschauen!
- slides nochmal durchgehen und Verständnis sammeln ( vielleicht interaktiv!)
- Konzept einer API verstehen / betrachten
- API / Interfaces ?
- was setzen wir bei einer API voraus / wie ist die Interaktion mit dieser?
- Wo gibts APIs?
- Interfaces
- Anwendung / Verständnis
- Interfaces programmieren / anwenden
Orga
- Bildet Teams für HW6!
- im Laufe der Woche Kontrolle von HW5
- am Ende der Stunde gerne minute-paper durchführen –> immediate feedback!
Orga | HW5 Feedback |
[!Question] Gibt es Feedback zu HW5 ? -> gibt es etwas, was in der Aufgabenstellung/Formulierung/Umsetzung große Probleme bereitet hat?
- Umfang in Ordnung?
- bestimmte Probleme?
note: give them around 5 min at most ( ) Feedback: bei vielen Bioinfos : -> Concept eines Parsers Idee dazu, Meinung zu den (( Fokus der Verständnis kann teils schwierig sein))
Helpdesk wurde von einigen meiner Studis nicht wahrgenommen: -> Helpdesk ( Zeitlich schwierig) Freitag ungünstig, anderer Tag ware besser / von Vorteil
Ansatz zur Aufgabe setzen: -> + Scala als sehr neue Sprache Möglicher Ansatz: grobe Richtung, wie er aufgebaut werden kann, sollte gegeben / und aufgenommen werden.
| Imperative Shell | functional core |
–> revisit aus letztem Tutorium
| Imperative Shell | functional core |
[!Question] Konzept imperative shell <> functional core
-> Was streben wir mit dem Grundkonzept an? -> Was ist im functional core umgesetzt enthalten?
| Imperative Shell | functional core |
[!Question] Konzept imperative shell <> functional core -> Bedingungen für Interaktion von imperative shell und functional core?
[ Functional core ] | ]imperative shell[
- Core Konzept: Aufteilen von Interaktion mit IO(imperative shell) und Verarbeitung von erhaltenen Werten (functional core)
- imperative shell -> Interaktion mit I/O
- functional core -> Arbeiten mit gegebenen Werten
- functional core ist hierbei möglichst pure ( also Kontext-unabhängig funktionierend )
[ Functional core ] | ]imperative shell[
- Wichtig: Shell darf Core aufrufen, aber Core darf nicht shell aufrufen!
- core structure weiß quasi nichts von shell ( ist ja im eigenen Kontext aktiv)
- Das heißt jetzt:
- Bereich mit Ein und Ausgabe, welcher diese Dinge aufnimmt und anschließend
- Verarbeitung an den funktionalen Core setzt -> dieser ist eventuell pure
- also gleicher Input –> gleicher Output
praktische Umsetzung Imp-shell(IS) | (FC)func-core |
- in EX7-tut4 gab es eine Aufgabe, wo das Prinzip geübt werden konnte
- (haben wir zeitlich leider nicht geschafft)
- –> kurz den Code gemeinsam betrachten ( link)
- Wo könnte man das Prinzip umsetzen, warum?
- (Vergleiche mit Beispiellösung von Jiri) (link)
note: open the old task and look around in the code ask what may be improved / should be improved -> requesting file directly
- why bad? -> printing out directly
- why could that pose problems?
praktische Umsetzung (IS) | (FC) | HW5
[!Task] Licenser aus HW5 und Implementation von IS / FC IM REPO:
- Finde Ordner
/licenser
aus HW5 (wieder)- schau dir “Files.Scala” an
- Wo finden wir jetzt hier Functional core? | Imperative Shell ?
- welchen Vorteil hat die Verwendung hier?
- welchen Effekt möchten wir durch diese Implementation der Interfaces für File-Interaction beheben / bearbeiten ?
note: give them around 5 min to set up repo, then go over the file interactively!
\|/ weitere Fragen ? [no]\|/[yes]
note: to give insights on the concept of IS / FC or similar
API | Interfaces |
Interfaces |
- Interfaces binden eine implementation von irgendetwas zu einem user-programm ( also etwas, was es anwendet)
- anwende Instanz (user program) kann nur auf bereitgestellte Inhalte zugreifen
- Interface gibt an, was / welche Funktionalität geteilt wird
- Implementation ist nicht einsehbar vom user program
- Beispiel: Funktions-Signatur:
- gibt uns an, was rein / raus geht
- nicht, wie es funktioniert!
Was ist ein Interface?
note: draw simple example:
user programm on the left on the right we have an implementation for website-crawler -> it can query all images, specific text blocks, search for a given block of text ( extract definition … ) where would we add / implement an interface now ?
Interfaces | Motivation | Modularity
- Interfaces können als Bindeglied von Software-Komponenten in einem Programm dienen
- KomponenteX brauch Interface –> what is required to run this?
- KomponenteY gibt Interface –> what does it provide as service? (not how its done!)
- bieten eine Modularität!
Interfaces | Motivation | Modularity
- –> Modularität ermöglicht:
- Komponente deckt einen Bereich ab
- Änderungen an einer Stelle sollten andere nicht brechen ( da sie da nur via Interface abgerufen werden!)
Interfaces | Modularity
trait Interface {...}
def component(required : Interface ) : Unit = ...
def anotherComponent(): Interface = ...
note: source für weiteres Beispiel eines Interfaces https://www.w3schools.com/java/java_interface.asp
Interfaces | Modularity
- Key Advantage: Wir arbeiten quasi gegen eine Black-Box
- Anfrage an interface gibt etwas zurück
- wie die Implementation funktioniert, wissen wir nicht!
- Implementation kann sich ändern ( ohne, dass wir es merken)
Interfaces | Modularity
Interface und Implementation von etwas sind strikt geteilt!
- es folgen diverse Paradigmen / Konzepte: modular decomposability/understandability/continuity/…
- –> hat also diverse Vorteile!
| API |
note: sources for further reading:
- https://en.wikipedia.org/wiki/API
- https://www.ibm.com/topics/api
- https://www.ibm.com/topics/rest-apis
API - Application Programming Interface
- spezifischer Typ eines Interfaces
- ermöglicht es Programmen untereinander Daten austauschen zu können
- –> also gedacht, dass sie von Programmen genutzt bzw von diesen implementiert werden ^
- bieten Schnittstellen, um ihre Funktionalität abrufen zu können
- bsp: give me cat-image for this number
https://catnumber.test/?number=10
- bsp: give me cat-image for this number
- Implementation ist auch hier nicht zwingend verfügbar!
note: as a note for how we can differentiate between API / interface: interfaces are generally an abstraction -> some agreed-upon way of communicationg / exchanging information –> ok if you knock three times on the door I will shut down internally -> APIs könnten mehrere Interfaces beinhalten –> NUtzer*innen können verschieden darauf zugreifen!
API - Application Programming Interface
[!Question] War der Parser aus HW5 eine API ?
EXKURS >> REST API
- REpresentational State Transfer
- quasi-standard für Web-APIS
- baut auf 6 Prinzipien auf, die beim bauen einer solchen API eingehalten werden sollten
- 1. : Uniform Interface -> wie sollen die Daten erreicht werden ( GET/POST/PUT/DELETE Methoden für HTTP)
- 2. : Client / Server -> API bildet also eine Schnittstelle zwischen User*in, die zugreifen und anfragen und Server, der verarbeitet und zurückgibt
- 3. : Stateless –> Jede Anfrage muss ohne Vorwissen verständlich sein
EXKURS >> REST API
- 4. : Cacheable –> Client sollte wissen, ob die Daten wiederverwendet werden können / oder nicht
- 5. : Layered System –> eine Ebene im Programm darf nur mit ihrer nächsten ( die, die mit dem Interface angesprochen wird) kommunizieren
- 6 : Code on demand -> optional
note: Weitere Quellen
- https://www.ibm.com/topics/rest-apis
- https://restfulapi.net/
API == Interface ?
note: ask them about it -> not necessarily because an API can have many interfaces to provide a functionality and they are usually looked at differently –> interfaces can be coded, apis are just used ( someone else codes them, we use its functionality!) -> Interfaces define abstract / generalized structures ( like a door: we know how to interact with them etc )
API | Übung |
[!Task] Aufgabe ( auch im Repo zu finden) In kleinen Gruppen:
- Go to https://http.cat/ and try 200, 404, 403, 418
- Describe the input, output and how they relate!
- Go to http://colormind.io/api-access/ and read the API description
- Based on the description, make predictions: what’s the input, what’s the output?
- Try it out both using
curl
and using the httpie online app- Describe the endpoints precisely: what’s the inputs, what’s the outputs, how they relate. Verify your hypotheses by calling the API either with
curl
or the httpie online app.diese API funktioniert ( Was gibt sie aus, wenn manhttp.cat/status/nummer
eingibt?)
note: have them work on that for around 10 min then we should compare those together!
#refactor #TODO use in next weeks tutorial –> to compensate and train it all once more //
Interface selbst programmieren | Übung |
[!Task] Aufgabe ( siehe REPO) IM REPO ( EX8-tut4 ):
- Betrachte die Beschreibung von “Tuetter” -> wie führt man es aus / startet es?
- Teste, wie beschrieben, das Programm aus
- Schau dir Aufgabe 3.1 an -> bei Fragen gerne melden!
- bearbeite die Aufgabe entsprechend :)
- wiederhole Steps 3,4 für die weiteren Aufgaben (3.2/3.3)
| Feedback | minute paper |
- Hausaufgabe 6 nicht vergessen!
[!Task] 1 - Minute Paper ausfüllen Beantworte kurz die Fragen:
- Dieses Thema / Bereich muss ich nach dem Tutorium nochmal anschauen
- Haben mir die Aufgaben im Tutorium zum Verständnis beigetragen??
- ist mir das Konzept von Interfaces klar geworden?
- Habe ich dazu noch fragen ( welche?)