OOP this-Referenz als Konstruktor-Übergabe

skummy

Aktives Mitglied
Hallo,

mehr oder weniger eine Stil-Frage, da es (natürlich) funktioniert:

Java:
public class DataModule {

   // [...]

    public String getVersion() throws IOException {
	ModuleVersionHandler h = new ModuleVersionHandler(this);
	return h.getVersionHistory();
    }
}


Die erzeugten Objekte der Klasse DataModule enthalten Methoden, die notwendig sind um die Berechnungen der Methode "getVersionHistory()" der ModuleVersionHandler-Klasse durchzuführen. Also dachte ich mir, dass ich gleich das komplette Objekt der DataModule-Klasse übergebe, anstatt 4 Parameter.
Natürlich könnte ich auch die Berechnungen in der Klasse DataModule durchführen, aber diese Klasse soll eigentlich nur Daten zur Verfügung stellen und keine Berechnungen durchführen.

Kurzum:
Kann man sowas machen oder sollte man aus bestimmten Gründen, solche Konstrukte eher vermeiden?


Grüße
 
M

maki

Gast
aber diese Klasse soll eigentlich nur Daten zur Verfügung stellen und keine Berechnungen durchführen.
Eine der Grundlagen der OOP ist, dass Daten & Funktionen die auf diesen Daten operieren zusammengehören, als Objekt.

Natürlich gibt es immer wieder Ausnahmen, in denen man diese Trennung eben doch will und damit prozedural programmiert, aber in OO Sprachen ist es nicht die Norm ;)
 

Landei

Top Contributor
Richtig "sauber" ist das nur, wenn die aufgerufene Klasse ein Interface erwartet, und die aufrufende Klasse dieses implementiert. Ansonsten "weiß" die aufgerufene Klasse zuviel über aufrufende, d.h. du hast eine zu starke Kopplung.

Typisches Beispiel wäre ein Callback-Mechanismus:

Java:
public interface Callback {
   public void onSuccess(int result);
   public void onError(Exception ex);
}

public class Foo implements Callback {
   public Foo(int x, int y) {
      new AsynchCalculator(this,x,y).start();
   }

   public void onSuccess(Result result){ ...}
   public void onError(Exception ex){ ...}
   
}

public class AsynchCalculator implements Runnable {
    private final int x; 
    private final int y; 
    private final Callback callback;
 
    public AsynchCalculator(Callback callback, int x, int y) {
       this.x = x;
       this.y = y; 
       this.callback = callback;
    }
  
    public void start() {
       new Thread(this).start();
    }

    public void run() {
        try {
           callback.onSuccess(x/y);
        } catch(Exception ex) {
           callback.onError(ex);
        }
    }
}
 

skummy

Aktives Mitglied
Hmmm, okay. Ich persönlich halte von Interfaces in kleinen Projekten relativ wenig. Was es nützt mir, wenn ich zu jeder Klasse in Interface (IKlasse) erzeuge, das weiterhin nur angibt, was für Methoden die Klasse implementiert? Es existiert eh immer nur eine konkrete Implementierung zu der Klasse.

Der Mehraufwand und Nutzen, das Interface UND die Klasse zu erweitern, wenn ich eine neue Methode erstelle oder eine vorhandene anpasse, steht für mich in keinen positiven Zusammenhang. Ich muss immer zwei Dateien anpassen...das nervt.

Aber ich denke, dass hat nichts mit dem Thema hier zu tun.

Trotzdem danke für die Hinweise :)!
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
wenn du schon von Design und Stil und Konstrukt und ähnlich allgemein fragst,
ist es ein wichtiger ergänzender Hinweis, also genau passend hier im Thema,

dass für dich der Aufwand bisher den Nutzen nicht ausreichend schätzen läßt, ist ja legitim,
es gibt viele Ideen/ Details, du wählst die passenden

> Es existiert eh immer nur eine konkrete Implementierung zu der Klasse.

das gilt vielleicht bei dir in einem Fall, aber nicht im angesprochenen allgemeinen Konzept
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Hmmm, okay. Ich persönlich halte von Interfaces in kleinen Projekten relativ wenig.

Das wird sich noch ändern :hihi: (Spätestens, wenn eins dieser kleinen Projekte mal einen Hauch größer wird, und du dir denkst: "Ach Mist, hätte ich diese Klasse nur als Interface geschrieben" (umgekehrt habe ich das noch nie gedacht ... ;))

Ich muss immer zwei Dateien anpassen...das nervt.

Abgesehen davon, dass man schon auf basis des Interfaces das meiste planen kann (und sollte) schafft eine moderne ID diese Anpassungen beim Refactoring automatisch.
 

steffomio

Mitglied
Das wird sich noch ändern :hihi: (Spätestens, wenn eins dieser kleinen Projekte mal einen Hauch größer wird, und du dir denkst: "Ach Mist, hätte ich diese Klasse nur als Interface geschrieben" (umgekehrt habe ich das noch nie gedacht ... ;))
Das sollte man im voraus wissen, wie groß das Projekt mal werden wird. Ansonsten es kein Projekt mit fest gestecktem Ziel ist, sondern eine unkalkulierte Spielerei, nicht mal ein Experiment.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
MiMa Referenz auf Objekte und deren Inhalte Allgemeine Java-Themen 12
kodela Übergabe einer Referenz Allgemeine Java-Themen 20
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
M Compiler-Fehler Methoden-Referenz Allgemeine Java-Themen 5
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
Y POI auf eine Referenz (Datei/Internetseite) anwenden Allgemeine Java-Themen 9
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
D Referenz einer Funktion aus einer anonymen Klasse? Allgemeine Java-Themen 3
P Threads ohne Referenz & der Garbage Collector Allgemeine Java-Themen 2
K Als Rückgabewert ode call by referenz was ist sauberer? Allgemeine Java-Themen 12
A Observer Pattern: feuern bei neuer Referenz-Zuweisung? Allgemeine Java-Themen 8
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
T Interface-Referenz Allgemeine Java-Themen 2
K ArrayList Referenz Allgemeine Java-Themen 8
MQue this- Referenz Allgemeine Java-Themen 4
G referenz von variablen Allgemeine Java-Themen 9
T Referenz und GC? Allgemeine Java-Themen 16
T JNI Referenz auf Variable in Java? Allgemeine Java-Themen 2
MQue Datei- referenz schließen Allgemeine Java-Themen 5
S Referenz auf Funktion? Allgemeine Java-Themen 16
P call by value/referenz Allgemeine Java-Themen 4
S Stream ohne Referenz kopieren ? Allgemeine Java-Themen 4
G Referenz und Garbagecollector Allgemeine Java-Themen 4
D Map: Referenz oder Int-ID als key speichern? Allgemeine Java-Themen 11
M Stil-Frage: this-Referenz Allgemeine Java-Themen 38
B wird Vektor als Referenz übergeben? Allgemeine Java-Themen 5
G 2 Objekte der selben Klasse zusammenfügen und alte Referenz Allgemeine Java-Themen 19
V Übergabe per Referenz. Allgemeine Java-Themen 5
G Eine C/C++ Referenz in einem Java Object speichern Allgemeine Java-Themen 5
G Referenz auf Variable! Allgemeine Java-Themen 3
F array als referenz/werteparameter übergeben? Allgemeine Java-Themen 2
M Referenz wird nicht überschrieben? Allgemeine Java-Themen 2
C GC: Referenz entfernen Allgemeine Java-Themen 6
K Referenz löschen Allgemeine Java-Themen 3
T Exception im Constructor -> null-Referenz zurückgeben Allgemeine Java-Themen 6
B Parameter Konstruktor plus rechnen Allgemeine Java-Themen 6
M Konstruktor einer Methode Allgemeine Java-Themen 35
M Frage zum Konstruktor Allgemeine Java-Themen 2
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
J Konstruktor in JSP beim Kompilieren nicht gefunden Allgemeine Java-Themen 3
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
H Beim Konstruktor "this" Allgemeine Java-Themen 4
K Variablen Konstruktor, unendlich viele Allgemeine Java-Themen 3
T Konstruktor löst exception aus Allgemeine Java-Themen 7
C Klassen und Konstruktor Allgemeine Java-Themen 2
W Threads NullPointer: Konstruktor "zu langsam"? Allgemeine Java-Themen 3
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
C Reflektions, Benutzer soll Konstruktor auswählen und Parameter übergeben können Allgemeine Java-Themen 5
ruutaiokwu NullPointerException auf member, die per konstruktor gesetzt wird (multithread-kontext) Allgemeine Java-Themen 2
ruutaiokwu auf priv. konstruktor von "aussen" zugreifen? Allgemeine Java-Themen 4
A Methoden laufen im Konstruktor, außerhalb allerdings nicht Allgemeine Java-Themen 2
E Array im Konstruktor übergeben Allgemeine Java-Themen 3
A Reflection Konstruktor Parameter Supertyp Allgemeine Java-Themen 2
X Dynamisch Konstruktor aufrufen Allgemeine Java-Themen 12
J abstrakte Klassen, Konstanten und Konstruktor Allgemeine Java-Themen 9
E Finale Attribute und Konstruktor Allgemeine Java-Themen 3
S Konstruktor ermitteln Allgemeine Java-Themen 3
B Konstruktor wird nicht aufgerufen Allgemeine Java-Themen 4
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
B Konstruktor - Vererbungsproblem Allgemeine Java-Themen 2
S konstruktor vererben Allgemeine Java-Themen 5
B Problem mit Methodenaufruf in Konstruktor Allgemeine Java-Themen 6
D [SOLVED] Collection wird nicht richtig per Konstruktor übernommen Allgemeine Java-Themen 8
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
M Konstruktor / statischer Block Allgemeine Java-Themen 13
Ark Konstruktor per Reflection nicht bekannt Allgemeine Java-Themen 4
J Klasse auf Konstruktor oder Methode testen? Allgemeine Java-Themen 3
Junktyz Konstruktor Allgemeine Java-Themen 9
T Schleife im Konstruktor? Allgemeine Java-Themen 9
conan2 super-super-Konstruktor? Allgemeine Java-Themen 3
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
MQue zaehlen im Konstruktor Allgemeine Java-Themen 3
V Initialisierung nur im Konstruktor? Allgemeine Java-Themen 14
J Konstruktor-Aufruf nur aus einem bestimmten Package erlauben Allgemeine Java-Themen 5
T Konstruktor von Hashtable unter Java 5.0! Allgemeine Java-Themen 3
M Feld initialisieren, direkt oder Konstruktor Allgemeine Java-Themen 2
D super-Konstruktor ist nicht super ;) Allgemeine Java-Themen 6
A Objektmethode aus Konstruktor aufrufen? Allgemeine Java-Themen 14
7 Konstruktor Allgemeine Java-Themen 12
M Konstruktor, der Excpetions wirft Allgemeine Java-Themen 2
H Super-Konstruktor Allgemeine Java-Themen 7
A Exception in Konstruktor - trotzdem wird Objekt erzeugt! Allgemeine Java-Themen 3
S Konstruktor vererben Allgemeine Java-Themen 9
thE_29 String Konstruktor - Umwandlungsprobleme Allgemeine Java-Themen 5
J Probleme mit dem Konstruktor Allgemeine Java-Themen 8
G Konstruktor-Aufruf nun mit oder ohne Typ? Allgemeine Java-Themen 9
D Kein public Konstruktor Allgemeine Java-Themen 4
K Exception im Konstruktor / Objekt == null Allgemeine Java-Themen 7
S konstruktor nur innerhalb der klasse aufrufbar Allgemeine Java-Themen 5
S konstruktor im interface Allgemeine Java-Themen 5
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18

Ähnliche Java Themen

Neue Themen


Oben