ที่จริงแล้วรหัส OO นั้นสามารถนำมาใช้ซ้ำได้น้อยกว่ามากและนั่นคือจากการออกแบบ แนวคิดเบื้องหลัง OOP คือการ จำกัด การทำงานของข้อมูลบางอย่างกับรหัสสิทธิพิเศษบางอย่างที่อยู่ในชั้นเรียนหรือในสถานที่ที่เหมาะสมในลำดับชั้นการสืบทอด สิ่งนี้ จำกัด ผลกระทบด้านลบของความไม่แน่นอน หากโครงสร้างข้อมูลมีการเปลี่ยนแปลงจะมีเพียงสถานที่มากมายในรหัสที่สามารถรับผิดชอบได้
ด้วยความไม่สามารถเปลี่ยนแปลงได้คุณไม่สนใจว่าใครสามารถทำงานกับโครงสร้างข้อมูลใด ๆ เพราะไม่มีใครสามารถเปลี่ยนสำเนาข้อมูลของคุณได้ สิ่งนี้ทำให้การสร้างฟังก์ชันใหม่เพื่อทำงานกับโครงสร้างข้อมูลที่มีอยู่ได้ง่ายขึ้นมาก คุณเพียงแค่สร้างฟังก์ชั่นและจัดกลุ่มให้เป็นโมดูลที่ดูเหมาะสมจากมุมมองของโดเมน คุณไม่ต้องกังวลว่าจะปรับตำแหน่งให้เข้ากับลำดับชั้นการสืบทอดได้อย่างไร
การใช้รหัสอีกประเภทหนึ่งคือการสร้างโครงสร้างข้อมูลใหม่เพื่อทำงานกับฟังก์ชันที่มีอยู่ สิ่งนี้ได้รับการจัดการในภาษาที่ใช้งานได้โดยใช้คุณสมบัติเช่นคลาสทั่วไปและคลาสประเภท ตัวอย่างเช่นคลาสประเภทOrdของ Haskell อนุญาตให้คุณใช้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 นั้นแยกได้ยากกว่า แต่การจำแนกประเภทมีความสำคัญน้อยกว่ามาก