彼は、実際の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
、推論を簡素化します。