Aw: Re: Zugriff auf bestimmte Klassen beschränken

10/06/2011 - 14:06 von Thomas Preymesser | Report spam
Am Freitag, 3. Juni 2011 13:52:55 UTC+2 schrieb Robert Klemme:


Zunàchst mal ist das etwas verdàchtig, wenn Du in die Oberklasse eine
Abhàngigkeit zu Unterklassen einbaust. Normalerweise sollte die
Abhàngigkeit immer in der anderen Richtung laufen.



Ich sehe das eigentlich nicht als Abhàngigkeit. Die Oberklasse stellt einige Methoden zur Verfügung, die die Unterklassen gemeinsam verwenden. Der externe Benutzer könnte theoretisch ein Objekt der Oberklasse erzeugen (und kann er in der jetzigen Form auch praktisch), aber das würde ihm überhaupt nichts nutzen, da wesentliche Funktionalitàt erst in den Unterklassen implementiert ist. Deswegen soll in der Oberklasse der Zugriff nur auf die Unterklassen beschrànkt sein.


irb(main):006:0> X.new
X
=> #<X:0x1075a6b0>



ah OK, das ist ja doch einfacher als ich dachte. Dann muß ich das ganze nur noch in eine schicke Methode verpacken.


Sonderlich sicher ist das allerdings nicht, denn jeder kann die Methode
überschreiben und dann ist Deine Sicherheit perdu.



Das macht nichts. Es soll eher gegen unbeabsichtigtes Initiieren der Oberklasse helfen. Wenn jemand unbedingt will, dann kann er natürlich alles überschreiben, aber so jemand weiß dann auch (hoffentlich), was er tut.



Wofür brauchst Du das denn?



In einem Gem von mir (Roo) habe ich eine Klasse, die allgemeine Methoden implementiert, die mit Spreadsheets zu tun haben (beispielsweise cell() um den Inhalt einer Zelle zurückzugeben, oder to_xml() oder to_csv()). Darauf aufbauend gibt es jeweils Klassen, die Excel-Spreasheets oder Openoffice-Spreadsheets implementieren, also z.B. auch das Einlesen der Datei aus einer Datei in eine interne Struktur. Der Benutzer soll also nicht (versehentlich) die allgemeine Klasse verwenden können, weil diese alleine höchst unvollstàndig wàre) sondern diese soll nur den Klassen für eine spezielle Spreadsheet-Art zur Verfügung stehen.

-Thomas
 

Lesen sie die antworten

#1 Robert Klemme
10/06/2011 - 18:14 | Warnen spam
On 10.06.2011 14:06, Thomas Preymesser wrote:
Am Freitag, 3. Juni 2011 13:52:55 UTC+2 schrieb Robert Klemme:

Zunàchst mal ist das etwas verdàchtig, wenn Du in die Oberklasse
eine Abhàngigkeit zu Unterklassen einbaust. Normalerweise sollte
die Abhàngigkeit immer in der anderen Richtung laufen.



Ich sehe das eigentlich nicht als Abhàngigkeit. Die Oberklasse stellt
einige Methoden zur Verfügung, die die Unterklassen gemeinsam
verwenden. Der externe Benutzer könnte theoretisch ein Objekt der
Oberklasse erzeugen (und kann er in der jetzigen Form auch
praktisch), aber das würde ihm überhaupt nichts nutzen, da
wesentliche Funktionalitàt erst in den Unterklassen implementiert
ist. Deswegen soll in der Oberklasse der Zugriff nur auf die
Unterklassen beschrànkt sein.



Ob Du das so siehst oder nicht: es ist eine Abhàngigkeit, denn die
Oberklasse muss die Unterklassen kennen.

irb(main):006:0> X.new X => #<X:0x1075a6b0>



ah OK, das ist ja doch einfacher als ich dachte. Dann muß ich das
ganze nur noch in eine schicke Methode verpacken.



Mit Schleifchen bitte!

Wofür brauchst Du das denn?



In einem Gem von mir (Roo) habe ich eine Klasse, die allgemeine
Methoden implementiert, die mit Spreadsheets zu tun haben
(beispielsweise cell() um den Inhalt einer Zelle zurückzugeben, oder
to_xml() oder to_csv()). Darauf aufbauend gibt es jeweils Klassen,
die Excel-Spreasheets oder Openoffice-Spreadsheets implementieren,
also z.B. auch das Einlesen der Datei aus einer Datei in eine interne
Struktur. Der Benutzer soll also nicht (versehentlich) die allgemeine
Klasse verwenden können, weil diese alleine höchst unvollstàndig
wàre) sondern diese soll nur den Klassen für eine spezielle
Spreadsheet-Art zur Verfügung stehen.



Das kann man aber auch anders entwerfen: es gibt eine
Spreadsheet-Klasse, die die wichtige Funktionalitàt enthàlt. Und dann
gibt es für jedes Lese- und Schreibformat eine Klasse, die die
Konvertierung macht. Dafür brauchst Du dann auch keine Vererbung. Die
kommt höchstens ins Spiel, wenn es Varianten von Formaten gibt, die sich
nur geringfügig unterscheiden (dann zwischen den Konvertern), oder wenn
Du Spreadsheet-Varianten mit unterschiedlicher Funktionalitàt hast.

Ciao

robert

remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Ähnliche fragen