[Progra] Codeanalyse - Klausur vom 27.2.2008

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

Codeanalyse - Klausur vom 27.2.2008

Beitragvon paco89 » 02.03.12 11:49

hallo, ich hätte da ne frage zu der aufgabe der klausur vom 27.2.2008.
und zwar beim aufruf von B b = new B(10) ist mir nicht ganz klar warum b.x = 2 ist. ich hätte jetzt gedacht, dass der wert 10 an den konstruktor von B übergeben wird und das der dann diesen wert 10 an den super-aufruf übergibt. somit übergibt dann der super-aufruf den wert 10 an den konstruktor von A. dieser würde dann die 10 mit der 1, also mit A.x, addieren und das ergebnis 11 ausgeben.

so hätte ich jedefalls argumentiert. aber laut musterlösung ist es anders. das kommt b.x=2 raus. spielt denn die 10 keine rolle?

und dann hab ich ein wenig nachgedacht und bin auf folgende idee gekommen: in dem aufruf zuvor wird ja der wert von x zu -8. so und x ist ja static. das heißt, x existiert für alle objekte der klasse nur einmal. und wenn ich jetzt -8 +10 rechne, dann kommt ja 2 raus, denn in dem konstruktor von A wird ja A.x += A.x + x gerechnet, wobei das x der 10 entspricht und A.x den wert -8 hat.


habe ich so richtig gedacht, oder wird da doch was anderes gerechnet?
paco89
 
Beiträge: 115
Registriert: 05.12.10 05:04

Re: Codeanalyse - Klausur vom 27.2.2008

Beitragvon C-Otto » 02.03.12 13:45

Deine Argumentation bzgl. static hört sich sinnvoll an. Um Aufgaben dieser Art vernünftig zu lösen, kannst du für jedes static-Attribut für deine Notizen irgendwo auf der Seite ein kleines Kästchen machen und _nur_ da die Änderungen eintragen. Dadurch vermeidet man gut, dass man die statischen Attribute im Zusammenhang mit (neu?) erzeugten Objekten sieht.
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

Re: Codeanalyse - Klausur vom 27.2.2008

Beitragvon paco89 » 02.03.12 14:24

ah, okay. ja also ich mach mir sowieso immer zeichnungen bei dieser aufgabe. so mit einem stack, pfeilen etc. hatte ich auch in der präsenzübung gemacht. zu statischen attributen habe ich noch ne frage: und zwar geht es diesmal um die aufgabe 1 der klausur von 25.2.2009 :
bei der zuweisung von a=a.f(4) wird ja die methode A f (int y) ausgeführt. wieso nimmt man hier als y-attribut den wert 1? vorher wurde doch der y-wert zu einer 2 ?
anschließend an der stelle B b = new B () wird für das statische attribut y der wert 2 genommen, sodass man a.y = 4 kommt. denn hier hat man wiederum für y den wert 2 genommen.

ich dachte, dass die statische variablen für alle objekte derselben klasse gleich sind. und dass wenn sie einmal verändert werden, für alle gelten. oder habe ich da etwas falsches gelernt? auf jeden fall ist das hier offensichtlich nicht der fall.


das hat mich verwirrt....
paco89
 
Beiträge: 115
Registriert: 05.12.10 05:04

Re: Codeanalyse - Klausur vom 27.2.2008

Beitragvon C-Otto » 02.03.12 15:27

Das statische Attribut ist und bleibt 2. Das, was innerhalb der Methode gerechnet wird hat mit dem statischen Attribut nichts zu tun. Stattdessen wird das Argument betrachtet, man hat also 8 = 4*2 (was nach dem Aufruf nicht mehr beobachtbar ist).
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

Re: Codeanalyse - Klausur vom 27.2.2008

Beitragvon paco89 » 02.03.12 15:55

jo, vielen dank. jetzt ist alles klarer. das y wird quasi innerhalb der methode abgearbeitet und lok. variablen werden am des blocks , also sobald die 2. geschweifte klammer erreicht ist, wieder vom stack gelöscht. so hatte ich mir das nämlich aufgeschrieben. also spielt die berechnung ja sowieso keine rolle mehr.
paco89
 
Beiträge: 115
Registriert: 05.12.10 05:04


Zurück zu Praktische Informatik