실제로 OO 코드는 재사용이 훨씬 적으며 의도적으로 설계된 것입니다. OOP의 기본 개념은 특정 데이터 조각에 대한 작업을 클래스 또는 상속 계층의 적절한 위치에있는 특정 권한있는 코드로 제한하는 것입니다. 이것은 변경의 부작용을 제한합니다. 데이터 구조가 변경되면 코드에서 책임질 수있는 위치가 너무 많습니다.
불변성을 사용하면 데이터 사본을 변경할 수있는 사람이 없기 때문에 주어진 데이터 구조를 누가 조작 할 수 있는지는 신경 쓰지 않아도됩니다. 이를 통해 기존 데이터 구조에서보다 쉽게 작업 할 수있는 새로운 기능을 만들 수 있습니다. 단지 기능을 만들어 도메인 관점에서 적절 해 보이는 모듈로 그룹화하면됩니다. 상속 계층 구조에 어디에 넣을 지 걱정할 필요가 없습니다.
다른 종류의 코드 재사용은 기존 함수에서 작동하는 새로운 데이터 구조를 만드는 것입니다. 이것은 제네릭 및 형식 클래스와 같은 기능을 사용하여 기능적 언어로 처리됩니다. 예를 들어 Haskell의 Ord 유형 클래스를 사용 sort
하면 Ord
인스턴스 가있는 모든 유형 에서 함수 를 사용할 수 있습니다 . 인스턴스가없는 경우 쉽게 만들 수 있습니다.
Animal
예를 들어, 급지 기능 구현을 고려 하십시오 . 간단한 OOP 구현은 Animal
개체 컬렉션을 유지 관리하고 각 개체 feed
에 대해 메서드를 호출하여 모든 개체를 반복 합니다.
그러나 세부 사항에 도달하면 상황이 까다로워집니다. Animal
객체는 자연스럽게 종류의 음식이 먹고 무엇을 알고, 얼마나 그것은 전체 느낌을 위해 필요합니다. 그것은 않습니다 하지 음식이 유지되는 경우 자연적으로 알고 있고 그래서 얼마나 볼 수 있습니다 FoodStore
개체가 단지마다의 종속성이되었다 Animal
중 하나의 필드로, Animal
객체, 또는의 매개 변수로 전달 feed
하는 방법. 또는 Animal
클래스를보다 응집력 있게 유지 feed(animal)
하기 위해 FoodStore
객체 로 이동 하거나 클래스 AnimalFeeder
또는 이와 유사한 클래스의 가증을 만들 수 있습니다 .
FP에서는 Animal
항상 함께 그룹화되어 있는 필드에 대한 성향이 없으므로 재사용 가능성에 흥미로운 영향을 미칩니다. 당신의 목록이 말 Animal
필드이 좋아 함께, 기록 name
, species
, location
, food type
, food amount
, 등 또한 목록이 FoodStore
같은 필드 레코드를 location
, food type
하고 food amount
.
먹이의 첫 단계 (food amount, food type)
는 동물의 양에 대해 음수 로 해당 레코드 목록을 쌍 목록에 매핑하는 것입니다 . 그런 다음 각 유형의 음식의 양을 합하는 것과 같이 이러한 쌍으로 모든 종류의 작업을 수행하는 함수를 만들 수 있습니다. 이 함수들은 하나 Animal
또는 FoodStore
모듈 에 완벽하게 속하지는 않지만 두 가지 모두에 의해 재사용 성이 높습니다.
[(Num A, Eq B)]
재사용 가능하고 모듈화 된 유용한 기능을 수행하는 많은 함수 가 생길 수 있지만 어디에 넣을 것인지 또는 그룹으로 무엇을 부를 것인지 파악하는 데 어려움이 있습니다. 그 결과 FP 모듈은 분류하기가 더 어렵지만 분류는 훨씬 덜 중요합니다.