그는 실제 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
추론이 간단 해집니다.