lose Bindung/Koppelung von Klassen -ja wie jetzt?

Status
Nicht offen für weitere Antworten.
H

HannesG

Gast
Hallo,

wenn ich 2 klassen habe die gegenseitig Methoden von sich aufrufen, MUSS ich ja jeder Klasse ein Objekt der anderen Klasse mitgeben sonst geht das ja gar net... Wo ist das jetzt die lose Koppelung?
 
S

SlaterB

Gast
Kopplung im Sinn von objektorientierter Programmierung (OOP) beschreibt den Grad der Abhängigkeiten zwischen Klassen. Man strebt für ein System eine möglichst lose Kopplung an, also ein System, in dem jede Klasse weitgehend unabhängig ist und mit anderen Klassen nur über möglichst schmale, wohldefinierte Schnittstellen kommuniziert. Lose Kopplung wird unter anderem durch Kapselung erreicht.
http://de.wikipedia.org/wiki/Kopplung_(Softwareentwicklung)

wenn sich also die Objekte gegenseitig nur als Interface kennen,
dann ist die Kopplung etwas loser als sonst,
 
H

HannesG

Gast
SlaterB hat gesagt.:
Kopplung im Sinn von objektorientierter Programmierung (OOP) beschreibt den Grad der Abhängigkeiten zwischen Klassen. Man strebt für ein System eine möglichst lose Kopplung an, also ein System, in dem jede Klasse weitgehend unabhängig ist und mit anderen Klassen nur über möglichst schmale, wohldefinierte Schnittstellen kommuniziert. Lose Kopplung wird unter anderem durch Kapselung erreicht.
http://de.wikipedia.org/wiki/Kopplung_(Softwareentwicklung)

wenn sich also die Objekte gegenseitig nur als Interface kennen,
dann ist die Kopplung etwas loser als sonst,

Code:
public class Eins
{
     public Eins()
    {

    }

}



public class Zwei
{
     public Zwei()
    {

    }  

}

kannst du mir zeigen, wie ich das mit den interfaces bei obigen Beispielklassen mache?
 

Tobias

Top Contributor
Code:
public interface Action {

    public void doIt();

}

Code:
public class Eins {

    public Eins(Action a) {
        a.doIt();
    }

}

Code:
public class Zwei implements Action {

    public void doIt() {
        System.out.println("Do it!");
    }

}

Code:
public class Starter {

    public static void main(String[] args) {
        new Eins(new Zwei());
    }

}

Statt Zwei könnte man Eins auch eine beliebige andere Action-Implementierung übergeben, deshalb "lose Kopplung".

mpG
Tobias
 
H

HannesG

Gast
public class Eins {

public Eins(Action a) {
a.doIt();
}

}

was ich hier net verstehe, a ist ein Objekt eines Interface ohne new Operator ??? und a.doIt() führt eine Methode aus, obwohl die noch gar net überschrieben ist??? und class Eins implementiert gar nix ??

Versteh ich net ???:L
 

diggaa1984

Top Contributor
Code:
public interface Action {
    public void doIt();
}

public class SimpleAction implements Action {

    public SimpleAction() { ... }

    public void doIt() {
        System.out.println("SimpleAction hat was gemacht");
    }
}

klasse SimpleAction implementiert das interface, und definiert daher die Methode doIt des Interfaces.

Code:
public class Test {

    public static void main(String[] args) {
        Eins e = new Eins(new SimpleAction());
    }
}

in dem Moment übergibst du Eins beim Aufruf des Kontruktors ein Objekt welches das Interface realisiert. Somit kann e im Konstruktor die Methode des Action-Objektes aufrufen
 

ARadauer

Top Contributor
was ich hier net verstehe, a ist ein Objekt eines Interface ohne new Operator ??? und a.doIt() führt eine Methode aus, obwohl die noch gar net überschrieben ist??? und class Eins implementiert gar nix ??

Versteh ich net

Eins erbt nichit von zwei, es muss auch keine Methode überschrieben werden. Ein Objekt von Zwei wird Eins mitgegeben. das new findest du in der Klasse Starter...
 
H

HannesG

Gast
Eins erbt nichit von zwei, es muss auch keine Methode überschrieben werden. Ein Objekt von Zwei wird Eins mitgegeben. das new findest du in der Klasse Starter...

Ok jetzt wurde es mir auch klarer stimmt das new ist ja i Konstruktor aufgerufe ok dank euch, mal schauen wo ich das wissen jetzt umsetzte :)
 

ARadauer

Top Contributor
Grob ein Anwendungszweck:
Du hast eine Gui und ein Model Klasse für die Daten, ändern sich die Daten woll die Gui darüber informiert werden, sprich Model ruft eine Methode von Gui auf. Das Model hat nun ein Objekt von Gui. Tja, was ist jetzt, wenn du mehrer Guis (Ansichten) hast? zb in Excel die Tabellen Ansicht und ein Diagram.

Du könntest nun die Gui ein Interface implementieren lassen, dass die Methode beinhaltet, dass das Model bei geänderten Daten aufruft. Dieses Interface kann jetzt auch von anderen Guis implementiert werden und das Model kann eine ganze Liste von utnerschiedlichen Guis beinhalten, die bei einer änderung informiert werden sollen. Durch die Impelmentierung auf das Interface sind die Elemente lose gekoppelt. Das Model weiß nicht genau ob die Gui jetzt eine Tabelle oder ein Diagramm ist, es weis nur dass es, durch das Interface, ganz sicher ein Methode (zb werteGeändert();) implementiert...usw blablaba
 
H

HannesG

Gast
ARadauer hat gesagt.:
Grob ein Anwendungszweck:
Du hast eine Gui und ein Model Klasse für die Daten, ändern sich die Daten woll die Gui darüber informiert werden, sprich Model ruft eine Methode von Gui auf. Das Model hat nun ein Objekt von Gui. Tja, was ist jetzt, wenn du mehrer Guis (Ansichten) hast? zb in Excel die Tabellen Ansicht und ein Diagram.

Du könntest nun die Gui ein Interface implementieren lassen, dass die Methode beinhaltet, dass das Model bei geänderten Daten aufruft. Dieses Interface kann jetzt auch von anderen Guis implementiert werden und das Model kann eine ganze Liste von utnerschiedlichen Guis beinhalten, die bei einer änderung informiert werden sollen. Durch die Impelmentierung auf das Interface sind die Elemente lose gekoppelt. Das Model weiß nicht genau ob die Gui jetzt eine Tabelle oder ein Diagramm ist, es weis nur dass es, durch das Interface, ganz sicher ein Methode (zb werteGeändert();) implementiert...usw blablaba

ist das nicht das Observer Pattern, dass du gerade beschreibst?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben