Zum Inhalt springen

  • Beiträge
    72
  • Kommentare
    239
  • Aufrufe
    12.686

Modul: Grundlagen der Informatik 2


kurtchen

882 Aufrufe

Mein drittes Modul bei der W3L war "Grundlagen der Informatik 2". Dieses Modul ist eine Einführung in die objektorientierte Programmierung mit Java. Eigentlich wäre dieser Kurs erst für das zweite Semester vorgesehen gewesen, aber nachdem mir GdI1 so viel Spaß gemacht hatte, war ich neugierig, wie es weitergehen würde.

 

Inhalte des Moduls sind:

- Objekte, Klassen, Konstruktoren, Botschaften

- Attribute, Klassenattribute, Klassenoperationen

- Pakte

- Nutzen vorhandener Klassen (z.B. aus der Klassenbibliothek)

- Hüllklassen für einfache Typen, Autoboxing, Autounboxing

- Ausnahmebehandlung

 

Sehr schön finde ich, dass es ein eigenes Kapitel über Assoziationen gibt. Die werden als wichtiges Grundkonzept der objektorientierten Programmierung oft übersehen. Es geht um:

- Beziehungen zwischen Objekten und zwischen Klassen

- Rollen

- Assoziationsklassen, die allein existieren, um bestimmte Objekte zu verknüpfen

- Navigierbarkeit

- Containerklassen

- den Abschluss bildet eine Einführung in das Singleton-Muster als erstes Entwurfsmuster

 

Weiter geht  es mit Vererbung:

- Klonen vs. Kopieren

- Identität vs. Gleichheit

- Polymorphismus

 

Echte Mehrfachvererbung gibt es in Java nicht. Einen gewissen Ersatz bietet das Schnittstellenkonzept.

 

Um diese Konzepte zu vertiefen gab es eine sehr  schöne Einsendeaufgabe, bei der das Beladen einer Autofähre mit verschiedenen Fahrzeugtypen simuliert werden sollte. Die Fahrzeugtypen stehen untereinander in einer Vererbungsbeziehung. Außerdem braucht man eine Containerklasse, die Fahrzeuge verschiedener Typen aufnehmen kann. Diese Aufgabe war umfangreicher, hat aber auch besonders viel Spaß gemacht. In GdI2 arbeitet man noch immer mit der relativ einfach BlueJ-Umgebung. (Wird jedenfalls von der W3L so empfohlen. Kann man natürlich auch anders machen.) Hier ist sehr schön, dass Klassenbeziehungen in der IDE graphisch dargestellt werden, was das Verständnis an diesem Punkt des Lernprozesses erleichtert. Mit zunehmender Komplexität wird die Darstellung allerdings unübersichtlich und es beginnt zu dämmern, dass man nicht für alle Ewigkeit mit BlueJ arbeiten wird.

 

Schön an dem Kurs ist auch, dass die UML eine große Rolle spielt. Alles, was man in Java lernt, wird parallel in UML gezeigt, so dass man nebenbei lernt, Klassen-, Objekt- und Sequenzdiagramme zu lesen und selbst anzufertigen. Die von der W3L empfohlenen Tools fand ich allerdings zu mächtig und ressourcenhungrig. Ich arbeite meist am Laptop, wo allein die Bildschirmgröße eine Rolle dafür spielt, wie viele Informationen ich gleichzeitig angezeigt bekommen möchte. Hier habe ich mir wesentlich einfachere Tools gesucht, z.B. UMLet, mit dem man  schnell einfache Klassendiagramme erstellen kann. Oder PlantUML, eine Skriptsprache zur Erstellung nicht nur von UML-Diagrammen. Um das Zeichnen von Diagrammen ging es immer wieder in den Einsendeaufgaben, nicht nur ums Programmieren.

 

Es folgten Kapitel zu Persistenz und Datenhaltung. Hier ging es um:

- sequentielles Lesen und Schreiben von Dateien

- einfache Indexverwaltung

- die Serialisierung von Objekten

Schnittstellen zu Datenbanken blieben noch ausgeklammert. Das kommt erst in GdI3.

 

Schließlich ging es um generische Programmierung. Hier verwendet man bei der Deklaration von Klassen und Methoden keine Typen sondern Platzhalter für Typen. So kann man eine Methode für alle möglichen Datentypen programmieren und behält trotzdem den Vorzug der Typsicherheit. Generische Programmierung kann man gut mit objektorientierter Programmierung kombinieren, aber jetzt wurde es schon ganz schön komplex.

 

Nun kamen zwei Kapitel über Qualitätssicherung. Zuerst über konstruktive Qualitätssicherung. Hier geht es um Prinzipien des guten Klassen- und Methodenentwurfs, so dass Code zum Beispiel gut zu warten ist oder später leichter refaktoriert werden kann. Dieses Kapitel fand ich sehr interessant. Letztlich sind es Strategien, Qualität zu sichern, indem man Software auf saubere Weise plant und konzipiert. Dann ging es um analytische Qualitätssicherung. Das bedeutet, Qualität im Nachhinein zu messen, z.B. indem man Software testet. Dieses Kapitel fand ich sehr trocken, weswegen ich es nur halbherzig bearbeitet habe. Hier wollte ich auf Lücke lernen.

 

Den Abschluss bildeten 2 kurze Kapitel über C++ und C# als Beispiele für andere objektorientierte Programmiersprachen als Java. Die waren allerdings viel zu kurz, um hinterher in diesen Sprachen programmieren zu können. Sie dienten eher dazu, ein gewisses Bewusstsein für die Besonderheiten von Java zu entwickeln. Am Beispiel von C++ kann man zum Beispiel lernen, was echte Mehrfachvererbung ist und wie diese sich von der Schnittstellenvererbung von Java unterscheidet. Außerdem begreift man, wieviel Arbeit einem Java mit der Garbage-Collection abnimmt. C# ist deswegen interessant, weil es für den .NET-Framework viele Sprachen gibt. Das Kapitel über C# ist auch nützlich, weil man in einem späteren Modul zur Webprogrammierung in ASP-NET reinschnuppert. Da ist es nützlich, C# einmal ausprobiert zu haben.

 

In der Klausur hatte ich zwar ein zufriedenstellendes Ergebnis, aber das vor allem dank der Bonuspunkte, die ich in diesem Modul einfahren konnte. Rückblickend hätte  ich mich ganz anders vorbereiten müssen. Nach den Erfahrungen mit GdI1 hatte ich erwartet, wieder viel Code schreiben zu müssen. Stattdessen spielte das Zeichnen von UML-Diagrammen eine große Rolle. Es wäre sinnvoll gewesen, solche Diagramme öfter von Hand zu zeichnen. Das hatte ich in der Bearbeitung des Moduls immer mit Software erledigt. Die kümmert sich darum, dass alles richtig proportioniert ist und auf die Seite passt. Beim Zeichnen von Hand muss man etwas vorausdenken. Das hätte man gut üben können und das hätte mir in der Klausur viel Zeit und damit verbundenen Stress erspart. Außerdem spielte die analytische Qualitätssicherung in der Klausur eine Rolle. Hier hatte ich nichts wiederholt, weil ich gehofft hatte, dieses für mich nicht so spannende Thema würde ausgespart bleiben. Auch, weil es ein eigenes Pflichtmodul zum Softwaretesten gibt. Aber nein, alles kann drankommen. Anderen Studierenden würde ich raten, in der Vorbereitung auf die Klausur alle Themen abzudecken und sich dabei auf die Grundkonzepte zu konzentrieren.

 

Rückblickend betrachtet ist das Anliegen dieses Kurses nicht allein die Programmierung in Java sondern vor allem die Vermittlung objektorientierter Grundkonzepte. Diesen Kurs fand ich didaktisch sehr gelungen. Allerdings bin ich mit Vorkenntnissen hineingegangen. Ich hatte  zuvor das Buch "Java lernen mit BlueJ" von David Barnes und Michael Kölling durchgearbeitet. Das war eine sehr  gute Vorbereitung auf das, was mir in GdI2 abverlangt wurde. Dieses Buch kann ich jedem empfehlen, der sich auf einen einführenden Kurs in objektorientierter  Programmierung vorbereiten möchte. Besonders ist hier der "objects first"-Ansatz. Während die meisten Lehrbücher zunächst einmal strukturierte Programmierung zeigen und dann die objektorientierten Konzepte nachschieben, beginnen Barnes und Kölling mit Objekten und Klassen. Möglich wird dies durch die BlueJ-Umgebung, einer IDE die nicht  nach Produktivitäts- sondern nach didaktischen Gesichtspunkten konzipiert ist. Und durch viele halbfertige Projekte, wo schon viel Code da ist, den man noch nicht im Detail verstehen muss. Aber beim Arbeiten mit diesen Bausteinen lernt man viel über die objektorientierten Konzepte. Vieles in GdI2 wäre mir ohne diese Grundlage schwerer gefallen.

 

Lobend erwähnen möchte ich auch meinen sehr guten Tutor, der mir viele Fragen beantwortete, die nicht direkt mit den Anforderungen des Kurses zu tun hatten. Bei ihm merkte man deutlich, dass er aus der Praxis kommt. Im Gegensatz zur Tutorin aus GdI1 forderte er an vielen Stellen schon einen knapperen, weniger expliziten Programmierstil.

2 Kommentare


Empfohlene Kommentare

Bei der Praxisaufgabe mit der Fähre konnte man verschiedene Konzepte aus dem Kurs im Zusammenspiel erleben: Vererbung, Polymorphie, Assoziation, Kapselung, Sichtbarkeit. Und das war noch mit einem Szenario verknüpft, dass insgesamt einen Sinn hatte. Ja, das hat viel Spaß gemacht.

 

In dem erwähnten Buch von Barnes und Kölling sind auch viele schöne Projekte drin. Hier werden die Konzepte etwas kleinschrittiger und langsamer eingeführt. Generische Programmierung ist dort übrigens nicht so gut erklärt.

Link zu diesem Kommentar

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden


×
  • Neu erstellen...