Angenommen, ich habe eine Definition für eine Tür:OOD und Subjekt-Objekt Verwirrung
class Door
{
public void Lock()
{
// lock the door
}
}
Dies erschien mir sinnvoll, zumindest für eine Weile zu machen. Aber jetzt bin ich mir nicht so sicher. Wenn ich ein Person-Objekt hätte, das eine Tür sperren wollte, würde er aDoor.Lock() anrufen. Aber im wirklichen Leben verriegeln wir keine Türen, indem wir der Tür sagen, dass sie sich selbst abschließen soll.
Es scheint, als wäre ein genaueres Modell der Situation die Person, die in der Lage wäre, den Zustand von aDoor direkt zu modifizieren, vorausgesetzt, er hat genügend Kraft, um Türen zu verriegeln. Zum Beispiel sollte aCat nicht in der Lage sein, aDoor.IsLocked = true zu setzen. Ich konnte sehen, wie diese mit Eigenschaften zu tun, wenn sie Parameter unterstützt:
class Person
{
public void LockDoor(Door door)
{
door.IsLocked(this) = true;
}
}
class Door
{
bool isLocked;
public bool IsLocked(Person person)
{
set
{
if(person != null) // ensure there is a real person trying to lock the door
{
this.isLocked = value;
}
}
}
}
static void Main()
{
Person personFromThinAir = new Person();
Door doorFromThinAir = new Door();
personFromThinAir.LockDoor(doorFromThinAir);
}
Statt dessen, was wir tun können, ist dies:
class Person
{
public void LockDoor(Door door)
{
door.SetLocked(this, true);
}
}
class Door
{
bool isLocked;
public void SetLocked(Person person, bool locked)
{
if(person != null)
{
this.isLocked = locked;
}
}
}
Offensichtlich sind diese beiden Klassen stark gekoppelt sind und beide würden wahrscheinlich Schnittstellen, die im eigentlichen Code extrahiert wurden, aber das ist nicht das, woran ich mich stütze. Meine Frage ist, ist dies eine bessere Möglichkeit, die Beziehung zwischen den beiden Objekten zu modellieren? Gibt es einen noch besseren Weg? Je mehr ich darüber nachdenke, desto weniger Sinn für eine Tür.Lock() kann ich machen; es scheint objektorientiertes Design zu verletzen.
gut gesagt - tippte es schneller als ich! –
Es hilft, tatsächlich versucht zu haben, dieses Konzept für ungefähr 4 oder 5 Jahre auch beizubringen;) Lassen Sie mich Ihnen sagen, Sie finden viele Beispiele schließlich, um zu versuchen und das Konzept von OOP durch zu bekommen – aperkins