Supposons que j'ai une définition pour une porte:OOD et sujet-objet confusion
class Door
{
public void Lock()
{
// lock the door
}
}
Cela semble faire du sens pour moi, au moins pendant un certain temps. Mais maintenant, je ne suis pas si sûr. Si j'avais un objet Personne qui voulait verrouiller une Porte, il appellerait aDoor.Lock(). Mais dans la vraie vie, nous ne verrouillons pas les portes en disant à la porte de se verrouiller.
Il semblerait qu'un modèle plus précis de la situation serait la personne capable de modifier directement l'état de l'air, à condition qu'il ait suffisamment de puissance pour verrouiller les portes. Par exemple, aCat ne devrait pas pouvoir définir aDoor.IsLocked = true. Je pouvais voir comment faire cela avec des propriétés, si elles pris en charge les paramètres:
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);
}
Au lieu de cela, ce que nous pouvons faire est la suivante:
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;
}
}
}
Il est évident que ces deux classes sont fortement couplés et les deux aurait probablement interfaces extraites dans le code réel, mais ce n'est pas ce que je veux dire. Ma question est, est-ce une meilleure façon de modéliser la relation entre les deux objets? Y a-t-il un moyen encore meilleur que celui-ci? Plus j'y pense, moins j'ai le sens de aDoor.Lock() que je peux faire; il semble violer la conception orientée objet.
bien dit - tapé plus vite que moi! –
Il est utile d'avoir essayé d'enseigner ce concept pendant environ 4 ou 5 ans;) Permettez-moi de vous dire, vous trouverez finalement beaucoup d'exemples pour essayer d'obtenir le concept de POO à travers – aperkins