প্রকৃতপক্ষে, ওও কোডটি আবারো কম ব্যবহারযোগ্য এবং এটি নকশা অনুসারে। ওওপি-র পেছনের ধারণাটি হ'ল নির্দিষ্ট অংশের ডেটাগুলির নির্দিষ্ট অংশগুলিতে অপারেশনগুলি নির্দিষ্ট সুবিধাযুক্ত কোডের মধ্যে সীমাবদ্ধ করা যা হয় শ্রেণিতে বা উত্তরাধিকার শ্রেণিবিন্যাসের উপযুক্ত জায়গায়। এটি পরিবর্তনশীলতার বিরূপ প্রভাবকে সীমাবদ্ধ করে। যদি কোনও ডেটা কাঠামো পরিবর্তন হয় তবে কোডে কেবলমাত্র এতগুলি জায়গা রয়েছে যা দায়বদ্ধ হতে পারে।
অপরিবর্তনীয়তার সাথে, আপনার কোনও খেয়াল নেই যে প্রদত্ত কোনও ডেটা স্ট্রাকচারে কে পরিচালনা করতে পারে, কারণ আপনার ডেটার অনুলিপি কেউ পরিবর্তন করতে পারে না। এটি বিদ্যমান ডেটা স্ট্রাকচারগুলিতে কাজ করতে আরও নতুন ফাংশন তৈরি করে। আপনি কেবল ফাংশন তৈরি করে এটিকে মডিউলগুলিতে গোষ্ঠীভুক্ত করেন যা কোনও ডোমেন দৃষ্টিকোণ থেকে উপযুক্ত বলে মনে হয়। উত্তরাধিকার শ্রেণিবিন্যাসে এগুলি কোথায় ফিট করা যায় তা নিয়ে আপনাকে চিন্তা করার দরকার নেই।
অন্য ধরণের কোডের পুনঃব্যবহার বিদ্যমান ফাংশনগুলিতে কাজ করার জন্য নতুন ডেটা স্ট্রাকচার তৈরি করছে। জেনেরিকস এবং টাইপ শ্রেণীর মতো বৈশিষ্ট্যগুলি ব্যবহার করে এটি কার্যকরী ভাষায় পরিচালনা করা হয়। উদাহরণস্বরূপ, মধ্যে Haskell এর অধ্যাদেশ টাইপ বর্গ আপনি ব্যবহার করতে পারবেন sortএকটি সঙ্গে কোনো ধরনের উপর ফাংশন Ordউদাহরণস্বরূপ। উদাহরণগুলি ইতিমধ্যে বিদ্যমান না থাকলে তৈরি করা সহজ।
আপনার Animalউদাহরণ নিন এবং একটি খাওয়ানো বৈশিষ্ট্য বাস্তবায়নের বিবেচনা করুন। সোজা ও ওওপি বাস্তবায়ন হ'ল Animalঅবজেক্টের সংগ্রহ বজায় রাখা এবং সেগুলির feedপ্রতিটিতে পদ্ধতিটি কল করে লুপ করা ।
যাইহোক, আপনি বিশদে নেমে গেলে জিনিসগুলি জটিল হয়ে ওঠে। কোনও Animalবস্তু স্বাভাবিকভাবেই জানে যে এটি কী ধরণের খাবার খায় এবং পূর্ণ বোধ করার জন্য এটি কতটা প্রয়োজন। এটি খাবারটি কোথায় রাখা হয়েছে এবং কতটা পাওয়া যায় তা স্বাভাবিকভাবেই জানে না , তাই কোনও FoodStoreবস্তু কেবলমাত্র বস্তুর Animalক্ষেত্র হিসাবে Animal, বা feedপদ্ধতির পরামিতি হিসাবে উত্তীর্ণ হয়ে প্রত্যেকটির নির্ভরতা হয়ে দাঁড়িয়েছে । পর্যায়ক্রমে, Animalক্লাসটিকে আরও সংযুক্ত রাখার জন্য আপনি অবজেক্টে চলে যেতে feed(animal)পারেন FoodStore, বা আপনি এমন কোনও শ্রেণীর একটি ঘৃণা তৈরি করতে পারেন যা একটি 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)]পুনরায় ব্যবহারযোগ্য এবং মডিউলারের সাথে দরকারী স্টাফগুলি করে এমন একটি ফাংশনের সমাপ্তি শেষ করেছেন তবে সেগুলি কোথায় রাখবেন বা তাদেরকে একটি গ্রুপ হিসাবে কী ডাকা হবে তা নির্ধারণ করতে আপনার সমস্যা হয়। এর প্রভাবটি হ'ল এফপি মডিউলগুলি শ্রেণীবদ্ধ করা আরও কঠিন, তবে শ্রেণিবিন্যাস খুব কম গুরুত্বপূর্ণ।