<-- Studium  

Objektorientierte Programmierung 1
Objektorientierte Programmierung 2





Labortagebuch der Vorlesung Objektorientierte Programmierung (in JAVA) 1:

Termin 00 Termin 01 Termin 02
Termin 03 Termin 04 Termin 05
Termin 06


Termin 00 (14.10.05)

- Aufgabe:
HTML

- Loesung:
Diese Homepage




Termin 01 (21.10.05)

- Aufgabe:
Grundelemente einer Klasse

- Fragen:
Welche Bedeutung hat die Methode main?
Sie ist die Hauptmethode die beim Programmstart ablaeuft.
 
Warum muss main eine Klassenmethode (d.h. Static) sein?
Wie bei Klassenvariablen kann auf Klassenmethoden zugegriffen werden, ohne dass ein Objekt benötigt wird.
 
Warum muessen main und die Klasse HelloWorld oeffentlich (public) sein?
Keine Ahnung.

- Loesung:
Goodbye




Termin 02 (28.10.05)

- Aufgabe:
Datentypen und Aufzaehlungstypen

- Fragen:
Wie war doch gleich der Zusammenhang zwischen Variable und Datentypen?
Variablen werden mit einem Datentyp als Eigenschaft deklariert.
 
Wie ist ihr Eindruck von den Wertebereichen der Numerischen Datentypen?

TypDatenGroesseWertebereich
byteGanzzahl8 bit (1 byte)-128 bis 127
short*Ganzzahl16 bit (2 byte)-32768 bis 32767
intGanzzahl32 bit (4 byte)-2^31 bis 2^31-1
longGanzzahl64 bit (8 byte)gaaaanz viel
floatFliesskomma32 bit (4 byte)Einfache Genauigkeit
doubleFliesskomma64 bit (8 byte)Doppelte Genauigkeit
* Ich wurde leider in der Literals.java vergessen :-(
 
Was passiert wenn sie einen ungueltigen Wert eingeben?
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from X to Y

 
ExploreCompat() Tabelle:
BoolCharStringByteIntLongFloatDouble
BoolNNJ ZNNNNN
CharNJ GJ ZJ ZJ ZJ ZJ FJ F
StringJ ZJ ZJ ZJ ZJ ZJ ZJ ZJ Z
ByteNJ GJ ZJ GJ GJ GJ FJ F
IntNJ GJ ZJ GJ GJ GJ FJ F
LongNJ GJ ZJ GJ GJ GJ FJ F
FloatNJ FJ FJ FJ FJ FJ FJ F
DoubleNJ FJ FJ FJ FJ FJ FJ F

Wie ist es mit der Vertraeglichkeit (Sind Typfamilien o.ae. erkennbar)?
naja :-)GanzzahlenFliesskommazahlen
BoolChar, StringByte, Int, LongFloat, Double
Die Vertragen sich eigentlich alle ganz gut, nur der Boolean ist ein Outsider weil er nicht wie in ?allen? anderen Sprachen intern als 0 oder 1 behandelt wird.
 
Spielt die Reihenfolge der Verknuepfung dabei eine Rolle oder nicht?
Fuer die Vertaeglichkeit nicht.
 
Ist ihnen bei der Deklaration bzw. der Initialisierung der Variablen etwas aufgefallen?
Nein.
 
Ist ihnenbei der Schreibweise der Initialisierungswete etwas aufgefallen?
Man muss bei Long ein "L" und bei Float ein "f" anhaengen.

- Loesung:
Literals
Ampel1
Ampel2
Ampel3




Termin 03 (11.11.05)

- Aufgabe:
Ausdruecke und Zahlensysteme

- Fragen:
Was ist der Unterschied zwischen den Ausdruecken 3 und 4?
Ausdruck 3 ist ganzzahlig und Ausdruck 4 ist mit Fliesskomma.
 
Aendert sich das Ergebnis von Aufgabe 4 wenn sie es an Fliesskommavariablen zuweisen?
Ja es kommt dann das gewohnte Ergebnis, naemlich 2,5 raus.
 
Logische Ausdruecke:

NOT
falsetrue
truefalse

AND
falsefalsefalse
falsetruefalse
truefalsefalse
truetruetrue

OR
falsefalsefalse
falsetruetrue
truefalsetrue
truetruetrue

XOR
falsefalsefalse
falsetruetrue
truefalsetrue
truetruefalse

- Loesung:
Arithmetic Expressions
Logical Expressions
Relational Expressions
Hybrid Expressions




Termin 04 (18.11.05)

- Aufgabe:
Kontrollstrukturen

- Uebungsaufgaben fuer zu Hause:
Flussdiagramm
Vorschau Flussdiagramm 2a
 
Nassi-Shneidermann Diagramm (Struktogramm)
Vorschau Nassi-Shneidermann Diagramm 2a
 
Erweiterung: Rueckfrage nach Durchfuehrung
Vorschau erweitertes Diagramm 2a

- Fragen:
Was ist der Unterschied zwischen kopf- und fussgesteuerten Schleifen?
Kopfgesteuerte (for, while) werden nicht durchlaufen wenn die Prüfbedingung erfuellt, bzw. nicht erfuellt. Fussgesteuerte (do) hingegen werden mindestens ein mal durchlaufen bis die Bedingung geprüft wird. Man spricht daher auch von einer nicht abweisenden Schleife.

- Loesung:
Aufgabe 1 a
Aufgabe 1 b
Aufgabe 1 c
Aufgabe 1 d
Aufgabe 1 e
Aufgabe 1 f
Aufgabe 2 a
Aufgabe 2 b
Aufgabe 2 c
Klasse zur Tastatureingabe




Termin 05 (25.11.05)

- Aufgabe:
Funktionsweise von Methoden

- Fragen:
Warum ist die Moeglichkeit Methoden zu ueberladen so praktisch?
Es wird anhand der uebergebenen Parameter entschieden welche Methode ausgefuehrt wird. Was daran so herausragend praktisch ist kann ich leider nicht erkennen.
 
Warum macht es Sinn moeglichst kleine und einfache Methode zu schreiben
K I S S (Keep it simple and stupid). Ein elementares Grundprinzip.
 
Vergleichen Sie die Schnittstellen der Methoden incrementAndPrintNumber und incrementAndPrintNumbers. Was faellt ihnen dabei bezueglich der Unterschiede zwischen elementaren Datentypen und Objekttypen auf?
Im Gegensatz zu vielen anderen Programmiersprachen macht JAVA bei der Uebergabe keinen Unterschied zwischen z.B.: int und einem int-Array. Wirklich sehr angenehm. (Mir sollte also auffallen, das mir nichts auffaelt?!?)

- Loesung:
Randomizer




Termin 06 (14.10.05)

- Aufgabe:
Klassen, Vererbung, Objekte, usw...

- Loesung:
PersonTest
Person
Student
Idiot






Objektorientierte Programmierung (in JAVA) 2:

In der Vorlesung Objektorientierte Programmierung 2 bei Prof. Rau galt es in einer kleinen Gruppe ein komplexeres Softwareprojekt in Java zu realisieren. Hierbei sollten die Vorteile der objektorientierten Programmierung für Projekte mit mehreren Entwicklern genutzt werden, z.b. das klare Schnittstellen definiert werden und jeder eine Klasse entwickelt.

Meine Gruppe bestand aus:
- Adrian Pixelmast0r Alexander
- Viktor The Mouseover Nuss
- Und mir, Daniel Hack0r Leese

Wir wollten natürlich, wie alle echten Programmierer, ein Spiel programmieren. Und da echte Programmierer Herausforderungen mögen sollte es naürlich ein eher schwer zu programmierender Spieltyp sein. So viel unsere Wahl schnell auf ein Jump-and-Run.

Nach einer Konzeptphase mit etlichen Brainstormings und Teambesprechungen stand der Name des Spieles fest:

 

Jump Jump Hagbard Celine
Uboot-Kalles Adventures in the 7'th Dimension
3000

 

Nun wurden erste Konzepte erstellt und abstrahiert und der zeitliche Ablauf geplant:
Spielfeld Grobe Klasseneinteilung Projektablauf Graphikpreview Titelbild

Nach unzaehligen durchgecodeten Naechten hatten wir dann, kurz vor dem Abgabetermin eine lauffaehige Beta-Version

Wenn man sich so codezeilen wie

if (domoImDangerMode == true && this.hithit == false) this.domodomo = true;
boolean domodomo = false; //hack the planet!

anschaut ist natuerlich offensichtlich dass das Spiel noch viele Probleme hat. So ist es weder konequent objektorientiert noch haelt es sich an irgendwelche coding conventions. Trotzdem war es ein echtes Projekt mit mehreren Entwicklern, Schnittstellen, Teambesprechungen, Zieldefinitionen und re-definitionen, ...
Auf jeden Fall haben alle Beteiligten viel Erfahrung gesammelt und einiges ueber Anspruch und Wirklichkeit in der Softwareentwicklung gelernt.

Schliesslich wurde unser Projekt zum zweitbesten gewählt und reichte auch ohne weiteres für den Laborschein. Das sagt wohl auch viel über die Qualität der anderen Projekte aus.

Hier noch der Projektordner mit Quellcode. Man sollte es jedoch nicht gerade als Vorbild fuer strukturierte, oder gar objektorientierte, Programmierung betrachten.