[Progra] Klausur vom 6.3.02

[Progra] Programmierung
[DSAL] Datenstrukturen und Algorithmen
[SWT] Softwaretechnik
[DB] Datenbanken und Informationssysteme

Klausur vom 6.3.02

Beitragvon hand-of-fate » 29.12.08 15:39

Hallo,

ich rechne grade alte klausuren.. bei der vom 6.3.02 versteh ich ein paar dinge nicht...

Aufgabe 1: Bei der 2. Ausgabe soll rauskommen (nach lösung) 6, 3
aber ich verstehe nicht warum 6.. wert1 von einem y-Objekt müsste doch eigentlich 1 sein oder nicht?


Aufgabe 3: Die Klasse Inventarstueck hat doch eigentlich nur eine Nummer..
die Klasse soll abstract sein.. was soll dort denn überhaupt noch stehen, die Variable macht doch dort keinen sinn oder?!
Benutzeravatar
hand-of-fate
 
Beiträge: 90
Registriert: 08.04.06 14:55
Wohnort: Korschenbroich
Studiengang: SSE (M.Sc.)
Studiert seit: SS 08
Anwendungsfach: Psycho

Beitragvon oxygen » 29.12.08 15:52

Würdest du zumindest ein Link zu Klausur posten, wäre es für andere leichter nachzuvollziehen.
Insbesondere für Leute, die die Vorlesung gerade nicht hören.
oxygen
 
Beiträge: 1054
Registriert: 16.12.05 23:05
Wohnort: Bergheim
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: Medizin

Beitragvon C-Otto » 29.12.08 15:59

Die alten Klausuren sind auf der Vorlesungsseite zu finden: http://progra.c-otto.de als inoffizielle Abkuerzung

A1)
new Y() ruft den Konstruktor Y() auf. Dieser ruft zuerst implizit den Konstruktor X() auf. Bevor dieses X-Objekt erzeugt wird, werden die Attribute wert1 und wert2 von Klasse X mit 1 bw. 2 initialisiert. Die Anweisung wert1 = wert1 + wert2 sorgt also dafuer, dass die Attribute wert1/2 von X anschliessend 3 und 2 sind. Nach Beendingung des X-Konstruktors wird die Anweisung wert1 = wert1 + wert2 im Y-Konstruktor ausgefuehrt. Hier bezieht sich wert2 auf das Attribut in der Klasse Y, was mit 3 initialisiert wurde. Anschliessend gilt also wert1 in X ist 6 (3 + 3), wert2 in X ist unveraendert 2, wert2 in Y ist unveraendert 3. In der Ausgabe bezieht sich y.wert1 auf das Attribut feld1 in Klasse X (also 6), aufgrund der Deklaration der Variablen y bezieht sich y.wert2 auf das Attribut in Klasse Y (also 3).

A3)
Deine Frage verstehe ich nicht wirklich. Die Klasse soll abstrakt sein, ja. Ich denke, das ist klar. Die Eigenschaft einer eindeutigen Nummer (oder ID) ist jedem Inventarstueck gemeinsam. Es macht daher Sinn, dieses Attribut ganz oben in der Objekthierarchie anzuordnen. Das wurde in der Musterloesung auch gemacht. Zugriffe auf dieses Attribut kann man dann ueber entsprechende Getter/Setter ermoeglichen, das hat aber nichts mit dieser Aufgabe zu tun.

Wenn die Frage so gemeint ist, wo denn der Sinn ist, eine eigene (abstrakte) Klasse einzufuehren, obwohl nur eine simple Zahl gespeichert wird:
Mit dieser Klassenhierarchie ist es moeglich, Inventarstuecke unabhaengig von ihrer konkreten Instanz (Schmuck, Antikmoebel, ...) zu behandeln. Man kann beispielsweise Methoden aufrufen, die jedes Inventarstueck hat (hier in dieser Aufgabe ist keine solche Methode genannt) oder andere Funktionalitaeten programmieren, fuer die die konkrete Instanz irrelevant ist. Ueblich ist beispielsweise die Objekte in einer Liste zu speichern, was man mit neuerem Java dann durch List<Inventarstueck> deklarieren koennte. In dieser Liste kann man dann alle moeglichen Inventarstuecke sammeln.

Wichtig ist hier, den Sinn einer abstrakten Klasse zu sehen. Man hat niemals (!) ein Objekt, was einfach nur eine Nummer hat. Man hat immer eine speziellere Instanz, die auch (!) eine Nummer hat. Wenn man aber nicht an spezielleren Eigenarten interessiert ist, reicht es aus den Datenspeicher (Liste, Variable, ...) vom Typ der Abstrakten Klasse anzulegen und damit zu arbeiten.

Ciao,
Carsten
Dr. rer. nat. Carsten Otto
http://verify.rwth-aachen.de/otto/
Benutzeravatar
C-Otto
 
Beiträge: 568
Registriert: 10.08.06 00:20
Wohnort: Schwalbach am Taunus
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon hand-of-fate » 30.12.08 14:51

ohh sorry an den link hab ich nicht gedacht... ich werde mich bessern

hmm da hab ich mich bei der 3 wohl unklar ausgedrückt..
ich denke ich sehe das richtig, dass die klasse nur eine einzige variable braucht.. wenn die klasse nun abstrakt sein soll müsste man doch diese variable als abstract definieren (geht das überhaupt, mein compiler beschwert sich)

wenn ich das nun tue müsste ich diese variable in jeder unterklasse doch noch mal implizit definieren?!
Benutzeravatar
hand-of-fate
 
Beiträge: 90
Registriert: 08.04.06 14:55
Wohnort: Korschenbroich
Studiengang: SSE (M.Sc.)
Studiert seit: SS 08
Anwendungsfach: Psycho

Beitragvon C-Otto » 30.12.08 14:59

Du suchst das Wort Attribut...
Attribute einer abstrakten Oberklasse verhalten sich genau so wie Attribute einer normalen Oberklasse. Du kannst durch super.x (oder einfaches "x", wenn kein anderes "x" im Weg ist) darauf zugreifen und damit arbeiten, sofern die Zugriffsrechte passen. Den "abstract"-Modifier gibt es in dem Zusammenhang nur fuer Methoden. Du solltest dich wohl mal darueber informieren, was man mit abstrakten Klassen schoenes anstellen kann und dann bessere Fragen stellen :)
Dr. rer. nat. Carsten Otto
http://verify.rwth-aachen.de/otto/
Benutzeravatar
C-Otto
 
Beiträge: 568
Registriert: 10.08.06 00:20
Wohnort: Schwalbach am Taunus
Studiert seit: fertig
Anwendungsfach: BWL


Zurück zu Praktische Informatik