[Progra] Ü8 Aufgabe 1

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

Ü8 Aufgabe 1

Beitragvon aRo » 13.12.07 19:46

Hallo!

Sehe ich das richtig, dass

1) Wenn ein anderer Konstruktor mittels super aufgerufen wird kein zusätzliches Objekt erstellt wird, sondern die Informationen nur fürs aktuelle Objekt gelten?

2) Wenn ich statische Variablen im Konstruktor habe, diese auch für das Objekt erzeugt werden?

Danke!
aRo
 
Beiträge: 311
Registriert: 23.10.07 01:28
Anwendungsfach: Medizin

Beitragvon Coolcat » 13.12.07 19:53

zu 1)
Mit super(Argumentliste) ruft man Konstruktoren der Oberklasse auf. Es wird kein zusätzliches Objekt erstellt, sondern das gerade eben erzeugte initialisiert.
Mit this(Argumentliste) kann man übrigens auch andere Konstruktoren der selben Klasse aufrufen.

zu 2)
Statische Variablen gibt es in Java nicht. Vermutlich meinst du statische Attribute?
Alles was statisch ist existiert nur genau einmal, es wird also nicht für jedes Objekt ein neues statisches Attribut erzeugt, sondern man greift immer auf ein und dieselbe Speicherstelle zu.
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon aRo » 13.12.07 20:01

danke Dir.

ok 1) ist dann klar, denke ich.

allerdings verstehe ich die Übung, OUT1, wegen der 2) dann nicht. Wenn hier kein x für das Objekt aus Zeile 3 erzeugt wird, wieso soll dann überhaupt ein a.x existieren und nicht nur ein A.x? .. :roll:
aRo
 
Beiträge: 311
Registriert: 23.10.07 01:28
Anwendungsfach: Medizin

Beitragvon Coolcat » 13.12.07 20:09

Weil du mit a.x auf A.x zugreifst ;)

Edit: mal ganz abgesehen davon steht da:
falls diese an der markierten Stelle existieren.
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon aRo » 13.12.07 20:13

ja, ich weiß, aber offentlich existiert es ja ;)

Hmm..muss wohl so sein. Wirklich verstehen tu ichs aber trotzdem nicht, wieso man mit a.x auf A.x zugreifen kann..
aRo
 
Beiträge: 311
Registriert: 23.10.07 01:28
Anwendungsfach: Medizin

Beitragvon theTux » 13.12.07 21:01

aRo hat geschrieben:Wirklich verstehen tu ichs aber trotzdem nicht, wieso man mit a.x auf A.x zugreifen kann..


Stell' dir das vor wie dieses Forum. Von jedem Computer (a) aus kannst du die gleichen Beiträge abrufen, wenn du von deinem Rechner aus etwas änderst, sehe ich diese Änderung auch, obwohl ich an einem anderen Rechner sitze.
Auf die Dateien auf deiner Festplatte (nicht statische Attribute) komme ich hingegen nicht, solange ich nicht direkt auf deinen Computer zugreifen kann. (Ich hoffe du hast deine Dateien private definiert ;-) )
Stur lächeln und... oh, falscher Pinguin.
Benutzeravatar
theTux
 
Beiträge: 577
Registriert: 15.01.06 16:41

Beitragvon init_0 » 14.12.07 20:20

Hallo,

hätte da mal eine Frage, was bedeutet dieser Ausdruck:

( ( B ) a ) ?

Wird hier das Objekt a auf den Typen B gecastet?
Und wenn das der Fall sein sollte, was macht dann die Zuweisung davor mit: A a = new B ( 5 ) ?

Vielen Dank schonmal für die Antwort !
Zuletzt geändert von init_0 am 14.12.07 20:50, insgesamt 1-mal geändert.
init_0
 
Beiträge: 2
Registriert: 20.11.07 23:28

Beitragvon mirko » 14.12.07 20:31

init_0 hat geschrieben:Hallo,

hätte da mal eine Frage, was bedeutet dieser Ausdruck:

( ( B ) a ) ?

Vielen Dank schonmal für die Antwort !


dass das objekt a in ein objekt vom typ B gecastet wird
mirko
 
Beiträge: 1032
Registriert: 22.10.06 18:33
Studiert seit: WS 12/13

Beitragvon Coolcat » 15.12.07 01:00

B ist eine Unterklasse von A.
  • Wenn du von einer Oberklasse zu einer Unterklasse casten möchtest, musst du dies explizit angeben. Das macht man indem man den Namen der Unterklasse in Klammern davor schreibt.
  • Wenn du umgekehrt von einer Unterklasse zu einer Oberklasse casten möchtest, geht dies implizit. Man kann also einfach zuweisen.

Warum ist das so?
Jedes Objekt der Klasse B ist auch ein Objekt der Klasse A. Umgekehrt ist aber ein Objekt der Klasse A nicht unbedingt auch ein Objekt der Klasse B. Die Umwandlung funktioniert also nicht immer. Mit dem instanceof Operator kann man gefahrlos testen ob die Umwandlung klappt.
My software never has bugs. It just develops random features.
Benutzeravatar
Coolcat
Promoter
 
Beiträge: 2574
Registriert: 28.11.05 21:26
Wohnort: Kohlscheid / Düsseldorf
Studiengang: Informatik (Dipl.)
Studiert seit: fertig
Anwendungsfach: BWL

Beitragvon thana » 15.12.07 02:08

Wenn du von einer Oberklasse zu einer Unterklasse casten möchtest, musst du dies explizit angeben. Das macht man indem man den Namen der Unterklasse in Klammern davor schreibt.

Das ist natürlich kreuzfalsch!
Wenn man das tät gäbe es eine ClassCastException.
Code: Alles auswählen
Jedes Objekt der Klasse B ist auch ein Objekt der Klasse A. Umgekehrt ist aber ein Objekt der Klasse A nicht unbedingt auch ein Objekt der Klasse B. Die Umwandlung funktioniert also nicht immer.

Gut angefangen und dann völlig falsch geendet!
Man kann NIEMALS den Typ eins Objekts mit Cast ändern NIE.
Mit einem Cast kann man den Compiler darauf hinweisen, dass man genre eine andere Sichtweise auf das Objekt hätte, dabei ist ZWINGEND erforderlich, dass Objekt bereits von diesem Typ ist!

Deshalb gibt es ABSOLUT IMMER eine ClassCastException wenn man von einer Oberklasse zu einer Unterklasse Casten möchte!
thana
 
Beiträge: 264
Registriert: 18.10.07 17:01

Beitragvon mirko » 15.12.07 10:49

thana hat geschrieben:
Wenn du von einer Oberklasse zu einer Unterklasse casten möchtest, musst du dies explizit angeben. Das macht man indem man den Namen der Unterklasse in Klammern davor schreibt.

Das ist natürlich kreuzfalsch!
Wenn man das tät gäbe es eine ClassCastException.


wie er weiter unten geschrieben hat, nicht immer.

thana hat geschrieben:
Code: Alles auswählen
Jedes Objekt der Klasse B ist auch ein Objekt der Klasse A. Umgekehrt ist aber ein Objekt der Klasse A nicht unbedingt auch ein Objekt der Klasse B. Die Umwandlung funktioniert also nicht immer.

Gut angefangen und dann völlig falsch geendet!
Man kann NIEMALS den Typ eins Objekts mit Cast ändern NIE.


doch - z.b. dann, wenn das objekt schonmal den entsprechenden typ hatte

thana hat geschrieben:Mit einem Cast kann man den Compiler darauf hinweisen, dass man genre eine andere Sichtweise auf das Objekt hätte, dabei ist ZWINGEND erforderlich, dass Objekt bereits von diesem Typ ist!

Deshalb gibt es ABSOLUT IMMER eine ClassCastException wenn man von einer Oberklasse zu einer Unterklasse Casten möchte!


einfaches gegenbeispiel:

class A {...}
class B extends A {...}
...
A a=new B(); // Erzeuge ein Objekt vom Typ B und caste es in ein Objekt vom Typ A.
B b=(B)a; // Nehme das Objekt vom Typ A und caste es zurück in den Typ B.

Nicht gehen würde dagegen:
A a=new A(); // Erzeuge ein Objekt vom Typ A
B b=(B)a; // Nehme das Objekt vom Typ A und caste es in der Klassenhierarchie in ein Objekt, dass es nie gewesen ist => CastException

du solltest dich mit deiner ständigen, theatralischen kritik an den tutoren etwas zurückhalten!
mirko
 
Beiträge: 1032
Registriert: 22.10.06 18:33
Studiert seit: WS 12/13

Beitragvon thana » 15.12.07 11:28

doch - z.b. dann, wenn das objekt schonmal den entsprechenden typ hatte

Nein das ist so nicht richtig. man ÄNDERT den Typ des Objekts d amit nicht! Man ändert lediglich die Sichtweise auf das Objekt.
Anders ausgedrückt: Das Objekt wurde bisher als Typ Foo betrachtet, mit dem Cast nach Bar sagen wir dem Compiler, dass er es nun als Bar betrachten soll. Essentiell wichtig ist dabei ist, dass es auch ein Bar ist. Es hatte also nicht diesen Typ mal (in einem früheren Leben, oder wie meinst du das? ;-) ) sondern hat beide Typen gleichzeitig (Stichwort Polymorphie) .

einfaches gegenbeispiel:

class A {...}
class B extends A {...}

Ein Gegenbeispiel (nach dem was ich meinte) wäre wenn
(B) new A();
funktionieren würde.

Aber sicherlich war deiner Interpretation von dem was ich geschrieben habe durchaus berechtigt und zeigt es doch wieder wie wichtig es ist, dass man sich bei diesem Thema sehr deutlich ausdrückt!

Als ich Coolcats posting das erste mal las habe ich es schlicht anders interpretiert als es gemeint war. Nachdem ich mit dem schreiben fertig war habe ich mir gedacht, dass es möglicherweise auch anders gemeint seni könnte, fand dann aber, dass es doch ganz gut geeignet sei um eben zu zeigen dass man sich klarer ausdrücken sollte wenn man es mit Anfängern zu tun hat :-)

du solltest dich mit deiner ständigen, theatralischen kritik an den tutoren etwas zurückhalten!

Wie meinen? Völlig wurscht wie du das nun wieder meinst - dämlich finde ich es in jedem Fall (wobei mir spontan 3 verschiedene Möglichkeiten einfallen wie das gemeint sein könnte...)
thana
 
Beiträge: 264
Registriert: 18.10.07 17:01

Beitragvon mirko » 15.12.07 12:04

thana hat geschrieben:Das Objekt wurde bisher als Typ Foo betrachtet, mit dem Cast nach Bar sagen wir dem Compiler, dass er es nun als Bar betrachten soll.


dann übersetze cast mal bitte ins deutsche (=>datentypanpassung) und dann sag mir noch mal, dass bei der datentypanpassung der typ nicht angepasst wird.

thana hat geschrieben:
einfaches gegenbeispiel:

class A {...}
class B extends A {...}

Ein Gegenbeispiel (nach dem was ich meinte) wäre wenn
(B) new A();
funktionieren würde.


du sprachst von "NIEMALS" und "NIE". da genügt für deine argumentation nicht _ein_ beispiel. um deine argumentation zu widerlegen dagegen schon.

thana hat geschrieben:Aber sicherlich war deiner Interpretation von dem was ich geschrieben habe durchaus berechtigt und zeigt es doch wieder wie wichtig es ist, dass man sich bei diesem Thema sehr deutlich ausdrückt!

Als ich Coolcats posting das erste mal las habe ich es schlicht anders interpretiert als es gemeint war. Nachdem ich mit dem schreiben fertig war habe ich mir gedacht, dass es möglicherweise auch anders gemeint seni könnte, fand dann aber, dass es doch ganz gut geeignet sei um eben zu zeigen dass man sich klarer ausdrücken sollte wenn man es mit Anfängern zu tun hat :-)


coolcat hat sich ganz klar ausgedrückt, vor allem so, dass auch jeder anfänger es verstehen könnte. was man ihm vlt vorwerfen könnte (wenn man denn krampfhaft sucht), wäre, dass er das nicht-immer-möglich-sein des expliziten castings erst in einem gesonderten abschnitt beschrieben hat, sodass jemand, der nicht alles liest evtl. einen falschen eindruck gewinnen könnte. allerdings handelt es sich hier nicht um eine dissertation, sondern um ein foren-posting.

thana hat geschrieben:
du solltest dich mit deiner ständigen, theatralischen kritik an den tutoren etwas zurückhalten!

Wie meinen? Völlig wurscht wie du das nun wieder meinst - dämlich finde ich es in jedem Fall (wobei mir spontan 3 verschiedene Möglichkeiten einfallen wie das gemeint sein könnte...)


ich meine damit, dass du nun schon mindestens zum 2. male tutoren angreifst, die hier auf freiwilliger basis den studenten helfen. (nur zur info: wir bekommen die zeit, in der wir euch versuchen zu helfen, nicht bezahlt.)

natürlich sollten falsche informationen (so sie denn falsch sind) nicht so im raum stehen bleiben. dann kann man aber einfach darauf hinweisen, dass man da anderer meinung ist, dann prüft der autor das und gut ist.

du fängst hier an seinen beitrag wortwörtlich auseinander zu nehmen und titulierst seine aussagen als "kreuzfalsch" bzw. "völlig falsch" und das dazu noch in fettdruck. wo liegt bitte inhaltlich der unterschied zwischen kreuzfalsch, falsch und so nicht richtig? letzteres macht zumindest mal einen höflicheren eindruck.

insgesamt muss ich sagen, dass ich den studenten, die meine hilfe benötigen bisher gerne geholfen habe. wenn ich aber jederzeit damit rechnen muss, dass jemand daher kommt, der mir das wort im munde rumdreht und mich wg meiner aussagen fertig macht, muss ich mir wohl genauer überlegen, ob ich den leuten helfe, oder nicht. und weitere tutoren wird das sicherlich auch nicht ermutern, den studenten zu helfen...

@init_0: ich hoffe, du lässt dich von dieser diskussion nicht abschrecken.
mirko
 
Beiträge: 1032
Registriert: 22.10.06 18:33
Studiert seit: WS 12/13

Beitragvon thana » 15.12.07 12:25

dann übersetze cast mal bitte ins deutsche (=>datentypanpassung) und dann sag mir noch mal, dass bei der datentypanpassung der typ nicht angepasst wird.

Da habe ich absolut kein Problem nicht: Bei einem Cast wird NIEMALSNICHT der Typ eines Objekts geändert, egal was deutsche Übersetzungen da nahe legen!

du sprachst von "NIEMALS" und "NIE". da genügt für deine argumentation nicht _ein_ beispiel. um deine argumentation zu widerlegen dagegen schon.

Wie ich sehe waren meine eigenen Worte eines besseres Beispiel für "falsch ausgedrückt" als ich ursprünglich annahm.
Nochmal: was ich meinte war, dass man NIEMALS eine Objekt, dass per "new A()" erstellt wurde zu einem B casten kann, wenn B von A erbt.

Da wirst du mir mit Sicherheit zustimmen.

coolcat hat sich ganz klar ausgedrückt, vor allem so, dass auch jeder anfänger es verstehen könnte.

Und genau da bin ich eben anderer Meinung.
Uns beiden und auch Coolcat ist mit Sicherheit klar, dass es sehr wohl möglich ist, ein Objekt vom Typ A zu Typ B zu casten, weil UNS klar ist das es sehr wohl beide Typen haben kann.
Einem Anfänger muss das aber absolut nicht so klar sein, deshalb reite ich so darauf rum. Ich halte es für absolut wichtig, dass man sich dieser Stelle sehr deutlich ausdrückt (auch wenn d as schwer ist).

Den Rest deines Postings werde ich in einer PM beantworten, das gehört nun wirklich nicht hierher
thana
 
Beiträge: 264
Registriert: 18.10.07 17:01

Beitragvon mirko » 15.12.07 12:34

thana hat geschrieben:Wie ich sehe waren meine eigenen Worte eines besseres Beispiel für "falsch ausgedrückt" als ich ursprünglich annahm.
Nochmal: was ich meinte war, dass man NIEMALS eine Objekt, dass per "new A()" erstellt wurde zu einem B casten kann, wenn B von A erbt.

Da wirst du mir mit Sicherheit zustimmen.


das ist durchaus korrekt - coolcat hat aber auch nichts anderes behauptet...

thana hat geschrieben:
coolcat hat sich ganz klar ausgedrückt, vor allem so, dass auch jeder anfänger es verstehen könnte.

Und genau da bin ich eben anderer Meinung.

meinungen sind verschieden - meine argumentation hab ich gebracht, aber wir werden uns wohl nicht einig...
mirko
 
Beiträge: 1032
Registriert: 22.10.06 18:33
Studiert seit: WS 12/13

Nächste

Zurück zu Praktische Informatik