Das sieht ein bisschen voller aus als die letzten Vorlesungen,
zumindest subjektiv der Eindruck. Vielen Dank,
dass möglicherweise ein paar Leute mehr da sind. Ja,
herzlich willkommen zur 14. und letzten Vorlesung SE1 und es
ist ja tatsächlich sogar die letzte Vorlesung,
zumindest mit meiner Beteiligung, wie sie sich ja schon rumgesprochen hat.
Ich habe heute zwei Punkte auf dem Zettel.
Einmal vor der Pause werde ich noch ein paar Folien durchgehen
über das Thema Grafen
Wir den Online-Selbsttest gemacht hat, sieht ja,
dass da durchaus auch eine kleine Frage zu Grafen dabei ist.
Von daher, auch in der Klausur wird das so sein.
Also das ist auch stoffrelevant, klausurrelevant, was wir heute noch hier machen.
Ich werde vor allen Dingen etwas darüber erzählen,
wie man den Grafen implementieren kann.
Weil das Thema Grafen ist riesig. Und in der Mathematik
habt ihr da ja sicherlich auch schon viel drüber gesprochen.
In der zweiten Hälfte würde ich dann so ein bisschen reflektieren wollen über das,
was jetzt in SE1 gelaufen ist, in diesem Durchlauf.
Wir sprechen so ein bisschen über die Ergebnisse vom Lehrlabor
Wir haben das Feedback, was ihr abgegeben habt.
Also die Lehre-Evolution ist ausgewertet. Ich habe das hier.
Das ist ein großes PDF. Das werde ich dann auch noch ins Comsi stellen.
Das heißt also, ihr könnt da auch selber reinschauen hinterher.
Habe ich noch nicht reingestellt. Und ja, also so
ein bisschen nochmal die Gelegenheit, so ein bisschen Feedback aufzusammeln.
Okay, dann gehen wir jetzt einfach mal mitten rein in
das erste Thema heute. Grafen. Grafen sind ja auch,
wenn man so will, Sammlungen. Und deswegen haben wir
das ein bisschen in das Thema hier mit reingesteckt.
Früher gab es zum Thema Grafen ein 14. Aufgabenblatt.
Es gab mal eine Zeit für SE1,
da gab es nicht 13,
sondern 14 Aufgabenblätter
Das ist irgendwann der Tatsache zu, ob der Tatsache zum Opfer gefallen,
dass wir hier die Vorlesung am Mittwoch halten müssen und dadurch verlieren wir sozusagen eine halbe Woche,
können nur sozusagen 13 volle Übungswochen unterbringen,
haben also auch nur 13 Blätter.
Das heißt, das wunderbare Blatt 14,
das ich irgendwann mal mit viel Liebe konzipiert habe,
wird gar nicht mehr eingesetzt in SE1. Ich werde trotzdem das Projekt vorstellen,
so ein bisschen was dazu erzählen.
Und wenn wen das interessiert, der kann dann sicherlich auch die Implementation bekommen,
die wir da sonst ins Comsi gestellt haben.
Da gibt es ein Aufgabenblatt dazu und so. Aber wir haben heute diesmal beschlossen,
das erstmal gar nicht mehr reinzustellen, damit nicht jemand glaubt,
dass er das bearbeiten muss,
aber wer das haben will, kann das gerne bekommen,
dann stellen wir es noch rein
Einfach entsprechend im, kommen Sie Bescheid, sagen wir eine Mail schicken. Okay,
warum das Thema Grafennaja,
weil das Thema Grafen in ziemlich vielen Kontexten sehr,
sehr relevant ist, wenn ihr mit dem HVV fahrt,
was ich bei den meisten von euch vermute,
dann wisst ihr, dass es inzwischen Apps gibt,
mit denen man sich eine Strecke berechnen lassen kann von einer Haltestelle zu einer anderen.
Das ist nichts anderes als ein Graf. Das heißt,
die sämtlichen Stationen, die der HVV hier anbietet,
Busstationen, U-Bahn-Stationen, S-Bahn-Stationen,
sind Knoten in einem Netz und die Verbindungen dazwischen
sind dann
die Kanten
Und es ist tatsächlich ziemlich nützlich heutzutage,
in solchen Netzen dann Algorithmen laufen lassen zu können.
Ihr wisst das genauso auch von Navigationssystemen. Ihr habt sicherlich
schon mal eins gesehen. Auch das ist nichts weiter als ein Graf,
der dahinter steht, der dann mit sehr cleveren Algorithmen travisiert wird.
Und da werden dann bestimmte Dinge ermittelt, wie die kürzeste Strecke und ähnliches.
Hier ist auch nochmal so ein kleines Beispiel auf der Folie,
das ist von 2005,
als die deutsche BA noch auf dem deutschen Markt war,
zwischen die deutsche BA,
glaube ich,
aufgekauft von Air Berlin
Gibt es gar nicht mehr, aber damals haben die so
ein paar neue Strecken dann auf den Weg gebracht,
zum Beispiel hier eine Verbindung zwischen Dresden und München und so weiter.
Und dann ist immer die Frage, kommt man von einem
Knoten zum anderen, in welcher Zeit, mit welchen Umsteigemöglichkeiten?
Also das braucht man überall, das ist, glaube ich,
auch ganz gut nachvollziehbar. Wenn wir jetzt mal gucken,
wenn wir uns jetzt erst mal angucken, was sind überhaupt Grafen?
Wir brauchen ja wieder ein Vokabular. Ihr wisst ja,
dass wir hier in SE1 sehr viel Wert legen auf ein konsistentes Vokabular.
Also haben wir mal einfach das hergenommen, was in der Mathematik diskutiert wird.
Wir haben auch versucht, das mit den Unterlagen für diskrete Mathematik
abzugleichen. Nicht, dass das irgendwie hier verschiedene Begriffe sind
Also ein Graf stellt erst mal eine Menge von Objekten mit
einer Relation auf diesen Objekten dar. Oder etwas formaler,
gerichteter Graf G ist ein Paar von zwei Mengen.
Es gibt eine Menge von Knoten, eine endliche Menge V,
von Vertex im Englischen.
Und es gibt eine endliche Menge von Kanten, Edge, Edges.
Und E ist dann eine zweistellige Relation auf V mit der
Menge der Kanten, einer Untermenge des Kreuzproduktes der Knoten,
also der möglichen Verbindung
Gut, dann ist es oft so, dass Grafen bildlich dargestellt werden.
Das empfehlen wir euch ja generell, dass ihr euch
Skizzen macht, um euch etwas zu veranschaulichen beim Programmieren.
Und Grafen erstmal auf der obersten Ebene kümmern uns durchaus auch veranschaulichen.
Und ja, ganz einfach, einen Knoten,
üblicherweise so ein kleiner Kreis hier jetzt in dieser Darstellung.
Vielleicht auch nummeriert mit irgendwelchen IDs oder ähnliches, ähnlichem.
Dann eine gerichtete Kante wird durch einen Fall dargestellt.
Da ist es ganz einfach. Dann gibt es
so verschiedene Typen von Grafen
Das hier zum Beispiel ist ein gerichteter Graf. Warum ist er
gerichtet? Weil die Kanten Pfeilspitzen haben. Das heißt,
von dem Knoten 1 in diesem Beispiel hier zum Knoten 4
kommt man zwar mit dieser Kante,
aber über diese Kante kommt man offensichtlich nicht von 4
direkt zur 1. Wahrscheinlich kommt man gar nicht in diesen Grafen von der 4 zu 1,
wenn diese gerichteten Kanten als solche möglichen Wege da zu verstehen sind.
Es gibt aber auch ungerichtete Grafen, sowas hier,
da sind einfach die Kanten, die Knoten einfach durch Kanten verbunden,
ohne eine Fallspitze dran zu haben,
ungerichtet,
also symmetrische Beziehungen zwischen den verbundenen Knoten
Das hier ist ein vollständiger Graf. Ein vollständiger Graf ist
ein Graf, in dem sämtliche Kanten,
die möglich sind zwischen Knoten, auch wirklich vorhanden sind.
Dann ist das hier auch ein Graf, aber ein nicht zusammenhängender.
Das heißt also, dieser Graf besteht hier aus zwei Teilgrafen oder Komponenten.
Und sowas gibt es also durchaus auch. Dann gibt es
sowas hier, das an den Kanten Gewichte stehen.
Das ist das, was man braucht,
wenn man mit einem Navigationssystem irgendwas berechnen will.
Da muss man ja wissen, wie aufwendig ist eine
bestimmte Strecke von einem Knoten zum nächsten
Also das ist dann ein bewerteter oder auch ein gewichteter Graf. Gerichtet,
die Kanten haben Pfeilspitzen, gewichtet, die Kanten tragen ein Gewicht,
das heißt, haben eine Schwere, in dem Sinne,
dass man sich überlegt,
ob man über die eine oder über die andere Kante zu einem Knoten kommt.
Alle Grafen, die ihr hier auf der Folie seht,
sind zyklisch. Das heißt, es gibt mindestens einen Pfad,
auf dem auf dem ein Knoten zweimal vorkommt.
Ihr könnt also hier überall irgendwo sehen,
dass es möglich ist, mehrfach über einen Knoten zu laufen.
Beim Verfolgen von den Kanten
Ja, okay. Das ist erst mal das,
was ihr in Mathematik ja auch wahrscheinlich intensiv gehört habt.
Da gibt es noch ganz viel Theorie dazu.
Uns interessiert natürlich jetzt was anderes. Wir sind ja hier
in einer Programmierveranstaltung. Wie kann man denn Grafen implementieren?
Also wie kriege ich das jetzt abgebildet auf die Strukturen,
die wir kennen in Java zum Beispiel?
Und wie so häufig, keine Überraschung,
gibt es mehrere Möglichkeiten, Grafen zu implementieren?
Das haben wir schon in SE1 durchgängig immer erzählt,
dass es mehrere Möglichkeiten gibt,
dieselbe Funktionalität zu implementieren
Zwei beliebte Methoden sind zum einen die Addiazenz Matrix und zum anderen Addiazenzlisten.
Der Begriff Addiazenz kommen von dem Begriff Abjazent, also wenn zwei Knoten benachbart sind,
das heißt, wenn sie durch eine Kante verbunden sind.
Das ist einfach die Definition hier. Die erste Implementierungsmöglichkeit mit
einer Matrix ist vom Konzept, glaube ich, relativ eingängig.
Wir haben jetzt hier so einen Grafen und sagen einfach jetzt
für einen nicht gewichteten Grafen, ist in einem,
gibt es eine Relation AIJ. Und die ist Liefertrue,
falls es eine Kante von I nach J gibt,
also zum Beispiel von 1 nach 4 gibt es eine Kante
und von 2 nach 1 gibt es auch eine Kante,
aber es gibt keine Kante von 4 nach 1. Und das kann man eben halt dann sich so vorstellen in einer Matrix,
dass in dieser Matrix einge... Hallo,
ich höre hinten ziemlich laut Leute reden.
Wäre einfach nett, wenn ihr nicht reden würdet,
weil es ist sehr laut und ich vermute,
die Leute, die daneben sitzen,
können nicht gut verstehen, was gesprochen wird.
Ihr könnt gerne rausgehen und das draußen anhören oder euch draußen besprechen.
Draußen anhören ist wahrscheinlich nicht so leicht.
Wenn ihr beides wollt, dann würde ich euch bitten,
das eine zu lassen
Okay, also wenn man das jetzt,
diese Beziehung hier in dieser Matrix einträgt,
dann hat man tatsächlich überall da einer einstehen, wo zum Beispiel gilt,
von dem Knoten 1 zum Knoten 2 gibt es eine Kante.
Also hier ist eine Verbindung vom Knoten 4 zum Knoten 1,
das ist hier eine Null eingetragen, also gibt es keine Verbindung.
Das ist nachvollziehbar, dass man das so darstellen kann.
Das heißt, man trägt sozusagen sämtliche Knoten auf den beiden
Achsen ab und dann hat man diese entsprechend besetzte Matrix,
die häufig bei großen Grafen dann relativ dünn besetzt ist
Wenn man jetzt gewichtete Grafen hat, also tatsächlich diese Kanten tragen ein Gewicht.
Nehmen wir das mal sowas an hier. Dann kann man da
auch in diese Matrix diese Gewichte eintragen und trägt dann da,
wo keine Verbindung ist, sowas wie unendlich ein,
um einfach deutlich zu machen, das wäre jetzt ziemlich teuer,
über diese Kante zu gehen oder es geht eigentlich nicht.
Okay, die andere Möglichkeit, das zu implementieren,
also das hier nochmal, kann man sich relativ schnell überlegen,
wenn die Matrix sehr groß wird, könnt ihr euch vorstellen,
bei mehreren 10.000 Knoten in einem Grafen,
wenn ihr euch nur einmal das Navigationsnetz in Deutschland vorstellt,
was man da alles als Knoten nehmen kann,
dann ist das schon ziemlich viel.
Also gibt es eine andere Möglichkeit,
das sind die Ablazenzlisten
Da verfügt jeder Knoten über eine Liste seiner Nachfolgerknoten. Das heißt,
bei jedem Knoten ist vermerkt, wer denn erreichbar ist,
direkt über eine Kante. Und zuwitzig ist es möglich,
dass alle Knoten über ein Ray direkt zugreifbar sind.
Also der gleiche Graf wie eben. Da hat man so
ein Array und dann trägt man da jetzt ein, also bei Knoten 1,
da gibt es die Möglichkeit zu 2 und zu 4 zu kommen.
Also ist hier irgendwie so angedeutet und nehmt das jetzt nicht
zu wörtlich, was hier auf der Herr Folie ist.
Das soll jetzt keine verkettete Liste sein,
sondern es soll einfach so eine Möglichkeit sein zu verstehen,
dass unter dem Eintrag 1 jetzt zwei erreichbare Knoten eingetragen sind
Sie das auch als eine Liste vorstellen, wie das hier auch steht?
Die Liste von Nachfolgerknoten. So ähnlich wie bei dem Hashing
habt ihr das ja auch schon gesehen. Und entsprechend hier
für den Knoten 2. Da gibt es die Verbindung zu 1 und zu 4.
Bei der 3 gibt es die Verbindung zur 3 und zu 5.
Bei der 4 0 zu 5 und bei der 5 zu
3. Genau. Und wenn man das so darstellt,
dann kann man sich gut überlegen, dass das ein geringerer Platzbedarf ist,
als an der relativ großen Matrix.
Zugriff dann auf alle Nachfolgerknoten in Linearzeit. Das heißt also
, ich muss hier eventuell dann die linear durchsuchen.
Ihr wisst, das hat wieder einen bestimmten Aufwand.
Wir kommen also auch relativ schnell,
wenn wir uns mit Grafen beschäftigen, zu der Frage,
wie aufwendig ist denn ein bestimmter Algorithmus
Bei Bedarf kann es auch sinnvoll sein, inverse Adlizenzlisten fortzusehen,
also nicht, welcher Knoten ist von hier aus erreichbar,
sondern von welchem Knoten bin ich ein Nachfolgerknoten.
Das kann durchaus auch hilfreich sein, das werden wir gleich noch sehen,
wenn wir uns den Deikstra-Algorithmus angucken für kürzeste Wege.
Den werde ich heute nochmal ein bisschen hier vorführen.
Okay. Ja, jetzt klingt das hier so ein bisschen,
ja, alle Knoten sind über einen Array direkt zugreifbar.
Jeder Knoten verfügt über eine Liste seiner Nachfolgerknoten.
Das ist so eine Art der Modellierung,
wie sie so klassisch auch in Algorithmen Lehrbüchern
zu finden sind
Wir werden das jetzt mal so ein bisschen objektorientiert umdeuten.
Es ist ja schließlich eine Objekte- und jedere Lehrveranstaltung hier. Ich würde mal sagen,
wenn wir eine bestimmte von einer bestimmten Modellierung ausgehen,
wo es nur darum geht,
ob ein Knoten erreichbar ist von einem anderen Knoten und es nicht mehrere direkte Kanten gibt,
dann kann man eigentlich sagen, jeder Knoten verfügt über eine Menge seiner Nachfolgerknoten.
Da gibt es einfach nicht die mehrfache Möglichkeit,
dass ein Knoten als Nachbar bei einem anderen eingetragen ist.
Zusätzlich ist es so, dass hier steht ein Array,
das ist eigentlich schon eine Überspezifikation.
Warum muss das ein Array sein? Ich kann einfach sagen,
alle Knoten sind einfach über eine Menge zugreifen.
Ich habe eine Menge aller Knoten, das ist mein Graf
Ja, also haben wir dann hier so die objektorientierte Modellierung,
wenn wir das jetzt uns überlegen,
wie wir es direkt in Code abbilden wollen.
Also sagen wir, wir haben eine Klasse für die Knoten.
Das ist sehr häufig so, dass man die Knoten explizit modelliert.
Also wirklich eine eigene Klasse beschreibt, die die Knoten abbilden soll.
Bei den Kanten gibt es dann wieder mehrere Möglichkeiten.
Man kann explizit eine Klasse Kante definieren und dann muss man
sozusagen für jede Kante, die im Graf existiert,
muss man dann Start- und Endknoten eintragen.
Und dann kann man auch wieder redundant auch noch bei den
Knoten eintragen, mit welcher Kante sie verbunden sind.
Kann man so machen? Oder man macht es so,
dass man sagt, ein Knoten hält eine Referenz oder hält Referenzen auf seine Nachbarknoten.
Wir wissen ja, wenn wir eine Klasse Knoten haben,
dann kann ich einfach eine Referenz halten.
Das heißt, ein Knoten kann einfach eine Menge von Referenzen halten.
Das sind dann seine Nachbarknoten. Da gibt es also
mindestens schon mal zwei Möglichkeiten, das zu bauen.
Und dann kann man auch eine eigene Klasse definieren, die die Graphen modelliert.
Okay, also dann gucken wir uns das erstmal an.
Knoten halten eine Menge von Nachbarn. Aber wenn jeder Knoten das
werden wir uns jetzt so angucken. Also wir spezialisieren es jetzt darauf,
was in der Übung auch oder in dem ehemaligen Übungsprojekt vorgesehen war,
dass tatsächlich jeder Knoten eine Menge seiner Nachbarknoten hält.
Da hat man so einen gerichteten Graphen automatisch realisiert,
weil ja eine Referenz immer nur in eine Richtung geht.
Und die Kanten werden also direkt mit Java-Referenzen realisiert. Sieht dann so aus,
die Klasse Knoten, da gibt es dann so eine Operation,
verbinde mit, kann ich ja sagen,
verbinde einen Knoten mit einem anderen Knoten und dann trägt der Knoten hier in deine Nachbarmenge,
also in die Menge der Knoten,
die seine Nachbarn sind,
trägt er diesen Knoten einfach ein
Man kann auch die Verbindung wieder trennen, da wird diese
Knoten aus der Menge entfernt. Man kann dann fragen,
ob ein Knoten eine direkte Verbindung hat zu einem Nachbarknoten.
Ja, und das ist dann auch schon die ganze Implementation,
die man da braucht für so eine einfache Klasse Knoten.
Wenn wir jetzt dann uns angucken,
wie ein ganzer Graf modelliert wird, dann kann man einfach sagen,
für einen ungerichteten Graf muss ja garantiert sein,
dass für eine Verbindung Zweierknoten beide Nachbarn wechselhaltig als Nachbarn eingetragen sind.
Also, wenn wir, und das,
vielleicht zeige ich erstmal das Projekt,
starten wir mal
Hier ist dieses Projekt. Das ist das, was ihr
auch theoretisch bearbeiten könntet. Ich habe hier eine Visualisierung dazu
gebaut. Also hier hat man jetzt die beiden Hauptklassen,
die ich jetzt gleich auch auf den Folien nochmal besprechen werde.
Die Klasse Knoten haben wir eben eigentlich schon gesehen,
mehr oder weniger, wie die aussieht.
Die sieht hier nicht viel anders aus als auf der Folie.
Kleine Änderung werde ich gleich noch besprechen. Und die Klasse
Graf. Und das soll halt so aussehen wie hier.
Hier ist es dann visualisiert. Hier ist jetzt so
ein Beispiel Graf visualisiert. Und ja, das ist jetzt
hier so ein ganz nettes Ding. Man kann hier jetzt
auch so die Dinger ein bisschen anfassen und so.
Und das ist so
ein bisschen hübsch gemacht
Man kann hier auch neue Knoten hinzufügen und so und kann die auch miteinander verbinden.
Also ich kann jetzt hier sagen, mach mir doch mal eine neue Verbindung.
Dann sagt er da unten, bitte erst ein Gewicht eingeben,
aha, hier Gewicht, dann sage ich hier mal irgendwie 42.
Und dann sage ich jetzt neue Verbindungen und dann sagt er,
Startknoten wählen, aha,
dann wähle ich mal den hier und den Zielknoten und aha,
dann kann ich also tatsächlich hier zwei Knoten miteinander verbinden.
So, und das soll ein ungerichteter Graf sein, man sieht,
hier sind keine Fallspitzen dran, also in beide Richtungen.
Und wenn ich einen ungerichteten Graf haben will,
dann ist das natürlich jetzt für eine Java-Modellierung,
wo die Nachbarschaft über eine Referenz modelliert ist, tatsächlich das wechselseitig eintragen.
Also in dem Graf, wenn wir sagen, die Klasse Graf,
enthält eine Menge von Knoten. Wir haben eben gesehen,
das können auch so Einzelknoten sein, wie hier in dem Beispiel.
Da kann also einfach so ein Knoten so los in der
Luft hängen, der muss ja nicht verbunden sein.
Also ein ganzer Graf besteht aus einer Menge von Knoten.
Also auch ein Graf, Herzone, Knotenmenge hier. Ja,
und dann, wenn neuer Toten hinzugefügt wird,
dann wird Knotenmenge Ad aufgerufen mit diesem Knoten,
der da übergeben wird,
haben wir gerade mal so mit dieser grafischen Benutzungsoberfläche hier gemacht.
Ich habe einfach auf einen neuen Knoten geklickt,
da wurde tatsächlich ein neuer Knoten erzeugt und dann an
dem Grafen aufgerufen, neuer Knoten.
Dann wurde der
hier hinzugefügt
Und dann kann man eben halt auch sagen,
verbinde direkt, muss man zwei Knoten angeben,
die dann auch irgendwie natürlich im Grafen sein sollten.
Und dann wird hier K verbinde mit K2,
K1 verbinde mit K2 und K2 verbinde mit K1 definiert.
Das heißt also, hier werden wechselseitig sämtliche Referenzen angetragen.
So hat man dann einen ungerichteten Grafen.
Und dann kann man eben halt auch hier noch sehen,
enthält, ob ein bestimmter Knoten tatsächlich im Grafen enthalten ist.
Ja, das können wir uns auch hier mal angucken.
Also der Knoten ist wirklich relativ langweilig. Also da gibt es hier,
gibt Verbindungsgewicht, das gucken wir uns gleich an,
hat Verbindung zu Knoten,
haben wir gesehen
Trenneverbindung zu, verbinde mit. Das ist also alles
ganz nachvollziehbar, so ähnlich wie auf der Folie.
Was da hier noch dazu kommt, ist jetzt,
dass sie auch ein Gewicht haben.
Also wir möchten einen gewichteten Grafen haben. Das heißt,
die Kanten sollen irgendwie ein Gewicht haben. Und das ist
hier in der Schnittstelle zu sehen, dass man das irgendwie kann.
Wie das umgesetzt ist, sehen wir uns gleich an.
Und wir sehen auch hier, dass diese Operation Iterator hier implementiert ist.
Also tatsächlich hier implementiert diese Klasse, dass Interface Java Lang-Iterible Knoten.
Das heißt, ein Knoten ist iterierbar mit der erweiterten Vorschleife.
Ich kann also tatsächlich mit einer erweiterten Vorschleife über alle Nachbarknoten eines Knoten
iterieren. Das werden wir uns gleich mal zunutze machen,
dass das dann sehr elegant auch hinschreibbar ist
Gut, und der Graf ist auch dann so ähnlich wie auf der Folie.
Klasse modelliert, gewichtete, ungerechtete Grafen. Über die Schnittstelle
können Knoten und gewichtete Kanten in Eingreifen eingefügt werden.
Auch hier, der implementiert das Interface Itterible. Ich kann also
auch über die Knoten eines Grafen iterieren mit der erweiterten Vorschleife.
Naja, und hier ist eben halt das Übliche,
die sitzt eigentlich genauso aus wie auf der Folie.
Was jetzt hier dazukommt, ist, dass es,
also neben diesem Verbinde direkt und enthält und Anzahl Knoten,
sind hier auch so ein paar Methoden implementiert oder vorgesehen.
Zum Beispiel die Frage, ob zwei Knoten verbunden sind.
Das sieht man hier auch in der Oberfläche
Ich möchte hier einen Knoten selektieren und mit Steuerung kann ich
einen zweiten selektieren. Das sind hier zwei Knoten selektieren.
Jetzt möchte ich fragen, sind die miteinander verbunden?
Das Ding ist jetzt hier nicht implementiert.
Deswegen sagt er, diese beiden Knoten sind nicht verbunden.
Wir sehen natürlich, dass die eigentlich verbunden sind.
Also offensichtlich fehlt hier die Implementation. Ist ja auch keine Überraschung
. Sieht man, die ist hier tatsächlich nicht drin.
Das wäre also was, was ihr implementieren sollt.
Das ist nicht so einfach, wie es aussieht.
Also das hier als Mensch zu sehen, dass die verbunden sind,
ist einfach. Für einen beliebigen Grafen, sich zu überlegen,
wie man das implementiert, ist nicht ganz so einfach.
Das geht sehr schön mit einer rekursiven Implementation.
Wer das dann mal implementieren will, kann das gerne machen.
Ist ganz hübsch
Hier sind aber auch noch andere Fragen, also wie viele
Komponenten hat der Graf oder was ist der kürzeste Weg?
Und hier müsste auch irgendwo eine Operation sein,
ich weiß gar nicht, wo die jetzt hingeraten ist.
Da Max Grat, der maximale Grat eines Grafen.
Den gucken wir uns gleich an. Ich will nochmal
eben jetzt ganz kurz auf den Folien noch vorstellen,
wie das hier mit dem Kantengewicht ist,
weil das habe ich jetzt noch nicht erzählt.
Wir haben ja diese Anforderung, wir wollen ein Gewicht für jede Kante haben.
Jetzt haben wir das Problem in unserer Modellierung momentan,
wir haben zwar die Knoten als Klasse modelliert als eigene Objekte,
aber die Kanten sind nur implizit modelliert über die Referenzen
So, deswegen können wir uns überlegen, wo speichern wir
jetzt diese Informationen, wie schwer eine Kante ist.
Man muss ja irgendwo hin. So ein Objekt und hier
ein Modellierung muss man in so einen Ort finden, wo man das unterbringt.
Und wir haben hier eine relativ elegante Lösungsmöglichkeit geboten von Java,
statt dass sich bei einem Knoten einfach eine Menge von Nachbarknoten habe,
habe ich eine Map, eine Abbildung.
Also eine Menge, eine Abbildung, eine Menge,
eine Map in Java ist eine Menge von Schlüsselwertpaaren,
wo immer von einem Schlüssel, der eindeutig sein muss,
auf einen beliebigen Wert abgebildet wird.
Der Schlüssel ist wie bei einer Menge eben eindeutig und
er wird kein beliebiges Objekt sein
Und dann ist der Lösungsansatz hier eigentlich relativ leicht.
Ein Knoten enthält nicht nur eine Menge seiner Nachbarn, sondern eine Abbildung.
Und die Nachbarknoten sind also dann die Schlüssel für die Abbildung,
also welcher Knoten ist denn der Nachbarknoten?
Schlüssel, eindeutig. Und der Wert ist dann ein Intager-Objekt.
Und das ist hier dann so angedeutet,
also statt einer Menge haben wir jetzt eine Map,
primär Schlüsselknoten und dann Wert, ein Intager, also das Gewicht.
Und wenn ich jetzt eine Verbindung zu einem Knoten herstelle bei einem Knoten,
dann muss man das halt in das Keyset eintragen,
die Mängel der Schlüssel, oder kann man das jetzt nachfragen,
beziehungsweise im Keyset nachfragen, ob ein Knoten enthalten ist,
wenn man etwas verbinden will, dann wird eben halt Parameter an Knoten übergeben,
als Nachbarknoten und das Gewicht für die Verbindung zu dem Knoten.
Und da wird hier einfach New Intacher Gewicht mit abgelegt in
dieser Abbildung, in dieser Map.
Ja, und dann kann man sich das Verbindungsgewicht geben lassen.
Da sieht man irgendwann hier, das Gewicht ist halt Nachbarn Get K.
Also ich frage an einem Knoten nach seinem, nach einem Knoten K.
Und wenn da eine Verbindung ist, ja,
wenn also das Gewicht gleich hinall ist, dann gibt es keine Verbindung.
Und ansonsten ist das Gewicht irgendwie hier in Value tatsächlich,
also der Wert dieses Intachers. Das ist hier eigentlich noch
ein bisschen umständlich gemacht. Inzwischen kann man ja durch das
Autobooxing und Unboxing direkt mit den Intwerten hier arbeiten.
Hier ist es noch so explizit gemacht, dass das sozusagen Intiger-Objekte sind.
Gut, okay. Jetzt könnte man ja vielleicht noch mal hier
auf diese Implementation draufgucken. Was ich jetzt zeigen kann,
ist, wir können mal live was implementieren und zwar den Max-Grad.
Also wenn wir uns mal hier den Beispiel Grafen angucken,
wer kann mir denn sagen, was der maximale Grad eines Grafen ist?
Das müsst ihr eigentlich in diskreter Mathematik behandelt worden sein.
Was ist der Grad eines Knotens
Weiß das jemand? Ja. Das war ja eine Bindung. Er sagt,
die Anzahl der Verbindungen, die abgehen, genau,
das ist die Anzahl seiner Nachbarn, in der Terminologie,
die wir jetzt hier so eingeführt haben,
also Knoten hat verschieden viele Nachbarn,
also der blaue Knoten hat zum Beispiel hier drei Knoten als Nachbarn.
Und der maximale Grad eines Grafen ist dann tatsächlich der maximale Grad.
Also in diesem Fall wäre das hier vermutlich dieser Knoten,
der hat hier sechs Nachbarn, also ist der Grad des
Grafen 6. Das würde ich jetzt gerne mal hier implementieren.
Hat jemand eine Idee, wie man das jetzt in
dieser Implementation machen könnt. Hat die meinte,
habe ich das so erläutert, dass das nachvollziehbar war,
wie man jetzt über die Knoten iterieren könnte,
um das zu implementieren.
Hat da jemand eine Idee? Ja, du hast eine Meldung.
Wir könnten sich in der Schleife liefern, was profitiert und genau.
Wir hätten das jetzt größtenden Grab Speichern erfordern. Ein Grab
der Größe als Erschreitung. Sehr richtig, ich wiederhole das. Er sagt,
wir können einfach durch unsere Knoten alle durchiterieren in einer Schleife
und merken uns immer den Grad des jeweiligen Knotens.
Und wenn er größer ist, als sei bisher größer,
dann wird eben halt der bisher größte Grad erhöht.
Ganz einfach, das können wir direkt hier so implementieren.
Also ich mache hier mal eine lokale Variable, Max Grad.
Und die sei mir erstmal null. Und am Ende liefere
ich dann Max Grad raus. So, soweit habe ich
nichts geändert. Dann mache ich jetzt eine Vorschleife.
Ja, was haben wir jetzt für eine Vorschleife?
Wir wollen jetzt eine erweiterte Vorschleife schreiben über die Knoten in
diesem Grafen. Also sage ich hier für jeden Knoten K
Das habe ich hier meine Knotenmenge. Das ist
die Menge, die der Graf selbst hält jetzt.
Da wird jetzt also einfach über diese Knoten iteriert.
Naja, oder was muss da jetzt gemacht werden? Okay,
ich habe jetzt hier, ah, jetzt habe ich,
also jetzt gehe ich durch alle Knoten durch und jetzt will ich für jeden Knoten ermitteln,
wie viele Nachbarn er hat.
Wie mache ich das? Wie ermittle ich von einem Knoten
die Anzahl seiner Nachbarn? Das ist momentan nicht in dem Knoten
selbst gespeichert. Auch da die Lösung, Wieder das Gleiche.
Ich mache einfach eine Vorschleife. Ich gehe jetzt bei jedem Knoten,
den ich habe, gehe ich einfach durch alle Nachbarn durch und zähle einfach einen Zähler hoch.
Ah, einen Zähler brauche ich noch. Also habe ich
hier sowas wie in Grad. Das ist gleich null.
Das ist die Anzahl der Nachbarn des jeweiligen Knotens,
in denen ich gerade vor der Nase habe.
Also sage ich jetzt hier für Knoten Nachbar,
für jeden Nachbar von K, in der Menge der Nachbarn von K.
Also ich habe hier, gehe ich durch alle Knoten des
Grafen durch und für jeden Knoten gehe ich seine Nachbarn durch
Ja, und dann mache ich hier sowas wie Grad.
Machen wir mal lieber Pre-Fix, wissen wir ja, das ist eigentlich schöner.
Da wird der Grad hochgezählt. So, ich zähle also einfach,
geh durch alle Nachbarn durch, jedes Knotens,
zähle dann einfach mit, wie viel sind das denn?
Und an dieser Stelle sage ich dann einfach,
if, Grad, größer Maxgrad.
Ja, dann ist wohl, Maxgrad gleich Grad.
Und schon haben wir das Ding hier implementiert.
Relativ einfach. Also zwei geschachtelte Vorschleifen
Das ist noch nicht so ganz elegant hin,
was wir hier eine Vorschleife brauchen,
um über die Nachbarn zu iterieren,
aber das ist ein anderes Thema fürs nächste Semester.
Das müsste eigentlich so schon funktionieren. Man kann das übersetzen.
Jetzt kann ich das hier insgesamt übersetzen. Jetzt kann ich
mir hier erstmal, kann ich Main aufrufen, damit das hier wieder visualisiert.
Und genau dieser Graf, der jetzt hier visualisiert ist,
den kann ich mir hier geben lassen, gibt den visualisierten Grafen.
Ah, okay, dann kann ich mir den hier wieder die Leiste legen.
So, jetzt kann ich hier tatsächlich aufrufen, Max Grat.
Ich kann erstmal sagen, Anzahl Knoten,
das sind zum Beispiel zwölf hier.
Stimmt das auch? Das sind vermutlich zwölf Knoten.
Ich habe es jetzt nicht gezählt.
Sollte passen
So, und jetzt müsst ihr hier bei Max Grad
ja hoffentlich dann nicht null rauskommen, sondern sechs.
Und siehe da, es kommt sechs raus.
Toll. Hat also einfach funktioniert. Gut, das erst
mal nur für diese Implementation hier. Dieses kleine Projekt,
wie gesagt, wer das haben will, kann das bekommen.
Jetzt noch mal ein weiteres Problem, das man auf Grafen häufig hat.
Man möchte nämlich oft etwas aussagen über alle Knoten oder eine
qualitative Aussage treffen über einen Grafen.
Und da soll eben halt jeder Knoten nur einmal bearbeitet werden.
Ich möchte alle Knoten besuchen. Wenn ich aber so
eine Struktur habe wie hier, so eine liebe Giraffenstruktur.
Dann ist natürlich die Frage, wie gehe ich denn jetzt vor?
Wie gehe ich denn jetzt durch alle Knoten durch und vermeide,
dass ich dann einen Knoten mehrfach besuche? Also wiederholtes,
erreichen ist möglich, weil es gibt ja Zyklen,
es gibt mehrere Pfade. Also von daher ist das nicht
so ganz trivial. Bei einem Baum war das einfacher,
da konnte man ja sehr gezielt einfach diese Vater-Kind-Beziehung oder Eltern-Kind-Beziehung durchgehen.
Bei einem Grafen ist es nicht mehr ganz so klar.
Also hier tatsächlich, was man dann machen muss,
man muss eine Buchführung machen. Man muss also irgendwie sich merken,
wo man schon war und da gibt es eben halt unterschiedliche Möglichkeiten.
Prinzip für so einen Durchlauf ist halt,
entweder macht man so einen breiten Durchlauf,
also Ich gehe erst mal sozusagen in die Breite zu allen Nachbarn oder ich mache einen tiefen Durchlauf.
Also zum ersten Nachbarn,
da gehe ich wieder zum ersten Nachbarn und so weiter,
bis ich irgendwo so am Ende bin,
wo keine weiteren Nachbarn mehr sind, über die erreichbaren Knoten.
Und dabei markiere ich die gesuchten, besuchten Knoten. Und einen Knoten,
den ich schon markiert habe, besuche ich halt nicht noch mal.
Gut, so einen tiefen Durchlauf lässt sich sehr schön rekursiv implementieren. Das werdet ihr,
wenn ihr es implementiert seht, rekursiv einfach,
heißt immer in der Theorie hier, vom Verständnis einfach,
ihr wisst, wenn ihr davor sitzt und das programmieren sollt,
ist es nicht ganz so einfach.
Das habt ihr wahrscheinlich auch schon an vielen Projekten gesehen,
die wir in SE1 hatten
Diese Markierung schon besucht, muss natürlich vor jedem Durchlauf zurückgesetzt werden.
Alternative ist, dass man die Markierung mit jedem durchaus einfach umkehrt,
quasi so Reverse-Logik. Ich drehe alles auf rot und dann wieder
alles auf blau und ich muss mir einfach nur merken,
was habe ich jetzt vorher gemacht.
Oder ich markiere nicht die Knoten selbst als besucht.
Damit verschmutzt man sozusagen die Grabstruktur, sondern der Algorithmus,
der durchläuft, der hält sich vielleicht eine eigene Menge von
bereits besuchten Knoten und merkt sich einfach,
wo bin ich schon gewesen?
Okay, jetzt kommen wir zu einem wunderschönen Problem
Dass sofort nachvollziehbar ist, dass man das haben will,
nämlich der kürzeste Pfad durch einen Grafen.
Bei einem gewichteten Grafen, also da,
wo die Kanten Gewichte haben, da möchte ich jetzt wissen,
was ist der kürzeste oder der günstigste Weg zwischen zwei Knoten S on Z.
Also hier ist so ein Beispiel gehabt, ich habe hier
einen Knoten S und hier habe ich den Knoten Z,
er ist verstarrt und Z für Ziel.
Und jetzt will ich den kürzesten Pfad rausfinden. Dieser relativ triviale Graf,
der auf der Folie zu sehen ist,
da würde ich mal vermuten,
dass jetzt nicht durch Draufschauen sofort klar ist,
wo der kürzeste Pfad ist
Selbst da ist das schon nicht gut erkennbar. Da muss man
schon so ein bisschen sich überlegen, wie man das macht.
Dass man sowas braucht, ist klar. Heutzutage muss das
niemand mehr verstehen, dass man so was braucht.
Also bei Navigationssystemen ist das genau die Frage,
ich will irgendwo hin, ich bin gerade hier,
zeige mir den kürzesten Weg oder den schnellsten Weg oder wie auch immer.
Da gibt es natürlich dann inzwischen verschiedene Gewichtungen,
aber im Prinzip ist das immer das Gleiche.
Ich muss ausgehend von einer bestimmten Bewertung der Kanten entscheiden,
ob ich diese Bekannte wähle oder nicht.
Okay, wie kann man das jetzt implementieren?
Was gibt es da für Algorithmen
Sehr häufig ist es bei diesen Algorithmen so,
dass sie nach dem Optimalitätsprinzip vorgehen. Das heißt,
wenn ich einen Pfad habe, von einem Knoten-U0 über U1 zu UZ.
Und ich weiß, das ist der kürzeste Pfad von U0
nach UZ. Dann ist einfach logisch, die Grundannahme,
dass ich dann auch sagen kann,
dass jeder Teilpfad innerhalb dieses kürzesten Pfades auch kürzeste Pfade sind.
Sonst wäre es irgendwie komisch. Es wäre ein ziemlich eigenartiges Prinzip.
Darauf kann man sich aber verlassen. Und das heißt,
wenn ich den kürzesten Pfad finden will, muss ich einfach auf kürzeste Teilpfade aufbauen.
Also ich konstruiere mir ein Netz von Knoten,
wo ich schon den kürzesten Weg kenne und versuche das dann
sozusagen langsam über den ganzen Graf ausbreiten zu lassen.
Das ist die Idee von dem Dixtra-Algorithmus. Wir haben den
Herrn Dixtra hier an verschiedenen Stellen schon kennengelernt und der wird
auch gerne als Wellenalgorithmus bezeichnet. Das ist eben halt,
wenn ihr Netz googelt, das ist der Dikester-Algorithmus.
Das ist ein Algorithmus, um den kürzesten Weg von einem
Knoten in einem Grafen zu einem anderen zu bestimmen.
Das war 1959. Sehr schön, also das war noch deutlich,
bevor man coole Visualisierungsmöglichkeiten hatte. Alles im Kopf. Also
der Dirkstrahl war schon ein ziemlich guter. Die Idee ist,
von dem Startknoten sende ich so eine Art equitisnante Welle aus,
die sukzessive alle Knoten des Graphen abdeckt.
Und irgendwann kann ich dann, wenn ich beim Zirknoten bin,
auch sagen, welches dann der kürzeste Weg ist.
Und das ist die Kernidee des Algorithmus, dass man drei Knotenmengen hat.
Es gibt die gewählten Knoten. Für die ist der kürzeste Weg vom Startnoten
erst bekannt. Ich habe also eine Menge von Knoten,
wo ich genau weiß, was der kürzeste Weg ist.
Also zum Beispiel hier jetzt der Knoten, uh,
der geht über hier zwei andere Knoten zuerst.
Da kenne ich einfach den kürzesten Weg
Die Totenmenge, diese Menge G ist am Anfang relativ klein,
man wählt die am Anfang klein, nämlich nur den Startknoten,
aber irgendwann, wie gesagt, wird das einfach mehr.
Dann gibt es Randknoten, für die ist ein Weg von
erst bekannt, aber es muss nicht der Kürzeste sein.
Also hier irgendein beliebiger Randknoten, der als nächster jetzt verarbeitet wird.
Und dann gibt es die unerreichten Knoten, also alles andere.
Terra Inkognita, also der Rest, der noch nicht bearbeitet wurde.
Hier liegen dann irgendwelche Knoten und hier liegt irgendwo der Zielknoten,
wo man hin will
Ja, das ist erstmal diese Grundidee,
die erstmal noch ein bisschen möglicherweise schwer nachvollziehbar ist.
Hier ist der Algorithmus relativ klar formuliert.
Das heißt also, am Anfang initialisiert man das so,
dass man die Pfadlänge aller Knoten, außer es ist unendlich.
Also wenn wir jetzt als Matrix machen oder wie auch immer,
ich habe also eine Startmenge, die nur den Startknoten enthält.
Das sind die, wo ich weiß,
was der kürzeste Pfad ist, von erst zu sich selbst.
Und dann gibt es alle Nachfolger von S,
also alle Knoten, die mit S direkt verbunden sind.
Die kommen erstmal in diese Randmenge rein
Ja, und jetzt ist einfach die Idee des Algorithmus,
wenn er leer ist, ja, dann kann ich nicht weitermachen,
weil ich Zeit noch nicht erreicht habe.
Wenn das nicht der Fall ist, dann entferne ich den
nächst gelingenden Rand, also aus dieser Menge der Randknoten,
die ich gerade in meiner Randknotenmenge habe, nämlich den,
der am nächsten dran ist.
Logischerweise muss das wohl der Optimale sein, optimale Kandidat.
Und den füge ich in Geh ein. Und dann,
wenn das der Zielknoten ist, dann kann ich die Vorhergängerliste von UbiSS einfach ausgeben und kann abbrechen.
Dann bin ich, bin ich am Ziel. Wenn das nicht der Zielknoten ist,
dann muss ich jetzt alle Nachfolger von U in diese Randmenge einfügen,
ist jetzt ein neuer Knoten in die G-Menge gekommen und sind bei der R-Menge,
kommen jetzt wieder Nachbarn dazu, möglicherweise, also die nicht in G sind,
dann vermerke ich Pfadlänge und Vorgänger für den kürzesten Pfad zu allen Nachfolgern von UNR und wiederhole zwei.
Das ist so schwierig nachvollziehbar, deswegen machen wir es mal an einem Beispiel.
Wir haben wieder diesen Graphen hier und hier haben wir unsere beiden Knoten,
also hier ist S und hier ist Z und ich möchte jetzt die kürzesten Pfad nach dem Dextraalgorithmus ermitteln und die Notation,
die jetzt hier gleich erscheint, ist,
man immer den Namen eines Knoten,
dann die Pfadlänge und das ist tatsächlich Fahrtlänge, die bis hinter der,
sozusagen die Fahrtlänge zu S von einem Knoten zu S.
Zu dem Staat Knoten. Und hier ist dann auch der
Vorgänger Knoten aufgeführt. Das braucht man für diesen Algorithmus.
Also am Anfang haben wir gesagt, gewählt,
die Menge der gewählten Knoten enthält nur S und hat natürlich die Entfernung null zu sich selbst.
Dann gibt es, und das haben wir gesagt,
das wird initialisiert mit den beiden Nachbarknoten,
also mit den Nachbarknoten von S,
also haben wir hier A und C, werden erstmal an diese Randknotenliste eingefügt.
Aber die ist sortiert. Ja, das heißt also,
die ist sortiert nach nach Gewicht, also wie teuer das jetzt hier gerade ist.
Also zum Beispiel, in diesem Fall ist C,
der Nachbarknoten, der am dichtesten dran an S liegt.
Also wird als erstes hier C auch in diese gewählte Menge aufgenommen.
Der ist ja da im Lichtesten dran liegt. Weil jetzt C aufgenommen ist,
kommen jetzt drei weitere Knoten hinzu, nämlich B,
F und G. A ist ja schon drin, A,
zwar auch ein Nachbarknoten von C, aber der ist schon drin.
Der ist hier schon drin, der ändert sich auch nichts.
Aber FG und B werden auch eingetragen. Und die tragen
auch wieder jetzt ein, wie die Entfernung von diesem Knoten zu S ist.
Also hier die 21 ist tatsächlich schon aufaddiert,
hier 13 plus 8. Also für das F ist 21 von S entfernt.
Wir wollen noch in der Randknotenmenge. So, als nächstes
wird jetzt wieder der nächstliegende Knoten in die Gehmenge bewegt.
Also hier A wird da rüber bewegt und es werden wieder alle Nachbarn hinzugenommen.
C und B waren schon drin. D wird hinzugenommen,
der ist hier, aber bei B hat sich auch was geändert.
Also bei B war es bisher so,
dass bisher der Weg über hier, über die 24 drin war,
das war hier die Entfernung vom S, hier 13 plus 11. Ja,
und jetzt kommt aber hier durch, dadurch,
dass A dazugekommen ist, gibt es jetzt einen kürzeren Weg, nämlich 6, 14 bis 20.
Und der ist natürlich jetzt hier in der Randknotenmenge entsprechend vermerkt.
Da muss man also aufpassen. So, und jetzt wird
dieses B entsprechend wieder hier rübergenommen.
Also hier tatsächlich kürzerer Teilfahrt nach B wird entdeckt.
Vorgänger und Fahrtlänge werden gemerkt. Das ist hier das,
was ich gerade gesagt habe. Und so geht das jetzt
weiter. Entsprechend wird jetzt hier B übertragen.
B kommt dann kein weiterer Knoten hinzu, weil wir alle drin haben.
Dann wird der F-Knoten gewählt. Jetzt kommt das E dazu,
weil ja das E hier neu dazugekommen ist und so weiter.
Dann kommt das E dazu. An dieser Stelle hier geh.
Es wird immer der Knoten genommen hier,
der am dichtesten oder am am dichtesten dran ist, an S.
Also hier, das ist ja immer die Entfernung zu S.
Zu dem Startknoten. Ja, und so geht das hier munter weiter.
Also hier wird das eh rübergenommen, kommt das Haar dazu,
dann kommt das D, wird rübergenommen, kommt nichts Neues dazu.
Hier wird das Haar dazu, jetzt kommt endlich Z dazu.
Ja, und hier wird dann wohl irgendwann auch noch,
so, und jetzt sind wir tatsächlich beim Zielknoten.
Und wenn wir da mal sind, wenn der Algorithmus sozusagen beim Zielknoten ist,
also nicht abgebrochen ist, weil der nicht erreichbar ist,
dann wissen wir tatsächlich den kürzesten Pfad.
Das ist der kürzeste Pfad in diesem Grafen.
Ja, der hat also das Gewicht
So, jetzt will ich natürlich wissen, was ist denn der Pfad?
Das eine ist, wie lang ist er?
Das andere ist, sie möchte ihn natürlich auch haben.
Und das geht eben halt jetzt dadurch, dass wir diese wunderbare Notation haben,
dass immer der Vorgängerknoten auf dem kürzesten Pfad bekannt ist.
Das ist sozusagen mein Zielknoten, da laufe ich rückwärts zum Vorgänger, das ist Haar.
Haar, da gucke ich immer in dieser gewählten Knotenmenge durch.
Da ist ja immer der direkte Vorgänger vermerkt,
also der kürzeste Weg, über den das laufen kann.
Also hier F, dann über C und dann von C
über, ja, hier über S.
Das heißt, das hier ist der kürzeste Pfad.
Das kann man tatsächlich algorithmisch ermitteln und das ist auch implementierbar in diesem Graf,
den wir hier euch vorgegeben haben, in dieser Grafen-Implementation.
Ist nicht ganz trivial. Das ist wirklich was für Leute,
die besonders ehrgeizig sind und da einfach mal Lust zu haben.
Da ist eine Frage, jetzt zwischen, ich glaube,
viel und niemals, da kommt jetzt nichts.
Du möchtest ganz hartes, aber weiter gemeint sein.
Und wenn wir eine Kürzerung machen, zwischen essenziell und unten bleiben können,
Wir haben die Umfahrt, die nicht beachtet wird.
Das kann eigentlich nicht sein. Also die Aussage ist,
ich glaube, ich habe nicht richtig verstanden,
wenn jetzt der Abstand von I zu Z kürzer wäre,
von G nach Z, von G nach I,
wenn der eins wäre, ja,
vom Essen hat es sehr gut gekommen,
aber ich glaube, das Laufen weiß ich nicht.
Ja, anstatt 647, das wäre mal einfach kürzer.
Der würde aber auch den Algorithmus nicht beachtet werden,
weil er zählt, okay,
mich wartet,
wir aber trotzdem halt ein Partner
Zerfüllt wieder hoch. Okay, wir müssten also gucken,
wo wird das G, also vielleicht fürs Video nochmal.
Also wenn hier diese Entfernung kürzer wäre, sagt sie,
dann würde das I nicht beachtet werden.
Ich glaube das nicht. Man müsste das wirklich sich in Ruhe angucken.
Ich glaube, da haben wir jetzt die Zeit nicht für,
aber du kannst es ja nochmal dir nachvollziehen mit dem Algorithmus.
Der Algorithmus funktioniert, er ist nicht von mir,
also deswegen, ich gehe davon aus, dass es funktioniert,
dass dann auch sich vorher die Sache anders entwickelt hätte,
weil dann hier das I schneller wahrscheinlich reingeraten wäre über das G.
Das G ist ja hier irgendwo schon drin, Moment,
wo ist das G,
irgendwo ist das G hier
schon drin
Ja, wo ist das G? Hier ist das I
verloren gegangen, oder? Nein. Das ist dann halt
sechs. Ja, hier ist es drin, genau.
Hier ist das I. Und das wäre dann weiter vorne.
Dieses I wäre dann deutlich weiter vorne.
Und dann würde es natürlich auch wieder früher reinwandern.
Also das passt schon. Da war noch eine Frage.
Ja, das ist manchmal bei der RVV-App zu tun.
Er fragt, warum das manchmal bei der HVV-App
so schief läuft.
Ja,
wie soll ich sagen
Es hängt halt von den Leuten ab, die das implementieren.
Also die Algorithmen sind da. Es ist aber inzwischen so,
dass es also bei denen Datenmengen, die da verarbeitet werden müssen,
Heuristiken eingesetzt werden. Das heißt also,
man macht nicht mehr eine vollständige Überdeckung von dem Graphen über den Dicstar-Algorithmus,
sondern es gibt andere Möglichkeiten, dass man so Optimierungen drin einbauen kann.
Man weiß, man will irgendwie von einer bestimmten Stelle in eine bestimmte Richtung,
dass man dann bestimmte Stationen gar nicht mehr mit einbezieht,
weil es ein Riesenumweg wäre.
Das kann man sozusagen schon mit Windrichtungen mit einbeziehen und so.
Sobald man solche Heuristiken einbaut, hat man immer die Gefahr,
dass es nicht mehr
optimal ist
Und sowas wird da teilweise auch gemacht, sonst könnte man es nicht verarbeiten.
Und es ist so, die HVV-App ist eine Mobil-Anwendung und die
ist eine abgespeckte Version dessen, was ihr im Netz benutzen könnt.
Also wenn ihr einfach auf dem Server das berechnen lasst,
dann haben die einfach mehr Speicher dafür.
Also wir haben tatsächlich Leute gehabt bei uns im Oberseminar,
die da mit dran gewerkelt haben an der App und dann gesagt haben, naja,
wir können halt auf einer Mobilgerät nicht den ganzen Knoten,
den ganzen Grafen abbilden,
wir müssen eine abgespeckte Version machen und dann hast du nicht mehr alles berücksichtigt.
Und das muss man einfach in Kauf nehmen.
Dafür hat man den Luxus, dass man es in
seiner Tasche sich berechnen lassen kann
Aber das ist ein Trade-Off und das ist was,
was wir hoffentlich auch hier in SC1 mitbekommen habt.
Es gibt immer so ein Trade-Off, ja,
also so wie viel Geschwindigkeit kann ich haben,
wie viel Speicherplatz brauche ich und so weiter.
Gibt es sonst noch Fragen jetzt zum Grafen mit?
Da sind noch Fragen. Ich glaube, er war zuerst
da hinter dir, also der erste, vielleicht der Kollege dahinter.
Ja, das war von den Radklubis. Da kenne ich mich drauf,
zum Beispiel mit 700, 2 Prozent Zeile, A,
nach Vers 14 bis, kommt der Platz 4 auf Platz 4 und mutet das fast darstellen.
Okay, also das ist jetzt eine sehr gezielte Frage zu diesem konkreten Beispiel,
wenn jetzt bestimmte Knoten kürzer dran wären, ich glaube,
also man muss dann einfach wenn der Knoten,
wenn der Graf anders aussehen würde, wurde ja auch der Algorithmus anders laufen, probiert das einfach aus.
Implementiert ist, dann wisst ihr mehr. Also wir brauchen jetzt
hier nicht zu sagen, das wird sonst zu detailliert,
sorry, aber da ist noch eine Frage.
Ja, ich bin natürlich eine Ratlänge.
Ich habe eine Richtung, wie verwirrt man die dann auch.
Also das ist ja nicht eine kürzeste Gefahr,
sondern nur der Partner, der kürzeste Gebiet. Okay,
also er sagt, was verwirrend ist in der Darstellung,
ist, es gibt einen Unterschied zwischen kürzesten Pfad und dem Pfad mit dem geringsten Gewicht.
Das ist eben halt eine Frage der Betrachtung,
was man haben will
Wenn das hier in der Visualisierung teilweise länger aussieht,
das ist so ähnlich wie hier. Dieser Graf ist auch
nicht irgendwie, ich kann hier ja beliebt die Dinger langziehen.
Plötzlich ist das zwölf, viel länger als die 23 hier.
Das ist einfach so, dass man davon abstrahieren muss,
das ist einfach eine Darstellung. Genauso ist das auch hier.
Und man kann natürlich zählen, wie viele Knoten liegen drauf.
Das ist dann auch eine Form von Kürze.
Auch das kann man optimieren. Es gibt tausend Optimierungsmöglichkeiten.
Das wollen wir hier nicht vertiefen. Sonst noch Fragen jetzt,
die wirklich irgendwie noch, hier, da ist noch eine Frage.
Am Anfang mit gewichten Gleichnissen. Also wenn du die Bücher
von SCC und von Essen arbeiten, die Krankheiten geben,
die bedeuten. Dann nimmt er den,
der nimmt einen von beiden und das wird nicht zu einem Problem führen,
weil dadurch die Reihenfolge sich keine Probleme ergeben können,
weil dann ja das nächstes vermutlich der zweite Knoten,
der ja die gleiche Länge hat, auch in die G-Menge reinwandern würde.
Also das funktioniert. Also lasst uns das einfach hoffen,
dass der funktioniert. Okay, also das war auch jetzt
nur, um euch so einen kleinen Geschmack zu geben.
Also Grafen und die Algorithmen da drauf, das ist wirklich ein riesiges Teil der Informatik.
Da gibt es ganz viel Zeug dazu, kurz,
Graf besteht aus Knoten und Kanten, Kanten können gerichtet oder ungerichtet sein,
in einem gewichteten Grafen haben, die kannten Gewichte, Grafendurchläufe,
besuchen jeden Knoten mindestens einmal, ein häufig zu lösen.
Das Problem ist, den kürzigsten Weg zu finden.
So, das war's mit dem inhaltlichen Teil.
Das ist das Ende von SE1. Es ist tatsächlich so,
nächste Woche werdet ihr vergeblich hierher kommen und SE1 hören wollen.
Es wird nicht mehr stattfinden. Nein,
ich glaube nicht, dass ihr hier sein werdet
Aber es ist natürlich nur fast das Ende. Also was
ich jetzt noch machen will, ist noch so eine kleine Retrospektive.
Und da würde ich jetzt gerne hören wollen,
wollt ihr, dass wir durchmachen?
Oder wollt ihr eben die 5-Minuten-Pause wie sonst auch immer?
Wie ist so das Meinungsbild? Absolut. Ich wusste,
dass sie das sagt. Abstimmelt, Sturesi, ja,
ja, klar. Mache ich. Kann ich ja.
Ich habe ja hier spontan Abstimmung. Spontan Abstimmung, spontan
zwei Antworten. Die Antwort A heißt Keine Pause und die
Antwort B steht für Pause. Kann man sich merken.
Also jetzt könnt ihr abstimmen. Wollt ihr... Ja,
da haben alle sofort eine Meinung dazu, ja?
Wow, wow, wow. Wie viele Leute sind hier
? Der Hammer. Unglaublich. Ja, sehr schön.
Also wahrscheinlich sind ganz viele Leute auch zu Hause an den
Bildschirmen und gucken das live.
Und wollen auch jetzt eine Pause mit sich
eine Cola holen können oder so
Wir halten das mal an. Wir gucken mal, wie
die Verteilung ist. Also, die Antwort A ist stärker.
Zwei Drittel sind der Meinung, wir machen keine Pause.
Das heißt, diejenigen, die jetzt eine Pause wollen,
müssen einfach jetzt den nächsten Teil verpassen und müssen leise rausgehen.
Wir machen jetzt einfach weiter. Ich mache jetzt durch.
Das ist richtig. Beim letzten Mal, bitte?
Ich antworte es richtig. Oh, mal und gucken hier
. Ja, das ist keine richtige Antwort dabei.
Habe ich nicht gewertet. Kann man, glaube ich,
auch nicht bei solchen spontanen Umfragen.
Gut,
sehr schön
Dann mache ich jetzt die Retrospektive. Ja,
ich möchte jetzt noch mal so ein bisschen eure Gedanken schweifen
lassen über das, was passiert ist.
Nur, dass ihr noch mal jetzt einmal so Revue passieren
lasst, was ist eigentlich dran gewesen? Ihr wisst,
dass diese Übersicht habt ihr jetzt zigmal von mir gesehen.
Ja, wir haben also auf vier Stufen hier das Ganze eingeteilt,
was wir gemacht haben. Auf Stufe 1 haben wir
erst mal so Klassen und Exemplare uns angeguckt,
mit so ihren Zuständen und den Methoden und den formalen Parametern und dem ganzen Kram.
Stufe 2 dann Referenzen, ganz wichtiges Konzept, ja,
in Java zumindest. Schleifen, Stufe 3 dann Interfaces eingeführt
und dann auch Sammlungen,
weil die braucht man relativ
Direkt, wenn man mit Interfaces, mit Sammlungen umgehen will,
also Set und List und ähnliches. Black Box-Tests. Und
dann haben wir uns die letzten fünf Wochen tatsächlich damit beschäftigt,
wie kann man denn sowas, solche Sammlungen auch schick implementieren.
Dazu haben wir Arrays kennengelernt. Dann haben wir Listen implementiert,
Hash-Verfahren implementiert. Wir haben auch sortiert. Und wir haben
heute auch mal gesehen, wie man so mit Grafen umgehen kann.
Das ist so der Überblick über SE1. Wir hatten 14 Aufgabenblätter.
Wir hatten eigentlich nur 13, wenn man es genau nimmt.
Also das 14. ist ja eigentlich rausgefallen. Also haben wir
hier 13 Aufgabenblätter. Wir hatten also auf verschiedenen Leveln diese
verschiedenen Aufgabenblätter. Und einfach nochmal so, dass ihr nochmal
so ein bisschen euch erinnert, was so dran war.
Also das erste Aufgabenblatt war so, ja,
interaktiv mit Objekten und gegen gar keinen Quelltext ansehen.
Einfach nur mal in Java, in Bluejay-Objekte manipulieren, Zustand sondieren und ähnliches.
Im zweiten Blatt ging es dann darum, dass ihr das,
was ihr interaktiv gemacht habt, auch implementieren solltet.
Da ging es um dieses Zeichnerbeispiel, noch relativ einfach.
Okay, dann die nächste Aufgabe, nächste Aufgabe,
da habt ihr immer neue Klassen geschrieben.
Also sowas wie Konto, Ratemaschine, wir haben auch über Sintax gesprochen.
Dann auch nochmal was mit neuen auf mit neuen Klassen
dann geleitet
Kommazahlen waren damit das Thema und die Osterregel.
Habt ihr implementiert teilweise. Das war dann Level 1. So,
und dann haben wir auf Platz 5, haben wir dann angeguckt,
wie ist das denn mit so Objekten,
die interagieren über Referenzen, also Überweisungsmanager, Uhrenanzeige und ähnliches.
Platz, Platz 6 ging es um Schleifen, ja,
Vorschleife, Waldschleife, Turtlegraphics, auch so ein bisschen Syntax und Korrektheit.
Platz 7 ging es um Rekursion,
da haben wir uns auch reguläre Ausdrücke angeguckt,
das war schon ein bisschen fortgeschrittenes Zeug.
Dann Blatt 8, Testen und Interfaces,
da haben wir dann uns angesehen,
wie man tatsächlich mit einem Interface
mehrfach implementieren kann
Dann haben wir uns Mengen und Listen angesehen aus dem Collections-Framework.
Da haben wir dann verschiedene Fälle, Anwendungen, Anwendungsfälle gehabt,
wo wir dann diese Mengen und Listen auch benutzt haben.
Platz 10 waren Arrays, Bildbearbeitung, Blatt 11,
Listen implementieren, diese beiden Implementierungsmöglichkeiten mit den fetten Testklassen.
Dann Platz 12, Hashion,
Blatt 13 sortieren und auch Stacks und Blatt 14 die Grafen.
Ja, das war einfach nur, dass wir nochmal so
in Erinnerung habt, was da alles passiert ist.
Und jetzt habe ich dazu so ein paar Fragen.
Und da würde ich jetzt auch gerne nochmal so
ein bisschen Feedback einholen
Also machen wir noch mal ein bisschen Storesi.
Was mich als erstes mal interessiert, war diese Strukturierung der
Vorlesung in vier Komplexitätsstufen, war die hilfreich oder nicht?
Einfach mal eine Meinung dazu abgeben, fände ich ganz hilfreich,
um das zu sehen. Also hat das irgendwas geholfen,
hat das irgendwie, oder war das eigentlich irgendwie Zennobo,
der so obendrauf gesetzt wurde und nicht viel gebracht hat.
Also wenn er eine Meinung zu hat,
bitte jetzt abgeben, das geht wunderbar.
Ich habe jetzt da um einen Timer eingestellt,
also nur 30 Sekunden,
damit es
ein bisschen schneller geht
Timer abgelaufen, wunderbar. Wir gucken uns das gleich an, ja.
Nächste Frage. Welches Wetter hat dir am besten gefallen?
Also einfach mal so eine Meinung dazu, welches bei Tatrek.
Die ersten vier habe ich mal rausgelassen, die gefallen ja niemandem.
Aber hier jetzt habt ihr dann vielleicht auch eine Mahne dazu,
Wechselblatt, irgendwie ganz cool gefunden habt, welches ihr interessant fandet.
Auch Blatt 14 ist jetzt nicht dabei,
weil ihr es ja vermutlich noch nicht bearbeitet habt.
Auch da jetzt mal eben aufnehmen,
wie da so
die Meinung ist
Ja, 190 Stimmen, Wahnsinn. 200 Stimmen.
Sensationell. Nächste Frage. Jetzt geht es ein bisschen,
wird es ein komplizierter. Also ich habe in dieser Veranstaltung
meiner allerersten Programmiererfahrung gesammelt und viel dabei gelernt.
Das ist die Aussage, die da steht.
Und jetzt für die, die vorher schon programmieren konnten,
nein, ich konnte vorher von probieren, habe nicht viel gelernt.
Oder nein, konnte vorher probieren, habe aber trotzdem viel gelernt.
Kann ja sein. Und dann für diejenigen,
die tatsächlich die ersten Programmiererfahrungen gesammelt haben, ja,
stimmt völlig, war genau richtig.
Ja, ich habe gelernt einiges, aber es hätte mehr sein können.
War ein bisschen schlapp, was ihr hier geliefert habt.
Oder, ja, viel gelernt, aber es war
zu viel
Also auch da mal eben die 30 Sekunden. Ihr habt da
sicherlich auch eine Meinung dazu. Auch da, ja,
kommen wir hoffentlich irgendwie so an die 200 Stimmen ran,
dass ihr da möglicherweise eine Meinung dazu habt.
Aha, noch fünf Sekunden
Gut, abgelaufen. Dann gucken wir doch mal,
was wir hier noch haben. Ja, Blue Jay.
Ist ja auch so ein beliebtes Thema. Inwieweit ist Blue
Jay jetzt wirklich sinnvoll und geeignet hier im ersten Semester?
Auch da die Frage, also Blue Jay hat mir geholfen,
die Objekte mit dem Kernbegriffe besser zu verstehen, unbedingt,
ohne wäre es schwer gewesen.
B hat viel geholfen, C ein bisschen D gar nicht.
Auch da jetzt einfach mal die Meinung dazu,
würde mich interessieren
Ja, das würde ich auch nicht sagen. Da gibt es
tatsächlich auch lauter leere Revolutionen, ja durchaus Meinungen dazu,
die gesagt haben, Blue Jay geht gar nicht irgendwie.
Ja, aber vielleicht ist es ja auch so,
dass hier eine ganze Menge Leute da ganz froh drüber sind,
dass wir Blue Jay eingesetzt haben.
Okay. Kommen nur noch zwei, geht ganz schnell jetzt.
Das Live-Programmieren in den Vorlesungen war für das Verständnis hilfreich.
Also ich bin ja hier relativ viel live am Programmieren gewesen.
Das ist eine Art und Weise, Vorlesungen zu halten,
die kann gut sein, kann auch schlecht sein.
Auch da eine Meinung wäre ganz gut, wie er das einschätzt.
Also ist das tatsächlich, ja,
Naja, eher ja oder eher nein? Oder nee,
das hat total gestört. Hat er tatsächlich eher das Ganze erschwert hier,
das Verständnis. Ja, also ich sehe es schon,
da sind die Meinungen nicht mehr ganz so ausgeprägt.
Das sind nicht mehr ganz so viele Stimmen, die da reinkommen.
Gut. Und dann machen wir die nächste noch.
Das Modul, ach ja, das ist eine Frage,
die immer, finde ich, relativ wichtig ist.
Also wie effektiv waren wir denn hier? Und das ist
eine Aussage, die irgendwie für sich genommen ganz schön ist.
Also wenn jemand sagt, Durch dieses Model habe ich wirklich
mehr Lust auf Informatik. Ja, dann sagt er,
ja, er sagt, naja, okay,
eher ja oder eher nein, oder um Gottes Willen.
Auch da könnt ihr jetzt 30 Sekunden lang eure Meinung abgeben.
Also hat SE1 dazu beigetragen, dass ihr mehr Informatik
wollt.
So, jetzt bin ich gespannt,
ob das hier funktioniert, dass ich jetzt einfach zurückblättere.
Schauen wir mal. Gucken wir uns mal die Ergebnisse an.
Strukturierung in Komplexität rum war hilfreich. Alles weg.
Was denn? Das war der falsche Button. Ah,
oh. Ich bin ja ein bisschen doof, ne?
Habt ihr recht. So, also, die Strukturierung war,
ja, also da ist doch eine deutliche Mehrheit dafür,
dass es hilfreich war
Nicht so richtig viel hilfreich. Also einige sagen,
also ein Viertel sagt, ja, ja, sehr hilfreich.
Und dann so, boah, eher hilfreich. Und die anderen
sagen so, ja, ja, ja, geht so.
Gut. Ja. Okay. Also immerhin 10 Prozent sagen,
um Gottes Willen, das hat alles nur, hat mich total gestört.
Gut. Dann, welches Aufgaben hat dir am besten gefallen?
Wow, das ist ungewöhnlich. Das Sortieren fand anscheinend ziemlich
viele sehr schön. Mich wundert das hier, ja.
Das kann nicht ganz ernst gemeint sein
Okay, weil eigentlich ist hier dieses Blatt
immer sehr beliebt, das mit der Bildverarbeitung.
Ah, okay. Ich sehe schon. Dann,
ich habe in dieser Form schon meine allerersten Programmiererinnen und viel dabei gelernt.
Ja, gelernt, einiges, aber es hätte mehr sein können.
Okay, also da waren tatsächlich viele Leute dabei,
die gesagt haben, hätte mehr sein können.
Stimmt völlig, war genau richtig, das waren nur 11 Prozent,
okay. Und da gibt es einige, die sagen,
es war viel zu viel, das sind eher so 14 Prozent.
Okay, also diejenigen, die jetzt hier bei der Abstimmung dabei waren,
da gibt es also anscheinend etliche,
die gesagt haben,
das hätte
viel mehr sein können hier
Okay. Nein, konnte vorher programmieren, habe aber viel gelernt.
Immerhin auch das. Das ist ja, also auch erfreulich,
dass die, die vorher programmieren konnten, in der,
ja, doch Mehrzahl dann der Meinung sind,
dass sie noch was gelernt haben.
Gut. Blue Jay hat mir geholfen. Ja, okay.
Also so 50 Prozent sagen unbedingt oder hat viel geholfen,
aber es gibt zehn Prozent, die sagen,
hat gar nicht geholfen und so ein bisschen, ja,
hat so ein bisschen geholfen, immerhin auch noch 40 Prozent.
Okay, klare Aussagen. Das Live-Programmieren war hilfreich,
okay, da ist wieder eine relativ klare Mehrheit dafür,
zwei Drittel wirklich auf jeden Fall und dann nochmal,
also eher wenig,
die sagen nein oder eher nein
Und Lust auf Informatik gesteigt, oh, oh.
Dieses Motiv hat meine Lust auf Informatik gesteigert.
Das ist natürlich ein super Wert. Das ist, das ist
, das ist toll. Das finde ich extrem positiv.
Sehr schön. Also wir haben euch nicht verschreckt.
Das ist gut. Das ist gut. Sehr schön.
Okay. Dann geht's nochmal so ein bisschen, was ich
noch sagen wollte, was auch nochmal möglicherweise für euch interessant ist.
Es gab so ein paar Besonderheiten in diesem Durchlauf.
Es gab Storesi. Ja, das ist nicht das
erste Matis-Storesi-Einsätze, hat aber erneut großartig funktioniert.
Also es gab hier keine Hänge. Also da muss man wirklich sagen,
Wolf hat da ein schönes Stück Software in die Welt gesetzt.
Kam auch sehr gut an. Also ich hatte das Gefühl,
dass immer wieder das Feedback in die Richtung sehr,
sehr positiv war. Livestream und Aufzeichnung der Vorlesung. Boah,
kam sehr gut an, wenn es denn funktioniert hat.
An manchen Stellen gab es aber dann so Feedback,
dass der Livestream oft zu früh abgebrochen ist.
Also es gab Leute, die haben das zu Hause geguckt und
dann waren immer so die letzten Minuten, fehlten dann.
Was gerade dann für diejenigen doof war, die Storesi mitmachen wollten, per Remote.
Das war dann nicht so schön. Die Online-Selbst-Tests kamen auch
sehr gut an. Also da war auch das Feedback in
der Evolution ziemlich gut. Die wurden sogar Semester begleitend genutzt.
Also das, werde ich gleich nochmal sehen,
werde ich gleich nochmal zeigen, anhand ein paar Zahlen.
Dann die SR1-Clips, ja, die sind,
die kamen gut an, aber der Effekt ist noch unklar.
Da müssen wir nochmal die Evolution abwarten,
ob da irgendjemand von euch beeindruckt haben.
Ich habe hier einfach nochmal welche mitgebracht.
Also wir gucken jetzt noch mal einen Clip,
damit ihr nochmal ein bisschen Spaß habt hier
Musik Oh,
was war stopp
Hoffentlich. Genau, ein bisschen. Außer bis zehn,
die gut waren. Und wenn wir das geraten haben,
dann fragten wir auch die drei Broten, das machen wir uns dann.
Ganz teuer. Es geht um ein Konto, das wir
stellen sollten. Oh, und dann hast du hier noch
eine Methode jetzt allein. Deinen Betrag als Karrameter übergeben.
Und dann wird das neue Zeilenfest erlebt. Mit der Mittag
war es fertig und dann könnt ihr auch meinen Nachnamen machen.
Möchtest du nicht persönlich sein? Hände, einfach mal so.
Okay, mach ich noch kein Lied zu. Okay,
3-1. Oh, dann hätte ich ja nur noch
mal was, was eh ist im Angriff.
Diese Klasse libudierte Eintritte kommt und nicht mal ein Licht überziehen klein.
Ja, super gut. Formulieren, was ich verlasse,
ohne Kommentare, nehmen wir eigentlich das Thema Stars.
Das ist quantitation. Das ist ja libududu. Genau,
das ist ein Sota. Was machen Konsorte? Also möglicherweise
lizenzenzenzierter, zum Glaube, ja. Ganz genau. Okay,
dann erklär du mir doch noch mal,
was jetzt hier in der ersten Zeit kommen und uns körperlich passiert.
Kommen wir mal gleich. Ja, drittmaßen ist einfach froh,
dass das hier eben auch geht, genießt.
Also ganz im Ernst, ich habe hier allen,
dass wir hier nicht sehr gut zusammengaben. Das heißt,
das kann nicht sein, nicht mehr so weit orientieren.
Ja, das ist mein Vorschlag, ist sowieso aus,
wenn die Politik da arbeitet, dass es wirklich so eine Abnahmen ist.
Diese oft. Und bei dir wäre es cool,
wenn du dich noch mal auf einen großen Boden setzt und noch mal wirklich Teil investiert,
dann können sie glücklicherweise später eine Daten, aber noch klappen.
Ja. Ja, das ist ja auch so
Kann. Also ich glaube,
ich habe noch nie bei einer Abnahme wirklich so grimmig geguckt,
aber wir wussten, wir wussten das ja ein bisschen überzeichnen.
Gerade bei diesem Video, ich weiß nicht,
ob ihr das so kennt, wenn so Filme gedreht werden,
da gibt es dann auch die rausgeschnittenen Szenen und ich habe eine rausgeschnittene Szene von diesem,
von dieser Aufnahme, die es ging ziemlich nach hinten los,
die kann ich jetzt noch mal zeigen.
Ich hoffe, die klappt jetzt hier,
ihr müsst gut zuhören, weil das geht gleich am Anfang,
ist es dann gleich schon.
Also, ja, ich weiß nicht, sonst will was Böses sagen.
Scheiße, warum? Entschuldigung, ich glaube,
das ist wirklich interessant. Ich habe das
irgendwo in Ungut
Man sieht dann auch,
wenn man sich das Video nochmal anguckt, das Original,
also da sieht man auch am Ende,
wie dann der eine Kommilitone dann so grinsen muss an der Stelle,
wo ich das dann, weil wir das natürlich,
beim nächsten Mal musste ich mich dann sehr zusammenreißen,
dass ich dann einen Hosenboden sage.
Und da hat er dann sehr grinsen müssen. Also er
grinst nicht, weil der andere jetzt keine Abnahme kriegt,
sondern, sondern, ja, okay.
Also die SE1-Clips, wie gesagt, wie der Effekt auf euch
jetzt wirklich war, müssen wir noch sehen.
Aber insgesamt hat uns das alles ganz gut gefallen.
Leerlabor Online-Selbsttests. Im letzten Jahr war das so,
dass da ungefähr so aus,
am letzten Tag vor einem Jahr,
also so,
wie viele
Stand heute stimmt nicht ganz. Ich habe schon wieder heute
gar nicht aktualisiert. Also es sind doch deutlich mehr Leute,
die Level 1 schon gemacht haben. Und ich glaube,
bei Level 4 sind es auch mehr inzwischen als 76.
Ich habe heute noch nicht geguckt, wir könnten gleich mal reingucken.
Können wir eigentlich direkt mal machen. Wir sind ja hier,
wir sind ja hier sofort dran an diesem, da, guckt mal.
Also zum Beispiel Selbsthess Level 405, ja, tatsächlich.
Und 794 und also ganz tolle Zahlen, deutlich mehr als im letzten Jahr.
Also das ist tatsächlich, und das ist das Spannende,
das ist Semester begleitend genutzt worden.
Das war ja unser Ziel, dass ihr diese Tests macht
und früh Feedback bekommt,
oh Mann
Level 1, boah, ich habe so viel nicht verstanden.
Ich muss, glaube ich, ein bisschen mich auf den Hosenboden setzen.
Das sieht man auch gleich auf den Hosenboden. Ich habe
Hosenboden gesagt. Ja, und das sieht man auch in
der Lehre-Evolution. Also was da so an Ergebnissen kam,
ist ganz interessant. Die leere Evolution, wie gesagt,
ist immer ganz spannend, was da so an Freitext-Feedback kommt.
Aber eine Kennzahl, die finde ich immer ganz wichtig.
Und das ist diese hier. Wie viele Stunden pro Woche
investierst du insgesamt? Präsenzzeit und Heimarbeit in das Thema dieser
Lehrveranstaltung. Da haben irgendwie 335 Leute teilgenommen an dieser Beantwortung
dieser Frage
Und ihr erinnert euch möglicherweise daran,
dass ich am Anfang des Semesters gesagt habe,
der Deal ist für diese Veranstaltung,
ihr müsst mindestens acht Stunden pro Woche investieren.
Wenn ihr weniger investiert, rennt ihr möglicherweise in Probleme,
acht Stunden ist fair für alle Seiten. Möglicherweise ist es mehr.
Es kann mehr sein, es sollte nicht weniger sein.
Dann gab es hier solche Ergebnisse vor ein paar Jahren.
Wie viel Zeit investierst du? Und das war 2011.
Da haben also ungefähr 45 Prozent der Leute im Bereich
unter sechs Stunden angegeben
Also zwei bis vier oder vier bis sechs,
also in diesem Bereich so 45 Prozent und 50 Prozent darüber.
Im Jahr drauf sah das schon so aus. Da waren
das dann 50 Prozent, die nur vier bis sechs,
also unter sechs Stunden investiert haben, sechs Stunden oder weniger.
Und im Jahr darauf waren das dann 60 Prozent.
Haben wir uns natürlich gefragt, wie kommt das?
Also ich meine, ist das, liegt das daran,
dass die Musterlösungen kopiert werden können oder war uns da nicht ganz klar?
Und dann in diesem Jahr siehe einer an,
es ist wieder was anders.
Es ist so ungefähr
wie vor drei Jahren
Das finde ich interessant. Und ich glaube,
ehrlich gesagt, dass es ein bisschen daran liegt,
dass diese Selbsttests Feedback gegeben haben und dann vielleicht dazu geführt haben,
dass sie ein bisschen mehr doch gemerkt haben, oh,
ich muss bei SE1 auch was investieren,
sind zwar ganz nett da, die Leute,
die versprechen sich ständig bei den Abnahmen und so,
aber man muss auch was tun,
sonst kommt man irgendwie nicht richtig mit.
Also das finde ich interessant. Trotzdem ist das ja eine
bemerkenswerte Zahl. Wir sagen minimal, solltet ihr acht schon
investieren, trotzdem sind 45 Prozent mit weniger unterwegs.
Klar, wer Vorwissen hat, braucht vielleicht ein bisschen weniger Zeit.
Trotzdem ist das ein bisschen bedenklich. Insbesondere werden wir das gleich sehen,
wenn wir das in Relation setzen, zu eurer Aussagen,
wie schwierig die Aufgaben so waren und wie viel Zeit ihr investieren musstet.
Okay, ein Stoffumfang zum Beispiel. Wie ist der Stoffumfang?
Ich meine, das ist direkt korreliert. Also wenn ihr sagt,
der Stoffumfang war zu groß, dann muss man natürlich auch gucken,
naja, wie viel Zeit habt ihr investiert,
wenn ihr zu wenig Zeit investiert habt, erscheint euch alles zu groß.
Das ist über die Jahre so, die Zahlen,
das ist die aktuelle Zahl hier unten von diesem Jahr.
Das heißt, der Stoffumfang ist, also stellt euch mal vor,
der würde jetzt irgendwie rauskommen, der Stoffumfang ist zu niedrig.
Das wäre eine Schande für den Dozenten. Also immerhin,
es ist zu hoch. Aber es ist nur ein bisschen
zu hoch
Und das ist auch angenehm. Also wir wollen euch
ja so ein bisschen überfordern. Ihr wisst ja so,
den optimalen Pfad hat man so, wenn man so
ein bisschen überfordert ist, dann leistet man am meisten.
Gibt es ganz viel Theorie dazu. Also das ist super
. Also eigentlich ein gutes Ergebnis. Wie gesagt,
wenn wir unter dem Mittelwert, also unter der Mitte wären,
dann wäre es fürchterlich. Das ist okay so.
Niveau der Veranstaltung. Wie fandest du das Niveau?
Auch das über die Jahre hat sich eigentlich relativ stabil gehalten.
Von 3-1 Mittelwert hier rechts auf 3-2
und inzwischen bei 3-3.
Also das Niveau wird zunehmend schwierig empfunden.
Das kann auch daran liegen, dass wir in diesem Jahr
sehr viele Nebenfachstudierende drin haben
Früher gab es eine Nebenfachveranstaltung, also Informatiker, also eine Informatikveranstaltung für Nebenfächler.
Und es gab SE1 und SE1 ist eine Kerninformatikveranstaltung.
Kerninformatik und war für Leute, die wirklich programmieren lernen wollen.
Dann kam die Mathematik und die Physiker immer mit rein,
weil die fressen das irgendwie so wie Trockenbrot.
Also die sind da wirklich, für die ist ja alles kein Problem.
Aber jetzt haben wir sehr viele Leute mit drin,
die eben halt keine Alternativveranstaltung mehr mit haben,
die dann einfach sagen, oha, das ist ganz schön hart,
was ihr hier von uns fordert.
Meine Vermutung, dass das ein bisschen daran liegt,
weil es eben halt keine andere Nebenfachveranstaltung mehr gibt
Dann allgemein ist zur Veranstaltung, die Veranstaltung ist sehr klar,
strukturiert aufgebaut, inhaltlich sehr interessant und für dein Studium sehr wichtig. So,
auch da über die Jahre hier so 2-1,
2-2-2, 2-3,
ja, dann war es 1-8,
2, 2, dann 1,9, 2, 2,
2-2, also so, ja,
die Werte sind da relativ gleichbleibend und das ist jetzt der aktuelle Wert,
also, ja, wir sind ein bisschen schlechter geworden.
Also, das ist so, die Bewertung ist so,
boah, also kann man so sagen, ist so ähnlich,
ja, da ist eigentlich das relativ stabil geblieben.
Ja, also, dass die interessant ist,
dass sie weniger strukturiert ist, obwohl sie inzwischen ja wahrscheinlich viel strukturierter ist,
aber na gut, das sind halt auch immer so subjektive Aussagen,
die auch teilweise dann von dem jeweiligen Jahrgang abhängig sind.
Der Vortragende, das bin ich, da der Dozent gestaltet die Veranstaltung interessant und lebendig,
wird gut vorbereitet, er mutigt Fragen zu stellen,
bemüht sich eine gute Vorlesung zu halten und kann auch schwierige Sachverhalte verständlich erläutern.
Das ist immer mein schlechtester Wert, also irgendwie 1,7,
aber sonst immer so 1,3, 1,5, 1,6,
über die Jahre ist das dann auch eigentlich immer besser geworden,
oh, hier ist sogar meine 1,2 gewesen, aber hier ist eine 1,5,
hier ist eine 1,3, 1,6, 1,4, oh,
gute Werte und das sind die Werte von euch, ja, also Ich kann mich nicht beschweren über euer Feedback.
Also das ist eine sehr, sehr positive Bewertung.
Vielen Dank dafür. Das ist wirklich klasse. Da kann
ich mich schon auch ein bisschen mit sehen lassen,
dass das nicht so schlechte Werte sind.
Man muss ja sich angucken, das ist eine Pflichtveranstaltung.
Also die meisten Leute sitzen ja hier nicht freiwillig oder alle.
Und dann ist das nicht so einfach da,
so eine ganz, ganz gute Benotung zu kriegen.
Hier ist es auch nochmal so mit so ein paar anderen Werten.
Also da sind dann so irgendwie, ja, gut verständliche Aussprache.
Also das ist zum Beispiel hier Übung,
da habe ich irgendwie, habe ich einen weggeschmissen.
Oh, da habe ich eine nicht nach vorne geholt.
Oh, oh, oh, Moment mal eben.
Ah ne, jetzt kriege ich jetzt nicht hin
Also da ist sozusagen jetzt der aktuelle Wert nicht dabei,
aber das könnt ihr ja nachlesen.
Das Zeug schenkt an demnächst umkommen sie. Die Übung,
Zeitaufwand für die Übung, ja, hier zu hoch.
Das ist immer zu hoch. Schwierigkeitsgrad immer zu hoch.
Klar, muss man ja sagen, als Student, sonst.
Und die Aufgabenblätter stehen rechtzeitig zur Verfügung,
passen inhaltlich gut zur Vorlesung und passen zeitlich gut zur Vorlesung.
Da sind die Werte auch über die Jahre relativ stabil,
sondern das ist der aktuelle Wert.
Also da sieht man hier, ja, da sind wir also so,
ja, ein bisschen nach rechts gerutscht jetzt.
Also irgendwie habt ihr das noch schlimmer empfunden und es ist
noch weniger rechtzeitig alles
Aber so im Großen und Ganzen sind das auch noch so, okay, Werte.
Die Übungsleiter, da ist es jetzt wieder ganz interessant,
die Übungsleiter ist qualifiziert und kann auch Fragen sehr gut antworten
und ist sehr gut vorbereitet. Mittelwert 1,9 und 2,
dann im Jahr drauf 1,7,1,9 und in diesem Jahr 2,1 und 2,2.
Also da ist es tatsächlich auch so,
man muss einfach immer auch das einordnen.
Wir haben die riesigste SE1-Veranstaltung ever momentan,
also mit irgendwie anfangs 570 Leuten oder was.
Und wir haben sehr, sehr viele ständige Hilfskräfte,
die das als Betreuer machen.
Wir haben gar nicht
genügend Vimis
Hilfskräfte sind klasse, die wir haben,
aber sie sind eben halt nicht das Gleiche wie erfahrene Vimies,
die schon jahrelang sowas machen und einfach genau wissen,
wie sie euch das Feedback geben,
dass ihr da auch vernünftig an bestimmte Sachen intensiver rangehen solltet.
Das ist etwas, das kann man lernen und das lernen
die auch und die sind alle klasse,
aber sie sind eben halt per se nicht so fit wie manche Vimies,
die wir hier in den letzten Jahren hatten.
Wir hatten also das Verhältnis zwischen SAK und Vimie
war in diesem Jahr extrem ungünstig.
Und so muss man das vielleicht so ein bisschen deuten.
Das können wir nicht besser machen und wie gesagt,
wir haben schon die besten SAKs,
die man
sich wünschen kann
Okay, Freitexte. Ja, da ist immer ganz nett zu sehen,
dass in diesem Freitext, den ihr da reinschreiben könnt,
was ist euch positiv aufgewacht, was ist euch negativ aufgefallen.
Da gibt es immer so ganz viel Zeug,
das wird alles in dieses Dokument mit reingesetzt.
Ich habe das hier, ich kann das mal zeigen,
dass ihr es mal seht. Also hier Evaluation,
ja, das habe ich mal ein bisschen aufgespielt,
aber hier ist das ganze Dokument.
Das sieht also so aus, dass dann hier, ja,
in welchem Fass und dann kommt hier, was ist dir aufgefallen?
So, jetzt kommen hier so ein paar Sachen,
die irgendwie, und dann ist das hier seitenweise
so was,
oh ja
Wollte ich jetzt gar nicht zeigen. Könnt ihr euch ja
selber angucken. Auf jeden Fall ist immer ganz spannend zu sehen,
wie ist das Verhältnis zwischen den Seiten,
wo negatives Feedback drauf ist und zwischen denen,
wo positives Feedback drauf ist.
Und das ist halt hier wieder, das sind also ungefähr
24 Seiten, negatives Feedback und 39 Seiten positiv.
Also so, das ist ein gesundes Verhältnis. Also wenn da jetzt
ganz viel mehr Negatives wäre, was war da so drin?
Also Livestream funktioniert teilweise nicht, das war mehrfach kritisiert.
Stressige Übung, Zeitdruck, ganz viel gesagt worden. Vorlesungen,
langatmig, langweilig zu theoretisch, kamen auch durchaus als Feedback.
Tempo etwas zu schnell für totaler Anfänger,
das ist auch ein häufiges Feedback,
zu viel Stoff für Anfänger,
Übung zu umfangreich und zu anspruchsvoll für Unerfahrene,
dass es also immer wieder liest man das
ganz klar raus
Aber wie gesagt, das ist ja auch eine Kerninformatikveranstaltung,
nicht unbedingt für tatsächlich die ganze Breite. Für Leute,
die auch nur so ein bisschen nebenbei Informatik machen wollen.
Was früher schlimmer war, was inzwischen weitgehend abgestellt ist,
ist, dass manchmal zu wenig Betreuer sind,
das war früher deutlich stärker kritisiert worden.
Es gibt immer noch Situationen, wo dann die Tafel mal
voll ist. Aber das ist also weitgehend sehr,
sehr gut organisiert von Christian im Übungsbetrieb.
Unfreundlichkeit, weniger Betreuer, nicht motiviert, schlecht gelaunt.
Das kam auch häufiger vor, früher ist nicht mehr ganz so schlimm.
Und das haben auch ziemlich viele Leute gesagt, dass nichts
negativ war. Das ist auch schon mal ganz schön.
Das ist hier das ganze negative Zeug.
Ich habe noch mal so ein paar Freitexte ausgewählt
Zum Beispiel hier Anwesenheitspflicht, fand jemand doof. Die Aufgaben
müssen bearbeitet und abgenommen werden, das ist ja lästig.
Und zu wenig Zeit, zu viele Aufgaben, zu anspruchsvoll für Nebenfach.
Genau, das ist das, wo ich sage, naja,
die war mal konzipiert eben halt nicht unbedingt für Nebenfachstudierende.
Und da muss man einfach ein bisschen das relativieren.
Es sollte mir auch Partnerbildung geachtet werden. Das war was,
was auch gesagt worden ist, naja,
das ist halt so ein bisschen schwierig,
wenn die Paare sich so bilden, dass Leute zusammensitzen,
die nicht so fit sind.
Und dann alleine da hängen, während dann die Guten
sich zusammen relativ schnell die Sachen wegarbeiten können.
Da war sehr der Wunsch, dass wir da vielleicht
ein bisschen mehr auch das steuern
Die Gewinnkriterien vom Turtledrafics Critimity Contest waren nicht transparent. Ja,
okay, also das ist ja auch eher so ein netter
Gag gewesen hier und es war halt immer die Idee,
dass die Leute, die keine Zusatzdanke reinbauen, da bevorzugt werden.
Vielleicht war das nicht so ganz transparent. Es ist
auch gewünscht worden, dass die Ergebnisse ins Kommensee kommen.
Ich denke, das können wir nicht machen, ohne dass
die Leute da selber wollen. Deswegen wäre mein Vorschlag,
dass wir dann im Kommensee einfach, dass die Leute,
die einen Kommensee-Beitrag geleistet haben, den gerne auch ins Kommensee stellen können,
damit andere sich das angucken können.
Also nicht mir machen das, sondern die Leute selbst,
wenn sie ein Interesse daran haben,
würde ich
darum bitten
Vorlesung zu oft oberflächlich, zu wenig hübsche Frauen.
Soviel zum Thema oberflächlich, ja. Tut mir leid,
dass ich keine hübsche Frau bin, ja.
Okay. Professor schummelt bei Spielen. Also die Aussage,
die kann ich auf keinen Fall so stehen lassen.
Das stimmt überhaupt nicht
Nein, ich bin kein Professor. Das wollen wir festhalten, ne?
Also diese Aussage ist falsch. Okay. Dann das Thema Vorwissen,
das finde ich immer eine sehr witzige Geschichte,
weil da ist ja ein Abschnitt bei fehlendem Vorwissen.
Was fehlte dir? Bei fehlendem Vorwissen, ja? Da
gibt es dann so diese Antworten, wurde nichts vorausgesetzt,
Vorwissen wurde nicht verlangt, eigentlich fast nichts.
Es wurde gar nichts vorausgesetzt. Es ist zufällig jetzt
in Grün, diese Dinger. Ja,
also das sind so die, die finde ich richtigen Antworten,
die ich da erwarten würde,
weil wir eigentlich von keinem Vorwissen ausgehen
Und euch wirklich bei null anfangen, das ist eigentlich unser Anspruch.
Aber es gibt dann tatsächlich anderes Feedback, die sagen dann,
ja, wenn man jetzt das beantwortet, bei fehlendem Vorwissen,
was fehlt dir dir? Vorwissen. Das hilft uns sehr,
ja, das können wir jetzt zukünftig verbessern, ja,
also das Vorwissen, ja, also.
Schöne Antwort war auch, ich hatte keinerlei Vorkenntnisse. Naja,
also wie gesagt, klar, da wurde dann viel gesagt,
ja, ich konnte nicht programmieren vorher,
weil alle Leute glauben oder glaubten, dass man Vorkenntnisse haben muss,
dass man programmieren können muss.
Ich glaube das nicht. Ich glaube nach wie vor,
dass es möglich ist, hier ohne Vorkenntnisse programmieren zu lernen.
Das hat man auch eben wieder in der Steresi-Umfrage gesehen.
Es gab Leute ohne Vorkenntnisse, die haben eine Menge gelernt
und wollten sogar noch mehr lernen.
Okay, oder alles. Was fehlte dir alles? Mir fehlte
alles. Okay, aber ich will das jetzt nicht diskreditieren.
Also das ist immer, wir nehmen das alles sehr ernst,
was ihr da reinschreibt und gucken uns das auch immer sehr intensiv an.
Okay, das war das zum Feedback. Gibt es jetzt
noch irgendwie Feedback, was ihr hier direkt loswerden wollt,
noch vielleicht frei mündlich?
Gibt es noch irgendwelche Aussagen? Das scheint nicht der Fall
zu sein.
Da ist eine Meldung
Ja, wir haben jetzt schon zeitlich in den Herzen gebracht.
Das bleibt uns ja verputzt in den Leiden, wenn wir zu sehen sind.
Und er ging nicht nie, oder ich höre noch vom Beispiel links.
Was ging nie? Sorry, ich habe es nicht verstanden.
Ach, der Livestream. Okay, in den letzten Wochen
ging der Livestream nicht. Wer hat das noch bemerkt?
Also wen hat das noch gestört? Wen hat der
von denen hier, Anwesenden? Das ist natürlich schwierig,
weil die meisten ja wahrscheinlich in der Vorlesung sind.
Stecke ich nicht drin. Ist Technik, die nicht unter
unserer direkten Kontrolle ist. Aber das Feedback geben wir auch
weiter ans E-Learning im Büro, weil die das ganze Jahr machen.
Und da gibt es dann halt ab und zu auch mal technische Probleme,
dass einfach das Netz nicht da ist oder ähnliches.
Okay, sonst noch Feedback jetzt hier. Nein,
gut, dann noch mal kurz die Hinweise zur Modulprüfung.
Die Übungsscheine gibt es über eine Matrikel-Nummer-Liste. Das heißt,
wir werden im Komsi in den nächsten Tagen eine Liste veröffentlichen,
die einfach sagt, wer den Schein bekommt.
Ihr wisst, der Schein ist nicht die Voraussetzung für
die Teilnahme an der Klausur. Ist also nicht zeitkritisch.
Die Klausur ist ja schon nächsten Montag,
die SE1-Klausur
Die erste. Und ihr müsst es nicht vorher wissen,
ob ihr einen Schein bekommt oder nicht.
Aber es ist natürlich ganz hübsch. Ich weiß nicht,
wie schnell Christian das hinbekommt, weil das immer ziemlich viel
Arbeit ist, diese ganzen Listen da durchzuflöhen.
Aber wir werden dann bekannt geben, wer seinen Schein bekommt.
Die zweite Klausur ist dann Anfang März, zur gleichen Zeit.
Seit spätestens 15 Minuten vorher da, was also immer fürchterlich ist,
wenn irgendwie Leute fünf oder zehn oder eine halbe Stunde zu spät kommen,
das ist immer schwierig.
Also für euch selbst, aber auch für uns,
das ist einfach nicht glücklich. Seid einfach pünktlich da.
Ihr könnt euch ja vorher noch mit euren Kommilitonen austauschen über die Themen,
keine Hilfsmittel aus einem Stift, überwiegend Multiple-Choice-Aufgaben.
Fred hat einen ausführlichen Text im Komsi geschrieben,
wie man solche Multiple-Choice-Klausuren vernünftig bearbeiten sollte.
Gibt es da noch Fragen zu zur Klausur? Ich glaube nicht
. Ihr habt die Selbsttests, die sehr ähnlich sind und so weiter.
Dann noch ein Ausblick. SC2 gibt es im nächsten Semester
und ich würde euch bitten, eine ganz dringende Bitte,
vergesst nicht alles, was ihr jetzt gelernt habt,
bis zum Anfang des nächsten Semesters.
Das ist immer so,
dass wir am Anfang von SC2 dann so hören,
oh Gott, programmieren,
oh,
was war noch mal Java
Das ist nicht so schön, weil wir tatsächlich in der SE2
ganz klar auf dem aufsetzen, was in der SE1 dran war.
Das heißt also, was wir machen werden, ist,
wir werden uns Vererbung intensiv ansehen in verschiedenen Ausprägungen,
Strukturierung von Quelltexten in Packages, also noch ein Konzept von Java,
Exceptions, wenn wir uns von Java aus ansehen.
Dann gibt es so verschiedene Konzepte, die benutzt werden,
um die Qualität von Software zu erhöhen. Das Vertragsmodell,
Design by Contract, testen, werden wir uns nochmal ansehen.
Refactoring werden wir uns ansehen und abstrakte Datentypen.
Und wir werden auch einen Gegenstand haben, nämlich interaktive Softwaresysteme,
also auch Systeme mit einer grafischen Benutzungsoberfläche.
Und wenn dann auch uns Typische Entwurfsmuster und Entwurfskonzepte von solchen
grafischen Systemen ansehen, von Systemen einer grafischen Nutzungsoberfläche.
Und das Ganze dann komplett in Eclipse. Also diejenigen, diejenigen,
die jetzt schwer gelitten haben, weil sie Blue Jay benutzen mussten.
Im nächsten Semester wird es dann alles etwas besser.
Ja, okay. Dann, wenn nicht noch irgendetwas hier
an Feedback kommt, da ist noch eine Meldung.
Interesse noch für Sie, den PC2 wieder drehen unterwegs.
Er fragt, ob jetzt feststeht, ob ihr mich in SE2 wiederseht und ich Sage jein.
Also nein, ich sage ja, ihr seht mich wieder,
aber ich werde nicht alle Vorlesungen halten.
Also ich werde voraussichtlich sechs der 14 Vorlesungen halten.
Das ist so jetzt abgesprochen, dass ich habe einen Lehrauftrag,
ich bin ja dann am 1.3. bin ich an der HAW in Hamburg
und da habe ich auch ziemlich viel Lehrdeputat und habe dann noch zusätzlich den Lehrauftrag hier.
Das wird irgendwie unlustig, aber die sechs Vorlesungen,
die kriege ich, glaube ich, noch hin.
Und zumindest in den sechs Vorlesungen bin ich dann da und
die anderen Vorlesungen bestreiten Heinz, Zürichhofen und Guido Gritzan,
die die anderen Teile auch schon gemacht haben.
Also das ist jetzt der Qualitätsverlust wird nicht sehr groß sein,
wenn überhaupt. Also es ist höchstens so,
dass die eben halt dann vielleicht nicht die Übung haben,
das aus den vorigen Jahren,
aber im Großen und Ganzen wird das genauso laufen,
wie bisher auch die Übungen werden auch, wieder von Christian organisiert.
Also das ist inzwischen auch, da gibt es eine Vertragsverlängerung
, gab es inzwischen. Also es gibt inzwischen,
es ist gemerkt worden, dass irgendwo da eine Lücke entsteht,
wenn die ganzen Leute jetzt bei uns ausfallen und deswegen sind da Verträge verlängert worden.
Also das ist, die Hoffnung ist da,
dass das so ähnlich wird wie die Jahre Zufall auch in SE2.
Also euch wird es noch nicht so stark treffen.
Okay, sonst noch Feedback jetzt hier
Dann sehen wir uns im nächsten Semester und ich wünsche euch
viel Glück bei der Klausur