# Informatik Aufgabe



## tobi193 (25. Mrz 2011)

Hallo,

in meiner Schule (Informatikgymnsium) hatten wir neulich im Info Unterricht ein recht suspekte Klausur geschrieben. Dabei  gab es einige Aufgaben, die weitreichende Diskussionen zuließen. Unter anderem folgende von der ich gerne eure Meinung hören wollte:

"Modellieren Sie eine Klasse Bild in UML-OOD-Ansicht, die die wesentlichen Informationen für Farbbilder nach dem RGB-Modell in Java persistent machen kann. Berücksichtigen Sie die gängigen Kanäle für Farbbilder (z.B. für RED ein Wert zwischen 0 und 255), Attribute für die Bildgröße und eine Möglichkeit die Pixel abzulegen. Sehen Sie eine Methode zum Speichern eines Bildes sowie einen parameterlosen und einen parametrisierten Konstruktor zur Instanzierung eines Bilders vor.
Hinweis: Setter und Getter lassen Sie bitte weg."

Das war die Aufgabe wie sie in der Klausur stand. Nun zu meiner Lösung (siehe Anhang) zu der ich gerne eure Meinung, was ihr darüber denkt bzw. was hier falsch ist (was von der Aufgabenstellung nicht erfüllt wurde) hätte.


mfg


----------



## Final_Striker (25. Mrz 2011)

Und was ist jetzt deine konkrete Frage zu der Aufgabe/Lösung?


----------



## tfa (25. Mrz 2011)

Sicherlich gibt es viele Lösungswege für diese Aufgabe. Der Lehrer hat nunmal den Vorteil, sich eine davon als die richtige aussuchen zu dürfen 
Was ich bei deiner Lösung problematisch finde, ist die Pixelklasse. Willst du wirklich für ein jeden Pixel ein eigenes Objekt anlegen? Außerdem gab es keine Möglichkeit, hoehe und breite mit Werten zu belegen. Beides hat der Lehrer angestrichen. 
Ich denke, 6 von 7 Punkten geht schon in Ordnung.


----------



## Final_Striker (25. Mrz 2011)

Ich würde die Pixel in einem zweidimensionalen Array speichern.


```
Pixel [][] pixelArray;
```

Und was soll der String Parameter in der Bild Klasse?


----------



## tobi193 (25. Mrz 2011)

Hallo,

gefragt war ja, dass die RGB Werte, als 3 Werte abgelegt werden.
Daher habe ich eine separate Klasse erstellt, von der Objekte für jeden Pixel in einer Liste vorgehalten werden.
Wenn ich 3 einzelne Arrays erstelle (wie in rot eingezeichnet) untergräbt doch das die Objektorientierung.


----------



## slawaweis (26. Mrz 2011)

tfa hat gesagt.:


> Sicherlich gibt es viele Lösungswege für diese Aufgabe. Der Lehrer hat nunmal den Vorteil, sich eine davon als die richtige aussuchen zu dürfen


nein, hat er nicht. Sonst kann er auch gleich solche Aufgaben aufstellen: "Ich habe mir eine Zahl zwischen 0 und 10 ausgewählt, jetzt raten Sie welche Zahl das ist. Kristallkugeln sind verboten!" So was würde nur in Hogwarts gehen. Jede richtige Lösung einer Aufgabe muss der Lahrer akzeptieren, egal ob er es will oder nicht. Sonst hätte er die Aufgabe besser formulieren sollen. Carl Friedrich Gauß läst grüßen 

Ich finde die Lösung in blauen Farben auf dem Foto ist laut der Aufgabe richtig. In der Aufgabe stand nicht: "entwerfen Sie ein Model für den *produktiven Einsatz*". Rein theoretisch und aus der OO-Sicht wäre es sogar besser, als die Lösung in Rot. Nehmen wir an, die Aufgabe lautete: "Modellieren Sie eine Klasse, welche 10.000 Kundendatensätze aus einer Datei einliest und im Speicher hält, wobei jeder Datensatz aus 3 Elementen (Name, Vorname, Geburtsdatum) besteht". Das könnte man auch als 3 Arrays von Strings definieren, nur wäre es aus der OO-Sicht falsch. Das es mit Pixeln in der Praxis gemacht wird, ist einfach Gewöhnungssache und wegen der Geschwindigkeit. Rein theoretisch kann jeder Pixel ein eigenes Objekt sein. Man kann es sogar noch weiter treiben und aus jeder Farbebene ein Objekt machen, wobei dann jede Farbebenenkomponente ein eigenes Objekt ist. Wenn man sich das Image-System von Java2D ansieht, dann weis man, dass es auf viele Arten gelöst werden kann.

Solange es bei der Klausur nicht explizit um Arrays, Optimierung oder Bildbearbeitung ging, sondern um OO, dann ist die Lösung in Blau richtig.

Slawa


----------



## MasterK (26. Mrz 2011)

Naja, so ganz korrekt ist die blaue variante nicht. Da die aufgabe explizit für java gefordert war, ist byte wohl der falsche datentyp, wenn man im wertebereich von 0 bis 255 speichern will. Aber ausgerechnet das wurde nicht angestrichen


----------



## Cola_Colin (26. Mrz 2011)

Reinpassen tut es ja, der Rest ist eben ein wenig umrechnen. Würde schon gehen.


----------



## lehrer1 (26. Mrz 2011)

tobi193 hat gesagt.:


> "Modellieren Sie eine Klasse Bild in UML-OOD-Ansicht, die die wesentlichen Informationen für Farbbilder nach dem RGB-Modell in Java persistent machen kann. Berücksichtigen Sie die gängigen Kanäle für Farbbilder (z.B. für RED ein Wert zwischen 0 und 255), Attribute für die Bildgröße und eine Möglichkeit die Pixel abzulegen. Sehen Sie eine Methode zum Speichern eines Bildes sowie einen parameterlosen und einen parametrisierten Konstruktor zur Instanzierung eines Bilders vor.
> Hinweis: Setter und Getter lassen Sie bitte weg."



Zwei Sachen stören mich grundsätzlich, A hat der Konstruktor als Typ des Parameters String, nicht z.B. (int, int) für die Höhe und Breite, und B gibt es keine Methode, Pixel zu verändern. Die rot geschriebenen Rauten sollen für Protected-Attribute stehen? Muss die Klasse erweiterbar sein? Wenn außerdem beanstandet wird, dass es genau eine Klasse sein soll, dann muss er auch konsequent handeln und darf nicht 6 von 7 Punkte geben. Das verletzt die Integrität der Lehrer am Gymnasium. IMHO.


----------



## tfa (26. Mrz 2011)

> nein, hat er nicht. Sonst kann er auch gleich solche Aufgaben aufstellen: "Ich habe mir eine Zahl zwischen 0 und 10 ausgewählt, jetzt raten Sie welche Zahl das ist. Kristallkugeln sind verboten!" So was würde nur in Hogwarts gehen. Jede richtige Lösung einer Aufgabe muss der Lahrer akzeptieren, egal ob er es will oder nicht.


Das ist naiv. In vielen Fällen gibt es kein schwarz/weiß oder richtig/falsch. Bei deinen Matheaufgaben vielleicht oder in Naturwissenschaften. Aber hier ist es auch Ermessenssache. Zur Not muss man das mit dem Lehrer ausdiskutieren, was der TS ja erfoglreich gemacht hat (nebenbei bemerkt, eine viel größere Leistung, als ein supertolles UML-Diagramm abzuliefern).



> In der Aufgabe stand nicht: "entwerfen Sie ein Model für den produktiven Einsatz". Rein theoretisch und aus der OO-Sicht wäre es sogar besser, als die Lösung in Rot.


Wozu sollte man denn sonst ein Model entwerfen? Sollte man UML-Entwurf lernen um des UML-Entwurfs Willen? Rein theoretisch kann man aus dem Bildnamen und der Bildgröße auch noch eigene Klassen machen. Wer das dann mehr OO? 



> Nehmen wir an, die Aufgabe lautete: "Modellieren Sie eine Klasse, welche 10.000 Kundendatensätze aus einer Datei einliest und im Speicher hält, wobei jeder Datensatz aus 3 Elementen (Name, Vorname, Geburtsdatum) besteht". Das könnte man auch als 3 Arrays von Strings definieren, nur wäre es aus der OO-Sicht falsch.


Ich hoffe, die grundlegenden Unterschiede zwischen Bildern und Pixel einerseits und Kundendatensätzen andererseits sind uns allen klar.



> Das es mit Pixeln in der Praxis gemacht wird, ist einfach Gewöhnungssache und wegen der Geschwindigkeit. Rein theoretisch kann jeder Pixel ein eigenes Objekt sein.


Theoretisch ja, aber dieser Entwurf wäre praktisch wertlos. Ein Fach wie Informatik sollte sich auf jeden Fall an der Praxis orientieren - auch in der Schule.


----------



## lehrer1 (26. Mrz 2011)

Siehe dir mal diese Klasse an: BufferedImage (Java Platform SE 6)

Etwas voluminöser und pompöser, es ist aber eigentlich alles dabei. Und als Hausaufgabe: handschriftlich die Dokumentation übersetzten


----------



## tobi193 (27. Mrz 2011)

lehrer1 hat gesagt.:


> Siehe dir mal diese Klasse an: BufferedImage (Java Platform SE 6)
> 
> Etwas voluminöser und pompöser, es ist aber eigentlich alles dabei. Und als Hausaufgabe: handschriftlich die Dokumentation übersetzten



Der Sinn dieses Posts ist irgendwie nicht ganz klar ?!


----------

