Gut, ich möchte Sie begrüßen zu unserer Übung zum ersten Übungsblatt.
Zuallererst möchte ich damit beginnen mit dem zweiten Übungsblatt.
Da gab es eine kleine Änderung an der Aufgabe, oder es hat sich ein
Tippfehler eingeschlichen in die Aufgabe, die dann für einige Leute
zumindest, die einige Leute sich schon runtergeladen hatten.
In der Aufgabe 1.1 heißt es da, bei Zahlen, die größer als 0 sind,
darf an der ersten Stelle kein 0 stehen.
Das macht natürlich wenig Sinn.
Es müsste eigentlich heißen, bei Zahlen größer oder gleich 1.
Das korrekte Übungsblatt ist jetzt im IPO verfügbar.
Es war auch schon seit zwei Tagen, seit gestern, im IPO verfügbar.
Dementsprechend bitte benutzen Sie dieses Übungsblatt oder diese
Aufgabenstellung.
Es macht die Sache auch etwas einfacher für Sie.
In dem Zusammenhang, falls sich ähnliche Fehler auf unsere
Übungsblätter einschleichen, wir hoffen das natürlich nicht, dann
werden solche Sachen natürlich immer in der Übung angesprochen.
Sie werden auch im IPO veröffentlicht und zwar immer unter aktuelles.
Und zwar dann, wenn es sich um wirklich größere Fehler und jetzt nicht
gerade um einen Tippfehler handelt.
Also einen Tippfehler würde ich mir erlauben zu korrigieren, ohne Sie
alle zu informieren.
Eine zweite Sache betrifft, eigentlich auch noch mal, das Übungsblatt.
Da ging es um eine Formulierung, das habe ich jetzt gerade erst
erfahren, die wohl doch nicht ganz so eindeutig war, wie ich es
gehofft hatte.
Und zwar in der Aufgabe 4, glaube ich, 4.
Aufgabe, wo es um die variablen Deklarationen und Zuweisungen geht.
Da steht ein Satz, verwenden Sie für diese Aufgabe die Variablen
Deklarationen und Zuweisungen, Wertezuweisungen aus den
vorangegangenen beiden Aufgaben.
Gemeint ist damit, dass vor jedem, jeder Zuweisung, die hier
ausgeführt wurde, die Variablen so deklariert und so die Werte
vorbelegt werden sollen, wie es in der ersten von diesen drei Aufgaben
der Fall war.
Das ist nur so, dass praktisch bei jedem können Sie davon ausgehen,
Sie starten von null.
Hat den Vorteil, wenn Sie beim ersten Fehler machen, kriegen Sie keine
Folgefehler rein.
Ein weiterer Punkt.
Ich bin gebeten worden, noch mal darauf hinzuweisen, auf die Führung
im Artes Poolraum oder die Einführung in den Artes Poolraum.
Der Herr Scheibenberger war da ja schon vor zwei Wochen mal hier und
hat die Sache soweit angekündigt.
Diese Einführung findet am 16.11.
um 16 Uhr im Artes Poolraum statt.
Und wer eben Interesse hat, wissen möchte, wie er praktisch die
Ressourcen vom Artes Pool nutzen kann, ist herzlich eingeladen, dort
hinzugehen.
Wie gesagt, Sie können gegebenenfalls auch dort arbeiten, falls Sie
keinen Platz finden in den Rechenzentrums Poolräumen.
Wir sind ja doch relativ viele Leute.
Ich muss gestehen, ich weiß nicht, wie stark die Poolräume immer
belegt sind, aber es wird sicherlich da auch mal ab und zu mal
Engpässe geben.
Gut, soviel zum zweiten Übungsblatt.
Kommen wir zum ersten Übungsblatt zurück.
Die erste Aufgabe beschäftigte sich da mit Systemen,
Informatiksystemen, mit Klassifikationen dieser Systeme und
Eigenschaften.
Zunächst mal war gefordert, den Begriff des Systems zu definieren und
zu erklären, warum dieser Begriff rekursiv ist.
Gut, System, was ist ein System?
Ein System ist eine Kollektion von Gegenständen, die irgendwie
miteinander zusammenhängt.
Dieser Zusammenhang gehört auch noch zum System dazu.
Gut, und die Gegenstände selbst sind wiederum Systemkomponenten,
können wiederum Systeme sein.
Und daher kommt eben auch der Punkt, dass ein System rekursiv ist.
Ein System kann eben wiederum aus Teilsystemen zusammengesetzt sein.
Die Eigenschaften eines Informatiksystems.
Welche Eigenschaften haben wir?
Wir haben die Eigenschaften bezüglich Systemgrenze.
Da haben wir eben abgeschlossen oder offen.
Wurde ja ausführlich in der Vorlesung besprochen.
Statisch, dynamisch, also ob eine zeitliche Veränderung innerhalb des
Systems vorkommen kann.
Deterministisch, indeterministisch.
Das ist ganz wichtig.
Man sollte denken, dass solche indeterministischen Systeme nicht so
interessant sind.
Klar, wenn wir ein konkretes Ergebnis haben wollen, wollen wir
natürlich wissen, dass es auch rauskommt.
Von daher ist es beim Deterministischen ja nicht unbedingt der Fall.
Aber es gibt eben Fälle, in denen indeterministische Algorithmen
wesentlich effizienter arbeiten als deterministische.
Und dementsprechend müssen wir auch solche Systeme berücksichtigen.
Und zum Schluss haben wir noch, natürlich oder künstlich, war, denke
ich, hoffe ich auch nicht weiter schwer.
Kommen wir zum zweiten Teil der Aufgabe, zur Teilaufgabe C und D.
Benennen Sie die Typen von Informatiksystemen.
Das habe ich schon getan hier.
Wir haben die Funktionsberechnung, Prozessüberwachung, eingebettete
Systeme und adaptive Systeme.
Und diese sollten vorgestellt werden und man soll eben ein Beispiel
aus dem internetbasierten Wissenstransfer nehmen.
Das wurde im Forum auch schon gerügt, dass es ja jetzt gar nicht so
eindeutig ist.
Nun gut, es ist vielleicht so, dass in der Vorlesung nicht direkt die
Begriffe genannt wurden.
Aber ich denke mal, den internetbasierten Wissenstransfer kennen Sie
bis zum gewissen Punkt.
Sie sitzen nämlich zum Beispiel drin in einem solchen Szenario und
können sich, denke ich, da auch durchaus Systeme überlegen, die eben
genau in diese Klassen fallen.
Funktionsberechnung.
Was ist Funktionsberechnung?
Klar, es dient dazu, aus gewissen Eingaben gewisse Ausgaben zu
erzeugen.
Eine Funktionsberechnung, ganz einfache wäre zum Beispiel die
Berechnung der Teilnahme der Note
aus der Punktezahl.
Eine relativ einfache Variante.
Ganz wichtig bei dieser Aufgabe natürlich, dadurch, dass sie relativ
offen gestellt ist, gibt es sehr, sehr viele korrekte Lösungen.
Ich kann nicht alle hier aufzeigen.
Ich kann hier immer nur ein Beispiel zeigen.
Also das wäre zum Beispiel eine Möglichkeit gewesen, eine Funktion,
die wir im Rahmen natürlich des Übungsbetriebs verwenden.
Prozessüberwachung.
Könnte jemand ein Beispiel nennen für eine Prozessüberwachung im
Bereich des internetbasierten Wissenstransfers?
Oder ganz konkret im Bereich der Informatik 1 Vorlesung?
Vorhin bin ich darauf hingewiesen worden, dass das IPO ausgefallen
ist.
Es war nach zwei Minuten wieder da.
Aber zum Beispiel ein System,
also ein System, was überwacht, dass das IPO permanent läuft.
Sie wollen alle, dass das IPO läuft.
Wir wollen dafür sorgen, dass es permanent läuft.
Deshalb haben wir ein System aufgesetzt, was mir eine Mail schreibt,
wenn das IPO nicht läuft.
Gut, ich muss natürlich im Büro sein.
In dem Fall habe ich halt Pech gehabt.
Aber grundsätzlich funktioniert dieses System genau in der Richtung,
dass es eben überwacht, ob das System läuft und mir Informationen
gibt, bevor sich irgendjemand von Ihnen beschwert, hoffentlich.
Eingebettete Systeme.
Ein eingebettetes System hat vor allen Dingen die Eigenschaft, dass es
eben noch in Beziehung ist mit den umgebenden Nicht-IT-Systemteilen.
Können Sie sich vorstellen, was aus dem Bereich der Vorlesung, was ein
solches eingebettetes System ist?
Ganz konkret hier im Hörsaal.
Da drüben ist eine Frage.
Also zum Beispiel die Mikrofonsteuerung, da wo ich gerade reinspreche,
da ist sicher ein eingebettetes System drin.
Könnte man sagen, ja.
Oder Beamer oder Rollladen.
Ich hätte jetzt dieses Ding hier vorne genannt, dass es im Prinzip
geht in dieselbe Richtung.
Mit diesem Ding hier kann ich die Rollladen steuern, ich kann die
Beleuchtung steuern, ich kann alles Mögliche steuern.
Das ist ein eingebettetes System, was eben praktisch hier die gesamte
Raumtechnik mit in Betrieb hält.
Da war noch eine Anmerkung.
Könnte man auch als solche bezeichnen, wobei die müssen natürlich
einen Bezug haben zu der Umgebung.
Es ist immer ein bisschen der Punkt, es muss ja eine Interaktion
praktisch mit den umgebenden nicht-technischen Systemen vorhanden
sein.
Das heißt, das Handy müsste vielleicht noch eine Zusatzfunktion haben,
aber heutzutage gibt es sicherlich Handys, die man als eingebettete
Systeme bezeichnen könnte in dem Zusammenhang.
Also hier hat man gesagt zum Beispiel, was Raumtechnik.
Adaptive Systeme, wie in der Vorlesung gesagt, ist eigentlich eine
Spezialform von eingebetteten Systemen.
Allerdings, die haben eine zusätzliche Eigenschaft.
Sie passen sich nämlich dem Benutzer an, oder sie passen sich der
Umgebung an.
Häufig dem Benutzer.
Also ein Beispiel wäre zum Beispiel...
Man könnte sagen, eine Art Ipo.
Neues Ipo sozusagen, sagen wir Ipo V2.
Die sich auf den Lerner einstellt.
Die sich an den Lerner anpasst.
Was eben zum Beispiel, wenn der Lernende sich gut auskennt, vielleicht
dann nur die wichtigsten Materialien liefert, wenn er sich eben nicht
so gut auskennt.
Andere, oder dass er eben eine gewisse Medienpräferenz hat und eben
nur gewisse Medien angezeigt werden oder ähnliches.
Andere Möglichkeit wäre zum Beispiel auch ein Spracherkenner.
Der sich eben auf die einzelne Person dann anpasst, um bessere
Ergebnisse liefern zu können.
Wie gesagt, an dieser Aufgabe gab es natürlich sehr, sehr viele
korrekte Lösungen.
Kann ich alle aufzeigen.
Kommen wir zur nächsten Aufgabe, die sich mit der Fragestellung
zunächst mal mit Sprachen beschäftigt.
Simulationen und dann noch ein bisschen die Sprachen vertieft.
Fangen wir an.
Nennen Sie die Modellierungssprache und Programmiersprache, die in der
Veranstaltung eingeführt werden und erklären Sie, wofür die Sprachen
genutzt werden.
Es gibt natürlich auch viele andere.
Wir verwenden hier die UML und Java.
UML als Modellierungssprache, grafische Modellierungssprache.
Dazu kommen ja in der Aufgabe noch weitere Punkte und Java dann als
objektorientierte Programmiersprache.
Da gibt es natürlich auch zig andere, aber an Java kann man sehr schön
viele Dinge, die wir in der Vorlesung brauchen, zeigen.
Was ist das Ziel einer Simulation?
Was ist der Unterschied sozusagen zum Prototypen?
Und dann eben auch noch die Frage, ob eine Simulation überprüfen kann,
ob eine Anfrage richtig beantwortet wurde.
Eine Simulation dient dazu, ein gewisses quantitatives Verhalten
vorherzusagen.
Das heißt, basierend auf einem Modell wird eine solche Simulation
durchgeführt und es wird ein sozusagen Erwartungswert berechnet, der
allerdings voraussetzt, dass das Modell korrekt ist.
Und das ist das Problem an der Simulation.
Das heißt, wenn mein Modell nicht korrekt ist, funktioniert, also tut
es unter Umständen nicht das oder stimmen die Messwerte nicht mit dem
überein, was wir eigentlich damit aussagen wollten.
Beim Prototypen ist es eher eben dieser Zusammenhang zwischen den
Systemkomponenten und der Systemumgebung.
Also funktioniert das so, wie ich mir es vorgestellt habe.
Deshalb baue ich einen Prototypen und anhand des Prototypen kann man
das dann feststellen.
Dementsprechend kann eben eine Simulation nicht überprüfen, ob eine
Anfrage richtig bearbeitet wurde, weil das hängt davon ab, ob das
Modell korrekt ist.
Wenn das Modell der Simulation korrekt ist, dann könnte man das Ganze
auch über eine Simulation realisieren.
Aber das war in ähnlicher Form ja auch in der Vorlesung genannt.
Von daher denke ich, dass es nicht so kritisch war.
Hier kommen wir zum ersten UML-Modell.
Ein Anwendungsfalldiagramm.
UML ist ja momentan, kann man sagen, die Sprache, was
Softwareentwicklung angeht, wenn wir Systeme modellieren wollen.
Und der Start oder der Ausgangspunkt eines solchen Modells ist, dass
man sich im Klaren wird, was mein System, was ich entwickeln soll,
nachher leisten soll.
Und dazu verwenden wir die Anwendungsfalldiagramme.
In dieser Aufgabe ist das Ziel ja recht einfach und soll einen
weiteren Akteur definieren, der Benutzer mit eingeschränkten
Administratorrechten heißt und der alle Tätigkeiten ausführen darf,
die den Inhalt betreffen.
Okay, das mache ich jetzt mal.
Ein Akteur ist immer ein solcher Stickyman.
Dem geben wir einen Namen.
Gut, ich hoffe, man kann es lesen.
Benutzer mit eingeschränkten Administrationsrechten.
Und dieser Benutzer soll einige Funktionen des Systems nutzen können,
nicht alle.
Also es soll nicht der Administrator sein, der ja alles durfte,
sondern nur alle Sachen, die irgendwie mit dem Inhalt zu tun haben.
Und wenn ich das Ganze jetzt etwas schöner angeordnet hätte, dann
würden das jetzt nicht so krumme Linien werden.
Ist nicht weiter schwierig, wichtig beim System oder generell ist es
ein sehr, sehr wichtiger Schritt, wenn wir die Softwareentwicklung
betreiben oder wenn wir eine Software entwickeln wollen für einen
Kunden, dass wir uns hier über diese Grenze im Klaren sind.
Das heißt, dass wir wissen, was der Kunde von uns erwartet, was unser
System machen soll und dass der Kunde sich darüber auch im Klaren ist,
dass wir nicht mehr machen oder nicht mehr machen werden, zumindest
für den Preis, den wir mit ihm vereinbart haben.
Wir können natürlich die Sachen immer noch anpassen, das ist ganz
klar.
Aber das ist ja auch immer das Problem, wenn IT-Projekte scheitern,
dann ist es sehr, sehr häufig, dass es an der Stelle scheitert.
Dass nämlich der Kunde gedacht hat, eigentlich müsste das System was
mehr können, was es dann tatsächlich doch nicht kann.
Kommen wir zum Aktivitätsdiagramm.
Aktivitätsdiagramm war hier jetzt nicht gefordert, das waren zunächst
mal nur die Aktivitäten.
Ich werde das Ganze mal als Aktivitätsdiagramm darstellen.
Einfach, um hier auch noch ein bisschen was dazu zu machen, also das
ist der Start.
Zumindest so ähnlich sieht das aus.
Wie kommen wir dazu, das PDF zum Kursbuch über das Info1-Portal
runterzuladen?
Also was sind die einzelnen Schritte?
Zunächst mal, ganz klar, müssen wir mal die IPO-Seite öffnen.
Das gilt jetzt für meinen Rechner, ich habe einen Link auf dem
Desktop, da brauche ich bloß draufklicken.
Das heißt, es ist tatsächlich bloß eine Aktivität.
Sonst könnte man auch sagen, Browser vorher öffnen.
Als nächste Aktivität müssen wir uns einloggen, sonst kommen wir.
Na gut, müssen wir eigentlich gar nicht unbedingt.
Aber es wäre eine Möglichkeit.
Das ist korrekt, also man muss sich nicht einloggen, um das Kursbuch
runterzuladen.
Das heißt, wir könnten hier auch durchaus den Weg direkt zur nächsten
Aktivität machen.
Der Punkt ist, das ist eine Änderung gegenüber im letzten Jahr
gewesen.
Im letzten Jahr musste man sich noch einloggen, um an das Kursbuch
ranzukommen.
Das heißt, aber man kann sich auch einloggen und findet es trotzdem.
Von daher ist der Weg, den ich hier vorstelle, auf jeden Fall korrekt.
Er ist allerdings, wie gesagt, auch in diesem Fall nicht der einzig
richtige.
Da ist, glaube ich, noch eine Frage.
Ich glaube, wir brauchen das Mikro.
Wenn man sich nicht einloggt, dann heißt aber der nächste Menüpunkt
anders.
Dann geht es da nicht weiter.
Der nächste Menüpunkt heißt anders, wenn man sich nicht einloggt.
Ja, ich müsste hier noch eine Verzweigung reinmachen.
Ich kann mich im Prinzip entscheiden, ob ich es mache.
Das heißt also jetzt, okay, ignorieren wir einfach diesen Zweig und
lassen es so.
Auf dem Weg ist es ja so richtig, bloß wie gesagt, es ist eben auch
möglich, diesen Schritt zu übergehen.
Man braucht diesen Schritt nicht unbedingt durchführen.
Dann müssen wir eben auf Materialsammlung gehen.
Das müssen wir auf jeden Fall.
Und müssen, wenn wir das angeklickt haben, auf der Seite konkret das
Dokument auswählen.
Zum Runterladen auswählen.
Um genau zu sein, heißt die Datei Dokument 1.pdf, aber gut.
Jetzt hängt es dann ein bisschen davon ab, was für einen Browser Sie
verwenden und wie Sie den eingerichtet haben.
Je nachdem öffnet er ja einen pdf automatisch oder aber er speichert
es gleich.
Er gibt gleich einen Speichern-Dialog.
Das heißt, wir machen uns hier eine Verzweigung rein.
Wo wir sagen, wenn er es automatisch öffnet.
Ja, auto open, wenn schon.
Dann kommen wir dorthin, dass wir das pdf angezeigt bekommen.
Das heißt, wir müssen dann auf das Disketten-Symbol klicken.
Alternativ, wenn es eben nicht automatisch geöffnet wird, naja gut,
dann ist die Sache sowieso schon erledigt.
Das heißt, wir können hier unseren Ende-Zustand machen.
Das heißt, sowas in der Richtung wäre ein Aktivitätsdiagramm, was das
darstellen würde.
Wie gesagt, es war hier jetzt auch nicht gefordert, es als
Aktivitätsdiagramm darzustellen.
Ich wollte es trotzdem mal machen, weil Aktivitätsdiagramme werden
später auch noch in der Vorlesung etwas wichtiger werden.
Und wahrscheinlich im Studium insgesamt sowieso.
Dann kommen wir zum Informatiker, seinem Umfeld und was er so alles
treibt.
Das ist, denke ich, eine recht interessante Sache, die viele Leute
nicht wissen, die Informatik studieren.
Viele Leute, die Informatik nicht studieren, schon dreimal, die eher
denken, wir kennen uns besonders gut mit Rechnern aus und das ist das
Einzige, was wir können.
Aber da ist ja doch noch ein bisschen was anderes dahinter.
Wie nennt man das berufliche Umfeld eines Informatikers?
Ja klar, IT.
IT-Branche.
Woher kommt der Name?
Ja, Information Technology ist auch nicht allzu wild.
Über welche Kompetenzen sollte ein Informatiker verfügen?
Nun gut, generell soll er sich natürlich mit seinen inhaltlichen
Themen gut auskennen.
Das ist sicherlich eine Grundlage, die wir auf jeden Fall brauchen.
Also er braucht fundierte fachliche Kenntnisse, aber das ist nicht das
Einzige.
Er muss auch insbesondere als Diplom-Informatiker besonders gute
Kompetenzen im Bereich der Kommunikationsfähigkeit haben.
Sie müssen voraussichtlich mit ihren Kunden sich unterhalten und denen
das Wissen entlocken, was sie brauchen, um ihre Aufgabe zu erfüllen.
Sie werden wahrscheinlich nicht alleine arbeiten, sondern eher im
Team.
Dementsprechend ist diese Kompetenz ganz besonders wichtig.
Sie werden wahrscheinlich größere Projekte leiten.
Als Diplom-Informatiker sind sie vermutlich zu teuer für kleine
Projekte.
Dementsprechend ist eben hier auch eine strategische
Handlungskompetenz erforderlich, damit sie eben solche
Leitungspositionen einnehmen können.
Daraus folgt dann auch gleich Personalverantwortung.
Oder in vielen Fällen zumindest, wo eben auch eine Führungskompetenz
für einen Diplom-Informatiker erforderlich ist.
Oder auch einen Studenten, der Informatik im Nebenfach hat.
Weil es sind ja jetzt nicht nur Diplom-Informatiker hier, vermute ich.
Die wichtigsten Berufsfelder der IT-Branche.
Softwareentwicklung, Systementwicklung, Dienstleistung und sonstiges
habe ich jetzt auch mal mit aufgeführt.
Das waren genau die, die in der Vorlesung auch genannt wurden.
Es gibt natürlich immer einiges, was man unter den ersten drei nicht
einordnen kann.
Softwareentwickler, Anwendungsentwickler etc.
Entwickler oder eben dann eben für Organisation von
Softwareentwicklungsprozessen zuständig.
Systementwicklung, wenn wir etwas weiter in der Schichtung runter
gehen.
Das heißt uns eher auf die untere Basis, also unter den Applikationen
liegende Grundlagen setzen.
Das sind Geschichten, Systemprogrammierung,
die im Endeffekt dann die Grundlage liefert.
Betriebssysteme zum Beispiel, um darauf aufsetzend dann die
Anwendungen bauen zu können.
Vielleicht auch Hardware, Spezialisten oder ähnliches.
Ein ganz wichtiger Bereich sind auch die Dienstleistungen.
Berater sind sicherlich da sehr weit vorne zu nennen.
Ein Beruf mit vermutlich recht gutem Einkommen und sehr viel Stress.
Je nachdem.
IT-Leister oder Hotline-Mitarbeiter, was auch immer.
Unter sonstiges haben wir sicherlich auch noch spezielle Fälle, wie
zum Beispiel Ausbilder.
Man könnte mich zum Beispiel momentan in diese Klasse einordnen oder
ähnliches.
In welchen Tätigkeitsfeldern werden Hochschulabsolventen in der IT
-Branche eingesetzt?
Da hat der Herr Abick auch einige Beispiele in der Vorlesung gebracht,
die hier jetzt aufgeführt sind.
Eben auch Beratung, Marketing, Vertrieb, ähnliche Geschichten.
Dann Betrieb von Infrastruktur, Netzwerktechnik, Netzbetrieb,
Forschung und Entwicklung, Anwendungsentwicklung, Kundenservice.
Ich denke, es ist relativ klar.
Ich vermute mal, oder andersrum gefragt, wer von Ihnen weiß, in
welchen Bereich er gehen möchte von diesen?
Andersrum gefragt, Gegenfrage, check.
Wer von Ihnen weiß es noch nicht?
Die anderen sind sich unsicher, na gut.
Nicht weiter schlimm.
Ich denke mal, Sie werden im Laufe des Studiums auch erfahren, in
welchen Bereichen Ihre Interessen und Schwerpunkte oder Kompetenzen
auch liegen.
Das heißt also, ich denke mal, Mitte des Studiums gegen Ende des
Studiums werden Sie dann eher Bescheid wissen.
Am Anfang müssen Sie ja auch noch nicht so viel entscheiden oder
können Sie noch nicht so viel entscheiden.
Erst dann im Hauptdiplom, wo Sie sich dann etwas in gewisse Richtungen
vertiefen, müssen Sie praktisch eine gewisse Entscheidung, was die
Kompetenzen angeht, treffen.
Und Sie können sich ja immer noch umentscheiden gegen Ende des
Studiums.
Wir haben hier auf diesem Übungsblatt auch eine Aufgabe zum Thema
Programmierung drauf gehabt.
Dabei ging es um das allseits beliebte Hello World Programm.
Diese Aufgabe mag vielleicht für den einen oder anderen etwas
langweilig gewesen sein, aber sie war sehr, sehr wichtig.
Aus dem Grund, dass viele Leute Schwierigkeiten haben, die Sache
erstmal in Betrieb zu nehmen, die Sache zum Laufen zu bekommen.
Und diese Leute sollten mit der Aufgabe insbesondere angesprochen
werden, wo man eben dann sieht, wie kompiliere ich ein Programm und
wie starte ich das.
Wenn jetzt alles gut geht, dann zeige ich Ihnen das auch gleich.
Also hier habe ich jetzt mal die Sache aufgezeichnet, damit mir nichts
schief geht dabei.
Zunächst mal habe ich in meinem Verzeichnis eben die Datei Hello World
Java liegen und die In- und Outklassen.
Das ist die Voraussetzung.
Dann kompiliere ich die Sache über den Befehl Java C, Hello World
Java.
Groß -Kleinschreibung ganz wichtig, muss man beachten bei der
Geschichte.
Und wenn man sich das jetzt anschaut, stellt man fest, dass, jetzt
muss ich kurz pausieren, dass sich bei der Kompilierung neue Dateien
ergeben haben.
Wir haben neben der Hello World Java jetzt eine Hello World Class.
Nebenbei haben wir auch neben der Out Java eine Out Class bekommen.
Hängt damit zusammen, dass wir die Ausgabe im Rahmen dieses Programms
verwenden und dementsprechend er dieses Programm im Prinzip oder die
Klasse Out auch mitkompiliert hat, so dass wir jetzt im Endeffekt
beide Klassen als ausführbaren Code zur Verfügung haben.
An der Stelle setze ich dann fort.
Ich hoffe, man kann es lesen.
Ich tape ein Java Hello World und mein System gibt aus.
Hello World Java.
Na gut.
Soweit dazu.
Ich denke mal, ich hoffe mal, es ist einigermaßen klar geworden.
Es war nicht allzu viel, was ich jetzt im Rahmen dieses kleinen Videos
vorgeführt habe.
Wer von Ihnen hat es noch nicht hinbekommen?
Okay.
Gehen Sie am besten in der Rechnerübung nochmal an Ihren Tutor ran und
versuchen, das zu klären.
Weil der Punkt ist der, wenn Sie das nicht hinkriegen, werden Sie bei
den nächsten Programmieraufgaben auch in Schwierigkeiten kommen.
Und es werden einige kommen.
Und wie gesagt, der Schein erfordert 50 Prozent der Praxispunkte und
Praxispunkte bedeutet im Wesentlichen Programmierung.
Das heißt, Sie müssen auf jeden Fall programmieren, um den Schein zu
erwerben.
Gut, das war die kleine Programmieraufgabe.
Jetzt kommen wir zur Aufgabe, die sich dann auch mit Java beschäftigt,
aber eher auf der theoretischen Ebene.
Zunächst mal den Weg von einem Quellprogramm zum Laufhängenprogramm
hat der Herr Habeck sehr schön in der Vorlesung vorgestellt.
Deshalb habe ich da auch gar nichts groß hinzuzufügen.
Wir kriegen das Programm, das wird von einem Übersetzer in ein
Maschinenprogramm überführt.
Und dann wird dieses Maschinenprogramm durch einen Bindernader in den
Rechner eingeladen, sodass er es tatsächlich auch ausführen kann.
Nicht weiter schwierig kommen wir zu etwas detaillierter auf Java
fokussierten Aspekten, die mit der Plattformunabhängigkeit
zusammenhängen.
Was versteht man darunter?
Das selbe Programm läuft auf unterschiedlichen Plattformen unter
verschiedenen Betriebssystemen.
Es ist auch im Forum dazu eine kleine Diskussion entstanden, ist Java
überhaupt plattformunabhängig?
Das ist eine gute Frage.
Ich würde mal so sagen, ich würde nicht unbedingt sagen jedes, sondern
vielleicht es gibt Programme, die auf allen Plattformen funktionieren.
Es gibt leider auch in Java gewisse Erweiterungen von den
verschiedenen Betriebssystemen, die dazu führen, dass nicht jedes Java
Programm auf jeder Plattform lauffähig ist.
Hängt auch damit zusammen mit den Bibliotheken, die in dem
Zusammenhang zur Verfügung stehen.
Insbesondere ist es jetzt bei uns konkret das Problem, dass die
Einausgabe etwas anders gehandhabt wird und deshalb wir eben auch In-
und Outklassen für verschiedene Betriebssysteme anbieten.
Anhand dessen sieht man ja schon, dass Java nicht hundertprozentig
plattformunabhängig ist, aber grundsätzlich funktioniert es.
Und das Ganze wird realisiert durch den Einsatz einer virtuellen
Maschine.
Sehen wir in der nächsten Aufgabe, was ist die Java Virtual Machine?
Die Java Virtual Machine simuliert im Prinzip einen Rechner im
Rechner.
Und dieser simulierte Rechner funktioniert eben auf allen
Rechnertypen, also auf allen Hostsystemen gleich, zumindest
theoretisch.
Und dieser Rechner bekommt Anweisungen in einem gewissen Format,
konkret im Bytecode-Format.
Und wandelt diesen Bytecode um in den tatsächlich vom Hostsystem
bereitgestellten Kommandos, die dann tatsächlich das Betriebssystem
auch verarbeiten kann.
Häufig wird diese Java Virtual Machine auch als Java Interpreter oder
Java Runtime Environment bezeichnet.
Die Phasen der Softwareentwicklung.
Auch eine sehr wichtige Sache, was man sich, wenn man jetzt selbst
schon ein bisschen programmiert hat, häufig nicht wenig Gedanken
darüber gemacht hat, wie man da eigentlich strukturiert vorgeht.
Das funktioniert bei kleinen Programmen meist recht gut und recht
schnell.
Wenn man aber große Programme hat, muss man das Ganze strukturiert
angehen.
Das hat man vor schon einigen Jahrzehnten sogar herausgefunden, dass
es eben mit dem einfachen Ansatz bei größeren Programmen nicht mehr
funktioniert.
Und da gibt es eben dann die Phasen der Softwareentwicklung, die wir
hier dargestellt haben.
Wir haben die Analyse.
Diese Einteilung ist nicht die einzigste, die es gibt.
Allerdings ist es die Grundlage, auf der faktisch alle Einteilungen,
die in der Richtung existieren, arbeiten.
Das heißt, nicht jeder Softwareentwicklungsprozess hat tatsächlich
vier Phasen, wie es hier dargestellt ist.
Aber diese grundlegenden Phasen gibt es eigentlich immer.
Wir haben zunächst mal einen Teil, in dem wir uns damit beschäftigen,
das Problem zu erfassen.
Versuchen, dieses Problem in eine gewisse Darstellung zu bringen, zu
formalisieren, sodass wir darauf basierend dann tatsächlich die Lösung
realisieren können.
Zur Lösungsrealisierung müssen wir uns erstmal Gedanken machen, wie
wir diese Lösung strukturieren.
Das heißt, wir müssen eine Architektur aufbauen und dann diese
Architektur implementieren.
Hierbei ist natürlich auch von großer Bedeutung, dass wir das Ganze
auch noch testen, ob das auch wirklich das tut, was wir erreichen
wollten.
Und am Schluss eine ganz wichtige Phase, die häufig vergessen wird,
die Inbetriebnahme und Wartung.
Das Ding muss ja auch noch laufen.
Und in der Zeit, da müssen ziemlich viele Ressourcen reingesteckt
werden, sei es für Bugfixing, sei es für Support bei den entstandenen
Programmen.
Wir haben hier in der Folie auch noch die dazugehörigen Ergebnisse,
die wir jeweils verwenden.
Man sieht auch hier wiederum die Verwendung von einem gewisserweise
UML -Konstrukten zur Modellierung dieses Ablaufes und die verwendeten
Sprachen.
Hier sehen wir eben auch, dass wir die natürliche Sprache auch mit
drin haben, und zwar auch auf verschiedensten Ebenen, weil nämlich
unsere formalen Sprachen zwar das genau beschreiben, allerdings unser
Kunde im Allgemeinen nicht so gerne in UML spricht, sondern lieber als
natürlichsprachig das Ganze formuliert.
Und dementsprechend müssen wir einen gewissen Transfer von den
natürlichen Sprachen in Richtung einer dann tatsächlich ausführbaren
Sprache, einer höheren Programmiersprache im Allgemeinen realisieren.
Und am Ende natürlich auch der Maschinensprache.
Das heißt, wir müssen hier diesen Transfer hinbekommen, und das ist
eigentlich auch eine der wesentlichen Punkte, die ein Informatiker
beherrschen muss.
Er muss nämlich genau diese Brücke schlagen für den Kunden.
Wir hatten auch in der Vorlesung verschiedene Ebenen der
Programmierung angesprochen.
Herr Abeck hatte das vorgeführt, dass es eben Programmierung im
Kleinen und Programmierung im Großen gibt.
Programmierung im Großen ist zunächst mal eine Analyse einer
üblicherweise etwas größeren Programmieraufgabe, deshalb auch der Name
im Großen, die Entwicklung eines Lösungsentwurfs.
Und eben bei dieser Geschichte ist der Bezugspunkt eben dieses
Gesamtsystem, das große Gesamtsystem.
Also das ist etwas, was wir auch im Rahmen der Softwareentwicklung
eines solchen Softwareentwicklungsprozesses, wie auf der
vorangegangenen Folie dargestellt, nutzen würden.
Bei der Programmierung im Kleinen versuchen wir dann die kleinen
Teile, die wir im Großen haben, zu realisieren.
Das heißt, wir haben ein kleines, hoffentlich klar definiertes und
überschaubares algorithmisches Problem, was wir eben umsetzen in
Rechnercode.
Das heißt, der Bezugspunkt in dem Zusammenhang ist nicht das
Gesamtsystem, sondern immer nur dieser kleine Teil des Systems, der
diese Funktionalität erbringt.
Der Zusammenhang in dem ist hier, dass eben genau der Lösungsentwurf
realisiert wird durch verschiedene Instanzen vom Programmieren im
Kleinen.
Das heißt, wo wir eben dieses Programmieren im Kleinen dann die
einzelnen Algorithmen, die Komponenten realisieren, um dann das Ganze
in eine große Architektur einbinden zu können.
Dann haben wir noch... kommen wir zu Sprachen.
Wir haben Sprachen auf verschiedensten Ebenen.
Das hat man auch vorhin im Softwareentwicklungsprozess schon gesehen.
Natürliche Sprache sicherlich als ein wesentlicher Punkt, aber als
Informatiker brauchen wir Sprachen, die etwas formaler sind.
Und da haben wir zum Beispiel im Rahmen der höheren
Programmiersprachen eine ganze Reihe von Sprachen, die man hier
aufführen könnte.
Das ist nicht nur Java, das ist sicherlich C-Sharp, C++, aber da gibt
es noch zahlreiche weitere Programmiersprachen, die man an dieser
Stelle nennen könnte, die auch alle korrekt wären natürlich jetzt im
Rahmen der Aufgabe.
Maschinennahe Sprachen, das sind so Sachen wie Java Bytecode,
Assembler, also alles, was etwas näher an die Maschine herangeht, das
sind Sprachen, die man im Allgemeinen nur sehr ungern programmiert,
weil es sehr aufwendig ist.
Datentransformationssprachen, da ist die XSLT als eine wesentliche
Sprache momentan, die eben dazu dient, XML-Dokumente zu transformieren
in verschiedenste andere Dokumente, zum Beispiel auch in XML nach HTML
zu transformieren, um das Ganze dann im Browser darstellen zu können.
Kommen wir zur Aufgabe, die sich mit eBNF beschäftigt.
Danach kommen noch ein paar Sachen zum nächsten Übungsblatt.
Die eBNF, da war eine Sache, wie beweise ich eigentlich, oder wie
weise ich nach, dass ein Wort ableitbar ist.
Und, ja gut, dann kommen wir noch zu den Syntaxdiagrammen.
Hier sind jetzt die Worte gegeben gewesen, die abgeleitet werden
sollten.
Diese Worte...
Ich picke mir jetzt mal einfach das abc raus.
Also ich möchte abc123 realisieren.
Das heißt, ich gehe davon aus, dass ich zunächst mal habe
Kennzeichner.
Der geht über zu Bezeichner.
Wir brauchen keinen Punkt in dem Zusammenhang.
Der geht dann über zu Buchstabe.
Hier wählen wir uns das in der Form, dass wir eben eine Reihe von
Buchstaben bekommen.
Gut, und jetzt geht mir der Platz aus.
Jetzt müsste ich einfach hier die Reihe von Buchstaben noch aufführen
und komme in dem Fall dann zu dem Punkt.
Na, Buchstabe und dahinter haben wir noch ein paar Ziffern.
Das war der Punkt.
Und kommen dann zum abc123.
Das war jetzt die Ableitung hierfür.
Hierfür funktioniert das Ganze ähnlich, es wird bloß etwas länger.
Etwas länger, ja.
Falls da jetzt die Frage kommt, ob man da einzelne Zwischenschritte
weglassen kann, die hat sich wahrscheinlich der ein oder andere
gestellt.
Sagen wir es mal so, sofern Ihr Tutor nachvollziehen kann, welchen Weg
Sie gegangen sind, können Sie das gerne machen.
Das Problem ist bloß, Sie wissen nicht unbedingt, ob Sie es tun.
Also im Zweifelsfall lieber noch eins mehr hinschreiben, auch in der
Klausur, weil Sie dann auf der sicheren Seite sind.
Hier haben wir jetzt noch einen weiteren Punkt, nämlich dieses andere
Wort, den Unterstrich abc123.
Dieses Wort ist nicht ableitbar, wie man, wenn man es sich genau
anschaut, recht schnell erkennt.
Das Problem ist bloß, wie weiß ich sowas nach.
Okay, wie weiß ich sowas nach?
Ich sage, mein Wort beginnt mit einem Unterstrich.
Oder andersrum, ich beginne zunächst mal mit der Annahme, ich kann das
Wort ableiten.
Unter dieser Annahme muss ich irgendwie erreichen, dass ich einen
Unterstrich bekomme.
Einen Unterstrich bekomme ich nur durch diese Regel.
Das heißt, ich gehe jetzt mal zurück.
Ich sage, ich habe hier Unterstrich.
Na, den Rest können wir uns in dem Fall schenken.
Wie komme ich da hin?
Durch Strich.
Und Punkt, Punkt, Punkt.
Na gut, ich schreibe es lieber hin, dann sind wir auf der sicheren
Seite.
So, und wie kriegen wir jetzt diesen Strich weiter?
Dazu müssen wir eine Regel finden und da stellen wir fest, wir finden
keine Regel.
Es gibt keine Regel, bei der ein Strich entsteht, der ganz am Anfang
steht.
Es gibt nur eine weitere Regel, bei der es überhaupt auftritt.
Und diese Regel beginnt mit einem Buchstaben.
Das heißt, da drüber, hier finden wir keine Regel, demnach lässt sich
das Wort nicht ableiten.
Also ist unsere Annahme falsch, wie wir ursprünglich gehabt haben,
dass wir es ableiten können und demnach lässt sich das Wort nicht
ableiten und wir haben damit den Beweis geführt.
Das Ganze hätte man natürlich auch umgangssprachlich formulieren
können.
Musste das nicht unbedingt irgendwie mathematisch machen in diesem
Zusammenhang, weil es nicht explizit gefordert war.
Ansonsten würde es in der Aufgabe stehen.
Kommen wir zu dem Syntaxdiagramm.
Wie sieht das Syntaxdiagramm aus?
Kennzeichner ist
zunächst mal Bezeichner.
Und damit kann es das schon gewesen sein.
Wenn es das nicht war, dann brauchen wir als nächstes einen Punkt.
Also wir können einen Punkt hier vorsehen.
Wir können genauso gut einen... ach ne Moment, es muss ja ein
Bezeichner direkt hinten dran kommen.
Das heißt, wir müssen hier noch einen Bezeichner mit reinhängen.
Das heißt, ich habe hier den Ausdruck, den eBNF-Ausdruck umgesetzt in
ein Syntaxdiagramm, in eine äquivalente Syntaxdiagramm.
Es ist nicht das Einzige, was genau diese eBNF-Syntax beschreibt.
Es gibt auch andere, es gibt auch äquivalente Syntaxdiagramme, die das
auch tun.
Da war auch eine Frage aufgetaucht.
Da ist sogar eine Frage.
Na gut.
Kann ich gerade vielleicht Mikro...
Ja, also meine Frage ist einfach nur, ob man von dem Punkt den Strich
nicht weiter nach hinten ziehen kann bis zum ersten Bezeichner wieder
hoch und dass man dann so anfängt.
Weil dann hat man ja auch wieder Punktbezeichner, wie es vorgegeben
ist.
Dass man praktisch hier... Moment...
...einen Alternativweg vorsieht, praktisch.
Wäre...
Moment, überlegen.
Wäre richtig, ja.
Es ist der Punkt.
Diese Art, wie ich es dargestellt habe, ist die Art, wie man auf
dieses Diagramm kommt, wenn man die Transformationsregeln verwendet,
die der Herr Abick in der Vorlesung verwendet hat.
Es ist nicht zwingend notwendig, diese zu verwenden.
Es hat allerdings mehrere Vorteile.
Erstens, Sie wissen, wo Sie ansetzen müssen.
Wenn Sie sowas machen, müssen Sie nämlich ansonsten erstmal
durchdenken, ob Sie wirklich nur den Weg, den Sie erreichen wollten,
damit erreichen.
Und zweitens hat es den Vorteil, mal ein bisschen in eine andere
Richtung gedacht, dass Ihr Tutor auch sehr wahrscheinlich dieses
Ergebnis erwartet.
Wenn Sie selbst was konstruieren, was vielleicht etwas kompakter sogar
ist oder auch größer, aber dann kann es sein, dass er eben länger
braucht oder dass Sie eben auch da Fehler machen in solchen
Diagrammen.
Und deshalb ist es sinnvoll, sich eben eher an diese vorgegebenen
Regeln zu halten.
Ich mache noch kurz den Bezeichner.
Wenn er mich lässt.
Hier geht es los mit einem Buchstaben.
Und kann damit bereits beenden.
Und danach können eben Buchstaben, Striche und Ziffern kommen.
Die werden eben auf diese Art
angebunden.
Vielleicht noch eine Frage, an was erinnert einen eigentlich die
ergebende Sprache, also das, was rauskommt.
Ja, es hat irgendwas mit einem Dateinamen zu tun.
Also eine spezielle Form, eine spezielle Ausprägung von Dateinamen, wo
wir eben auch solche Punkte mitten in den Namen haben und nur Zahlen
und Buchstaben.
Gut, zum Abschluss wollte ich noch ein, zwei Tipps zum nächsten
Übungsblatt geben.
Man kann die Sachen sogar auch als Tipps in Richtung der Klausur
sehen.
Zur Aufgabe mit eBNF, das galt auch schon für dieses Übungsblatt
eigentlich.
Beachten Sie, dass Sie das Ganze formal korrekt machen, dass Sie die
Regeln korrekt anwenden.
Fehler, die Sie da reinbauen, das ist immer sehr ärgerlich, wenn man
dafür Punkte abziehen muss, auch in der Klausur.
Zuweisungen, Ausdrücke und Fehlersuche.
Diese Aufgaben lassen sich recht schön mit dem Computer lösen.
Ich denke mal, da sind die meisten von Ihnen schon drauf gekommen.
Das Problem ist bloß, in der Klausur haben Sie keinen Computer zur
Verfügung.
Und eigentlich machen wir diese Sachen hier ja auch deshalb, damit wir
Sie auf die Klausur vorbereiten.
Das heißt, hier mein Tipp an Sie, machen Sie es zumindest auch von
Hand, damit Sie sicher gehen, dass Sie das Ganze auch von Hand lösen
können, wenn es in der Klausur etwas Ähnliches gefordert wäre.
Und zu den Programmieraufgaben, ganz wichtig, eine Regel, die für alle
unserer Programmieraufgaben gilt, keine Bibliotheksklassen verwenden,
die nicht in der Vorlesung oder Übung angesprochen wurden.
Und ja, die Ausnahme gilt dann schon für die In- und Outklassen, die
dürfen Sie natürlich verwenden.
Ansonsten gelten, dürfen Sie keine Klassen verwenden, außer es steht
explizit an der Aufgabe dran, dass Sie eine andere Klasse verwenden
dürfen, was aber bei den aktuellen Übungsblättern bisher noch nicht
der Fall war.
Ganz wichtig, wenn Sie da eben einfach auf irgendwelche Basisklassen
zurückgreifen, was man grundsätzlich von der Programmierung her
natürlich tun sollte, dann müssen Sie aber mit Punktabzug rechnen,
weil wir hier genau aufzeigen wollen, wie wir diese kleinen Probleme
praktisch lösen, diese algorithmischen Probleme lösen.
Und dazu müssen wir im Endeffekt solche Basismethoden realisieren.
Weiterer wichtiger Hinweis, der auch in der Klausur einigen Leuten
Schwierigkeiten gemacht hat, kommentieren Sie Ihre Programme.
Ohne Kommentare kriegen Sie auch Punktabzug.
Auf den Übungsblättern englische Kommentare.
Und beachten Sie die Programmierkonventionen, die im Rahmen der
Vorlesung eingeführt werden, sukzessive.
Dann, wenn etwas Neues eingeführt wird, wo Sie neue
Programmierkonventionen brauchen, werden diese im Rahmen der Vorlesung
vorgestellt werden.
Beachten Sie diese Konventionen, weil auch das kann zu Punktabzug
führen.
Das heißt also, wenn ein Programm funktioniert, ist das nicht die
einzigste Bedingung praktisch, um die Punkte zu bekommen, sondern es
gibt auch noch andere und es ist sehr ärgerlich, wenn alles korrekt
ist, aber man trotzdem bloß die Hälfte der Punkte kriegt.
Gilt, wie gesagt, auch für die Klausur.
Und damit möchte ich beenden.