Re: Frage zu verdecktem Member
- From: Jochen Theodorou <blackdrag@xxxxxx>
- Date: Wed, 22 Aug 2007 19:34:02 +0200
Stephan Lukits schrieb:
Ingo R. Homann schrieb:[...]
Nur dürften sie - wenn man es so genau nimmt wie Du ("Programme bilden die Wirklichkeit ab, sie erschaffen sie nicht.") eben keine setter haben.
Es ist Durchaus eine Frage ob dies Sinnvoll ist. Das sie dies
nicht _dürfen_, so lange die Kriterien einer "ist ein"-Beziehung
erhalten bleiben, sehe ich immer noch nicht.
Man könnte die Menge aller Quadrate als Teilmenge der Rechtecke definieren und zwar in dem man sagt, die Menge der Quadrate ist die Menge aller Rechtecke für die gilt, dass beide Seiten gleich lang sind.
Soweit die Mathematik... aber eine Klasse ist keine Menge dieser Art. In Java ist ein Rectangle auch dann ein Rectangle wenn beide Seiten gleich lang sind und kann nicht ein Square werden, weil das Typsystem es nicht erlaubt. Der einzige Weg das wirklich auszudrücken wären dann vielleicht interfaces... wie gesagt, lässt sich nicht wirklich gut auf Klassen abbilden. Allerdings wird genau das hier versucht. Ich meine bei
class B extends A {}
hast du im Prinzip folgende Beziehungen:
für alle B gilt, sie sind ein A.
für keine A gilt, sie sind ein B.
Man darf also nicht den Fehler machen ein "ist ein" als Teilmengenbeziehung zu sehen. Sicher kann man Klassenbeziehungen mit Mengen ausdrücken, aber das ist schon wieder was anderes.
Deswegen finde ich das Substituionsprinzip auch sehr viel Aussagekräftiger. Kann ich alle Operationen, die auf einem Rectangle ausgeführt werden Semantikerhaltend auch auf einem Squareausführen? Kann ich nicht, denn wenn ich mit Settern arbeite und Länge und Breite unterschiedlich setze und es nachfolgend mittels den Gettern prüfe, dann wird sich herausstellen, dass die Seiten nicht ungleich sind bei einem Square.
Während ich in der Mathematik in der Regel die Eigenschaften prüfe um das "Objekt" dann der Klasse zuzuordnen, mache ich in einer Programmiersprache wie Java eigentlich was anderes, ich definiere einen Satz von Klassenerhaltenden Operationen, um dem Typsystem Rechnung zu tragen. Square hat diese Operationen nicht.
Meiner Ansicht nach wäre die formal richtigere Lösung wenn das setzen einer Eigenschaft ein neues Objekt erzeugt. Dann ist es auch legal, dass wenn Breite=Länge, das man ein Square bekommt und kein Rectangle bzw. bei Ungleichheit eben genau anderes herum... und das natürlich egal ob auf Square oder Rectangle aufgerufen.
Aber letztlich ist all das nicht wirklich entscheidend. Es ist nur entscheidend wenn du mit anderen zusammen arbeiten musst, oder du vielleicht eine lib schreibst. Und selbst dann kannst du das noch immer so machen, es muss nur allen beteiligten klar sein.
[...]
> Und ich bin der Meinung, dass wenn
ein Objekt A alle Eigenschaften eines Objekts B hat,
dann steht A in einer "ist ein" beziehung zu B.
Egal ob es sich dabei nun um ein mathematisches oder
aussermathematisches Objekt handelt.
Das sehe ich auch so, denn ist-ein muss nichts mit irgendwelchen Realitäten außer denen des Programmes zu tun haben.
Und ein
Quadrat kann nun mal so interpretiert werden,
dass es alle Eigenschaften eines Rechtecks hat
und eine mehr, die ich jetzt aber nicht nocheinmal
hinschreibe.
Man kann auch ein Rechteck so definieren das es wie ein Quadrat ist, nur mit einer mehr, nämlich einer Seitelänge mehr. Es ist halt nicht eindeutig.
Selbiges gilt für Kreis und Ellypse,
dito ;)
und solange Du mir keinen Fehler mit meinem
Code produzieren kannst, denke ich, sehen das
die Enwickler von Java ähnlich wie ich.
Die Entwickler von Java? Gosling & Co? Ich glaube die lassen wir mal lieber aus dem Spiel ;)
Gruss theo
--
Jochen "blackdrag" Theodorou
Groovy Tech Lead (http://groovy.codehaus.org)
http://blackdragsview.blogspot.com/
.
- References:
- Frage zu verdecktem Member
- From: Ernst Baumann
- Re: Frage zu verdecktem Member
- From: Ralf Ullrich
- Re: Frage zu verdecktem Member
- From: Thomas Thiele
- Re: Frage zu verdecktem Member
- From: Ralf Ullrich
- Re: Frage zu verdecktem Member
- From: Thomas Thiele
- Re: Frage zu verdecktem Member
- From: Hubert Partl
- Re: Frage zu verdecktem Member
- From: Stephan Lukits
- Re: Frage zu verdecktem Member
- From: Ingo R. Homann
- Re: Frage zu verdecktem Member
- From: Stephan Lukits
- Re: Frage zu verdecktem Member
- From: Ingo R. Homann
- Re: Frage zu verdecktem Member
- From: Stephan Lukits
- Frage zu verdecktem Member
- Prev by Date: Re: Frage zu verdecktem Member
- Next by Date: Re: Closures in Java 7 ? Ja bitte.
- Previous by thread: Re: Frage zu verdecktem Member
- Next by thread: Re: Frage zu verdecktem Member
- Index(es):
Relevant Pages
|
Loading