वास्तव में, OO कोड बहुत कम पुन: प्रयोज्य है, और यह डिजाइन द्वारा है। OOP के पीछे का विचार कुछ विशेषाधिकार प्राप्त कोड के लिए डेटा के विशेष टुकड़ों पर संचालन को प्रतिबंधित करना है जो या तो वर्ग में या वंशानुक्रम पदानुक्रम में उपयुक्त स्थान पर है। यह परिवर्तनशीलता के प्रतिकूल प्रभावों को सीमित करता है। यदि एक डेटा संरचना बदलती है, तो कोड में केवल कई स्थान हैं जो जिम्मेदार हो सकते हैं।
अपरिवर्तनीयता के साथ, आपको परवाह नहीं है कि कौन किसी भी डेटा संरचना पर काम कर सकता है, क्योंकि कोई भी आपके डेटा की प्रतिलिपि नहीं बदल सकता है। यह मौजूदा डेटा संरचनाओं पर काम करने के लिए नए कार्यों को बहुत आसान बनाता है। आप बस फ़ंक्शन बनाते हैं और उन्हें उन मॉड्यूल में समूहित करते हैं जो एक डोमेन बिंदु से उचित लगते हैं। आपको यह चिंता करने की ज़रूरत नहीं है कि उन्हें वंशानुगत पदानुक्रम में कहाँ फिट किया जाए।
दूसरे प्रकार के कोड का उपयोग मौजूदा कार्यों पर काम करने के लिए नई डेटा संरचनाएं बना रहा है। यह सामान्य भाषा और प्रकार की कक्षाओं जैसी सुविधाओं का उपयोग करके कार्यात्मक भाषाओं में संभाला जाता है। उदाहरण के लिए, हास्केल का ओर्ड टाइप वर्ग आपको sortकिसी भी प्रकार के फ़ंक्शन का उपयोग एक Ordउदाहरण के साथ करने देता है । यदि वे पहले से मौजूद नहीं हैं तो उदाहरण बनाना आसान है।
अपना Animalउदाहरण लें , और एक खिला सुविधा को लागू करने पर विचार करें। सीधा ओओपी कार्यान्वयन Animalवस्तुओं के संग्रह को बनाए रखना है , और उन सभी के माध्यम से लूप करना है, उनमें से feedप्रत्येक पर विधि को कॉल करना है।
हालांकि, जब आप विवरण के लिए नीचे आते हैं तो चीजें मुश्किल हो जाती हैं। एक Animalवस्तु स्वाभाविक रूप से जानती है कि वह किस तरह का भोजन खाती है, और उसे पूरा महसूस करने के लिए उसे कितना खाना चाहिए। यह स्वाभाविक रूप से नहीं जानता कि भोजन कहाँ रखा गया है और कितना उपलब्ध है, इसलिए एक FoodStoreवस्तु बस हर एक की निर्भरता बन गई है Animal, या तो Animalवस्तु के एक क्षेत्र के रूप में, या feedविधि के एक पैरामीटर के रूप में पारित किया गया है। वैकल्पिक रूप से, रखने के लिए Animalवर्ग अधिक एकजुट, आप ले सकते हैं feed(animal)करने के लिए FoodStoreवस्तु, या आप एक नामक एक वर्ग का abomination बना सकता है AnimalFeederया कुछ इस तरह।
एफपी में, ए के क्षेत्रों के 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)]होते हैं जो उस के साथ उपयोगी सामान करते हैं, पुन: प्रयोज्य और मॉड्यूलर होते हैं, लेकिन आपको यह पता लगाने में परेशानी होती है कि उन्हें कहां रखा जाए या उन्हें एक समूह के रूप में क्या कहा जाए। इसका प्रभाव यह है कि एफपी मॉड्यूल को वर्गीकृत करना अधिक कठिन है, लेकिन वर्गीकरण बहुत कम महत्वपूर्ण है।