So, 3, 2, 1, fast Mainz.
Herzlich willkommen zur letzten Vorlesung SE2 für Sie, für mich,
für uns alle. Ein Teil der letzten Vorlesung ist regelmäßig,
also in den letzten SE2-Vorlesungen,
ist regelmäßig, dass ich mir den Mund fusselig rede,
um sie für Softwaretechnik
zu begeistern
Im dritten Semester so ein Praktikum machen, im vierten Semester
ein Projekt, eine Vorlesung, die Vorlesung, Softwaretechnik besuchen.
Und ich verspreche Ihnen immer, das Blaue vom Himmel
runter wie lustig und spannend und informativ das sein.
Wird heute überlasse ich diese Aufgabe anderen Menschen. Kommilitoninnen von Ihnen,
die werden Ihnen etwas über das Projekt Cycle Your City erzählen.
Jetzt haben wir dieses Semester das erste Mal durchgeführt.
Cycle Your City in der Nussschale. Es gibt für
die Radverkehrswege Planung in Hamburg wenig empirisches Material.
Also um es mal auf Deutsch zu sagen,
kein Mensch weiß, wo wir Fahrradfahrer eigentlich so rumfahren.
Das macht die Planung von Radwegen nicht gerade einfacher.
Was wir also in diesem Semester gebaut haben, sind zwei Apps.
Eine für die Android-Welt, eine für die Apple-Welt.
Und die liefern GPS-Daten. Und diese GPS-Daten werden an einen Server gesendet,
der wird von der Uni Hamburg vom Rechenzentrum,
ist der eingerichtet worden
Und die Daten werden auf einem Touch-Table, diesem Gerät.
Hier werden die repräsentiert. So, was diese junge Dame,
eine Kommilitonin von ihnen dort tut, ist,
sie erläutert, der Radverkehrskoordinatorin der Freien und Hansestadt Hamburg,
wo wir so in den letzten Wochen so rumgefahren sind.
Das Ding, also stellen Sie sich dieses Ding erstmal
wie ein völlig überdimensioniertes iPhone vor.
Es hat so die in den neueren Ausbaustufen 55 Zoll,
4K-Technologie, also für die Jungs unter uns echt
Technik. Und für die Mädchen unter uns,
man kann was Sinnvolles damit anfangen. Und was die
jungen Menschen in dem Projekt jetzt getan haben im Detail,
das erzählen die euch jetzt selbst.
Bitte. Wir möchten zuerst
Musik Ne, fangen hier an.
Das war richtig, genau.
So, hallo
Lieber Kollegen, Kommilitonen. Es geht um das Project Cycle
Your City, wie ihr gerade gehört habt.
Es geht irgendwie um Fahrräder und Fahrradfahren in Hamburg.
Und dafür haben wir uns Studierende verschiedener Fachrichtungen zusammengesetzt und überlegt,
wie wir diese Daten sammeln können und aufbereiten können,
sodass auch Informatikfremde mit diesen Daten was anfangen können
Das ist der aktuelle Stand des Projekts. Wir haben
uns überlegt, die Daten über eine App zu erfassen.
Dafür haben wir, wenn wir auch Daten von anderen existierenden,
auf dem Markt existierenden Apps verwenden.
Aber wir haben auch zwei eigene Apps entwickelt,
eine für iOS und eine für Android,
mit denen wir eben diese Daten erfassen können.
Diese werden an einem Server im Moment bei uns am Informatikum
geschickt und dann auf einem Touch-Table in eine Touch-Table-Anwendung arbeitet.
Genau, und da kann man noch vieles machen,
das ist vielleicht eure Aufgaben in ein paar Jahren.
Gut, was sollen die Apps können?
Die sollen eben Daten erfassen und die sollen diese Daten,
wenn möglich, anonymisiert weitergeben, wegen Datenschutz und sowas.
Und die sollen auch dem Benutzer etwas zurückgeben,
damit die Leute dieser Apps doch noch einen Grund haben,
die zu installieren,
zu benutzen
Immer momentan geben sie nur wenig zurück,
nämlich man kann Daten über seine Fahrt sehen,
wie die Geschwindigkeit, mit der man gefahren ist,
die Dauer seiner Fahrt und Speicherung von The Houten oder werdet
ihr gleich sehen bei der iOS-App ein bisschen mehr.
Gut, ich fange mir da Android ab.
Wir haben ein Logo, das ist dieses rote Fahrrad,
Cycle Your City, dann das Hauptbildschirm und Hauptfunktionalität
der App
Deutlich zu sehen. Man kann eine Fahrt starten,
in dem Mann auf Play drückt. Und dann werden eben
die Soldaten angezeigt. Und GPO Start in Armserver verschickt.
Man kann noch einstellen, ob die Soldaten ständig weiter verschickt
werden sollten oder nur, wenn man WLAN hat.
Und das war's. Die App kann man trotzdem auf Google
Play finden und herunterladen und auszuprobieren und sich Barks merken,
die man dann später in einem Projekt reparieren möchte
Lösen möchte. So, und los geht's mit der iOS-App
. Ja. Das ist unsere iPhone-App. Erstmal vorweg,
wer hat denn von euch überhaupt ein iPhone? Ja,
das sind ja ziemlich wenig, Das ist öfter so scheinbar.
Ihr könnt euch die App runterladen. Da ist dies seit
zwei oder drei Wochen im App-Store. Heute Morgen haben wir
noch ein Update nachgeschoben. Das ist jetzt online.
Wurde gleich beim ersten Mal angenommen von Apple die App.
Ja. Ach, ist auch mit Pokémon Go kompatibel.
Also ihr könnt da mal ein bisschen rumfahren. Ein paar
Pokémon sammeln. Wir haben im Swift programmiert oder mit Swift in X-God.
Ich weiß nicht, ob da schon irgendwer Erfahrung hat.
Hat da irgendwer Erfahrung? Ist auf jeden Fall,
es macht Spaß, finde ich.
Ist recht einfach
Dann gucken wir uns die Elpen mal ein bisschen an.
So sieht es während einer aktiven Fahrt aus.
Man hat im Hintergrund eine Karte, hat dann drei Ausgabefelder,
klickt man auf das untere rechte Ausgabefeld, ändert sich die Ausgabe noch.
Sieh man noch die Pace und die aktuelle Geschwindigkeit.
Wir haben im Hintergrund eine Funktion fürs automatische Pausieren implementiert.
Dann pausiert er die Fahrt, wenn wir uns nicht bewegen und
er setzt sie automatisch wieder fort, wenn wir uns wieder bewegen.
Außerdem in den Einstellungen gibt es die Möglichkeit, Autostopp einzustehen,
dann stirbt er die Fahrt nach einer Zeit,
wenn man sie nicht bewegt
Und wir haben noch die Wahl zwischen Live-Übertragung oder nicht Live-Übertragung.
Wenn man die eingestellt hat, die Funktion,
schickt er die Daten direkt an den Server,
wenn man sie ausgeschaltet hat, gehen sie erst im WLAN an den Server.
Unsere Fahrten werden dann angezeigt in der Tabelle. Klickt man auf,
eine Fahrt drauf, ist man in den Fahrtdetails.
Man sieht nicht so viel, also rechts ist auch noch was.
Da hat man zum einen eine Karte oben,
wo die Vater nochmal angezeigt wird, der Verlauf,
man kann reinzoomen, rauszoomen, verschiedene Daten dazu, Dauerpause und so weiter.
Man kann die Fahrt löschen
Wir haben noch Statistiken mit drin, erstmal nur drei,
ab einer gewissen Anzahl von Fahrten kriegt man auch eine Medaille oder einen Pokal.
Könnt ihr ja ausprobieren. Da haben wir noch,
verlinken wir noch auf die Hamburg-Website. Zum einen Velo-Routen,
einen guten Planer oder dann auch auf Stadtrat.
Wir haben uns Gedanken gemacht, wie wir die App den Nutzer
wirklich vermitteln können, warum er sich die runterladen sollte.
Dann, falls ihr dieses Projekt irgendwann angeht, könnte man
die App so erweitern, dass sie noch eine Benutzerfunktion hat.
Health Integration, wenn ihr es kennt,
auch als Nicht-AiPhone-Nutzer,
eine WhatsApp
Beides recht, einfach zu implementieren und dann noch Hamburg,
ja, dass wir die Daten, die wir sammeln,
mit anzeigen.
Und dass wir vielleicht so Routen planen und sowas mit integrieren.
Hallo, hier schön. Genau, ich erzähle euch jetzt
was zum Server
Die Apps sammeln ja eben diese ganzen Daten und tracken
die Leute und diese Daten sollen irgendwo hingeschickt werden.
Und dafür ist der Server da. Da läuft also irgendwie
eine Datenbank drauf, in der die ganzen Daten gespeichert werden können.
Und speichern tut man die natürlich, um die Daten irgendwie weiter zu verwenden.
Und dieses Weiterverwenden ist eben das Schicken an den Touchdable,
wo die Daten dann visualisiert werden.
Und ansonsten gibt es noch die Möglichkeit,
dass uns andere Unternehmen, zum Beispiel diese in der Wiki-App,
die hat uns 40 Millionen Datensätze geschickt oder so.
Und genau, das ist auch gut.
Dass die uns Sachen schenken
Genau. Von der Struktur sieht das dann ungefähr so aus.
Wir haben einen Server an der Uni Hamburg,
da läuft Ubuntu oder irgendein Linux-Zeug drauf,
weil das gut ist für Server.
Und dann findet Kommunikation statt zwischen den Apps und dem Touch-Table.
Genau, dann gibt es den Appetchy 2.2,
das ist ein HTTP-Web-Server. Den braucht man,
weil der die PHP und Mayas QL-Skripte verwaltet und öffentlich
im Web
zugänglich macht
Das heißt also, wenn uns die Apps Informationen schicken wollen,
dann rufen die irgendwie eine HTML,
eine HTTP-Adresse auf und greifen damit auf die PHP-Skripte zu,
um die Daten an den Server zu senden.
Und dafür brauchen wir diesen Ipacium, diese URL bereitzustellen.
Und dasselbe ist eben mit dem Touchtable,
der muss auch diese Anfragen an die HTTP-Adresse schicken
und kann dann
Daten bekommen
Ja, ansonsten gibt es zur Kommunikation zwischen dem Server und
den Apps, sowie dem Touchtable, dieses Jason-Format.
Also es gibt natürlich mehrere Formate, aber wir haben uns Staff entschieden,
weil das ein einheitliches Format für die Information geben muss,
damit Server, so wie die Apps und Touchtable verstehen,
worum es geht quasi.
Und dafür haben wir in diesem Jason diese Wegpunkte,
das sind die Koordinaten einfach, so genau,
da gibt es dann irgendwie Latitude,
Longgetue und so weiter.
Und zugehörig natürlich
eine Tour-ID
Weil man diese ganzen Wegpunkte, irgendeine Natur zuordnen können muss.
Genau. Und so sieht das Fenster aus. Shit. Ja
, genau. Touchtable haben wir jetzt schon oft gehört.
Habt ihr davon auch ein Bild von gesehen? Dazu erzähle ich
jetzt was. Genau. Also wir benutzen das primär,
um halt alle gesammelten Daten nicht nur von unseren Apps,
sondern auch von den Daten von externen Anbietern,
die wir bekommen haben, zu visualisieren.
Dabei haben wir uns gedacht, es ist für die,
also nicht nur wichtig für die Stadtplanung zu wissen,
wo viele Leute langfahren, sondern vielleicht auch wann.
Das weiß ich nicht, morgens da mehr Leute lang fahren als abends,
um da irgendwelche, also besonders kritischen Punkte oder so zu finden.
Deshalb haben wir neben der reinen Anzeige und einer kleinen Filterung von verschiedenen Daten
auch noch eine Zeitleiste eingebaut, um halt die Daten herauszufinden,
wann die wann die Daten aufgenommen wurden.
So. Genau. Welche Technologien haben wir benutzt? Wir haben
sie Sharp benutzt. Das ist ähnlich zu Java, finde ich.
Es macht Spaß auf jeden Fall, die Sharp zu entwickeln.
Dazu haben wir WPF benutzt. Windows, Presentation Foundation.
Das ist eine Anzeige dafür, ähnlich wie Swing oder Java FX.
Und das Act ist Kartenframework von der Firma Esri.
Und natürlich den Touchdable. Genau, jetzt gibt es noch
eine kleine Live-Demo von unserer Anwendung. Wir haben leider keinen Tisch heute hier, aber Ich hoffe, man, es ist immer noch ein bisschen abgeschnitten, aber das ist erstmal nicht so schlimm. Genau,
also was ihr hier seht,
ist halt Hamburg und unsere Karte und die blauen,
ja die blauen Linien sind halt von uns gefahrene Tracks,
die wir schon aufgenommen haben, man sieht hier unten so angedeutet,
also in diesem Button stehen Monate drin,
das ist jetzt die Anzeige von Mai bis Juli und hier könnte ja,
naja wenigstens eine Leiste sehen,
man kann hier also noch die Uhrzeit irgendwie einstellen und Jetzt hätten wir theoretisch alle Daten von Mai bis Juli zwischen 8 und 9. Zusätzlich dazu,
ich glaube, das wurde vorhin schon ein paar Mal angesprochen,
die Stadt Hamburg plant so Velo-Routen, Fahrrad-Velo-Routen,
die können wir hier zusätzlich noch anzeigen,
damit die Stadt halt irgendwie sehen kann,
die werden benutzt oder auch nicht, man sieht ja hier,
hier ist jemand 100 Meter vielleicht auf der anderen Seite von der Route gefahren,
aber genau, dann können die halt einmal sehen,
werden die Sachen,
die wir schon gebaut haben,
genutzt oder auch nicht oder wo können wir halt neue Velo-Routen bauen,
wo macht das Sinn
Ja, das war es auch schon mit dem Touchtisch.
Jetzt noch schnell, schnell, Moment. Oh nein.
Aha, oh. Genau. Schnell ein kleiner Ausblick,
was haben wir leider nicht mehr geschafft. Das ist einmal
eine Website. Wir wollen also nicht nur für uns die Daten zugänglich machen,
sondern auch, dass der Nutzer sich ansehen kann,
wo ist er lang gefahren, wo sind andere lang gefahren.
Genau, und vielleicht noch ein privates Profil gefüllt mit seinen Daten.
Und als weiteren Ausblick so Ziele insgesamt wollen wir halt mit unserem Projekt,
das Fahrradklima in Hamburg verbessern,
die Stadt bei der Radwegeplanung unterstützen und um das zu machen,
müssen wir natürlich erstmal das Ganze visualisieren,
was wir schon geschafft haben.
Und da oben mit Punkten angedeutet, kann das Ganze natürlich
noch viel weitergehen. Da seid ihr dann gefragt,
wenn ihr auch dieses Projekt wählen wollt,
kann ich euch nur empfehlen, es hat sehr viel Spaß gemacht.
Und zusätzlich zum Touchtisch gibt es nächstes Semester vielleicht noch
eine HoloLens, womit man vielleicht auch irgendwas Cooles machen kann
Vielleicht. Genau, noch kurz unsere Unterstützer, die uns unterstützt haben beim Projekt.
Einmal die VPS von Guido Gritschan und das Hightech-Forum sowie Naviki
und Bike Citizens, das sind externe Radfahr-Apps,
die uns halt auch schon ihre Daten zur Verfügung gestellt haben.
Und zu guter Letzt die Radverkehrskoordinatorin der Stadt Hamburg,
Frau Fauer, die letzte Woche bei uns einen Werkstattbesuch gemacht hat und
das Ganze sehr positiv aufgenommen hat, meiner Meinung nach.
Ja, also das war es auch schon,
wenn ihr jetzt Lust habt, könnt ihr euch nächstes Semester,
glaube ich, das Projekt bählen,
genau.
Vielen Dank
Hm. Ist jetzt das passiert, was ich seit 25
Jahren befürchte? Ups, da ist etwas schief gelaufen,
sagt mein Rechner.
Aha. Interessant
Das wird uns bedanken. Nee, ich habe hier noch gar nicht drin.
So, jetzt geht es langsam wieder. Ja. Okay,
so, ich habe jetzt noch so 20 Minuten Zeit,
so ein paar Sachen über das Semester zu sagen.
So, erst nochmal einen Einblick nach vorne. Also nicht nur,
dass sie weiter hier bei uns studieren können und sollen.
Wir möchten sie auch bitten, also sich als Tutoren,
als Betreuerin für SE1 und 2. Vielen Dank, Tschüss.
Ab Wintersemester 16, 17 zu engagieren. Also wer
von Ihnen sich berufen fühlt, möge sich gerne bewerben.
Das ist hier an diese E-Mail-Adresse ESE-Orga at Informatik und das Übliche.
Was Sie tun können, ist, Sie können eine Übungsgruppe übernehmen.
Das sind dann 13 Wochen lang 5 Stunden pro Woche.
Das und in Geld bedeutet das so ungefähr diesen Betrag.
Oder sie machen also zwei Übungsgruppen. Das ist das Maximum,
was sie so betreuen dürfen. Die 5 Stunden setzen sich
so zu so einem 3 Stunden Präsenz.
Das kennen sie ja alles. Also jetzt von der Seite
als Studierende. Wir geben ihnen die Möglichkeit,
es den Studierenden des nächsten Jahrgangs heimzuzahlen.
Alles, was sie erlitten haben
Also SE-Bindestrich-Orga at Informatik.unihamburg.de. So, das bin ich jetzt
auch losgeworden. Oh nun. Nun kommt der Hauptteil,
also mein Hauptteil, Fred wird die zweite Hälfte der Vorlesung,
macht mit ihnen die Probeklausur und wird noch Fragen beantworten.
Und ich erzähle Ihnen jetzt,
was Sie uns erzählt haben über das letzte Semester.
Wer sind Sie
die üblichen Verdächtigen
Als ich gegenüber SE1 nicht allzu viel getan. Fachsemester,
keiner aus dem ersten, ist ja auch klar.
Also das hat sich alles nur so einfach um ein Semester gegenüber SE1 verschoben.
Hier hätte ich jetzt auch die Folie vom letzten Semester nehmen können.
Also es gibt so ein paar Überflieger,
die schaffen das alles mit weniger als zwei Stunden.
Das müssen so von, das müssen ungefähr vier,
fünf Menschen sein. Und das hier ist,
glaube ich,
0,3 Prozent. Das ist, glaube ich, ein Mensch.
Zwei Menschen arbeiten 18 bis 20 Stunden. Ich kann das nicht richtig,
also man weiß es ja nicht. Das brauchen die einfach länger,
um sich das zu erarbeiten oder haben die einfach so viel Spaß?
Man weiß es ja nicht. So,
ich habe mich durch ungefähr, also gefühlt 150 Seiten Kommentare positiv,
negativ, Verbesserungsvorschläge gekämpft, die Die kurze Nachricht,
also der positiven Kommentare, sehen Sie hier. So,
das ist einfach, das ist nicht nur einmal,
ich habe das stellvertretend für dutzendweise, also weniger so mit so Zeichen,
also mehr so unterschiedliche Arten von Lob für Fred,
Beispiele waren anschaulich, also Fred,
jetzt ab demnächst werde ich dich ja dann auch Money nennen.
Manche haben es also noch nicht so ganz,
aber egal
Es wurde also, das scheint mir jetzt für die,
wir machen das ja jetzt das letzte Mal,
also das scheint mir aber so eine Nachricht für unsere Nachfolger zu sein,
so einen Wechsel zwischen, einer redet,
einer arbeitet mit den Händen, weil nicht,
dass ihr nicht auch redet,
aber das scheint sich so zu ergeben.
So, nochmal kurz, ich schreibe mich Guido.
So, Fred, Fred, Fred. Den fand ich
auch schön. Fred, aber ich glaube, mindestens mindestens,
mindestens ein F müsste, glaube ich, groß sein.
Ja, es wäre auch eine Klausurfrage, welches.
Aber es ist auch so
Videoaufzeichnung. Lecture to go wurde auch verschiedentlich gelobt.
Also ich komme gleich dazu, das wurde auch so verschiedentlich verflucht.
Ja, da kann man noch was dran tun,
ist das eigentlich aber auch immer dasselbe.
Kann man immer noch was dran tun, ja.
Ja, okay. So, die letzte Folie zum Thema Fred
. Ich meine, wir verfolgen ja auch in der Softwaretechnik
einen ganzheitlichen Ansatz. Insofern denke ich, das gehört
auch dazu
So, und jetzt kommen wir zu den weniger lustigen Sachen.
Hallo, zum Teil waren die Vorlesungen zu informativ.
Folien für meinen Geschmack Zufall. Das ist zwar gut
für die Nachbereitung, aber während der Redner spricht,
erschlagen einen die ganzen Infos auf den Folien.
Ja. So, das ist jetzt eine Variation über einem
Thema, das viele von ihnen genannt haben.
Es gibt da keine Entschuldigung für, dass wir in den letzten Jahren,
also wie oft haben wir das jetzt gemacht,
zwei oder dreimal,
Das ist aber vor drei Jahren hat das angefangen. Also,
dass der Fachbereich, es gab so verschiedene personelle Wechsel,
dann war die Software-Technik-Professur eine Zeit lang nicht besetzt.
Und dann gab es Berufungsverhandlungen und gab es nochmal Berufungsverhandlungen.
Der Planungshorizont. Also, ich will das jetzt alles nicht entschuldigen.
Ich will es nur erklären. Der Planungshorizont, der Beteiligten an
dieser Veranstaltung ist so ungefähr drei Monate. Das heißt also,
Fred hat, das sollte man jetzt auch mal erwähnen,
Fred kriegt dann immer so zwei Monate vor dem Semesterende und schreiben,
bitte melden Sie sich mal beim Arbeitsamt.
Ihr Vertrag läuft aus. So richtig,
so wie man das so in der Zeitung so liest,
wie so das akademische Präkariat behandelt wird.
Planungshorizont Null. So, statt das mal, ich beschuldige jetzt auch niemanden. Natürlich tue ich das,
aber es ist, ich beschuldige die Welt abstrakt,
also dass sie nicht in der Lage gewesen ist,
uns in den letzten zwei Jahren einen Planungshorizont derart zu geben,
dass wir sagen, okay, wir machen das jetzt noch zweimal.
Das heißt, es lohnt sich, also diese Folien,
großer Liebe im Kartoffel-Druck-Qualität, also vorhanden sind, mal aufzubereiten.
Wir geben uns das jetzt mal,
weil wenn man so einen Planungshorizont von drei Monaten hat und sagt,
okay, das ist das letzte Mal,
die werden sowieso nie wieder verwendet und für einmal sind sie noch gut genug.
Mit der Haltung dann so zwei Jahre zu machen,
im Nachclub ist es natürlich auch nicht besonders befriedigend.
Ich könnte mich echt in Rage reden,
also ich schneide das mal raus. Ja, Videoqualität,
wo wir gerade drüber sprechen, Ach ja, so,
der Codeanteil der Vorlesung hat meiner Nacht nicht immer zum Inhalt gepasst.
Ja, das sind aber viel besser als letztes Jahr.
Viel besser. Da haben wir,
also da ging das teilweise doch etwas weiter auseinander.
Also würden wir es nochmal machen, dann wäre das noch besser.
So, jetzt zum Teil völlig überaltete Inhalte. Dies schwingen,
danke, scheinen von Windows 95 zu stammen und
selbst Oracle selbst rät von Zwingen als Guild-Framework inzwischen ab.
JavaFX-8. Das stimmt
Ja. Das stimmt. So, jetzt hatte ich vorhin schon eine,
so eine emotionalisierte Vorrede zum letzten Kommentar gehalten, was ich dazu sagen kann.
Ja, ja, ja. Abgesehen davon, wir vermitteln ihnen
hier Konzepte. Und diese Konzepte, wie also MVC,
steht da gleich nochmal auf einer anderen negativen Kritik,
die haben unterschiedliche Ausprägungen erfahren. In den letzten 10,
15, 15, 20 Jahren. Wenn man den Anspruch hat,
also das jetzt in einer aktuellen technischen Umgebung zu machen,
dann ist das ist das sicherlich dieses Java-FX, ist eine Alternative.
Abgesehen davon kann ich mit gutem Gewissen hier stehen und schwören,
das, was wir Ihnen hier beibringt, ist auch relevant für das,
was also so an aktuellen Technologien, sagen wir mal,
mit einem Zeithorizont in den nächsten fünf Jahren sich abspielen wird.
Das ist nicht der Anspruch,
Ihnen so die neueste Talmy-Generation von Framework Ihnen hier beizubringen,
sondern das, was so an fundamentalen Konzepten dahinter steht.
Und dafür ist das, was wir da jetzt haben, gut genug.
Das Swingen nicht, also up to date ist bitte,
ja, ist alles gut.
Ja, ich sehe es ein
Ich bin einsichtig. So, das sollte ich,
das habe ich dreimal gelesen. Das ist einfach so schön
. Derjenige, der diejenige, der das geschrieben hat,
also herzlichen Dank. Ein gewisses, ermattendes Gefühl,
welches den Durchschnittsstudenten zwischen 10 bis 30 Minuten vor Veranstaltungsende zu übermannen droht.
Das ist ja fast schon literarisch. Es ist im Vergleich
zu dem, was man sonst so liest.
Vielleicht würde man den Durchschnittlichen Studierenden so,
dann wäre es auch politisch
noch korrekt
Ja, mein herzliches Beileid. Ich weiß, es ist
hart. Im Sommersemester 14 bis 16 Uhr die Müdigkeit,
also mich überkommt sie immer schon um 13 Uhr.
Also eine Stunde vor Vorlesungsbeginn. Sollen jetzt noch so ein paar Zahlen?
Im Großen und Ganzen ist das, also jetzt,
was ich Ihnen hier vortrage, es ist eigentlich erwartungskonform.
Es fühlten sich wenige von Ihnen, also über oder unterfordert,
Niveau, als würden Sie das beurteilen können.
Es scheint genau richtig zu sein. Beispiel, ja,
haben wir uns wirklich, wir waren stets bemüht, wozu das gut ist.
Ich meine, jetzt haben Sie gerade diese wunderbaren Anwendungen gesehen.
Und ich verspreche Ihnen, Sie haben, also das,
so was es braucht, so konzeptionell.
Also vieles von dem haben wir hier uns schon erarbeitet in den letzten beiden Semestern.
Da fehlen noch ein paar Sachen, aber bitte.
Das ist auch, also vieles ist mit der Hand am Arm.
Vieles muss man einfach nur wissen. Sie sind darauf
meines, nach meiner festen Überzeugung, gut vorbereitet.
So kritisch von verschiedenen Seiten beleuchtet, was immer das heißt.
Ja, wir haben uns Mühe gegeben, das zu strukturieren,
inhaltlich auch. Wir sind hier zur politischen Neutralität verpflichtet in
der Universität Hamburg
Objektorientierte Programmierung ist das herrschende, vorherrschende Programmierparadigma. Sie werden
im Laufe ihres Studiums noch andere Programmierparaden mit Dickmann kennenlernen,
namentlich logische und funktionale Programmierung. Wir werden sie nicht indoktrinieren,
aber mit irgendwas muss man anfangen, so in der Programmierung.
Ich weiß nicht, wie die Nachfolger das machen werden,
man guckt manchmal,
ich gucke manchmal so rum,
wie das
an anderen Universitäten gehandhabt wird
Universitäten, Fachhochschulen, Hochschulen, die so mit sowas
wie Miranda anfangen, also einer funktionalen Sprache.
Letztens habe ich zu meiner Überraschung gesehen,
dass es eine Hochschule im deutschsprachigen Raum gibt,
die mit Pascal das erste Semester bestreitet.
Da dachte ich, wow, da könnte selbst ich noch mal Vorlesungen halten oder in C.
Und es gibt viele, die mit Java anfangen.
Es gibt andere, die mit Smalltalk anfangen.
Also die Welt ist da ganz bunt. Machen Sie sich,
also hier hat sich offensichtlich einer von Ihnen schon Gedanken darüber gemacht,
was er von objektorientierter Programmierung hält.
Das ist ein freies Land, dürfen Sie auch gerne weiter so denken,
fühlen, hassen. So, was haben wir hier?
Ja, die Unterlagen sind weitgehend fehlerfrei. Ja. Nicht
noch mehr Neues einführen, was in VL nicht behandelt wurde.
Das muss sich mal jemand anders zeigen und fragen,
ob der oder die was damit anfangen kann.
Vielleicht scheint mir irgendwie eine Verneinung
zu viel
Zu sein. Die Dozenten, interessant und lebendig. Als ich die so die vergleichbare Veranstaltung wie Softwaretechnik oder so,
als ich das gehört habe,
das war auch ein Sommersemester und das war aber an der TU Berlin und das war so von,
ich glaube, es war auch von 14 bis 16 Uhr und der Dozent,
damals Heinz Züllikoven, heute Professor Züllikoven,
bei dem ich das gehört habe,
Ich bin regelmäßig so nach einer Viertelstunde,
aber sowas von eingeschlafen.
Und das hat so gut getan. So eine sonore Stimme
ohne Höhen und Tiefen, immer so gleich moduliert.
So fast so hypnotischen Charakter. Heute ist ein schöner Tag in ihrem Leben,
weil heute erfahren sie wieder etwas über objektorientierte Programmierung.
Seien Sie bei sich, seien Sie mit mir
Ja, ich habe vor 53 Tagen aufgehört zu rauchen.
Und ein Teil des Kurses war so ein hypnotisches.
Heute ist der erste Tag vom Rest ihres Lebens.
Bis jetzt geht's. So, der Dozent kann auch leichte Sachverhalte
schwierig erläutern. Ja, ja. Gut verständliche Aussprache.
Wir geben uns Mühe. So, zu den Übungen,
das sollte auch noch, ja, das freut mich,
dass es ein überwiegend positives Feedback auch zu den Übungen
gegeben hat
So, und das ist so die zusammenfassende Zusammenfassung für diese Veranstaltung.
Viele von Ihnen behaupten, dass Sie viel gelernt haben.
Ich wünsche es Ihnen, das ist meine Absicht gewesen oder
unsere Absicht gewesen, für Ihnen was beigebracht haben.
Es lerne etwas Sinnvolles und Wichtiges. Job lohnt sich,
empfehlen Sie uns weiter. Und die Note ist
ein bisschen schlechter als in SE1. Ja,
das ist halt so
Kann ich jetzt noch nicht mal sagen,
wir geben uns beim nächsten Mal mehr Mühe.
Nee, machen wir nicht. Ja, dann sage ich jetzt mal,
ich drücke Ihnen wie so vor ungefähr sechs Monaten.
Ich drücke Ihnen beide Daumen, dass Sie die Klausur heil überstehen.
Und dann freue ich mich, Sie im vierten Semester bei
Softwaretechnik oder beim und oder beim Projekt objektorientierte Softwareentwicklung wiederzusehen.
Und wir werden lustige Sachen bauen. Und bis dahin
frohes Fest und guten Rutsch
Untertitel der Amara.org-Community Musik So, das Mikro geht zum
letzten Mal an. Oh, ja, das war jetzt
das andere Passwort.
Warum vertippe ich mich da immer? So, das hatte Guido ja schon gesagt.
Wir haben das jetzt, glaube ich, oft genug gesagt.
Ich habe mal diese Zahl aktualisiert. Also im Gegensatz zu
letzter Woche haben sich ungefähr 30 Leute abgemeldet in Stine.
Also die Zahl erscheint jetzt schon ein bisschen realistischer.
Also bitte schaut nochmal, ob euer Anmeldestatus korrekt ist.
Und der Kram ist alles von letzter Woche. So,
jetzt schaue ich einmal, dass ich das hier mal
irgendwie schön ausfülle. Oh, ich wundere mich gerade,
man sieht ja alles
Wie kommt das? Mein ganzer Bildschirm ist sichtbar am
letzten Termin. Komisch. Also ich habe nichts geändert.
Okay, besser später als nie. Genau,
also nur damit wir es nicht vergessen,
ich will also mit euch heute die Probeklausur lösen und deswegen
mache ich das schon mal auf und ich habe noch so ein kleines Rahmenprogramm.
Also es ist ja so ein kleiner historischer Moment heute und
ich habe mal so ein bisschen in der Historie gewühlt,
wie fing das eigentlich alles an?
Vielleicht interessiert das ja irgendjemanden. Also im Mai vor
zwei Jahren haben Gide und ich unsere erste Vorlesung zusammen gemacht
Und irgendwie lief das so ganz gut. Und dann war halt die Idee,
so könnte man das doch für SE1 im Jahr 2014 machen.
Und irgendwie hat sich das dann immer so weiterentwickelt.
Also unser Konzept war am Anfang tatsächlich noch ein bisschen anders.
Also erst hat Guido vorgetragen. Dann habe ich programmiert.
Steht das hier irgendwo? Java, genau.
Und dann hatte Guido nochmal so einen Abschluss gemacht.
Also so Zusammenfassung quasi. Das haben wir irgendwann, glaube ich,
sein lassen, weil es einfach zu viele Wechsel vorne gab.
Und das hat einfach genervt. Okay, aber ansonsten,
so da fing das quasi alles an.
Fand ich irgendwie ganz witzig.
Dann gibt es immer noch wieder Verwirrungen, was muss man
eigentlich machen, um das Modul SE2 erfolgreich abzuschließen.
Und ihr seid ja seit letzter Woche Experten in Zustandsautomaten.
Ich wollte noch mal ganz kurz, achso,
ich habe hier gar kein Bild erzeugt.
Ich wollte mal mit euch einen Zustandsautomaten mal an,
der zeigt, wie man diese Veranstaltung erfolgreich abschließt.
Also, wir fangen mal hier an
Es wird wieder leicht historisch. Also hier habt ihr sozusagen,
hier fängt das Semester an, das ist der Staatszustand.
Und ihr wollt quasi zum Ziel kommen. Wenn ihr hier angekommen seid,
dann könnt ihr einen Haken an SE2 machen und müsst euch nicht mehr damit beschäftigen.
Und früher war das so, es gab eben eine Zwischenstufe,
die war hier. Und wie hat man diese Zwischenstufe erreicht?
Man musste den Übungsschein, ich mache mal, ja,
also man musste die Übung gestanden haben.
Man musste also alle Aufgaben abgenommen bekommen haben und so weiter.
Und wenn man das geschafft hat, dann wurde man zur Klausur zugelassen,
Und nur wenn man dann auch die Klausur bestanden hat,
ich mache mal hier so ein K dran,
dann war man sozusagen durch mit SE2.
Ja, jetzt ist es natürlich nicht so einfach festzustellen,
wer kriegt denn den Übungsschein? Bei über 300,
wenn SE1 sogar über 500 Studenten. Also, genau,
also theoretisch könntet ihr noch morgen und übermorgen in der Übung sein.
Und am Montag ist ja schon die Klausur. Wie sollen wir
so schnell den Prüfungsamt mitteilen, wer alles zur Klausur zugelassen ist?
Das haben wir irgendwann mal festgestellt,
oder ich weiß nicht, wer das festgestellt hat,
dass das irgendwie so ein kleiner Flaschenhals ist im System.
Also haben wir uns überlegt, ich sage immer wir,
ich weiß gar nicht, wer sich das überlegt hat.
Wir lassen es auch zu, dass man die Klausur schreibt,
bevor man hundertprozentig weiß, ob man die Übungen bestanden hat oder nicht.
Aber wenn man diese Route wählt, muss man natürlich trotzdem
den Übungsschein machen. Es gibt also zwei Möglichkeiten.
Entweder ihr macht erst die Übung und dann die Klausur oder
ihr macht erst die Klausur und dann die Übungen.
Aber ihr könnt nur hier hinkommen, wenn ihr beides gemacht habt.
Ich wollte uns nochmal grafisch zeigen, weil immer,
wenn ich dazu Texte schreibe, verwirrt es die Leute.
Ich weiß nicht, warum. Also ihr müsst Übungen und
Klausur erfolgreich bestehen, aber die Reihenfolge ist egal.
Gut, das wollte ich eigentlich damit nur sagen
Genau, und da war eben eine Teilnehmerin,
die hatte irgendwie Angst, dass sie nicht zur Klausur zugelassen wird.
Dann habe ich dann nochmal eine Mail geschrieben,
keine Sorge, du kannst auch in der Klausur teilnehmen.
Wenn du noch nicht mit der Übung fertig bist,
aber du musst es eben nachholen. Wenn du irgendwie diese
Woche krank wart oder Letzte, ihr müsst es nachholen.
Ich glaube, Christian Spee hatte dazu auch nochmal was gesagt.
Genau. Also wenn ihr irgendwie krank wart,
redet doch mal mit euren Betreuern. Ich brauche eine Nachannahme.
Kannst du mir irgendwie helfen? Und wenn das irgendwie nicht geht,
vielleicht ist es auch der Betreuer auch krank oder ihr wisst nicht,
wer euer Betreuer ist oder so.
Wir wissen die Namen vielleicht einfach nicht. Schreibt doch eine
E-Mail-Adresse. Mittlerweile wisst ihr, dass sie so lautet,
at Informatik und die Hamburg.de. Beschreibt kurz euer Problem,
mir fehlt noch eine Nachannahme und dann machen wir mit euch einen Termin.
Das ist also kein Problem. Ihr müsst euch nur irgendwie
darum kümmern. Also wir werden euch nicht anschreiben
Okay. Gibt es zu diesem Komplex Klausur und Übungsschein
noch irgendwie Fragen? Ich mache nochmal die Grafik,
dass das irgendwie so als kleine, ist das irgendwie unklar?
Eine Sache noch. Was passiert eigentlich,
wenn man den Übungsschein schafft, aber dieses Jahr an der Klausur scheitert,
muss man dann nächstes Jahr hier weitermachen oder muss man wieder bei Start anfangen?
Das hängt davon ab, ja, von dem Dozenten,
der das eben nächstes Jahr macht, der kann das im Prinzip frei entscheiden.
Wir haben darüber keine Entscheidungsgewalt. Also ich würde euch dringend
empfehlen, spätestens im September diesen Jahres hier zu enden
So. Okay, keine Fragen. Gut. Was habe ich
denn noch? Genau, Feedback. Ich habe mir natürlich
auch so ein bisschen Feedback mal angeschaut.
Das ist immer ein spannender Punkt. Genau. Ja,
ich glaube, es gibt kein Patentrezept,
um zu sagen, wir haben hier mehrere hundert Studenten.
Wir prügeln die 14 Wochen und dann nochmal 14 Wochen durch
so eine Veranstaltung. Und wir garantieren, dass 100 Prozent
der Studenten in der Lage sind, eigenständig Programme zu schreiben.
Also ich glaube, so ein Patentrezept kann es nicht geben.
Das ist auch noch ein offenes Forschungsfeld,
wie man am besten Leuten programmieren beibringt
Mein eigener kleiner Beitrag zu dieser Frage war Caro the Robot mehr,
habe ich hier nicht ändern können. Aber ja,
ich weiß es ehrlich gesagt nicht,
ob man da prinzipiell irgendwas noch verbessern kann oder ob es eine Motivationsfrage ist,
ob die Leute, die das nicht machen,
einfach nicht genug Zeit investieren oder ob sie vielleicht das eigentlich gar nicht machen wollen,
ob sie vielleicht viel lieber, weiß ich nicht,
einen anderen Beruf ergreifen wollen würden und sie es vielleicht noch nicht wissen.
Ich weiß es nicht. Ich will darüber nicht urteilen.
Okay, ja, zu diesem Punkt hat Guido eigentlich auch
schon was gesagt. Also, was wir euch hier beibringen,
ist nicht der neueste Trend
Was irgendwie letztes Jahr gerade rausgekommen ist und jetzt müssen es alle unbedingt lernen.
Sondern es sind eben schon, ich sag mal, etabliertere Dinge.
Also wenn ihr in irgendeinem Softwareprojekt arbeitet, wo Java verwendet wird,
Entwurfsmuster, es gibt eigentlich kein größeres Java-Projekt,
wo nicht irgendwelche Entwurfsmuster sich drin verstecken.
Ich kann es nicht ändern. Meistens ist es so,
also meine eigene Erfahrung mit Entwurfsmuster war, man hat so vier Phasen.
Die erste Phase ist so, was soll das?
Das ist doch völlig Kontext, weil ich brauche das doch niemals.
Irgendwann versteht man dann, worum es geht, dann baut man
die überall ein. Ja, ich will alle Entwurfsmuster,
die es gibt, will ich in mein Projekt einbauen.
Irgendwas merkt man dann, dadurch werden die Projekte kompliziert,
dann kommt man in so eine Negativhaltung, hat bloß keine Entwurfsmuster.
Und irgendwann merkt man dann, naja,
das ist halt eins von vielen Tools,
die man in seiner Toolbox drin hat und manchmal bietet es sich an,
die zu verwenden und manchmal eben nicht
Ich bin da mittlerweile total entspannt, was das Thema angeht.
Okay, Java X, das wurde auch schon alles gesagt,
Lambdas. Ja, also für die Leute,
die sich für Java 8 Lambdas interessieren,
komischerweise sieht man jetzt ja auch den ganzen Bildschirm,
dann könnt ihr euch vielleicht die URL notieren oder ihr sucht einfach mal bei Lecture to Go.
Ich habe also vor zwei Jahren, hallo,
vor zwei Jahren hatte ich mal einen Gast erst vor Gastvortrag,
sagt man das so?
Egal. Wo ich also zwei Vorlesungen,
was über funktionale Programmierung und Lambdas erzählt habe.
Wenn ihr also irgendwie nach diesen Titeln mal bei Lecture to
Go guckt,
dann findet ihr das vielleicht
Erzähle ich ein bisschen was über Java 8 und über Lambdas.
Wenn euch das interessiert. Okay. Ja,
das habe ich ehrlich gesagt nicht so richtig verstanden,
was der Herr hier sagen wollte oder die Dame.
Also man besteht die Übung gut ohne die Vorlesung. Okay,
das, ja, das kann man, glaube ich,...
Wahrscheinlich stimmt das, weiß ich nicht. Aber man besteht
die Prüfung gut ohne die Übung, aber nur mit der Vorlesung.
Weiß ich nicht. Also ich kann mir das, Elixas,
nicht vorstellen. Also wenn ich mir die Klausur mal so angucke,
dann ist sie eigentlich ungefähr 50 Prozent Theorie aus der Vorlesung und 50 Prozent.
Man muss was mit Code machen. Ja,
und diese Aufgaben, man muss was mit Code machen,
sind 50 Prozent Code verstehen und 50 Prozent Code in Lücken einfüllen
Also wenn ihr, also ich kann das ehrlich gesagt nicht unterschreiben,
diese Aussage, dass man,
wenn man nur in der Vorlese war und nicht in der Übung,
dass man dann die Klausur besteht.
Also es ist vielleicht nur sehr knapp. Weiß ich nicht.
Okay. Genau, was wollte ich eigentlich noch sagen?
Ich wollte einen schönen Übergang zu dem Nächsten finden.
Genau, ich glaube, es war eigentlich hauptsächlich dieser Punkt.
Man muss sich auch klar machen, was wir in SE1
und SE2 von euch leisten oder von euch verlangen,
was ihr dann leistet.
Also ihr habt ja irgendwie 13 Labortermine.
A, drei Stunden. Das sind 39 Stunden
Das können wir mal aufrunden auf 40 Stunden. Das ist
eine Woche. Ihr programmiert also quasi eine Woche lang vorm Rechner,
in SE1, sondern in SE2. Macht ihr das nochmal?
Da habt ihr so zwei Wochen lang programmiert vom Rechner.
Ich glaube, da kann man nicht erwarten, dass jemand,
der perfekte Programmierer ist nach so kurzer Zeit.
Und ich habe das mal versucht, grafisch oder visuell zu veranschaulichen.
Er ist natürlich mit der Auflösung ein bisschen schwierig.
Wie kann ich denn jetzt hier den Font ändern?
Steuerung minus oder so? Ja, okay. Also das
kann man wahrscheinlich gar nicht mehr erkennen, oder?
Also ich mache noch mal ganz kurz hier so ein paar Plusse.
Das, was sie hier oben sieht,
das ist die eine Woche, die ihr in SE1
investiert habt
Das ist die Woche, die ihr in SE2 investiert habt.
Ja, und jetzt gibt es ja auch Leute,
die vielleicht ein bisschen mehr noch zu Hause gemacht haben.
Ich habe euch nochmal zwei zusätzliche Wochen spendiert. Also vielleicht habt ihr
einen Monat lang programmiert in SE1 und SE2, ja.
So, und wenn ich jetzt hier mal so ein
bisschen rauszoome, dann seht ihr, euer Berufsleben.
Ja, das ist eure berufliche Laufbahn.
Das sind also jeder Kasten steht für eine Woche.
Den geht dann in eurem Beruf programmieren werdet. Ja,
und wenn ihr dann irgendwann hier unten angekommen seid,
dann könnt ihr in Rente gehen.
Und dann könnt ihr euch selber überlegen,
ob ihr euch dann noch fortbilden wollt oder nicht.
Aber ich kann euch garantieren,
ihr werdet ihn so gut wie jeder in dieser Wochen,
werdet ihr
irgendwas Neues lernen
Ja, ich bin neulich bei der WPS und ein Projekt reingeschmissen worden.
Ich kam mir davor wie ein absoluter Programmieranfänger,
weil ich kannte das Projekt nicht,
ich kannte die Programmiersplaure nicht, ich kannte das Grafikframework nicht.
Ja, das ist also völlig normal, dass man in
so einer gesamten beruflichen Laufbahn immer wieder was Neues lernt.
Ihr müsst also nicht irgendwie denken, neuer nach SE1 und SE2
habe ich alles gelernt, was ich brauche.
Und Java und Swing. Und dann kann ich die nächsten
40 Jahre halt damit programmieren und dann ist es gut.
Dann gehe ich damit ins Grab. Also bereitet euch darauf vor,
wenn ihr Programmierer werden wollt, dass ihr euer Leben lang
oder euer Berufsleben lang zumindest dazulernen werden müsst.
Ja, wir können ja vielleicht mal wetten, abschließen,
in welcher dieser Wochen Java dann stirbt oder zwingen oder ich
weiß es nicht.
Irgendwas Neues wird sicherlich kommen
Gut. Ich weiß gar nicht, ob das ein optimistisch
stimmt oder ob es eine eher so Pessimiste stimmt.
Also wenn man so überlegt, das ist jetzt so mein,
das ist jetzt meine Zukunft, oh Gott.
Naja, okay, dann glaube ich, gehen wir mal zur Probeklausur.
Ich mache das mit, das brauchen wir glaube ich nicht,
speichern, das ist jetzt irgendwie allen klar geworden.
Okay. Und kann ich auch Steuerung plus sagen.
Nee, schade. Jedes Programm hat seine eigenen Shortcuts.
Maßstab, Seitenbreite. Das ist auch eine tolle Aufgabe
Also die Promoklausur basiert auf einer echten Klausur vom letzten Jahr. Das heißt,
ich bin also letztes Jahr durch die Folien gegangen,
durch die Projekte, habe geguckt, was haben wir da so gemacht,
was kann ich für Fragen stellen.
Und ich habe halt irgendwo eine Folie gefunden oder sogar mehrere
Folien, wo halt diese Unterscheidung gemacht wurde.
Das Blöde ist jetzt, das war, glaube ich,
Vorlesung 2, wo es über das Vertragsmodell ging.
Da wurde das Thema Vertragsmodell so viel deutlicher nochmal hervorgehoben,
weil es eben auch so wichtig ist für die Übung,
dass dieser Punkt in den Folien gar nicht mehr drin ist.
Das heißt also, finde ich ganz gut,
dass es in der Probeklausur passiert ist.
Ich bin jetzt tatsächlich nochmal die echte Klausur durchgegangen,
alle Lückentexte und habe,
ich habe mir alle Skriptteile runtergeladen und ich habe für jede Aufgabe herausgefunden,
wo das im Skript steht
Also ihr müsst keine Angst haben, dass irgendwas drankommt,
was nicht im Skript steht.
Ich lege meine Hand ins Feuer. Okay, vielleicht interessiert
es ja trotzdem irgendjemanden. Ich habe hier, glaube ich,
irgendwo so eine Schrift, die aussieht wie von Hand geschrieben.
Irgendwas mit K war die, glaube ich. EP ist
über U. Wo ist es hier? Ja. Wieso ist
denn jetzt gleich? Ich wollte nur, dass der Cursor,
das ist albern. Ich mache es mit derselben Schrift.
Also, ja, weiß das zufällig jemand.
Ich hatte es ja schon ins Komsi geschrieben, ne?
Ja. Also, Betromet nennt es,
nennt es nicht Konzeptionsfehler,
Genau, also er nennt es Programmierfehler.
Das ist halt, oh, Fehler steht da ja schon.
Programmier, Programmier Fehler, ja. Okay, ja,
weiß, weiß da noch jemand,
was ich da ins Kommensee geschrieben habe oder weiß es einfach jemand?
Ja, die nennen sich dann Programmfehler. Das ist eine
ganz interessante Unterscheidung. Okay, und Ausführung, heißt das jemand,
ja? Genau, das sind die Laufzeitfehler, ja.
Also diese Aufgabe kann gar nicht in der Klausur drankommen,
weil es keine Folien mehr dazu gibt.
Okay. Okay, dann haben wir eine ganz interessante Aufgabe,
wo ein bisschen Java-Quelltext ist.
Vielleicht schauen wir uns erstmal die Main-Methode an.
Wir haben hier eine Main-Methode, wo wir drei String-Variablen
haben,
zwei String-Bilder-Variablen
Wobei ich gar nicht sicher bin,
ob wir das dieses Jahr überhaupt noch gemacht haben.
Dann übergibt man diese Variablen an eine andere Methode.
Und dann wird in dieser Methode irgendwas gemacht. Und wir haben
diese Aufgabe tatsächlich letztes Jahr in der Klausur gehabt und es ist unglaublich,
das hat fast niemand gelöst, diese Aufgabe.
Da bin ich also extrem schockiert gewesen und deswegen will ich
nochmal den Kerngedanken dieser Aufgabe mit euch durchgehen.
Falls eine ähnliche Aufgabe dran kommt, nee, Grafik,
dass ihr dann vielleicht euch daran nochmal erinnern könnt.
Also ich will eigentlich über ganz einfache Dinge mit euch
nochmal reden,
über diese Zeile
String F ist gleich Franziskaner. Ich würde euch mal zeigen,
was in meinem Kopf los ist, wenn ich diese Zeile lese.
String F ist gleich Franziskaner. Also ich muss hier wieder
malen. So. Das, was ich jetzt hier markiere,
bedeutet ja, ich möchte eine Referenzvariable deklarieren.
Dann machen wir das doch mal. Wir deklarieren eine Referenzvariable
, zack, zack, zack, zack.
Variablen sind immer eckig in meinen Speicherdiagrammen
F hieß sie, glaube ich. Und dann wurde
ihr zugewiesen, das Stringliteral Franziskaner. Das heißt also,
wir haben ein String-Objekt, was von dieser Variable referenziert wird.
Und da steht drin, Franziskaner, ich mache da jetzt nur F,
Punkt, Punkt, Punkt, Punkt, Punkt.
Also da steht Franziskaner drin in diesem String-Objekt.
Und F hält eine Referenz auf dieses Objekt. Das sind
SE1-Grundlagen. Eine Referenz-Variable hält eine Referenz auf ein Objekt.
Objekte haben keine Namen, Referenz-Variablen haben Namen.
Okay. Und was bedeutet das jetzt,
dass sich dieses F hier als aktuellen Parameter übergebe
An diese Methode M. Tja, das heißt,
diese Variable, die ein formaler Parameter ist,
diese Variable muss ich jetzt einzeichnen, die heißt A.,
können wir vielleicht mal hier einzeichnen, zack.
A. Und paramischer Übergabe heißt er in so gut wie allen Programmiersprachen,
der aktuelle Parameter wird in den formalen Parameter reinkopiert.
Das heißt, diese Referenz wird hier reinkopiert.
Das bedeutet, beide Variablen zeigen jetzt auf dasselbe Objekt.
Das ist immer so in Java
Ja. Also diese Variable ist eine andere Variable als diese
Variable. Beide zeigen auf dasselbe Objekt. Ich komme jetzt
wieder zurück hier. Ja. Und jetzt steht hier,
ich möchte an A ein anderes String-Objekt zuweisen.
Okay. Also dieses andere Schwachsinn. Dieses andere String-Objekt,
auf Schwachsinn hier. Dieses andere String-Objekt.
Da weisen wir jetzt,
das weisen wir jetzt dem A zu, das heißt,
das A zeigt jetzt hier rauf und wie kann ich das jetzt am sinnvollsten löschen?
Ich versuche das nochmal irgendwie anzudeuten, diese Referenz verschwindet jetzt.
Das bedeutet es, wenn ich A etwas anderes zuweise.
Das ist immer so in Java. Eine Referenz war ja,
habt ihr etwas zuzuweisen heißt, ich biege die Referenz um.
Das ist also nichts Besonderes mit Strings oder so. Okay,
und wenn man jetzt mal guckt,
was hier noch weiter passiert, nachdem diese Methode aufgerufen wurde,
schreibe ich F auf die Konsole
Ich versuche das nochmal für euch nachvollziehbar zu machen. Also,
F zeigt auf Franziskaner,
dann kopieren wir diese Referenz in die Variable A,
dann zeigen A, eben auch auf Franziskaner,
dann biege ich das A um, sodass es auf Astra zeigt.
Und dann frage ich mit dem System Up Printline oder ich
gebe auf die Konsole aus, den String, auf den F zeigt.
F hat sich nicht geändert. Das haben 80 Prozent
der Studenten vergessen. Das sind also SE1-Grundlagen. Okay,
und das ist eben verschiedene Varianten über dasselbe Thema,
ihr könnt es einfach mal so ausprobieren.
Es gab noch einen witzigen, ja,
oder vielleicht auch gar nicht so witzigen Effekt
Nee, erzähle ich nicht. Da komme ich nur in,
da komme ich nur in Schwierigkeiten. Ich erzähle es euch
vielleicht bei einer Flasche Bier oder so mal. Okay,
also macht euch nochmal, klar, der Unterschied zwischen Referenzmariaplen und Objekten.
Gut. Okay, ja, das werde ich,
das werde ich vielleicht umkommen, sie dann machen.
Aber also solche Aufgaben, wo, ich glaube, man steht darüber,
eine falsche Antworten werden von richtigen abgezogen oder so genau.
Solche machen wir nicht mehr. Insofern ist es jetzt nicht
so schlimm, wenn ich da jetzt nicht die Antworten reinschreibe.
Hauptsache, das Konzept ist euch klar. Okay, ach,
ein Klassiker. Das Beobachten muss da. Guido hat neulich
eine Umfrage gemacht in der WPS. Was sind denn die
wichtigsten Entwurfsmuster? Und Beobachter waren ganz oben auf Platz 1.
Ohne Beobachter wird man einfach nicht mehr glücklich heutzutage.
Ja, ich glaube, ich kann ja einfach
mal euch erzählen lassen
Also, was haben wir hier? Wir haben hier
das Interface, Beobachtung, wir haben die Klasse beobachtbar.
Und jetzt haben wir hier drei Dinge,
die in dieser Klasse beobachtbar geschachtelt sind.
Und jetzt steht hier immer so ein komisches P, warum wohl?
Ja. Drei wird oder Public oder Protected. Genau,
das heißt, man muss sich jetzt hier immer entscheiden,
was ist da am sinnvollsten? Ja, wir haben hier
also eine, ja, ein Zustandswelt. Was,
wenn man nicht weiß, was man mit Zustandswerte macht,
macht man sie dann öffentlich private oder protected?
Genau. Wenn nichts Gutes dagegen spricht,
macht man
die immer private
Okay, jetzt gibt es hier die Methode,
dass man einen Beobachter registriert, sollen,
das soll jeder sich als Beobachter registrieren können oder nur
die Klasse selber oder irgendwas dazwischen oder?
Was ist da sinnvoll? Ja? Genau. Jeder soll
sich anmelden können als Beobachter. Sehr schön. Und wie ist das
mit dem Informieren? Also beobachtbar ist ja eine Ulstika,
hatte ich ja vergessen, diese Klasse Abstracts zu machen.
Ist nicht schlimm. Das ist ja normalerweise eine Oberklasse,
von der alle beobachtbaren Klassen erben. Und dieses Informiere,
was in den Beobachtern Bescheid gibt, soll das von außen
aufgerufen werden können von den Erben oder nur von der abstrakten Klasse beobachtbar selber?
Was ist da so
euer Gefühl
Genau, von den Erben. Das sollte also protected sein.
Okay. So, was ist denn der Element-Tüt der Liste?
Was für Dinge will ich hier verwalten in der Liste?
Ja, Beobachter, genau. Zack, fehlt noch irgendwas,
registriere. Was kann ich denn hier registrieren? Was für
ein Typ sollte hier rein? Ja, genau. So,
was bedeutet es denn, einen Beobachter zu registrieren?
Also ich habe hier diese Liste, die ist ja initial leer,
jetzt wird hier ein neuer Beobachter übergeben,
was mache ich denn jetzt mit dem neuen Beobachter?
Genau, wir wollen uns der Liste hinzufügen.
Alle ist also diese Liste. Hinzufügen heißt Ed.
Und was will ich hinzufügen? Diesen neuen Beobachter, den
ich hier übergeben habe. Genauso habt ihr es programmiert,
nur dass die Variablen wahrscheinlich anders hießen bei euch.
Okay. Ach, die VIT-Schleife, wir lieben sie.
Ich mache dir immer ganz gerne rückwärts. Also was steht
denn bei der VIT-Schleife immer hinter dem Doppelpunkt ganz rechts?
Ja. Die Liste, über die wir iterieren wollen,
und die heißt ja alle.
Sehr schön. Was steht
immer ganz links
Da steht der Element Typ der Liste, Beobachter.
Und was schreiben wir jetzt in die Mitte? Beobachter klein
geschrieben zum Beispiel, also letzten Endes ist es egal,
was man da reinschreibt. Ich schreibe da jetzt mal Beo,
damit wir da einfacher drüber reden können.
Okay, was will ich denn jetzt mit diesem Beo machen?
Ja. Genau. Das ist ja das Einzige,
was ich mit dem Beobachter machen kann. Es gibt ja
nur diese Operation reagiere, was anderes gibt es ja gar nicht.
Und was übergebe ich da als Quelle oder ich glaube,
wir sagen mittlerweile für Ursache
Genau. Wir selber sind der Verursacher dieser Benachrichtigung.
So oder ähnlich habt ihr das doch bestimmt auch programmieren.
Ich speichere das einmal zwischendurch. Gibt es dazu Fragen?
Nee, das ist doch... Man könnte das und danach
habe ich es akustisch nicht mehr verstanden.
Das verwechselst, glaube ich, mit dem Registrieren.
Bei dem Registrieren macht es Sinn, der anonyme innere Klasse anzugeben.
Bei dem Auslösen ist es eher sinnvoll,
dass der Beobachter sich selber,
Entschuldigung,
das beobachtbare Ding sich selbst übergibt
Okay, das ist eine ganz tolle Aufgabe. Was haben
wir noch? Die Diamantvererbung. Wer hat das Wort Diamantvererbung
schon mal gehört? Okay, gut, beruhigt mich.
Ich habe es auch in den Folien gefunden, auf mehreren Folien.
Weiß denn jemand, was das ist?
Ja. Es geht auch um multiple Vererbung, ja.
Also ich habe eine Basisklasse, von der leiten sich zwei ab.
Und dann gibt es eine vierte Klasse,
die dann wieder von den beiden Erbten, das wieder zusammenführt.
Das heißt, was ist jetzt die richtige Antwort
Vier, genau. Zack, ja. So. Okay,
jetzt haben wir hier mal so eine kleine Freitextaufgabe.
Mit Freitextaufgaben muss man immer sehr vorsichtig sein,
weil die immer sehr viel Interpretationsspielraum lassen. Okay,
warum ist die Vorbedingung der Operation Stringlist Get Index problematisch?
Also das hier ist ja die Operation und die hat eine Vorbedingung.
Und die Vorbedingung seht ihr hier. Es gibt also hier
irgendein Problem. Require Index, das ist der Parameter,
Index größer gleich Null und Index kleiner als diese Länge.
Warum ist das
ein Problem
Ja. Genau, längst ist privat und Verträge dürfen sich
nicht auf Implementationsdetails beziehen, weil der Klient versteht den Vertrag sonst nicht.
Der Vertrag muss für den Klienten verständlich sein. Das heißt,
ihr müsst dann so verstehen wie Get Langs als Operationsaufwurf oder so.
Wollen wir da jetzt hier mal Freitext reinschreiben?
Sie bezieht sich auf die private Exemplarvariable Links oder so.
Vielleicht noch als Erklärung, Verträge müssen aber vom Klienten
Ich kann heute irgendwie nicht gut tippen. Überprüfbar, beziehungsweise
verständlich sein. Sie müssen vom Klientenverstand, naja,
egal, ihr wisst glaube ich, was ich meine.
Okay. Ja, also schaut euch ruhig auch nochmal die
theoretischen Grundlagen zum Vertragsmodell an und nicht nur,
wie man es in Java macht.
Okay, was haben wir noch? Oh Gott,
da gab es auch eine regelrechten, was ist denn das politisch korrekte Wort dafür?
Eine angeregte Diskussion auf der internen Mailingliste,
weil ich irgendwo in unser Projekt so einen Quelltext eingebaut hatte.
Okay, also mir geht es bei dieser Aufgabe nur darum,
wie lauten die Java-Schlüsselwörter, die sich um Exceptions kümmern?
Mehr will ich mit dieser Aufgabe gar nicht erreichen.
Trial. Catch. Finally, genau. Yups. So
, ne? Gut. Weitere Diskussionen bitte offline führen.
Über den Sinn dieses Quelltexts. Okay. Genau,
wir hatten ja in der Swing-Vorlesung Unterschieden zwischen Container-Komponenten und Nicht-Container-Komponenten.
Das war die Sache mit den russischen Puppen, glaube ich.
Ich kann das einfach mal hinschreiben. Es gibt also
J. Frame, J. Panel und J. Dilock.
Das sind die, die mir spontan einfallen.
Ich glaube, es gibt noch mindestens ein oder zwei weitere.
Weiß ich jetzt nicht. Komponente, die man auch
andere Komponenten reinstecken kann
Okay, das ist so eine Frage,
da habe ich auch ordentlich auf die Mütze bekommen.
Sowas kann man doch nicht wissen und so.
Deswegen gehe ich die jetzt nicht komplett mit euch durch,
aber ich will nochmal, dass wir uns klar machen,
was diese Aufgabe erreichen will.
Ja, pädagogisch. Also schreiben Sie, ob es sich
um eine geprüfte oder mal eine ungeprüfte Exception handelt.
Das heißt, euch muss überhaupt klar sein,
dass es diesen Unterschied gibt in Java.
Was ist denn der Unterschied zwischen geprüften und ungeprüften Exceptions?
Ja, also geprüfte Exceptions, der Compiler stellt sicher,
das geprüfte Exceptions behandelt werden.
Also wenn ich eine geprüfte Exception schmeiße,
muss irgendwo ein Trial Catch Block dafür sein,
sonst sagt der Compiler,
das ist kein gültiges Java
Okay, das heißt, ich mache das jetzt nur anhand
von Beispielen. Eine Arrhythmitic Acception tritt dann auf,
wenn ihr dividiert und zur Laufzeit stellt sich fest,
oh, ihr versucht durch Null zu dividieren. Ja,
das heißt also, ich stelle euch jetzt die ganze einfache Frage,
wenn ihr in Java eine Division hinschreibt,
muss dann da drum stehen,
Trial Catch und der Compiler würde sich beschweren,
wenn es da nicht drum steht
Genau, der Compiler beschwert sich nicht. Das ist also
eine ungeprüfte Exception. Ich mache das hier mal exemplarisch ein Ende hin.
Wie ist es mit dem Nächsten? Ich will irgendwo auf
einen Array-Zugang. Ich sage Array an der Stelle I,
sag mir der Compiler dann sofort, Moment, Moment,
Moment, das könnt ihr ja schief gehen.
Du musst hier einen Try-Catch-Turm schreiben, um diesen Array-Zugriff.
Sagt er das oder nicht? Das macht er nicht, ne?
Richtig, das ist also auch eine ungeprüfte Exception. Ja,
und ich glaube, man kann sich das an ziemlich vielen Dingen klar machen.
Machen wir nochmal vielleicht ein Gegenbeispiel, das hatten wir so schön
Ich glaube, hier hatten wir gesehen, wenn ich versuche,
eine Datei zu öffnen, ich versuche, klingt schon so nach Try.
Also wenn ich in Java hinschreibe,
ich will diese Datei öffnen, dann sagt sofort der Compile,
dann kommen so rote Kringel, hey, hey,
hier könnte ja irgendwann mal was schiefgehen.
Du musst dich darum kümmern. Ich hoffe, ihr erinnert
euch noch daran. Also eine IO-Exception muss sich immer in
so einen Try-Catch reinschmeißen oder ein Throws an die Methode reinschreiben.
Wie ist es zum Beispiel hier? Eine Null-Pointer-Acception tritt auf,
wenn ich sage, Variable, Punkt,
Methode und dann in Klammern aktuelle Parameter übergebe.
Also jedes Mal, wenn ihr eine Methode aufruft,
könnte die ja kommen, diese Nightpointer-Acception.
Müsst ihr um jeden Methoden auf auf einen Try-Catch rumschreiben
Nein. Deswegen ist es eine ungeprüfte Exception. Die Frage
ist auch, was würdet ihr denn dann tun im Catchblock?
Ihr müsstet im Catchblock ja wahrscheinlich auch irgendeine Methode aufrufen.
Zum Beispiel System Out Printline oder so. Und das müsste dann
auch wieder von einem Trike-Hatchblock umfangen werden. Also das wäre
überhaupt nicht sinnvoll, wenn das eine geprüfte Exception wäre.
Also ich will einfach nochmal sagen,
macht euch den Unterschied klar zwischen geprüften und ungeprüften Exceptions.
So, was haben wir noch? Hat das so eine
schöne Aufgabe. SE2-Entwurfsregeln. Schmeißt mir nochmal so ein paar Begriffe
an den Kopf, welche Elementtypen gibt es in den SE2-Entwurfsregeln?
Es gibt Fachwerte. Wo willst du dich hinschauen an?
Welche Position? Ganz unten, sehr schön.
Dann schreibe ich doch mal hin, Fachwerte.
Irgendjemand anders, was fällt euch noch so ein?
Service, wo würdest du die einordnen?
Sehr schön. Noch jemand anders, du? Richtig,
die Werkzeuge stehen ganz oben, die dürfen auf alles zugreifen.
Und was bleibt dann noch übrig? Genau, Materialien,
ne? Okay. Gut. So, was haben
wir noch
Equals. Ich glaube, ich habe euch so viel über Equals
erzählt. Das mache ich gleich nach der Vorlesung von Hand
und lade es dann hoch. Das wäre jetzt,
glaube ich, für die Zeit ein bisschen schade,
wenn wir das jetzt schon wieder machen.
Ja, also Equals, auch eine sehr dankbare Klausuraufgabe.
Okay, was haben wir noch? Genau, also wir
haben mit SE1 gelernt, eine Klasse kann ein Interface implementieren.
Das sieht er dann immer so aus ganz oben.
Also was hatten wir da als Beispiele? Zum Beispiel Klasse,
RA-Titel-List-Implements-Titel ist oder sowas, ja? Okay. Und jetzt kann man in,
seit SE2 wisst ihr, dass man da obere andere Dinge hinschreiben kann,
die was mit der Bildung von Subtypen zu tun haben.
Was heißt überhaupt Subtyp? Also wenn A,
ein Subtyp von B ist, Dann kann ich ein A
überall da verwenden, wo ein B erwartet wird, oder?
Genau, so. Und es gibt eben auch andere Möglichkeiten.
Kennt ihr noch andere Möglichkeiten, außer Klaas Implements?
Ja. Interface Extense Interface ist richtig, das haben wir
zum Beispiel kennengelernt. Ein Interface, jetzt habe ich den
falschen Fonds, mache ich das mal hier hin.
Ein Inter. Wieso habe ich hier Times New Roman?
Egal, das ignorieren wir jetzt. Ein Interface kann
ein anderes Interface erweitern. Sehr schön. Hatten wir
noch was
Irgendjemand, der noch nicht war, alle waren schon mal.
Dann vielleicht du? Genau. Das haben wir zum Beispiel
mal beobachten musste. Sehr schön. Zack. Was haben
wir noch? Okay, wir haben eine Klasse K,
also denkt euch, das hier steht Klaas K,
die von einer Klasse L erbt.
Aus irgendeinem Grund habe ich das nicht darüber geschrieben.
Da steht also, ach so. Hat jemand eine Ahnung,
warum ich hier nicht hingeschrieben habe?
Klaas K, Extens
Dann wäre die Aufgabe darüber ein bisschen einfach wahrscheinlich. Ja,
okay, deswegen habe ich das hier in Textform hingeschrieben.
Okay, wir haben ja so verschiedene Konstruktoren in dieser Klasse
K. Und ich will jetzt irgendwie, dass die andere Konstruktoren aufrufen.
Also ich will aus diesem Konstruktor den Konstruktor aus
der Klasse L aufrufen, der ebenfalls zwei Parameter entgegennimmt.
Und ich will A und B an diesen Konstruktor übergeben.
Die Frage ist jetzt also, wie lautet die Syntax
um den Konstruktor aus der Klasse L aufzurufen,
von der ich erbe
So, ne? Genau. Super. Was haben wir
noch? Rufen Sie den obigen Konstruktor, aha,
den oben Konstruktor, also den hier.
Ich will also aus diesem Konstruktor diesen Konstruktor aufrufen.
Und ich will hierfür X übergeben und hierfür X übergeben.
Wie ist da für die Syntax und Java? Ich will nicht
aus der Oberklasse einen Konstruktor aufrufen, sondern aus der eigenen Klasse.
Ja. Genau. Sehr schön. Und natürlich sind klassische Lösungen,
die man sieht, dass hier dann die Leute L hinschreiben und
hier dann K. Das funktioniert so und Java leider nicht.
Dafür müsst ihr super und this nehmen.
Was haben wir noch? Welcher Konstruktor wird implizit aufgehoben,
wenn der Entwickler keinen spezifiziert? Genau. Also nehmen wir
mal an, das würde jetzt hier nicht stehen.
Welcher Konstruktor wird dann aufgerufen? Ja. Genau. Das heißt,
die einfachste Variante ist hier einfach wirklich, sowas hinzuschreiben.
Muss, ihr könnt es aber natürlich auch auf Deutsch hinschreiben,
der Superkonstruktor oder der Defaultkonstruktor der Oberklasse oder was auch immer.
Gut. Was haben wir noch? Welchen Vorteil bieten abstrakte Klassen gegenüber Interfaces,
welchen Vorteil bieten Interfaces gegenüber abstrakten Klassen in Java?
Okay, es ist also nicht so,
dass ein Konzept mächtiger ist als das andere,
sondern das eine kann ein bisschen mehr in einer gewissen Hinsicht und das andere dann eben andersrum, ja.
Also was können abstrakte Klassen, was Interfaces nicht können,
ja? Es geht in die richtige Richtung aus,
es ist mir noch nicht prägnant genug, ja?
Implementationswerbung, genau, ne? Ich kann also tatsächlich Implementationen erben
. Das geht bei Interfaces zumindest bis Java 8 nicht.
Ja, ich kann also Methoden erben und Zustandsfelder erben
Ach so, hier. Aber du könntest eine Schnittstelle ja
theoretisch auch modulieren mit einer abstrakten Klasse, in der du einfach alles abstrakt machst.
Also das ist nicht der entscheidende Vorteil. Können Interface ist irgendwas,
was definitiv nicht geht mit abstrakten Klassen im Java?
Mehrfach Werbung, genau. Ich kann ja von beliebig vielen Interfaces,
ja, also ich kann schreiben, Implements A, Komma B,
Komma 10, Komma D, das geht eben bei Klassen nicht.
Ich kann immer nur von einer Klasse erben. Ja,
und natürlich ist es auch völlig in Ordnung,
wenn ihr hier einen ganzen Satz hinschreibt,
aus dem das irgendwie hervorgeht
In der Musterlösung stehen tatsächlich nur diese beiden Dinge,
aber wenn irgendwie daraus hervorgeht, dass ihr das meint,
dann kriegt ihr da meistens auch die volle Punktzahl für.
Das geht tatsächlich meistens ganz gut. Also versuchst du jetzt zu argumentieren,
dass es mehrfach Werbung im gewissen Sinne auch bei abstrakten Klassen gibt?
Du meinst eine abstrakte Klasse kann mehrere Interfaces implementieren?
Mir ist nicht klar,
ob du das meinst oder ob du
was anderes meinst
Also es ist definitiv möglich. Gut, vielleicht,
das ist ja interessant, könnte man das so verstehen.
Zum Glück hat es letztes Jahr niemand so verstanden.
Mal gucken. Aber wenn du das nachvollziehbar machst,
was du noch meinst, kriegst du da wahrscheinlich auch Punkte für.
Gut. Aber mir ist wichtig, dass ihr diesen Unterschied versteht.
In einer abstrakten Klasse kann Implementationen drinstehen. Das geht in Interfaces
nicht. Okay. So, was haben wir noch?
Oh Gott, diese Aufgabe, ja.
Da habe ich auch so viel auf den Deckel bekommen,
dass ich die rausgenommen habe.
Also vielleicht weiß es ja trotzdem zufällig jemand.
Richtig, ganz oben steht es. Horbe,
es gab diese Folie mehrfach in dieser Veranstaltung, einmal bei Vererbung,
einmal bei Acceptions, ja, weiß das jemand, ja?
Richtig. Weiß das jemand? Das ist eigentlich
das Einfachste, oder? Acception, genau. So,
dann haben wir hier, weiß das jemand?
Genau. So, gut. Ach, ihr seid ja
alle super fit.
Was haben wir noch
Genau, also nehmen wir mal an, ich kriege hier keinen Internetzugriff.
Habe ich dann einen Fehler in meinem Java-Programm oder liegt das
an was anderem? Wie nennen wir das? Ja,
das nennen wir Umgebungsfehler, genau. Umgebungsfehler. So,
und wenn ich jetzt irgendwie in meinem Java-Programm,
ich will eigentlich A durch B teilen,
teile aber B durch A, dann ist es ja irgendwie meine Schuld.
Entwicklungsfehler, genau. Ach so, das Fehler steht da
schon. Habe ich das hier genauso gemacht, ja,
ne?
Ich Horst
Entwicklungsfehler klingt irgendwie so blöd, als wenn irgendwas
nicht sich richtig entwickelt hat im Laufe eures Lebens.
Das hat damit also nichts zu tun. Okay. Welches Swing-Layout verwendet man,
wenn man einen dynamisch anpassbaren Bereich in der Mitte benötigt?
Und vier statische, vier Bereiche statischer Größe drumherum.
Das heißt also, wenn ihr das Fenster groß und klein zieht,
dann bleiben die am Rand, so wie sie sind.
Und das in der Mitte wird dann größer und kleiner.
Wisst ihr, wie das Ding heißt?
Ja. Porno-Layout, genau. Mit dem Border,
out North, South West East und Center.
Okay. Und dann gibt es noch so ein Swing-Layout,
wo ich sagen kann, ich brauche irgendwie acht mal acht Kästchenbereiche,
die alle irgendwie gleich groß sind.
Und wenn ich, ja
Genau, das ist Grid Layout. Sehr schön.
Okay, was haben wir noch? Ah,
hier geht es aber so ein bisschen um Testen.
Ich habe ja auch extra Dinge, fett hervorgehoben. Also,
nehmen wir mal an, ihr habt diese Methode geschrieben.
Ich habe eine Methode geschrieben, wo ich ein Int reinstecke.
Und es kommt ein String raus. Und die Methode heißt
Int to String. Und falls euch noch nicht klar ist,
was der Sinn dieser Methode ist, steht dahinter,
wandelt X, also diese Zahl, in einen Dezimine-String um.
Also wenn ihr die 223 reinschmeißt,
dann kommt der String 100, also der String 1,
2,
3 raus
Okay, und jetzt steht hier auch noch ein Fett hervorgehoben,
Test, Äquivalenz, Klasse,
negativer Zahlen und falls euch nicht klar ist, was das bedeutet,
alle X, die kleiner sind als Null und Äquivalenzklasse,
nicht negativer Zahlen, wenn euch das auch nicht klar ist,
X größer, gleich Null.
Tja, wenn ich jetzt irgendwie versuchen würde, alle negativen Zahlen zu testen,
dann würden ja wahrscheinlich diese beiden Zahlen Code nicht dafür ausreichen.
Ich müsste dann ja wahrscheinlich zwei Milliarden Tests schreiben,
nur für die negativen Zahlen und dann nochmal zwei Milliarden Tests nur für die positiven Zahlen.
Wir haben euch auch nochmal beigebracht,
ich glaube sogar schon in SE1,
dass wir sagen, Wenn ihr so einen Zahlenbereich habt,
der irgendwo hier anfängt und da aufhört,
dann lohnt es sich am meisten, die Grenzfälle zu testen.
Also nach dem Motto, was ist denn die kleinste
negative Zahl und was ist die größte negative Zahl?
Da wird es wahrscheinlich am ehesten Probleme geben,
wenn der Algorithmus irgendwie fehlerhaft ist.
Wir können aber mit der größten negativen Zahl fahren.
Was ist die größte negative Zahl? Das ist die betragsmäßig
größte, richtig. Also das steht ja hier. 2,
1, 4, 7, 4, 8,
3, 6 Yards. Das müsste also auch nicht aus,
da habe ich mich irgendwie vertippt.
Das müsste also nicht, hä? Achso, dieser
blöde Insert-Modus
Habe ich das jetzt richtig gemacht? 2, 1,
4, 7. Ja, okay. Also ich stecke diesen
Int rein. Und was erwarte ich dann, welcher String
dabei rauskommt? Intager-Minvelja? Das ist ja kein String.
Also Intager-MinValue könntest du hier reinschreiben, wenn du willst.
Irgendjemand anders eine Idee? Einfach Gänsefüßen dazwischen schreiben. Also ups,
minus 2, 1, 4, 7, 4,
8, 3, 6,
4,
Zack. Und was ist der zweite sinnvolle Testfall dann?
Minus eins, weil das ist die größte negative Zahl.
Und ich garantiere euch, wenn ihr mal so
eine Methode baut, dann wird das hier wahrscheinlich schiefgehen.
Aus diesen blöden Hoch- und Wieselergründen und was weiß ich.
Also die kleinste negative Zahl, da kann man so viel verkehrt machen.
Dadurch, dass man sie nicht positiv machen kann.
Okay. Und ähnliche unten... Gebe ich euch als Hausaufgabe
, glaube ich. Das ist dann einfach null bis zwei
Milliarden und dann am Ende hier eine sieben.
Ist euch das klar? Offensiv was? Ich schreibe es
jetzt einfach einmal hin aus null
Wird also null. Und dann, jetzt muss ich
vorsichtig sein, dass ich hier keinen Fehler mache.
2, 1, 4, 7, 4,
8, 3, 6, 4, 7.
Das ist ja die größte Indiza. Und dann hier dasselbe 2,
1, 4, 7, 4. 4,
6. Habe ich hier irgendwas falsch gemacht?
Das muss eine 3 sein, oder? Warte mal kurz. 2,
1, 4, 7, 4, 8,
3, 6, 4, 7. Ist das jetzt richtig?
Nee, sieben, das ist ja,
die acht gibt es ja im positiven Bereich nicht
Sieht gut aus. Jetzt muss ich das hier auch noch machen.
2, 1, 4, 7, 4,
8, 3, 6, 4, 7. Meine Güte.
Wisst ihr, was ich gerade überlege?
Wenn ihr irgendwie mal in einer Notsituation seid,
ihr erinnert euch nicht mehr an diese Zahl.
Da gibt es irgendwie einen total coolen Trick.
Kann man... Nee, schade, ich finde das jetzt
so schnell nicht.
Wie man sich
diese Zahl merken kann
Ich gucke mal ganz kurz, ob es das jetzt ansonsten,
ansonsten schicke ich euch das nochmal rum. Also hier steht,
ihr solltet die Zahl tätowieren, das würde ich nicht empfehlen.
Max Value, hier in Binär ist es einfacher,
das stimmt. Telefonnummer, irgendwo war, nee,
irgendwo war ein total cooler Spruch, ah hier,
Drunk a.k.a. horny. Lest euch das mal durch.
Wenn man einmal verstanden hat, wie das funktioniert,
dann kann man die Zahlen nie wieder vergessen.
Okay. Gut, wir haben noch fünf Minuten,
sind wir durch mit der Probeklosso
Nee, da kommt noch was.
Die Klasse, Java Langstring ist als Final jetzt gekennzeichnet.
Welche Auswirkungen hat das? Weiß das jemand? Eine Klasse Final
? Richtig. Man kann keine Unterklassen bilden. Ja,
man kann nicht davon erben, wie auch immer man das sagen will.
Gut. 18 haben wir mal wieder so einen kleinen Schnipsel,
wo ich Code vereinfachen will.
Schauen wir mal. Also, wenn diese Bedingungen nicht gilt,
hier ist ja so ein Ausrufezeichen, dann will ich Falls zurückgeben.
Ansonsten will ich
diese Bedingung zurückgeben
Ist das nicht das Gleiche,
was wir letztes Mal schon hatten? Also nur sozusagen,
wenn das wahr ist und wenn das wahr ist,
will ich wahr zurückgeben, in allen anderen Fällen will ich faul zurückgeben.
Wie schreibt man das einfacher in Java? Genau. Also
ich nehme diese erste Bedingung, kleb dich immer rein,
zack, und dann diese zweite Bedingung.
Zack, zack, zack, zack.
Es gibt übrigens keinen Punkt abzugeben, der Klausur,
wenn ihr Semikola vergesst
Okay. Ach ja, solche Aufgaben kann es durchaus auch
geben. Wofür steht CRC? Heißt das jemand?
Klaas, Response, Sibility, Corlalaboration. Sehr schön.
Was haben wir noch? Welcher URM meldet dir ganz schön
Zeit die Kommunikation von Objekten zur Laufzeit? Ach,
das ist auch immer sorg für viel Unterhaltung bei der Korrektur.
Ja? Objektdiagramm zeigt einen Schnappschuss von Objekten zur Laufzeit,
aber du siehst nicht, du siehst keine zeitliche Abfolge.
Ja? Zequenzdiagramm, genau
Sehr schön. Was haben wir noch? Ah,
das ist auch schon die letzte Aufgabe.
Das können wir uns auch nochmal in Ruhe angucken.
Warum ist der folgende Java-Quelltext nicht übersetzbar?
Okay, ich habe also eine Klasse. Ich sage,
ich überschreibe hier eine Methode aus der Oberklasse.
So heißt sie und das gibt sie zurück.
Die sieht irgendjemand ein Problem? Richtig. Natürlich eine sehr
, weiß ich nicht. Also da sind mir wahrscheinlich letztens
einfach die Aufgabenideen ausgegangen. Also ja,
die kamen nicht so gut an die Aufgabe,
sagen wir es mal so
Okay, ich werde gleich noch in Ruhe ein,
zwei Dinge hier ausfüllen, die wir jetzt nicht ausgefüllt haben,
dann lade ich das ins Kommensee hoch und dann will ich,
glaube ich, noch als Abschluss eine Frage.
Hat jemand gesagt, der hat eine Frage? Stimmt,
das wäre auch akzeptabel, aber das wäre wahrscheinlich nicht das,
was der Programmierer will. Okay, jetzt sind wir hier
wieder bei der Rente, das wollte ich eigentlich nicht.
Genau. Also ich hatte ja heute angefangen mit dieser E-Mail,
die im Mai 2014 gesendet wurde und als Autor wollte ich
euch mal diese Mail schicken mit einem tränenden Auge,
verabschieden wir uns von euch.
Ich wünsche euch alles Gute im weiteren Studium und
vielleicht begegnen wir uns sicher durch Zufall irgendwo mal wieder.
Vielen Dank