OOP Aufruf von Methoden höherer Sichtbarkeit

cmrudolph

Gesperrter Benutzer
Hi,

ich habe gerade in einem Buch gelesen, dass eine Methode niemals andere Methoden höherer Sichtbarkeit aufrufen sollte.

Zum einen finde ich diese Aussage viel zu allgemein, denn dann könnte ja kein vollständig gekapseltes Objekt (beispielsweise eine Registry in einem DataMapper) benutzt werden, da dessen Interface naturgemäß öffentlich ist.

Desweiteren habe ich in einem anderen Buch (ist länger her und ich weiß nicht mehr genau welches es war) eine schlüssige Argumentation gelesen, weshalb man nach Möglichkeit immer auf Methoden höherer Sichtbarkeit zugreifen sollte: Es ist ja so, dass sich eine öffentliche Methode so selten wie möglich ändern sollte, weil man die Auswirkungen einer Änderung nicht unter Kontrolle hat, da jeder die Methode nutzen kann. Wie sie intern arbeitet und welche Strukturen sie benutzt ist dabei erstmal egal. Je geringer jedoch die Sichtbarkeit ist, desto eher kann man Methoden auch einmal entfernen oder deren Signatur ändern. Es ist also sinnvoll beispielsweise auch in der Klasse ein Attribut mit dem Getter zu lesen und dem Setter zu setzen, anstatt immer direkt darauf zuzugreifen, weil im Setter beispielsweise auch die Gültigkeit geprüft wird. Außerdem erspart man sich Refakturierungsarbeit, wenn sich die interne Struktur der Klasse ändert - man also beispielsweise eine andere Datenstruktur zum speichern von Daten verwendet.

Diese beiden Aussagen stehen im Widerspruch zueinander und ich kann die erste ehrlich gesagt nicht nachvollziehen. Welche Argumente sprechen dafür?

Viele Grüße
Christian
 
S

SlaterB

Gast
es gibt bei Sichtbarkeiten keine geographische Anordnung nach Höhenstufen, insofern ist schon unklar was genau gemeint ist,
ist private höher oder tiefer als protected?

wirre Aussagen aufzustellen kann auch jeder 'ein getter darf man nur mit einem t schreiben',
so ist das jetzt hier auch mit Argumenten für und wider zu diskutieren? ;)

Sichtbarkeiten haben eine fundierte Grundlage um Aufrufe etwas einzuschränken,
wer von wo welche Sichtbarkeit aufrufen kann ergibt sich aus den Regeln, was ist dann noch offen?
was man wo einsetzen sollte ist sicher ein Thema, aber technisch ist die Funktionalität doch ohne Rätsel

edit:
oh, ich habe
'dass eine Methode niemals andere Methoden höherer Sichtbarkeit aufrufen kann.'
statt
'dass eine Methode niemals andere Methoden höherer Sichtbarkeit aufrufen sollte.'
gelesen, schade, umsonst gemeckert
 
Zuletzt bearbeitet von einem Moderator:

cmrudolph

Gesperrter Benutzer
es gibt bei Sichtbarkeiten keine geographische Anordnung nach Höhenstufen, insofern ist schon unklar was genau gemeint ist,
ist private höher oder tiefer als protected?
Was vom Autor als höher und niedriger deklariert wurde, habe ich hier weggelassen, da ich diese Definition plausibel fand: je höher die sichtbarkeit, desto mehr Objekte können sie verwenden. Eine private Methode ist also weniger sichtbar als eine öffentliche.

Sichtbarkeiten haben eine fundierte Grundlage um Aufrufe etwas einzuschränken,
wer von wo welche Sichtbarkeit aufrufen kann ergibt sich aus den Regeln, was ist dann noch offen?
was man wo einsetzen sollte ist sicher ein Thema, aber technisch ist die Funktionalität doch ohne Rätsel

Die Funktionalität ist klar. Es geht genau darum, wie man seinen Code wartbar hält und die Möglichkeiten nutzt, die einem erlaubt sind. Ich denke mein obiges Beispiel mit dem Setter veranschaulicht es schon ganz gut: es gibt zwei Möglichkeiten:
  1. ich greife direkt auf das private Feld zu
  2. ich verwende den Setter um das Feld zu ändern

Edit:
Um welches Buch geht es denn?
Der Weg zum Java-Profi von Michael Inden.
Edit2: S. 35 der Tipp, im korrigierten Nachdruck der ersten Auflage.
 
Zuletzt bearbeitet:
S

Spacerat

Gast
ich habe gerade in einem Buch gelesen, dass eine Methode niemals andere Methoden höherer Sichtbarkeit aufrufen sollte.
Da würde ich aber fluchs noch mal nach lesen, denn stimmen kann das nicht. Höhere Sichtbarkeit bedeutet wohl mehr Zugriffsrechte, das heisst public ist wohl am sichtbarsten. Das ich auf protected und private nicht immer Zugriff habe, ist klar. Aber was mache ich denn in einer private-Methode, wenn du dich nicht verlesen hast? Etwa keine einzige Methode mehr aufrufen?
[EDIT]Leseprobe mit besagter Stelle gefunden: http://www.dpunkt.de/leseproben/3314/4_Objektorientiertes Design.pdf
...und er hat sich nicht verlesen. Aber hey... das's Blödsinn, oder was? ;)[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

cmrudolph

Gesperrter Benutzer
Aber was mache ich denn in einer private-Methode, wenn du dich nicht verlesen hast? Etwa keine einzige Methode mehr aufrufen?

Keine einzige Methode mehr ist ja nicht ganz richtig. Wahrscheinlich hat die Klasse weitere private Methoden. Siehe auch meine Argumentation im ersten Posting, dort habe ich das Beispiel einer eingebetteten Registry genannt.

Mich wundert es nur, dass in einem Buch, das hier im Forum empfohlen wird und das auch bei Amazon derartig gute Rezensionen bekommen hat, so ein Pauschaltipp steht, der meines Erachtens nach falsch ist.
 

fifo

Mitglied
In den o.g. Buch heiß es vorher:
Um den Sourcecode übersichtlich zuhalten, sollten sich öffentliche Methoden aus Methodenaufrufen anderer Sichtbarkeiten zusammensetzen und wenig Implementierungsdetails zeigen. Zudem sollten Methoden niemals andere Methoden höherer Sichtbarkeit aufrufen; eine private Methode "darf" demnach keine öffentliche Methode aufrufen.

Ich verstehe das jetzt so, dass eine öffentliche Methode "nur" eine oder mehrere private Methoden aufrufen sollte. Die eigentliche Implementierung in einer privaten Methode stehen soll. Daraus würde sich ergeben, dass eine öffentliche immer zu einer privaten Methode weiterleitet. Der Grund für diesen Tipp erschießt sich mir im Moment aber auch nicht.
 
B

bone2

Gast
equals() und toString() sind public oder? das machts schwierig...

aber ist das vielleicht nur innerhalb einer klasse gemeint? wo man der übersichtlichkeit halber oft mehre private methoden in einer public verwendet, um die einzelne methode nicht zu lang werden zu lassen.
 
S

Spacerat

Gast
Ich verstehe das jetzt so, dass eine öffentliche Methode "nur" eine oder mehrere private Methoden aufrufen sollte. Die eigentliche Implementierung in einer privaten Methode stehen soll. Daraus würde sich ergeben, dass eine öffentliche immer zu einer privaten Methode weiterleitet. Der Grund für diesen Tipp erschießt sich mir im Moment aber auch nicht.
Der Grund dafür wird dir vllt. klarer, wenn du dir z.B. mal die "Unfälle" im Quelltext der Component-Klasse aus dem AWT-Api anschaust. Versuch' mal vernünftig (also ohne @Deprecated) z.B. die "setBounds()"-Methode zu überschreiben, in deiner Klasse als final zu markieren während du deine Klasse aber erweiterbar lässt. Der nächste, der sie erweitert, kommt vllt. auf den Gedanken und überschreibt "reshape()" und sch... dir mit deinem "final" auf den Kopf. Hätte man aus "setBounds()" heraus gleich eine Methode aufgerufen, die nicht erst noch wieder durch 'ne andere überschreibbare Methode geht, hätte man diesen Ärger nicht.
Wenn ich aber aus einer privaten Methode eine sichtbarere aufrufe, sorge ich unter Umständen dafür, dass diese öffentliche Methode vernünftig überschrieben werden muss, weil in der privaten sonst 'ne Exception fliegt.
Ausserdem... aus welcher Art Methode werden eigentlich vorwiegend öffentliche abstrakte Methoden aufgerufen? Aus private bzw. protected Methoden, oder seh' ich das falsch?
Von daher... in die Richtung von public nach private macht der Tip durchaus Sinn, aber in die andere Richtung halt nicht.
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
Um den Sourcecode übersichtlich zuhalten, sollten sich öffentliche Methoden aus Methodenaufrufen anderer Sichtbarkeiten zusammensetzen und wenig Implementierungsdetails zeigen.
Das sehe ich so genauso.

Aber das private Methoden keine public Methoden aufrufen dürfen... hmmm... da fallen mir auch ein paar Ausnahmen ein...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
H Aufruf von Methoden durch Methoden Java Basics - Anfänger-Themen 3
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
D Interface Wieso Aufruf aller Methoden eines Interfaces? Java Basics - Anfänger-Themen 11
O Frage zum Aufruf überladener Methoden Java Basics - Anfänger-Themen 4
W Zeitversetzter Aufruf der Methoden Java Basics - Anfänger-Themen 6
D Array Methoden Aufruf. Java Basics - Anfänger-Themen 14
M OOP Aufruf vieler Getter Methoden abkürzen? Java Basics - Anfänger-Themen 7
T Aufruf einer Methoden aus einer Util-Klasse mit privatem Konstruktor Java Basics - Anfänger-Themen 7
L Methoden aufruf Java Basics - Anfänger-Themen 3
M methoden aufruf klappt nicht Java Basics - Anfänger-Themen 6
N Methoden aufruf Java Basics - Anfänger-Themen 7
K Methoden aufruf von einer anderen Klasse Java Basics - Anfänger-Themen 7
F Aufruf von Methoden hintereinander gechachtelt??? Java Basics - Anfänger-Themen 8
F Methoden Aufruf Java Basics - Anfänger-Themen 4
G (Anfängerproblem) Problem mit dem Aufruf von public-Methoden Java Basics - Anfänger-Themen 3
M Methoden aufruf mit optionalen Parametern! Java Basics - Anfänger-Themen 4
G Methoden Aufruf Java Basics - Anfänger-Themen 2
A Problem: Aufruf von Methoden mit Variablen Java Basics - Anfänger-Themen 7
J Threads gemeinsamer Methoden Aufruf Java Basics - Anfänger-Themen 3
R Frage zu Thread und aufruf von Methoden Java Basics - Anfänger-Themen 2
G Aufruf von Methoden Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Erste Schritte Stream-Aufruf vereinfachen Java Basics - Anfänger-Themen 3
sashady ursprüngliche Array-Werte bei erneutem Aufruf? Java Basics - Anfänger-Themen 7
Y Aufruf von Methode nicht möglich. Java Basics - Anfänger-Themen 2
D Aufruf von mehreren Activities bringt die app zum Absturz Java Basics - Anfänger-Themen 5
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
B OOP While Schleife läuft Endlos durch externen aufruf Java Basics - Anfänger-Themen 2
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
H Rekursiver Aufruf Java Basics - Anfänger-Themen 8
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
D Interface Frame doppelt durch Aufruf der GUI Klasse Java Basics - Anfänger-Themen 1
Henri Aufruf von getX() und getY() aus der Super klasse Objekt() Java Basics - Anfänger-Themen 3
E Aufruf auf Objekt mit übergebenem Wert? Java Basics - Anfänger-Themen 7
D Aufruf einer statischen Variable Java Basics - Anfänger-Themen 1
D Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 39
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
M Speichern von Objekten - Verfügbarkeit bei erneutem Aufruf Java Basics - Anfänger-Themen 3
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
P Aufruf Methode anderer Klasse Java Basics - Anfänger-Themen 5
J Klassen Reihenfolge beim Aufruf von Klassen Java Basics - Anfänger-Themen 1
V Problem Aufruf einer Methode in einer Methode Java Basics - Anfänger-Themen 1
G funktions Aufruf aus GUI Java Basics - Anfänger-Themen 9
A Fehlermeldung beim aufruf der main Methode Java Basics - Anfänger-Themen 17
I Rückgabe und Aufruf einer Methode innerhalb einer anderen Methode Java Basics - Anfänger-Themen 5
M Unbekannte Nummer bei Aufruf der toString Methode Java Basics - Anfänger-Themen 3
D Methode mit mehren Rekursiven aufrufen in Methode mit einem Rekursiven Aufruf umwandeln! Java Basics - Anfänger-Themen 1
F signiertes Applet fkt. nicht bei lokalem Aufruf Java Basics - Anfänger-Themen 2
A externer repaint Aufruf Java Basics - Anfänger-Themen 9
H Aufruf einer Instanzmethode funktionert nicht. Java Basics - Anfänger-Themen 6
A Konstruktor Aufruf Java Basics - Anfänger-Themen 4
Pentalon Ein Aufruf den ich nicht verstehe Java Basics - Anfänger-Themen 11
D dynamischer Aufruf Java Basics - Anfänger-Themen 2
N Aufruf der Methode Java Basics - Anfänger-Themen 16
L Next()-Aufruf zweimal innerhalb einer While-Schleife bei ListIterator Java Basics - Anfänger-Themen 10
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
A Aufruf der paint() Methode Java Basics - Anfänger-Themen 3
K Problem beim Array aufruf Java Basics - Anfänger-Themen 4
P URL für Lokalen Aufruf Java Basics - Anfänger-Themen 5
T Client-Fenster bei Aufruf unvollständig Java Basics - Anfänger-Themen 12
S Überladener Konstruktor und aufruf aus eigener Klasse Java Basics - Anfänger-Themen 2
A Aufruf von Konstruktor aus Basisklasse Java Basics - Anfänger-Themen 7
O OOP super aufruf 2 objekte? Java Basics - Anfänger-Themen 3
L Klassen Aufruf einer ueberschreibbaren Methode im Konstruktor Java Basics - Anfänger-Themen 4
Q Aufruf einer Klasse in einem Package Java Basics - Anfänger-Themen 7
C Aufruf funktioniert nicht Java Basics - Anfänger-Themen 10
G Aufruf externer Funktionen Java Basics - Anfänger-Themen 7
C Exception beim Aufruf einer Methode Java Basics - Anfänger-Themen 2
A Aufruf einer Methode Java Basics - Anfänger-Themen 3
J Aufruf von Funktionen in *.jar mittels Eclipse Java Basics - Anfänger-Themen 4
T Shell Script Aufruf mit Java Java Basics - Anfänger-Themen 7
R Aufruf statische Methode Java Basics - Anfänger-Themen 7
M Aufruf zum Objekt erstellen aus String Java Basics - Anfänger-Themen 5
K OOP Nachteil bei direktem Aufruf von run() auf Thread-Objekten Java Basics - Anfänger-Themen 2
J Aufruf der Methode Java Basics - Anfänger-Themen 6
P OOP Aufruf eines Interfaces Java Basics - Anfänger-Themen 4
E Konstruktor-Aufruf Java Basics - Anfänger-Themen 9
C Aufruf einer Funktion Java Basics - Anfänger-Themen 3
W Multiplikation mit rekursivem Aufruf Java Basics - Anfänger-Themen 17
C exec Aufruf mit Leerzeilen im Pfad Java Basics - Anfänger-Themen 3
M Frage zum Aufruf eines Applets aus einer HTML - Datei Java Basics - Anfänger-Themen 3
S super() aufruf ausgabe Java Basics - Anfänger-Themen 3
L Mehrere Objekte einer Klasse aber nur einmal Konstruktor aufruf? Java Basics - Anfänger-Themen 2
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
E Mehrfache print ausgabe ohne Schleife oder Rekursiven aufruf? Java Basics - Anfänger-Themen 48
radiac CMD Windowskonsole und java aufruf in Vista 64 Java Basics - Anfänger-Themen 2
D Aufruf von WGET aus Java Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben