আমরা ওওপিকে কোনও সিস্টেমের আচরণের মডেলিং হিসাবে ভাবতে পারি । মনে রাখবেন সিস্টেম নেই 'বাস্তব জগতে' থেকে অস্তিত্ব, যদিও বাস্তব জগতের রূপক কখনও কখনও উপযোগী হতে পারে আছে (যেমন "পাইপলাইনের", "কারখানা", ইত্যাদি)।
যদি আমাদের কাঙ্ক্ষিত সিস্টেমটি একবারে সমস্ত মডেল করার জন্য জটিল হয় তবে আমরা এটিকে ছোট ছোট টুকরো টুকরো টুকরো টুকরো করে কেটে ফেলতে পারি ("সমস্যাটি ডোমেন"), যা আরও ভেঙে জড়িত থাকতে পারে, এবং যতক্ষণ না আমাদের আচরণের সাথে টুকরো টুকরো হয়ে যায় until (আরও বা কম) কিছু অন্তর্নির্মিত ভাষা অবজেক্টের মতো একটি সংখ্যা, একটি স্ট্রিং, একটি তালিকা ইত্যাদি
আমাদের যখন এই সাধারণ টুকরাগুলি হয়ে যায়, তখন আমরা বৃহত টুকরোগুলির আচরণ বর্ণনা করতে তাদের একত্রিত করতে পারি, যা আমরা একসাথে আরও বড় টুকরোতে একত্রিত করতে পারি, এবং যতক্ষণ না আমরা সম্পূর্ণরূপে প্রয়োজনীয় ডোমেনের সমস্ত উপাদান বর্ণনা করতে পারি পদ্ধতি.
এটি এই "একত্রিত" পর্যায়ে যেখানে আমরা কিছু ক্লাস লিখতে পারি। আমরা ক্লাসগুলি লিখি যখন কোনও বিদ্যমান অবজেক্ট নেই যা আমাদের ইচ্ছা মতো আচরণ করে। উদাহরণস্বরূপ, আমাদের ডোমেনে "foos", "বার" নামে পরিচিত ফুগুলির সংগ্রহ এবং "বাজ" নামে পরিচিত বারগুলির সংগ্রহ থাকতে পারে। আমরা লক্ষ্য করতে পারি যে foos স্ট্রিংগুলির সাথে মডেল করার জন্য যথেষ্ট সহজ, তাই আমরা এটি করি। আমরা দেখতে পেয়েছি যে বারগুলিতে কিছু নির্দিষ্ট বাধা মেনে চলার জন্য তাদের বিষয়বস্তুর প্রয়োজন হয় যা পাইথনের প্রদত্ত কোনও কিছুর সাথে মেলে না, সেই ক্ষেত্রে আমরা এই সীমাবদ্ধতাটি প্রয়োগ করতে একটি নতুন শ্রেণি লিখতে পারি। সম্ভবত বাজেদের তেমন কোনও অদ্ভুততা নেই, তাই আমরা কেবল একটি তালিকা দিয়ে তাদের উপস্থাপন করতে পারি।
মনে রাখবেন আমরা পারে ঐ বস্তুগুলির (ফুগুলি, বার এবং bazs) প্রতি এক জন্য একটি নতুন শ্রেণী লিখতে, কিন্তু আমরা না প্রয়োজন ইতিমধ্যেই সঠিক আচরণ সঙ্গে কিছু যদি করতে। বিশেষত, কোনও শ্রেণিটি কার্যকর হওয়ার জন্য এটি কিছু সরবরাহ করতে হবে (ডেটা, পদ্ধতি, ধ্রুবক, উপশ্রেণী, ইত্যাদি), তাই আমাদের নিজস্ব কাস্টম ক্লাসের অনেক স্তর থাকলেও আমাদের অবশ্যই শেষ পর্যন্ত কিছু অন্তর্নির্মিত বৈশিষ্ট্যটি ব্যবহার করতে হবে ; উদাহরণস্বরূপ, আমরা যদি foos এর জন্য একটি নতুন ক্লাস লিখি তবে এটিতে কেবল একটি স্ট্রিং থাকতে পারে, তবে কেন foo ক্লাসটি ভুলে না গিয়ে বার ক্লাসটি পরিবর্তে সেই স্ট্রিংগুলি রাখবে? মনে রাখবেন যে ক্লাসগুলিও একটি অন্তর্নির্মিত বস্তু, তারা কেবল একটি বিশেষভাবে নমনীয়।
আমাদের ডোমেন মডেলটি একবার হয়ে গেলে, আমরা সেই টুকরোগুলির কয়েকটি নির্দিষ্ট উদাহরণ নিতে পারি এবং সেই মডেলটি নির্দিষ্ট করতে চাই এমন একটি সিস্টেমের "সিমুলেশন" তৈরি করতে পারি (উদাহরণস্বরূপ "মেশিন লার্নিং সিস্টেম ...")।
আমাদের এই সিমুলেশনটি একবার হয়ে গেলে, আমরা এটি চালাতে পারি এবং আরে প্রস্টো, আমাদের জন্য একটি ওয়ার্কিং (একটি সিমুলেশন) মেশিন লার্নিং সিস্টেম রয়েছে ... (বা আমরা অন্য যে মডেলিং করছিলাম)।
এখন, আপনার নির্দিষ্ট পরিস্থিতিতে আপনি একটি "বৈশিষ্ট্য নিষ্কাশনকারী" উপাদানটির আচরণের মডেল করার চেষ্টা করছেন। প্রশ্নটি হ'ল, এমন কোনও বিল্ট-ইন অবজেক্ট রয়েছে যা "ফিচার এক্সট্রাক্টর" এর মতো আচরণ করে, বা আপনার এটিকে সহজ জিনিসগুলিতে ভাঙতে হবে? দেখে মনে হচ্ছে ফিচার এক্সট্র্যাক্টররা ফাংশন অবজেক্টের মতো খুব বেশি আচরণ করে, তাই আমি মনে করি আপনার মডেল হিসাবে এগুলি ব্যবহার করা ভাল fine
এই ধরণের ধারণাগুলি সম্পর্কে শিখার সময় একটি জিনিস মনে রাখবেন যে বিভিন্ন ভাষা বিভিন্ন অন্তর্নির্মিত বৈশিষ্ট্য এবং অবজেক্ট সরবরাহ করতে পারে (এবং, অবশ্যই কিছু "অবজেক্ট" এর মতো পরিভাষাও ব্যবহার করে না!)। সুতরাং যে সমাধানগুলি একটি ভাষায় বোঝায় সেগুলি অন্য ভাষায় কম কার্যকর হতে পারে (এটি এমনকি একই ভাষার বিভিন্ন সংস্করণে প্রযোজ্য হতে পারে!)।
.তিহাসিকভাবে, প্রচুর ওওপি সাহিত্যের (বিশেষত "নকশার ধরণগুলি") জাভাতে ফোকাস করেছে, যা পাইথনের থেকে একেবারেই আলাদা। উদাহরণস্বরূপ, জাভা ক্লাসগুলি অবজেক্ট নয়, জাভাতে খুব শীঘ্রই ফাংশন অবজেক্ট ছিল না, জাভাতে কঠোর প্রকারের পরীক্ষা করা রয়েছে (যা ইন্টারফেস এবং সাবক্লাসিংকে উত্সাহ দেয়) যখন পাইথন হাঁসের টাইপিংকে উত্সাহ দেয়, জাভাতে মডিউল অবজেক্ট নেই, জাভা ইন্টিজার / ভাসে / ইত্যাদি। বস্তু নয়, জাভাতে মেটা-প্রোগ্রামিং / অন্তঃনির্ধারণের জন্য "প্রতিবিম্ব" দরকার হয় এবং আরও অনেক কিছু।
আমি জাভাতে যাবার চেষ্টা করছি না (অন্য উদাহরণ হিসাবে, অনেকগুলি ওওপি থিওরি স্মলটালকের চারপাশে ঘুরে বেড়ায়, যা আবার পাইথন থেকে খুব আলাদা), আমি কেবল এটি উল্লেখ করার চেষ্টা করছি যে আমাদের অবশ্যই প্রসঙ্গটি সম্পর্কে খুব সাবধানে চিন্তা করতে হবে এবং সীমাবদ্ধতাগুলি যেখানে সমাধানগুলি বিকশিত হয়েছিল এবং তা আমাদের অবস্থার সাথে মেলে কিনা।
আপনার ক্ষেত্রে, একটি ফাংশন অবজেক্টটি একটি ভাল পছন্দ বলে মনে হচ্ছে। যদি আপনি ভাবছেন যে কেন কিছু "সেরা অনুশীলন" নির্দেশিকাটি কোনও সম্ভাব্য সমাধান হিসাবে ফাংশন অবজেক্টগুলিকে উল্লেখ করে না, তবে এটি সম্ভবত কারণ হতে পারে যে সেই নির্দেশিকা জাভা পুরানো সংস্করণের জন্য লেখা হয়েছিল!