Interaktion zweier Objekte

DrPils

Bekanntes Mitglied
Moin

In OOP sollte man ja im besten Falle die Wirklichkeit abbilden.
Nun ist ja in der echten Welt nicht immer folgender Fall Objekt 1 interagiert mit Objekt 2 gegeben.
Oft ist ja auch Objekt 1 interagiert mit Objekt 2 interagiert mit Objekt 1 der Fall.

Zb wenn ein Mensch 1 einem anderen Mensch 2 einen Gegenstand überreicht, hat Mensch 2 ihn ja nicht einfach , vorher muss Mensch 2 auch diesen Gegenstand annehmen.

Java:
public class Human {

    private String thing;

    public void transferToHuman(Human human) {
        human.thing = thing;
        this.thing = null;
    }

    public static void main(String[] args) {
        Human h1 = new Human();
        h1.thing = "Banana";
        Human h2 = new Human();
        h1.transferToHuman(h2);
    }

}

Der Code ist natürlich nur Unsinn, es geht mir nur darum meine Frage zu verdeutlichen.
Also normalerweise müsste ja ein Mensch auch die Fähigkeit besitzen um Sachen anzunehmen und diese Fähigkeit wird nicht ausgeführt wenn ein anderer Mensch etwas übergeben möchte.
Hoffe man kann verstehen auf was ich hinaus möchte...
 
Also bei der Denkweise musst Du etwas aufpassen:
- Du hast zwar individuelle Instanzen, aber es gibt da kein individuelles Verhalten. Es gibt also nur die Klasse Mensch und die weiss, wie der Transfer abläuft. Du hast somit also nicht eine individuelle Intelligenz sondern eine Intelligenz der Spezies wenn Du so willst.
- Du kannst das mit dem Annehmen natürlich auch praktizieren. Dazu hast Du dann halt sowas wie ein Setter und der kann dann etwas prüfen und reagieren. Somit kann transferToHuman intern den Setter aufrufen und der kann dann durchaus eine Exception werfen - also sozusagen ablehnen.

Aber das ganz wichtige ist in meinen Augen, dass Du als Entwickler sozusagen Gott bist. Und wenn Du den Menschen erschaffen hast, dann hast Du die Regel aufgestellt. Menschen können etwas übergeben und da kann man sich nicht wehren! Das ist also sowas wie ein Naturgesetz...
 
Danke
Dein hilft mir sehr
Und wenn Du den Menschen erschaffen hast, dann hast Du die Regel aufgestellt. Menschen können etwas übergeben und da kann man sich nicht wehren! Das ist also sowas wie ein Naturgesetz...
Danke
Der Vergleich hat mir sehr geholfen, ich nahm "die reale Welt abbilden" ein bisschen zu genau. Aber so macht es Sinn.

Sowas könnte man mit dem Visitor Pattern abbilden
Danke
Es ging mir eher darum ob es nötig ist, für gutes Klassendesign, nicht darum wie man es umsetzt.
 
Danke
Der Vergleich hat mir sehr geholfen, ich nahm "die reale Welt abbilden" ein bisschen zu genau. Aber so macht es Sinn.
Nein...ich glaube, kneitzel meinte das geringfügig anders. Die reale Welt kann man schon abbilden, allerdings stehst du vor dem Problem, wie exakt du sie nachbilden willst.
Natürlich kannst du, wenn du einem Objekt etwas übergeben willst, die Annahme verweigern. Das ist der Hauptgrund, warum man Settermethoden überhaupt verwendet: Um die Übernahme eines Parameters evt. zu korrigieren oder zu verwerfen (oder, falls man das JETZT noch nicht haben will, hat man mit einer Settermethode die Möglichkeit, so etwas nachträglich noch einzubauen).

Java:
public class Mensch{
    
    public void uebergibPaket(Paket paket){
        if(willHaben){
            nehmen(paket);
        }
        //wenn nicht...eben nicht, dann passiert mit 'paket' hier nichts mehr
    }
}

Du wirst die vollständige Realität meistens nicht abbilden, sondern nur der Teil der für dich wichtig ist. Du kannst ein Paket einfach übergeben...und fertig. Wenn nötig, kannst du aber auch differenzieren zwischen "Paket in die Hand drücken", "Paket vor die Tür stellen", "Paket beim Nachbarn abstellen", "Paket an Packstation abgeben", ...
In der Realität wird das Paket sicher eine Farbe haben, aber willst du in deinem Programm zwischen roten und braunen Paketen unterscheiden? Ein Paket hat eine Masse, ist die Masse in deinem Programm interessant? Ist es einfach nur ein Paket, oder ist es noch wichtig welches Verpackungsmaterial verwendet wurde, geschnürt, geklebt, verschweißt?

Du stellst die Regeln auf...welche du wie aufstellst, ist dir überlassen. Die Realität kannst du theoretisch beliebig genau darstellen, und wenn du ein Paket ab Teilchenebene modellieren willst kannst du das gerne machen. Dir wird wahrscheinlich die Rechenleistung der Hardware oder dein eigenes Wissen irgendwann Grenzen setzen...aber theoretisch geht das.
 
In OOP sollte man ja im besten Falle die Wirklichkeit abbilden.
Von der Sichtweise würde ich mich gleich verabschieden. Es geht darum, ein Problem mit Hilfe von Software zu lösen und ein objektorientiertes Modell ist, wie Quellcode, eben ein Modell dieser Software (bzw. des Problems). Ein Modell vereinfacht Dinge und stellt diese ggf. falsch dar, was aber völlig egal ist, so lange es dem Zweck dient.

Mein Lieblingsbeispiel dafür sind Landkarten. Wenn Du z. B. Google Maps oder OpenStreetMap öffnest und Dir die Welt anschaust, wirst Du feststellen, dass Grönland fast so groß wie Afrika angezeigt wird. Die Karte ist also falsch. Das ist aber völlig in Ordnung, denn die Karte dient einem Zweck: Navigation. Bei der Abbildung von 3D auf 2D geht eine Information zwangsweise verloren. Sie kann entweder flächen- oder winkeltreu sein. Navigationskarten sind winkeltreu, weil man dort durch Verbinden zweier Punkte mit einer Linie den Winkel rauslesen kann. Kurz: die Karte ist "falsch", aber optimal für Navigation geeignet.
 

Neue Themen


Zurück
Oben