他暗示了一个事实,即大多数真正的OOP程序都不尊重关注点分离。例如,您可以具有以下类:
public class Banana
{
public Monkey Owner {get;}
}
public class Monkey
{
public Jungle Habitat {get;}
}
public class Jungle
{
}
如果使用Banana
,则必须暂时依赖Monkey
和Jungle
。
但是我完全不同意这是OOP的问题,而某种程度上没有它的功能风格。通过引入权利抽象,可以轻松地在OOP中解决此问题。
问题更多是开发人员不关心关注点分离。而且我不怕断言大多数OOP程序员是新手,而函数式程序员则具有一定的经验,可以激发他们适当地分离代码。
可能的抽象可能是:
public class Banana
{
public IBananaOwner Owner {get;}
}
public interface IBananaOwner
{
}
public class Monkey : IBananaOwner
{
public Jungle Habitat {get;}
}
public class Jungle
{
}
这样,您知道Banana
拥有所有者,但不必一定是Monkey
。可以是任何东西。而且它将Banana
所有者可以做的事情仅限于由定义的操作IBananaOwner
,从而简化了推理。